我必须用密码保护记录文件的机密性、完整性和真实性。记录的数量可能超过 32^2,并且可以独立访问每条记录。
实现它的一种方法是
- 生成一个 256 位的随机 salt 并将其存储在文件头中。
- 使用来自 PKCS #5 的 PBKDF2 和 HMAC-SHA256 从密码和盐生成派生密钥。
- 为每条记录生成一个 96 位随机初始化向量。
- 在 GCM 模式下,使用派生密钥、初始化向量和(作为附加的经过身份验证的数据)记录在文件中的位置,使用 AES-256 加密每个记录的内容。
- 因此,每条记录都将存储一个初始化向量、一个加密内容和一个 MAC。
但是定义 GCM 和 GMAC 的 NIST 特别出版物 SP800-38D要求记录数少于 32^2 才能使初始化向量唯一。
所以我设计了另一种解决方案:使用派生密钥作为密钥,使用 HMAC-SHA256 为每个记录创建一个密钥,并将文件中记录的位置作为要验证的消息(盐)。
所以问题是我是否需要将文件中记录的位置提供给经过身份验证的加密算法作为附加的经过身份验证的数据,因为我在生成密钥时已经处理了它?
此外,我真的需要使用初始化向量吗,因为所有记录都将使用 HMAC-SHA256(PBKDF2(HMAC-SHA256, password, salt, iterationCount, 256), blockAddress) 生成的所谓不同密钥进行加密和身份验证?
我不知道文件的大小,所以我认为它可能非常大。