1. 对称加密算法
对称算法普遍基于分组或流结构,其安全强度主要取决于密钥长度与非线性变换(S盒)的复杂度。
SM1 分组密码
- 算法类型:分组密码。
- 实现形式 :硬件实现。其算法本身(如结构、S盒参数)属于不公开的机密商用密码,必须通过专用的加密芯片(如安全芯片、网闸等硬件)调用。
- 密钥长度:128 位 (bit)
- 分组长度:128 位
- 工作模式:支持 ECB、CBC、OFB、CFB 等标准分组模式。
- S盒配置:包含固定的非线性 S 盒,具体参数未披露,通常由硬件芯片内部的组合逻辑电路直接实现。
SM4 分组密码
-
算法类型:分组密码(原名 SMS4,广泛用于无线局域网、政务系统及工业控制)。
-
设计结构 :采用非平衡 Feistel 结构(或称整体逆序 Feistel 结构)。
-
迭代轮数 :32 轮。
-
核心参数:
-
密钥长度:128 位
-
分组长度:128 位(即 16 字节的消息块)
-
轮函数与线性变换 :每一轮处理 4 个 32 位的字(Word)。轮函数 FFF 包含非线性变换 τ\tauτ 和线性变换 LLL。
-
S盒配置 :采用 1 个 8 位输入、8 位输出的固定的非线性 S 盒 (8×88 \times 88×8)。该 S 盒基于有限域 GF(28)GF(2^8)GF(28) 上的逆变换,并在前后加上了仿射变换。整个加密过程中,每轮轮函数会调用 4 次该 S 盒,32 轮共调用 128 次。
-
密钥扩展算法:
-
原始 128 位主密钥经过与系统参数 FKFKFK 异或后,进行 32 轮迭代,每次迭代生成 1 个 32 比特的轮密钥(共 32 个)。
-
注意 :密钥扩展算法使用的线性变换 L′L'L′ 与加密算法不同
SM7 分组密码
- 算法类型:分组密码。
- 应用场景 :主要用于非接触式 IC 卡、智能门禁、校园卡、社保卡等硬件环境,算法本身不公开。
- 密钥长度:128 位
- 分组长度:128 位
- 迭代轮数:32 轮。
- S盒配置:基于硬件集成,包含非线性 S 盒(具体设计参数未公开),具备极强的抗差分分析与抗线性分析能力。
祖冲之算法 (ZUC)
-
算法类型:流密码(序列密码)。
-
国际地位 :3GPP LTE(第四代移动通信)国际加密标准、ISO/IEC 18033-4 国际标准。
-
算法结构 :由三层组成:线性反馈移位寄存器(LFSR) 、比特重组(BR) 、非线性函数(F)。
-
核心参数:
-
密钥长度:128 位(ZUC-128)或 256 位(ZUC-256)。
-
IV 长度:与密钥长度相同(128 位 或 256 位)。
-
驱动部分(LFSR)设计细节:
-
ZUC 驱动部分的 LFSR 包含 16 个 31 位的寄存器单元 (S0S_0S0 至 S15S_{15}S15)。
-
该寄存器的反馈运算是在模梅森素数 231−12^{31} - 1231−1 的整数环上进行的。选择 231−12^{31}-1231−1 的优势在于能提供长达 2496−12^{496}-12496−1 的极大周期,且非常利于在 32 位计算机架构下通过移位和加法实现快速取模。
-
消息字与输出 :在运行阶段,每个时钟周期(每一轮)的非线性函数 FFF 都会机动输出一个 32 位的字(Word) 作为密钥流,直接与明文字流进行异或。
-
S盒配置 :包含 2 个不同的 8×88 \times 88×8 S 盒 (S0S_0S0 和 S1S_1S1)。这两个 S 盒嵌入在非线性函数 FFF 的内部,通过将 32 位数据拆分为 4 个 8 位字节分别查表,来提供高效的非线性混淆。
2. 非对称加密算法
非对称算法的安全性建立在数学难题之上,其参数不依赖 S 盒混淆,而是取决于数学群的阶、有限域大小和点坐标。
SM2 椭圆曲线密码算法
- 算法类型 :非对称密码。包含:SM2-1 数字签名算法 、SM2-2 密钥交换协议 、SM2-3 公钥加密算法。
- 底层数学问题 :基于素数域 FpF_pFp 上的椭圆曲线离散对数问题(ECDLP)。
- 核心参数与密钥长度:
- 私钥 :256 位 (一个处于 1,n−11, n-11,n−1 之间的大整数 ddd)。
- 公钥 :512 位 。它是椭圆曲线上的一个点 P=(x,y)P=(x, y)P=(x,y),由 xxx 坐标(256 位)和 yyy 坐标(256 位)拼接而成。
- 安全强度 :等价于 128 比特 的对称加密安全强度(因为求解椭圆曲线离散对数最优算法的时间复杂度为 O(2n/2)\mathcal{O}(2^{n/2})O(2n/2)。等价于 RSA 3072 位)。
SM9 标识密码算法
- 算法类型:基于身份的密码体制(Identity-Based Cryptography, IBC)。
- 底层数学问题 :基于椭圆曲线上的双线性对映射(Bilinear Pairing)(如 Barreto-Naehrig 曲线,即 BN 曲线)。
- 核心参数与密钥长度:
- 主密钥(Master Key):主私钥为 256 位的大整数,主公钥为曲线上的点。
- 用户私钥 :根据应用模式,通常为椭圆曲线 G1G_1G1 或 G2G_2G2 群上的点,长度为 256 位或 512 位。
- 公钥:用户的明文字符串,长度可变。
- 密钥交换:在 SM9 密钥交换协议中,通信双方共需要 2 次或 3 次消息传递。
3. 哈希(杂凑)算法
哈希算法将任意长度的消息压缩为固定长度的摘要,其核心参数在于分块处理的大小。
SM3 密码杂凑算法
-
算法类型:密码哈希算法(杂凑算法)。
-
设计结构 :基于 Merkle-Damgård 结构(与 MD5、SHA-256 类似)。
-
核心参数:
-
输出摘要长度 :256 位(32 字节)。
-
消息分组长度 :512 位 。输入的消息在末尾进行填充(填入原始消息长度和比特
1及若干0),并被切分为 512 位(64 字节)大小的数据块进行级联压缩。 -
消息字与扩展(迭代内部):
-
压缩函数包含 64 步迭代(轮)。
-
在对每个 512 位的消息分组进行处理前,必须将其进行"消息扩展":扩展生成 132 个 32 位的消息字 (其中 W0...W67W_0 \dots W_{67}W0...W67 共 68 个,W0′...W63′W'0 \dots W'{63}W0′...W63′ 共 64 个),供 64 步迭代方程使用。
总结参数对比表
| 算法 | 密钥长度 | 分组/消息块长度 | 输出/摘要长度 | S盒配置 |
|---|---|---|---|---|
| SM1 | 128 位 | 128 位 | 128 位(密文) | 有(未公开) |
| SM4 | 128 位 | 128 位 | 128 位(密文) | 1 个 8×88 \times 88×8 S盒 |
| SM7 | 128 位 | 128 位 | 128 位(密文) | 有(未公开) |
| ZUC | 128 / 256 位 | 连续流(每次 32 位字) | 密钥流序列 | 2 个不同的 8×88 \times 88×8 S盒 |
| SM2 | 私钥 256 位 / 公钥 512 位 | 可变 | 依赖模式(含明文及验签结果) | 无 |
| SM9 | 主密 256 位 / 公钥为字符串 | 可变 | 依赖模式 | 无 |
| SM3 | 无(哈希算法) | 512 位 | 256 位 | 无(采用置换函数 P) |