下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

HMAC算法的原理与应用

作者:课课家教育     来源: http://www.kokojia.com点击数:3926发布时间: 2019-01-24 10:28:36

标签: 信息安全工程师密码学Hash函数HMAC算法

软考,您想通过吗?一次通过才是硬道理

      小编在之前有写过关于Hash函数的一些基本概念以及经典的几种用于查找的算法。大家也都知道,Hash函数的知识点并不止小编之前所讲的那些,除此之外还有很多的知识需要我们去学习的呢。在这里,小编就给大家讲解一下在Hash函数当中关于HMAC算法的原理及应用的小知识。

      HMAC的中文为散列消息鉴别码,顾名思义,这是一个基于散列函数的消息认证码,主要是利用Hash算法,一一个密钥和一个消息为输入,然后生成一个消息摘要作为输出。与基于分组密码的MAC算法相比,使用HMAC的消息认证码的软件的执行速度更快。

      HMAC原理

      HMAC的实现原理为:用公开函数和密钥产生一个固定长度的值作为它的一个认证标识,然后可以用这个标识来鉴别消息是否完整。使用一个密钥生成一个固定大小的小数据块,也就是MAC,接着就把它加入到消息当中去,然后进行传输,最后接收方就可以利用和发送方共享的密钥来进行鉴别认证等。HMAC算法的一个总体结构如下图:

 HMAC算法的原理与应用_信息安全工程师_密码学_Hash函数_HMAC算法_课课家

  定义下列符号:

  • H=嵌入的hash函数(如MD5,SHA-l等算法)

  • IV=作为hash函数输入的初始值

  • M=HMAC的消息输入(包括由嵌入hash函数定义的填充位)

  • Yi=M的第i个分组,0≤i≤(L-1)

  • L=M中的分组数

  • b=每一分组所含的位数

  • n=嵌入的hash函数所产生的hash码长

  • K=密钥,建议密钥长度≥n;如果密钥的长度大于b,则将密钥作为hash函数的输入,来产生一个n位的密钥

  • K+=在K左边填充0后形成标准块,所得的b位结果

  • ipad=00110110(十六进制数36)重复b/8次的结果

  • opad=01011100(十六进制数5C)重复b/8次的结果

  • HMAC可描述如下:

  HMACK=H[(K+⊕opad)‖H[(K+⊕ipad)‖M]]

  也就是说,它的计算步骤为:

  (1)在K左边填充0,得到b位的K+( 例如,若K是160位,b=512,则在K中加入44个字节的OxOO);

  (2)K+与ipad执行异或运算(位异或)产生b位的分组Si;

  (3)将M附于Si后;

  (4) 将H作用于步骤3所得出的结果;

  (5) K+与opad执行异或运算(位异或)产生b位的分组S0

  (6)将步骤4中的hash码附于S0后;

      (7)将H作用于步骤6所得出的结果,并输出该函数值。

  HMAC的这个运算作用有以下两个方面:

  (1)验证TPM接受的授权数据和认证数据;(2)确认TPM接受到的命令请求是已授权的请求,并且,命令在传送的过程中没有被改动过。

  HMAC的应用

  HMAC的典型应用是用在身份认证中,它的一个认证的流程为:

  (1)首先由客户端向服务器发出一个登录请求(假设是浏览器的GET请求)。

  (2)服务器接到此请求后生成一个随机数然后通过网络传输给客户端(此为挑战),并在会话当中记录这个随机值。

  (3)将客户端收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。

  (4)与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户。

  在这个过程中,服务器发送的随机值和用户发送的HMAC结果可能会遭受安全攻击,而对黑客来说,它们截获的这两个值是没有意义的,因为这根本就不可能会获取用户密码,hmac随机值的引入只会在当前会话中有效,这会使得它的安全性和实用性大大地增强。

      在这一节课程当中,小编主要是围绕着HMAC的基本原理来展开阐述,如果大家还有什么想要知道的可以留言给小编哦,小编必定会知无不言言无不尽。当然啦,如果有小伙伴想要学习其他的一些课程内容,欢迎来我们课课家教育进行学习哦。

赞(32)
踩(0)
分享到:
推荐查看
华为认证网络工程师 HCIE直播课视频教程