557 words
3 minutes
RSA初探
2025-10-06

加密过程#

甲向乙发送信息“中”。首先,汉字“中”通过 UTF-8 编码为 [e4 b8 ad],转换为 10 进制为 [228, 184, 173]

使用乙的公钥 (n,e)=(4757,101)(n, e) = (4757, 101) 进行加密。由于被加密的数字必须小于 nn,我们将“中”字拆分为三个字节 [228, 184, 173],分别加密。

假设 aa 为明文, bb 为密文,加密公式如下:

ae(modn)=ba^e \pmod{n} = b

[228, 184, 173] 的加密计算如下:

228101(mod4757)=4296184101(mod4757)=2458173101(mod4757)=3263228^{101} \pmod{4757} = 4296 \\ 184^{101} \pmod{4757} = 2458 \\ 173^{101} \pmod{4757} = 3263

加密后的密文为 [4296, 2458, 3263]。没有私钥,无法从中解密出原始字节。

解密过程#

乙收到密文 [4296, 2458, 3263],并用自己的私钥 (n,d)=(4757,1601)(n, d) = (4757, 1601) 进行解密。

解密公式如下:

bd(modn)=ab^d \pmod{n} = a

解密计算如下:

42961601(mod4757)=22824581601(mod4757)=18432631601(mod4757)=1734296^{1601} \pmod{4757} = 228 \\ 2458^{1601} \pmod{4757} = 184 \\ 3263^{1601} \pmod{4757} = 173

解密后得到 [228, 184, 173],再按 UTF-8 解码为汉字“中”,解密完成。

密钥对的生成过程#

1. 选择两个质数 PPQQ#

PPQQ 越大,安全性越高。 例如 P=67P = 67Q=71Q = 71。 计算 n=P×Q=4757n = P \times Q = 4757nn 的二进制表示为 1001010010101,共 13 位。实际应用中常使用 1024 位或 2048 位。

2. 计算 nn 的欧拉函数 ϕ(n)\phi(n)#

ϕ(n)\phi(n) 表示小于 nn 且与 nn 互质的正整数的个数。对于 n=P×Qn = P \times QP,QP, Q 为质数),有:

ϕ(n)=(P1)(Q1)\phi(n) = (P - 1)(Q - 1)

本例中 ϕ(n)=(671)(711)=66×70=4620\phi(n) = (67 - 1)(71 - 1) = 66 \times 70 = 4620。记 m=ϕ(n)=4620m = \phi(n) = 4620

3. 随机选择整数 ee#

条件是 1<e<m1 < e < m,且 eemm 互质(即 gcd(e,m)=1\gcd(e, m) = 1)。 随机选择 e=101e = 101。(注意 em1=4619e \ne m - 1 = 4619)。

4. 找到整数 dd#

dd 必须满足 (e×d)(modm)=1(e \times d) \pmod{m} = 1。 这等价于求解二元一次方程:

e×xm×y=1e \times x - m \times y = 1

代入 e=101,m=4620e=101, m=4620

101x4620y=1101x - 4620y = 1

使用扩展欧几里得算法求解,得到 (x,y)=(1601,35)(x, y) = (1601, 35)。 因此 d=1601d = 1601

至此,密钥对生成完毕。不同的 ee 会生成不同的 dd,从而生成不同的密钥对。

核心#

RSA 的核心基于以下数学原理:

aeda(modϕ(n))a^{ed} \equiv a \pmod{\phi(n)}

同时,在密钥选择中需要满足出现以下情况:

e21(modϕ(n))e^2 \equiv 1 \pmod{\phi(n)}
RSA初探
https://blog.282994.xyz/posts/rsa初探/
Author
Rock
Published at
2025-10-06
License
CC BY-NC-SA 4.0