HMAC(2)哈希运算消息认证码HMAC
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相关推荐
- 基于Hash的消息认证码HMAC简介及在OpenSSL中使用举例
HMAC(Hash-based Message Authentication Code):基于Hash的消息认证码,是一种通过特别计算方式之后产生的消息认证码(MAC),使用密码散列函数,同时结合一个 ...
- 【转】HMAC哈希消息认证码及算法原理
HMAC算法原理 HMAC算法是一种基于密钥的报文完整性的验证方法 ,其安全性是建立在Hash加密算法基础上的.它要求通信双方共享密钥.约定算法.对报文进行Hash运算,形成固定长度的认证码.通信双方 ...
- HMAC哈希消息认证码
收藏 137 14 hmac 编辑 HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出. 中文名 哈希消息认证码 外文名 Hash- ...
- 密码技术--消息认证码及go语言应用
1.什么是消息认证码 消息认证码(message authorization code)是一种确认完整性并进行认证的技术,取了三个单词的首字母,简称为MAC 发送者:((原始数据) + 秘钥) * 哈 ...
- 【学习笔记】密码学入门(2) 单向散列函数,消息认证码,数字签名,证书
[学习笔记]密码学入门(2) 单向散列函数,消息认证码,数字签名,证书 学习笔记 2 – 混合密码系统 在密码学入门(1)中提到了基本的密码形式,对称密码和公钥密码以及混合密码系统. 这一部分将学习到 ...
- 消息摘要算法与消息认证码简介
消息摘要算法 消息摘要算法,也称为哈希算法或散列算法.消息摘要算法对一组输入数据进行计算,得到一个固定长度的输出摘要.消息摘要算法主要作用不是进行数据的加解密,而是校验数据的完整性.消息摘要算法很难从 ...
- HMAC(1)消息认证码MAC算法
1. 定义 MAC(Message Authentication Code) 算法是以消息本身和密钥作为输入,经过一系列计算产生一个消息哈希的算法,用来保证消息的数据完整性和消息的数据源认证. 2. ...
- 认证篇——消息认证码
目录 一.消息认证码介绍 1)消息认证码的使用步骤: 2)消息认证码的密钥配送问题: 3)消息认证码的实例: 4)消息认证码的实现: 二.HMAC(可忽略) 三.对消息认证码的攻击 四.消息认证码无法 ...
- [密码学] 消息认证码构造方法
文章目录 基于Hash函数的消息认证码 KeyedHash=Hash(Key||Message) HMAC与NMAC HAMC CMAC 基于分组密码的MAC DAA 主要实现方法: ①带 ...
最新文章
- POJ 1273 Drainage Ditches
- java条件语句例题_Java-条件语句、循环语句练习
- 直正的互联网产品设计:七个作为产品经理实际上很重要的”小事“
- 工业用微型计算机(12)-指令系统(7)
- datetime模块
- 嵌入式开发中常用的几种通信接口总结
- php mysql 查询缓存_mysql 查询缓存使用详解
- Python学习:命令行运行,循环结构
- 华为、大众组建合资公司?相关回应来了
- html底部弹出选择,jQuery手机端底部弹出菜单列表特效代码
- java日期格式化、解析
- adaboost代码实现
- vc++中实现进度条
- python查单词音标_有没有通过读音或音标就能查出英语单词的办法,比如发音查词软件?...
- Windows11系统中便签小工具在哪 便签使用方法简单图解
- 萤石开放平台的二次开发——设备如何上云
- MFC 控件被图片覆盖
- 我在Facebook工作四年的总结与反思
- sql server 字符串转成日期格式
- github建立自己的个人网站
热门文章
- Java 洛谷 P1219 八皇后
- SpringMVC 中静态资源的处理
- javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/
- php面向对象封装mysql_php mysqli面向对象封装mysql数据库常用操作
- mysql 重构同步老数据_MySQL 重构查询的方式
- linux ssh连接交换机_linux SSH 隧道
- 64位java怎么安装使用_如何在64位Windows计算机上安装rJava与64位R一起使用?
- 【图解】一图了解《上海市推进新一代信息基础设施建设 助力提升城市能级和核心竞争力三年行动计划(2018-2020年)》...
- Python之 sklearn:sklearn中的RobustScaler 函数的简介及使用方法之详细攻略
- Interview:算法岗位面试—10.31下午上海某银行总部公司(二面,四大行之一)之项目简介、比赛介绍、某个比赛的过程