G
N
I
D
A
O
L

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)
posted @ 2021-12-27 22:24  buersec  阅读(97)  评论(0)    收藏  举报