当前位置:  开发笔记 > 人工智能 > 正文

.NET框架中最安全的哈希算法是什么?

如何解决《.NET框架中最安全的哈希算法是什么?》经验,为你挑选了2个好方法。

生成的哈希的大小和算法的速度并不重要.我真的只对它是最安全的选择感兴趣.我也不想使用任何第三方库.

我正在使用的.NET框架的版本,如果3.5有任何区别.



1> Greg Beech..:

我认为SHA512将是内置哈希算法的最佳选择.它是非常安全算法的最大哈希形式.

此外,不要忘记使用salt来帮助保护哈希免受字典攻击.


在答案的时候SHA512可能就足够了 - 但是现在任何关于.Net中安全散列的讨论都需要考虑PBKDF2(.Net支持).

2> Keith..:

您声明算法的速度并不重要,但实际上它是必不可少的.

很大程度上取决于'安全'的定义,SHA512(几乎)不可能逆转,但实际上它很容易暴力攻击它.

这是因为它很快 - 您可以将其视为SHA'家族'的基本设计缺陷,因为它们的设计非常快.

这是一个问题 - SHA512实现它的设计目标是非常快(它不会慢很多SHA1)但是如果你是一个黑客尝试暴力密码,这使得它更容易破解.10年甚至5年前,一场严重的蛮力攻击本来是不可能的,现在它是一些花哨的显卡或一些云时间.

这就是密钥拉伸算法的用武之地 - 它们使构建密码哈希的过程故意变慢.慢到足以让用户检查单个哈希不会注意到,但是暴力攻击需要花费太长时间.

密钥拉伸算法的一个很好的例子是RFC2898或PBKDF2 - 它使用长盐并执行数千次SHA算法来创建一个重现缓慢的哈希.

.Net有一个本机实现: Rfc2898DeriveBytes

他们使用它System.Web.Crypto.HashPassword,但你可以轻松地查看他们在其他地方使用它的来源.

在我的机器上(一台相当垃圾的旧笔记本电脑)单个.Net Rfc2898DeriveBytes散列1000次迭代(默认值)需要大约50ms,而我可以在一秒钟内暴力约250,000个SHA512哈希.

所以在.Net中,现在最安全的选择是使用Rfc2898DeriveBytes.

然而RFC2898/PBKDF2确实有一个弱点 - 虽然它很慢并行计算变得越来越便宜,并且它不需要太多内存来构建每个哈希.现在它是非常强大的,但在5年或10年内呢?

所以下一代是像bcrypt/scrypt这样的算法,它们被设计为每个哈希使用大量内存,使得并行执行变得昂贵.虽然有.Net实现,但是还没有原生的实现(并且)我会谨慎使用它直到有用 - 使用这些会影响并发登录(如果用于密码)之类的东西,所以介绍早期采用者面临很大风险.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有