我读到 SHA-1 正在从 FIPS 180-2 标准中退役。
显然 SHA-1 的弱点导致了这个决定。谁能详细说明该决定的依据?在商业应用中使用 SHA-1 是否有影响?
我真正的问题是:
- 各种类库和平台对 SHA-2 的支持情况如何?
- 我应该尝试迁移到 SHA-2吗?
对主流平台感兴趣:.NET、Java、C/C++、Python、Javascript等。
我读到 SHA-1 正在从 FIPS 180-2 标准中退役。
显然 SHA-1 的弱点导致了这个决定。谁能详细说明该决定的依据?在商业应用中使用 SHA-1 是否有影响?
我真正的问题是:
对主流平台感兴趣:.NET、Java、C/C++、Python、Javascript等。
在过去的几年里,Sha1、Sha0、md4 和 md5 都被发现是不安全的。问题是,如果攻击者可以生成 2 条不同的消息,产生相同的哈希结果,这称为冲突。这会给 PKI、密码管理、文件完整性检查等带来很多问题。目前 sha1 仅提供 2^52 位的安全性,这是攻击者可以触及的。其中 SHA-256(sha2 系列的最小成员)提供 2^256 位。
所有平台都应具有 SHA-256 实现,尽管并非所有平台都是本机的。在 PHP 中,您必须使用 mhash 扩展。一些平台不提供安全的哈希函数相当令人困惑,我真的相信这是因为他们不关心安全性。在 PHP 的情况下,我知道他们不关心 secuirty的事实。
目前 SHA-2 没有任何问题,并且有很大的安全边际。如果你真的很偏执,你可以使用 SHA-512。SHA-3 将在 2012 年推出,您应该使用 SHA-2 像您的PASSWORDS一样修补任何可能的内容,然后尽可能使用 SHA-3,但 SHA-512 会在很长一段时间内使用。
Windows Vista 及更高版本在 Microsoft Enhanced RSA 和 AES Cryptographic Provider for CryptoAPI 中支持 SHA-2,并且 .NET Framework 从 .NET 1.1 开始支持 SHA-2。
现在大多数平台都支持 SHA-2 系列。但是,SHA-1 仍在许多应用程序中使用,例如 SSL,并且将使用一段时间。
“SHA-3”的竞赛正在进行中。当新的 SHA-3 标准到来时,从 SHA-1 跳到新标准可能是合理的。