Hmac

密钥相关的哈希运算消息认证码缩写
HMAC是一种使用单向散列函数来构造消息认证码的方法(RFC2104),其中HMAC的H就是HASH的意思。[1]HMAC运算利用哈希算法,以一个密钥和一个消息作为输入,生成一个消息摘要作为输出。[2]
HMAC是由H.Krawezyk,M.Bellare,R.Canetti于1996年基于嵌套MAC提出的,并证明了其安全性。1997年HMAC作为RFC2104发表,成为事实上的Internet标准,包括SSL、IPSec协议在内的一些安全协议都使用了HMAC。2002年HMAC被作为FIPS198标准。[3]
HMAC的认证流程是首先由客户端向服务器发出一个验证请求;服务器接收到此请求后,生成一个随机数并通过网络传输给客户端(此为质询);客户端将收到的随机数提供给ePass,ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算,并得到一个结果作为认证证据传给服务器(此为响应)。与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算的响应结果相同,则认为客户端是一个合法用户。[2]
大多数的语言都实现了HMAC算法,比如PHP的mhash、Python的hmac.py和Java的MessageDigest类,在Web验证中使用HMAC也是可行的,用JS进行MD5运算的速度也比较快。[2]

产生背景