写在前面:加密算法的安全性依赖于一个尚未被有效求解的数学问题。
1. ECC
ECC 是一种公钥密码算法,其安全性基于椭圆曲线离散对数问题 (ECDLP, Elliptic Curve Discrete Logarithm Problem) 的困难性。
1.1. 椭圆曲线方程 / Elliptic Curve Equation
最常用形式:短 Weierstrass 方程(适用于大多数密码学应用):
条件:曲线必须是 非奇异 (nonsingular)(即曲线不包含奇点),即判别式不为零:
如果椭圆曲线是连续的值则会导致如下问题,以致并不适合加密。
- 不可计算:实数有无限小数展开,计算机只能处理有限精度 → 无法精确实现群运算。
- 安全性崩溃:实数上定义的“椭圆曲线离散对数问题 (ECDLP)”就不再是离散的,而是“连续对数问题”,可以用微积分、牛顿迭代之类的数值方法近似求解,完全没安全性。
- 没有有限群结构:加密需要在有限群里定义难题(类似 RSA 的 ),而实数上的椭圆曲线形成的是连续群,不具备离散难题的条件。
因此需要把椭圆定义在有限域1上,并通过模运算将结果始终限定在在 ,只有这样,才能形成一个 有限、离散、可计算的群,才能保证运算可实现,结构完备,并依赖 ECDLP 提供安全性。
在密码学中,曲线是定义在有限域 或 上,而不是实数域。
1.2. 完整过程
- 选一条 椭圆曲线 , 并取椭圆曲线上一点作为
基点 P。 - 选定一个大数
k 作为私钥, 并生成公钥。 - 加密:选择
随机数 r, 将消息 M生成密文 C。密文是一个点对, 即 `。 - 解密:
1.3. 加密详解
P为基点(base point),即 P (x, y)k为私钥(provate key)Q为公钥(public key)

点的加法
给定两点 , :
- 如果 →
- 如果 →
- 如果 且 → (互为对称点)
- 否则,斜率为: 结果点 :
倍点
若
A与B重合,其结果等同2A(Point Doubling),即与曲线作切线求交点。
如果 ,则: • 若 → • 否则:
标量乘法 / Scalar Multiplication
这是 ECC 的核心运算,也是公钥生成和加密的基础。ECDLP 的难题:已知 P 和 Q = kP,求 k 在大素数域下是指数级困难。
定义为 自加 次,即:
实际计算中用双倍-加法算法 (double-and-add):
- 把 写成二进制
- 每次循环做“倍点”和“条件加法”
- 时间复杂度
由此可见 ECC 的加密与解密本质上都是标量乘法运算,可通过 double-and-add 或 windowing 等算法以 O(log k) 复杂度完成。这也引出了其与 RSA 的差异:
RSA:加密快,解密慢ECC:加密与解密同速
如下为基点在有限域内经过多次点加后的结果。

1.4. 解密详解
解密者有私钥 d。
- 收到 。
- 计算:
- 恢复明文:
原因:
2. SM2
Loading…
3. Ref
Footnotes
-
有限域,即伽罗瓦域(Galois Field):一个有限域,记作 或 ,其中包含有限个元素 (p 为素数,m 为正整数),并且加法、乘法封闭且满足域的运算规律。 ↩
部分信息可能已经过时