Puncte:1

Înțelegerea algebrei din spatele securității GCM

drapel ru

Aș dori să înțeleg algebra din spatele securității GCM. Înainte de a-mi pune întrebări, permiteți-mi să spun înțelegerea mea despre matematica din spatele GCM. Dacă sunt corecte, întrebările mele sunt la sfârșit; dacă este incorectă, vă rog să îmi explicați greșeala.

Pentru simplitate, presupuneți un singur bloc de text cifrat $c$. Vrem ca eticheta noastră să aibă două proprietăți:

  1. $tag_k(c)$ ar trebui să fie un hash uniform universal de $c$: adică pentru toți $c$, dacă $k$ este uniform aleatorie, $P[tag_k(c) = y]$ este uniformă pentru toți $y$.

  2. $tag_k(c)$ nu ar trebui să dezvăluie informații despre $k$, chiar și când $c$ este cunoscut.

Proprietatea 1 este ușor de satisfăcut prin înmulțire cu diferită de zero $k$ în $GF(2^n)$, din moment ce, în $GF(2^n)$, $f(x) = ax$ este o permutare unică pentru toți $a \ne 0$, și $f$ este deci un hash uniform universal.

Proprietatea 2 ar fi nu fi mulțumit de $tag_k(c) = kc$, deoarece putem calcula $c{^-1}$ si rezolva $k = tag_k(c)c^{-1}$. Pentru a îndeplini Proprietatea 2, introducem un „text cifrat secret”, $c_0$, și definiți $tag_k(c) = kc + c_0$ (în plus, XOR pe biți în $GF(2^n)$). $c_0$ funcționează efectiv ca un bloc unic pentru a cripta eticheta „rădăcină”. $kc$.

Ce se întâmplă dacă vrem să autentificăm două blocuri de text cifrat? Am putea repeta procedura, asigurându-ne că folosim una nouă $c_0$ de fiecare data. În practică, AES-GCM utilizează c_0 = AES_k(contor++).

Cu toate acestea, atunci când autentificați mai multe blocuri simultan, acest lucru este ineficient. În schimb, putem folosi unu etichetă pentru mai multe blocuri cifrate, folosind această formulă:

$$tag_k(c_1, c_2,...c_n) = kc_0 + \sum k^nc_n.$$ (Pentru simplitate, omit câmpul de lungime, precum și textul simplu autentificat). Aceasta păstrează ambele proprietăți.

Am putea fi tentați să simplificăm asta la $\sum kc_n$, dar acest lucru eșuează, deoarece putem înlocui $c_a, c_b$ cu $fake_a, fake_b$ atâta timp cât $fake_a + fake_b = c_a + c_b$. De exemplu, am putea inversa un bit în orice bloc cifrat atâta timp cât răsturnăm bitul corespunzător într-un bloc diferit. (Acest tip de atac a fost folosit împotriva WEP, care folosește CRC ca „MAC”).

  1. Este corect cele de mai sus?
  2. Cum alege AES-GCM $k$?

Mai important, cum evităm următoarele moduri de defecțiune aparentă:

  1. Dacă $k = 0$, $tag(any\_ciphertext) = 0$
  2. Face $c_n = 0$ pune o problema? Nu pare să rupă niciuna dintre proprietăți, dar încă pare îngrijorător. (Rețineți că nu putem adăuga pur și simplu blocuri zero, deoarece acest lucru va schimba câmpul de lungime.)
  3. Mi se pare că algoritmul multi-bloc ar fi corect dacă fiecare $k$ a fost un generator de $GF(2^n)$ sau cel puţin de ordin foarte înalt. Dar dacă $k$ se întâmplă să fie de ordin scăzut, schema va eșua.

De exemplu: Imaginați-vă $k$ are ordinea 2. Apoi ne putem întoarce puțin $c_1$ atâta timp cât răsturnăm același bit înăuntru $c_3$, de cand $$\begin{align} k^2c_1 + k^4c_3 &= k^2(c_1 + c_3) \ &= k^2(c_1 + c_3 + d + d) \ &= k^2(c_1 + d) + k^4(c_3 + d)\end{align}.$$ Cum evită GCM acest mod de eroare?

