本文主要是介绍国密消息鉴别码学习笔记 ——含GB/T 15852和HMAC(第3章 采用HASH算法的MAC),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
国密消息鉴别码
——含GB/T 15852和HMAC
摘要:本文档对我国标准规定的消息鉴别码的生成算法进行了简要介绍,包括算法生成步骤,注意事项等。我国的相关标准包括GB/T 15852.1-2008、GB/T 15852.2-2012、GB/T15852.3(目前为草稿)。
关键词:消息鉴别码,MAC,HMAC,杂凑算法,哈希算法,HASH,分组密码,消息填充。
3. 基于专用杂凑函数的MAC
3.1 三种算法基本情况介绍
标准规定了三种MAC算法:
l 算法1和算法3要求修改底层的HASH算法(如修改HASH算法的轮常数等),这在很有应用中无法实现,因此强烈建议舍弃这两者算法。
l 算法2为HMAC算法的微调版。可以使用。
3.2 算法2和HMAC区别
仅存在密钥长度的限制
l HMAC:未限制密钥长度。
l 算法2:严格限制密钥长度为 L<= Len(K)<= B。
这里B是HASH函数的分组大小,L是HASH函数的输出杂凑值长度。
以SM3为例,算法2要求密钥长度为256~512比特,而HMAC无此要求。
3.3 HMAC (FIPS PUB 198-1)
参见FIPS PUB 198-1, The Keyed-Hash MessageAuthentication Code (HMAC). 2008-07.
3.3.1 记号
l B:HASH函数的分组大小,单位字节。
l L:HASH函数的输出杂凑值长度,单位字节。
l ipad:每个字节都为0x36的数据串,B字节长。
l opad:每个字节都为0x5c的数据串,B字节长。
算法表达式
HMAC(K, text) = H((K0⊕opad )|| H((K0 ⊕ipad) || text))
3.3.2 HMAC算法流程
算法:HMAC(K, text)
输入:密钥K和消息text
输出:MAC值
步骤:
步骤 1. 生成K0,长度为B。
n 若Len(K)=B,K0 = K。
n 若Len(K)>B,K0 = HASH(K)|| 00...0。
n 若Len(K)<B,K0 = K || 00...0。
步骤 2. H* = HASH( ( K0 ⊕ ipad) || text ) 。
步骤 3. H = HASH(( K0 ⊕ opad) || H* ) 。
步骤4. 返回H。
图3.1 HMAC算法流程图
4. 基于泛杂凑函数的MAC
标准文档尚在设计中。略。
这篇关于国密消息鉴别码学习笔记 ——含GB/T 15852和HMAC(第3章 采用HASH算法的MAC)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!