Cryptography 困惑如何使用AES和HMAC
在将加密消息从服务器传输到客户端或从服务器传输到客户端时,我有点困惑如何正确使用AES和HMAC(基于SHA-256) 如果以下方法错误,请更正:Cryptography 困惑如何使用AES和HMAC,cryptography,aes,hmac,Cryptography,Aes,Hmac,在将加密消息从服务器传输到客户端或从服务器传输到客户端时,我有点困惑如何正确使用AES和HMAC(基于SHA-256) 如果以下方法错误,请更正: 从密钥文件中获取安全密钥(例如,我们建议使用AES-256,并且我们已经有一个有效的256位长度密钥) 为AES-256生成随机IV,以确保相同的纯文本将具有不同的加密输出 使用纯文本和安全密钥计算HMAC-SHA-256。(第一个问题:我应该使用IV进行HMAC计算吗?例如,附加到安全密钥?) 使用AES-256加密纯文本 为客户端编写消息,如下所
CipherText = iv|| aes(key1,iv,message)
tag = hmac(key2,ciphertext)
然后发送(标签、密文)。在另一端,运行相同的hmac调用来重新生成标记,并将接收到的标记与计算出的标记进行比较。比较标签的sha1或sha256散列,而不是直接比较,这样在比较失败的地方就不会泄漏
您应该为hmac使用不同的密钥。在实践中,对加密密钥的sha1和进行定位已经足够好了。您建议采用什么操作模式?CBC有它的开销,我们应该处理填充。我认为我的选择是ic OFB/CFB。从安全角度来看,它们都是一样的(除了欧洲央行,不要使用它)。如果系统需要静脉注射,请确保使用新的静脉注射。如果您想节省一些精力,可以使用不需要hmac的认证模式。GCM是其中最好的。您使用的是什么语言?我不建议将第一个键的SHA1和作为第二个键。相反,您可以从密码短语派生两个具有不同参数和PBKDF2的不同密钥。最好是有两个独立的密钥,不要依赖(可能)弱的密码短语。@Rafael为什么不建议使用第一个密钥的SHA1和?我知道这似乎有一些关系,但有什么具体的原因,为什么这是坏的?另外,为什么需要两个单独的密钥,一个用于AES,一个用于HMAC?我可以看出这可能很危险,但是关于这一点有什么具体的参考吗?请解释一下为什么AES和HMAC需要两个不同的密钥?蛮力方案可能针对HMAC,测试弱密码和PBKDF2,并将其与密文进行比较,如果它们匹配,则找到弱密码,并且可以使用它从密文中获取数据,因为您知道它是PBKDF2