Hash 什么';bcrypt和多次散列的区别是什么?

Hash 什么';bcrypt和多次散列的区别是什么?,hash,passwords,password-protection,bcrypt,Hash,Passwords,Password Protection,Bcrypt,怎么会比,比方说, def md5lots(password, salt, rounds): if (rounds < 1) return password else newpass = md5(password + salt) return md5lots(newpass, salt, rounds-1) def MD5批次(密码、盐、轮数): 如果(轮数

怎么会比,比方说,

def md5lots(password, salt, rounds):
    if (rounds < 1)
        return password
    else
        newpass = md5(password + salt)
        return md5lots(newpass, salt, rounds-1)
def MD5批次(密码、盐、轮数):
如果(轮数<1)
返回密码
其他的
newpass=md5(密码+salt)
返回MD5批次(新通行证、盐、1轮)

考虑到它的炒作,我感觉比我聪明的人已经发现bcrypt比这更好。有人能解释一下“智能外行”术语的区别吗?

您实际上是在谈论实现或基于密码的密钥派生功能。实际上,它与BCrypt是一样的,优点是可以延长导出密码所需的CPU时间。与BCrypt相比,这种方法的优势在于,通过了解密码的“迭代次数”,当需要增加密码时,无需重置数据库中的所有密码。只要让你的算法像在第n次迭代(其中n是前一次迭代计数)那样拾取最终结果,然后继续

建议您使用一个合适的PBKDF2库,而不是创建自己的库,因为让我们面对它,就像所有加密一样,您知道某个东西是否安全的唯一方法是是否已通过interwebs“测试”。(见附件)

使用此方法的系统:
.NET已经实现了一个库。看到了吗
Mac、linux和windows文件加密使用此加密方法的多个(10000)版本来保护其文件系统。
Wi-Fi网络通常使用这种加密方法进行安全保护

谢谢你提出这个问题,这迫使我研究保护密码的方法


TTD

bcrypt和MD5多次散列之间有三个显著差异:

  • 输出的大小:MD5为128位(16字节),bcrypt为448位(56字节)。如果在数据库中存储数百万个哈希,则必须考虑这一点
  • 针对MD5的冲突和预映像攻击是可能的
  • 随着cpu的功能越来越强大,Bcrypt可以配置为进行越来越多的迭代
  • 因此,使用MD5盐腌和拉伸不如使用bcrypt安全。这个问题可以通过选择比MD5更好的哈希函数来解决


    例如,如果选择SHA-256,输出大小将为256位(32字节)。如果salting和stretching可以像bcrypt那样配置为增加迭代次数,那么这两种方法之间除了存储结果散列所需的空间量之外没有什么区别。

    主要区别是MD5和其他用于验证数据的散列函数被设计为快速的,bcrypt()被设计得很慢

    验证数据时,您需要速度,因为您希望尽可能快地验证数据

    当您试图保护凭据时,速度对您不利。具有密码哈希副本的攻击者将能够执行更多的暴力攻击,因为MD5和SHA1等执行成本较低

    相比之下,bcrypt的价格是故意昂贵的。当一个或两个真正的用户尝试进行身份验证时,这一点无关紧要,但暴力的成本要高得多。

    严格地说,bcrypt实际上加密了文本:

    OrpheanbeholdersCrysis

    64次

    但它使用的密钥是从您的密码和一些随机生成的salt派生的

    密码哈希不是哈希 “密码散列算法”(如bcrypt)的真正优点是它们使用了大量RAM

    SHA2的设计初衷是速度快。如果您是一个实时web服务器,并且希望验证文件完整性,那么您需要运行速度非常快、资源使用率非常低的东西。这是密码散列的对立面

    • SHA2设计为快速
    • SHA2可以使用128字节的RAM进行操作
    • SHA2易于在硬件中实现
    • 我有一个U盘设备,每秒可以计算3.3亿个哈希
    • 事实上,我拥有17个
    如果您多次执行“快速”散列(例如,10000是a),那么您并没有真正添加任何安全性

    您需要的是难以在硬件中实现的哈希。你需要的是一个在GPU上很难并行的哈希

    在过去几十年中,我们了解到RAM是减缓密码散列尝试的关键。自定义硬件在执行原始计算方面表现出色(事实上,只有1%的CPU专用于计算,其余的专用于将机器指令快速地转换为某种东西;预取、无序执行、分支预测、缓存)。定制硬件的方法是使算法必须接触大量RAM

    • SHA2:128字节
    • bcrypt:4kb
    • scrypt(可配置):16 MB的LiteCoin
    • Argon2(可配置):文档示例中的64MB
    密码散列并不意味着简单地多次使用快速散列

    • 现代推荐的bcrypt成本系数为12;因此,计算大约需要250毫秒
    • 您必须对SHA2执行大约330000次迭代,才能在现代单核CPU上实现这一时间成本
    但是我们回到我的2.5W,USB,SHA2记忆棒,它是330 mHash/秒。为了抵御这种情况,必须进行8300万次迭代

    • 如果您试图只增加CPU成本:您正在损失
    • 您必须添加内存成本

    bcrypt已经有21年的历史了,它只使用4KB。但是它仍然比任何数量的MD5、SHA-1或SHA2散列要好得多。

    虽然这个问题已经得到了回答,但我想指出BCrypt和您的
    Eksblowfish(cost, salt, key)
      state = InitState()
      state = ExpandKey(state, salt, key)
      repeat (2^cost)
        state = ExpandKey(state, 0, key)
        state = ExpandKey(state, 0, salt)
      return state