HMAC算法
核心结构
HMAC的公式为:HMAC(K,m)=H( (K⊕opad) || H ( (K⊕ipad) || m) )
其中:
- H:哈希函数(如SHA-256)。
- K:密钥,需处理为与哈希函数块长度一致。
- ipad = 00110110 (0x36) 不断循环直至达到散列函数分组长度
- opad = 01011100 (0x5c) 不断循环直至达到散列函数分组长度
- || :拼接操作。
密钥处理
- 若 密钥长度 < Hash的分组长度:key = 密钥0000…(末尾填充0,直到长度达到Hash分组长度)
- 若 密钥长度 > Hash的分组长度: key = Hash( 密钥 ) (将密钥进行单向散列的结果作为key)
计算步骤
- 生成内部填充:Si = K ⊕ ipad
- 计算内部哈希:InnerHash=H(Si || m )
- 生成外部填充:So = K ⊕ opad
- 计算最终HMAC:HMAC=H(So || InnerHash)
安全性
- 依赖哈希函数:安全性建立在哈希函数的抗碰撞性、抗第二原像攻击等特性上。
- 防御攻击:
- 长度扩展攻击:外层哈希的密钥异或操作阻止攻击者构造合法HMAC。
- 暴力破解:建议密钥长度≥128位(如16字节),并随机生成。
HMAC通过两次哈希和密钥混合,提供安全的认证机制。其设计兼顾效率与安全性,但需注意正确实现密钥处理、哈希算法选择及密钥管理,避免常见错误(如弱密钥、算法过时)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 懒懒洋洋的blog!
评论