`

HMAC简介

 
阅读更多

HMAC简介
HMAC的典型应用展开
编辑本段
HMAC简介

  HMAC是密钥相关的哈希运算消息认证码(keyed-Hash Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
HMAC引擎提供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约定的算法表示
  H 代表所采用的HASH算法(如SHA-256)
  K 代表认证密码
  Ko 代表HASH算法的密文
  B 代表H中所处理的块大小,这个大小是处理块大小,而不是输出hash的大小
  如,SHA-1和SHA-256 B = 64
  SHA-384和SHA-512 B = 128
  L 表示hash的大小
  Opad 用0x5a重复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的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中,
认证流程:
  (1) 先由客户端向服务器发出一个验证请求。
  (2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。
  (3) 客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。
  (4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户
安全性浅析
  由上面的介绍,我们可以看出,HMAC算法更象是一种加密算法,它引入了密钥,其安全性已经不完全依赖于所使用的HASH算法,安全性主要有以下几点保证:
  (1) 使用的密钥是双方事先约定的,第三方不可能知道。由3.2介绍的应用流程可以看出,作为非法截获信息的第三方,能够得到的信息只有作为“挑战”的随机数和作为“响应”的HMAC结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以无法仿造出一致的响应。
  (2) HMAC与一般的加密重要的区别在于它具有“瞬时”性,即认证只在当时有效,而加密算法被破解后,以前的加密结果就可能被解密。
分享到:
评论

相关推荐

    Python3 加密(hashlib和hmac)模块的实现

    hmac : 不可逆键值对方式加密 hashlib模块简介: hashlib模块为不同的安全哈希/安全散列(Secure Hash Algorithm)和 信息摘要算法(Message Digest Algorithm)实现了一个公共的、通用的接口,也可以说是一个统一...

    tinyToolkit:tinyToolkit是为减少编码工作而封装的简易工具套件,可单独提取二进制嵌入项目代码中,最低支持c ++ 11

    简介 tinyToolkit是为减少编码工作而封装的简易工具套件,可单独提取二进制嵌入项目代码中,最低支持c ++ 11 依赖 fmtlib 安装 如若自动编译,可运行脚本目录下各平台安装脚本(脚本中会自动编译安装3rd / fmt库,如...

    廖雪峰python3 完整带索引,图片 最新教程 pdf版

    hmac itertools contextlib urllib XML HTMLParser 常用第三方模块 Pillow requests chardet psutil virtualenv 图形界面 网络编程 TCP/IP简介 TCP编程 UDP编程 电子邮件 SMTP发送邮件 POP3收取邮件 访问数据库 使用...

    mycrypto:各种加密

    mycrypto简介搜罗各种加密算法电子邮件传输算法Base64摘要算法MD2,MD5;SHA-256,SHA-348,SHA-512;HMAC;RipeMD系列,Tiger,Whirpoll,GOST3411以及 HmacRipeMD系列HMAC包括HmacMD2,HmacMD5,HmacMD4;HmacSHA1...

    openssl编程

    第二章 openssl简介 13 2.1 openssl简介 13 2.2 openssl安装 13 2.2.1 linux下的安装 13 2.2.2 windows编译与安装 14 2.3 openssl源代码 14 2.4 openssl学习方法 16 第三章 堆栈 17 3.1 openssl堆栈 17 3.2 数据结构...

    openssl 编程 当前版本

    第二章 openssl简介 13 2.1 openssl简介 13 2.2 openssl安装 13 2.2.1 linux下的安装 13 2.2.2 windows编译与安装 14 2.3 openssl源代码 14 2.4 openssl学习方法 16 第三章 堆栈 17 3.1 openssl堆栈 17 3.2 数据结构...

    Java版水果管理系统源码-KYFreeOTP:KYFreeOTP是一个免费的otp算法生成类库

    简介 动态口令是一种安全便捷的帐号防盗技术,可以有效保护交易和登录的认证安全,采用动态口令就无需定期更换密码,安全省心,这是这项技术的一个额外价值,对企事业内部应用尤其有用。 动态令牌即是用来生成动态...

    JWT_mashup_QSEoW:这是一个存储库,展示了如何在QSEoW上使用JWT进行简单的混搭

    可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公用/专用密钥对对JWT进行签名。 当使用公钥/私钥对对令牌进行签名时,签名还证明只有持有私钥的一方才是对其进行签名的一方。 JWT用于身份验证和授权。 由于JWT...

    Java学习指南16 项目应用篇

    一、课程简介 这是『Java学习指南系列』的第16篇教程 ,是Java开发的高级课程,介绍实际工程里常见的各种专项技术。 二、主要内容  (每章内容独立,各自独立成章) * 视频和音频的播放 ( libVLC )  * Excel ...

    Django rest framework jwt的使用方法详解

    一简介 JWT 是一个开放标准(RFC 7519),它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。该信息可以被验证和信任,因为它是数字签名的。JWTS可以使用秘密(使用HMAC算法)或...

    PHP如何使用JWT做Api接口身份认证的实现

    官网简介:JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用秘密(使用...

    wossl:OpenSSL对称算法、哈希校验、非对称算法、证书管理、SSL安全

    简介 OpenSSL管理平台为OpenSSL操作提供可视化的界面,方便快捷地完成对称算法、哈希校验、非对称算法、证书管理、SSL安全等操作。 功能模块: 对称算法:AES、DES、Triple DES。 哈希校验:MD2、MD4、MD5、SHA1、...

    xmljava系统源码-framework:FUNTL框架

    简介 Funtl Framework 基于多个优秀开源项目,高度整合封装,提供了互联网项目常用的工具类,如:在线支付、阿里云OSS、消息队列、Redis缓存、短信验证、百度编辑器、微信SDK等 模块 funtl-framework-core 核心模块...

    OpenSSL编程(三合一版).zip

    98 第十五章 Openssl摘要与HMAC 101 15.1 概述 101 15.2 openssl摘要实现 101 15.3 函数说明 101 15.4 编程示例 102 15.5 HMAC 103 第十六章 Openssl数据压缩 105 16.1 简介 105 16.2 ...

    微博控discuz插件v2.6

    【简介】 集成了多家微博,能让用户批量发布微博。关联discuz操作,用户的日常操作也能产生微博,利于网站推广,给网站带来意外的流量。 【功能介绍:】 1,批量发布微博。 用户可以绑定多家微博(新浪、腾讯、...

    微博控-discuz插件 v2.6.zip

    【简介】  集成了多家微博,能让用户批量发布微博。关联discuz操作,用户的日常操作也能产生微博,利于网站推广,给网站带来意外的流量。 【功能介绍:】 1,批量发布微博。  用户可以绑定多家微博(新浪、...

    Python的SimpleHTTPServer模块用处及使用方法简介

    搭建FTP,或者是搭建网络文件系统,这些方法都能够实现Linux的目录共享。但是FTP和网络文件系统的功能都过于强大,因此它们都有一些不够方便的地方。比如你想快速共享Linux系统的某个目录给整个项目团队,还想在一...

    WAP 无线应用协议

    WAP无线应用协议 英文 目 录 译者序 序 前言 第一部分 体系结构 第1章 无线应用协议体系结构规范 …1 1.1 范围 1 1.2 研究背景 1 1.2.1 研究目的 1 1.2.2 要求 2 1.3 体系结构概述 3 1.3.1 万维网模型 3 ...13.8 ...

    中文版RFC,共456

    RFC2459 Internet X.509 公钥基础设施:证书和CRL简介 RFC2460 Internet协议,版本6(IPv6)说明书 RFC2463 针对因特网协议第六版(Ipv6)的因特网控制报文协议(ICMPv6)规范 RFC2466 IP 版本6 管理信息基础:ICMPv6组 RFC...

Global site tag (gtag.js) - Google Analytics