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

Security 消息身份验证码(MAC)是否确保所用密钥的真实性?,security,encryption,hmac,password-encryption,authenticity,Security,Encryption,Hmac,Password Encryption,Authenticity,我必须用密码保护记录文件的机密性、完整性和真实性。记录的数量可能超过32^2,并且每个记录都可以独立访问 实现它的一种方法是 生成256位随机salt并将其存储在文件头中。 使用PKCS 5中带有HMAC-SHA256的PBKDF2从密码和salt生成派生密钥。 为每个记录生成一个96位随机初始化向量。 在GCM模式下使用AES-256加密每个记录的内容,使用派生密钥、初始化向量以及记录在文件中的位置作为附加身份验证数据。 因此,每个记录将存储一个初始化向量、一个加密内容和一个MAC。 但要求记

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

实现它的一种方法是

生成256位随机salt并将其存储在文件头中。 使用PKCS 5中带有HMAC-SHA256的PBKDF2从密码和salt生成派生密钥。 为每个记录生成一个96位随机初始化向量。 在GCM模式下使用AES-256加密每个记录的内容,使用派生密钥、初始化向量以及记录在文件中的位置作为附加身份验证数据。 因此,每个记录将存储一个初始化向量、一个加密内容和一个MAC。 但要求记录数小于32^2,初始化向量才是唯一的

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

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

此外,我真的需要使用初始化向量,因为所有的记录都将被加密和删除 使用HMAC-SHA256PBKDF2HMAC-SHA256、密码、salt、迭代计数、256、块地址生成的假定不同密钥进行身份验证


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

如果我正确理解了您的一点免责声明,很抱歉,那么您不需要在文件的记录中添加位置就可以了


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

像往常一样,一些安全建议:确保您可以区分坏密码、更改的密文和重新排序的记录,或者,如果其中任何一个出了问题,你可能会发现自己有点麻烦。此外,对所有原语使用相同的安全级别也是值得的,例如,使用SHA-512安全~ 256位,AES 256安全~ 256位。1。对我来说,只区分错误的密码和损坏的文件、更改的密码文本、重新排序的记录、更改的salt是有意义的,但如果对手更改了salt,我就无法将其与错误的密码区分开来。我不明白如何将SHA-512生成的密钥与AES-256一起使用,因为后者需要256位密钥。一种选择是截断,但它实际上削弱了关键点。虽然NIST-SP-800-107表示截断是可以的,但通过谷歌搜索SHA截断会得到好坏参半的结果。另一个选项与此类似,但使用其他256位作为IV。2的答案是截断安全哈希算法没有什么错。它经常在各种密钥派生技术中使用,SHA-384甚至是SHA-512,删除了位,并且有不同的内部常数。1呃,不,你不能区分错误的密码和salt,这就是salt的重点。对不起,如果不清楚的话。只要你能尽可能找出问题所在。为失败而设计,是我想说的。事先决定如果某件事失败了该怎么办。对于如此大量的记录,这是有意义的。