一、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 椭圆曲线公钥密码算法」。它由多个子算法组成,包括数字签名算法、密钥交换协议和公钥加密算法。

一句话记住: SM2 就是用椭圆曲线(ECC)做的一整套国密公钥密码方案,对标国际的 ECDSA、ECDH 和 ECIES。

1.2 密钥对是怎么生出来的?

咱们搞审计日志,密钥销毁是核心操作。但要理解销毁,得先懂怎么生成的,对吧?

SM2 密钥对,由私钥和公钥组成。私钥是一个大整数(256 位),公钥是椭圆曲线上的一个点。

生成步骤不复杂,我大致给你拆解一下:

  1. 选定曲线参数: SM2 使用一条固定的 256 位椭圆曲线,参数由国家密码管理局定义。你改不了,也没必要改。
  2. 生成私钥 dA: 用安全的随机数发生器,生成一个在 [1, n-2] 范围内的整数,其中 n 是曲线的阶。
  3. 计算公钥 PA: 把私钥 dA 乘以曲线的基点 G,得到另一个点 PA。即 PA = dA * G。

就这么三步。私钥你自己藏好,公钥交给别人。

SM2 密钥对核心参数
参数 含义 长度 说明
dA 私钥 256 位 随机整数,保密
PA 公钥 512 位(未压缩) 椭圆曲线上的点,包含 x 和 y 坐标
G 基点 固定参数 SM2 曲线预定义
n 阶 256 位 G 点的素数阶
⚠ 必须注意: 私钥的随机数发生器必须是国家密码管理局批准的硬件或软件模块。我曾经见过一个项目,开发人员图省事,直接用 Python 内置的 random 模块生成私钥。那东西是用 Mersenne Twister 算法,根本不是密码学安全的随机数。结果私钥可以被预测,整个密钥体系形同虚设。这个坑,千万别踩。

1.3 国密标准,你了解多少?

在深入 SM2 之前,得把国密标准这个大背景说清楚。我简单画了个图,方便你理解整个体系。

国密标准体系与 SM2 定位 公钥密码体制 椭圆曲线密码体系(ECC) SM2 椭圆曲线公钥密码算法 数字签名算法 密钥交换协议 公钥加密算法 SM2 是国密标准中的核心公钥算法,覆盖三大应用场景

国密标准是一整套由国家密码管理局制定的密码算法标准,包括 SM2、SM3、SM4 等。其中:

  • SM2: 公钥密码算法,负责加密、签名、密钥协商。我们的销毁审计日志主要和它打交道。
  • SM3: 密码杂凑算法,类似于 SHA-256。用于生成消息摘要。
  • SM4: 分组对称密码算法,类似于 AES。用于加密存储或传输数据。

我看到不少初学者把 SM2 和 SM4 搞混。其实很简单:

  • SM2 是非对称,用公钥/私钥对。
  • SM4 是对称,只有一个密钥。

这份课程主要讲 SM2 密钥销毁审计日志的解析。但后续章节中,SM3 也会频繁出现——因为日志的完整性校验,很多地方会用到 SM3 摘要。

小经验: 在实际审计系统中,密钥销毁事件除了记录销毁本身的时间、操作者等信息外,还经常附带销毁前用 SM3 对密钥材料计算的一个摘要,作为凭证。这是合规审查的硬要求,不可省略。

1.4 为什么学 SM2 密钥销毁审计日志解析?

你可能会问:密钥销毁,不就是删个文件吗?有什么好解析的?

嗯,这里要注意。密钥销毁在密码体系中是极其敏感的操作。因为密钥一旦泄露,整个系统的安全基石就崩塌了。所以监管机构要求,每次密钥销毁都必须生成完整的审计日志。

日志里记录了:谁发起了销毁?什么时候?销毁了什么密钥?销毁前密钥的状态是什么?销毁后的验证结果如何?

咱们这门课,就是教你如何把这些原始的、结构化的或半结构化的日志数据,解析成清晰可读、便于审计的信息。

我举个例子。有一次,我一个客户的系统过了等保三级检查,但审计人员要求提供过去半年的密钥销毁日志。结果是——日志文件在,但格式混乱,时间戳格式不统一,操作员 ID 对不上号。最后我花了一周时间写解析脚本,才算把账理清楚。你要是在项目初期就掌握了这门课的内容,这种苦活就能省下来了。