为了能直观计算,选用极小的质数演示核心逻辑(实际工程中会用 2048/4096 位超大质数,原理完全一致),全程还原密钥生成、公钥加密、私钥解密三步核心流程,所有计算均为手算可验证,贴合 RSA 算法标准逻辑。
核心前提
RSA 算法基于大质数分解的单向性,核心要素:
- 两个互质的大质数
p、q - 模数
N = p × q(公钥 / 私钥共用) - 欧拉函数
φ(N) = (p-1) × (q-1) - 公钥指数
e:满足1 < e < φ(N)且e与φ(N)互质(常用65537,演示用小值) - 私钥指数
d:满足(e × d) mod φ(N) = 1(d是e在模φ(N)下的逆元) - 加密公式:
密文C = (明文M)^e mod N - 解密公式:
明文M = (密文C)^d mod N
一、确定基础参数(极小质数,仅作演示)
为了手算方便,选最小的两个大质数(实际为小质数):p = 7,q = 11(均为质数,且互质)
二、步骤 1:生成核心基础值(N、φ(N))
- 计算模数
N:RSA 的加解密模,公钥 / 私钥均包含此值N = p × q = 7 × 11 = 77 - 计算欧拉函数
φ(N):RSA 密钥生成的核心中间值(欧拉函数φ(ab)=φ(a)×φ(b),质数的欧拉函数φ(x)=x-1)φ(N) = (7-1) × (11-1) = 6 × 10 = 60
三、步骤 2:生成公钥(e, N)
公钥要求:1 < e < 60,且e与φ(N)=60互质(最大公约数为 1)
选值与验证
选最常用的小值e = 13(也可选 3、7、17,只要满足互质即可)验证互质性:gcd(13,60) = 1(13 是质数,不整除 60,满足要求)
最终公钥
公钥PU = (e, N) = (13, 77)(可公开,任何人都能获取)
四、步骤 3:生成私钥(d, N)
私钥核心是求e在模φ(N)下的乘法逆元 d,要求:(e × d) mod φ(N) = 1 → (13 × d) mod 60 = 1
求解 d(手算试值法,工程中用扩展欧几里得算法)
即找整数d,使13d - 60k = 1(k 为任意整数),试值:
d=37时:13×37 = 481→481 ÷ 60 = 8……1→481 mod 60 = 1完全满足条件,因此d = 37
最终私钥
私钥PR = (d, N) = (37, 77)(严格保密,仅持有者保存)
五、步骤 4:公钥加密(任何人都能做,用公开的 PU)
前提:明文 M 的要求
RSA 加密的明文M必须满足 **0 < M < N**(本例中0 < M < 77),若明文大于 N,需分段加密(工程中必做,演示用单数字)。
选明文并加密
选明文M = 6(任意满足 0<M<77 的数均可,如 10、25)代入加密公式:C = M^e mod NC = 6^13 mod 77
简化计算(避免直接算 6^13,用模运算性质分步算)
模运算核心性质:(a×b) mod n = [(a mod n)×(b mod n)] mod n
6^2 = 36→36 mod77=366^4 = (6^2)^2 = 36^2=1296→1296 mod77:77×16=1232,1296-1232=646^8 = (6^4)^2 = 64^2=4096→4096 mod77:77×53=4081,4096-4081=156^13 = 6^8 × 6^4 × 6^1 = 15×64×6- 分步取模:
15×64=960 → 960 mod77=960-77×12=960-924=36;36×6=216 → 216 mod77=216-77×2=62最终密文 C = 62(加密后的数据,可公开传输)
六、步骤 5:私钥解密(仅持有者能做,用保密的 PR)
将密文C=62代入解密公式:M = C^d mod NM = 62^37 mod 77
关键简化:先对密文取模(降低计算量)
因62 < 77,故62 mod77=62;且负数模运算:62 = 77 - 15 → 62 ≡ -15 mod77利用模运算性质:(a^b) mod n = [(-a)^b] mod n(b 为奇数时),因此:62^37 mod77 = (-15)^37 mod77 = - (15^37 mod77)
继续简化:求 15^37 mod77(用费马小定理+ 分步取模)
费马小定理:若 a 与 n 互质,a^(k) mod n = a^(k mod φ(n)) mod n15 与 77 互质(gcd (15,77)=1),故15^37 mod77 = 15^(37 mod 60) mod77 = 15^37 mod77,分步拆解 37:37=32+4+1
15^2=225 mod77=225-2×77=71 ≡ -6 mod7715^4=(15^2)^2=(-6)^2=36 mod77=3615^8=(15^4)^2=36^2=1296 mod77=64(同加密步骤)15^16=(15^8)^2=64^2=4096 mod77=15(同加密步骤)15^32=(15^16)^2=15^2=71 ≡ -6 mod7715^37=15^32 ×15^4 ×15^1 = (-6)×36×15 = -324015^37 mod77:计算 3240÷77=42×77=3234 → 3240 mod77=6 →-3240 mod77= -6 mod77=71
最终解密
62^37 mod77 = -71 mod77 = 77-71 = 6解密后得到明文 M=6,与原始明文完全一致,加解密成功!
七、演示总结(核心参数 & 结果)
| 核心参数 | 数值 | 说明 |
|---|---|---|
| 质数 p/q | 7/11 | 演示用小质数,实际为 2048 位超大质数 |
| 模数 N | 77 | 公钥 / 私钥共用,实际为千位以上大数 |
| 欧拉函数 φ(N) | 60 | 密钥生成中间值,不对外公开 |
| 公钥 (e,N) | (13,77) | 可公开,用于加密 / 验签 |
| 私钥 (d,N) | (37,77) | 严格保密,用于解密 / 签名 |
| 原始明文 M | 6 | 需满足 0<M<N,否则分段加密 |
| 公钥加密密文 C | 62 | 传输过程中仅暴露此值 |
| 私钥解密明文 M | 6 | 还原原始数据,验证成功 |
八、工程实际与演示的区别
- 质数规模:演示用 2 位小质数,实际 RSA 用2048/4096 位超大质数(如 p、q 各 1024 位),N 为 2048/4096 位,大质数分解耗时超宇宙年龄,保证安全性;
- e 的取值:工程中固定用
e=65537(10000000000000001B),兼顾安全性和运算速度,避免小 e(如 3、7)的安全漏洞; - 求解 d 的方法:演示用试值法,实际用扩展欧几里得算法(计算机快速求解逆元),支持超大数计算;
- 明文处理:演示用单数字,实际需将明文分段(每段长度<N 的位数),并添加填充规则(如 PKCS#1 v1.5),避免明文攻击;
- 运算方式:嵌入式 / HVAC 中用 MCU硬件加密加速或轻量开源库(mbedTLS),避免纯软件计算超大数的性能损耗。
九、延伸:私钥签名 + 公钥验签(演示逻辑)
非对称加密的另一核心用法,用私钥加密(签名)、公钥解密(验签),验证身份和数据完整性,演示如下:
- 明文 M=6,用私钥 (d=37,N=77) 签名:
C=6^37 mod77=62(同解密步骤的逆运算); - 任何人用公钥 (e=13,N=77) 验签:
M=62^13 mod77=6; - 验签结果与原始明文一致,证明数据是私钥持有者发送,且未被篡改(若数据被改,密文会变,验签结果≠原始明文)。
1万+

被折叠的 条评论
为什么被折叠?



