关于本文
国密即国家密码局认定的国产密码算法。主要有 SM1、SM2、SM3、SM4。密钥长度和分组长度均为 128 位。
- SM1 为对称加密,
- SM2 为非对称加密,(RSA)
- SM3 消息摘要,(HASH)
- SM4 分组密码算法(AES)。
本次文将概要介绍四种主要国密的工作流程,重点在于了解四种主要国密算法的应用场景,对于算法细节不涉及,如果有出现可跳过。
希望您在看完本文对国密有个概要的认识,因为国密的特殊性,在国内这是是很多产品不得不考虑的特性,即使国外包括ARM等巨头,想要进入中国市场,很多的产品在介绍时候都会着重表明他们产品支持国密并通过了认证。
1、SM1
1. SM1 简介
SM1 为对称加密,其算法的算法实现原理没有公开,他的加密强度和 AES 相当,需要调用加密芯片的接口进行使用。SM1 高达 128 bit 的密钥长度以及算法本身的强度和不公开性保证了通信的安全性。
由于 SM1 加密算法的不公开,我们无法知晓其内部的原理,所以这儿也无法做代码实现。
2. SM1 应用场景
SM 1由获得国密办资质认证的特定机构将算法封装在芯片中,并销售给指定的厂商。SM1 算法己经被普遍应用于电子商务、政务及国计民生(例如国家政务、警务等机关领域)的各个领域。目前,市场上出现的系列芯片、智能 IC卡、加密卡、加密机等安全产品,均采用的是 SM1 算法。
数据加密包括软件加密和硬件加密两种方式。软件加密指单纯依靠代码来实现对软件的保护,而不需要特定的硬件服务。软件加密最突出的优势体现在它的成本低廉,实现简单,并且具备良好的灵活性和可移植性。但是,软件实现的加密要求 CPU 的全程参与,可能会产生不必要的等待和中断,从而导致系统资源浪费,特别是用软件加密处理海量数据时,会存在硬盘读写瓶颈的风险。而硬件加密利用集成在 CPU 芯片上的加密芯片实现**,加密过程独立于 CPU,且在芯片内完成,可有效的防止数据被篡改**。 大多数银行使用的硬加密,底层算法也常常含有 SM1 。
加密卡,就是将 AES、DES、MDS 等加密和认证算法集成在芯片上,该芯片被制成托卡(即加密卡),所有数据加解密和认证涉及到的运算全部在该卡上完成,进而加速了加解密过程,提升了设备的整体性能。目前,加密卡一般分为两类,
- 一种是实现通用加解密和验证算法的加密卡,
- 另一种是实现国密算法(SM1)的加密卡。
2、SM2
国密 SM2 为非对称加密,也称为公钥密码;国密算法的本质是椭圆曲线加密。关于对称加密和非对称加密的内容请查阅笔者写的《深入理解对称加密和非对称加密》一文。
SM2 椭圆曲线公钥密码 ( ECC ) 算法是我国公钥密码算法标准。SM2 算法的主要内容包括 3 部分:
- 数字签名算法;
- 密钥交换协议
- 公钥加密算法。
1. SM2 的形成过程
在所有的公钥密码中,使用得比较广泛的有ECC 和 RSA; 而在相同安全强度下 ECC 比 RSA 的私钥位长及系统参数小得多, 这意味着应用 ECC 所需的存储空间要小得多, 传输所的带宽要求更低, 硬件实现 ECC 所需逻辑电路的逻辑门数要较 RSA 少得多, 功耗更低。 这使得 ECC 比 RSA 更适合实现到资源严重受限制的设备中 , 如低功耗要求的移动通信设备 、无线 通信设备和智能卡等。
ECC 的优势使其成为了最具发展潜力和应用前景的公钥密码算法 , 至 2000 年国际上已有多个国家和行业组织将 ECC 采纳为公钥密码算法标准。
在此背景下,我国从 2001 年开始组织研究自主知识产权的 ECC, 通过运用国际密码学界公认的公钥密码算法设计及安全性分析理论和方法 , 在吸收国内外已有 ECC 研究成果的基础上 , 于2004 研制完成了 SM2 算法.
SM2 算法于 2010 年 12 月首次公开发布 , 2012 年3 月成为中国 商用密码标准 ( 标准号为 GM/T0003—2012), 2016 年 8 月成为中国 国家密码标准 (标准号为 GB/T 32918-2016)。
2. 椭圆曲线
在有限域 K 上,形如以下方程:
的方程被称为 Weierstrass 方程,其中 O=[0,1,0] 是唯一 的 Z 坐标为零的点,称为无穷远点。令 x=X/Z, y=Y/Z, 可将方 程记为:
且仍有无穷远点 O。 对于方程中的系数,定义
其中:
当 Δ ≠ 0 时,椭圆曲线是非奇异的 [1],即对所有满足 F(X,Y,Z)=0 的射影点 P=(X ∶ Y ∶ Z), F 在 P 点的 3 个偏导数
必不全为 0。
当 K 的特征不为 2 或 3 时,Weierstrass 方程又有以下形式:
其中:E:y2=x3+Ax2+B 就是国家密码局建议使用的椭圆曲线,本文也是以此曲线为基础进行算法实现。
3. 椭圆曲线基本运算
这部分请参考之前我们一起学习过的文章:【ECC算法学不学?】
4. SM2 小结
SM2 算法是我国在吸收国际先进成果基础上研发出来的具有自主知识产权的 ECC 算法, 它在安全性和实现效率方面相当于或略优于国 际上同类的 ECC 算法, 能取代 RSA 以满足各种应用对公钥密码算法安全性和实现效率的更高要求, 具有广阔的推广和应用前景。
3、SM3
1. SM3 简介
SM3 密码杂凑算法是中国国家密码管理局年公布的中国商用密码杂凑算法标准。该算法由王小云等人设计,消息分组比特,输出杂凑值比特,采用 Merkle Damgard 结构。
SM3算法是一个密码散列函数标准,它基于密码哈希函数的概念,可以将任意长度的数据映射为固定长度的哈希值。SM3算法的输入可以是任意的二进制数据,而输出是一个固定长度的二进制哈希值。
SM3算法的流程包括以下几个步骤:
- 初始化:首先需要选择一个初始值,这个初始值是随机生成的,并且需要在整个算法过程中保密。
- 数据处理:将输入数据分割成多个数据块,并对每个数据块进行处理。处理过程中包括一系列的线性变换和非线性变换,这些变换将数据块进行混淆和扩散,从而保证最终的哈希值的随机性和不可预测性。
- 输出:最终的哈希值是根据处理后的数据块生成的,通过将数据块进行拼接和截取得到固定长度的哈希值。
总体来说,SM3算法是一种高效且安全的密码散列函数,它能够抵御常见的攻击,如暴力攻击、碰撞攻击等。
密码杂凑算法的压缩函数与的压缩函数具有相似的结构,但是,密码杂凑算法的压缩函数的结构和消息拓展过程的设计都更加复杂,比如压缩函数的每一轮都使用个消息字,消息拓展过程的每一轮都使用个消息字等。
SM3 密码杂凑算法消息分组长度 为 512b, 摘要长度 256b。压缩函数状态 256 b, 共 64 步操作。
2. SM3 的算法描述
2.1. 密码杂凑算法中的常量与函数
初始值: SM3 密码杂凑算法的初始值共 256 b , 由 8 个 32b 串联构成, 具体值如下 :
常量
布尔函数
上式中的 X,Y 为 32 位的字。
置换函数
上式中的 X,Y 为 32 位的字。
2.2. SM3 算法描述
对于长度为l(l 小于 2 的 64 次方)比特的消息 M,SM3 密码杂凑算法经过消息填充和迭代压缩,产生杂凑值,杂凑值的长度为 256 比特。
- 消息填充
假定消息输入的长度为l(l 小于 2 的 64 次方)比特。首先将比特 “1” 添加到消息的末尾,再添加 k 个 “0”,k 是满足 k + l + 1 = 448 mod 512 的最小的非负整数。然后再添加一个 64 位比特串,该比特串是长度 l 的二进制表示。填充后的消息 M 比特长度为 512 倍数。
例如:对消息 01100001 01100010 01100011,其长度 l =24,经填充得到比特串:
- 迭代压縮
迭代压缩是 SM3 密码杂凑算法的主体操作,此步骤产生最终杂凑值。迭代压缩过程可以表述如下:
将消息填充后的消息 M 按 512 比特进行消息分组:
其中: n = (k + 1 + l + 64) / 512
按如下方式迭:
其中 CF 是压缩函数, V (0) 为 256 比特初始值 IV,B (i)为填充后的消息分组,迭代压缩的结果为V(n),同时也是消息 M 的杂凑值。
- 消息拓展
将消息分组 B (i) 按以下方法扩展生成个字 W0,W1 … W67; W0’,W1‘ … W63’,用于压缩函数CF:
- 压縮函数
其中字的存储为大端格式
- 杂凑值
输出 256 比特的杂凑值
3. SM3 小结
杂凑函数的设计和应用已经发展了几十余年。自第一个直接构造的杂凑函数诞生以来密码学界普遍认为,构造安全的杂凑函数就是构造抗碰撞的压缩函数。然而,随着王小云等人成功破解 MD5 ,等杂凑函数以后,基于传统 MD 结构设计的杂凑函数被证明是不安全的。
因此,对杂凑函数的设计与分析又成为了密码学界的一大研究热点,特别是当前最新的杂凑算法的研宄,推动了研究杂凑函数的高潮。SM3 轮数的研究将会是高潮,减少轮数的 SM3 算法进行随机性分析 32 轮、33 轮、34 轮和 35 轮算法的飞来去器攻击方法。但是如何对更多轮数的算法的原根、碰撞和第二原根进行分析也是需要进一步研究的问题。
4、SM4
1. SM4 简介
SM4 是一种 Feistel 结构的分组密码算法,其分组长度和密钥长度均为128bit。加解密算法与密钥扩张算法都采用 32 轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,即解密算法使用的轮密钥是加密算法使用的轮密钥的逆序。
2. SM4算法流程
SM4算法是一种对称加密算法,被广泛应用于中国的电子政务、电子商务等领域。SM4算法的过程可以分为以下几个步骤:
- 密钥扩展
SM4算法采用分组加密的方式,每个分组长度为128位。首先需要将密钥扩展成一系列的子密钥,每个子密钥用于加密和解密一个分组。子密钥的生成过程是采用原始密钥经过一系列的变换得到,具体变换过程包括S盒查表、P盒置换、异或运算等。 - 分组加密将明文消息划分成若干个128位的分组,每个分组独立加密。具体加密过程如下:
- 将当前分组与上一个加密后的分组异或运算得到中间结果。
- 将中间结果经过一系列的变换(包括S盒查表、P盒置换等)得到加密后的结果。
- 将加密后的结果与下一个分组进行异或运算得到当前分组的加密结果。
- 分组解密解密过程与加密过程类似,具体步骤如下:
- 将当前分组与上一个解密后的分组异或运算得到中间结果。
- 将中间结果经过一系列的逆变换(包括逆S盒查表、逆P盒置换等)得到原始明文消息。
- 将原始明文消息与下一个分组进行异或运算得到当前分组的解密结果。
SM4算法具有较高的安全性、效率以及兼容性,被广泛应用于各种安全性和可靠性需求较高的场景中,例如电子政务、电子商务等。同时,SM4算法还具有密钥长度短、运算速度快等优点,使得其成为一种非常优秀的对称加密算法。
4. SM4 小结
SM4 密码算法是中国第一次由专业密码机构公布并设计的商用密码算法,到目前为止,尚未发现有任何攻击方法对SM4 算法的安全性产生威胁。
5、其他国密算法
1. SM7
一种分组密码算法。
2. SM9
SM9是我国采用的一种标识密码标准,由国家密码管理局于2016 年 3 月 28 日发布,相关标准为“GM/T 0044-2016 SM9标识密码算法”。在商用密码体系中,SM9 主要用于用户的身份认证。SM9 算法不需要申请数字证书,适用于互联网应用的各种新兴应用的安全保障。据新华网公开报道,SM9 的加密强度等同于 3072 位密钥的 RSA 加密算法。
6、国密应用场景小结
- SM1算法的应用场景主要集中在电子政务、电子商务以及国民经济的各个应用领域,包括国家政务通、警务通等重要领域。SM1算法不公开,仅以IP核的形式存在于芯片中,因此,已经研制了系列芯片、智能IC卡、智能密码钥匙、加密卡、加密机等安全产品,并广泛应用于以上领域。
- SM2算法的应用场景也主要集中在电子政务、电子商务等领域,特别适合于数字签名、密钥协商、加密和解密等操作。SM2算法基于椭圆曲线密码体制,具有较高的安全性,推荐了一条256位的曲线作为标准曲线。此外,SM2算法在签名、密钥交换方面不同于ECDSA、ECDH等国际标准,而是采取了更为安全的机制。
- SM3算法主要用于数字签名和验证,以及数据完整性校验。在应用场景中,SM3算法可以生成一个固定长度的消息摘要,对于大量数据的处理和传输来说,可以保证其安全性和效率。
- SM4算法是一种对称加密算法,被广泛应用于电子政务、电子商务等领域。该算法具有较高的安全性、效率以及兼容性,可以用于加密和解密大量数据。SM4算法采用了Feistel结构,将明文分成多个数据块,每个数据块分别进行加密操作。该算法采用了S盒、置换、线性变换等操作,从而保证了加密的强度和安全性。
总的来说,SM1-SM4这四种密码算法都在各自擅长的领域中有所应用和发展。
从目前的密码研究技术来看,现有的国密算法的安全性在一段时间内并不会受到任何攻击性危机,但随着密码学技术和量子计算机的发展,未来的国密将会面临更大的挑战,现有国密算法的改进、新的密码算法和抗量子密码学的研究将会成为国密的研究热点。当然这一点不只针对国密,如果量子计算机真的出现那一刻,所有的密码体系都会受到冲击。