一、SM2 算法基础
1.1 椭圆曲线公钥密码,到底是个啥?
说起 SM2,咱们得先聊聊它背后的数学——椭圆曲线密码(Elliptic Curve Cryptography,简称 ECC)。
你想想看,传统的 RSA 靠的是大整数分解的难度。而 ECC 呢?靠的是椭圆曲线上离散对数问题的难解性。说白了,就是在一个椭圆曲线上,已知点 G 和整数 k,计算 k*G 很容易。但反过来,已知 G 和 k*G,让你反推出 k,那就难了去了。
我个人习惯把 ECC 比作一个单向门。进去很容易,出来几乎不可能。SM2 就是利用这个单向门的特性来做加密和签名的。
我曾经帮一个银行系统做密钥管理方案审查,他们原先用的是 RSA 2048 位。我建议换成 SM2,因为 SM2 在达到同等安全强度时,密钥长度只有 256 位,运算效率高了不止一个量级。而且,用国标,合规上完全没问题。
SM2 是我国发布的椭圆曲线公钥密码标准,全称叫「SM2 椭圆曲线公钥密码算法」。它由多个子算法组成,包括数字签名算法、密钥交换协议和公钥加密算法。
1.2 密钥对是怎么生出来的?
咱们搞审计日志,密钥销毁是核心操作。但要理解销毁,得先懂怎么生成的,对吧?
SM2 密钥对,由私钥和公钥组成。私钥是一个大整数(256 位),公钥是椭圆曲线上的一个点。
生成步骤不复杂,我大致给你拆解一下:
- 选定曲线参数: SM2 使用一条固定的 256 位椭圆曲线,参数由国家密码管理局定义。你改不了,也没必要改。
- 生成私钥 dA: 用安全的随机数发生器,生成一个在 [1, n-2] 范围内的整数,其中 n 是曲线的阶。
- 计算公钥 PA: 把私钥 dA 乘以曲线的基点 G,得到另一个点 PA。即 PA = dA * G。
就这么三步。私钥你自己藏好,公钥交给别人。
| 参数 | 含义 | 长度 | 说明 |
|---|---|---|---|
| dA | 私钥 | 256 位 | 随机整数,保密 |
| PA | 公钥 | 512 位(未压缩) | 椭圆曲线上的点,包含 x 和 y 坐标 |
| G | 基点 | 固定参数 | SM2 曲线预定义 |
| n | 阶 | 256 位 | G 点的素数阶 |
1.3 国密标准,你了解多少?
在深入 SM2 之前,得把国密标准这个大背景说清楚。我简单画了个图,方便你理解整个体系。
国密标准是一整套由国家密码管理局制定的密码算法标准,包括 SM2、SM3、SM4 等。其中:
- SM2: 公钥密码算法,负责加密、签名、密钥协商。我们的销毁审计日志主要和它打交道。
- SM3: 密码杂凑算法,类似于 SHA-256。用于生成消息摘要。
- SM4: 分组对称密码算法,类似于 AES。用于加密存储或传输数据。
我看到不少初学者把 SM2 和 SM4 搞混。其实很简单:
- SM2 是非对称,用公钥/私钥对。
- SM4 是对称,只有一个密钥。
这份课程主要讲 SM2 密钥销毁审计日志的解析。但后续章节中,SM3 也会频繁出现——因为日志的完整性校验,很多地方会用到 SM3 摘要。
1.4 为什么学 SM2 密钥销毁审计日志解析?
你可能会问:密钥销毁,不就是删个文件吗?有什么好解析的?
嗯,这里要注意。密钥销毁在密码体系中是极其敏感的操作。因为密钥一旦泄露,整个系统的安全基石就崩塌了。所以监管机构要求,每次密钥销毁都必须生成完整的审计日志。
日志里记录了:谁发起了销毁?什么时候?销毁了什么密钥?销毁前密钥的状态是什么?销毁后的验证结果如何?
咱们这门课,就是教你如何把这些原始的、结构化的或半结构化的日志数据,解析成清晰可读、便于审计的信息。
我举个例子。有一次,我一个客户的系统过了等保三级检查,但审计人员要求提供过去半年的密钥销毁日志。结果是——日志文件在,但格式混乱,时间戳格式不统一,操作员 ID 对不上号。最后我花了一周时间写解析脚本,才算把账理清楚。你要是在项目初期就掌握了这门课的内容,这种苦活就能省下来了。