De ce nu ar trebui să ' t să folosesc criptarea BCE?
On februarie 18, 2021 by adminFolosesc Java pentru a genera șiruri criptate și primesc acest avertisment în momentul compilării:
Modul de criptare ECB nu trebuie utilizat
Deci, mă întreb de ce nu ar trebui să folosesc BCE și ce pot folosi în schimb ?
Comentarii
- Comentariile nu sunt pentru discuții extinse; această conversație a fost mutată în chat .
- Lucrați la zoom?;)
Răspundeți
De ce nu ar trebui să folosesc criptarea BCE?
Principalul motiv pentru care nu folosesc criptarea modul BCE este că nu este securizat semantic — adică, doar observarea textului cifrat criptat de BCE poate scurge informații despre textul clar (chiar și dincolo de lungimea acestuia, care toate schemele de criptare care acceptă texte simple în mod arbitrar lungi se vor scurge într-o oarecare măsură).
Specific În mod normal, problema cu modul ECB este că criptarea aceluiași bloc (de 8 sau 16 octeți, sau oricât de mare este dimensiunea blocului cifrului subiacent) al textului simplu folosind modul ECB produce întotdeauna același bloc de text cifrat. Acest lucru poate permite unui atacator să:
- detecteze dacă două mesaje criptate de BCE sunt identice;
- să detecteze dacă două mesaje criptate de la BCE partajează un prefix comun;
- detectează dacă două mesaje criptate BCE partajează alte subșiruri comune, atâta timp cât aceste șiruri sunt aliniate la limitele blocului; sau
- detectează dacă (și unde) un singur mesaj criptat de BCE conține date repetitive (cum ar fi rulări lungi de spații sau octeți nuli, câmpuri de antet repetate sau expresii repetate în mod coincident în text).
Există „o frumoasă demonstrație grafică a acestei slăbiciuni pe Wikipedia, unde aceeași imagine (brută, necomprimată) este criptată utilizând atât modul ECB, cât și un mod de cifrare securizat semantic (cum ar fi CBC, CTR, CFB sau OFB):
Deși acest scenariu este oarecum artificial (de obicei nu s-ar cripta imagini brute ca acesta), demonstrează frumos problema cu modul BCE: zonele repetitive din imaginea de intrare au ca rezultat modele repetitive în ieșirea criptată, astfel încât multe caracteristici la scară largă ale imaginii rămân recunoscute în ciuda criptării. În lumea reală, un criptanalist care atacă un BCE criptare bazată pe schema ar fi mai probabil să caute astfel de modele într-o descărcare hexagonală a textului cifrat, dar principiul este același.
Un caz real al acestei slăbiciuni a criptării BCE care contribuie la un compromis al datelor din lumea reală este oferit de scurgerea bazei de date a parolei Adobe din 2013, așa cum este descris în acest răspuns . Aici, un element care a contribuit la severitatea scurgerii a fost acela că, în loc de să le bage corect , Adobe a criptat parolele folosind modul BCE. Acest lucru le-a permis atacatorilor să localizeze rapid parolele partajate de mai multe conturi sau să partajeze un prefix comun cu alte parole (cum ar fi parola1 și parola2 ) și a dezvăluit, de asemenea, lungimea aproximativă a fiecăruia parola.
Modul de criptare BCE prezintă și alte puncte slabe, cum ar fi faptul că este „foarte maleabil : ca fiecare blocul de text simplu este criptat separat, un atacator poate genera cu ușurință noi cifre de text valide prin strângerea blocurilor din textele de cifrare observate anterior.
Cu toate acestea, maleabilitatea este doar o problemă dacă criptarea ECB este utilizată fără „47c432f778”>
cod de autentificare a mesajelor și, în această situație, este partajat (într-o anumită măsură) de toate celelalte moduri de criptare neautentificate , la fel ca CBC, CTR, CFB și OFB menționate mai sus. Astfel, nu poate fi considerat cu adevărat o slăbiciune specifică a modului BCE, chiar dacă tinde să fie o problemă suplimentară atunci când se folosește vreodată modul BCE.
Ce ar trebui să folosesc în schimb?
Ar trebui să utilizați orice criptare autentificată mod, cum ar fi GCM , EAX sau OCB .
Personal, pentru mesajele scurte, „îmi place mai degrabă modul SIV ( RFC 5279 ), care oferă un strat suplimentar de rezistență la abuz. (Multe alte moduri de criptare se vor rupe destul de rău dacă același IV / nonce este folosit accidental pentru a cripta mai multe mesaje. Modul SIV își păstrează toate proprietățile de securitate în această situație, cu excepția scurgerii dacă mesajele criptate sunt identice.)
De asemenea, puteți utiliza orice mod de criptare sigur din punct de vedere semantic (cum ar fi CBC sau CTR ), combinat cu un cod de autentificare a mesajului (cum ar fi HMAC ) utilizând criptarea -then-MAC construcție. (Adică, mai întâi ar trebui să criptați mesajul, apoi să calculați un MAC al textului cifrat și să îl atașați la textul cifrat.) Atâta timp cât vă asigurați că verificați MAC înainte de a încerca să decriptați mesajul, această construcție vă va proteja de diversele vulnerabilități ale acestor moduri la atacuri active (selected-ciphertext).
Pentru criptare disc sau aplicații similare care necesită abilitatea de a modifica părți din textul cifrat fără a recripta toate datele, ar trebui să utilizați un mod de cifrare conceput în acest scop, cum ar fi XTS . Rețineți că astfel de moduri nu au în general rezistență la atacurile active și pot avea alte puncte slabe care ar trebui înțelese înainte de a le utiliza. Dacă este posibil, acestea ar trebui combinate cu o formă de protecție a integrității, cum ar fi un MAC pe un arbore hash .
Comentarii
- Ce ați sugera în cazurile în care cineva dorește să poată citi / scrie blocuri dintr-un magazin de date în ordine arbitrară, de preferință în timp ce faceți o hartă de blocuri pentru toate pentru toate cele blocate? Înclinarea mea ar fi să criptez prin blocarea datelor blocului cu un hash foarte simplu al numărului blocului, desfacerea / repetarea operației xor dacă dă un bloc all-one, folosind BCE pe rezultat și xoringul cu complementul rezultatului de criptare a unui bloc all-one [acel complement trebuie calculat o singură dată pentru fiecare cheie]. Ar părea o abordare bună?
- @supercat: ‘ este practic criptarea discului , astfel încât să puteți utiliza moduri concepute pentru asta. Cred că XTS este considerată o alegere bună, deși, la fel ca toate modurile de criptare a discului, are limitările sale (pe care ar trebui să le înțelegeți înainte de ao utiliza). Dacă este posibil, ar trebui combinat cu un fel de MAC pentru a se apăra împotriva atacurilor active.
- @IlmariKaronen: cred că spunând ” nu ‘ t use ECB ” este un pic excesiv. Înțeleg riscurile, dar de multe ori (cu excepția cazului în care documentul dvs. – ceea ce criptați – nu este ‘ foarte secret, iar adversarul nu ‘ nu aveți prea multe capabilități etc.), ar trebui să fiți ok.
- @giorgim: Nu există ‘ într-adevăr un motiv bun să utilizați BCE (cu excepția ca element de construcție pentru alte moduri). Aproape orice bibliotecă criptografică oferă cel puțin modul CBC sau CTR și, dacă nu, acestea sunt ‘ banale pentru a vă implementa. Puneți un HMAC (sau CMAC) pe deasupra și ‘ e bine să mergeți.
- @giorgim: Chiar dacă nu aveți ‘ nu au niciun mod MAC sau AE disponibil, folosind CBC este încă strict mai bun decât BCE. Dacă aveți o funcție MAC, CBC-atunci-MAC este un mod AE perfect bun.
Răspuns
Nu ar trebui să utilizați modul ECB, deoarece acesta va cripta blocuri de mesaje identice (adică cantitatea de date criptate în fiecare invocație a blocului-cifrare) cu blocuri de text cifrate identice. Aceasta este o problemă, deoarece va dezvălui dacă aceleași blocuri de mesaje sunt criptate de mai multe ori. Wikipedia are o ilustrare foarte frumoasă a acestei probleme .
Comentarii
- Comentarii nu sunt pentru discuții extinse; această conversație a fost mutată în chat .
Răspuns
Așa cum a menționat-o @Guut Boy, BCE nu este sigură semantic, în sensul că, dacă un mesaj cu blocuri identice este criptat, atunci un atacator obține un anumit avantaj de a avea informații cu privire la textul clar, doar prin respectarea CipherText.
Utilizați preferabil modul CBC pentru a cripta mesajele lungi. Acest mod introduce un parametru suplimentar numit IV (valoare inițială), inițializați cu numărul sesiunii pentru a preveni atacurile în cazul criptării aceluiași mesaj de două ori. / p>
Comentarii
- IV reprezintă vectorul de inițializare, nu valoarea inițială.
- 1. Acesta nu este un sfat bun. Utilizarea criptării fără autentificarea nu ține cont de sfaturile criptografilor de aproximativ un deceniu. Mai bine ar fi să folosiți criptarea autentificată, așa cum recomandă Ilmari Karonen. 2. Acest răspuns pare înlocuit de Ilmari Karonen ‘ s răspuns.
- În afară de asta, faptul este că IV trebuie să fie imprevizibil pentru un atacator (adică nu se poate distinge de aleatoriu), iar acest răspuns spune că ar trebui să utilizați numărul sesiunii, care de obicei nu este deloc aleatoriu.
Lasă un răspuns