tsh*_*hao 17 .net cryptography pbkdf2 rfc2898
我正在研究基于从SymmetricAlgorithm继承的类的加密功能,例如TripleDes,DES等.
基本上有两种方法可以为我的算法类生成一致的密钥和IV,PasswordDeriveBytes
并且Rfc2898DeriveBytes
都继承自DeriveBytes抽象类.
该PasswordDeriveBytes.GetBytes()
方法在.NET框架中标记为过时,建议使用Rfc2898DeriveBytes.GetBytes(),因为它与PBKDF2标准匹配.但是,根据我的测试,GetBytes()
在Rfc2898DeriveBytes类中调用相同的方法几乎比类中的方法慢15倍PasswordDeriveBytes
,这导致意外的CPU使用率(总是高于50%).
这是一些测试数据:
基于测试,Rfc2898DeriveBytes
在生产环境中不良性能是不可接受的.
之前有没有人注意到这个问题?任何解决方案我仍然可以使用标准的解决方案而不会达到性能?使用过时方法的任何风险(可能在将来的版本中删除)?
多谢你们!
编辑:
可能我发现问题出在哪里...默认的迭代计数数为PasswordDeriveBytes
100,而for Rfc2898DeriveBytes
为1000.在我将它们更改为与1000相同的数字后,执行Rfc2898DeriveBytes
只有两倍.
Bla*_*ura 26
他们不是一回事.
Rfc2898DeriveBytes是PBKDF2的实现.PasswordDeriveBytes是PBKDF1的实现.PBKDF2使用不同的方法生成不同的输出,并且比PBKDF1产生更多的轮次.
用于密钥派生的密码散列函数(例如这些函数)应该很慢.这就是重点 - 这使得它们更难破解.
这两个函数不兼容,PasswordDeriveBytes几乎不安全.
小智 10
我认为你错过了衍生词的观点.它应该很慢.它故意使用慢速算法,这种算法无法通过巧妙的技巧加速.典型的"迭代次数"参数应该在2 ^ 16-2 ^ 20范围内,并且在用户输入密码和生成密钥之间引入0.1-0.5秒的延迟.目的是防止"懒惰的无知用户"选择的弱密码并减慢暴力搜索.
归档时间: |
|
查看次数: |
17302 次 |
最近记录: |