Domanda:
Vantaggi e svantaggi di Stream vs Block Ciphers
Eric Warriner
2010-11-14 20:32:28 UTC
view on stackexchange narkive permalink

Gli algoritmi di crittografia come Blowfish, AES, RC4, DES e Seal sono implementati in una delle due categorie di crittografia. Quali sono i vantaggi / svantaggi del tipo di cifratura?

Cinque risposte:
#1
+49
AviD
2010-11-15 01:18:41 UTC
view on stackexchange narkive permalink

Sebbene entrambi siano cifrari simmetrici, i cifrari a flusso si basano sulla generazione di un keystream crittografico "infinito" e utilizzandolo per crittografare un bit o byte alla volta (simile al pad monouso), mentre i cifrari a blocchi funzionano su blocchi di dati (ad esempio blocchi) alla volta, spesso combinando blocchi per una maggiore sicurezza (ad esempio AES in modalità CBC).

  • I cifrari a flusso sono in genere più veloci del blocco, ma questo ha il suo prezzo.
  • I cifrari a blocchi in genere richiedono più memoria, poiché funzionano su blocchi di dati più grandi e spesso sono "trasferiti" dai blocchi precedenti, mentre poiché i cifrari a flusso funzionano solo su pochi bit alla volta hanno un numero relativamente basso requisiti di memoria (e quindi più economici da implementare in scenari limitati come dispositivi incorporati, firmware e specialmente hardware).
  • I cifrari stream sono più difficili da implementare correttamente e soggetti a punti deboli in base all'utilizzo, poiché i principi sono simili al pad one-time, il keystream ha requisiti molto rigidi. D'altra parte, di solito questa è la parte difficile e può essere scaricata ad es. un box esterno.
  • Poiché i cifrari a blocchi crittografano un intero blocco alla volta (e inoltre hanno modalità di "feedback" che sono più raccomandate), sono più suscettibili al rumore durante la trasmissione, cioè se sbagli una parte del dati, tutto il resto è probabilmente irrecuperabile. Mentre con le cifrature a flusso i byte vengono crittografati individualmente senza connessione ad altri blocchi di dati (nella maggior parte delle crittografie / modalità) e spesso hanno il supporto per le interruzioni sulla linea.
  • Inoltre, le crittografie a flusso non forniscono protezione o autenticazione dell'integrità, mentre alcune crittografie a blocchi (a seconda della modalità) possono fornire protezione dell'integrità, oltre alla riservatezza.
  • Per tutto quanto sopra, le cifrature a flusso sono generalmente le migliori per i casi in cui la quantità di dati è sconosciuta o continua, come i flussi di rete. Cifrari a blocchi, d'altra parte, o più utili quando la quantità di dati è pre-nota, come un file, campi dati o protocolli di richiesta / risposta, come HTTP, dove la lunghezza del messaggio totale è già nota al inizio.
Il secondo punto non è preciso. La differenza di memoria dovuta al "riporto" dai blocchi precedenti è trascurabile e molto inferiore alla differenza di memoria tra algoritmo e algoritmo (ad esempio, confronta RC4, con i suoi 256 byte di stato interno, con AES, con 0 byte di stato interno in alcune impiantazioni). L'ultimo proiettile fa false distinzioni ed è un cattivo consiglio.
@D.W. Il secondo punto era "in generale", come è tipico del caso (ma accetto che non sia strettamente accurato).
@D.W. hai qualche base per il tuo commento sull'ultimo punto? Dov'è la falsa distinzione e perché dici che questo è un cattivo consiglio?
sì, ho una base per il mio commento sull'ultimo punto. Sembra solo confuso su tutta la linea. I cifrari a blocchi vanno bene per lo streaming di dati; vedere, ad esempio, modalità CBC, modalità CTR, ecc., per varie modalità di funzionamento che funzionano bene con i dati in streaming. I codici a blocchi non sono limitati ai casi in cui la quantità di dati è nota in anticipo. Non sono a conoscenza di alcun motivo per considerare i cifrari di flusso migliori dei cifrari a blocchi per i dati in streaming (nonostante il nome).
D.W. è corretto: la parola "Stream" in Stream Cipher indica che esiste un keystream, un flusso di bit che viene combinato con il testo in chiaro per produrre il testo cifrato. Non riflette la composizione del testo in chiaro. Ovviamente questo è un dettaglio che spesso confonde sviluppatori e ingegneri con i quali quest'ultimo è solitamente implicito. I cifrari a blocchi possono essere utilizzati per manipolare correttamente lo streaming di testo in chiaro. Inoltre, spesso confonde il fatto che i cifrari a blocchi possono essere usati come cifrario a flusso con una modalità operativa appropriata e quando la dimensione del blocco è atomica (ad esempio 1 byte).
Hai dimenticato un punto elenco: quale è più sicuro?
@trusktr questa è una domanda senza contesto nel vuoto :-). Per entrambi, dipenderà da quale algoritmo, come viene utilizzato, per cosa viene utilizzato, ecc ... In breve dipende dalla situazione, e ci sono soluzioni buone (cioè "abbastanza sicure") per entrambi, è un compromesso su altri fattori però. La risposta di Thomas copre bene questi punti.
Dolce, grazie per la risposta. :) Anche se sono entrambi protetti in modo uniforme (a seconda dello scenario medio), è comunque un buon punto da dire.
stai parlando di modalità feedback, ma se ho capito bene questo è in cifrari a flusso non cifrati a blocchi
@David 天宇 La modalità feedback di Wong è una caratteristica dei cifrari a blocchi, un modo per "connettere" i diversi blocchi. Vedi ad es. CBC, OFB ... http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
#2
+27
Thomas Pornin
2011-07-23 02:37:38 UTC
view on stackexchange narkive permalink

