Atacul Fluhrer, Mantin și Shamir - Fluhrer, Mantin and Shamir attack

În criptografie , atacul Fluhrer, Mantin și Shamir este un atac de cifrare a fluxului asupra cifrului de flux RC4 utilizat pe scară largă . Atacul permite unui atacator să recupereze cheia dintr-un flux criptat RC4 dintr-un număr mare de mesaje din acel flux.

Atacul Fluhrer, Mantin și Shamir se aplică metodelor specifice de derivare a cheilor, dar nu se aplică în general SSL bazat pe RC4 (TLS) , deoarece SSL generează cheile de criptare pe care le folosește pentru RC4 prin hashing, ceea ce înseamnă că diferite sesiuni SSL au chei fără legătură . Cu toate acestea, atacul strâns legat de bar mitzvah , bazat pe aceeași cercetare și dezvăluit în 2015, exploatează acele cazuri în care cheile slabe sunt generate de procesul de tastare SSL.

fundal

Fluhrer , Mantin și Shamir (FMS) atac, publicat în „Punctele slabe în cheia Programarea algoritmul RC4“ lor de hârtie 2001, profită de o slăbiciune în RC4 cheie de programare algoritm pentru a reconstrui cheia din mesaje criptate. Atacul FMS a câștigat popularitate în instrumentele de atac din rețea, inclusiv AirSnort , weplab și aircrack , care îl utilizează pentru a recupera cheia utilizată de rețelele fără fir protejate WEP .

Această discuție va utiliza algoritmul de planificare a cheilor RC4 (KSA) de mai jos.

begin ksa(with int keylength, with byte key[keylength])
    for i from 0 to 255
        S[i] := i
    endfor
    j := 0
    for i from 0 to 255
        j := (j + S[i] + key[i mod keylength]) mod 256
        swap(S[i],S[j])
    endfor
end

Următorul algoritm de generare pseudo-aleatorie (PRGA) va fi, de asemenea, utilizat.

begin prga(with byte S[256])
    i := 0
    j := 0
    while GeneratingOutput:
        i := (i + 1) mod 256
        j := (j + S[i]) mod 256
        swap(S[i],S[j])
        output S[(S[i] + S[j]) mod 256]
    endwhile
end

Atacul

Baza atacului FMS stă în utilizarea vectorilor de inițializare slabi (IV) utilizați cu RC4. RC4 criptează câte un octet la un moment dat cu o ieșire de tip keystream de la prga () ; RC4 folosește cheia pentru a inițializa o mașină de stare prin ksa () , apoi modifică continuu starea și generează un nou octet al fluxului de chei din noua stare. Teoretic, fluxul de chei funcționează ca un tampon aleatoriu , deoarece un generator de numere pseudo-aleatorii controlează ieșirea la fiecare pas.

Cu anumite IV-uri, un atacator care cunoaște primul octet al fluxului de chei și primii m octeți ai cheii poate obține ( m  + 1) al octetul cheii datorită unei slăbiciuni în PRNG utilizat pentru a genera fluxul de chei. Deoarece primul octet al textului clar provine din antetul WEP SNAP , un atacator poate presupune că poate obține primul octet al fluxului de chei din B ⊕ 0x AA (antetul SNAP este aproape întotdeauna 0xAA). De acolo, are nevoie doar de un IV în formă ( a  + 3,  n  - 1,  x ) pentru indexul cheii a egal cu 0, spațiul valorii elementului n egal cu 256 (deoarece 8 biți fac un octet) și orice x . Pentru a începe, atacatorul are nevoie de IV-uri de (3, 255,  x ). WEP utilizează IV-uri pe 24 de biți, ceea ce face ca fiecare valoare să aibă un octet lung.

Pentru început, atacatorul folosește IV ca primele 3 elemente din K []. El umple caseta S S [] cu valori secvențiale de la 0 la n, așa cum face RC4 când inițializează caseta S dintr-un K cunoscut []. Apoi efectuează primele 3 iterații ale ksa () pentru a începe inițializarea casetei S.

După cel de-al treilea pas, atacatorul poate, dar nu definitiv, să obțină al patrulea octet al cheii utilizând ieșirea O a fluxului de chei, calculând (O -  j  -  S [ i ]) mod  nK [ i ], cu valoarea i  = 3 la acest pas.

În acest moment, atacatorul nu are încă al patrulea octet al cheii. Acest algoritm nu regenerează următorul octet al cheii; generează o posibilă valoare a cheii. Prin colectarea mai multor mesaje - de exemplu pachete WEP - și repetarea acestor pași, atacatorul va genera o serie de valori posibile diferite. Valoarea corectă apare semnificativ mai frecvent decât oricare alta; atacatorul poate determina valoarea cheii recunoscând această valoare și selectând-o ca următorul octet. În acest moment, el poate începe din nou atacul pe al cincilea octet al cheii.

Deși atacatorul nu poate ataca din ordine cuvintele cheii, poate stoca mesaje pentru atac ulterior secvențial asupra cuvintelor ulterioare, odată ce cunoaște cuvintele anterioare. Din nou, el are nevoie doar de mesaje cu IV-uri slabe și le poate arunca pe altele. Prin acest proces, el poate aduna un număr mare de mesaje pentru atac asupra întregii chei; de fapt, el nu poate stoca decât o scurtă porțiune din începutul acestor mesaje, suficient cât să poată efectua atacul până când cuvântul cheii IV îi va permite să atace.

Referințe

Vezi si