Algoritmul cu clichet dublu

Algoritmul Double Ratchet ( fosta Axolotl Ratchet [1] [2] ) este un algoritm de management al cheilor dezvoltat de Trevor Perrin și Moxie Marlinspike în 2013 . Acest algoritm poate fi utilizat ca parte a unui protocol criptografic pentru a oferi criptare end-to-end pentru mesageria instantanee. După schimbul inițial de chei, gestionează reînnoirea și întreținerea continuă a cheilor de sesiune scurtă. Combină un clichet criptografic bazat pe schimbul de chei Diffie-Hellman și un clichet bazat pe o funcție de derivare a cheilor., cum ar fi, de exemplu, funcția hash . Astfel, algoritmul este un mecanism cu clichet dublu, care se reflectă în numele său.

Dezvoltatorii descriu algoritmul ca auto-vindecare deoarece, în anumite condiții, dezactivează un atacator să acceseze textul simplu al mesajului după ce cheia de sesiune este compromisă [3] . Această condiție este ca între compromisul cheii și mesajul în cauză să existe cel puțin un mesaj care nu a fost manipulat de atacator. Acest lucru forțează efectiv atacatorul să intercepteze toate comunicările dintre părțile cinstite, deoarece pierde accesul de îndată ce un mesaj fără compromis este trimis între ele. Această caracteristică a fost numită mai târziu Secretul viitor sau Securitatea post-compromis [ 4] .

Introducere

Acest algoritm este folosit de două părți pentru a schimba mesaje criptate pe baza unei chei secrete partajate. De obicei, părțile folosesc protocolul de acord inițial Extended Triple Diffie-Hellman (X3DH) [5] , în care are loc un schimb de chei triple pentru a conveni asupra unui secret partajat. Participanții la conexiune vor folosi apoi Double Ratchet pentru a trimite și a primi mesaje criptate. Cu fiecare mesaj Double Ratchet, părțile trebuie să obțină chei noi pentru fiecare mesaj Double Ratchet, astfel încât cheile anterioare să nu poată fi calculate din cele ulterioare. Participanții la conexiune trimit și valori generice Diffie-Hellman atașate mesajelor lor. Rezultatele calculelor Diffie-Hellman sunt amestecate cu chei derivate, astfel încât cheile ulterioare nu pot fi calculate de la cele anterioare. Aceste proprietăți oferă o anumită protecție mesajelor criptate care ajung înainte sau după atac, în cazul în care cheile părții sunt compromise [6] .

Origini

Algoritmul cu clichet dublu a fost dezvoltat în 2013 de Trevor Perrin și Moxie Marlinspike, fondatorul organizației non-profit de software open source Open Whisper Systems . Scopul acestei organizații este de a dezvolta un set ușor de utilizat de aplicații mobile pentru comunicații securizate [7] . Organizația a fost fondată în 2013 și este formată dintr-un grup mic de dezvoltatori finanțați prin donații și granturi, precum și dintr-o comunitate mare de dezvoltatori voluntari. În februarie 2014, Trevor Perrin și Moxie Marlinspike au prezentat algoritmul ca parte a Protocolului de semnal . Conceptul algoritmului cu clichet dublu se bazează pe clichetul Diffie-Hellman, care a fost introdus de protocolul criptografic pentru mesageria instantanee ( Off-The-Record Messaging (OTR)) și îl combină cu un mecanism de clichet cu cheie simetrică modelat după protocol de mesagerie instant - Silent Circle Instant Messaging Protocol (SCIMP). Clichetul a fost numit inițial după animalul pe cale de dispariție, axolotl, care are capacități excepționale de auto-vindecare. În martie 2016, dezvoltatorii au redenumit Axolotl Ratchet în Double Ratchet Algorithm pentru a distinge mai bine între clichet și protocolul complet [2] , deoarece unii au folosit numele Axolotl pentru a se referi la protocolul de semnalizare [8] [2] .

Proprietăți

Algoritmul dublu clichet are caracteristici care au fost disponibile pe scară largă în sistemele de criptare end-to-end de mult timp: criptarea conținutului de-a lungul întregii căi de transport, precum și autentificarea gazdei de la distanță și protecție împotriva manipulării mesajelor. Fiind un hibrid între clichetul Diffie-Hellman și generarea de chei, combină câteva caracteristici de dorit ale ambelor principii. Din mesageria OTR, acesta preia proprietățile secretului de transmitere și restabilește automat secretul în cazul unei chei de sesiune compromise, trimite informații confidențiale cu cheia principală permanentă secretă spartă și negarea plauzibilă a mesajelor. În plus, permite ca cheile de sesiune să fie actualizate fără a interacționa cu o gazdă la distanță folosind clichete secundare bazate pe funcția de derivare a cheilor. Se aplică un pas suplimentar de generare a cheilor pentru a permite reținerea cheilor de sesiune pentru mesajele în afara ordinii fără a compromite cheile ulterioare pentru a detecta reordonarea, ștergerea și retransmiterea mesajelor trimise și pentru a îmbunătăți proprietățile de confidențialitate în comparație cu mesajele OTR.

