Questa semplice comunicazione crittografata XOR è assolutamente sicura?

23

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.

    
posta user3123061 01.06.2014 - 16:51
fonte

4 risposte

50

Sì, questo è un blocco One-Time . Se il materiale chiave non viene mai riutilizzato, è teoricamente sicuro.

Gli svantaggi sono che avresti bisogno di una chiave per ogni coppia di principi comunicanti e avresti bisogno di un modo sicuro per scambiare il materiale chiave prima della comunicazione.

    
risposta data 01.06.2014 - 17:03
fonte
32

Poiché la risposta Vatine indica che il tuo algoritmo è fondamentalmente un one-time-pad.

Tuttavia, per commentare una delle tue note:

Note: If its absolutely secure then its amazing because with today low cost large memories it is practicaly much cheeper way of secure communication than expensive quantum cryptography and with equivalent security!

La mia risposta è no, non è sorprendente. Il diavolo è sempre nei dettagli, e il diavolo qui è nello scambio di chiavi. Il tuo metodo dipende da uno scambio di battute faccia a faccia impeccabile. Non posso permettermi di inviare a James Bond un disco flash da 4 GB per ogni commerciante su Internet ogni volta che voglio comprare qualcosa o avere altre connessioni sicure.

E infine, l'aspetto XOR del tuo algoritmo non è importante. Un codice di sostituzione semplice va bene con un OTP. Il punto di forza dell'OTP è che la chiave non viene mai riutilizzata e si presume che James Bond sostituisca in modo impeccabile le chiavi per entrambe le parti (vale a dire un precedente scambio di chiavi sicure)

    
risposta data 01.06.2014 - 18:42
fonte
21

Mentre il one-time-pad ha una garanzia di privacy incondizionata (matematicamente dimostrata) contro un utente malintenzionato che può leggere solo messaggi, presenta alcuni punti deboli.

  • Un attaccante che intercetta chi indovina correttamente il testo in chiaro può manipolare il testo cifrato in qualunque cosa desideri (con la stessa lunghezza).

  • Se un utente malintenzionato inserisce o elimina un messaggio (o parte di esso), i puntatori di Alice e Bob non vengono sincronizzati e tutte le comunicazioni future vengono interrotte.

    Aggiornamento: Questo presuppone che entrambe le parti tengano traccia di entrambi i puntatori. Se si invia il valore corrente del puntatore, si è vulnerabili agli attacchi con doppio fuso orario (se si consente di utilizzare lo stesso intervallo di chiavi più volte) o gli attacchi DOS (se non si consente lo stesso intervallo di chiavi da utilizzare più di una volta, ad esempio eliminandoli).

Entrambi questi problemi sono causati dalla mancanza di protezione dell'integrità e dell'autenticazione: hai un cifrario perfetto, ma nessun MAC.

Aggiungi un MAC al tuo protocollo one-time-pad per renderlo effettivamente sicuro. Ogni messaggio dovrebbe avere un "checksum" che garantisce che sia stato effettivamente inviato dal presunto mittente e non sia stato modificato nel mezzo. Inoltre, dovresti inviare un numero di sequenza in modo che il destinatario sappia quale parte della chiave usare quando un messaggio precedente viene perso (o per rifiutare il messaggio se è duplicato) - includilo nel calcolo del checksum.

Un algoritmo MAC usuale farebbe qui, ma suppongo che potresti voler usare un singolo MAC polinomiale per avere la sicurezza corrispondente al tuo one-time pad. (Prendi la chiave MAC dai bit prima o dopo la tua chiave di crittografia, cioè non riutilizzare una chiave per entrambi gli obiettivi.)

    
risposta data 01.06.2014 - 21:48
fonte
4

In realtà non è del tutto sicuro. Ciò che il tuo protocollo perde è la LUNGHEZZA del messaggio comunicato.

Ad esempio, se la spia sa che rispondi con "sì" o "no" e vede la lunghezza = 2, può dedurre che è "no".

In realtà è incredibile quanto si possa dedurre solo da lunghezze note se si può indovinare il contesto.

    
risposta data 02.06.2014 - 14:04
fonte

Leggi altre domande sui tag