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

相关文章

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中,

如何在Mac上彻底删除Edge账户? 手动卸载Edge浏览器并清理残留文件技巧

《如何在Mac上彻底删除Edge账户?手动卸载Edge浏览器并清理残留文件技巧》Mac上的Edge账户里存了不少网站密码和个人信息,结果同事一不小心打开了,简直尴尬到爆炸,想要卸载edge浏览器并清... 如果你遇到 Microsoft Edge 浏览器运行迟缓、频繁崩溃或网页加载异常等问题,可以尝试多种方

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

Mac备忘录怎么导出/备份和云同步? Mac备忘录使用技巧

《Mac备忘录怎么导出/备份和云同步?Mac备忘录使用技巧》备忘录作为iOS里简单而又不可或缺的一个系统应用,上手容易,可以满足我们日常生活中各种记录的需求,今天我们就来看看Mac备忘录的导出、... 「备忘录」是 MAC 上的一款常用应用,它可以帮助我们捕捉灵感、记录待办事项或保存重要信息。为了便于在不同