HMAC算法
算法简介
提供一种方法来检查通过不可靠介质传输或存储在不可靠介质中的信息的完整性是开放计算和通信领域的首要必要条件,例如在广域网上传输数据,就可以认为是通过不可靠介质传输数据,因为在广域网上我们的数据要经过N多个不可控节点,任意一个节点都可能修改我们的数据或者丢弃我们数据的一部分,当我们接到消息后需要使用某种方法检查信息的完整性;
基于密钥提供这种完整性检查的机制通常称为 message authentication codes(MAC)
;通常,MAC
在共享密钥的两方之间使用,以验证在两方之间传输的数据,本文中,我们提出一种基于加密 hash
的MAC
机制,我们称之为HMAC
,而这就是本文要介绍的HMAC(Keyed-Hashing for Message Authentication)
算法;
PS:单纯的MD5、SHA1、SHA256等摘要算法仅仅能在可靠渠道上用来消息是完整的,例如某个软件官方发布了他们的安装包的SHA256摘要值,这是一个可靠的渠道,然后我们基于这个从可靠渠道获取到的摘要可以来校验我们从不可靠渠道上获取到的该软件的安装包是否是完整的,而如果我们获取摘要的渠道也是不可靠的时候,普通摘要算法就无法使用了,因为摘要本身可能也会被破坏、篡改,而HMAC算法则能应对这种情况;该算法在TLS的握手流程中有使用;
HMAC
算法可以与任何迭代的hash算法组合使用,例如MD5
、SHA1
,HMAC
还使用一个密钥来计算和验证消息的认证值,采用这种构造的原因:
- 不加修改的使用已有的hash函数;
- 保持hash函数的原始性能而不引起显著的退化;
- 以简单的方式处理和使用密钥;
- 基于对底层hash函数的合理假设,对身份验证机制的强度进行易于理解的密码分析;
- 找到或者需要更快或者更安全的hash函数时可以快速替换;
阅读全文