V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LukeXuan
V2EX  ›  问与答

有关密码的一些思考

  •  
  •   LukeXuan · 2014-12-25 14:47:57 +08:00 via Android · 3939 次点击
    这是一个创建于 3657 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今日看到12306被脱裤后许多v友都哭天喊地地去改密码…(还好我没用过12306…
    作为高中生没收入用不起1password 就构思了一种廉价的防脱裤的密码方案:
    一个唯一的master password
    一个每个账户独立的salt(为了方便记忆可以是这个账户的应用名 如alipay tmall)
    然后用md5或者其他不可逆的hash算法算出该账户的密码

    大概唯一的问题就是每次计算出密码比较麻烦吧…

    还有这种方案会不会有安全问题,比如:
    知道了一个hash值和它的salt值 可以求出相同master password但另外一个salt的hash值?
    38 条回复    2014-12-25 22:37:49 +08:00
    Layne
        1
    Layne  
       2014-12-25 14:52:43 +08:00
    搜索一下花密
    wy315700
        2
    wy315700  
       2014-12-25 14:55:15 +08:00
    现在的问题不在这里,你密码弱的话,salt也没用。
    LukeXuan
        3
    LukeXuan  
    OP
       2014-12-25 14:56:07 +08:00 via Android
    @Layne 好像是一样的idea 受教了
    LukeXuan
        4
    LukeXuan  
    OP
       2014-12-25 14:58:03 +08:00 via Android
    @wy315700 我现在讨论的不是强弱的问题啦 是用于应对以csdn为首的明文存储厂商的
    Layne
        5
    Layne  
       2014-12-25 15:02:20 +08:00
    @wy315700 我记得在github上有源码,有兴趣的话可以研究一下。
    我个别几个有可能需要在公共机器上登录的帐号的密码是通过花密生成的。
    大多数不会在不是自己的机器上登录的帐号都是用1Password生成和存储密码。
    wy315700
        6
    wy315700  
       2014-12-25 15:09:11 +08:00
    @LukeXuan 我的意思是,你这种方法大家都在用了,是防止不了脱裤的。


    @Layne 这种方法本质上不能增加安全性,安全性还是由原始的密码决定,只不过解密的时候多了个花密的解密而已,我记得密码学理论里有这么一句,多次hash不能增加安全性的。
    LukeXuan
        7
    LukeXuan  
    OP
       2014-12-25 15:27:39 +08:00 via Android
    @wy315700
    1. 我所说的pass, salt, hash是用户端自己计算的部分 而不是数据库中存储密码时进行的操作
    2. 我所讨论问题的前提是该用户有足够的安全意识 亦即 如果 他不进行这个操作 数据库使用非对称加密后的密文存储密码 即使数据库被脱裤 也无法在可承受的时间代价内通过获得的密文密码 破解出他的明文密码
    3. 而这种方法目的在于把脱裤的影响限制在被脱裤的服务内 而不导致其他服务的密码被获取
    wy315700
        8
    wy315700  
       2014-12-25 15:32:22 +08:00
    @LukeXuan 你这个本质上和一个长密码效果是一样的,只不过这个长密码是你用hash计算出来的,
    破解的时候,我不需要破解pass和salt,而只需要知道你本地hash的结果就可以登录到服务器了。
    LukeXuan
        9
    LukeXuan  
    OP
       2014-12-25 15:34:02 +08:00 via Android
    @wy315700
    防止脱裤不是用户能控制的 但是我认为这种方法可以控制被脱裤后的对其他账户影响 同时尽量减少记忆密码的麻烦
    LukeXuan
        10
    LukeXuan  
    OP
       2014-12-25 15:34:39 +08:00 via Android
    @wy315700 但是你只知道12306的密码而已 不能知道我alipay的密码
    wy315700
        11
    wy315700  
       2014-12-25 15:45:47 +08:00
    @LukeXuan 这么做 和你在12306设置一个密码,在alipay设置另一个密码 有什么区别呢。
    nealfeng
        12
    nealfeng  
       2014-12-25 15:48:17 +08:00
    可以用keepass,开源的。虽然不是特别好。
    USCONAN
        13
    USCONAN  
       2014-12-25 15:51:54 +08:00
    目前我是已經逐漸轉到 1Password,
    在這之前我的密碼是人肉計算,因為以前沒有特別方便的密碼管理的方式,特別是智能手機以前,所以人肉算法可以在保證一定程度的密碼複雜度的同時還能保證不會忘記密碼。

    計算過程大致是這樣
    根據註冊的服務,然後用美國記電話號碼的習慣反轉成數字,隔字換符後加入定期修改的固定字元。

    例如: 註冊 google.com,取 google,之後反轉為 466453,然後隔字 Shift 換符變成 4^6$5#,
    最後頭尾加入固定的字元變成 ***4^6$5#*** 這種造型。(固定字元會定期修改).
    daiv
        14
    daiv  
       2014-12-25 15:52:13 +08:00
    @nealfeng keepass 我也在用!
    LukeXuan
        15
    LukeXuan  
    OP
       2014-12-25 15:54:28 +08:00 via Android
    @wy315700 没区别 只是为了减少记忆高强度密码而已 毕竟不是那么好背的
    invite
        16
    invite  
       2014-12-25 15:57:16 +08:00
    直接上加密机,密码都在加密机里。

    所有认证通过接口通讯,没有任何数据库操作。
    Earthman
        17
    Earthman  
       2014-12-25 15:57:22 +08:00
    @wy315700 多次hash不能增加安全性的,这个是什么原理,能否简单明了地解释一下
    imn1
        18
    imn1  
       2014-12-25 15:57:55 +08:00
    你这个很多人想过,也包括我(我就自写了一个类似工具),最关键一点是每个人(每个客户端)的算法都要不同才行,否则知道算法的话,破主密码就所有站全破了
    LukeXuan
        19
    LukeXuan  
    OP
       2014-12-25 16:09:14 +08:00 via Android
    @imn1 大概破主密码难度和主密码的强度一致的吧 所以在这个层面上做好大概就行了?
    wy315700
        20
    wy315700  
       2014-12-25 16:28:00 +08:00
    @Earthman
    因为hash不是加密,hash只是一个单向映射函数。

    我说的其实是单纯多次hash不能增加安全性,很多密码学教材里都有写,但是没写原因,我想了一下

    b = hash(a)
    c = hash(hash(a))

    b和c的安全性是一样的

    如果hash不可逆向,那么唯一的办法就是暴力搜索a,只不过一个要做一次运算,一个要做两次运算。

    如果hash可逆,那么 a可以推出b,同理b也可以推出c



    如果要用salt,建议采用安全标准里的hmac,而不是大部分系统采用的 hash(pass + salt)的方法

    http://en.wikipedia.org/wiki/Hash-based_message_authentication_code
    LukeXuan
        21
    LukeXuan  
    OP
       2014-12-25 16:33:49 +08:00 via Android
    @wy315700 至少单向的hash是比明文安全的
    huyuaning
        22
    huyuaning  
       2014-12-25 16:36:30 +08:00
    我的密码策略是:基本密码@当前网站。
    如v2ex网站密码:k4n8K2B1!@#@v2ex
    OSC密码:k4n8K2B1!@#@osc
    QQ邮箱独立密码:k4n8K2B1!@#@qqmail
    wy315700
        23
    wy315700  
       2014-12-25 16:37:33 +08:00
    @LukeXuan 大部分不正常使用的hash和明文没本质区别的
    真的

    要真的安全性,上非对称加密才是真理
    LukeXuan
        24
    LukeXuan  
    OP
       2014-12-25 16:40:28 +08:00 via Android
    @wy315700 如何算不正常的加密呢

    非对称加密没有必要吧 毕竟不需要解密
    LukeXuan
        25
    LukeXuan  
    OP
       2014-12-25 16:42:30 +08:00 via Android
    @huyuaning 那我不是知道了一个…尝试一下就知道其他的密码了么
    不过应该可以逃脱大部分…毕竟脱裤出来那么多密码没有可能去枚举这样的组合
    hljjhb
        26
    hljjhb  
       2014-12-25 16:42:53 +08:00
    @nealfeng keepass哪里不好了?
    wy315700
        27
    wy315700  
       2014-12-25 16:43:57 +08:00
    @LukeXuan
    比如使用 md5,sha1

    比如没有salt,
    比如使用 password + salt的简单方法


    至于非对称加密,有一种挑战响应式认证标准

    客户端产生私钥,服务器端存储公钥

    认证的时候,服务器端发送一个随机字符串给客户端

    客户端使用私钥签名后发回给服务器端。

    服务器验证签名。

    签名验证通过就算是通过认证了。



    支付宝的数字签名系统就是这么工作的。
    银行的u盾也都是这么工作的。
    nealfeng
        28
    nealfeng  
       2014-12-25 16:47:40 +08:00
    @hljjhb 界面比较丑,操作流程不够简单,不过别的付费的我也没用过,只是纯主观感受
    LukeXuan
        29
    LukeXuan  
    OP
       2014-12-25 16:50:02 +08:00 via Android
    @wy315700 你所说的方法非对称加密方法都是要服务供应商支持才行的 而我是从用户的角度寻找方法保证自己的安全

    如果原密码足够强 md5还是不安全了么
    mcfog
        30
    mcfog  
       2014-12-25 16:51:27 +08:00
    http://www.passwordmaker.org/

    开源免费无中心,一直用着

    算法,长度,字符范围都可以配置,默认自动用根域名作盐,可配置加上用户名作盐

    全平台支持
    wy315700
        31
    wy315700  
       2014-12-25 16:53:10 +08:00
    @LukeXuan 不管密码如何安全,MD5都不安全。

    其实这里有一个误区,以为要找到相同的密码才可以,但是其实不然

    其实需要做的是,找到和你原来密码md5值一样的密码,然后我就可以用那个密码进行登录了。

    而MD5和SHA1的碰撞是相当容易的。




    @nealfeng 1P你值得拥有,30美元而已,这么多密码绝对值这个价格。
    LukeXuan
        32
    LukeXuan  
    OP
       2014-12-25 16:58:35 +08:00 via Android
    @wy315700 md5碰撞已经不安全了么 那请问有什么较为安全的不可逆hash
    wy315700
        33
    wy315700  
       2014-12-25 17:02:04 +08:00
    @LukeXuan

    sha2家族还可以用

    sha256 sha512之类的还都可以用。
    zomco
        34
    zomco  
       2014-12-25 18:57:43 +08:00 via iPhone
    我的密码策略是:基础密码+附加密码
    附加密码是自己在该网站做过印象最深刻的事情,比如QQ密码:abc123biaobai
    密码可以被破解,但人心最难猜解
    heiybb
        35
    heiybb  
       2014-12-25 20:59:58 +08:00
    @Layne 能否帮忙做个测试?
    我用花密
    记忆密码为:714154511 区分代号为:QQ
    生成16位码为:Ke9209418beB7B13
    不知道在不同的电脑上,记忆密码和区分代号相同时生成的码是否一样呢
    ChanneW
        36
    ChanneW  
       2014-12-25 21:05:16 +08:00
    @heiybb 肯定一样的啊,算法是固定的.不然换电脑怎么登录.
    Layne
        37
    Layne  
       2014-12-25 21:08:07 +08:00
    @heiybb 一样的,算法是固定的,只依赖主密码,并且区分代号会区分大小写
    luoweihua7sync
        38
    luoweihua7sync  
       2014-12-25 22:37:49 +08:00
    @huyuaning 正准备用这种方案,你竟然已经在用了
    常用网站用这种方案,
    其他一些不常用的论坛,用第三方如kp,lp等插件或者软件了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2660 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:02 · PVG 23:02 · LAX 07:02 · JFK 10:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.