SM3密码杂凑算法是一种商用密码杂凑算法,主要应用于数字签名和验证、消息认证码的生成和验证,以及在商业密码应用中生成随机数,能够满足多种密码应用的安全需求。本文档详细规定了SM3密码杂凑算法的计算过程,并提供了算法的应用实例。此外,该文档也可以作为安全产品制造商的标准参考,以提升安全产品的信誉度和互操作性。
1. 应用范围
文档指定了SM3密码杂凑算法,包括计算过程的详细信息,并且给出了算法计算的实例。该算法适用于数字签名和验证、消息认证码的生成和验证,以及在商业密码应用中生成随机数。文档还提到了,该算法能够满足多种密码应用的安全需求。
2. 术语和定义
- 二进制序列:由0和1组成的序列。
- 字节序(Big-endian):描述了字节序列在计算机内存中的存储顺序,即最显著的字节存储在最低的存储地址,而最不显著的字节存储在最高的地址。
- 消息:任意有限长度的位字符串。在本文档中,消息被用作杂凑算法的输入数据。
- 杂凑值:杂凑函数返回的输出。本文档中杂凑值的长度为256位。
- 字(Word):长度为32位的位字符串。
3. 符号
文档中用到以下符号:
- 32位寄存器或值的串联。
- 第i个消息块。
- 压缩函数。
- 随j变化的布尔函数。
- 随j变化的另一个布尔函数。
- 初始化压缩函数寄存器时使用的初始值。
- 压缩函数中涉及的置换。
- 消息函数中涉及的置换。
- 随j变化的常数。
4. 算法描述
4.1 概览
提供了SM3算法的总体架构和计算流程。
4.2 填充(Padding)
介绍了对原始消息进行填充的规则和步骤,确保消息长度满足算法的要求。
4.3 迭代压缩
SM3算法的核心是迭代压缩过程,包括以下子步骤:
4.3.1 迭代程序(Iteration Procedure)
详细描述了迭代的每一步,包括如何处理消息块以及每一步中使用的操作。
4.3.2 消息扩展(Message Expansion)
解释了消息扩展的规则,即如何将消息块转换为固定长度的输出。
4.3.3 压缩函数(Compression Function)
详细说明了压缩函数的工作原理,包括在迭代过程中如何应用它。
4.4 杂凑值(Hash Value)
定义了算法最终产生的杂凑值长度为256位。
附录A(参考)
提供了两个SM3算法计算的例子,帮助理解算法的应用和计算过程。
5. 安全性和适用性
SM3算法不仅适用于数字签名和验证等常见密码应用,而且在商业密码应用中,如消息认证码和随机数生成等,也被认为是安全可靠的。它在多个密码应用中满足安全需求,并且由于其标准化,有助于提升安全产品的信誉度和互操作性,为安全产品的制造商提供了可信赖的参考。
SM3算法是一种中国自主研发的密码杂凑算法,作为国家商用密码标准算法之一,SM3算法的应用和推广有助于提升国内安全产品的研发水平,促进国内信息安全技术的发展。同时,作为国际上商用密码应用的一个参考,SM3算法也提供了中文和英文的文档,方便不同语言用户的学习和参考。