【问题标题】:AES - High Iterations vs. Password EntropyAES - 高迭代与密码熵
【发布时间】:2015-11-27 19:15:22
【问题描述】:

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

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

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

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

我是否正确,因为迭代主要用于向低熵密码添加熵?将迭代次数减少到 1000 次以下(这似乎是公认的阈值)是否弊大于利?

干杯。

【问题讨论】:

    标签: c# cryptography aes


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢您的确认,我将随机盐增加到8个字节。感谢您对我没有考虑过的在线服务的担忧。当我准备好输入真实密码时,我将断开与网络的连接并使用他们的客户端功能(到目前为止,我们只是在测试)。如果失败了,我肯定会听从你对 RNG 的建议。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 2016-03-30
    • 2012-02-21
    • 2019-08-05
    • 1970-01-01
    相关资源
    最近更新 更多