HMAC

HMAC是IP安全里必须实现的MAC方案,并且其他Internet协议中(如SSL)也使用了HMAC。HMAC已作为NIST标准发布。

HMAC的设计目标

  1、可以直接使用现成的Hash函数

  2、很容易用更好地Hash函数替代原来嵌入的Hash函数

  3、能够保持Hash函数的原有性能,不能过分降低其性能

  4、对密钥的使用和处理应较简单

  5、如果已知嵌入的Hash函数的强度,完全可以知道认证机制抗密码分析的强度

正是HMAC的这些设计目标保证了HMAC的灵活性、可用性和扩展性,从而得到了广泛的支持。

HMAC算法

  

  HMAC描述如下:

    HMAC(K , M) = H[(K+⊕opad) || H[(K+⊕ipad) || M]]

  这种结构对于长消息,其执行时间与嵌入的Hash函数差不多,但不适合消息大多较短的情况。这种情况下则会使用如下结构进行优化。

    

  其中f(IV,S)是Hash函数的压缩函数,其输入是n位的初始变量和b位的分组,输出是n位的链接变量。

HMAC的安全性

  已证明,对Hash函数有效的生日攻击并不同样对HMAC有效,原因在于Hash函数的输入(IP和M)都完全已知,而HMAC的输入受K的影响并不完全可知,因此可以抵抗生日攻击。

  HMAC对于穷举攻击等其他攻击也保持了Hash函数的安全强度。

  

时间: 2024-10-15 11:51:38

HMAC的相关文章

消息摘要算法-HMAC算法

一.简述 mac(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥.因此MAC算法也经常被称作HMAC算法.关于hmac算法的详情可以参看RFC 2104(http://www.ietf.org/rfc/rfc2104.txt),这里包含了HmacMD5算法的C语言实现. 这里需要说明的是经过mac算法得到的摘要值也可以使用十六进制编码表示,其摘要值得长度与实现算法的摘要值长度相同.例如 Hmac

HMAC在“挑战/响应”(Challenge/Response)身份认证的应用

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

HMAC在身份验证中的典型应用

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

java-信息安全(一)-BASE64,MD5,SHA,HMAC

概述 信息安全基本概念: BASE64 编码格式 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) HMAC(Hash Message Authentication Code,散列消息鉴别码) Base64 按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式.(The Base64 Content-Transfer-E

HMAC加密的消息摘要码

HMAC(Hash Message Authentication Code)哈希消息授权码,它在消息摘要算法(例如MD5,SHA系列算法)的基础上,使用密钥对消息摘要进行加密.它相当于一个马甲,内里可以使用MD5,SHA1,SHA256,SHA384,SHA512等Message Digest算法,在生成的消息摘要的基础上再多一道加密的工序.所以HMAC包括,HmacMD5,HmacSHA1,HmacSHA384,HmacSHA512等种类.正是因为HMAC只是一个马甲,它才有了很大的灵活性,底

4.Java 加解密技术系列之 HMAC

Java 加解密技术系列之 HMAC 序 背景 正文 代码 结束语 序 上一篇文章中简单的介绍了第二种单向加密算法 — —SHA,同时也给出了 SHA-1 的 Java 代码.有这方面需求的童鞋可以去参考一下.今天这篇文章将要介绍第三种单向加密算法 — — HMAC,其实,这种加密算法并不是那么常用,最起码,在我写系列博客之前,我是没有听说过它的.当然,这并不是说 HMAC 不出名,肯定是我孤落寡闻了. 背景 之所以在单向加密算法中介绍 HMAC 这种“不常见的”算法,一是因为“没见过”,二是因

hmac md5

import hmac //内置 def simaplemd5(str): m2 = hashlib.md5() m2.update(str) res=m2.hexdigest() return res ekey = '34fadf69ad40b086195c94a34d834a78' //key upass='123456' edata= simaplemd5(upass) enc_res = hmac.new(ekey, edata, hashlib.md5).hexdigest() pri

Java实现 Base64、MD5、MAC、HMAC加密(转)

开始对那些基本的加密还不怎么熟练,然后总结了些,写了一个测试:支持 Base64.MD5.MAC.HMAC加密,长话短说,我们都比较喜欢自己理解,看代码吧! 采用的输UTF-8的格式... package codec; import java.security.MessageDigest; import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.c

hashlib和hmac模块

1. 使用md5加密 import hashlib m = hashlib.md5() m.update(b"guangzhou") print(m.hexdigest()) # d9d7a94326214718676cbf3f8c281141 m.update(b"shenzhen") print(m.hexdigest()) # 8df7afb2e9be9bc19f8e79328eb8f0e3 m2 = hashlib.md5() m2.update(b&quo

网络安全——Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)哈希

网络安全--Base64编码.MD5.SHA1-SHA512.HMAC(SHA1-SHA512)哈希 阅读目录 一.Base64编码 二.MD5.SHA1.SHA256.SHA512.HMAC实现 github代码下载地址 据说今天520是个好日子,为什么我想起的是502.500.404这些?还好服务器没事! 一.Base64编码 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式,这样每一个字节的有效位为6位