更好地练习PKBDF2,AES,IV和盐



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

如何存储文档:

  • 使用一个 AES 密钥、IV 和盐加密所有文档
  • 使用一个 AES 密钥加密每个文档,但将 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。

最新更新