【问题标题】:Vulnerable IV and salt in AES encryptionAES 加密中的易受攻击的 IV 和盐
【发布时间】:2015-11-16 14:57:29
【问题描述】:

我正在检查这个 AES 加密/解密项目http://www.codeproject.com/Articles/769741/Csharp-AES-bits-Encryption-Library-with-Salt

但我读到它在 IV 和加盐方面存在漏洞。这些漏洞是如何发生的?

我知道 AES 对已知的明文攻击免疫,但如果这个实现是错误的,有没有简单的方法可以破解它并获取密钥或明文?

【问题讨论】:

    标签: c# encryption aes


    【解决方案1】:

    该代码包含多个版本。最后一个带有随机盐的版本(Getting Randomized Encryption Result with Salt)几乎没问题。

    如您所见,IV 是从 PBKDF2 生成的,这意味着使用相同的盐和密码时将生成相同的 IV。这是一个不受欢迎的效果,因为这意味着相同的明文将创建相同的密文。攻击者可能仅通过观察密文即可推断出您再次发送了相同的消息。这当然在语义上不安全,这就是为什么需要一些随机性。 一种解决方法是使用随机盐。

    此代码的另一个问题是1000 次的低迭代次数。如今,应该使用至少 60,000 到几百万的迭代计数。否则,攻击者很容易尝试许多流行的密码并找到您使用的一个密码。因此,增加迭代次数也会严重限制离线攻击者的吞吐量。

    代码的另一个重要问题是没有对密文进行身份验证。根据您的系统架构,攻击者可能会发起填充预言攻击并解密您通过多个在线查询发送的任何密文。防止这种情况发生的方法是使用经过身份验证的操作模式,如 GCM 或 EAX,或使用具有强 MAC 的 encrypt-then-MAC 方案,如 HMAC-SHA256。

    最后一个问题是 PBKDF2 用于从密码中导出密钥 IV。 This is not a good idea.

    我发现this code 似乎没有上述任何问题。

    【讨论】:

    • 剖析得很好。代码共享网站上的另一段可怕的代码由于非常不安全而获得了近 5 分。我应该列个清单什么的。自己配制盐;啧啧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2018-11-17
    • 2017-08-02
    • 2012-02-21
    • 2016-04-18
    • 2018-01-19
    相关资源
    最近更新 更多