Puncte:1

Este în regulă să evitați un IV text simplu în AES?

drapel ke

Scenariul

Folosind AES 256 cu modul CBC. (Autentificarea se face separat. Ignorat aici.)

Scopul (explicat mai mult mai târziu)

Pentru a evita trimiterea unui IV necriptat.

Dar, deoarece acest lucru se face folosind .NET a cărui funcție ne obligă să folosim un IV, nu putem doar să punem înaintea 16 octeți aleatori și apoi să aruncăm primii 16 octeți după decriptare.

Planul

Adăugați 16 octeți aleatori ("IV1"), și, în plus, utilizați 16 octeți cu valoarea zero ca IV ("IV0"). Apoi trimiteți textul cifrat fără primii 16 octeți.

Decriptarea se va face de către receptor, determinând mai întâi care este primul bloc text cifrat va fi (pentru acea cheie AES, pentru orice mesaj) prin criptarea a ceva în modul menționat mai sus (ceea ce va trebui făcut o singură dată pe cheie) și luând primii 16 octeți ai textului cifrat rezultat.

Apoi predau acești octeți textului cifrat decupat primit pentru a obține textul cifrat original nedecupat și apoi îl decriptează cu un IV ("IV0") de 16 octeți de valoare zero (adică folosesc funcția de decriptare a .NET, alimentându-i cu IV-ul necesar, care sunt acele 16 zerouri).

Apoi renunță la primii 16 octeți ai rezultatului (care sunt primiți de la .NET după ce .NET renunță la primii 16 octeți care sunt IV), deoarece aceștia sunt cei 16 octeți aleatori predați ("IV1").

Dar de ce?

Comunicarea IV-ului în text clar oferă un atacator cu forță brută un avantaj - ei pot decripta doar un bloc (16 octeți) și îl pot compara cu IV-ul pentru a verifica dacă cheia este corectă. (Poate că există mai multe canale de atac posibile de care nu știu.)

Deci întrebarea mea este

Acest plan pare în regulă sau există vreo capcană în el?

Marc Ilunga avatar
drapel tr
Întrebarea așa cum este, pare greu de răspuns corect. Poate că o îmbunătățire ar putea fi adăugarea faptului că cheia nu este aleatorie, ci derivată din ceea ce este un spațiu cu entropie scăzută, așa cum ați menționat în comentariul dvs. la primul răspuns?
Maarten Bodewes avatar
drapel in
De obicei, IV **este** prefix la mesaj.Cu toate acestea, IV-ul nu oferă atacatorului un avantaj mai mare decât orice alt bloc de text cifrat, deoarece acesta acționează ca vector pentru următorul bloc. Acest lucru este transmis de [răspunsul lui Fractalice](https://crypto.stackexchange.com/a/96314/1172). Pentru orice cifră presupunem că atacatorul poate cunoaște (o parte din) textul simplu. Ca atare, ascunderea IV-ului nu face nicio diferență, se presupune că este public.
drapel ke
@MaartenBodewes `De obicei, IV este prefixat mesajului. ` - Cuvântul cheie aici este „de obicei”. Dacă acesta ar fi cazul în CBC și nu s-ar fi făcut mai mult cu IV - punctul meu din întrebare ar fi adevărat. i.e. comunicarea IV-ului în text clar ar oferi atacatorului un avantaj în forțarea brută a cheii. Deoarece IV este XORd cu textul simplu înainte de criptare - nu este cazul. După cum sugerează comentariul lui Fractalice.
Maarten Bodewes avatar
drapel in
Încă înțelegi greșit. IV-ul este trimis **și** este format XOR cu textul simplu înainte de criptare, deci se presupune că este disponibil pentru un adversar. Toate cifrurile moderne ar trebui să ofere protecție chiar și împotriva atacurilor de text clar alese. Aceasta se numește IND-CPA: indistinguire în cazul unui atac de text simplu ales și este oferit de majoritatea, dacă nu de toate, modurile de operare, cu excepția ECB. Nu există *margine* de câștigat dacă cifrul este securizat IND-CPA, iar forțarea brută pentru AES depinde complet de dimensiunea cheii - care pentru AES-256 este cu siguranță o protecție amplă.
drapel ke
@MaartenBodewes Mulțumesc pentru clarificare, totuși, cred că ar trebui să clarific și mai mult ceea ce am crezut la început (ceea ce acum știu că este greșit). Am crezut că un IV funcționează așa (în CBC): a) Adăugați IV-ul textului simplu. b) Criptați fără XOR a primului bloc cu nimic. Dacă acesta ar fi de fapt cazul, nu ar fi nevoie să trimiteți IV-ul, doar pentru a-l face aleatoriu, iar receptorul ar decripta și ar arunca primul bloc. Multumesc din nou.
Maarten Bodewes avatar
drapel in
Nu există o mare diferență în utilizarea normală a IV-ului, singura diferență este că IV-ul real este acum IV-ul *criptat*. De fapt, este folosit uneori pentru a randomiza o valoare a contorului, astfel încât IV-ul să fie imprevizibil pentru un adversar. Cunoașterea IV sau nu nu contează, dar pentru CBC este necesar un IV imprevizibil (pseudo-) aleatoriu. *De preferință* IV-ul ar fi criptat cu o cheie diferită.Rețineți că textul clar ar putea fi toate zerouri și, deoarece atacatorul știe în avans orice bloc criptat (care este public, dar imprevizibil), scurgerea IV-ului nu ar face nicio diferență.
Puncte:4
drapel in

