AES - 高迭代与密码熵

AES - High Iterations vs. Password Entropy

希望得到一些关于 AES 问题的 clarification/understanding,我是加密新手,所以请多多包涵。

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

我选择了 AES 128 位加密,因为 256 位要慢得多(在我的应用程序中大约 35%),并且在这种情况下过度杀伤,因为它不是非常敏感的数据(但我们的客户是要求对其进行静态加密)。下一个性能瓶颈似乎是迭代,这是我在 1000 次时遇到的。在测试中,加密 10K 值大约需要 4 分钟,不是很糟糕,但也不是很好。将迭代次数减少到 100,将其减少到大约 1.5 分钟。

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

上的迭代计数器

迭代主要用于为低熵密码添加熵,我说得对吗?将迭代次数减少到低于 1000(这似乎是公认的阈值)是否弊大于利?

干杯。

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

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