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

2023-10-28 18:58

本文主要是介绍国密消息鉴别码学习笔记 ——含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

图3.1 HMAC算法流程图

4. 基于泛杂凑函数的MAC

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

这篇关于国密消息鉴别码学习笔记 ——含GB/T 15852和HMAC(第3章 采用HASH算法的MAC)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/295263

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,