Supponiamo che Alice e Peter abbiano ciascuno una chiavetta USB da 4 GB. Si incontrano e salvano su entrambi i bastoncini 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
, entrambe inizialmente impostate su zero.
Quando Alice ha bisogno di inviare un messaggio a Peter, lo fa (dov'è 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 passaggio con questo semplice algoritmo (senza controllo di integrità e autenticazione) riduce la sicurezza, vedi di seguito il messaggio di Paŭlo Ebermann.
Quando Peter ha bisogno di inviare un messaggio ad Alice, fanno 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) = ~ 115 kB di dati crittografati in entrambe le direzioni. Se hanno bisogno di più dati per inviare, potrebbero usare chiavi più grandi, ad esempio con HD da 2 TB di oggi (chiavi da 1 TB), sarebbe possibile scambiare 60 MB / giorno per i prossimi 50 anni! Ci sono molti dati in pratica; ad esempio, usando la compressione è più di un'ora di comunicazione vocale di alta qualità.
Mi sembra che non sia possibile per un aggressore leggere i messaggi crittografati senza le chiavi, perché anche se hanno un computer infinitamente veloce, con la forza bruta possono ottenere tutti i messaggi possibili sotto il limite, ma questo è un numero astronomico dei messaggi e l'attaccante non sa quale di essi sia 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 pratica applicazione concreta che utilizza chiavi di grandi dimensioni su entrambi i lati? Mi aspetto umilmente che questa applicazione sia stata inventata qualcuno prima di me. :-)
Nota: se è assolutamente sicuro, allora è sorprendente, perché con i moderni dispositivi di archiviazione di grandi dimensioni a basso costo, sarebbe molto più economico fare comunicazioni sicure rispetto alla costosa crittografia quantistica, e questo ha una sicurezza equivalente!
EDIT:
penso che questo sarà più pratico in futuro con la riduzione dei costi di archiviazione.Può risolvere comunicazioni sicure per sempre.Oggi non hai alcuna certezza se qualcuno attacca con successo cifre esistenti anche un anno dopo e rende insicure le sue implementazioni spesso costose. 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 di grandi dimensioni, e la centrale militare può avere un 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 incontri la banca ecc.