网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

什么是HMAC(基于哈希的消息认证码)?

更新时间:2026年03月27日   作者:spoto   标签(Tag):

HMAC基于哈希的消息认证码是一种消息认证码(MAC)的实现方式。其实现过程是将待认证的数据与一个共享的秘密密钥一起进行加密哈希处理,从而得到该认证码。与一般的消息认证码一样,这种认证码既可以用于保证数据的完整性,也可以用于验证数据的真实性。

什么是HMAC呢?

HMAC(基于哈希的消息认证码)这是一种加密技术,它利用哈希函数和秘密密钥来确保数据的完整性和真实性。与基于签名或非对称加密的方法不同,这种技术对于参与通信的各方来说,检查数据的完整性是必不可少的。HTTPS就是这种技术的典型应用。SFTP、FTPS此外,其他传输协议也使用HMAC。所使用的加密哈希函数可以是MD-5、SHA-1或SHA-256。数字签名与HMAC类似,它们都使用了哈希函数和共享密钥。两者的区别在于所使用的密钥——HMAC使用的是……对称密钥(相同的副本)而Signatures则使用另一种方式来表示这些签名。不对称的(两个不同的密钥)。

基于哈希值的信息认证码的工作原理

HMAC为客户端和服务器提供了一种共享的私钥,该私钥仅对双方有效。客户端在每次发送请求时都会生成一个唯一的哈希值(即HMAC)。当客户端向服务器发送请求时,它会用私钥对请求的数据进行哈希处理,然后将结果作为请求的一部分发送出去。消息和私钥都经过分别的哈希处理,从而确保了安全性。当服务器接收到请求后,它会生成自己的HMAC。然后,服务器会比较这两个HMAC的值。如果两者相等,那么就可以认为该客户端是合法的。

该公式/表达式对于 HMAC 来说:

HMAC = hashFunc(密钥 + 消息)

有三种类型的认证功能。它们分别是消息加密、消息认证码以及……哈希函数MAC与哈希函数(这里的HMAC)之间的主要区别在于所使用的密钥方式。在HMAC中,我们需要在明文上应用哈希函数,而此时还需要使用发送者和接收者共同使用的密钥。在应用哈希函数之前,需要先计算出S位的数据,然后将其附加到明文中。为了生成这S位的数据,我们需要使用发送者和接收者共同使用的密钥。

使用密钥K(0 < K < b),通过在密钥K的左侧添加O字符来生成K+。这样,密钥的长度就会达到b位。之所以不在右侧进行填充,是因为密钥的长度会发生变化。这里的b位就是明文的数据块大小。还有两个预定义的填充位,分别称为ipad和opad。所有这些操作都是在对明文消息应用哈希函数之前进行的。

iPad – 00110110
opad - 01011100

现在,我们必须计算S位。

  1. K+与ipad进行异或运算后,得到的结果相当于S1位。由于K+和ipad都是b位,所以S1位也相当于b位。接下来,我们需要将S1与纯文本消息合并在一起。设P为纯文本消息。
  2. 在S1中,p0和p1分别由b位组成。m表示纯文本块的数量。P0就是那个纯文本块,而b则代表该纯文本块的规模。在将S1添加到纯文本之后,我们需要使用哈希算法(可以是任何一种哈希算法)。同时,我们还需要使用初始化向量,这个向量的大小是n-b位。因此,最终得到的就是n位的哈希码,即H(S1 || M)。
  3. 同样地,n位被填充为b位。然后,K+与opad进行异或运算,得到输出S2位。S2被附加到b位上,之后再次使用IV对整个块应用哈希函数。最终得到的就是n位的哈希码,即H(S2 || H(S1 || M))。

计算摘要

  • 选择K。
    • 如果 K < b,则在左侧补零,直到 K = b。此时,K 的值介于 0 和 b 之间,即 0 < K < b。
  • EXOR K+与iPad的功能类似,它能够生成B位的数据,进而得到S1位的结果。
  • 将S1附加上纯文本M。
  • 在 (S1 || M) 上应用 SHA-512 算法。
  • 将 Pad 的 n 位长度调整至与 b 位长度相等。
  • EXOR K+与opad的运算结果相当于b位,最终产生的结果为S2位。
  • 将第5步的输出结果追加到S2中。
  • 在步骤7中应用SHA-512算法,以生成n位长的哈希码。

基于哈希值的消息认证码中的安全性问题

HMAC比MAC更安全,因为密钥和消息是在不同的步骤中被哈希处理的。

HMAC(密钥, 消息) = H(MOD1(密钥) || H(MOD2(密钥)) || 消息)。

这些数据首先由客户端使用私钥进行哈希处理,之后作为请求的一部分被发送到服务器。 然后,服务器会自行生成自己的HMAC。 这确保了该过程不会受到攻击的威胁。因为,在生成后续的MAC地址时,关键数据就不会被泄露了。 此外,一旦该过程完成之后,所传递的消息就变得不可逆转了,同时还能有效抵御黑客的攻击。 即使有恶意方试图窃取这些通信内容,他们也无法确定通信的内容长度或解密这些信息,因为他们没有相应的解密密钥。

HMAC的优点

  • HMAC非常适合用于高性能系统中。路由器由于使用了哈希函数,这些函数的计算与验证过程都非常快速,这与公钥系统的情况不同。
  • 数字签名它们比HMAC要大,不过HMAC在安全性方面仍然表现得更为出色。
  • 在那些禁止使用公钥系统的环境中,HMAC被广泛应用。

HMAC的缺点

  • HMAC使用了共享密钥,这有助于避免抵赖问题。如果发送方或接收方的密钥被泄露,那么攻击者就可以很容易地伪造未经授权的消息。
  • 安全地管理和分发秘密密钥是一项具有挑战性的任务。
  • 虽然不太可能,但确实有可能出现哈希冲突的情况——即两个不同的消息产生相同的哈希值。
  • HMAC的安全性取决于秘密密钥的长度。较短的密钥更容易受到暴力攻击的威胁。
  • HMAC的安全性取决于所选的哈希函数的强度(例如,SHA-256)。如果哈希函数被破解,那么HMAC也会受到影响。

HMAC的应用

  • 在创建或激活账户时,需要验证电子邮件地址的有效性。
  • 对发送到客户端浏览器后再被提交的表单数据进行验证。
  • HMAC可以用于……物联网(IoT)因为成本更低。
  • 每当需要重置密码时,都会发送一个只能使用一次的链接。这个过程不会受到服务器状态的影响。
  • 它可以接收任何长度的消息,并将其转换为固定长度的消息。消息摘要也就是说,即使你发送的是很长的消息,消息的摘要仍然会很小,这样可以最大限度地节省带宽。

结论

HMAC(基于哈希的消息认证码)是一种加密技术,它利用哈希函数和密钥来确保数据的完整性和真实性。这种技术被广泛应用于诸如HTTPS和SFTP等安全通信协议中。由于HMAC采用了两步哈希处理流程,因此其安全性远高于传统的MAC技术。这使得HMAC能够抵抗某些攻击。攻击的类型。尽管存在密钥管理以及潜在的哈希冲突等挑战,但HMAC仍然是一种非常有效且可靠的数据安全保护方法。它被广泛应用于各种场景中,比如电子邮件验证、物联网技术以及密码重置机制等方面。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料