国密消息鉴别码学习笔记 ——含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算法:

算法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 记号

B:HASH函数的分组大小,单位字节。

L:HASH函数的输出杂凑值长度,单位字节。

ipad:每个字节都为0x36的数据串,B字节长。

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)=BK0 = K

n 若Len(K)>BK0 = HASH(K)|| 00...0。

n 若Len(K)<BK0 = K || 00...0。

步骤 2. H* = HASH( ( K0 ⊕ ipad) || text ) 。

步骤 3. H = HASH(( K0 ⊕ opad) || H* ) 。

步骤4. 返回H

国密消息鉴别码学习笔记 ——含GB/T 15852和HMAC(第3章 采用HASH算法的MAC)_第1张图片

图3.1 HMAC算法流程图

 

4. 基于泛杂凑函数的MAC

标准文档尚在设计中。略。

你可能感兴趣的:(密码,国密,密码技术与应用)