Più messaggi crittografati noti per avere contenuti corrispondenti (sconosciuti)

3

Una recente discussione sui modi per proteggere i dati attraverso più iterazioni dell'esecuzione di un programma (con ripetute operazioni di lettura / scrittura) ha sollevato una domanda riguardante gli attacchi con testo in chiaro che mi piacerebbe avere una risposta solida.

Se ho più testi cifrati e so che sono stati tutti prodotti dallo stesso testo in chiaro usando lo stesso (sconosciuto) metodo di crittografia ma (sconosciute) chiavi diverse, posso calcolare quale algoritmo e / o chiave è stato usato?

L'argomento era che se il metodo di crittografia è valido, ci dovrebbe essere una minore correlazione tra il carico utile crittografato e il contenuto del messaggio possibile, quindi anche con più copie, dovrebbe essere per lo più indistinguibile dai dati casuali. La mia contro-argomentazione è che qualsiasi algoritmo del mondo reale è improbabile che sia perfetto al 100%, quindi probabilmente non avremo la possibilità 50/50 ideale per un 1 o 0 in ogni dato bit, e con sufficienti ciphertexts che sappiamo che sono dello stesso testo in chiaro, inizierai a vedere alcune correlazioni tra di loro che puoi usare per dedurre le cose su come funziona la crittografia e / o quale contenuto si nasconde dietro di esso.

Supponendo che

  • l'algoritmo è veramente crittografia, non hashing; cioè, è bidirezionale e deve essere decifrato a un certo punto
  • il sistema genera chiavi di crittografia in modo sufficientemente casuale da risultare essenzialmente imprevedibile
  • L'utente malintenzionato non ha accesso alle chiavi di crittografia, solo il messaggio crittografato
  • l'utente malintenzionato può ottenere tutte le diverse versioni del messaggio come preferiscono, ciascuna crittografata con una chiave diversa

è possibile capire come funziona la crittografia e in tal modo invertirla per ottenere il testo in chiaro originale?

    
posta anaximander 27.08.2013 - 16:48
fonte

2 risposte

2

