Come si può verificare che la chiave pubblica dei server di WhatsApp appartenga alla persona che mi aspetto che sia?

17

WhatsApp ha recentemente annunciato la crittografia end-to-end su tutte le comunicazioni. Sebbene sia una mossa impressionante, ho ancora un grosso punto interrogativo aperto.

Gli articoli e questo white paper suggeriscono che la chiave pubblica, una volta generata, viene archiviata sul server. Quando voglio parlare con un'altra persona, chiedo al server di WhatsApp la chiave pubblica e la uso nella comunicazione. Lo stesso white paper lo dice sulla verifica delle chiavi:

WhatsApp users additionally have the option to verify the keys of the other users with whom they are communicating so that they are able to confirm that an unauthorized third party (or WhatsApp) has not initiated a man-in-the-middle attack. This can be done by scanning a QR code, or by comparing a 60-digit number.

Oh, è bello, come vengono generate queste cose?

The QR code contains:

  1. A version.
  2. The user identifier for both parties.
  3. The full 32-byte public Identity Key for both parties.

When either user scans the other’s QR code, the keys are compared to ensure that what is in the QR code matches the Identity Key as retrieved from the server.

Ma ... questi sono tutti dettagli che il server conosce e non richiede nulla di speciale da parte dell'altra persona (non menziona la firma del QR). Che ne dici del numero di 60 cifre?

The 60-digit number is computed by concatenating the two 30-digit numeric fingerprints for each user’s Identity Key. To calculate a 30-digit numeric fingerprint:

  1. Iteratively SHA-512 hash the public Identity Key and user identifier 5200 times.
  2. Take the first 30 bytes of the final hash output.
  3. Split the 30-byte result into six 5-byte chunks.
  4. Convert each 5-byte chunk into 5 digits by interpreting each 5-byte chunk as a big-endian unsigned integer and reducing it modulo 100000.
  5. Concatenate the six groups of five digits into thirty digits.

Ancora una volta, questi sono dettagli che il server può facilmente calcolare e presentarmi come dati di verifica validi.

Sto fraintendendo questo, o non c'è un vero modo di verificare che la chiave pubblica con cui sto parlando appartiene alla persona che penso che faccia?

    
posta Madara Uchiha 05.04.2016 - 22:24
fonte

1 risposta

3

Sia il codice QR sia il numero di 60 cifre devono essere verificati "fuori banda", ad esempio:

  • Pronunciare il numero ad alta voce in una telefonata
  • Incontro di persona e scansione del codice QR direttamente dall'altro dispositivo
risposta data 05.04.2016 - 23:24
fonte

Leggi altre domande sui tag