什么是哈希运算消息认证码?HMAC产生的背景?

2023年2月27日15:35:25什么是哈希运算消息认证码?HMAC产生的背景?已关闭评论

什么是HMAC

HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写,是由H.Krawezyk、M.Bellare、R.Canetti三人于1996年提出。它是一种基于Hash函数和密钥进行消息认证的方法,于1997年作为RFC2104公布,并在IPSec和其他网络协议(如SSL)中得以广泛应用,现在已经成为事实上的Internet安全标准。它可以与任何迭代型散列函数捆绑使用。

HMAC是一种使用单向散列函数来构造消息认证码的方法,其中HMAC中的H就是Hash的意思。

HMAC中所使用的单向散列函数并不仅限于一种,任何高强度的单向散列函数都可以被用于HMAC,将来设计出的新的单向散列函数也同样可以使用。使用SM3-HMAC、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512所构造的HMAC分别称为HMAC-SM3、HMAC-SHA1、HMAC-SHA-224、HMAC-SHA-384、HMAC-SHA-512。

HMAC产生的背景

随着Internet的不断发展,网络安全问题日益突出。为了确保接收方所接收到的报文数据的完整性,人们采用消息认证来验证上述性质。目前,用来对消息进行认证的主要方式有以下3种:消息认证码、散列函数和消息加密。

  • 消息认证码:一个需要密钥的算法,可以对可变长度的消息进行认证,把输出的结果作为认证符。
  • 散列函数:将任意长度的消息映射成为定长的散列值的函数,以该散列值消息摘要作为认证符。
  • 消息加密:将整个消息的密文作为认证符。

近年来,人们越来越感兴趣于利用散列函数来设计MAC,原因有2个:

(1)一般的散列函数的软件执行速度比分组密码的要快。

(2)密码散列函数的库代码来源广泛。

HMAC应运而生。HMAC是一种利用密码学中的散列函数来进行消息认证的机制,它能提供的消息认证包括两方面内容:

(1)消息完整性认证:能够证明消息内容在传送过程中没有被修改。

(2)信源身份认证:因为通信双方共享了认证的密钥,所以接收方能够认证发送该数据的信源与所宣称的一致,即能够可靠地确认接收的消息与发送的一致。

HMAC是当前许多安全协议所选用的提供认证服务的方式,应用十分广泛,并且经受住了多种形式攻击的考验。

HMAC在身份认证中的应用

HMAC主要应用在身份认证中,使用方法如下:

(1)客户端发出登录请求(假设是浏览器的GET请求)。

(2)服务器返回一个随机值,并在会话中记录这个随机值。

(3)客户端将该随机值作为密钥,对用户密码进行HMAC运算,然后提交给服务器。

(4)服务器读取用户数据库中的用户密码和(2)中发送的随机值,做与客户端一样的HMAC运算,然后与用户发送的结果比较,如果结果一致,就验证用户合法。

在这个过程中,可能遭到安全攻击的是服务器发送的随机值和用户发送的HMAC结果,而对于截获了这两个值的黑客而言,这两个值是没有意义的,绝无获取用户密码的可能性。随机值的引入,使HMAC只在当前会话中有效,大大增强了安全性和实用性。大多数的语言都实现了HMAC算法,比如PHP的mhash、Python的hmac.py、Java的MessageDigest类,在Web验证中使用HMAC也是可行的,用JS进行md5运算的速度也是比较快的。

设计目标

在HMAC规划之初就有了以下设计目标:

(1)不必修改而直接套用已知的散列函数,并且很容易得到软件上执行速度较快的散列函数及其代码。

(2)若找到或需要更快或更安全的散列函数,则能够容易地代替原来嵌入的散列函数。

(3)应保持散列函数的原来性能,不能因为嵌入在HMAC中而过分降低其性能。

(4)对密钥的使用和处理比较简单。

(5)若已知嵌入的散列函数强度,则完全可以推断出认证机制抵抗密码分析的强度。

  • A+
所属分类:JAVA
  • 版权声明:本篇文章(包括图片)来自网络,由程序自动采集,著作权(版权)归原作者所有,如有侵权联系我们删除,联系方式(QQ:452038415)。