Quanto è sicuro il codice Vigenere per i dati casuali?

5

Situazione tradizionale

È facile decifrare un testo cifrato crittografato con codice Vigenere , se sai che il testo in chiaro è in una lingua naturale come l'inglese. Esistono due metodi per scoprire la chiave utilizzata per crittografare il testo in chiaro. O conosci le frequenze di certi personaggi che si verificano più spesso di altri ( e per l'inglese) o conosci una parola che si verificherà nel testo in chiaro ( the , a , ecc. Per l'inglese).

Casuale sicuro crittograficamente

Che cosa succede se il testo in chiaro è in realtà CSR (crittograficamente sicuro casuale) e lo crittografa utilizzando il codice Vigenere con una chiave CSR.

Diciamo che riusciamo a riutilizzare la chiave quattro volte (per tenere conto dei difetti se la randomizzazione non è CSR?). Inoltre, la chiave è sufficientemente grande in modo che la forzatura bruta non sia un'opzione (ad esempio, la chiave può essere 1KB, e quindi la cifratura e il testo in chiaro è 4KB).

Sarebbe possibile craccarlo, anche se stai riutilizzando la stessa chiave (la chiave è anche CSR) ma non grande come i dati in testo semplice?

o: quanto è sicuro questo rispetto ad altri metodi di crittografia / decrittografia?

Contesto

Nel caso in cui ti chieda: "perché vuoi criptare dati casuali?":

Bene, se la risposta è no, e quindi è impossibile decifrarla. Ciò significherebbe che una volta stabilito un segreto condiviso tra due persone, potresti stabilire una connessione teoricamente sicura, vero? Perché una volta che hai una chiave segreta condivisa "A" di 1 KB. Quindi è possibile creare una chiave segreta condivisa "B" di 2 KB utilizzando "A" due volte sui dati generati casualmente. Quindi puoi utilizzare 1 KB di "B" come blocco unico sulle tue comunicazioni in testo normale in inglese. E potresti usare l'altro 1KB di "B" per comunicare in sicurezza la prossima chiave di dimensioni 2KB e così via.

    
posta Yeti 16.05.2014 - 21:10
fonte

1 risposta

4

Sono d'accordo che sarebbe difficile (possibilmente impossibile) rompere un cifrario di Vigenere su dati casuali che non vengono mai usati ed è semplicemente casuale.

Ma il tuo schema in cui usi quei dati casuali come una volta sola non avrebbe una perfetta sicurezza teorica informativa come un one-time-pad.

Avrà la sicurezza di un codice Vigenere, l'anello più debole della catena. Non saresti in grado di attaccare direttamente la cifra di Vigenere sui dati casuali, ma potresti facilmente attaccare la combinazione.

Per errore ho erroneamente ricordato il cifrario di Vigenere con la sua operazione primaria essendo XOR non oltre lo spazio dei caratteri modulo. Il mio errore rende banale l'attacco al tuo schema a causa delle proprietà di XOR. Chiamerò il mio schema errato VigenereXOR.

Il vecchio esempio che utilizza VigenereXOR:

 import scipy
 rand_bytes=[scipy.random.random_integers(256) for i in range(512)] # 512 random bytes
 vig_key = "MYSECRET"*64
 vig_key_bytes = [ord(c) for c in vig_key] 
 encrypted_random = [(r ^ vk) for r,vk in zip(rand_bytes, vig_key_bytes)]
 message = "But your scheme where you use that random data as a one-time-pad would not have informational theoretic perfect security like a one-time-pad."
 message_bytes = [ord(c) for c in message]
 encrypted_message = [(r ^ m) for r,m in zip(rand_bytes, message_bytes)]

Ora se un utente malintenzionato osserva sia encrypted_random che encrypted_message , possono XOR insieme, a quel punto avrebbero il messaggio originale semplicemente crittografato con il codice Vigenere come (A XOR B) XOR (B XOR C) = A XOR C; quindi tutti gli attacchi di frequenza sul messaggio Vigenere potrebbero essere applicati direttamente.

Sulla vera cifra di Vigenere:

 encrypted_random = [(r + vk) % 256 for r,vk in zip(rand_bytes, vig_key_bytes)]

potrebbero esserci attacchi sofisticati su di esso. Per lo meno ovviamente non hai una sicurezza perfetta dallo schema. Se lo schema avesse una sicurezza perfetta, la lunghezza della chiave di Vigenere sarebbe irrilevante e ovviamente non lo è - potrebbe essere usata una chiave di un personaggio - che sarebbe banalmente attaccabile. Si può notare che è ancora possibile costruire (A + B mod 256) XOR (B XOR C) = ((A + B mod 256) XOR B) XOR C. (A + B mod 256) XOR B non è distribuito casualmente ( ad es., se A = 8, allora le uniche possibilità per (A + B mod 256) XOR B sono 8,24,56,120,248 dopo aver provato tutti i 256 valori di B). In questo modo si possono fare progressi di questo tipo per rendere questo attacco molto meglio della forza bruta.

È un risultato di un libro di testo comune (con una dimostrazione semplice) che non si può ottenere una sicurezza perfetta basata sull'informazione se lo spazio delle chiavi (ciò che è stato scambiato prima della crittografia) non è grande almeno quanto lo spazio dei messaggi. Vedi il classico documento 1949 di Shannon .

    
risposta data 16.05.2014 - 21:23
fonte

Leggi altre domande sui tag