版权归原作者所有,如有侵权,请联系我们

[科普中国]-密钥散列消息认证码

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

密钥散列消息认证码(英语:Keyed-hash message authentication code),又称散列消息认证码(Hash-based message authentication code,缩写为HMAC),是一种通过特别计算方式之后产生的消息认证码(MAC),使用密码散列函数,同时结合一个加密密钥。

介绍密钥散列消息认证码(英语:Keyed-hash message authentication code),又称散列消息认证码(Hash-based message authentication code,缩写为HMAC),是一种通过特别计算方式之后产生的消息认证码(MAC),使用密码散列函数,同时结合一个加密密钥。它可以用来保证数据的完整性,同时可以用来作某个消息的身份验证。1

定义根据RFC 2104,HMAC的数学公式为:

其中:

H为密码散列函数(如MD5或SHA-1);

K为密钥(secret key);

m是要认证的消息;

K'是从原始密钥K导出的另一个秘密密钥(如果K短于散列函数的输入块大小,则向右填充(Padding)零;如果比该块大小更长,则对K进行散列);

|| 代表串接;

⊕ 代表异或(XOR);

opad是外部填充(0x5c5c5c…5c5c,一段十六进制常量);

ipad是内部填充(0x363636…3636,一段十六进制常量)。

实现HMAC通过一个标准算法,在计算哈希的过程中,把key混入计算过程中。和自定义的加salt算法不同,Hmac算法针对各种哈希算法都通用,无论是MD5还是SHA-1。采用Hmac替代我们自己的salt算法,可以使程序算法更标准化,也更安全。

HMAC 支持的算法有: md5、sha1、sha256、sha512、adler32、crc32、crc32b、fnv132、fnv164、fnv1a32、fnv1a64、gost、gost-crypto、haval128,3、haval128,4、haval128,5、haval160,3、haval160,4、haval160,5、haval192,3、haval192,4、haval192,5、haval224,3、haval224,4、haval224,5、haval256,3、haval256,4、haval256,5、joaat、md2、md4、ripemd128、ripemd160、ripemd256、ripemd320、sha224、sha384、snefru、snefru256、tiger128,3、tiger128,4、tiger160,3、tiger160,4、tiger192,3、tiger192,4、whirlpool。

HMAC的加密实现:HMAC (k,m) = H ( (k XOR opad ) + H( (k XORipad ) + m ) )

H 是一个Hash函数, 比如, MD5, SHA-1and SHA-256,

k 是一个密钥,从左到右用0填充到hash函数规定的block的长度,如果密钥长度大于block的长度,就对先对输入key作hash,

m 是需要认证的消息,

+ 代表“连接”运算,

XOR 代表异或运算,

opad 是外部填充常数(0x5c5c5c…5c5c,一段十六进制常量),

ipad 是内部填充常数(0x363636…3636,一段十六进制常量)。

本词条内容贡献者为:

刘燕兵 - 副研究员 - 中国科学院信息工程研究所