消息验证码 (MAC) 是否确保所用密钥的真实性?

发布于 2024-12-21 07:48:09 字数 845 浏览 1 评论 0原文

我必须使用密码保护记录文件的机密性、完整性和真实性。记录的数量可能会超过 32^2,并且每个记录都可以独立访问。

实现它的一种方法是

  1. 生成 256 位随机盐并将其存储在文件头中。
  2. 使用 PBKDF2 和来自 PKCS #5 的 HMAC-SHA256 从密码和盐生成派生密钥。
  3. 对于每个记录生成一个 96 位随机初始化向量。
  4. 在 GCM 模式下使用派生密钥、初始化向量和(作为附加的经过身份验证的数据)记录在文件中的位置,使用 AES-256 加密每个记录的内容。
  5. 因此,每条记录将存储一个初始化向量、一个加密内容和一个 MAC。

但是 NIST 特别出版物 SP800-38D 定义了 GCM 和 GMAC< /a> 要求记录数小于 32^2,初始化向量才能唯一。

因此我设计了另一个解决方案:使用 HMAC-SHA256 为每个记录创建一个密钥,使用派生密钥作为密钥,并将记录在文件中的位置作为要验证的消息(盐)。

所以问题是我是否需要将文件中记录的位置提供给经过身份验证的加密算法 作为附加的经过身份验证的数据,因为我在生成密钥时已经处理过它?

另外,我真的需要使用初始化向量吗,因为所有记录都将被加密并且 使用 HMAC-SHA256(PBKDF2(HMAC-SHA256, 密码, salt, iterationCount, 256), blockAddress) 生成的假定不同的密钥进行身份验证?

我不知道该文件的大小是多少,所以我认为它可能非常大。

I have to protects confidentiality, integrity and authenticity of a file of records with a password. The number of records can potentially be more then 32^2 and each record can be accessed independently.

One way to implement it is

  1. Generate a 256-bit random salt and store it in the file header.
  2. Generate a derived key from the password and the salt using PBKDF2 with HMAC-SHA256 from PKCS #5.
  3. For each record generate a 96-bit random initialization vector.
  4. Encrypt each record's content using AES-256 in GCM mode using the derived key, the initialization vector, and (as additional authenticated data) the position of the record in a file.
  5. As a result, each record will store an initialization vector, an encrypted content, and a MAC.

But the NIST Special Publication SP800-38D defining GCM and GMAC requires the number of records to be less than 32^2 for the initialization vectors to be unique.

So I devised another solution: create a key for each record with HMAC-SHA256 using the derived key as a key and the position of the record in a file as a message to be authenticated (salt).

So the question is do I need to provide the position of the record in a file to the authenticated encryption algorithm
as an additional authenticated data since I've already taken care of it when generating the key?

Additionally do I really need to use initialization vectors at all since all the records will be encrypted and
authenticated using supposedly different keys generated by HMAC-SHA256(PBKDF2(HMAC-SHA256, password, salt, iterationCount, 256), blockAddress) ?

I don't know what the size of the file will be, so I presume it can be very large.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苏别ゝ 2024-12-28 07:48:09

如果我正确理解了你的意思(有点免责声明,抱歉)那么你应该没问题,无需在文件中的记录中添加位置。

不,如果您只使用(会话)密钥一次,则不需要随机 IV。使用由零组成的 IV 就足够了(确定性结构,使用一个设备和设置为零的计数器,如果我们遵循 NIST 命名法)。

If I understood you correctly (bit of a disclaimer, sorry) then you should be fine without adding the position within the record in the file.

No you don't need a random IV if you only use a (session) key once. Using an IV consisting of zero's would be enough (deterministic construction, using one device and a counter set to zero, if we keep with the NIST nomenclature).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文