HMAC简介 Wik部分i翻译

HMAC Wiki部分翻译

注:补充一些中文wiki内未翻译的部分,可以帮助理解。限于知识水平和英文水平,有些部分可能表意不明或和原义有所偏差,请以英文版为准。

源链接:https://en.wikipedia.org/wiki/HMAC

概述

密码学中,HMAC(hash-based message authentication code)是一种包含密码散列函数和密钥的特殊MAC。HMAC和任何MAC一样,可以用于同时确保数据完整性 (data integrity)和身份验证 (authentication)。任何密码散列函数,例如SHA-256或者SHA-3都可以被用于HMAC的计算中,其产生的MAC函数被称为HMAC-X,X对应采取的散列哈希函数的方法 (如HMAC-SHA256, HMAC-SHA3)。HMAC的加密强度取决于底层的哈希散列函数的强度、产出哈希值的长度、密钥的长度和质量。

HMAC进行两次哈希加密。密钥首先用于产生一个内钥一个外钥。第一步先利用消息和内钥产生内部哈希值。第二步利用内部哈希值和外钥产生最终的HMAC码。因此这种方法对长度拓展攻击有着更好的免疫力。

迭代式的哈希函数将一条消息打碎成固定大小的消息段,并用迭代采用压缩算法。比如SHA-256将消息分为512bit的段落。HMAC的产出大小和底层哈希函数一致。比如说SHA-256就针对512bit的block操作。HMAC产出的大小和底层哈希函数一致。当然也可以自行进行截断。

HMAC并不加密数据,而是加密数据必须和HMAC码一起被发送。持有密钥的各方需自行对消息进行加密。如果密钥正确,则接收到的hash码和重新计算出来的hash码一致。

设计原则

HMAC的设计初衷是为了对抗那些专门针对key+hash function的攻击。某人可能觉得HMAC提供的安全性可以通过MAC = H(key || message)来达成,但是这种方法有一个严重的漏洞:对大多数哈希函数,我们可以轻易的在不知道密钥和另一个有效MAC码的时候,在消息后附上一些数据[长度拓展攻击]。又或者MAC = H(message || key)则会遇到一个问题:如果攻击者发现了unkeyed hash function中的冲突,则他就持有了MAC中的一个冲突(由于两个消息m1, m2产生同一个哈希值会为在附加key被哈希前,为哈希函数提供同样的起始状态,最终的哈希值会一致)。MAC = H(key || message || key) 好一些,但是很多组织已经报告了这种方法的很多漏洞。

没有已知的攻击手段能够对抗当前的 H(key || H(key || message))加密,因为外部的哈希函数掩盖了内部哈希的结果。ipad和opad的值对于算法的安全性并不关键,不过依然被保证两者保持Hamming distance,减少共同的bit数量。

SHA-3完全不需要上述的嵌套式加密,其不受长度拓展攻击影响。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值