使用PKBDF2,AES,IV和盐更好地实践

时间:2013-10-25 15:41:05

标签: security encryption aes pbkdf2

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

如何存储文件:

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

如何存储/回收IV和盐:

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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