我正在开发对文件进行aes256-cbc加密的简单软件。我正在使用GNU / Linux和libgcrypt-1.5.0。 IV是使用OpenSSL rand函数随机生成的,IV存储在输出文件中的密文之前。我正在使用PKCS#7填充方法。
现在我对如何继续存在疑问:
最好使用sha256重复输入50,000次密码加密文件,或者最好使用用户提供的密码?
如果我想检查输入密码的正确性,我必须将其存储到加密文件中(显然是加密的)。这样做是否正确?
答案 0 :(得分:3)
答案 1 :(得分:3)
通过生成加密密钥和身份验证密钥的组合大小的密钥,您可以使用PBKDF2的单个调用来同时生成加密密钥和身份验证密钥,而不是使用PBKDF2两次使用不同的填充。一个人去。
请注意,根据填充来决定密钥是否良好可能会导致CBC填充oracle攻击。对于文件加密,此类攻击可能不适用,具体取决于具体情况,但无论如何,使用适当的MAC进行数据身份验证似乎是一种谨慎的做法,因为您还希望防止对数据进行位翻转攻击和其他恶意修改。
答案 2 :(得分:0)
1.最好使用sha256重复输入50,000次密码来加密文件,或者最好使用用户提供的密码?
你永远不会使用" raw"密码直接作为密钥。关键是需要加强对强暴攻击的强硬态度。查看字符串到密钥(S2K)的内容,或基于密码的密钥派生函数(PBKDF)以及像scrypt这样的内存硬件哈希。
2.如果我想检查输入密码的正确性,我必须将其存储到加密文件中(显然是加密的)。这样做是否正确?
没有。您使用经过身份验证的加密模式,如GCM。经过验证的加密模式专为任务而构建,并提供机密性和真实性。
在密码下,加密文件将验证或不胜。不要担心自己的原因。否则,您正在设置一个oracle,它可以撤消步骤1中的所有内容(这可能适用也可能不适用)。