这个问题是重复的,但是我觉得有必要给出这个问题。原件发布于 2012 年:大约 5 年前,NIST 甚至还没有发布最终规范。
这个问题或多或少与原始问题相同。是否对 SHA3 进行了足够的研究以被认为在高价值情况下是安全的,并且与它的前身 SHA2 相比,使用它是否有优势。基本上,我们应该使用它吗?
这个问题是重复的,但是我觉得有必要给出这个问题。原件发布于 2012 年:大约 5 年前,NIST 甚至还没有发布最终规范。
这个问题或多或少与原始问题相同。是否对 SHA3 进行了足够的研究以被认为在高价值情况下是安全的,并且与它的前身 SHA2 相比,使用它是否有优势。基本上,我们应该使用它吗?
我不相信我们应该这样做。SHA-3肯定有一些不错的 功能,但由于我在下面列出的原因,我可能会建议暂时使用 SHA-2 或 BLAKE2。甚至NIST 自己也说:
目前无需将应用程序从 SHA-2 转换为 SHA-3。
也就是说,你可能还在想“为什么不”?
一个。所有五位决赛选手的表现都足够好,可以在大多数应用中使用。
湾。五个决赛入围者中没有一个对每个应用程序都是最好的,并且没有一个对 SHA-2 算法提供真正引人注目的改进。
C。基于 ARX 的算法 BLAKE 和 Skein 在软件中表现非常出色。
d。Keccak 在硬件实现中的吞吐量/面积性能方面具有明显优势。
e. 在大多数软件实现中,Grøstl 和 JH 比其他三种算法慢得多。
湾。由于 SHA-2 是一个基于 ARX 的设计,它有一些与 BLAKE 和 Skein 相同的重要设计元素,尽管它们都与 SHA-2 没有密切关系。然而,未来适用于 SHA-2 的密码分析工具似乎更有可能适用于 BLAKE 或 Skein,而不是其他三个决赛选手。
* 回想一下,我们在这里讨论的是加密散列函数,不一定是密码散列函数或 KDF。
一些可能值得花时间阅读的内容:
您应该使用最强的密码,SHA3 似乎是合适的。尽管如此,你已经超前了,因为几乎没有人使用它。甚至 OpenSSL 也不支持 SHA3。问题是,通常认为 SHA2 仍然是安全的,对于复杂的系统,最好选择 SHA2 而不是 SHA3 以避免不兼容问题。
看这张图表:http: //valerieaurora.org/hash.html
你认为你应该使用什么?
作为一般规则,您应该使用当时可用的最强散列方法(在本例中为 SHA-3),除非您有令人信服的理由不这样做,例如:
兼容性
表现
监管要求(例如,必须使用 FIPS 验证的加密实施)
因此,如果您不能使用 SHA-3,那么最好使用 SHA-2。