Supponiamo che Alice e Peter abbiano ciascuno una chiavetta USB da 4 GB. Incontrano e salvano su entrambe le bacchette due file denominati alice_to_peter.key
(2 GB) e peter_to_alice.key
(2 GB) che contengono bit generati casualmente. Non si incontrano mai più, ma comunicano elettronicamente. Alice mantiene anche una variabile chiamata alice_pointer
e Peter mantiene la variabile chiamata peter_pointer
, entrambi inizialmente impostati su zero.
Quando Alice ha bisogno di inviare un messaggio a Peter, lo fa (dove n
è l'ennesimo byte del messaggio):
encrypted_message_to_peter[n] = message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
encrypted_payload_to_peter = alice_pointer + encrypted_message_to_peter
alice_pointer += length(encrypted_message_to_peter)
(e per la massima sicurezza, la parte usata della chiave può essere cancellata)
Peter riceve encrypted_payload_to_peter
, legge alice_pointer
memorizzato all'inizio del messaggio e fa:
message_to_peter[n] = encrypted_message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
E per la massima sicurezza, dopo aver letto il messaggio cancella anche la parte usata della chiave.
- EDIT: in effetti questo passo con questo semplice algoritmo (senza controllo di integrità e autenticazione) diminuisce la sicurezza, vedi il post di Paŭlo Ebermann di seguito.
Quando Peter ha bisogno di inviare un messaggio ad Alice, eseguono il contrario, questa volta con peter_to_alice.key
e peter_pointer
.
Con questo schema banale possono inviare ogni giorno per i prossimi 50 anni 2 GB / (50 * 365) = ~ 115kB di dati crittografati in entrambe le direzioni. Se hanno bisogno di più dati da inviare, potrebbero usare chiavi più grandi, ad esempio con gli attuali HD da 2TB (1TB), sarebbe possibile scambiare 60 MB al giorno per i prossimi 50 anni! Sono molti dati in pratica; ad esempio, utilizzando la compressione è più di un'ora di comunicazione vocale di alta qualità.
Mi sembra che non ci sia modo per un utente malintenzionato di leggere i messaggi crittografati senza le chiavi, perché anche se hanno un computer infinitamente veloce, con la forza bruta possono ottenere tutti i possibili messaggi sotto il limite, ma questo è un numero astronomico di messaggi e l'attaccante non sa quale di essi è il messaggio effettivo.
Ho ragione? Questo schema di comunicazione è davvero assolutamente sicuro? E se è sicuro, ha il suo nome? La crittografia XOR è ben nota, ma sto cercando il nome di questa concreta applicazione pratica utilizzando tasti grandi su entrambi i lati? Mi sto umilmente aspettando che questa applicazione sia stata inventata da qualcuno prima di me. : -)
Nota: se è assolutamente sicuro, è sorprendente, perché con i dispositivi di archiviazione di oggi a basso costo, sarebbe molto più economico fare comunicazioni sicure rispetto alla costosa crittografia quantistica, e questo ha una sicurezza equivalente!
Modifica
Penso che questo sarà più pratico in futuro, dato che i costi di archiviazione diminuiscono. Può risolvere per sempre le comunicazioni sicure. Oggi non si ha certezza se qualcuno attacca con successo i cifrari esistenti anche un anno dopo e rende le sue implementazioni spesso costose non sicure. In molti casi, prima che avvenga la comunicazione, quando entrambe le parti si incontrano personalmente, è il momento di generare le chiavi. Penso che sia perfetto per la comunicazione militare, ad esempio tra sottomarini che possono avere HD con tasti grandi, e centrale militare può avere una HD per ogni sottomarino. Potrebbe anche essere pratico nella vita di tutti i giorni, ad esempio per controllare il tuo conto bancario, perché quando crei il tuo account ti incontri con la banca ecc.