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

时间:2011-12-15 16:14:26

标签: security encryption hmac password-encryption authenticity

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

实现它的一种方法是

  1. 生成256位随机盐并将其存储在文件头中。
  2. 使用PBKDF2和PKCS#5中的HMAC-SHA256从密码和盐生成派生密钥。
  3. 为每条记录生成一个96位随机初始化向量。
  4. 使用衍生密钥,初始化向量和(作为附加的经过身份验证的数据)在文件中使用AES-256在文件中使用AES-256加密每个记录的内容。
  5. 因此,每条记录都将存储初始化向量,加密内容和MAC。
  6. 但是NIST Special Publication SP800-38D defining GCM and GMAC要求初始化向量的记录数小于32 ^ 2是唯一的。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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