close

Algoritmo a doppio cricchetto

Vai alla navigazione Vai alla ricerca

L' algoritmo Double Ratchet ( precedentemente Axolotl Ratchet [1] [2] ) è un algoritmo di gestione delle chiavi sviluppato da Trevor Perrin e Moxie Marlinspike nel 2013 . Questo algoritmo può essere utilizzato come parte di un protocollo crittografico per fornire la crittografia end-to-end per la messaggistica istantanea. Dopo lo scambio iniziale delle chiavi, gestisce il rinnovo e la manutenzione in corso delle chiavi di sessione breve. Combina un cricchetto crittografico basato sullo scambio di chiavi Diffie-Hellman e un cricchetto basato su una funzione di derivazione della chiave., come ad esempio la funzione hash . Pertanto, l'algoritmo è un meccanismo a doppio cricchetto, che si riflette nel suo nome.

Gli sviluppatori descrivono l'algoritmo come autorigenerante perché, in determinate condizioni, impedisce a un utente malintenzionato di accedere al testo in chiaro del messaggio dopo che la chiave di sessione è stata compromessa [3] . Questa condizione è che tra la compromissione della chiave e il messaggio in questione vi fosse almeno un messaggio che non sia stato manomesso dall'attaccante. Ciò costringe effettivamente l'attaccante a intercettare tutte le comunicazioni tra le parti oneste, poiché perde l'accesso non appena viene inviato un messaggio senza compromessi tra di loro. Questa funzionalità è stata successivamente chiamata Future Secrecy o Post-Compromise Security [ 4] .

Introduzione

Questo algoritmo viene utilizzato da due parti per scambiare messaggi crittografati basati su una chiave segreta condivisa. Tipicamente, le parti utilizzano il protocollo di accordo iniziale Extended Triple Diffie-Hellman (X3DH) [5] , in cui avviene uno scambio di chiavi triple per concordare un segreto condiviso. I partecipanti alla connessione utilizzeranno quindi Double Ratchet per inviare e ricevere messaggi crittografati. Con ogni messaggio Double Ratchet, le parti devono ottenere nuove chiavi per ogni messaggio Double Ratchet in modo che le chiavi precedenti non possano essere calcolate da quelle successive. I partecipanti alla connessione inviano anche valori Diffie-Hellman generici allegati ai loro messaggi. I risultati dei calcoli di Diffie-Hellman vengono mescolati con chiavi derivate in modo che le chiavi successive non possano essere calcolate da quelle precedenti. Queste proprietà offrono una certa protezione ai messaggi crittografati che arrivano prima o dopo l'attacco, nel caso in cui le chiavi della parte siano compromesse [6] .

Origini

L'algoritmo a doppio cricchetto è stato sviluppato nel 2013 da Trevor Perrin e Moxie Marlinspike, fondatore dell'organizzazione di software open source senza scopo di lucro Open Whisper Systems . L'obiettivo di questa organizzazione è sviluppare un insieme di applicazioni mobili di facile utilizzo per una comunicazione sicura [7] . L'organizzazione è stata fondata nel 2013 ed è composta da un piccolo gruppo di sviluppatori finanziati da donazioni e sovvenzioni, nonché da una vasta comunità di sviluppatori volontari. Nel febbraio 2014, Trevor Perrin e Moxie Marlinspike hanno presentato l'algoritmo come parte del Signal Protocol . Il concetto dell'algoritmo a doppio cricchetto si basa sul cricchetto Diffie-Hellman, introdotto dal protocollo crittografico per la messaggistica istantanea ( Off-The-Record Messaging (OTR)) e lo combina con un meccanismo a cricchetto a chiave simmetrica modellato sul modello protocollo di messaggistica istantanea - SCIMP (Silent Circle Instant Messaging Protocol). Il cricchetto era originariamente chiamato dopo l'animale in via di estinzione, l'axolotl, che ha eccezionali capacità di autoguarigione. Nel marzo 2016, gli sviluppatori hanno rinominato Axolotl Ratchet in Double Ratchet Algorithm per distinguere meglio tra cricchetto e protocollo completo [2] , poiché alcuni hanno utilizzato il nome Axolotl per riferirsi al protocollo di segnalazione [8] [2] .

