← Writeuplarga qaytish

RSA Kichik Parametrlar — To'liq Yechim

RSA O'rta Masala: RSA - Kichik e NullCTF Team · 16.05.2026

Masala tahlili


Kichik RSA parametrlari berilgan. Faktorizatsiya qilib deshifrlash kerak.


n = 3233
e = 17
c = 2790

Fikrlash jarayoni


  1. n = 3233 juda kichik → faktorizatsiya mumkin
  2. 3233 = 61 × 53 (tub sonlar)
  3. phi(n) = (61-1)(53-1) = 3120
  4. d = e^-1 mod phi(n) = 17^-1 mod 3120 = 2753
  5. 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