zoukankan      html  css  js  c++  java
  • HMAC是一种利用哈希函数构造消息认证码的方法

    HMAC是一种利用哈希函数构造消息认证码的方法

    来源:HMAC算法 HMAC的图解

    HMAC是一种使用单向散列函数来构造消息认证码的方法,其中HMAC中的H就是Hash的意思。

    HMAC中所使用的单向散列函数并不仅限于一种,任何高强度的单向散列函数都可以被用于HMAC,如果将来设计出的新的单向散列函数,也同样可以使用。

    使用SHA-1、SHA-224、SHA-256、SHA-384、SHA-512所构造的HMAC,分别称为HMAC-SHA1、HMAC-SHA-224、HMAC-SHA-384、HMAC-SHA-512

    过程:(计算text内容的HMAC值)

    H( K XOR opad, H(K XOR ipad, text))

    我们假设H是一个将数据块用一个基本的迭代压缩函数来加密的散列函数。 我们用B来表示数据块的字长(即分组长度)。(以上说提到的散列函数的分割数据块字长B=64), 用L来表示散列函数的输出数据字长(MD5中L=16(128位),SHA—1中L=20(160位))。 K是一个密钥,H是HMAC的加密用的散列函数,XOR异或运算,

    我们将定义两个固定且不同的字符串ipad,opad: (‘i','o'标志内部与外部) ipad = the byte 0x36 repeated B times opad = the byte 0x5C repeated B times.

    考虑到密钥K的长度可能小于B,所以:

    当K长度小于B(即分组长度)时,则在K之后补0(即0x00),直到其长度达到单向散列函数的分组长度B为止。 (例如,如果K的字长是20字节,B=64字节,则K后会加入44个零字节0x00) 当密钥K的长度大于分组长度B时,首先使用散列函数H处理K,然后H输出的L长度的字符串作为K,即K=H(K)。

    计算‘text'的HMAC: H( K XOR opad, H(K XOR ipad, text)) HMAC过程:

    (1) 密钥填充:(当K长小于分组长度B时)在密钥K后面添加0来创建一个子长为B的字符串。 (例如,如果K的字长是20字节,B=64字节,则K后会加入44个零字节0x00) 若K长大于分组长度B,则K=H(K),先用散列函数H处理K。

    (2)填充后的密钥与ipad的XOR: 将上一步生成的B字长的字符串与ipad做异或运算xor。

    (3)与消息组合: 将数据流text填充至第二步的结果字符串中。

    (4) 计算散列值:用H作用于第三步生成的数据流。

    (5) 填充后的密钥与opad的XOR:将第一步生成的B字长字符串与opad做异或运算。

    (6) 与散列值组合:再将第四步的结果填充进第五步的结果中。

    (7) 计算散列值:用H作用于第六步生成的数据流,输出最终结果。

     

    HMAC的典型应用 HMAC的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中,认证流程如下: (1) 先由客户端向服务器发出一个验证请求。 (2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。 (3) 客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。 (4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户 。

     

    记住公式:H( K XOR opad, H(K XOR ipad, text))就ok了

  • 相关阅读:
    11月2日考试 题解(前缀和+哈希+树状数组+树链剖分)
    【Ynoi2016】谁的梦 题解(容斥+STL)
    ENABLE_DDL_LOGGING参数
    ORA-12012: error on auto execute of job 25;ORA-12005: may not schedule automatic refresh for times in the past
    Oracle增加数据文件
    使用Loop循环向测试表插入数据
    Oracle中开窗函数row_number()、rank()、dense_rank()
    安装Oracle 19c RAC创建ssh连接成功,测试报错INS-06006
    .Net5 WebApi Swagger 发布IIS遇到的坑
    .Net5 开启JWT认证授权
  • 原文地址:https://www.cnblogs.com/forforever/p/12633536.html
Copyright © 2011-2022 走看看