|
知识路径: > 嵌入式系统的安全性知识 > 安全性基本概念 > 信息安全基础 > 认证算法 >
|
相关知识点:3个
|
|
|
|
散列式报文认证码(Hashed Message Authentication Code,HMAC)是利用对称密钥生成报文认证码的散列算法,可以提供数据完整性数据源身份认证。为了说明HMAC的原理,假设H是一种散列函数(例如MD5或SHA-1),H把任意长度的文本作为输入,产生长度为L位的输出(对于MD5,L=128;对于SHA-1,L=160),并且假设K是由发送方和接收方共享的报文认证密钥,长度不大于64字节,如果小于64字节,后面加0,补够64字节。假定有下面两个64字节的串ipad(输入串)和opad(输出串)。处理过程如下:
|
|
|
|
|
函数HMAC把K和Text作为输入,产生HMACK(Text)=H作为输出,即:
|
|
|
|
|
|
|
|
(6)把第(4)步产生的结果附加在第(5)步结果的后面。
|
|
|
(7)对第(6)步产生的结果引用函数H,并输出计算结果。
|
|
|
HMAC的密钥长度至少为L位,更长的密钥并不能增强函数的安全性。HMAC允许把最后的输出截短到80位,这样更简单有效,且不损失安全强度。认证一个数据流(Text)的总费用接近于对该数据流进行散列的费用,对很长的数据流更是如此。
|
|
|
HMAC使用现有的散列函数H而不用修改H的代码,这样可以使用已有的H代码库,而且可以随时用一个散列函数代替另一个散列函数。HMAC-MD5已经被IETF指定为Internet安全协议IPsec的验证机制,提供数据源认证和数据完整性保护。
|
|
|
HMAC的一个典型应用是用在“提问/响应(Challenge/Response)”式身份认证中,认证流程如下:
|
|
|
|
(2)服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为提问)。
|
|
|
(3)客户端将收到的随机数提供给ePass(数字证书的存储介质),由ePass使用该随机数与存储的密钥进行HMAC-MD5运算,并得到一个结果作为证据传给服务器(此为响应)。
|
|
|
(4)与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户。
|
|
|