kelalaka avatar
drapel in
Întrebare foarte lungă și 5 întrebări deodată! GCM este foarte fragil ca în aceasta [Înțelegerea impactului partiționării atacurilor oracle asupra cifrurilor de flux](https://crypto.stackexchange.com/q/88716/18298) și [Cât de rău este să folosești același IV de două ori cu AES/ GCM?](https://crypto.stackexchange.com/a/68525/18298) și [Care sunt constrângerile privind utilizarea GCM cu o dimensiune a etichetei de 96 și 128 de biți?](https://crypto.stackexchange.com /q/27374/18298)
kelalaka avatar
drapel in
Consultați, de asemenea, [documentul lui Joux](https://csrc.nist.gov/csrc/media/projects/block-cipher-techniques/documents/bcm/comments/800-38-series-drafts/gcm/joux_comments.pdf)
Puncte:2
drapel my

Aș dori să înțeleg algebra din spatele securității GCM.

Ei bine, ați scris mecanica modului în care funcționează piesa de autentificare a GCM; totuși, pentru a înțelege de ce acești mecanici funcționează, ar fi util să-l abordăm într-un mod diferit.

GCM folosește aritmetica în $GF(2^{128})$; acesta este un camp; punctul important este că, într-un domeniu, cel mult orice polinom de grad diferit de zero $n$ are cel mult $n$ zerouri; adică pentru orice ecuație:

$$a_n x^n + a_{n-1} x^{n-1} + ... + a_0 x^0 = 0$$

are cel mult $n$ solutii pentru $x$ (presupunând că cel puțin unul dintre $a_i$ valorile nu sunt zero).

De ce acest lucru este critic va fi clar mai târziu.

Acum, ceea ce face GCM pentru a se autentifica este că ia datele criptate (și AAD) și le traduce într-un polinom; apoi convertește nonce ca valoare constantă a polinomului și apoi evaluează acel polinom la o valoare secretă $k$, iar rezultatul acelei evaluări este eticheta; acesta este:

$$tag := a_n k^n + a_{n-1} k^{k-1} + ... + a_1 k^1 + \text{hash}(nonce)$$

Acum, să presupunem că avem o pereche mesaj/etichetă diferită pentru același nonce; acel mesaj/etichetă ar trece verificarea integrității GCM dacă:

$$tag' := a'_n k^n + a'_{n-1} k^{k-1} + ... + a'_1 k^1 + \text{hash}(nonce)$$

Ceea ce putem face este să scădem cele două polinoame (cel corespunzător textului cifrat bun care a fost generat de criptatorul valid și cel corespunzător ghicirii de către atacator); obținem atunci [1]:

$$0 = (a_n-a'_n)k^n + (a_{n-1} - a'_{n-1})k^{n-1} + ... + (a_1 - a'_1) k^1 + (etichetă - etichetă')k^0$$

Această ecuație este valabilă numai dacă a doua pereche text cifrat/etichetă este validă.

Acum, ne întoarcem la observația noastră inițială: acesta este cel mult un polinom de grad $n$ si asa sunt cel mult $n$ valori diferite ale $k$ pentru care această ecuație este adevărată. De asemenea, știm că cel puțin un coeficient al polinomului este diferit de zero (polinomul total zero este adevărat dacă textul cifrat „falsificat” este exact același cu cel valid, care nu este considerat un fals). Si daca $k$ este selectat imprevizibil, apoi există $2^{128}$ valori posibile, deci probabilitatea ca se întâmplă să fie una dintre acestea $n$ valorile este cel mult $n2^{-128}$, care este cu adevărat minuscul.

Acum, pentru a transforma acest argument într-o dovadă reală (care a fost făcută), trebuie să presupunem că a) $k$ este selectat uniform la întâmplare și b) $\text{hash}(nonce)$ de asemenea, este selectat aleatoriu (pentru că, dacă nu, atacatorul poate deduce unele lucruri despre valoarea polinomului, ceea ce ar fi rău); se dovedește că le putem lega pe ambele de puterea criptografică a AES.

Acum, pentru a vă răspunde la întrebări:

  1. Este corect cele de mai sus?

