我正在尝试理解这个密钥派生函数,我有一些问题
1)在C#中,似乎Rfc2898DeriveBytes使用SHA1实现它,但我想尝试使用SHA512以获得更高的安全性。如何在C#中将SHA512用于PBKDF2?
2)我读到了有关哈希冲突的内容,但我还没有理解它,所以有适当长度的盐和哈希来获得不错的安全性吗?
答案 0 :(得分:2)
在C#中,似乎Rfc2898DeriveBytes使用SHA1实现它,但我想尝试使用SHA512以获得更高的安全性。如何在C#中将SHA512用于PBKDF2?
Rfc2898DeriveBytes
现在从.NET Framework 4.7.2开始在构造函数中接受HashAlgorithmName
。
对于旧版本的.NET:
遗憾的是,这只是Rfc2898DeriveBytes
实现的限制,它不允许您指定哈希函数。 SHA512可能有点过分,许多人认为SHA1仍然可以安全使用。然而,很多人做使用SHA256。你必须找到另一个实现。 Microsoft创建了另一个名为CLR Security的库,它扩展了System.Security.Cryptography命名空间。
它所做的一件事就是使用微软的CNG API。它确实提供了支持指定哈希函数的PBKDF2实现,包括SHA512。你可以find it on Codeplex。唯一的缺点是,自从Windows Vista / Server 2008中引入CNG以来,它不会在XP或Server 2003上运行。
我读到了有关哈希冲突的内容,但我还没有理解它,所以有适当长度的盐和哈希来获得不错的安全性吗?
你的盐应该很长。一个很好的例子可能是salt可能与散列函数的输出大小相同,因此使用SHA512时,您将使用64字节的盐。一般来说,你的盐应该是一个足够大的价值,它不容易被暴力强迫。它也应该是随机的,而不是一些“用户”数据,比如用户名。