HMAC简介

本期主要给大家简单介绍一下消息认证码中的HMAC

而HMAC就是其中的一种

HMAC的完整中文名称是:密钥相关的哈希运算消息认证码

它是由Hugo KrawezykMihir BellareRen Canetti等人

 

1996年提出的一种基于Hash函数和密钥进行消息认证的方法,

它作为RFC2104被公布,

 并在IPSec和其他网络协议(如SSL)中得以广泛应用,现在已经成为事实上的Internet安全标准。它可以与任何迭代散列函数捆绑使用。

目前主要应用在服务器对访问者进行鉴权认证流程中。

可能有些同学就会有疑问

这个HMAC为什么会被提出来?

是MAC的产生有什么缺陷么?

                   

下面来简单介绍一下HMAC规范出现的原因

HMAC规范的设计是由于存在对将密钥与hash函数相结合的更简单机制的攻击。

换言之就是有些将密钥和hash函数结合使用产生MAC的算法容易被攻击。

而这种生成消息认证码的方法就像炸弹一样,

可能随时都会给企业和社会带来危险

例如,有些同学在想

消息验证码可不可以这样实现:

消息验证码等于对密钥和消息字符串连接的hash值

MAC = H ( key| message )

但是,这种方法有一个严重的缺陷

对于大多数散列函数,

很容易在不知道密钥的情况下将数据附加到消息中并获得另一个有效的 MAC

(“长度扩展攻击”)

可能又有同学想到另一种方法,

使用 MAC = H ( message | key附加密钥),

但会遇到这样一个问题,

攻击者可以在未加密的散列函数中找到与MAC 中存在冲突的hash值。

于是又有同学说可以使用

MAC = H ( key| message| key ) 更好,

但有信息安全方面的论文提出了这种方法的漏洞,

即使使用两个不同的密钥也是如此。

基于上述问题,

Mihir BellareRan CanettiHugo Krawczyk 在他们的论文中

提出了HMAC 结构的定义和分析

H 是一个密码散列函数

m是要认证的消息

K是密钥

K '是从密钥K派生的块大小的密钥;通过向右填充 0 直到块大小,或者通过先散列到小于或等于块大小,然后向右填充零

‖ 表示连接

⊕ 表示按位异或(XOR)

opad是块的外部填充,由值 0x5c 的重复字节组成,是一段十六进制常量

ipad是块的内部填充,由值 0x36 的重复字节组成,也是一段十六进制常量

下面来看看对HMAC的具体实现

首先对密钥进行规范化,转为K‘,

比如初始密钥如果不足64位,那就填充到64位变为K‘

如果超过64位,

通过hash函数转为64位的K‘

然后将K‘与ipad进行异或,

这样就可以在一定程度上隐藏密钥信息

之后对进行异或的值进行hash运算得到文本二

另一方面

我们可以看到K‘还与opad进行异或得到文本一

这也是为了隐藏密钥的信息

之后将文本一、文本二和消息进行拼接

并进行hash运算

这样就得到了我们想要的消息认证码

大致了解了HMAC的算法

再来给大家介绍一下HMAC的安全性

HMAC 的加密强度取决于所使用的密钥的大小。

针对 HMAC 的最常见攻击是暴力破解密钥。

还记得2019年获得未来科学大奖的王小云教授么?

她所在团队在2009年在不使用相关密钥的情况下

HMAC-MD5 进行了差分攻击

结果是可以在297次方次查询内

以百分之八十七的概率

区分使用md5算法加密的HMAC

而这也推动了HMAC使用其他更安全的hash函数

在2011年在RFC6151标准中总结了HMAC-md5的安全注意事项

其中提到“ HMAC-MD5 的攻击在用作消息验证码时似乎并不表明存在实际漏洞,

但对于新的协议设计,不应包含具有 HMAC-MD5 的密码套件

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值