安全性 – 使用PKBDF2,AES,IV和盐更好地实践

所以,我正在使用AES算法加密文档列表.我使用PBKDF2来确定用户密码的密钥.我有一些关于商店数据和IV /盐的问题:

如何存储文件:

>使用一个AES密钥,IV和salt加密所有文档
>使用一个AES密钥加密每个文档,但将IV和salt分开

如何储存/回收IV和盐:

>从PBKDF2获取IV(如AES密钥),无需将其存储在某处
>在每个文档加密之前生成IV并以纯文本形式存储
>对于盐,我认为,没有选择 – 无论如何我需要将其存储为纯文本

正如我从那篇文章(http://adamcaudill.com/2013/04/16/1password-pbkdf2-and-implementation-flaws/)和其他一些文章中得知的那样:

>将IV和盐存储为纯文本是可以的,因为有时攻击者甚至不需要知道它们
>不同的IV只能“扭曲”第一个密码块(对于CBC模式),但不是全部,因此它不会给AES方法带来安全性.

最佳答案 每个文件都应该有自己的IV和盐.由于盐变化,每个文档的AES密钥也会变化.您永远不应该使用相同的密钥和IV加密两个文档.在最常见的模式(CBC)中,重用IV Key会导致安全性降低.在某些模式(CTR)中,重用IV Key会破坏加密的安全性. (CTR中的“IV”称为“nonce”,但它通常在大多数加密API中传递给名为“IV”的东西.)

通常,您随机生成IV,并以纯文本格式将其存储在文件的开头.如果你使用PBKDF2生成IV,你需要另一个盐(无论如何你需要存储),所以没有太多意义.

您还需要记住,最常见的AES模式(最常见的是CBC)不提供防止修改的保护.如果有人知道您的明文是什么(或者可以猜出它是什么),他们可以修改您的密文以解密他们选择的其他值. (这是“如果你在CBC模式下解密你有错误的IV它会破坏文章中的第一个块”的实际含义.他们说“腐败”就像它意味着“垃圾”,但你实际上可以导致第一个块以特定的方式腐败.)

解决此问题的方法是使用经过身份验证的加密模式(如CCM或EAX),或者添加HMAC.

点赞