首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PasswordDeriveBytes vs Rfc2898DeriveBytes,过时了,但速度更快

问PasswordDeriveBytes vs Rfc2898DeriveBytes,过时了,但速度更快
EN

Stack Overflow用户
提问于 2009-08-31 10:54:32
回答 3查看 19K关注 0票数 18

我正在开发一个基于从SymmetricAlgorithm继承的类的加密功能,比如TripleDes、DES等。

基本上,有两个选项可以为我的算法类PasswordDeriveBytes和Rfc2898DeriveBytes生成一致的键和IV,这两个类都继承自DeriveBytes抽象类。

在.NET框架中,PasswordDeriveBytes.GetBytes()方法被标记为过时,而推荐使用Rfc2898DeriveBytes.GetBytes(),因为它符合PBKDF2标准。然而,根据我的测试,在Rfc2898DeriveBytes类中调用相同的GetBytes()方法几乎比在PasswordDeriveBytes类中慢15倍,这导致意外的CPU使用率(总是高于50%)。

以下是一些测试数据:

  • 迭代次数:100
  • 算法类型:DES
  • 原始文本:"I'm a test key,encrypt me“
  • Time: 100

​

根据测试结果,Rfc2898DeriveBytes在生产环境中的性能是不可接受的。

以前有没有人注意到这个问题?有没有什么解决方案可以在不影响性能的情况下使用标准的解决方案?使用过时的方法(可能在未来的版本中删除)有任何风险吗?

谢谢你们!

编辑:

也许我找到问题所在了..。PasswordDeriveBytes的默认迭代计数为100,而Rfc2898DeriveBytes的默认迭代计数为1000。在我将它们更改为与1000相同的数字后,执行Rfc2898DeriveBytes的时间仅为原来的两倍。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-31 11:07:22

票数 10
EN

Stack Overflow用户

发布于 2009-08-31 11:14:42

它们不是一回事。

Rfc2898DeriveBytes是PBKDF2的一种实现。PasswordDeriveBytes是PBKDF1的一种实现。与PBKDF1相比,PBKDF2使用不同的方法和更多的轮数生成不同的输出。

用于密钥派生的口令散列函数,如这些函数,应该是很慢的。这就是问题的关键--这使得破解它们变得更加困难。

这两个函数不兼容,而且PasswordDeriveBytes的安全性也不高。

票数 27
EN

Stack Overflow用户

发布于 2012-02-02 03:24:56

我认为你错过了派生字节的要点。它应该是很慢的。它故意使用缓慢的算法,这是巧妙的技巧无法加速的。典型的“迭代次数”参数应该在2^16-2^20范围内,并在用户输入密码和生成密钥之间引入0.1-0.5秒的延迟。其目的是防御“懒惰的无知用户”选择的弱密码,并放慢暴力搜索的速度。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1356899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档