HMAC 算法

HMAC 算法

HMAC Hash-based Message Authentication Code, 哈希消息认证码.HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。就是所谓的加盐 !运算作用

验证TPM接受的授权数据和认证数据;

确认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个字节。

算法表示123456789101112算法公式 : 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 = 64SHA-384和SHA-512 B = 128L 表示hash的大小Opad 用0x5c重复B次Ipad 用0x36重复B次Apad 用0x878FE1F3重复(L/4)次

HMAC的应用hmac主要应用在身份验证中,它的使用方法是这样的:

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

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

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

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

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

相关推荐

计算机等级考试二级里哪个最好考?
365会提款不成功吗

计算机等级考试二级里哪个最好考?

📅 08-02 👁️ 7704
已心动!北海本地人三天两晚详细攻略,冬天北海看海避寒好去处
淘宝中在哪里找出浏览痕迹 ?如何做?
365会提款不成功吗

淘宝中在哪里找出浏览痕迹 ?如何做?

📅 07-20 👁️ 4803
联通宽带欠费怎么查询
365会提款不成功吗

联通宽带欠费怎么查询

📅 07-08 👁️ 2894
htc+820+android+5.0,首款高通64位八核 HTC Desire 820评测
365会提款不成功吗

htc+820+android+5.0,首款高通64位八核 HTC Desire 820评测

📅 07-31 👁️ 7947
金秀贤的身高是多少?(金秀贤的身高到底是多少呢?)
365会提款不成功吗

金秀贤的身高是多少?(金秀贤的身高到底是多少呢?)

📅 08-15 👁️ 1033