我正在检查此AES加密/解密项目http://www.codeproject.com/Articles/769741/Csharp-AES-bits-Encryption-Library-with-Salt
但我读到它有IV和盐渍的漏洞。这些漏洞怎么会发生?
我知道AES对已知的明文攻击免疫,但如果这种实现错误,是否有一种简单的方法可以打破它并获得密钥或明文?
答案 0 :(得分:3)
该代码包含多个版本。带有随机盐的最后一个版本(使用Salt 获取随机加密结果)几乎可以。
如您所见,IV是从PBKDF2生成的,这意味着当使用相同的盐和密码时将生成相同的IV 。这是一种不良影响,因为它意味着相同的明文将创建相同的密文。攻击者可能会推断您仅通过观察密文再次发送相同的消息。这当然不是语义上安全的,这就是为什么一些随机性是必要的。 解决这个问题的方法是使用随机盐。
此代码的另一个问题是低迭代次数为1000 。如今,应该使用至少60,000到几百万的迭代计数。否则,攻击者很容易尝试使用大量常用密码并找到您使用过的密码。因此,增加迭代次数也会严重限制脱机攻击者的吞吐量。
代码的另一个重要问题是没有密文的身份验证。根据您的系统体系结构,攻击者可能会发起填充oracle攻击并解密您通过多个在线查询发送的任何密文。防止这种情况的方法是使用经过身份验证的操作模式(如GCM或EAX),或采用具有强MAC的encrypt-then-MAC方案,如HMAC-SHA256。
最后一个问题是PBKDF2用于从密码中导出密钥和 IV。 This is not a good idea.
我发现this code似乎没有上述任何问题。