RSA 算法正确性的证明

RAS 的文章网上很多,但是相关的证明和理解比较少,所以就来写一写

RAS

RAS 是基于「大整数分解这一数学困难问题」的公钥密码体制

须知定理

秘钥的产生

加密解密

密文为 c,明文为 m c = m^e (mod n),m = c^d (mod n)

算法解密的正确性证明

已知 c = m^e (mod n), 则 m = c^d (mod n) = m^ed (mod n) = m^1(modφ(n)) = m^kφ(n)+1 (mod n), 因此只需证明 m = m^kφ(n)+1 (mod n) 分为两种情况:

① m 与 n 互素

由欧拉定理得 m^φ(n) = 1(mod n),则 m^kφ(n) = 1(mod n),则 m^kφ(n)+1 = m(mod n)

② m 与 n 不互素

因为 m < n(原因见下面),p 和 q 又都是素数,意味着 m 要么是 p 的倍数,要么是 q 的倍数,不能同时是 p 和 q 的倍数(如果同时是 p 和 q 的倍数,那 m > n),不妨设 m 是 p 的倍数,则 m = cp,其中 c 为正整数, 那么 gcd(m, q) = 1,有欧拉定理得:

m^φ(q) = 1(mod q)

那么

m^kφ(q) = 1(mod q)

(m^kφ(q))^φ(p) = 1^φ(p)(mod q)

(m^kφ(q))^φ(p) = 1(mod q)

m^kφ(n) = 1(mod q)

所以,会存在一个整数 r,使得 m^kφ(n) = 1 + rq,两边同同时乘以 m = cp 得:

m^kφ(n)+1 = m + rcpq = m + rcn

即 m^kφ(n)+1 = m(mod n)

综上所述,无论 m 和 n 是否互素,RSA 都能对消息正确地进行解密

注意点