在网上流传了所有关于md5 漏洞利用的文章之后,我正在考虑切换到另一种哈希算法。据我所知,它一直是众多 DBA 的首选算法。使用 MD5 代替 (SHA1, SHA256, SHA384, SHA512) 有那么大的好处,还是纯粹的性能问题?
您还推荐什么其他哈希(考虑到数据绑定应用程序作为平台)?我目前正在使用加盐哈希(MD5 加盐哈希)。请同时考虑 md5 文件哈希和密码哈希。
在网上流传了所有关于md5 漏洞利用的文章之后,我正在考虑切换到另一种哈希算法。据我所知,它一直是众多 DBA 的首选算法。使用 MD5 代替 (SHA1, SHA256, SHA384, SHA512) 有那么大的好处,还是纯粹的性能问题?
您还推荐什么其他哈希(考虑到数据绑定应用程序作为平台)?我目前正在使用加盐哈希(MD5 加盐哈希)。请同时考虑 md5 文件哈希和密码哈希。
使用 salted md5 作为密码是个坏主意。不是因为 MD5 的加密弱点,而是因为它速度快。这意味着攻击者可以在单个 GPU 上每秒尝试数十亿个候选密码。
您应该使用故意慢速哈希构造,例如 scrypt、bcrypt 和 PBKDF2。简单的加盐 SHA-2 不够好,因为与大多数通用哈希一样,它很快。查看如何安全地散列密码?有关您应该使用什么的详细信息。
使用 MD5 来确保文件完整性可能会也可能不会是一个实际问题,具体取决于您的具体使用场景。
针对 MD5 的攻击是碰撞攻击,而不是原像攻击。这意味着攻击者可以生成具有相同哈希的两个文件,如果他可以控制这两个文件。但是他无法匹配他没有影响的现有文件的哈希值。
我不知道这些攻击是否适用于您的应用程序,但我个人会开始迁移,即使您认为它不适用。太容易忽略一些事情了。安全总比后悔好。
目前在这种情况下最好的解决方案是 SHA-2 (SHA-256)。一旦 SHA-3 标准化,它也将是一个不错的选择。
为了完成@CodesInChaos 的回答,经常使用 MD5 是因为Tradition,而不是因为性能。处理数据库的人与处理安全的人不同。他们经常认为使用弱算法没有问题(例如,查看MySQL 用于散列密码的算法的笑话)。他们使用MD5是因为他们曾经使用过MD5并且习惯于使用MD5。
绩效的讨论多于衡量;然而,从逻辑上讲,如果没有什么可衡量的,就不会有性能问题。使用基本 CPU 的一个内核,您可以使用 MD5 每秒散列超过 400 MB,使用 SHA-1 可以接近 300 MB/s,使用 SHA-256 可以达到 150 MB/s。另一方面,一个像样的硬盘将以更低的速率产生数据(通常为 100 到 120 MB/s),因此散列函数几乎不会成为瓶颈。因此,相对于数据库中的散列,没有性能问题。
对于散列函数,通常的建议是:
不要这样做。您不应该使用基本的加密算法,而应该使用组合了几种算法的协议,以便它们共同提供一些安全功能(例如,具有机密性和完整性的数据传输)。
真的,不要这样做。对于存储密码(更准确地说是密码验证令牌),不要自定义混合散列函数和盐;使用专门为此用途研究过的结构。这通常意味着 bcrypt 或 PBKDF2。
如果哈希函数确实可以完成这项工作,那么请使用 SHA-256。只有当 SHA-256 的一些严重问题(很可能是它的性能)已经被适当地检测和测量时,才考虑使用任何其他功能。
我目前正在使用加盐哈希(MD5 加盐哈希)。
如果您要对 MD5 哈希值进行加盐处理,那么您肯定不想使用 MD5。听起来您需要使用 PBKDF2 或 bcrypt。
据我所知,它一直是众多 DBA 的首选算法。
这不是一个令人信服的理由。
我曾与许多在一般技术方面至少落后 5 年的 DBA 合作过(不使用版本控制、未格式化的 perl 脚本等)。他们可能是特别糟糕的 DBA,但我认为它带有不改变事物的极其保守的心态。
只是为了补充已经给出的答案(其中大部分都很好),我们现在有一个真实的例子,说明数据泄露(Ashley Madison)导致整个密码表泄露。他们使用 bcrypt 和随机盐来散列密码。一位安全研究人员决定采用这些哈希值并暴力破解它们。这是结果
由于这一切,bcrypt 对任何试图破解 Ashley Madison 转储的人提出了艰巨的要求,至少有两个原因。首先,4,096 次散列迭代需要大量的计算能力。在 Pierce 的案例中,bcrypt 将他的四 GPU 破解设备的速度限制为每秒 156 次猜测。其次,由于 bcrypt 哈希是加盐的,他的钻机必须一次猜测每个哈希的明文,而不是全部一致。
“是的,没错,每秒 156 次哈希,”皮尔斯写道。“对于习惯破解 MD5 密码的人来说,这看起来很令人失望,但它是 bcrypt,所以我会尽我所能。”
皮尔斯在超过 4,000 大关后放弃了。他估计,要在 Pierce 有限的池中针对 RockYou 密码运行全部 600 万次哈希,需要高达 19,493 年的时间。Ashley Madison 转储中总共有 3600 万个散列密码,完成这项工作需要 116,958 年。
归根结底,他唯一能破解的只是简单得可笑或普通的密码(比如“123456”)。