Închide; ai greșit un detaliu; folosind notația dvs., obținem calculul etichetei ca $tag_k(c_1, c_2,...c_n) = c_0 + \sum k^nc_n$ (Rețineți că $c_0$ nu se inmulteste cu $k$):

  1. Cum alege AES-GCM $k$?

Criptează blocul total zero folosind AES folosind cheia GCM.

  1. Dacă $k=0$, $tag(\text{any_ciphertext})=0$

Nu, $c_0$ nu se inmulteste cu $k$, deci avem în acest caz:

$$tag(\text{any_ciphertext}) = c_0$$

Înseamnă în continuare că, în acest caz specific, textul cifrat poate fi modificat în mod arbitrar fără modificarea etichetei, însă nu este evident.

Întrebarea evidentă este: „Nu este încă rău?”. Ei bine, cu o etichetă de 128 de biți, atacatorul are întotdeauna o probabilitate $2^{-128}$ de a ghici orbitor o pereche de text cifrat/etichetă validă - $k=0$ are aceeași probabilitate de a se produce și, prin urmare, nu crește probabilitatea de falsificare.

  1. Face $c_n=0$ pune o problema?

Nu; dacă treci prin logica de mai sus, $c_n=0$ nu este un caz special.

  1. Dar dacă $k$ se întâmplă să fie de ordin scăzut, schema va eșua.

Acest scenariu de eșec specific încă se încadrează în probabilitate $n2^{-128}$ așa cum se arată mai sus; dacă (spuneți) testați dacă $k$ a avut o comandă mică și respinge acele valori, de fapt nu vei reduce probabilitatea de falsificare.


[1]: Într-un domeniu uniform caracteristic precum $GF(2^{128})$, adunarea și scăderea sunt aceeași operație, așa că de obicei scriem ambele ca $+$; L-am păstrat ca $-$ a face este ceva mai clar pentru cineva neobișnuit cu asemenea convenții.

drapel ru
Genial raspuns! Dacă am înțeles bine, spui: Da, există cazuri în care $tag_{falsificare}$ are o relație foarte simplă cu $tag_{real}$: când $k = 0$, sunt identice și când $ k$ este ordinul 2, ei urmează schema de flip biți pe care am arătat-o. Dar, deci ce? Asta nu slăbește securitatea: atâta timp cât nu scurgem _nimic_ despre $k$, rămâne faptul că pentru fiecare fals, există cel mult $n$ etichete (din $2^{128}$) care se potrivesc cu el; pentru unele $k$, aceste etichete modificate sunt ușor de calculat din $tag_{real}$ și pentru unele $k$ nu sunt. Este corect?
poncho avatar
drapel my
@SRobertJames: de fapt, cu acest câmp, nu există $k$ cu ordinul 2; pe de altă parte, există exact două valori de $k$ care au ordinul 3, deci punctul tău este încă valabil.
drapel ru
Ați arătat că, având în vedere un $c'$ și $k$, există cel mult $n$ $etichete care autentifică $c'$. De unde știm că acele $etichete sunt funcții aleatorii ale $k$? Poate că unele $tag-uri funcționează pentru un număr foarte mare de $k$, iar unele funcționează pentru puțini sau deloc $k$. Pentru o funcție liniară $ax + b$, aceasta nu este o problemă, deoarece o funcție liniară într-un câmp finit este o permutare; dar pentru o funcție polinomială, acest lucru nu este adevărat. De exemplu. $x^2 ​​+ x$ trimite jumătate din $GF(2^2)$ la $0$.
poncho avatar
drapel my
@SRobertJames: mai în concordanță cu ceea ce întrebați cu adevărat; de fapt, este destul de ușor să luați un set de valori $n$ pentru $k$ și să creați un fals care să se potrivească cu el dacă oricare dintre acele valori $k$ ar fi corectă. Calculul este puțin mai mult decât „întoarcerea a doi biți”, dar totuși destul de fezabil.
poncho avatar
drapel my
@SRobertJames: sunt pentru „maparea dintre mesaje și etichete este echidistribuită”, bine, amintiți-vă de $hash(\text{nonce})$ pe care îl includem în calculul etichetei? Atâta timp cât aceasta este echidistribuită și independentă de restul calculului etichetei (și deoarece se bazează pe AES, asta pare plauzibil), atunci etichetele în sine sunt distribuite uniform.

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.