Se il sistema di crittografia è valido, anche notando che due messaggi crittografati con chiavi distinte sono, in effetti, identici, sarebbe considerata una "interruzione". Un algoritmo di crittografia ha un "livello di sicurezza" espresso in bit; quando il livello di sicurezza è k , significa che lo sforzo computazionale per attuare una "pausa" dovrebbe essere sulla quantità di 2 k-1 invocazione della funzione di crittografia sottostante (per essere precisi, la probabilità di successo dovrebbe essere e * 2 -k dove e è lo sforzo, quindi e = 2 k-1 implica una probabilità di successo del 50% per l'attaccante).

Ad esempio, se si utilizza AES con una chiave a 128 bit, allora si suppone di ottenere un "128- bit "livello di sicurezza. Ciò significa che se l'attaccante è pronto a investire abbastanza potenza della CPU per calcolare, ad esempio, 2 70 invocazioni di AES, allora ha probabilità di 2 -58 , alias "1 in 288230376151711744", per avere successo. 2 70 Le invocazioni AES sono uno sforzo notevole; una buona CPU multi-core può produrre circa 2 30 chiamate AES al secondo, quindi stiamo parlando di circa diecimila PC in esecuzione per ... tre anni. E questo raggiunge un tasso di successo considerevolmente inferiore rispetto a vincere milioni di dollari alla lotteria.

Ciò che conta come interruzione è tutto ciò che fa allontanare il sistema dal suo modello teorico, cioè una permutazione pseudocasuale : la crittografia con una determinata chiave è simile alla selezione di una permutazione nello spazio dei messaggi, e una nuova chiave dovrebbe significare una nuova selezione casuale, indipendentemente dalla precedente. Notare che due messaggi cifrati, con due chiavi distinte, procedono dallo stesso messaggio in chiaro, sarebbe un'interruzione, e il miglior metodo di attacco dovrebbe essere quello generico, cioè provare tutte le chiavi possibili finché non viene trovata una corrispondenza. Questo metodo produce le probabilità spiegate sopra, cioè "non funziona realisticamente".

Al momento, non è noto un tale metodo di rottura per AES.

Attenzione ai pensieri obsoleti. Sembra che tu usi le nozioni di "correlazione" e "metodo sconosciuto" che erano adeguate circa cinquanta anni fa, ma la ricerca crittografica è andata avanti un po 'da allora. In particolare:

  • Ora siamo molto severi riguardo alle perdite di informazioni accettabili (le tue "correlazioni"), ovvero non ne accettiamo nessuna. Eppure abbiamo algoritmi candidati (ad esempio AES) che sembrano raggiungere questo alto livello di qualità.

  • I metodi di crittografia sono stati suddivisi in un algoritmo e un tasto . L '"algoritmo" è ciò che diventa codice. L'algoritmo dovrebbe essere pubblico, perché tutta la segretezza è concentrata nella chiave; almeno, non dovrebbe esserci alcun danno nel pubblicare l'algoritmo, se è un bene, e sarebbe molto difficile prevenire tale pubblicazione comunque. Vedi questa risposta per i dettagli.

Ovviamente, se l'algoritmo è stato usato in modo approssimativo, allora tutto va bene. Un algoritmo core come AES è solo un mattone elementare; Elabora blocchi da 16 byte. Per crittografare un messaggio (una possibile lunga sequenza di byte), devi usare il codice a blocchi con una modalità di operazione , che è una questione di sottigliezza e può essere fatta male - sufficientemente male da implicare una perdita di sicurezza totale.

Ci possono essere anche attacchi side-channel che sfruttano le fughe di informazioni attraverso il comportamento dell'implementazione della crittografia, ad es. attraverso tempistiche . Ad esempio, molte implementazioni AES utilizzano tabelle in memoria, che implicano accessi alla memoria dipendenti dai dati e dalle chiavi, quindi il comportamento della cache; in condizioni di laboratorio, a volte questo è stato sfruttato per estrarre la chiave. Questo non è un attacco contro l'algoritmo ma contro la sua implementazione . In conclusione, l'implementazione di algoritmi crittografici è un compito difficile.

Tutto quanto sopra riguarda la crittografia simmetrica, ma lo stesso tipo di ragionamento può essere applicato a crittografia asimmetrica , ad es. con RSA. Una chiave RSA a 2048 bit, correttamente generata e utilizzata, dovrebbe offrire un livello di sicurezza di circa 112 bit, che è più che sufficiente.

    
risposta data 27.08.2013 - 17:22
fonte
0

La semplice risposta è no. La crittografia strong è molto strong se usata correttamente. Per i cifrari a blocchi molto dipenderà dalla modalità di funzionamento. La modalità controlla quali input sono usati per ogni blocco. La crittografia è deterministica, quindi dato lo stesso input produrrà sempre la stessa uscita, tuttavia con l'uso intelligente di IV casuali e il concatenamento dei blocchi diventa possibile produrre messaggi indistinguibili.

link

Una modalità iniziale e semplicistica era la BCE e generalmente non viene più utilizzata perché i messaggi sono distinguibili. Crittografare "ciao mondo" per una determinata chiave produrrà sempre lo stesso identico risultato. Tuttavia, anche con ECB dato un numero arbitrario di messaggi in chiaro e testo cifrato, l'attaccante non può derivare la chiave più velocemente della forza bruta.

Le modalità di blocco successive e più potenti rendono il messaggio ancora meno probabile che sia distinguibile. Ora la chiave è "usata correttamente". L'IV non dovrebbe essere ripetuto per una data chiave e testo in chiaro. Se viene ripetuto in alcune modalità di blocco, ciò comporta che il messaggio sia distinguibile, ma in CTR, ad esempio, riutilizzare la stessa IV con la stessa chiave comporterà un compromesso del sistema.

La semplice risposta è che i primitivi crittografici della crittografia moderna sono ben compresi, sottoposti a peer review e soggetti a una estesa crittanalisi. È altamente improbabile che saranno compromessi durante la notte. D'altra parte un'implementazione errata può portare a sistemi falliti.

    
risposta data 01.07.2015 - 02:55
fonte

Leggi altre domande sui tag