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



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

一种实现方法是

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

但是定义GCM和GMAC的NIST特别出版物SP800-38D要求记录数小于32^2,以使初始化向量唯一。

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

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

另外,我真的需要使用初始化向量,因为所有的记录将被加密和使用HMAC-SHA256生成的不同密钥进行认证(PBKDF2(HMAC-SHA256, password, salt, iterationCount, 256), blockAddress) ?

我不知道文件的大小,所以我想它可能会很大。

如果我理解正确(有点免责声明,对不起),那么您应该没有在文件中添加记录内的位置。

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

最新更新