RSA Attacks
crypto rsa
RSA parametre hataları (küçük d, ortak p/q, padding yok, stereotip plaintext) pratikte ciphertext’i açar. Önce n,e,c profili; sonra uygun saldırıyı seç.
Metodoloji
Section titled “Metodoloji”-
n,e,c (ve varsa p,q,dp,dq) çıkar; bit uzunluklarını ölç.
-
factordb / Fermat / Pollard ile n’yi faktörlemeyi dene.
-
Wiener / boneh-durfee (küçük d), common modulus, related message uygula.
-
PKCS#1 v1.5 oracle veya stereotip Coppersmith ile bitir.
Profil
Section titled “Profil”openssl rsa -pubin -in pub.pem -text -nooutfrom Crypto.PublicKey import RSAk=RSA.import_key(open('pub.pem').read()); print(k.n.bit_length(), k.e)from Crypto.Util.number import *n,e,c = ...print(n.bit_length(), e)Faktörleme
Section titled “Faktörleme”curl "http://factordb.com/api?query=$N"# Fermat (p≈q)import gmpy2a=gmpy2.isqrt(n)+1while not gmpy2.is_square(a*a-n): a+=1b=gmpy2.isqrt(a*a-n); p,q=a-b,a+byafu 'factor(N)'msieve -v NKlasik ataklar
Section titled “Klasik ataklar”# small e + short message: e-th rootfrom Crypto.Util.number import long_to_bytesimport gmpy2m=gmpy2.iroot(c,e)[0]; print(long_to_bytes(m))# Wiener (küçük d)# RsaCtfTool / owienerRsaCtfTool.py -n N -e E --uncipher CRsaCtfTool.py -n N -e E --attack wiener# common modulus: aynı m, farklı e1,e2, gcd(e1,e2)=1# m = c1^a * c2^b mod n# CRT fault: bad signature → p# p = gcd(s^e - h, n)Decrypt
Section titled “Decrypt”from Crypto.Util.number import inverse, long_to_bytesphi=(p-1)*(q-1); d=inverse(e,phi); print(long_to_bytes(pow(c,d,n)))rsatool.py -n N -p P -q Q -e EChecklist
Section titled “Checklist”[ ] n/e/c bit uzunlukları alındı[ ] factordb/Fermat denendi[ ] Wiener/common modulus/related msg denendi[ ] plaintext elde edildi