1HMAC概述

HMAC算法首先它是基于信息摘要算法的。目前主要集合了MD和SHA两大系列消息摘要算法。其中MD系列的算法有HmacMD2、HmacMD4、HmacMD5三种算法;SHA系列的算法有HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512五种算法。

HMAC算法除了需要信息摘要算法外,还需要一个密钥。HMAC的密钥可以是任何长度,如果密钥的长度超过了摘要算法信息分组的长度,则首先使用摘要算法计算密钥的摘要作为新的密钥。一般不建议使用太短的密钥,因为密钥的长度与安全强度是相关的。通常选取密钥长度不小于所选用摘要算法输出的信息摘要的长度。

2HMAC算法分析

HMAC算法本身并不复杂,起需要有一个哈希函数,我们记为H。同时还需要有一个密钥,我们记为K。每种信息摘要函数都对信息进行分组,每个信息块的长度是固定的,我们记为B(如:SHA1为512位,即64字节)。每种信息摘要算法都会输出一个固定长度的信息摘要,我们将信息摘要的长度记为L(如MD5为16字节,SHA-1为20个字节)。正如前面所述,K的长度理论上是任意的,一般为了安全强度考虑,选取不小于L的长度。

HMAC算法其实就是利用密钥和明文进行两轮哈希运算,以公式可以表示如下:

HMAC(K,M)=H(K⊕opad∣H(K⊕ipad∣M)),其中:

Ipad为0x36重复B次

Opad为0x5c重复B次

M 代表一个消息输入

根据上面的算法表示公式,我们可以描述HMAC算法的运算步骤:

(1)、检查密钥K的长度。如果K的长度大于B则先使用摘要算法计算出一个长度为L的新密钥。如果后K的长度小于B,则在其后面追加0来使其长度达到B。

(2)、将上一步生成的B字长的密钥字符串与ipad做异或运算。

(3)、将需要处理的数据流text填充至第二步的结果字符串中。

(4)、使用哈希函数H计算上一步中生成的数据流的信息摘要值。

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

(6)、再将第四步得到的结果填充到第五步的结果之后。

(7)、使用哈希函数H计算上一步中生成的数据流的信息摘要值,输出结果就是最终的HMAC值。

由上述描述过程,我们知道HMAC算法的计算过程实际是对原文做了两次类似于加盐处理的哈希过程。

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算法分析相关推荐

  1. 信息摘要算法之一:MD5算法解析及实现

    MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有MD5实现. ...

  2. 分布式服务器框架之Servers.Core库实现 DES对称加密算法;SHA1信息摘要算法;MD5信息摘要算法

    1 介绍 1.1 DES对称加密算法介绍 对称加密算法 通信双方(通信主体)同时掌握一个钥匙,加解密都由这一个钥匙完成.通信双方通信前共同拟定一个密钥,不向第三方公开,发送前加密和接受后解密都由此密钥 ...

  3. 密码学 MD5信息摘要算法

    一.简介 MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确 ...

  4. 加密解密、信息摘要算法收集

    MD5算法研究 综述 md5的全称是message-digest algorithm 5(信息-摘要算法),在90年代初由mit laboratory for computer science和rsa ...

  5. MD5信息摘要算法详解

    MD5信息摘要算法详解 文章目录 MD5信息摘要算法详解 01 MD5概要 02 MD5特性 03 MD5应用 04 MD5实现算法 05 MD5在线网站 01 MD5概要 MD5信息摘要算法,一种被 ...

  6. 简述MD5信息摘要算法

    在之前的文章中,我们聊了不少的加密算法,今天我们聊一种被广泛使用的密码散列函数--MD5. MD5又叫MD5信息摘要算法,经常用于确保信息传输的完整性和一致性 .从严格意义上来说,MD5并不是加密算法 ...

  7. 信息摘要算法之六:HKDF算法分析与实现

    HKDF是一种特定的键衍生函数(KDF),即初始键控材料的功能,KDF从其中派生出一个或多个密码强大的密钥.在此我们想要描述的是基于HMAC的HKDF. 1.HKDF概述 密钥派生函数(KDF)是密码 ...

  8. 信息摘要算法之四:SHA512算法分析与实现

    前面一篇中我们分析了SHA256的原理,并且实现了该算法,在这一篇中我们将进一步分析SHA512并实现之. 1.SHA简述 尽管在前面的篇章中我们介绍过SHA算法,但出于阐述的完整性我依然要简单的说明 ...

  9. 信息摘要算法之三:SHA256算法分析与实现

    前面一篇中我们分析了SHA的原理,并且以SHA1为例实现了相关的算法,在这一片中我们将进一步分析SHA2并实现之. 1.SHA简述 前面的篇章中我们已经说明过,SHA实际包括有一系列算法,分别是SHA ...

最新文章

  1. 不同版本gene ID比较
  2. Android onPause()和onStop()区别
  3. poj2586(贪心盈亏问题)
  4. android中如何实现UI的实时更新---需要考虑电量和流量
  5. POI异步导入Excel兼容xsl和xlsx
  6. 全球及中国有色金属行业产量规模与未来发展形势展望报告2021版
  7. OA工作流程怎么梳理
  8. 【机器学习】三层神经网络
  9. 兰州交通大学开除患癌教师符合理性
  10. xmemcached spring 配置文件
  11. 前端学习(1847)vue之电商管理系统电商系统的功能划分
  12. 来自朋友最近阿里、腾讯、美团等P7岗位面试题
  13. 第 8 天 多线程与多进程
  14. JSONP跨域请求原理解析
  15. Python字符串地常规操作:取值,切片,查找,替换,分割,拼接,转义
  16. Win10 设置系统还原点
  17. 27个最佳Beaver Builder主题和模板(2020)
  18. 谁说前端不能搞红黑树,用这55张图拿JS一起手撕红黑树
  19. 如何用Python画一只兔子——turtle库circle()画圆函数的详细用法介绍
  20. vue中使用rem布局

热门文章

  1. html页面控制台输出,浏览器javascript输出控制台在哪?
  2. NVIDIA开源Linux GPU内核驱动
  3. 简单实现在线更新系统
  4. 大卫 异星觉醒 机器人_异星觉醒有第二部吗揭晓 大结局剧情反转让人措手不及...
  5. 圖像及編程常用網址,作為收藏 Very Good
  6. 【C++】专项练习(2)(牛客)
  7. a标签,下划线的操作
  8. Linux虚拟机安装与使用(2022年5月24日)
  9. JavaSE——基础知识回顾14之集合(下半部分Map)
  10. dotnetty java netty,Netty(DotNetty)原理解析