什么是HMAC(基于哈希的消息认证码)?
基于哈希的消息认证码(HMAC)是一种消息加密方法,它使用加密密钥和哈希函数。它为服务器和客户端各自提供一个仅它们知道的私钥,提供比简单消息认证码(MAC)更安全的数据加密方式。
HMAC是一种加密认证技术。它使用加密哈希函数和共享密钥来加密信息并保护其免受未经授权的访问。哈希函数是一种算法或数学函数,将包含可变数量字符的消息转换为具有固定数量字符的字符串。输出值称为消息摘要、哈希值或简称哈希。秘密加密密钥使用户能够在算法加密后读取加密消息。
在HMAC事务中,客户端和服务器必须就密钥达成一致。这提供了一种解码消息的方法,该方法必须保持秘密以维护事务的完整性。各方还必须选择并同意用于其消息的哈希函数。
HMAC可用于检查数据完整性并认证事务中的各方。许多通信和传输协议使用HMAC,包括超文本传输协议安全(HTTPS)、安全文件传输协议(SFTP)和文件传输协议安全(FTPS)。HMAC中的加密哈希函数通常是安全哈希算法-1(SHA-1)、SHA-256、消息摘要算法或RIPEMD-128/160。
HMAC方法使用加密密钥和哈希函数来保护客户端和服务器之间的消息。
基于哈希的消息认证码的工作原理
HMAC为交易各方提供有效可靠的方式,确保其消息未被未经授权或恶意方篡改。HMAC代码或密钥由以下两部分组成:
- 发送方或客户端与接收方或服务器共享的一组加密密钥。发送方和接收方使用相同的密钥生成和验证HMAC。
- 通用加密哈希函数,如SHA-1或RIPEMD-128/160。
HMAC的公式表示为: HMAC = hashFunc(secret key + message)
在涉及HMAC的客户端和服务器之间的消息事务中,客户端通过使用私钥哈希请求数据来创建唯一的HMAC或哈希,并将其作为请求的一部分发送。服务器接收请求并重新生成自己的唯一HMAC。然后比较两个HMAC。如果它们相等,则客户端被信任并视为合法,请求被执行。此过程通常称为秘密握手。
基于哈希的消息认证码的安全性
HMAC比MAC更安全,因为密钥和消息在以下单独步骤中进行哈希: HMAC(key, msg) = H(mod1(key) || H(mod2(key) || msg))
客户端首先使用私钥哈希数据,并将其作为请求的一部分发送到服务器。服务器然后生成自己的HMAC。这确保该过程不易受到扩展攻击,这种攻击可能导致密钥元素在连续MAC创建时泄漏。
此外,一旦过程完成,发送的消息变得不可逆且抗黑客攻击。即使恶意方尝试拦截消息,他们也无法猜测其长度或解密,因为他们没有解密密钥。实际上,HMAC过程使消息内容对黑客不可读且无用。
HMAC的应用
HMAC被认为是一种安全的消息认证方法,因为如果潜在伪造者不知道共享密钥,则难以伪造。该方法还抗字典攻击,其中攻击者使用暴力通过运行字典中的常见单词和短语来解码进入密码保护设备。也就是说,使用强大且唯一的密钥以最大化HMAC的安全优势至关重要。
由于HMAC提供双重保护,它非常适合涉及敏感数据的应用,如个人可识别信息或信用卡号码。它还提供比传统措施更广泛的安全性,使其适用于受监管行业,如医疗保健或金融。
HMAC加密还适用于物联网(IoT)环境、高性能系统(如路由器)和用户电子邮件地址验证。HMAC还可用于安全关键应用,其中公钥系统不足或禁止。HMAC的可能应用包括:
- 认证发送到客户端浏览器并重新提交的表单数据。
- 生成用于存储密码的安全哈希。
- 生成唯一的会话管理令牌。
基于哈希的消息认证码与数字签名
数字签名是一种验证数字文档和发送方真实性和完整性的方式,使用非对称公钥加密。与HMAC类似,数字签名也使用哈希函数和共享密钥。然而,HMAC使用对称密钥——即发送方和接收方共享相同密钥——而数字签名使用非对称密钥,意味着发送方和接收方使用两个不同的密钥。
HMAC和数字签名都确保消息的完整性和真实性。完整性意味着消息未被篡改。如果被篡改,哈希函数返回不同的值,因此接收方知道有人篡改了消息。真实性表明接收方确信消息来自发送方。两种方法都确保完整性和真实性,因为加密哈希的密钥对第三方(可能是恶意对手)未知,从而向接收方证明消息来自预期发送方。
除了确保完整性和真实性外,数字签名还用于不可否认性,意味着发送方和接收方都不能否认已处理信息一旦发送。HMAC通常不用于不可否认性目的。
如何实现HMAC
要实现HMAC,请执行以下步骤:
- 选择哈希函数,如SHA-256。
- 创建仅发送方和接收方知道的随机密钥。
- 实施HMAC算法以进行HMAC计算。
- 确保接收方能够重新计算和比较HMAC。
密钥必须妥善保护,这可以防止黑客接管通信服务器。
您的组织应使用HMAC吗?
使用HMAC是实现安全通信的最佳方式吗?以下是做出该决定的一些考虑因素。HMAC在以下情况下是强有力的选择:
- 数据完整性是高度优先事项。
- 组织在线接收付款。
- 组织的数据处理有严格的法规或合规要求。
- 组织的服务器包含商业秘密或敏感信息,如付款信息。
- 有内部物联网网络必须保护。
尽管HMAC可以提供安全通信,但它不提供机密性,应使用单独的加密算法(如高级加密标准)进行加密,以确保完全安全。