Nu am înțeles pe deplin planul, dar:

În CBC, fiecare bloc de text cifrat joacă rolul de IV pentru următorul bloc. Deci, atacatorul cu forță brută poate ataca următorul bloc, deoarece blocul de text cifrat va fi trimis în clar.

Chiar ți-e teamă că cineva va forța brută o cheie de 256 de biți? Este imposibil.

De asemenea, vă rugăm să luați în considerare utilizarea criptării autentificate pentru a opri atacatorii activi.

drapel ke
`atacatorul bruteforce poate ataca următorul bloc` - testează o cheie și primesc un rezultat. De unde știu ei că este cel corect? AFAIK AES va transforma doar 16 octeți în 16 octeți. Mereu. Niciodată cu un eșec (cu excepția ultimului din cauza căptușelii). gresesc?
drapel ke
`Chiar ți-e teamă că cineva va forța brută o cheie de 256 de biți?` - Nu este o cheie aleatorie. O cheie bazată pe o parolă ușor de reținut pe care o alege un utilizator care nu are grijă de securitate (gândiți-vă la „parola1” etc.).
drapel ke
„Vă rugăm să luați în considerare utilizarea criptării autentificate” - După cum am menționat în întrebarea mea: „Autentificarea se face separat. Ignorat aici.`.
Fractalice avatar
drapel in
Dacă atacatorul nu știe nimic despre text clar, cum ați putea testa primul bloc cu text clar IV? Rețineți că primul bloc de text cifrat decriptat este un mesaj IV xor, astfel încât atacatorul primește doar un mesaj candidat la fiecare ghicire a cheii. Și, după cum ați observat - ultimul bloc a cunoscut adesea text simplu - padding, care permite o astfel de forță brută în cele din urmă.
drapel ke
Mulțumiri. Am fost indus în eroare de tutoriale care spun că IV-ul este pur și simplu adăugat textului simplu. Dacă ar fi așa, grija mea ar fi întemeiată. Așa cum este, IV este XORd cu primul bloc în schimb (în CBC) care rezolvă acea problemă. Multumesc din nou.
Fractalice avatar
drapel in
@ispiro IV este într-adevăr trimis în clar, care este „IV” pentru primul bloc. „IV” pentru al doilea bloc este primul bloc de text cifrat, care este, de asemenea, trimis în clar.CBC este proiectat așa și nu este nicio problemă cu asta. Trebuie doar să fie imprevizibil.

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.