This post is not yet available in English. Showing the original version.
公钥密码学(非对称密码体制)通过引入单向陷门函数,彻底解决了对称密码体制在大型网络中密钥分发与管理的固有瓶颈。本篇系统阐明支持公钥密码的核心数论工具(辗转相除法、扩展欧几里得算法、欧拉定理、快速模幂),深入推导 RSA 算法的数学原理、加解密流程、全域正确性证明,以及工程实现中的双模数规范与安全填充要求。
一、非对称密码体制的提出背景与密钥分配问题
在对称密码体制中,任何一对想要进行保密通信的实体必须预先共享同一个秘密密钥。
若网络中存在 N N N 个参与者,两两之间均需进行排他性保密通信,全网所需的独立对称密钥总数为两两组合数:
( N 2 ) = N ( N − 1 ) 2 = Θ ( N 2 ) . \binom{N}{2} = \frac{N(N - 1)}{2} = \Theta(N^2). ( 2 N ) = 2 N ( N − 1 ) = Θ ( N 2 ) .
密钥总量呈二次方爆炸式增长。一个仅有 1000 人的网络,需要维护近 50 万个独立密钥,分发与存储代价不可承受。
1976 年,Diffie 与 Hellman 提出了公钥密码体制的思想:
每个参与者仅需独立生成一对密钥:公开的公钥(Public Key, P K PK P K ) 与保密的私钥(Private Key, S K SK S K ) ;
全网 N N N 个参与者总共仅需生成并维护 N N N 对密钥(2 N 2N 2 N 个单钥);
任何人均可获取接收方的公钥并加密消息,但只有持有对应私钥的合法接收方才能完成解密。
公钥密码的数学基础是单向陷门函数(Trapdoor One-Way Function) :正向计算在多项式时间内易于完成;在未知陷门(私钥)时,反向求解在计算复杂度上不可行;但一旦掌握特定陷门信息,反向求解同样可在多项式时间内高效完成。
二、欧几里得算法(辗转相除法)代数原理
整数除法基本定理指出:对于任意整数 a , b a, b a , b (设 b > 0 b > 0 b > 0 ),存在唯一的整数商 q q q 与余数 r r r ,满足:
a = q ⋅ b + r , 0 ≤ r < b . a = q \cdot b + r,\qquad 0 \le r < b. a = q ⋅ b + r , 0 ≤ r < b .
2.1 最大公约数的传递不变性
代数整除性质保证:任何同时整除 a a a 与 b b b 的公约数,必能整除二者的线性组合 r = a − q b r = a - qb r = a − q b ;反之,任何同时整除 b b b 与 r r r 的公约数,亦必能整除 a = q b + r a = qb + r a = q b + r 。因此,a a a 与 b b b 的公约数集合同 b b b 与 r r r 的公约数集合完全相同,其最大公约数(Greatest Common Divisor)恒等:
gcd ( a , b ) = gcd ( b , r ) = gcd ( b , a m o d b ) . \gcd(a, b) = \gcd(b, r) = \gcd(b,\ a \bmod b). g cd( a , b ) = g cd( b , r ) = g cd( b , a mod b ) .
通过不断以除数除以余数,余数序列严格单调递减(b > r 1 > r 2 > ⋯ ≥ 0 b > r_1 > r_2 > \cdots \ge 0 b > r 1 > r 2 > ⋯ ≥ 0 ),必然在有限步内收敛终止于余数为 0。最后一个非零余数即为最大公约数 gcd ( a , b ) \gcd(a, b) g cd( a , b ) 。
算例 :计算 gcd ( 7469 , 2464 ) \gcd(7469, 2464) g cd( 7469 , 2464 ) :
7469 = 3 × 2464 + 77 7469 = 3 \times 2464 + 77 7469 = 3 × 2464 + 77 ;
2464 = 32 × 77 + 0 2464 = 32 \times 77 + 0 2464 = 32 × 77 + 0 。
最后一个非零余数为 77,故 gcd ( 7469 , 2464 ) = 77 \gcd(7469, 2464) = 77 g cd( 7469 , 2464 ) = 77 。
三、扩展欧几里得算法(EEA)与模逆求解
裴蜀定理(Bézout's Identity)指出:对任意整数 a , b a, b a , b ,恒存在整数系数 s , t s, t s , t ,满足线性丢番图方程:
s ⋅ a + t ⋅ b = gcd ( a , b ) . s \cdot a + t \cdot b = \gcd(a, b). s ⋅ a + t ⋅ b = g cd( a , b ) .
扩展欧几里得算法(Extended Euclidean Algorithm, EEA) 在执行辗转相除的同时,通过反向代换求出这组整数解 ( s , t ) (s, t) ( s , t ) 。
3.1 求解模逆元的判定依据
当且仅当 gcd ( a , n ) = 1 \gcd(a, n) = 1 g cd( a , n ) = 1 时,裴蜀等式为:
s ⋅ a + t ⋅ n = 1. s \cdot a + t \cdot n = 1. s ⋅ a + t ⋅ n = 1.
等式两端在模 n n n 意义下展开:
s ⋅ a + t ⋅ n ≡ s ⋅ a + 0 ≡ 1 ( m o d n ) ⟹ a − 1 ≡ s ( m o d n ) . s \cdot a + t \cdot n \equiv s \cdot a + 0 \equiv 1 \pmod n \implies a^{-1} \equiv s \pmod n. s ⋅ a + t ⋅ n ≡ s ⋅ a + 0 ≡ 1 ( mod n ) ⟹ a − 1 ≡ s ( mod n ) .
系数 s s s 即为 a a a 模 n n n 的乘法逆元。若算得的系数 s s s 为负数,通过加上模数 n n n 调整为最小正剩余:s norm = ( s m o d n + n ) m o d n s_{\text{norm}} = (s \bmod n + n) \bmod n s norm = ( s mod n + n ) mod n 。
3.2 扩展欧几里得算法手算实例
例题 :求解 49 − 1 ( m o d 640 ) 49^{-1} \pmod{640} 4 9 − 1 ( mod 640 ) 。
第一阶段:前向辗转相除(记录除法整商) :
640 = 13 × 49 + 3 640 = 13 \times 49 + 3 640 = 13 × 49 + 3
49 = 16 × 3 + 1 49 = 16 \times 3 + 1 49 = 16 × 3 + 1
3 = 3 × 1 + 0 3 = 3 \times 1 + 0 3 = 3 × 1 + 0 (最后一个非零余数为 1,确证互素,逆元存在)。
第二阶段:反向线性组合回代 :
从倒数第二个等式中将余数 1 隔离出来:
1 = 49 − 16 × 3. 1 = 49 - 16 \times 3. 1 = 49 − 16 × 3.
将第一式中的余数 3 = 640 − 13 × 49 3 = 640 - 13 \times 49 3 = 640 − 13 × 49 代入替换:
1 = 49 − 16 × ( 640 − 13 × 49 ) = 49 − 16 × 640 + 208 × 49 = 209 × 49 − 16 × 640. 1 = 49 - 16 \times (640 - 13 \times 49) = 49 - 16 \times 640 + 208 \times 49 = 209 \times 49 - 16 \times 640. 1 = 49 − 16 × ( 640 − 13 × 49 ) = 49 − 16 × 640 + 208 × 49 = 209 × 49 − 16 × 640.
第三阶段:提取逆元系数并取模 :
209 × 49 ≡ 1 ( m o d 640 ) ⟹ 49 − 1 ≡ 209 ( m o d 640 ) . 209 \times 49 \equiv 1 \pmod{640} \implies 49^{-1} \equiv 209 \pmod{640}. 209 × 49 ≡ 1 ( mod 640 ) ⟹ 4 9 − 1 ≡ 209 ( mod 640 ) .
乘回自检 :
49 × 209 = 10241 = 16 × 640 + 1 ≡ 1 ( m o d 640 ) . 49 \times 209 = 10241 = 16 \times 640 + 1 \equiv 1 \pmod{640}. 49 × 209 = 10241 = 16 × 640 + 1 ≡ 1 ( mod 640 ) .
验算无误。
四、欧拉函数 φ ( n ) \varphi(n) φ ( n ) 与欧拉定理
4.1 欧拉函数定义与性质
欧拉函数 φ ( n ) \varphi(n) φ ( n ) (Euler's Totient Function)定义为小于或等于 n n n 的正整数中与 n n n 互素的整数个数:
φ ( n ) = ∣ { k ∈ N ∣ 1 ≤ k ≤ n , gcd ( k , n ) = 1 } ∣ . \varphi(n) = \big|\{ k \in \mathbb{N} \mid 1 \le k \le n,\ \gcd(k, n) = 1 \}\big|. φ ( n ) = { k ∈ N ∣ 1 ≤ k ≤ n , g cd( k , n ) = 1 } .
核心性质:
若 p p p 为素数,因 1 1 1 到 p − 1 p-1 p − 1 均与 p p p 互素,故:
φ ( p ) = p − 1. \varphi(p) = p - 1. φ ( p ) = p − 1.
欧拉函数为积性函数 :若 gcd ( a , b ) = 1 \gcd(a, b) = 1 g cd( a , b ) = 1 ,则 φ ( a b ) = φ ( a ) φ ( b ) \varphi(ab) = \varphi(a)\varphi(b) φ ( ab ) = φ ( a ) φ ( b ) 。
RSA 模数特例 :对于合数 n = p q n = pq n = pq (其中 p , q p, q p , q 为互异奇素数):
φ ( n ) = ( p − 1 ) ( q − 1 ) . \varphi(n) = (p - 1)(q - 1). φ ( n ) = ( p − 1 ) ( q − 1 ) .
容斥原理证明 :在集合 { 1 , 2 , … , p q } \{1, 2, \dots, pq\} { 1 , 2 , … , pq } 中,p p p 的倍数有 q q q 个(p , 2 p , … , q p p, 2p, \dots, qp p , 2 p , … , qp ),q q q 的倍数有 p p p 个(q , 2 q , … , p q q, 2q, \dots, pq q , 2 q , … , pq ),公倍数 p q pq pq 被多扣除了一次。因此与 n n n 互素的元素总数为:
φ ( p q ) = p q − q − p + 1 = ( p − 1 ) ( q − 1 ) . \varphi(pq) = pq - q - p + 1 = (p - 1)(q - 1). φ ( pq ) = pq − q − p + 1 = ( p − 1 ) ( q − 1 ) .
4.2 欧拉定理与费马小定理
欧拉定理(Euler's Theorem) :
若整数 a a a 与模数 n n n 互素(即 gcd ( a , n ) = 1 \gcd(a, n) = 1 g cd( a , n ) = 1 ),则:
a φ ( n ) ≡ 1 ( m o d n ) . a^{\varphi(n)} \equiv 1 \pmod n. a φ ( n ) ≡ 1 ( mod n ) .
费马小定理(Fermat's Little Theorem) :
当模数退化为素数 p p p 时,φ ( p ) = p − 1 \varphi(p) = p - 1 φ ( p ) = p − 1 。对任意不能被 p p p 整除的整数 a a a (p ∤ a p \nmid a p ∤ a ):
a p − 1 ≡ 1 ( m o d p ) . a^{p - 1} \equiv 1 \pmod p. a p − 1 ≡ 1 ( mod p ) .
指数同余降幂准则 :
若 gcd ( a , n ) = 1 \gcd(a, n) = 1 g cd( a , n ) = 1 ,在计算 a k m o d n a^k \bmod n a k mod n 时,指数 k k k 可以直接在模 φ ( n ) \varphi(n) φ ( n ) 的意义下进行约简:
a k ≡ a k m o d φ ( n ) ( m o d n ) . a^k \equiv a^{k \bmod \varphi(n)} \pmod n. a k ≡ a k mod φ ( n ) ( mod n ) .
五、模幂快速计算:平方-乘算法(Square-and-Multiply)
在密码学中,加解密涉及计算 x e m o d n x^e \bmod n x e mod n ,其中底数、指数与模数通常长达数千比特。若直接计算 x e x^e x e ,中间数值将导致计算机内存溢出。
平方-乘算法(快速幂) 利用指数 e e e 的二进制表示,将模乘法次数从 O ( e ) O(e) O ( e ) 指数级压缩至 O ( log 2 e ) O(\log_2 e) O ( log 2 e ) 对数级。
设指数 e e e 的二进制展开式为:
e = ( 1 b t − 1 b t − 2 ⋯ b 1 b 0 ) 2 . e = (1 b_{t-1} b_{t-2} \cdots b_1 b_0)_2. e = ( 1 b t − 1 b t − 2 ⋯ b 1 b 0 ) 2 .
5.1 自高位向低位(MSB to LSB)标准执行流程
初始化累加器为 R = x m o d n R = x \bmod n R = x mod n (对应最高有效位 1);
从次高位 b t − 1 b_{t-1} b t − 1 开始向低位依次扫描每一个比特位 b i b_i b i (从 b t − 1 b_{t-1} b t − 1 至 b 0 b_0 b 0 ):
每一步必执行模平方 :R ← ( R ⋅ R ) m o d n R \leftarrow (R \cdot R) \bmod n R ← ( R ⋅ R ) mod n (数学含义:指数值翻倍,对应二进制向左逻辑移位追加 0);
若当前比特 b i = 1 b_i = 1 b i = 1 ,追加一次模乘底数 :R ← ( R ⋅ x ) m o d n R \leftarrow (R \cdot x) \bmod n R ← ( R ⋅ x ) mod n (数学含义:指数值加 1,将二进制末位的 0 置换为 1)。
循环结束,输出最终结果 R R R 。
二进制比特 b i b_i b i 算术操作 指数演变物理含义 任意比特 必执行一次平方 R ← R 2 m o d n R \leftarrow R^2 \bmod n R ← R 2 mod n (指数翻倍)仅当 b i = 1 b_i = 1 b i = 1 追加一次乘基数 R ← R ⋅ x m o d n R \leftarrow R \cdot x \bmod n R ← R ⋅ x mod n (指数自增 1)
def square_and_multiply (x, e, n):
r = 1
x = x % n
for bit in bin (e)[ 2 :]: # 从最高有效位向低位迭代
r = (r * r) % n
if bit == '1' :
r = (r * x) % n
return r
手算实例 :计算 x 13 m o d n x^{13} \bmod n x 13 mod n 。
指数 13 = ( 1101 ) 2 13 = (1101)_2 13 = ( 1101 ) 2 :
扫描到最高位 1:初始 R = x R = x R = x ;
扫描到第 2 位 1:平方得 x 2 x^2 x 2 ,乘基数得 x 3 x^3 x 3 ;
扫描到第 3 位 0:平方得 x 6 x^6 x 6 (该步不乘基数,但平方不可省);
扫描到第 4 位 1:平方得 x 12 x^{12} x 12 ,乘基数得 x 13 x^{13} x 13 。
全过程仅需 3 次平方与 2 次乘法。每一步均立即取模,数值始终不超过 n 2 n^2 n 2 。
六、RSA 算法全生命周期流程与双模数规范
6.1 算法流程五步法
flowchart TD
S1["1. 选取两个独立大素数 p, q (保密)"] --> S2["2. 计算模数 n = p * q (公开)"]
S2 --> S3["3. 计算欧拉函数 φ(n) = (p-1)*(q-1) (保密)"]
S3 --> S4["4. 选取公钥指数 e,满足 gcd(e, φ(n)) = 1 (公开)"]
S4 --> S5["5. 用 EEA 求解私钥指数 d ≡ e^(-1) (mod φ(n)) (严格保密)"]
密钥生成 :
选取两个独立的大素数 p , q p, q p , q ;
计算公开模数 n = p q n = pq n = pq ;
计算保密的欧拉函数值 φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n) = (p - 1)(q - 1) φ ( n ) = ( p − 1 ) ( q − 1 ) ;
选取公开加密指数 e e e ,满足 1 < e < φ ( n ) 1 < e < \varphi(n) 1 < e < φ ( n ) 且满足互素条件:gcd ( e , φ ( n ) ) = 1 \gcd(e, \varphi(n)) = 1 g cd( e , φ ( n )) = 1 (工程中通常选用费马素数 e = 65537 = 2 16 + 1 e = 65537 = 2^{16} + 1 e = 65537 = 2 16 + 1 ,因其二进制仅有两位为 1,能极快加速平方-乘算法);
计算私钥解密指数 d d d ,满足:
d ≡ e − 1 ( m o d φ ( n ) ) , 1 < d < φ ( n ) ; d \equiv e^{-1} \pmod{\varphi(n)},\qquad 1 < d < \varphi(n); d ≡ e − 1 ( mod φ ( n )) , 1 < d < φ ( n ) ;
公钥元组发布为 ( n , e ) (n, e) ( n , e ) ,私钥元组严格保密为 ( d ) (d) ( d ) 。
加密过程 :
将明文编码为整数 x ∈ { 0 , 1 , … , n − 1 } x \in \{0, 1, \dots, n-1\} x ∈ { 0 , 1 , … , n − 1 } ,计算密文:
y = x e m o d n . y = x^e \bmod n. y = x e mod n .
解密过程 :
接收密文 y ∈ { 0 , 1 , … , n − 1 } y \in \{0, 1, \dots, n-1\} y ∈ { 0 , 1 , … , n − 1 } ,恢复明文:
x = y d m o d n . x = y^d \bmod n. x = y d mod n .
[!IMPORTANT]
双模数严格区分规范(考试极高频失分点) :
在指数层面(密钥生成、求模逆 d d d 、指数约简降幂) :必须使用保密的欧拉函数值 φ ( n ) \varphi(n) φ ( n ) 作为模数;
在数据层面(明文、密文、实际加解密多项式求模) :必须使用公开的模数 n n n 作为模数。
混淆两者将导致计算推导彻底失真。
6.2 完整教学算例推导
参数设定 :选取素数 p = 5 , q = 11 p = 5, q = 11 p = 5 , q = 11 。
计算模数:n = 5 × 11 = 55 n = 5 \times 11 = 55 n = 5 × 11 = 55 ;
计算欧拉函数:φ ( n ) = ( 5 − 1 ) ( 11 − 1 ) = 4 × 10 = 40 \varphi(n) = (5 - 1)(11 - 1) = 4 \times 10 = 40 φ ( n ) = ( 5 − 1 ) ( 11 − 1 ) = 4 × 10 = 40 ;
选取公钥指数:选 e = 3 e = 3 e = 3 ,核查 gcd ( 3 , 40 ) = 1 \gcd(3, 40) = 1 g cd( 3 , 40 ) = 1 合法;
计算私钥 d d d :由 3 d ≡ 1 ( m o d 40 ) 3d \equiv 1 \pmod{40} 3 d ≡ 1 ( mod 40 ) ,因 3 × 27 = 81 = 2 × 40 + 1 3 \times 27 = 81 = 2 \times 40 + 1 3 × 27 = 81 = 2 × 40 + 1 ,解得 d = 27 d = 27 d = 27 ;
加密明文 x = 9 x = 9 x = 9 :
y = 9 3 m o d 55 = 729 m o d 55 = 14 ; y = 9^3 \bmod 55 = 729 \bmod 55 = 14; y = 9 3 mod 55 = 729 mod 55 = 14 ;
解密密文 y = 14 y = 14 y = 14 :
x ′ = 14 27 m o d 55. x' = 14^{27} \bmod 55. x ′ = 1 4 27 mod 55.
利用平方-乘展开算得 14 27 ≡ 9 ( m o d 55 ) 14^{27} \equiv 9 \pmod{55} 1 4 27 ≡ 9 ( mod 55 ) ,精确还原明文 x = 9 x = 9 x = 9 。
七、RSA 算法全域正确性证明:基于中国剩余定理(CRT)
目标 :证明对任意整数 x ∈ Z n x \in \mathbb{Z}_n x ∈ Z n ,恒有 x e d ≡ x ( m o d n ) x^{ed} \equiv x \pmod n x e d ≡ x ( mod n ) 。
根据私钥构造,e ⋅ d ≡ 1 ( m o d φ ( n ) ) e \cdot d \equiv 1 \pmod{\varphi(n)} e ⋅ d ≡ 1 ( mod φ ( n )) ,即存在非负整数 k k k 使得:
e d = 1 + k ⋅ φ ( n ) = 1 + k ( p − 1 ) ( q − 1 ) . ed = 1 + k \cdot \varphi(n) = 1 + k(p - 1)(q - 1). e d = 1 + k ⋅ φ ( n ) = 1 + k ( p − 1 ) ( q − 1 ) .
若明文 x x x 与模数互素(gcd ( x , n ) = 1 \gcd(x, n) = 1 g cd( x , n ) = 1 ),根据欧拉定理,x φ ( n ) ≡ 1 ( m o d n ) x^{\varphi(n)} \equiv 1 \pmod n x φ ( n ) ≡ 1 ( mod n ) ,直接得出:
x e d = x 1 + k φ ( n ) = x ⋅ ( x φ ( n ) ) k ≡ x ⋅ 1 k ≡ x ( m o d n ) . x^{ed} = x^{1 + k\varphi(n)} = x \cdot (x^{\varphi(n)})^k \equiv x \cdot 1^k \equiv x \pmod n. x e d = x 1 + k φ ( n ) = x ⋅ ( x φ ( n ) ) k ≡ x ⋅ 1 k ≡ x ( mod n ) .
然而,在合法消息空间 Z n \mathbb{Z}_n Z n 中,存在少数与 n n n 不互素的元素(即 x x x 为 p p p 或 q q q 的倍数)。为给出无漏洞的完备证明,需引入中国剩余定理(CRT) 在模 p p p 与模 q q q 下分别讨论:
考查模 p p p :
情况 A :若 x ≡ 0 ( m o d p ) x \equiv 0 \pmod p x ≡ 0 ( mod p ) (即 p ∣ x p \mid x p ∣ x ),显然 x e d ≡ 0 e d ≡ 0 ≡ x ( m o d p ) x^{ed} \equiv 0^{ed} \equiv 0 \equiv x \pmod p x e d ≡ 0 e d ≡ 0 ≡ x ( mod p ) ;
情况 B :若 x ≢ 0 ( m o d p ) x \not\equiv 0 \pmod p x ≡ 0 ( mod p ) (即 p ∤ x p \nmid x p ∤ x ),由费马小定理得 x p − 1 ≡ 1 ( m o d p ) x^{p-1} \equiv 1 \pmod p x p − 1 ≡ 1 ( mod p ) 。代入得:
x e d = x ⋅ ( x p − 1 ) k ( q − 1 ) ≡ x ⋅ ( 1 ) k ( q − 1 ) ≡ x ( m o d p ) . x^{ed} = x \cdot \big(x^{p-1}\big)^{k(q-1)} \equiv x \cdot (1)^{k(q-1)} \equiv x \pmod p. x e d = x ⋅ ( x p − 1 ) k ( q − 1 ) ≡ x ⋅ ( 1 ) k ( q − 1 ) ≡ x ( mod p ) .
无论何种情形,同余式 x e d ≡ x ( m o d p ) x^{ed} \equiv x \pmod p x e d ≡ x ( mod p ) 恒成立,即 p ∣ ( x e d − x ) p \mid (x^{ed} - x) p ∣ ( x e d − x ) 。
考查模 q q q :
完全同理对称可证:q ∣ ( x e d − x ) q \mid (x^{ed} - x) q ∣ ( x e d − x ) 。
模数合成 :
因为 p p p 与 q q q 为互异素数,二者的最小公倍数为 lcm ( p , q ) = p q = n \operatorname{lcm}(p, q) = pq = n lcm ( p , q ) = pq = n 。根据代数整除性质:若两个互素数同时整除同一个数,则二者的乘积亦必整除该数:
n ∣ ( x e d − x ) ⟺ x e d ≡ x ( m o d n ) . n \mid (x^{ed} - x) \iff x^{ed} \equiv x \pmod n. n ∣ ( x e d − x ) ⟺ x e d ≡ x ( mod n ) .
证毕 。该证明在数学上确证了:对于整个消息集合中的任意整数 x ∈ Z n x \in \mathbb{Z}_n x ∈ Z n ,RSA 解密算法均能精确恢复原文。
八、大整数质因数分解的难解性与小模数试除攻击
从密文 y ≡ x e ( m o d n ) y \equiv x^e \pmod n y ≡ x e ( mod n ) 求解明文 x x x ,本质是求解同余高次多项式的离散模根:
x e − y ≡ 0 ( m o d n ) . x^e - y \equiv 0 \pmod n. x e − y ≡ 0 ( mod n ) .
在实数域中开方可通过数值逼近求解;而在离散模代数中,只要合数模数 n n n 的因数分解未公开,求解合数模下的离散 e e e 次根在计算复杂度上等价于大整数质因数分解 。
小模数攻击范例 :
设截获公钥 n = 2623 , e = 211 n = 2623, e = 211 n = 2623 , e = 211 ,密文 y = 1141 y = 1141 y = 1141 :
攻击者对较小模数 n = 2623 n=2623 n = 2623 进行试除,在 2623 ≈ 51.2 \sqrt{2623} \approx 51.2 2623 ≈ 51.2 范围内搜索素数,快速分解出 2623 = 43 × 61 2623 = 43 \times 61 2623 = 43 × 61 ;
获知因数后,立即恢复出保密的欧拉函数值:φ ( n ) = ( 43 − 1 ) ( 61 − 1 ) = 42 × 60 = 2520 \varphi(n) = (43 - 1)(61 - 1) = 42 \times 60 = 2520 φ ( n ) = ( 43 − 1 ) ( 61 − 1 ) = 42 × 60 = 2520 ;
利用扩展欧几里得算法求解模逆:d ≡ 211 − 1 ( m o d 2520 ) ⟹ d = 1051 d \equiv 211^{-1} \pmod{2520} \implies d = 1051 d ≡ 21 1 − 1 ( mod 2520 ) ⟹ d = 1051 ;
计算快速模幂:x = 1141 1051 m o d 2623 = 1055 x = 1141^{1051} \bmod 2623 = 1055 x = 114 1 1051 mod 2623 = 1055 ,非法解密成功。
在工程实践中,为保证抗攻击强度,p p p 与 q q q 必须为长度至少为 1024 比特(模数 n n n 至少 2048 至 4096 比特)的强伪随机素数,使得目前最顶尖的数域筛法(GNFS)在计算上完全不可行。
九、教科书 RSA 的固有缺陷与工程填充方案(RSA-OAEP)
未经填充的纯数学 RSA(Textbook RSA)在工程落地中被严格禁止直接使用,其主要存在两大结构缺陷:
确定性加密缺陷 :
相同公钥对相同明文的加密输出绝对唯一。若候选明文空间极小(例如消息仅为“买入”或“卖出”),攻击者可预先通过公钥加密所有候选明文,建立彩虹字典直接匹配密文,机密性荡然无存。
可延展性与乘法同态(Multiplicative Homomorphism) :
E ( x 1 ) ⋅ E ( x 2 ) = ( x 1 e m o d n ) ( x 2 e m o d n ) ≡ ( x 1 x 2 ) e ≡ E ( x 1 x 2 ) ( m o d n ) . E(x_1) \cdot E(x_2) = (x_1^e \bmod n)(x_2^e \bmod n) \equiv (x_1 x_2)^e \equiv E(x_1 x_2) \pmod n. E ( x 1 ) ⋅ E ( x 2 ) = ( x 1 e mod n ) ( x 2 e mod n ) ≡ ( x 1 x 2 ) e ≡ E ( x 1 x 2 ) ( mod n ) .
攻击者即使无法解密密文,也能通过篡改密文注入特定乘法因子,导致接收方解密出被操控的业务数据。
工程解决方案 :
现代安全协议(如 TLS)必须采用最优非对称加密填充(RSA-OAEP, Optimal Asymmetric Encryption Padding) :
在明文数据前填充不可预测的真随机盐(Random Salt),并通过两个密码学散列函数构造成双 Feistel 结构;
保证同一份明文在每次加密时生成的密文均完全不同(概率性加密),彻底破坏乘法同态结构,提供抵抗自适应选择密文攻击(IND-CCA2)的安全保证。