În combinație cu o infrastructură de chei publice pentru stocarea cheilor unice pregenerate (prekeys), vă permite să inițializați sesiunile de mesagerie fără prezența unei gazde la distanță (comunicare asincronă). Folosirea Triple Diffie-Hellman Key Exchange (X3DH) ca metodă inițială de schimb de chei îmbunătățește proprietățile de negație. Un exemplu în acest sens este un protocol de semnalizare care combină un algoritm cu clichet dublu, prechei și un schimb inițial de chei folosind schimbul triplu de chei Diffie-Hellman [9] . Protocolul oferă confidențialitate, integritate, autentificare, consecvență participanților, validare a destinatarului, confidențialitate în avans, secretizare viitoare (cunoscută și sub denumirea de secretizare viitoare), cauzalitate, inadmisibilitatea mesajului, respingerea mesajului, neparticiparea și asincronia [9] . Nu oferă anonimat și necesită servere să transmită mesaje și să stocheze materiale cu chei publice [9] .

Schema de funcționare

Clientul actualizează cheia de sesiune atunci când comunică cu gazda de la distanță folosind un clichet Diffie-Hellman atunci când este posibil, în caz contrar, folosind un clichet hash. Prin urmare, cu fiecare mesaj, un client care folosește un clichet dublu împinge unul dintre cele două clichete hash (unul pentru a trimite, unul pentru a primi) care iau o cheie partajată din clichetul Diffie-Hellman. În același timp, încearcă orice oportunitate să ofere nodului la distanță o nouă valoare Diffie-Hellman publică și să avanseze clichetul Diffie-Hellman ori de câte ori o nouă valoare Diffie-Hellman sosește de la nodul la distanță. Odată ce o nouă cheie partajată este stabilită, un nou clichet hash este inițializat.

Ca primitive criptografice, algoritmul cu clichet dublu folosește:

pentru clichet Diffie-Hellman

pentru codurile de autentificare a mesajelor ( MAC , autentificare)

pentru criptare simetrică

pentru clichet pe baza de hash

Criptare antet cu clichet dublu

În unele cazuri, poate fi de dorit să se cripteze anteturile, astfel încât un interlocutor să nu poată determina ce mesaje aparțin cărei sesiuni sau în ce ordine sunt mesajele într-o sesiune. Când se criptează un antet, fiecare parte stochează cheia antetului simetrică și următoarea cheie antet atât pentru trimitere, cât și pentru primire. Cheia antetului de trimitere este utilizată pentru a cripta anteturile pentru lanțul de trimitere curent. Când un mesaj ajunge la destinatar, acesta trebuie mai întâi să asocieze mesajul cu sesiunea corespunzătoare Double Ratchet dacă există alte sesiuni cu alte părți în plus față de acea sesiune. Odată ce receptorul a asociat un mesaj cu o sesiune, încearcă să decripteze antetul utilizând cheia antetului sesiunii de primire, următoarea cheie antet și orice alte chei de antet corespunzătoare mesajelor pierdute. Decriptarea reușită cu următoarea cheie de antet indică faptul că destinatarul ar trebui să efectueze pasul de clichet Diffie-Hellman. În timpul etapei de clichet Diffie-Hellman, următoarele chei de antet înlocuiesc cheile de antet curente, iar noile chei de antet următoare sunt primite ca variabile de ieșire suplimentare din hash-ul rădăcină.

Lista aplicațiilor

Următoarea este o listă de aplicații care utilizează algoritmul cu clichet dublu sau o implementare personalizată:

ChatSecure conversii Cryptocat facebook messenger G Data Secure Chat Gajim Google Allo Refugiu Iaz Revoltă Semnal telefon silențios Skype Viber whatsapp Sârmă

Note

  1. Perrin, Trevor. „Compara revizuiri”, GitHub (30 martie 2016). Preluat la 7 decembrie 2018. Arhivat din original pe 7 mai 2017.
  2. 1 2 3 Marlinspike, Moxie. „Semnal pe dinafară, Semnal pe dinăuntru” (30 martie 2016). Preluat la 7 decembrie 2018. Arhivat din original la 15 noiembrie 2018.
  3. Marlinspike, Moxie. „Clichet criptografic avansat” (26 noiembrie 2013). Preluat la 7 decembrie 2018. Arhivat din original la 7 august 2019.
  4. Katriel Cohn-Gordon; Cas Cremers; Luke Garratt. „Despre securitatea post-compromis” (11 august 2016). Data accesului: 7 decembrie 2018. Arhivat din original pe 7 iunie 2018.
  5. Trevor Perrin (editor), Moxie Marlinspike. „Protocolul acordului cheie X3DH” (4 noiembrie 2016). Preluat la 7 decembrie 2018. Arhivat din original la 23 noiembrie 2020.
  6. Trevor Perrin (editor), Moxie Marlinspike. „Algoritmul cu clichet dublu” (20 noiembrie 2016). Preluat la 7 decembrie 2018. Arhivat din original la 21 august 2019.
  7. whispersystems.org. Deschideți Whisper Systems >> Acasă . Preluat la 7 decembrie 2018. Arhivat din original pe 9 decembrie 2018.
  8. Katriel Cohn-Gordon , Cas Cremers, Benjamin Dowling, Luke Garratt, Douglas Stebila. „O analiză formală de securitate a protocolului de mesaje semnal” (noiembrie 2017). Data accesului: 7 decembrie 2018. Arhivat din original pe 22 februarie 2017.
  9. 1 2 3 Nik Unger , Sergej Dechand Joseph Bonneau, Sascha Fahl, Henning Perl Ian Goldberg, Matthew Smith. „SoK: Secure Messaging” (2015). Preluat la 7 decembrie 2018. Arhivat din original la 1 noiembrie 2020.
  10. Tilman Frosch , Christian Mainka, Christoph Bader, Florian Bergsma, Jorg Schwenk, Thorsten Holz. „Cât de sigur este TextSecure?” (2014). Preluat la 7 decembrie 2018. Arhivat din original la 28 februarie 2019.