Come calcola il master secret nel protocollo di crittografia utilizzato da WhatsApp?

4

Ho letto l'algoritmo alla base della crittografia di WhatsApp in questo documento . Non riesco a capire come l'iniziatore calcola un master secret.

The initiator calculates a master secret as:

master_secret = ECDH(Iinitiator, Srecipient) || ECDH(Einitiator, Irecipient) || ECDH(Einitiator, Srecipient) || ECDH(Einitiator, Orecipient).

If there is no One Time Pre Key, the final ECDH is omitted.

    
posta Chinmoy Samanta 09.04.2018 - 14:02
fonte

2 risposte

2

Il ECDH() si riferisce a Curva ellittica Diffie-Hellman . Viene menzionato nel documento solo indirettamente facendo riferimento al Protocollo del segnale di Open Whisper Systems e Curve25519 . Questo è un white paper commercialmente focalizzato, quindi non ha proprio intenzione di entrare nella matematica.

La ragione per utilizzare 3-4 diverse coppie di chiavi Diffie-Hellman e concatenare ( || ) le operazioni è di impedire l'uso di chiavi private rubate per decrittografare qualsiasi comunicazione precedentemente acquisita: chiavi a medio termine e una tantum cambiato nel tempo, mentre la coppia di chiavi a lungo termine dimostra che è sempre la stessa persona. Poiché tutte queste chiavi sono necessarie, restituisce anche negabilità plausibile ; tutte le prove di autenticità dei messaggi decrittografati vengono perse al termine della conversazione.

    
risposta data 09.04.2018 - 16:21
fonte
1

Riepilogo rapido

Parametri generati dall'iniziatore :

1) Iinitiator , Identity Key (keypair) dell'iniziatore;

2) Einitiator , una coppia di chiavi a curva ellittica effimera (cioè temporanea).

Parametri generati dal destinatario :

3) Irecipient , la chiave di identità del destinatario (keypair);

4) Srecipient , la chiave pre firmata del destinatario (keypair);

5) Orecipient , la chiave pre-chiave del destinatario (coppia di tasti).

ECDH (Ka, Kb) è la procedura Elliptic Curve Diffie Hellman tra due feste, A con una keypair Ka e B con una keypair Kb.

|| è l'operatore di concatenazione.

La formula

 master_secret = ECDH(Iinitiator, Srecipient) || ECDH(Einitiator, Irecipient) || ECDH(Einitiator, Srecipient) || ECDH(Einitiator, Orecipient)

significa che il protocollo ECDH viene eseguito quattro volte, usando come keypairs:

1) Iinitiator e Srecipient;

2) Einitiator and Irecipient;

3) Einitiator and Srecipient;

4) Einitiator and Orecipient,

, rispettivamente. Come puoi vedere, ogni volta vengono utilizzati due keypair, ognuno dei quali appartiene a una parte diversa, il che significa che tutte quelle operazioni ECDH(. , .) sono valide.

Ciascuna operazione genera un segreto condiviso senza rivelarlo direttamente a chiunque altro stia ascoltando sul canale, grazie alle proprietà del protocollo Diffie-Hellman.

I risultati sono concatenati, formando così il segreto principale.

    
risposta data 09.04.2018 - 16:01
fonte

Leggi altre domande sui tag