AES - 高迭代与密码熵

时间:2015-11-27 19:15:22

标签: c# cryptography aes

希望对AES问题得到一些澄清/理解,我是加密的新手,所以请耐心等待。

我的任务是加密客户端的数据。我使用RijndaelManagedSHA256编写了一个c#类,用于基于我在Stack Overflow上找到的this article的密码哈希。我正在使用随机的4字节salt值以及附加到原始数据预加密的静态8字节salt值。

我选择使用AES 128位加密,因为256位速度相当慢(在我的应用程序中约为35%),并且由于其不是非常敏感的数据而在这种情况下过度杀戮(但我们的客户要求它在休息时加密)。下一个性能瓶颈似乎是迭代,我在1000.在测试中,加密10K值花了大约4分钟,不是很糟糕,但不是很好。将迭代次数减少到100,将其降低到大约1.5分钟。

由于速度是关键,我正在寻找确认,如果我使用来自http://passwordsgenerator.net/的大量256个字符(随机;任何字母/符号)密码,我可以安全地减少迭代计数器Rfc2898DeriveBytes

我是否正确,因为迭代主要用于向低熵密码添加熵?减少低于1000的迭代(这似乎是可接受的阈值)弊大于利?

干杯。

1 个答案:

答案 0 :(得分:2)

如果你有一个256 字符密码,那么你似乎对密钥的熵足够多了。您只需要1次迭代的PBKDF2和随机的> = 8字节盐。您也可以使用HKDF(不确定是否有C#实现)而不是PBKDF2。对于AES-256来说,这甚至足够熵。

我看到的问题是您使用在线服务生成密码。请勿这样做。您不能确定他们不会出售他们为您生成的密码。只需使用RNGCryptoServiceProvider生成一个32字节的主密钥,并使用Base64对其进行编码,以获得可以存储在字符串中的“密码”。