Un cifrario a blocchi è un algoritmo versatile che implementa una permutazione dipendente dalla chiave di valori che sono sequenze di un numero fisso di bit (chiamati "blocchi"). Può essere utilizzato per vari ruoli in molti tipi di protocolli crittografici. Uno di questi ruoli è la crittografia di massa di lunghi flussi di dati; per ottenere una cosa del genere, il codice a blocchi deve essere utilizzato con una modalità operativa appropriata (nota anche come "modalità di concatenamento"), quella tradizionale è CBC e la modalità più recente alla moda è CTR.

Un cifrario a flusso è un algoritmo specializzato per la crittografia di massa di lunghi flussi di dati. L'idea è che, rinunciando alla versatilità del cifrario a blocchi, sarebbe possibile creare un algoritmo più efficiente (cioè qualcosa che cripta i dati più velocemente).

Entrambi i cifrari a blocchi con una modalità di crittografia orientata al flusso e cifrari di flusso, può incorrere in problemi di sicurezza se la stessa chiave viene utilizzata due volte, per due flussi distinti, senza avere un vettore di inizializzazione appropriato, unico / abbastanza casuale. Per la crittografia CBC, l'IV deve essere una nuova sequenza di bit uniformemente casuale, della stessa dimensione di un blocco, per ogni nuovo messaggio. I buoni cifrari a flusso accettano anche un IV. Un cifrario a flusso tradizionale chiamato RC4 è privo di IV (la sua specifica non indica dove o come potrebbe essere inserito un IV), il che ha portato a molto caos e ha dato un brutto nome al concetto di cifratura a flusso.

Per cifrari di flusso più recenti, più sicuri (e più veloci), consulta il portfolio eSTREAM. Questi algoritmi sono stati sottoposti a un'analisi piuttosto approfondita da molti crittografi e sono considerati "abbastanza sicuri".

Un cifrario a flusso può essere convertito in un generatore di numeri pseudocasuali crittografando una lunga sequenza di byte di valore zero. In realtà, molti (ma non tutti) i cifrari a flusso funzionano internamente essendo un PRNG, generando una lunga sequenza di byte pseudo-casuali dipendenti dalla chiave, che viene successivamente combinata (da XOR bit per bit) con i dati da crittografare (o decrittografare), quindi crittografare zero byte equivale quindi a omettere del tutto lo XOR. Pertanto, i cifrari a flusso vengono spesso utilizzati come PRNG personalizzato.

