`

hmac验证

阅读更多
HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
中文名 哈希消息认证码 外文名 HMAC 概述  HMAC是密钥相关的哈希运算 运算作用 验证TPM接受的授权数 算法表示 算法公式 : HMAC(K,
目录
1 简介
▪ 运算作用
▪ 算法表示
▪ HMAC运算步骤
▪ HMAC的应用
2 典型应用
▪ 认证流程
▪ 安全性浅析
简介编辑
运算作用

(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运算的速度也是比较快的。
典型应用编辑
HMAC的一个典型应用是用在“质疑/应答”(Challenge/Response)身份认证中。
认证流程

(1) 先由客户端向服务器发出一个验证请求。
(2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为质疑)。
(3) 客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。
(4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户
安全性浅析

由上面的介绍,我们可以看出,HMAC算法更象是一种加密算法,它引入了密钥,其安全性已经不完全依赖于所使用的HASH算法,安全性主要有以下几点保证:
(1) 使用的密钥是双方事先约定的,第三方不可能知道。由3.2介绍的应用流程可以看出,作为非法截获信息的第三方,能够得到的信息只有作为“挑战”的随机数和作为“响应”的HMAC结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以无法仿造出一致的响应。


转载自:http://baike.baidu.com/link?url=thEylTl7_02WC_PRghNXT3H6AICmaH7yyMCUcmZZr57MgtWhBcSZen2oqlUDMoW6OFCiIX9d0BocL-08VJEChq
分享到:
评论

相关推荐

    schnellburger:Golang中请求的HMAC验证

    3. **创建中间件**:使用库提供的函数创建一个HMAC验证中间件,例如`hmacMiddleware := schnellburger.NewHMACMiddleware(yourSecretKey)`。 4. **应用中间件**:将中间件应用到你的HTTP服务器路由上,`http.Handle...

    spring-hmac-rest:RESTful Web服务示例的Spring HMAC身份验证过滤器

    RESTfull Web服务示例的Spring HMAC身份验证过滤器。 客户端向服务器发送以下http请求: POST /api/echo HTTP/1.1 Accept: application/json, application/*+json Content-Type: application/json Date: Thu, 29 ...

    hmac-sha256.zip_HMAC-SHA224_hmac_hmac sha2_hmac sha256 c++_hmac-

    HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的消息认证码,用于验证数据的完整性和来源。它结合了密钥和哈希函数来提供更强的安全性。在本案例中,我们关注的是HMAC-SHA256,它是使用SHA-256...

    HMAC.rar_HMAC matlab_encryption matlab_hmac_in_matlab_HMAC

    哈希消息认证码(HMAC)是一种用于验证数据完整性和来源的安全机制。它结合了哈希函数和密钥,以确保信息在传输过程中未被篡改。在 MATLAB 中实现 HMAC,我们可以遵循以下步骤: 1. **选择哈希函数**:HMAC 可以...

    Hmac算法c语言实现

    哈希消息认证码(HMAC,Hash-based Message Authentication Code)是一种用于验证数据完整性和来源的密码学技术。它结合了散列函数(如SHA-1、SHA-256或MD5)和密钥,为数据提供了一种经济有效的认证方式。在C语言中...

    HMAC SHA1加密 C语言源码

    HMAC(Hash-based Message Authentication Code)是一种用于验证数据完整性和来源的安全机制,通过结合密钥和哈希函数来完成。SHA1(Secure Hash Algorithm 1)是哈希函数的一种,能够将任意长度的输入转化为固定...

    hmac加密算法的JS文件hmac-sha1.js

    HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的安全机制,用于验证数据的完整性和来源。SHA1(Secure Hash Algorithm 1)是哈希函数的一种,它将任意长度的数据转化为固定长度的摘要值。HMAC-...

    HMAC-SHA256和HMAC-SHA1加密C语言代码

    HMAC(Hash-based Message Authentication Code)和SHA(Secure Hash Algorithm)是两种常见的加密技术,用于验证数据的完整性和来源的真实性。本项目提供了C语言实现的HMAC-SHA256和HMAC-SHA1加密算法,适用于VC...

    hmac-sha1简单实现

    HMAC-SHA1是一种基于密钥的哈希消息认证码(Hash-based Message Authentication Code)算法,它是结合了哈希函数(SHA1)和密钥的一种安全机制,主要用于验证数据的完整性和来源的真实性。在网络安全、数据加密和...

    C++ HMAC SHA1

    HMAC是用于验证数据完整性和来源的有效方法,它结合了密钥和哈希函数来提供更强的安全性。在本案例中,C++代码提供了对HMAC SHA1的实现,可以被其他编程语言如VC++、VB或C#通过动态链接库的方式调用。 SHA1是一种...

    notification-hmac-examples:验证推送通知签名的示例

    本文将详细解析HMAC验证过程及其在JavaScript中的实现。 HMAC是一种基于哈希函数的安全机制,用于验证数据的完整性和验证发送者的身份。它通过结合密钥和消息的哈希值来创建一个签名,接收方可以使用相同的密钥重新...

    hmac.dll (HMACSHA1、HMACSHA256、HMACMD5)

    HMAC是基于密钥的哈希函数,用于验证数据的完整性和来源。它结合了哈希函数(如SHA1、SHA256和MD5)与密钥,提供了一种更为安全的校验方式。 HMACSHA1、HMACSHA256和HMACMD5是使用不同哈希算法实现的HMAC变体: 1....

    HMACall_hash_hmac_加密_

    HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的安全机制,用于验证数据的完整性和来源。本文将深入探讨HMAC的概念、工作原理、应用以及与加密的关系。 HMAC是由Krawczyk、Micali和Rivest在...

    hmac.rar_hmac_hmac aes_hmac pudn_hmac-sha1_验证码

    **HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的消息认证码,它结合了密钥和消息,用于验证消息的完整性和来源的可靠性。在标题“hmac.rar_hmac_hmac_aes_hmac-sha1_验证码”中,我们可以...

    HMAC-SHA1算法

    HMAC是一种使用密钥的报文完整性验证方法,其核心思想是利用密钥和哈希函数共同作用于消息上生成一个固定长度的认证码(MAC)。这种机制要求通信双方事先共享密钥并约定使用哪种哈希函数(如MD5、SHA1、RIPEMD等)。...

    C++ HMAC_SHA1加密

    8. **比较和验证HMAC**:如果接收到的消息带有HMAC值,可以用同样的密钥和消息重新计算HMAC,比较两者是否一致来验证消息的完整性和真实性。 提供的文档很可能会详细介绍如何使用这个C++库,包括示例代码、函数解释...

    c++ hmac_md5加密

    HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的安全机制,用于验证消息的完整性和来源。MD5(Message-Digest Algorithm 5)则是一种广泛应用的哈希算法,虽然在安全性上已不再满足现代需求,...

    C#基于Hmac sha256及Hmac sha 512 做的对称加密解密

    HMAC是一种用于验证数据完整性和来源的安全机制,它结合了密钥和哈希函数。HMAC-SHA256和HMAC-SHA512分别基于SHA-256和SHA-512哈希算法,提供更强的安全性,因为它们生成更长的哈希值(分别为256位和512位)。 在C#...

    Crypto-JS v2.5.3

    综上所述,Crypto-JS v2.5.3为Web开发者提供了一套全面的加密工具集,包括AES加密、HMAC验证、PBKDF2密钥派生,以及可能的多种块模式支持。这些功能使得在浏览器端实现安全的数据处理成为可能,对于构建安全的Web...

    hmac-demo.rar

    `HMAC`(Hash-based Message Authentication Code)和`MD5`(Message-Digest Algorithm 5)是两种常见的加密和验证机制,广泛应用于网络通信、文件校验等领域。本文将详细介绍这两个概念以及它们在Java中的实现。 ...

Global site tag (gtag.js) - Google Analytics