java安全架构____java HMAC原理
来源:互联网 发布:文字填充图片软件 编辑:程序博客网 时间:2024/06/10 02:38
转自:http://baike.baidu.com/item/hmac
收藏
133有用+1已投票查看我的收藏
hmac
编辑锁定
HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
- 中文名
- 哈希消息认证码
- 外文名
- Hash-based Message Authentication Code
- 缩 写
- HMAC
- 概述
- HMAC是密钥相关的哈希运算
- 运算作用
- 验证TPM接受的授权数
目录
- 1简介
- ▪运算作用
- ▪算法表示
- ▪HMAC运算步骤
- ▪HMAC的应用
- 2典型应用
- ▪认证流程
- ▪安全性浅析
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算法表示
算法公式 : 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)次
hmacHMAC运算步骤
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作用于第六步生成的数据流,输出最终结果
hmacHMAC的应用
hmac主要应用在身份验证中,它的使用方法是这样的:
(1) 客户端发出登录请求(假设是浏览器的GET请求)
(2) 服务器返回一个随机值,并在会话中记录这个随机值
(3) 客户端将该随机值作为密钥,用户密码进行hmac运算,然后提交给服务器
(4) 服务器读取用户数据库中的用户密码和步骤2中发送的随机值做与客户端一样的hmac运算,然后与用户发送的结果比较,如果结果一致则验证用户合法
在这个过程中,可能遭到安全攻击的是服务器发送的随机值和用户发送的hmac结果,而对于截获了这两个值的黑客而言这两个值是没有意义的,绝无获取用户密码的可能性,随机值的引入使hmac只在当前会话中有效,大大增强了安全性和实用性。大多数的语言都实现了hmac算法,比如php的mhash、python的hmac.py、java的MessageDigest类,在web验证中使用hmac也是可行的,用js进行md5运算的速度也是比较快的。
hmac典型应用
编辑HMAC的一个典型应用是用在“质疑/应答”(Challenge/Response)身份认证中。
hmac认证流程
(1) 先由客户端向服务器发出一个验证请求。
(2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为质疑)。
(3) 客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。
(4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户
hmac安全性浅析
由上面的介绍,我们可以看出,HMAC算法更象是一种加密算法,它引入了密钥,其安全性已经不完全依赖于所使用的HASH算法,安全性主要有以下几点保证:
(1) 使用的密钥是双方事先约定的,第三方不可能知道。由3.2介绍的应用流程可以看出,作为非法截获信息的第三方,能够得到的信息只有作为“挑战”的随机数和作为“响应”的HMAC结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以无法仿造出一致的响应。
- 参考资料
- 1. HMAC .Atoam RFC 2104 - HMAC[引用日期2012-10-16]
0 0
- java安全架构____java HMAC原理
- java安全架构____java HMAC加密
- java安全架构____java SHA加密原理
- java安全架构____java Base64原理分析
- java安全架构____java DSA数字签名原理
- java安全架构____java DSA签名原理
- java安全架构____java 秘钥对原理
- java安全架构____java MD5加密
- java安全架构____java SHA加密
- java安全架构____java Base64加密
- java安全架构____java DSA加密解密
- java安全架构____java 秘钥对生成
- Java安全架构____java的Keytool工具Oracle官方说明文档
- Java安全框架____Java读取.pfx证书(pkcs12)信息
- java安全架构____X.509原理
- java安全架构____PKCS#8原理
- java安全架构____DES加密原理
- java安全架构____RSA加密原理(1)
- 【软件工程】机房文档--详细设计说明书
- 【Oracle学习】之 手动开启服务
- Java项目使用Lombok--使得你的实体类更加简洁
- 冒泡排序
- 二叉树遍历的递归与非递归算法
- java安全架构____java HMAC原理
- 1121. Damn Single
- DNS域名解析
- android studio Error:(1, 1) 错误: 非法字符: '\ufeff' 解决方案
- QSqlQueryModel使用例子
- Python 网络抓取和文本挖掘
- 欢迎使用CSDN-markdown编辑器
- R+大地图时代︱ leaflet/leafletCN 动态、交互式绘制地图(遍地代码图)
- udev轻松上路