Proprietà

L'algoritmo a doppio cricchetto ha caratteristiche ampiamente disponibili da molto tempo nei sistemi di crittografia end-to-end: crittografia dei contenuti lungo l'intero percorso di trasporto, nonché autenticazione dell'host remoto e protezione contro la manipolazione dei messaggi. In quanto ibrido tra cricchetto Diffie-Hellman e generazione chiave, combina diverse caratteristiche desiderabili di entrambi i principi. Dalla messaggistica OTR, prende le proprietà della segretezza in avanti e ripristina automaticamente la segretezza in caso di chiave di sessione compromessa, invia informazioni riservate con chiave master permanente segreta crackata e negabilità plausibile dei messaggi. Inoltre, consente di aggiornare le chiavi di sessione senza interagire con un host remoto utilizzando cricchetti secondari basati sulla funzione di derivazione della chiave. Viene applicato un ulteriore passaggio di generazione delle chiavi per consentire la conservazione delle chiavi di sessione per i messaggi fuori ordine senza compromettere le chiavi successive per rilevare il riordino, l'eliminazione e la ritrasmissione dei messaggi inviati e migliorare le proprietà di riservatezza rispetto ai messaggi OTR.

In combinazione con un'infrastruttura a chiave pubblica per l'archiviazione di chiavi monouso pregenerate (prechiavi), consente di inizializzare sessioni di messaggistica senza la presenza di un host remoto (comunicazione asincrona). L'utilizzo di Triple Diffie-Hellman Key Exchange (X3DH) come metodo di scambio di chiavi iniziale migliora le proprietà di negazione. Un esempio di questo è un protocollo di segnalazione che combina un algoritmo a doppio cricchetto, prechiavi e uno scambio di chiavi iniziale utilizzando il triplo scambio di chiavi Diffie-Hellman [9] . Il protocollo fornisce riservatezza, integrità, autenticazione, coerenza dei partecipanti, convalida del destinatario, riservatezza in avanti, segretezza futura (nota anche come segretezza futura), causalità, inammissibilità del messaggio, rifiuto del messaggio, non partecipazione e asincronia [9] . Non fornisce l'anonimato e richiede ai server di inoltrare messaggi e archiviare i materiali delle chiavi pubbliche [9] .

Schema di funzionamento

Il client aggiorna la chiave di sessione quando comunica con l'host remoto utilizzando un cricchetto Diffie-Hellman quando possibile, altrimenti in modo indipendente utilizzando un cricchetto hash. Pertanto, con ogni messaggio, un client che utilizza un doppio cricchetto spinge uno dei due hash ratch (uno da inviare, uno da ricevere) che prendono una chiave condivisa dal cricchetto Diffie-Hellman. Allo stesso tempo, prova ogni opportunità per fornire al nodo remoto un nuovo valore Diffie-Hellman pubblico e far avanzare il cricchetto Diffie-Hellman ogni volta che un nuovo valore Diffie-Hellman arriva dal nodo remoto. Una volta stabilita una nuova chiave condivisa, viene inizializzato un nuovo cricchetto hash.

Come primitive crittografiche, l'algoritmo double ratchet utilizza:

per cricchetto Diffie-Hellman

