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

国密消息鉴别码学习笔记 ——含GB/T 15852和HMAC(第3章 采用HASH算法的MAC)国密消息鉴别码 含 GB T15852 和 HMAC 摘要 本文档对我国标准规定的消息鉴别码的生成算法进行了简要介绍 包括算法生成步骤 注意事项等 我国的相关标准包括 GB T15852 1 2008 GB T15852 2 2012 GB T15852 3 目前为草稿 关键词 消息鉴别码 MAC HMAC 杂凑算法 哈希算法 HASH 分组密码 消息填充 3 基于专用杂

国密消息鉴别码

 ——含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)

图3.1 HMAC算法流程图

4. 基于泛杂凑函数的MAC

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200554.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午10:34
下一篇 2026年3月20日 上午10:35


相关推荐

  • Linux cpuidle framework(1)_概述和软件架构 — wowo

    Linux cpuidle framework(1)_概述和软件架构 — wowo文章目录 1 前言 2 功能概述 3 软件架构 1 kernelschedu 模块 2 cpuidlecore3 cpuidledrive cpuidlegover 软件流程 1 前言在计算机系统中 CPU 的功能是执行程序 总结起来就是我们在教科书上学到的 取指 译码 执行 那么问题来了 如果没有程序要执行 CPU 要怎么办 也许您会说 停掉就是了啊 确实 是要停掉 但何

    2026年3月19日
    1
  • java建立http_java-创建一个HttpEntity

    java建立http_java-创建一个HttpEntity我正在尝试更新到 com loopj android android async http 的最新版本 1 4 9 其中 org apache http 被 cz msebera android httpclient 取代了 目前 我使用 StringEntity newStringEnt somedata client post static context getAb

    2025年6月13日
    9
  • java–集合

    java–集合

    2021年10月2日
    56
  • 将两个Bean中相同属性名的值进行注入

    将两个Bean中相同属性名的值进行注入有时候是不能将模型类直接传出去 就有了各种 Vo Dto Bo 这些实体中大部分字段都与 domian 相同 有些甚至一模一样 各种 setget 去转换数据十分的繁琐 就写了一个反射工具类 支持单个转换和批量转换 importorg slf4j Logger importorg slf4j LoggerFactor importorg springframew

    2026年3月16日
    1
  • C语言中switch的用法

    C语言中switch的用法switch 是一种选择结构的语句 用来代替简单的 拥有多个分枝的 ifelse 语句 基本格式如下 switch 表达式 case 整型数值 1 语句 1 break case 整型数值 2 语句 2 break case 整型数值 n 语句 n break default 语句 n 1 break break 是 C 语言中的一个关键字 专门用于跳出 switch 语句

    2026年3月26日
    3
  • 谈谈网站防盗链

    谈谈网站防盗链#开启重写引擎RewriteEngineon#图片防盗链RewriteCond%{HTTP_REFERER}!http://rewrite/.*RewriteRule.*\.(jpg|jpeg|png|gif)daotu.jpg引子:明明引用了一个正确的图片地址,但显示出来的却是一个红叉或写有“此图片仅限于***网站用户交流沟

    2022年7月23日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号