Come funziona il protocollo del segnale, usato da WhatsApp?

16

Voglio capire il processo del Protocollo del segnale. Ho google, ma non riesco a trovare nessun buon articolo o tutorial.

Voglio capire la definizione e la funzionalità di base del Signal Protocol, e sarebbe bello se fosse disponibile qualsiasi diagramma che descrivesse il processo.

    
posta Taha Kirmani 23.04.2016 - 11:08
fonte

1 risposta

14

Dai un'occhiata a questo white paper tecnico di WhatsApp, recentemente si sono trasferiti al Signal Protocollo per la crittografia e2e.

Tipi di chiave pubblica

  • Identity Key Pair - Una coppia di chiavi Curve25519 a lungo termine, generato al momento dell'installazione.
  • Signed Pre Key - Una coppia di chiavi a medio termine Curve25519, generato al momento dell'installazione, firmato dall'Identity Key e ruotato a scadenze periodiche.
  • One-Time Pre Keys - Una coppia di coppie di chiavi Curve25519 per una tempo di utilizzo, generato al momento dell'installazione e reintegrato secondo necessità. Tipi di chiave di sessione
  • Root Key - Un valore di 32 byte utilizzato per creare Chiavi di catena.
  • Chain Key - Un valore di 32 byte utilizzato per creare un messaggio Keys.
  • Message Key - Un valore di 80 byte utilizzato per crittografare il messaggio contenuto. 32 byte vengono utilizzati per una chiave AES-256, 32 byte per a Chiave HMAC-SHA256 e 16 byte per IV.

Per stabilire una sessione:

  1. Il client di avvio ("iniziatore") richiede al pubblico Identity Key , pubblico Signed Pre Key e pubblico unico One-Time Pre Key per il destinatario.
  2. Il server restituisce i valori della chiave pubblica richiesti. Un One-Time Pre Key viene usato una sola volta, quindi viene rimosso dalla memoria del server dopo essere stato richiesto. Se l'ultimo batch di One-Time Pre Keys del destinatario è stato consumato e il destinatario non è stato reintegrato loro, non verrà restituito One-Time Pre Key .
  3. L'iniziatore salva Identity Key del destinatario come Irecipient , il Signed Pre Key come Srecipient e One-Time Pre Key come Orecipient .
  4. L'iniziatore genera una coppia di chiavi Curve25519 effimera, Einitiator .
  5. L'iniziatore carica il proprio Identity Key come Iinitiator .
  6. L'iniziatore calcola un segreto principale come master_secret = ECDH(Iinitiator, Srecipient) || ECDH(Einitiator, Irecipient) || ECDH(Einitiator, Srecipient) || ECDH(Einitiator, Orecipient) . Se non c'è One Time Pre Key , l'ECDH finale viene omesso.
  7. L'iniziatore utilizza HKDF per creare un Root Key e Chain Keys da master_secret .

Impostazione della sessione di ricezione

Dopo aver creato una sessione di crittografia di lunga durata, l'iniziatore può immediatamente inizia a inviare messaggi al destinatario, anche se il destinatario è offline. Fino a quando il destinatario risponde, l'iniziatore include le informazioni (nel file intestazione di tutti i messaggi inviati) che il destinatario richiede per creare un corrispondente sessione. Questo include Einitiator dell'iniziatore e Iinitiator .

Quando il destinatario riceve un messaggio che include la configurazione della sessione Informazioni:

  1. Il destinatario calcola il master_secret corrispondente utilizzando le proprie chiavi private e le chiavi pubbliche pubblicizzate nell'intestazione di il messaggio in arrivo.
  2. Il destinatario cancella il One-Time Pre Key utilizzato dall'iniziatore.
  3. L'iniziatore usa HKDF per ottenere un Root Key corrispondente e Chain Keys da master_secret .
risposta data 23.05.2016 - 02:58
fonte

Leggi altre domande sui tag