per i codici di autenticazione dei messaggi ( MAC , autenticazione)

  • Codice di autenticazione del messaggio con chiave hash ( HMAC ): un meccanismo per lo scambio di dati utilizzando una chiave segreta (come in MAC: al messaggio viene aggiunto uno speciale set di caratteri per garantirne l'integrità e l'autenticazione dell'origine dati) e funzioni hash basate su SHA-256  - un hash algoritmo sicuro

per la crittografia simmetrica

per cricchetto a base di hash

Crittografia dell'intestazione a doppio cricchetto

In alcuni casi, può essere desiderabile crittografare le intestazioni in modo che un intercettatore non possa determinare quali messaggi appartengono a quali sessioni o quale ordine si trovano in una sessione. Quando si crittografa un'intestazione, ogni lato memorizza la chiave di intestazione simmetrica e la chiave di intestazione successiva sia per l'invio che per la ricezione. La chiave dell'intestazione di invio viene utilizzata per crittografare le intestazioni per la catena di invio corrente. Quando un messaggio arriva al destinatario, deve prima associare il messaggio alla sessione Double Ratchet appropriata se ci sono altre sessioni con altri soggetti oltre a quella sessione. Una volta che il destinatario ha associato un messaggio a una sessione, tenta di decrittografare l'intestazione utilizzando la chiave di intestazione della sessione ricevente, la chiave di intestazione successiva e qualsiasi altra chiave di intestazione corrispondente ai messaggi persi. La corretta decrittografia con la seguente chiave di intestazione indica che il destinatario deve eseguire il passaggio Diffie-Hellman ratchet. Durante il passaggio del cricchetto Diffie-Hellman, le chiavi di intestazione successive sostituiscono le chiavi di intestazione correnti e le nuove chiavi di intestazione successive vengono ricevute come variabili di output aggiuntive dall'hash radice.

Elenco delle applicazioni

Di seguito è riportato un elenco di applicazioni che utilizzano l'algoritmo a doppio cricchetto o un'implementazione personalizzata:

   Chatta sicura
   conversioni
   Criptogatto
   messaggero di facebook
   G Data Secure Chat
   Gajim
   Google Allo
   porto
   Stagno
   Rivolta
   segnale
   telefono silenzioso
   Skype
   Viber
   WhatsApp
   Filo

Note

  1. ^ Perrin, Trevor. "Confronta le revisioni", GitHub (30 marzo 2016). Estratto il 7 dicembre 2018 . Archiviato dall'originale il 7 maggio 2017.
  2. 1 2 3 Marlinspike, Moxie. "Segnale all'esterno, Segnale all'interno" (30 marzo 2016). Estratto 7 dicembre il 2018 Archiviato dall'originale il 15 novembre 2018.
  3. ^ Marlinspike, Moxie. "Crittografico crittografico avanzato" (26 novembre 2013). Estratto 7 dicembre 2018 . Archiviato dall'originale il 7 agosto 2019.
  4. ^ Katriel Cohn-Gordon; Cas Cremers; Luca Garratt. "Sulla sicurezza post-compromesso" (11 agosto 2016). Data di accesso: 7 dicembre 2018 Archiviata dall'originale il 7 giugno 2018.
  5. ^ Trevor Perrin (a cura di), Moxie Marlinspike. "The X3DH Key Agreement Protocol" (4 novembre 2016). Estratto il 7 dicembre 2018 . Archiviato dall'originale il 23 novembre 2020.
  6. ^ Trevor Perrin (a cura di), Moxie Marlinspike. "The Double Ratchet Algorithm" (20 novembre 2016). Estratto il 7 dicembre 2018 . Archiviato dall'originale il 21 agosto 2019.
  7. whispersystems.org. Apri Sistemi Whisper >> Home . Estratto il 7 dicembre 2018 . Archiviato dall'originale il 9 dicembre 2018.
  8. ^ Katriel Cohn-Gordon , Cas Cremers, Benjamin Dowling, Luke Garratt, Douglas Stebila. "Un'analisi formale della sicurezza del protocollo di messaggistica del segnale" (novembre 2017). Data di accesso: 7 dicembre 2018 Archiviata dall'originale il 22 febbraio 2017.
  9. ^ 1 2 3 Nik Unger , Sergej Dechand Joseph Bonneau, Sascha Fahl, Henning Perl Ian Goldberg, Matthew Smith. "SoK: messaggistica sicura" (2015). Estratto il 7 dicembre 2018 . Archiviato dall'originale il 1 novembre 2020.
  10. ^ Tilman Frosch , Christian Mainka, Christoph Bader, Florian Bergsma, Jorg Schwenk, Thorsten Holz. "Quanto è sicuro TextSecure?" (2014). Estratto il 7 dicembre 2018 . Archiviato dall'originale il 28 febbraio 2019.