Puncte:2

Ajutor cu întrebarea RSA CTF

drapel cn

Încerc să rezolv o problemă CTF legată de criptarea RSA.

Pot rula un binar de provocare care va citi un steag dintr-un fișier, steag se va potrivi cu următorul RegEx:

AB1234C\{[0-9a-f]{32}\}\n

Deci, în total, indicatorul este de 42 de octeți, inclusiv linia nouă

Steagul este apoi umplut cu umplutură aleatoare la un total de 128 de octeți.

Pot alege exponentul public e, atâta timp cât e>1. Binarul va genera un modul aleator de 2048 de biți folosind funcția Python Crypto.PublicKey.RSA.generate(bits=2048)

Binarul va tipări modulul, precum și textul cifrat al steagului căptușit criptat.

Pot rula binarul de mai multe ori, modulul și umplutura vor fi diferite între fiecare rulare.

M-am gândit că ar putea fi legat de atacul lui Hastad, dar asta pare să funcționeze doar pentru umplutura liniară, iar atacul cu pad scurt al lui Coppersmith funcționează doar dacă aveți două mesaje cu umplutură aleatoare, dar criptate cu același modul, ceea ce nu le am aici din cauza faptul că se generează un modul diferit de fiecare dată când rulez binarul.

Sunt încă un începător când vine vorba de cripto, așa că s-ar putea să fi greșit în privința acestor atacuri și s-ar putea să fi omis ceva evident.

Cred că vulnerabilitatea ar putea fi legată de dimensiunea căptușelii, deoarece mesajul căptușit este doar jumătate din lungimea modulului.

Nu vreau neapărat soluția, ci doar un ghiont în direcția corectă. Mulțumiri.

jdkleuver avatar
drapel cn
Această întrebare pare legată de https://crypto.stackexchange.com/questions/80087/short-padding-known-prefix-rsa-attack Dar răspunsul la această întrebare nu pare să ajute, deoarece se bazează pe două texte cifrate create cu același modul.
fgrieu avatar
drapel ng
Fiind un CTF, întrebarea este la limita subiectului și poate primi un răspuns prin indicii. Acestea fiind spuse: fără nicio modalitate declarată de a reutiliza un modul și 22 de octeți de umplutură aleatoare, nu mă pot gândi la o soluție. M-aș uita la codul care face umplutura pentru a vedea dacă funcționează așa cum este anunțat; iar la codul face generarea pentru a vedea dacă folosește $e$ specificat (extrasul de cod din întrebare nu o face).
jdkleuver avatar
drapel cn
Nu pot partaja codul sursă deoarece este un CTF privat, dar pot confirma că atunci când modulul este generat, nu trece valoarea e ca argument, este transmis doar argumentul biți.
Puncte:2
drapel my

Acesta este un CTF și deci am dat doar un indiciu.

Pot alege exponentul public e, atâta timp cât e>1

Putem alege un $e$ care face acest lucru ușor dintr-o singură interogare? Considera:

... la un total de 128 de octeți

Binarul va genera un modul aleator de 2048 de biți

fgrieu avatar
drapel ng
Dar asta nu este RSA! :-) Și dacă `Crypto.PublicKey.RSA.generate` este oarecum trecut folosind $e$ (cum ar trebui), nu ar trebui să lase acest lucru să se întâmple. Cu siguranță merită verificat.
jdkleuver avatar
drapel cn
Poate confirma că `Crypto.PublicKey.RSA.generate` nu este transmis folosind e, așa că bănuiesc că sunteți pe ceva acolo. Singurul argument este „biți”, astfel încât valoarea e generată de Python este ignorată, este folosit doar n.
jdkleuver avatar
drapel cn
Ceea ce ați sugerat cu acest răspuns a fost de fapt soluția intenționată de la autorul CTF.
Puncte:0
drapel cn

Deci, după ce am citit comentariul @fgrieu, m-am uitat din nou la schema de umplutură și mi-am dat seama că este de fapt deterministă, nu întâmplătoare așa cum credeam. Tocmai l-am rezolvat folosind atacul lui Hastad, deci a fost de fapt o slăbiciune a căptușelii. Scuzele mele pentru întrebarea incorect formulată.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.