Puncte:1

AES-128-CFB repetat IV și KPA

drapel in

Fac inginerie inversă a unui produs și am identificat o problemă critică cu acesta.Lucrarea este gata și dezvoltatorul a fost anunțat, dar pentru curiozitatea mea personală, aș dori să învăț cum să o exploatez, astfel încât să pot face o mică redacție.

Pe scurt, dezvoltatorul folosește o cheie fixă ​​și IV pentru criptarea mai multor mesaje similare folosind AES-128-CFB. Din moment ce cunosc IV pt toate mesaje și știu părți din textul simplu (mesajele au un format standard, JSON), pot recupera textul simplu sau cheie? Sunt nu caut pe cineva care sa faca asta pentru mine, caut doar cum as aborda asta.

Mai jos este o mică replicare a ceea ce se întâmplă și am observat că rezultatul este foarte asemănător, ceea ce mă face să cred că poate fi spart.

baza de import64
de la Crypto.Cipher import AES


cheie = b'\x00'*16
iv = b'\xFF'*16
p1 = b'Bună, lume'
p2 = b'Bună, lume!'

cifr = AES.new(cheie, AES.MODE_CFB, iv=iv)
c1 = cipher.encrypt(p1)
e1 = base64.b64encode(c1)

cifr = AES.new(cheie, AES.MODE_CFB, iv=iv)
c2 = cipher.encrypt(p2)
e2 = base64.b64encode(c2)


print(' '.join('{:02X}'.format(c) pentru c în c1))
print(' '.join('{:02X}'.format(c) pentru c în c2))
print(e1.decode())
print(e2.decode())

$ python3 test.py
77 6D 0C 86 D8 6B C9 9F 72 FD F4 3B
77 6D 0C 86 D8 6B C9 9F 72 FD F4 3B 04
d20MhthryZ9y/fQ7
d20MhthryZ9y/fQ7BA==
Puncte:0
drapel in

În primul rând, după cum ați observat, prima parte este întotdeauna aceeași. Deci, dacă aveți doi text cifrat care sunt identici în primii octeți produși, puteți vedea imediat că acesta este cazul. Asta e prima scurgere.

Ce puteți face este să XOR primul bloc de text cifrat care diferă. Ceea ce primiți înapoi este un XOR al textului simplu al celor două mesaje care au fost criptate. Puteți apoi să XOR oricare dintre biții pe care îi cunoașteți și să obțineți imediat textul simplu al celuilalt mesaj din acele locații. De asemenea, este posibil să folosiți informații cunoscute pentru a ghici, de ex. dacă este engleză, atunci XOR al caracterelor A și B va produce ieșirea 0x03, deoarece numai ultimii doi biți diferă. Rețineți că puteți face acest lucru cu orice pereche de text cifrat pe care îl obțineți. În acest fel, puteți obține rapid informații despre blocurile de text simplu.

Desigur, ar ajuta dacă aveți un oracol de criptare. În acest caz, îl puteți alimenta pur și simplu text simplu ghicit sau text simplu care vă ajută cu trucul XOR.


Acum, la lucrurile pe care nu le poți face.

În primul rând, cifrul bloc AES - sau orice cifr securizat cunoscut - nu vă va permite să obțineți cheia chiar dacă aveți mai multe perechi de text simplu / text cifrat (la cifrul bloc).

În al doilea rând, nu veți putea ghici IV-ul dacă nu este indicat, deoarece este un bloc text simplu pentru cifrul bloc.

În cele din urmă, este imposibil să ajungeți la textul simplu când blocul anterior de text cifrat diferă de toate celelalte.În acest caz, cifrul bloc generează ceea ce este practic octeți aleatori și, prin urmare, nu puteți prelua nicio informație despre blocul de text simplu corespunzător după ce acesta a fost XOR.

introduceți descrierea imaginii aici

Imaginea este Wikimedia Commons, de Gwenda.

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.