Majoritatea oamenilor întâlnesc cuvântul nonce într-un profil VPN și presupun că este încă un secret partajat de copiat între egalii de rețea. Nu este. Un nonce este o valoare care nu trebuie repetată niciodată sub aceeași cheie, și în majoritatea criptării bazate pe nonce circulă în clar. Confuzia rămâne inofensivă până când cineva îl editează manual, și acolo începe stricăciunea reală.

De unde provine de fapt nonce-ul

Criptarea autentificată are nevoie de un nonce diferit pentru fiecare mesaj criptat sub o cheie. Protocoalele îndeplinesc această cerință în moduri diferite: un contor care crește monoton, o sare combinată cu un identificator de pachet sau o valoare aleatoare suficient de lungă. IKEv2 schimbă nonce-uri în timpul schimbului inițial, iar acestea sunt intrări publice pentru derivarea cheii, nu secrete.

Unicitatea poate fi structurală sau probabilistică. Un contor nu se poate repeta până când nu se întoarce, de aceea protocolul definește un punct de reînnoire a cheii mult mai devreme. O valoare aleatoare se bazează pe suficienți biți încât o coliziune să fie improbabilă în limita mesajelor, ceea ce este un alt argument cu un alt mod de eșec. Documentația protocolului indică ce metodă se aplică, iar ambele sunt sigure doar atâta timp cât limita declarată este respectată.

DesignWhere uniqueness comes fromExhaustion is handled by
AES-GCM recordsAn IV, typically a counterRekey before the counter wraps
ChaCha20-Poly1305A 96-bit nonce from a counter or generatorA message limit per key
WireGuardA per-key 64-bit counterRekey at a message cap
OpenVPN AEADPacket identifier plus implicit key materialRekey on the packet-id limit
IKEv2Fresh nonces per exchangeA new security association

Cât costă de fapt reutilizarea

Reutilizarea unui nonce sub o cheie nu este o chestiune minoră de eficiență. Cu GCM, două mesaje care partajează un IV permit unui observator să recupereze cheia de autentificare și să calculeze SAU-ul exclusiv al celor două texte clare. Construcțiile bazate pe flux refolosesc fluxul de cheie în același mod, ceea ce transformă textul cifrat într-o enigmă în loc de un secret.

De aceea implementările reînnoiesc cheia înainte ca un contor să se întoarcă, și de aceea se opresc în loc să continue când starea lor este incertă. O repornire care resetează un contor în timp ce partenerul mai are cheia veche, sau o mașină virtuală restaurată dintr-un instantaneu făcut la mijlocul sesiunii, este exact situația pe care limitele există ca să o prevină. Nu este nevoie de un atacator; operațiile obișnuite sunt suficiente.

De ce editarea manuală este soluția greșită

Contoarele, sărurile și identificatorii de pachet sunt mașini de stare partajate de ambele capete. Schimbarea unei părți o desincronizează pe cealaltă, iar tunelul eșuează în moduri care par o problemă de rutare. Pârghia acceptată este un schimb nou de chei, care resetează starea la ambele capete simultan.

Parolele și nonce-urile joacă și ele roluri diferite. O parolă este intrare secretă pentru derivarea cheii; un nonce este intrare publică pentru fiecare mesaj. Un câmp de profil etichetat nonce care cere un secret lung este de obicei o cheie statică sau un secret prepartajat sub alt nume, așa că citiți documentația acelui câmp în loc să presupuneți.

Când un aviz privește manipularea nonce-urilor, remedierea este versiunea corectată a întreținătorului, nu alt cifru sau o cheie mai scurtă. Schimbarea cifrului pentru a evita cuvântul nonce mută problema în loc să o rezolve.

Citirea unui avertisment fără ghicit

O linie de jurnal despre contoare sau nonce-uri descrie de obicei stare pierdută, nu un atac. Verificați dacă un partener a repornit, dacă o mașină virtuală clonată a reutilizat aceeași identitate și dacă cele două capete sunt de acord asupra setărilor de reînnoire a cheii. Apoi stabiliți o sesiune nouă și urmăriți dacă mesajul revine.

Țineți diagnosticul separat de eșecurile fără legătură. O pagină care nu se încarcă, sau o solicitare de acreditări care se repetă în buclă, nu este dovadă de reutilizare a nonce-ului, iar tratarea ei ca atare vă trimite în stratul criptografic când problema este deasupra lui.

Pentru utilizarea obișnuită, regula sigură este scurtă: lăsați implementarea să gestioneze nonce-ul, țineți ambele capete pe versiuni acceptate și tratați orice resetare de stare ca motiv de reînnoire a cheii în loc de editare a unei valori. Dacă un câmp de profil nu apare în documentația furnizorului, nu inventați o valoare pentru el. Repararea tunelului începe cu a ști la ce strat vă uitați.

Articole similare