RSA原理
RSA原理
RSA流程
-
随机生成素数 p , q
-
计算 n = p * q \(\phi(n)\) = (p-1)*(q-1)
-
找个e , 满足 1<e<\(\phi(n)\) 且 e 与 \(\phi(n)\)互素
-
e * d \(\equiv\) 1 mod \(\phi(n)\) 得到 d
-
公钥 (e,n) 私钥 (d,n)
-
加密 \(c \ = \ m^e \ mod \ n\ \ \ \ \ \ 1<m<n\)
-
解密 \(m \ = \ c^d \ mod \ n\)
RSA证明
\[m^{e*d}\ mod \ n \\m^{k*\phi(n)+1}\ mod\ n\\m*m^{k*\phi(n)}\ mod \ n\\
\]
-
m,n 互素
根据欧拉定理可得 \(m*m^{k*\phi(n)}\ mod \ n\ =\ m\)
-
m,n 不互素
m = tp 或 m = tq
不妨令 m = tp
gcd(m,q) = 1
由欧拉定理可得
\[(tp)^{q-1}\ \equiv\ 1\ mod \ q \]变换可得
\[(tp)^{k*(q-1)*(p-1)}\ * tp\ \equiv\ tp\ mod\ q \]即
\[(tp)^{e*d}\ \equiv\ tp\ mod\ q \]∴ \((tp)^{e*d}=tp+hq\)
∵ \(tp^{e*d} \equiv\ 0\ mod\ p\) \(gcd(p,q)=1\)
∴ \(h=h^{'}*p\)
∴ \(m^{e*d}=tp + h^{'}*p*q\)
∴ \(m^{e*d}\ \ \equiv\ \ tp\ \ mod\ \ p*q\)
∴ \(m^{e*d}\ \equiv\ m\ \ mod\ \ n\)
∴ \(c^d\ \equiv\ m\ \ mod\ \ n\)
代码
加密
from Crypto.Util.number import *
from gmpy2 import *
cipher = b'flag{xxxxx}'
m = bytes_to_long(cipher)
p = getPrime(1024)
q = getPrime(1024)
n = p*q
phi = (p-1)*(q-1)
e = 0x10001
d = invert(e,phi)
c = powmod(m,e,n)
解密
m = powmod(c,d,n)
cipher = long_to_bytes(m)

RSA原理
浙公网安备 33010602011771号