Utilizzo di AES come Cipher Stream

4

Ho bisogno di inviare un sacco di piccoli messaggi che di solito sono compresi tra 128 bit e 256 bit e ogni messaggio è crittografato con una chiave AES a 128 bit separata. Pertanto, per inviare ogni messaggio con la chiave richiederebbero tra 256 e 384 bit di dati. Se un messaggio è lungo 129 bit, richiederebbe comunque la crittografia di 2 blocchi AES e la dimensione del messaggio con la chiave aumenterebbe a 384 bit.

Per questo motivo, sto pensando che posso aumentare il throughput usando AES come codice di streaming. La soluzione che ho trovato è semplicemente quella di utilizzare la chiave per crittografare un messaggio di tutti gli 0 con dimensioni arrotondate ai 128 bit più vicini, utilizzando AES e una modalità di crittografia idonea non autenticata come CTR. Quindi, prendi gli zeri crittografati e XOR con il testo in chiaro per ottenere un testo cifrato della stessa dimensione. Mi rendo conto che ogni chiave può essere utilizzata solo una volta, perché dato il testo in chiaro e il testo cifrato, il flusso può essere ripristinato, ma questo non è un problema nella mia situazione perché ogni chiave viene utilizzata solo una volta. La mia domanda è: questo metodo è sicuro e ha altri avvertimenti come l'attacco in chiaro che ho menzionato?

    
posta tomKPZ 10.08.2014 - 22:10
fonte

1 risposta

11

La modalità CTR riguarda la crittografia dei dati generando un flusso pseudo-casuale dipendente dalla chiave e XORing con i dati; quindi quello che descrivi in realtà è la modalità CTR, e tu non devi farlo tu stesso. Detto altrimenti, crittografando un gruppo di zeri e poi eseguendo il conteggio dei risultati con i tuoi dati effettivi, stai semplicemente facendo un inutile XOR extra con zero.

(Sei strongmente incoraggiato non a cercare di inventare le modalità di crittografia da solo se non hai completamente padroneggiato la progettazione delle modalità di crittografia e le persone che sono qualificate per eseguire tali progetti in realtà considerare saggiamente che anche loro non possono fare correttamente il lavoro correttamente.)

La modalità CTR è molto vulnerabile al riutilizzo delle chiavi, quindi è meglio che tu, in effetti, non riutilizzi un valore chiave; in alternativa, è possibile riutilizzare una chiave se si utilizza una "IV sufficientemente distinta" (poiché il CTR funziona crittografando i valori successivi di un contatore, è possibile ottenere il riutilizzo di una chiave finché non si riutilizza un valore contatore), ma il IV deve essere noto sia al mittente che al ricevente, il che può essere un problema in alcuni casi d'uso (l'aggiunta di una IV esplicita a ciascun messaggio aumenta la dimensione, IV implicito come il conteggio dei messaggi non può essere necessariamente usato se i messaggi possono essere persi oi ricevitori sono apolidi) . A parte questo, una modalità non autenticata ha la debolezza generica, anzi, di non essere autenticata, il che può essere molto fastidioso quando ci sono attaccanti attivi che girano attorno (e gli scenari con attaccanti passivi tendono ad essere non realistici). Inoltre, la modalità CTR non implica riempimento, quindi la lunghezza dei dati crittografati è uguale alla lunghezza dei dati in chiaro, che è ciò che si desidera, ma significa anche che la lunghezza dei dati in chiaro perde - a seconda del contesto, questo può o meno essere un problema.

Entro i limiti espressi sopra, la modalità CTR è buona quanto può ottenere una cosa del genere.

    
risposta data 10.08.2014 - 23:33
fonte

Leggi altre domande sui tag