聊聊用户密码加密策略 [复制链接]

 
帖子地址已经复制到剪贴板
 
酷客 2022-6-27 835

以这个论坛为例,一般都是怎么去保护注册用户的密码,目前我自己用的策略是对明文密码和配合随机加密盐进行md5加密。

最新回复 (17)
  • a123321 2022-6-27
    2
    像密码这种不需要再读取到原值的就直接散列就行。加盐,hash,怕不安全就用复杂点的  hash  多反复加盐  hash。
  • 酷客 2022-6-27
    3
    Rivalsa 像密码这种不需要再读取到原值的就直接散列就行。加盐,hash,怕不安全就用复杂点的 hash 多反复加盐 hash。
    可以,疯狂叠buff[em_7]
  • bing 2022-6-27
    4
    Rivalsa 像密码这种不需要再读取到原值的就直接散列就行。加盐,hash,怕不安全就用复杂点的 hash 多反复加盐 hash。
    请教一下,  对于随机盐,  加一次和加多次的安全性是一样的吗?  这个什么论证吗?
  • a123321 2022-6-27
    5
    bbing 请教一下, 对于随机盐, 加一次和加多次的安全性是一样的吗? 这个什么论证吗?
    这个我之前还真没想过,也有可能多加盐不会提高安全性,我也刚接触这方面知识,目前还解答不了这个问题。
  • 总版主 2022-6-27
    6
    bbing 请教一下, 对于随机盐, 加一次和加多次的安全性是一样的吗? 这个什么论证吗?
    理论上加一次salt就已经无敌了,当然叠加多次肯定更安全。但是也要考虑处理的速率问题,虽然影响应该不大。
  • bing 2022-6-27
    7
    总版主 理论上加一次salt就已经无敌了,当然叠加多次肯定更安全。但是也要考虑处理的速率问题,虽然影响应该不大。
    是不是和算法有关,  比如假设hash和salt都是线性的,  那么对密码A,  多次组合操作后的结果可能是(((A  +  B)  *  C  +  D)  *  E  +  F)  *  G,  最后可以等价于X  *  A  +  Y,  相当于变成一次操作了...  不过不确定这样分析对不对
  • 十年_张益达 2022-6-27
    8
    bbing 是不是和算法有关, 比如假设hash和salt都是线性的, 那么对密码A, 多次组合操作后的结果可能是(((A + B) * C + D) * E + F) * G, 最后可以等价于X * A + Y ...
    感觉合理
  • 酷客 2022-6-27
    9
    bbing 是不是和算法有关, 比如假设hash和salt都是线性的, 那么对密码A, 多次组合操作后的结果可能是(((A + B) * C + D) * E + F) * G, 最后可以等价于X * A + Y ...
    很有道理
  • dousha99 2022-6-27
    10
    bbing 是不是和算法有关, 比如假设hash和salt都是线性的, 那么对密码A, 多次组合操作后的结果可能是(((A + B) * C + D) * E + F) * G, 最后可以等价于X * A + Y ...
    大部分    hash    是非线性的;线性的    hash    是不能作为密码学摘要函数使用的,最多作为其他用途的信息摘要算法用。 
  • dousha99 2022-6-27
    11
    目前不再推荐使用  MD5  作为存储密码的散列函数。MD5  的已知密文碰撞构造已经有解,如果有源码泄露或者对方猜到了你的具体算法实现的话就和明文库没有差别了。

    推荐使用  SHA256  同等或者更强的散列函数。可以通过  versioning  的方式(比如开头贴个标签什么的,可以参考  PHP  的方案)兼容旧用户的密码处理策略并提醒仍在使用弱散列函数的用户更新密码,这样你就可以为他们生成新的强散列值而不需要用户重新注册。
  • 酷客 2022-6-27
    12
    dousha99 目前不再推荐使用 MD5 作为存储密码的散列函数。MD5 的已知密文碰撞构造已经有解,如果有源码泄露或者对方猜到了你的具体算法实现的话就和明文库没有差别了。 推荐使用 SHA256 同等或者更强 ...
    受教了[em_2]
  • 二花 2022-6-28
    13

    我三月份刚好有翻译过一个密码学系列,下面这篇是讲  KDF  密钥导出函数的,是专门设计用于字符密码的转换与校验的,也被称作慢  hash  算法。权做推荐:

    写给开发人员的实用密码学(三)—— MAC 与密钥派生函数 KDF

  • 二花 2022-6-28
    14
    其实提升  Hash  算法的碰撞难度,主要就是使算法的计算速度足够的慢,而且堵死提升计算速度的捷径,从而提升安全性。

    KDF  目前主要从如下三个维度提升  hash  碰撞难度:

    -  时间复杂度:对应  CPU/GPU  计算资源
    -  空间复杂度:对应  Memory  内存资源
    -  并行维度:使用无法分解的算法,锁定只允许单线程运算

    KDF  的主要设计手段,就是是加盐,以及多次迭代。这种设计方法被称为「密钥拉伸  Key  stretching」。

    一直很火的比特币挖矿,其底层也是类似的加密  hash  算法,挖矿用的  Hash  函数被设计成需要消耗大量计算资源和大量内存,并且很难直接通过硬件设备实现,也就难以设计专用硬件来加速计算,这被称作「工作量证明  Hash  函数」。
    挖矿的  Hash  函数要求使用  50MB  甚至  1GB  的缓存来完成对应的计算工作。
  • 二花 2022-6-28
    15
    dousha99 目前不再推荐使用 MD5 作为存储密码的散列函数。MD5 的已知密文碰撞构造已经有解,如果有源码泄露或者对方猜到了你的具体算法实现的话就和明文库没有差别了。 推荐使用 SHA256 同等或者更强 ...
    存密码的话,还是建议使用专用的  KDF  算法,如  scrypt  argon2,scrypt  算是比较流行的了,各语言应该都有对应的库可用。
  • 总版主 2022-6-28
    16
    md5即使碰撞成功也不可逆,当然也可以用彩虹表的方式撞库。对于个人使用来说,md5依旧是最好的选择,使用更复杂的加密算法并没有什么必要,只会徒增处理压力和降低速率。对于企业用户来说,本身就需要多因素认证方式,采用再强大的加密算法都不如多因素认证来的更安全。
  • a123321 2022-6-29
    17
    要不要考虑一下用  SM3  进行散列?
返回
创建新帖