type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 28, 2023 10:42 AM
Parent item
领域
SM3算法适用于商用密码应用中的数字签名和验证,是在SHA-256基础上改进实现的一种算法。SM3算法采用Merkle-Damgard结构,消息分组长度为512位,摘要值长度为256位。现今为止,SM3算法的安全性相对较高。
该算法的实现如下:
- 定义初始化变量及基础函数
- 布尔函数:
- 函数 返回;
- 函数 返回;
- 置换函数:
初始化向量:
常量
常量
基础算法函数定义如下:
当 时:
当时:
函数 返回;
函数 返回 ;
。
。
其中:均为32位的字,&表示与, |表示或,~表示非,⊕表示异或,<<<表示循环左移。
- 消息填充补位
SM3的消息填充补位的算法同MD5,这里不再赘述。填充后的消息称为。
- 迭代压缩
- 将消息分组划分为16个字(word),得到 。
- 计算:
- 计算:
- 进行如下计算, 得到V值:
将填充后的消息按512bit为单位进行分组:,一共是n组。。
迭代算法如下:
其中首次循环中为256比特初始化向量IV,为填充后的消息分组,迭代压缩的结果为,作为下一次循环的向量。
是压缩函数,是技术那哈希的核心算法流程。在中,首先需要对消息分组按照下面的方法扩展生成132个字。
其中就是置换函数。
其中是布尔函数, 是置换函数。
- 最后将迭代后的最终V值组装成256比特的Hash值 。