收藏

137

14

hmac

编辑

HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
中文名
哈希消息认证码
外文名
Hash-based Message Authentication Code
缩    写
HMAC
概述 
HMAC是密钥相关的哈希运算
运算作用
验证TPM接受的授权数

目录

  1. 1 简介
  2. ▪ 运算作用
  3. ▪ 算法表示
  1. ▪ HMAC运算步骤
  2. ▪ HMAC的应用
  3. 2 典型应用
  1. ▪ 认证流程
  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结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以无法仿造出一致的响应。

转载于:https://www.cnblogs.com/yuhuameng/p/11258327.html

HMAC哈希消息认证码相关推荐

  1. 【转】HMAC哈希消息认证码及算法原理

    HMAC算法原理 HMAC算法是一种基于密钥的报文完整性的验证方法 ,其安全性是建立在Hash加密算法基础上的.它要求通信双方共享密钥.约定算法.对报文进行Hash运算,形成固定长度的认证码.通信双方 ...

  2. 哈希消息认证码HmacSHA256-javascript版

    流程 向后端ajax申请时进行加密,加密是通过一些规则对data加密,调用tokentest方法需要做三个事情 1.生成时间戳 timestamp 2.生成随机字符串 nonceStr 3.通过Cry ...

  3. 基于Hash的消息认证码HMAC简介及在OpenSSL中使用举例

    HMAC(Hash-based Message Authentication Code):基于Hash的消息认证码,是一种通过特别计算方式之后产生的消息认证码(MAC),使用密码散列函数,同时结合一个 ...

  4. HMAC(1)消息认证码MAC算法

    1. 定义 MAC(Message Authentication Code) 算法是以消息本身和密钥作为输入,经过一系列计算产生一个消息哈希的算法,用来保证消息的数据完整性和消息的数据源认证. 2. ...

  5. 密码学数学基础,群,阿贝尔群,阶,双线性对,哈希函数,消息认证码概述

    目录 抽象代数基础 群 阿贝尔群(Abelian Group) 阶(Order) 循环群(Cyclic Group) 双线性对 哈希函数H 消息认证码MAC 抽象代数基础 群 定义 群(Group), ...

  6. [密码学] 消息认证码构造方法

    文章目录 基于Hash函数的消息认证码 KeyedHash=Hash(Key||Message) HMAC与NMAC   HAMC   CMAC 基于分组密码的MAC DAA 主要实现方法:   ①带 ...

  7. 密码技术--消息认证码及go语言应用

    1.什么是消息认证码 消息认证码(message authorization code)是一种确认完整性并进行认证的技术,取了三个单词的首字母,简称为MAC 发送者:((原始数据) + 秘钥) * 哈 ...

  8. 【学习笔记】密码学入门(2) 单向散列函数,消息认证码,数字签名,证书

    [学习笔记]密码学入门(2) 单向散列函数,消息认证码,数字签名,证书 学习笔记 2 – 混合密码系统 在密码学入门(1)中提到了基本的密码形式,对称密码和公钥密码以及混合密码系统. 这一部分将学习到 ...

  9. 消息认证码和单向散列函数

    因为在上一部分没有解释这两个概念,所以在这里详细解释一下 消息验证码和单向散列函数是进行消息身份验证的两个方法 而且他俩都属于"没有消息加密的消息身份验证" 消息认证码(MAC) ...

最新文章

  1. 解决cocoapods在64位iOS7系统以下的警告问题
  2. ProxySQL MySQL MGR8配置
  3. 【思考?】什么时候会触发这个策略呢?
  4. 深入理解Java中的位操作
  5. Mysql用户访问工作原理
  6. 团队天梯赛L1-001
  7. 【二叉树】剑指offer:二叉树中序遍历的下一个节点
  8. 疑 Android N 截图曝光,通知栏对比上一代变了不少
  9. AI2(App Inventor 2)离线版服务器单机版
  10. win10 python ffmpeg推流到b站
  11. 合并两个有序数组 Go语言
  12. 基于R语言的因子分析
  13. wps共享文档无法连接服务器,WPS云文档链接分享后对方没有访问权限?解决办法在此...
  14. protel DXP2004批量修改
  15. 云计算的技术发展趋势
  16. NSDate中夏令时的坑你知道吗
  17. 如何阅读一份上市公司财报 - 财报阅读入门
  18. 公司用的非标普通自动化用单片机还是plc_自动化专业现在吃香吗?
  19. 三极管吸潮失效分析案例
  20. HTML实体字符、ASCII码、URLEncoder、Base64、MD5

热门文章

  1. 微信一直无妨链接服务器,女人心里没有你,微信不会拉黑,不会删除,却会有这些信号!...
  2. 5.2 积分基本公式
  3. 高等数学求积分 一(根据基本积分公式)
  4. 旅游网项目案例以及源码
  5. 未来10年计算机发展方向,笔记本电脑在未来十年的发展方向
  6. java中bit和字节的常用知识
  7. 关于前端将一个集合传递到后端
  8. 广告和电商应该怎么串联起来呢?我们可以从各大巨头的动作中发掘
  9. 能链科技深耕苏州,受邀参加中国金融科技产业峰会
  10. Angular: Material Design Angular教程:Material设计 Lynda课程中文字幕