摘要:全国计算机技术与软件专业技术资格(水平)考试,这门新开的信息安全工程师分属该考试“信息系统”专业,位处中级资格。官方教材《信息安全工程师教程》及考试大纲于7月1日出版,希赛小编整理了信息安全工程师教程学习笔记之HMAC,供大家参考学习。
>>>>>信息安全工程师培训视频
全国计算机技术与软件专业技术资格(水平)考试,这门新开的信息安全工程师分属该考试“信息系统”专业,位处中级资格。教材《信息安全工程师教程》及考试大纲于7月1日出版,希赛小编整理了信息安全工程师教程学习笔记之HMAC,供大家参考学习。
HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
运算作用
(1)验证TPM接受的授权数据和认证数据;
(2)确认TPM接受到的命令请求是已授权的请求,并且,命令在传送的过程中没有被改动过。
定义HMAC需要一个加密用散列函数(表示为H,可以是MD5或者SHA-1)和一个密钥K。我们用B来表示数据块的字节数。(以上所提到的散列函数的分割数据块字长B=64),用L来表示散列函数的输出数据字节数(MD5中L=16,SHA-1中L=20)。鉴别密钥的长度可以是小于等于数据块字长的任何正整数值。应用程序中使用的密钥长度若是比B大,则首先用使用散列函数H作用于它,然后用H输出的L长度字符串作为在HMAC中实际使用的密钥。一般情况下,推荐的最小密钥K长度是L个字节。
算法表示
算法公式:HMAC(K,M)=H(K⊕opad∣H(K⊕ipad∣M))[1]
H代表所采用的HASH算法(如SHA-256)
K代表认证密码
Ko代表HASH算法的密文
M代表一个消息输入
B代表H中所处理的块大小,这个大小是处理块大小,而不是输出hash的大小
如,SHA-1和SHA-256 B=64
SHA-384和SHA-512 B=128
L表示hash的大小
Opad用0x5c重复B次
Ipad用0x36重复B次
Apad用0x878FE1F3重复(L/4)次
HMAC运算步骤
First-Hash=H(Ko XOR Ipad||(data to auth))
Second-Hash=H(Ko XOR Opad||First-Hash)
(1)在密钥K后面添加0来创建一个字长为B的字符串。(例如,如果K的字长是20字节,B=64字节,则K后会加入44个零字节0x00)
(2)将上一步生成的B字长的字符串与ipad做异或运算。
(3)将数据流text填充至第二步的结果字符串中。
(4)用H作用于第三步生成的数据流。
(5)将第一步生成的B字长字符串与opad做异或运算。
(6)再将第四步的结果填充进第五步的结果中。
(7)用H作用于第六步生成的数据流,输出最终结果
HMAC的应用
hmac主要应用在身份验证中,它的使用方法是这样的:
(1)客户端发出登录请求(假设是浏览器的GET请求)
(2)服务器返回一个随机值,并在会话中记录这个随机值
(3)客户端将该随机值作为密钥,用户密码进行hmac运算,然后提交给服务器
(4)服务器读取用户数据库中的用户密码和步骤2中发送的随机值做与客户端一样的hmac运算,然后与用户发送的结果比较,如果结果一致则验证用户合法
在这个过程中,可能遭到安全攻击的是服务器发送的随机值和用户发送的hmac结果,而对于截获了这两个值的黑客而言这两个值是没有意义的,绝无获取用户密码的可能性,随机值的引入使hmac只在当前会话中有效,大大增强了安全性和实用性。大多数的语言都实现了hmac算法,比如php的mhash、python的hmac.py、java的MessageDigest类,在web验证中使用hmac也是可行的,用js进行md5运算的速度也是比较快的。
希赛软考网,拥有十四年软考培训经验,希赛网一直坚持自主研发,将丰富的软考培训经验有效融入教程研发过程,自成体系的软考在线题库(软考历年真题)、软考培训教材和软考视频教程,多样的培训方式包括在线辅导、面授、和,使考生的学习更具系统性,辅导更具针对性。采用全程督学机制,,软考平均通过率在全国。
软考备考资料免费领取
去领取