RSA Kichik Parametrlar — To'liq Yechim
Masala tahlili
Kichik RSA parametrlari berilgan. Faktorizatsiya qilib deshifrlash kerak.
n = 3233
e = 17
c = 2790
Fikrlash jarayoni
- n = 3233 juda kichik → faktorizatsiya mumkin
- 3233 = 61 × 53 (tub sonlar)
- phi(n) = (61-1)(53-1) = 3120
- d = e^-1 mod phi(n) = 17^-1 mod 3120 = 2753
- m = c^d mod n = 2790^2753 mod 3233
Bosqichma-bosqich yechim
1-qadam: n ni faktorizatsiya qilish
import math
n = 3233
# sqrt(3233) ≈ 56.8, 2 dan 56 gacha sinash
for p in range(2, int(math.sqrt(n)) + 1):
if n % p == 0:
q = n // p
print(f"p = {p}, q = {q}") # p=53, q=61
break
2-qadam: phi va d hisoblash
from sympy import mod_inverse
p, q = 53, 61
phi = (p - 1) * (q - 1) # 3120
e = 17
d = mod_inverse(e, phi) # 2753
print(f"phi = {phi}, d = {d}")
3-qadam: Deshifrlash
c = 2790
m = pow(c, d, n)
print(f"Plaintext (son): {m}") # 65
print(f"Flag: NULL{{{m}}}")
Python script (to'liq)
#!/usr/bin/env python3
from sympy import mod_inverse
import math
# RSA parametrlari
n = 3233
e = 17
c = 2790
# 1. Faktorizatsiya
for p in range(2, int(math.sqrt(n)) + 1):
if n % p == 0:
q = n // p
break
print(f"n = {p} × {q}")
# 2. phi va d
phi = (p - 1) * (q - 1)
d = mod_inverse(e, phi)
print(f"phi(n) = {phi}")
print(f"d = {d}")
# 3. Decrypt
m = pow(c, d, n)
print(f"Xabar: {m}")
print(f"Flag: NULL{{{m}}}")
Yakuniy flag
NULL{65}
O'rganilganlar
- RSA kalit yaratish algoritmi
- Modular teskari (
mod_inverse) - Kichik n faktorizatsiyasi
pow(base, exp, mod)Python da tez hisoblash