第二章 椭圆曲线密码学基础

说实话,我刚接触椭圆曲线时,也觉得这东西挺抽象的。一条曲线,几个点,怎么就成密码学了?直到我在一个国产化项目中,需要把RSA替换成SM2,才真正体会到——不理解椭圆曲线,你连密钥长度为什么那么短都说不清楚。

这一章,咱们就把椭圆曲线密码学(ECC)的底裤扒开。不扯虚的,直接上干货。

2.1 有限域 GF(p)——密码学的“数字沙盘”

椭圆曲线要在有限域上才能用于密码学。什么叫有限域?说白了,就是一个元素个数有限的集合,里面的数可以做加减乘除,结果还在这个集合里。

SM2用的是素数域GF(p),p是一个大素数。我习惯把GF(p)想象成一个“数字沙盘”——所有运算都在这个沙盘里进行,永远不会跑出去。

GF(p)的定义:

  • 集合:{0, 1, 2, ..., p-1}
  • 加法:模p加法
  • 乘法:模p乘法
  • 每个非零元素都有乘法逆元

举个例子,GF(7)里:

  • 3 + 5 = 8 mod 7 = 1
  • 4 × 6 = 24 mod 7 = 3
  • 2的逆元是4,因为2×4=8 mod 7=1

嗯,这里要注意:GF(p)里的运算都是模p的。你想想看,如果p是256位的素数,那这个沙盘就大到天文数字级别了。

2.2 椭圆曲线方程——不只是数学公式

SM2使用的椭圆曲线方程是:

y² = x³ + ax + b (mod p)

其中4a³ + 27b² ≠ 0 (mod p),保证曲线没有奇点。

SM2国标中,a和b是固定的参数。我个人习惯把这条曲线想象成一个“甜甜圈”在二维平面上的投影——当然,在有限域上它看起来更像一堆散点。

为什么是y² = x³ + ax + b?

这个形式叫Weierstrass标准型。几乎所有主流ECC标准(包括SM2、secp256k1、P-256)都基于这个形式。它保证了群运算的封闭性和可计算性。

2.3 点加与倍点运算——ECC的核心操作

椭圆曲线上的点可以“相加”。这个加法不是普通加法,而是几何意义上的加法。

2.3.1 点加(Point Addition)

给定两个不同的点P和Q,P+Q = R的计算规则:

  1. 过P和Q做直线
  2. 直线与曲线交于第三点R'
  3. R'关于x轴的对称点就是R

公式表达:

λ = (y₂ - y₁) / (x₂ - x₁) mod p
x₃ = λ² - x₁ - x₂ mod p
y₃ = λ(x₁ - x₃) - y₁ mod p

2.3.2 倍点运算(Point Doubling)

当P=Q时,就是倍点运算:

λ = (3x₁² + a) / (2y₁) mod p
x₃ = λ² - 2x₁ mod p
y₃ = λ(x₁ - x₃) - y₁ mod p

我曾经踩过的坑:在实现倍点运算时,分母2y₁可能为0。如果y₁=0,那这个点的倍点结果就是无穷远点。很多初学SM2的人会忽略这个边界情况,导致程序崩溃。

2.4 离散对数问题——ECC安全的基石

椭圆曲线上的离散对数问题(ECDLP)是这样的:

给定基点G和点Q = kG,求k。

说白了,就是已知起点和终点,让你猜走了多少步。在普通加法里,这很容易。但在椭圆曲线上,这几乎不可能——至少目前没有多项式时间算法。

为什么ECDLP这么难?

  • 没有类似“指数运算”的对称性
  • Pollard's rho算法复杂度是O(√n),n是群的阶
  • 量子计算机可以用Shor算法破解,但那是另一回事

我记得有一次做安全评估,有人问:“为什么SM2的256位密钥比RSA的2048位还安全?”答案就在这里——ECDLP的难度决定了ECC可以用更短的密钥达到同等安全强度。

2.5 知识体系总览

下面这张图把本章的核心逻辑串起来了:

椭圆曲线密码学知识体系 椭圆曲线密码学知识体系 有限域 GF(p) 椭圆曲线方程 y² = x³ + ax + b 点加运算 P + Q 倍点运算 2P 标量乘法 kG = G + G + ... + G 椭圆曲线离散对数问题 (ECDLP) 从GF(p)到ECDLP,每一层都建立在前一层的基础上,最终构成SM2的安全基石

2.6 关键参数对比

不同椭圆曲线标准的核心参数差异很大。我整理了一个对比表,方便你理解SM2的位置:

参数 SM2 secp256k1 P-256
p(素数) 256位 256位 256位
a 固定值 0 固定值
b 固定值 7 固定值
G(基点) 国标定义 标准定义 NIST定义
n(阶) ≈ 2²⁵⁶ ≈ 2²⁵⁶ ≈ 2²⁵⁶
安全强度 128位 128位 128位

我的建议:如果你在做国产化项目,直接用SM2。如果做国际通用场景,P-256更稳妥。secp256k1主要用于区块链(比如比特币),日常应用不推荐。

2.7 本章小结

椭圆曲线密码学的基础可以概括为三句话:

  • 有限域GF(p)提供了运算的“沙盘”
  • 椭圆曲线方程定义了点的集合
  • 点加和倍点构成了标量乘法,而标量乘法的逆就是ECDLP