1. 定义

HMAC(Hash-based Message Authentication Code)是一种基于加密Hash函数来实现的MAC算法。
eg. HMAC-MD5(使用MD5作为Hash函数)、HMAC-SHA256(使用SHA256作为Hash函数)

H: Hash函数
m: 消息原文
K:密钥
K’ :由k通过某种算法得到

在密钥K后面添加0或者对密钥K用H进行处理来创建一个字长为B的字符串。
eg.
如果K的字长是20字节,B=64字节,则K后会加入44个零字节0x00;
如果K的字长是120字节,B=64字节,则会用H作用于K后产生64字节的字符串

‖ : 字符拼接
⊕ : XOR位异或运算

假设块长度为B,
ipad: 一个字节(内容为0x36)重复B次;
opad: 一个字节(内容为0x5C)重复B次;

2. 算法过程

以 HMAC-SHA1为例

通常的过程为:
IV: 哈希函数输入的初始值
n:哈希函数生成出来的码长
L:M的分组数

3. 使用场景举例

ePass USB Key,主要是用作基于公钥体系(PKI)的数字证书和私钥的安全载体,RSA 密钥对是在USB Key内生成的,私钥永远不能导出,确保证书持有人的信息安全。

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

【参考】

[1] csdn 【密码学原理】消息验证码MAC的构造方法:HMAC,DAA,CMAC

HMAC(2)哈希运算消息认证码HMAC相关推荐

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

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

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

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

  3. HMAC哈希消息认证码

    收藏 137 14 hmac 编辑 HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出. 中文名 哈希消息认证码 外文名 Hash- ...

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

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

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

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

  6. 消息摘要算法与消息认证码简介

    消息摘要算法 消息摘要算法,也称为哈希算法或散列算法.消息摘要算法对一组输入数据进行计算,得到一个固定长度的输出摘要.消息摘要算法主要作用不是进行数据的加解密,而是校验数据的完整性.消息摘要算法很难从 ...

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

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

  8. 认证篇——消息认证码

    目录 一.消息认证码介绍 1)消息认证码的使用步骤: 2)消息认证码的密钥配送问题: 3)消息认证码的实例: 4)消息认证码的实现: 二.HMAC(可忽略) 三.对消息认证码的攻击 四.消息认证码无法 ...

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

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

最新文章

  1. POJ 1273 Drainage Ditches
  2. java条件语句例题_Java-条件语句、循环语句练习
  3. 直正的互联网产品设计:七个作为产品经理实际上很重要的”小事“
  4. 工业用微型计算机(12)-指令系统(7)
  5. datetime模块
  6. 嵌入式开发中常用的几种通信接口总结
  7. php mysql 查询缓存_mysql 查询缓存使用详解
  8. Python学习:命令行运行,循环结构
  9. 华为、大众组建合资公司?相关回应来了
  10. html底部弹出选择,jQuery手机端底部弹出菜单列表特效代码
  11. java日期格式化、解析
  12. adaboost代码实现
  13. vc++中实现进度条
  14. python查单词音标_有没有通过读音或音标就能查出英语单词的办法,比如发音查词软件?...
  15. Windows11系统中便签小工具在哪 便签使用方法简单图解
  16. 萤石开放平台的二次开发——设备如何上云
  17. MFC 控件被图片覆盖
  18. 我在Facebook工作四年的总结与反思
  19. sql server 字符串转成日期格式
  20. github建立自己的个人网站

热门文章

  1. Java 洛谷 P1219 八皇后
  2. SpringMVC 中静态资源的处理
  3. javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/
  4. php面向对象封装mysql_php mysqli面向对象封装mysql数据库常用操作
  5. mysql 重构同步老数据_MySQL 重构查询的方式
  6. linux ssh连接交换机_linux SSH 隧道
  7. 64位java怎么安装使用_如何在64位Windows计算机上安装rJava与64位R一起使用?
  8. 【图解】一图了解《上海市推进新一代信息基础设施建设 助力提升城市能级和核心竞争力三年行动计划(2018-2020年)》...
  9. Python之 sklearn:sklearn中的RobustScaler 函数的简介及使用方法之详细攻略
  10. Interview:算法岗位面试—10.31下午上海某银行总部公司(二面,四大行之一)之项目简介、比赛介绍、某个比赛的过程