cryptography - 当我们有公钥签名时,为什么我需要 HMAC?

标签 cryptography public-key-encryption hmac

序言:我对 HMAC 很陌生,所以如果问题有点愚蠢,请原谅我。

据我了解,HMAC 用于确保消息未被篡改。所以基本上,它用作哈希码。但是,由于散列算法是已知的,攻击者可以轻松地为消息的篡改版本计算新的散列代码。

这就是 HMAC 试图解决的问题:它们提供一个散列,该散列不仅基于应散列的消息,还基于加密 key 。这样就不可能在不知道 key 的情况下计算消息的有效值。

到目前为止,这是正确的吗?

我现在的问题是:如果我们可以使用公钥签名实现相同的目标,我们需要 HMAC 做什么? IIRC 签名的工作方式完全相同:计算散列并对其进行签名以确保没有人篡改消息或散列。

那么 HMAC 的意义何在?

最佳答案

与安全级别相当的任何已知公钥操作相比,HMAC 的尺寸更小,计算和验证所需的 CPU 更少。

关于cryptography - 当我们有公钥签名时,为什么我需要 HMAC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372628/

相关文章:

java - AES 解密的有效结果在一个字节和一个字节中不同的可能性有多大?

javascript - javascript 中的 RSA 不再支持 ASCII/字节数组

cryptography - 软件产品的许可证 key 生成方法

c - 如何读取/写入 RSA 结构中的公钥

c# - C# 中的 GF(256) 有限域乘法函数

python - 使用 Python 使用公钥和 cx_Oracle 进行身份验证

cryptography - RSA私有(private)指数确定

r - R "digest"包中的 HMAC 和换行符错误

javascript - 在 C# 中创建消息的哈希值

hmac - 如何在 Elixir 中生成 HMAC 字符串?