Hai dimenticato di menzionare quale è generalmente più sicuro (stream vs block).
Non ho dimenticato, perché l'affermazione non ha senso generale. Sia i cifrari a blocchi che quelli a flusso possono fornire una protezione adeguata, se applicati correttamente e non presentano punti deboli strutturali.
"la versatilità del cifrario a blocchi" Ho problemi con questa parte.Cosa rende un codice a blocchi intrinsecamente più versatile?I cifrari a blocchi possono essere utilizzati per crittografare e autenticare sia i flussi (es.TLS) che i dati pacchettizzati (es.ESP) e lo stesso per i cifrari a flusso (es.TLS o DTLS).Ci sono casi in cui un cifrario a flusso sembra più "naturale" (ad es. Crittografare l'audio) o un cifrario a blocchi sembra più "naturale" (ad es. Crittografare i dischi) ma non vedo molte lacune nelle applicazioni ragionevoli per nessuno dei due.
#3
+10
Bruno Rohée
2011-04-02 18:45:20 UTC
view on stackexchange narkive permalink

Un vantaggio dei cifrari a flusso che non sono stati menzionati in precedenza è che non hanno bisogno di riempimento (i cifrari a blocchi funzionano su blocchi completi, quindi se non hai abbastanza dati devi generarne altri in qualche modo). E sorpresa (non proprio, la crittografia è il campo in cui Murphy è ovunque), il padding può essere sbagliato, come esemplificato ad esempio in Practical Padding Oracle Attacks.

Anche la sicurezza dei cifrari a blocchi dipende molto dalla loro modalità di funzionamento, a volte vedi ancora ECB usata qua e là e non è molto meglio di nessuna criptovaluta.

Fondamentalmente non puoi dire che una è migliore dell'altra, bisogna guardare un sistema crittografico completo per dare un giudizio sulla sicurezza.

nel primo paragrafo: ci sono modalità di funzionamento per i cifrari a blocchi che non necessitano di riempimento: ad esempio, modalità CTR. Quindi questo non è un vantaggio esclusivo dei cifrari a flusso. Ma +1 al tuo ultimo paragrafo - ben detto!
Beh, direi che CTR e OFB sono costruzioni per creare un cifrario a flusso da un cifrario a blocchi. Questa è un'altra grande cosa con i cifrari a blocchi, possono essere facilmente usati come blocchi di costruzione per altre cose, che si tratti di cifrari a flusso o hash unidirezionali. I cifrari a flusso non sono così versatili.
Hai dimenticato di menzionare quale è generalmente più sicuro (stream vs block).
Nessuno è più sicuro per natura, è davvero come li usi.
#4
+1
gbr
2010-11-14 20:54:30 UTC
view on stackexchange narkive permalink

Stream Ciphers crittografa i dati in chiaro con un flusso casuale di bit (di solito con uno XOR perché può essere invertito facilmente). Se disponi di dati a 128 bit, utilizzerai uno strem psedurandom a 128 bit (la tua chiave) per crittografare.

Block Ciphers crittografa i dati di testo semplice un blocco alla volta con la stessa trasformazione (basata sulla chiave ). Quindi hai i tuoi dati a 128 bit, il cifrario li spezza in blocchi (come 4 blocchi da 32 bit) e applica la stessa trasformazione a ogni blocco ottenendo 4 blocchi crittografati, che combinati formeranno il crittogramma finale.

Ovviamente a causa di questo i Block Cyphers sono più sicuri ma costosi da usare in termini di complessità hardware coinvolti. Stream Cipher sono più veloci ed "economici" ma possono essere soggetti a problemi di sicurezza se implementati in modo errato.

L'ultimo paragrafo contiene una serie di errori di fatto. I codici a blocchi non sono più sicuri in generale, né sono necessariamente peggiori nell'hardware. I cifrari di flusso non sono necessariamente più veloci o più economici.
@D.W .: Ciononostante, i cifrari a flusso sono _usually_ più veloci o meno costosi dei cifrari a blocchi, perché questo è l'affare: un algoritmo meno versatile scambiato per prestazioni migliorate. Un cifrario a flusso che sembra essere più lento e più costoso di AES / CTR non viene utilizzato affatto.
Hai dimenticato di menzionare quale è generalmente più sicuro (stream vs block).
#5
-3
yfeldblum
2011-04-02 19:42:15 UTC
view on stackexchange narkive permalink

I dati (il materiale da crittografare) di solito arrivano in stream. Per crittografarlo, dobbiamo impiegare un cifrario a flusso, cioè un algoritmo di crittografia adatto per l'uso su un flusso di dati. Un flusso è una sequenza di bit (o byte) di lunghezza arbitraria, variabile o non specificata.

I migliori cifrari che abbiamo inventato finora sono generalmente cifrari a blocchi. Un cifrario a blocchi è in grado di crittografare un singolo blocco di dati di dimensioni fisse; e, dalle prove che ci circondano, a quanto pare è più facile costruire buoni cifrari a blocchi che cifrari a flusso.

Buone notizie, però. Usando un dato cifrario a blocchi in alcuni modelli particolari (una "modalità di funzionamento"), e con l'aiuto di particolari strategie di riempimento, possiamo trasformare qualsiasi cifrario a blocchi in un cifrario a flusso! Ciò significa che possiamo utilizzare le crittografie migliori, che sono crittografie a blocchi, per crittografare qualsiasi dato, la maggior parte dei quali arriva in stream.

la seconda frase sembra fuorviante. È possibile crittografare i dati in streaming utilizzando un codice a blocchi, utilizzando una qualsiasi delle numerose modalità operative standard: ad es., Modalità CBC, modalità CTR, ecc. AES-CBC è ancora un codice a blocchi. In effetti, quasi tutte le modalità operative standard per i cifrari a blocchi supportano già i dati in streaming. Inoltre, un codice a blocchi non è sicuro senza una modalità di funzionamento, quindi non è come se una modalità di funzionamento fosse qualcosa di opzionale di cui hai bisogno solo quando vuoi crittografare i dati di streaming.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 2.0 con cui è distribuito.
Loading...