Int 1: RSA Attacks - Ketika Implementasi Salah
Target: Mengeksploitasi kelemahan implementasi RSA: small exponent attack, common modulus attack
Tools:python3
Praktikum
cd ~ && mkdir crypto-int1 && cd crypto-int1
python3 << 'PYEOF'
import math
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Util.number import bytes_to_long, long_to_bytes
# ATTACK 1: Small exponent (e=3) - Coppersmith's broadcast attack
print("=== Attack 1: Small Exponent (e=3) ==*")
# Jika e=3 dan pesan pendek, M^3 < N, maka ciphertext = plain^3 (no mod!)
message = b"Hi" # pesan sangat pendek
m_int = bytes_to_long(message)
print(f"Pesan: {message.decode()} = {m_int}")
# e=3 enkripsi tanpa modulus
c = m_int ** 3
recovered = round(c ** (1/3))
print(f"c = m^3 = {c}")
print(f"Crack: m = c^(1/3) = {recovered}")
print(f"Pesan: {long_to_bytes(recovered).decode()}")
print()
# ATTACK 2: Common modulus (n sama, e berbeda)
print("=== Attack 2: Common Modulus ==*")
# Dua user dengan n sama tapi e berbeda
n = 323 # small for demo
e1, e2 = 5, 7
# Encrypt same message with both public keys
m = 42
c1 = pow(m, e1, n)
c2 = pow(m, e2, n)
# Extended Euclidean: e1*s1 + e2*s2 = gcd(e1, e2)
def egcd(a, b):
if b == 0: return (1, 0, a)
x1, y1, d = egcd(b, a % b)
return (y1, x1 - (a // b) * y1, d)
s1, s2, d = egcd(e1, e2)
print(f"e1={e1}, e2={e2}, s1={s1}, s2={s2}, gcd={d}")
# m = c1^s1 * c2^s2 mod n
if s1 < 0:
c1_inv = pow(c1, -1, n)
m_recovered = (pow(c1_inv, -s1, n) * pow(c2, s2, n)) % n
else:
m_recovered = (pow(c1, s1, n) * pow(c2, s2, n)) % n
print(f"Pesan asli: {m}")
print(f"Pesan crack: {m_recovered}")
print(f"Match: {'✅' if m == m_recovered else '❌'}")
PYEOF
Temuan
| Attack | Kondisi | Dampak |
|---|---|---|
| Small e (e=3) | Pesan pendek, M^e < N | Plaintext langsung recover |
| Common modulus | n sama, e berbeda | Siapa pun bisa decrypt |
| Wiener attack | d kecil (d < N^0.25) | Private key ter-expose |
Refleksi: RSA aman jika diimplementasi dengan benar. Tapi satu kesalahan - e terlalu kecil, n dipakai ulang, atau padding tidak ada - bisa membuatnya rentan. Implementasi yang salah lebih berbahaya daripada algoritma yang lemah.
Generated by @farishhz Agent Pentest Pipeline - TDCTF Security Academy