Vantaggi e svantaggi di Stream vs Block Ciphers

62

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

    
posta Eric Warriner 14.11.2010 - 15:32
fonte

5 risposte

44

Sebbene entrambi siano cifrari simmetrici, i codici di flusso si basano sulla generazione di un "keystream" crittografico "infinito" e li utilizzano per crittografare un bit o un byte alla volta (simile al pad singolo), mentre i codici a blocchi funzionano su più grandi blocchi di dati (ad es. blocchi) alla volta, spesso combinando blocchi per ulteriore sicurezza (ad es. AES in modalità CBC).

  • I codici di streaming sono in genere più veloci del blocco, ma questo ha il suo prezzo.
  • I codici a blocchi di solito richiedono più memoria, poiché lavorano su blocchi di dati più grandi e spesso hanno "riporto" dai blocchi precedenti, mentre dal momento che i codici a flusso funzionano solo su pochi bit alla volta hanno requisiti di memoria relativamente bassi (e quindi meno costoso da implementare in scenari limitati come dispositivi embedded, firmware e hardware in particolare).
  • I cifraggi di streaming sono più difficili da implementare correttamente e soggetti a punti deboli basati sull'utilizzo - poiché i principi sono simili al one-time pad, il keytream ha requisiti molto rigidi. D'altra parte, di solito è la parte difficile e può essere scaricata ad es. una scatola esterna.
  • Poiché i cifrari a blocchi codificano un intero blocco alla volta (e inoltre hanno le modalità di "feedback" più raccomandabili), sono più suscettibili al rumore nella trasmissione, cioè se si incasina una parte dei dati, tutto il riposo è probabilmente irrecuperabile. Mentre con i cipri di flusso i byte vengono crittografati individualmente senza alcuna connessione ad altri blocchi di dati (nella maggior parte dei codici / modalità) e spesso hanno il supporto per le interruzioni sulla linea.
  • Inoltre, i codici di flusso non forniscono protezione o autenticazione di integrità, mentre alcuni codici a blocchi (a seconda della modalità) possono fornire protezione dell'integrità, oltre alla riservatezza.
  • A causa di tutto ciò, i codici di flusso sono solitamente i migliori per i casi in cui la quantità di dati è sconosciuta o continua, come i flussi di rete. Crittografi a blocchi, d'altra parte, o più utili quando la quantità di dati è già nota - come un file, campi dati o protocolli di richiesta / risposta, come HTTP, dove la lunghezza del messaggio totale è già nota al inizio.
risposta data 14.11.2010 - 20:18
fonte
22

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

Un codice di flusso è un algoritmo specializzato ai fini della crittografia di massa di lunghi flussi di dati. L'idea è che, perdendo la versatilità del codice a blocchi, sarebbe possibile creare un algoritmo più efficiente (cioè qualcosa che crittografa i dati più veloci ).

Entrambi i cifrari a blocchi con una modalità di crittografia orientata al flusso e cifrari di flusso possono incorrere in problemi di sicurezza se la stessa chiave viene utilizzata due volte, per due flussi distinti, senza un vettore di inizializzazione unico, casuale / univoco . 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. Anche i buoni stream stream accettano un IV. Un codice stream tradizionale chiamato RC4 è IV-less (le sue specifiche non indicano dove o come potrebbe essere inserita una IV), che ha portato a molti disordini e ha dato un brutto nome al concetto di codice di flusso.

Per crittografie di flusso più recenti e più sicure (e più veloci), consulta il portfolio di eSTREAM . Questi algoritmi sono passati attraverso un'analisi piuttosto approfondita da parte di molti crittografi e sono considerati "abbastanza sicuri".

Un codice di 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 flussi di codice funzionano internamente per essere un PRNG, generando una lunga sequenza di byte pseudo-casuali dipendenti dalla chiave, che viene successivamente combinata (mediante XOR bit a bit) con i dati da crittografare (o decodificare), quindi crittografare zero byte equivale quindi a omettere completamente l'XOR. Pertanto, i codici di flusso vengono spesso utilizzati come PRNG personalizzato.

    
risposta data 22.07.2011 - 23:37
fonte
8

Uno dei vantaggi dei ciprogrammi di flusso che non sono stati menzionati in precedenza è che non hanno bisogno di padding (i codici a blocchi funzionano su blocchi completi, quindi se non si dispone di dati sufficienti è necessario generarne altri in qualche modo). E sorpresa (non proprio, la crittografia è il campo in cui Murphy è ovunque), il riempimento può essere sbagliato, come esemplificato ad esempio in Attacchi Oracle di imbottitura pratica .

Anche la sicurezza dei cifrari a blocchi dipende in gran parte dalla loro modalità di funzionamento, a volte si vede ancora ECB qua e là e non è affatto meglio di nessuna crittografia.

Fondamentalmente non si può dire che uno è migliore dell'altro, si deve guardare a un criptosistema completo per dare un giudizio di sicurezza.

    
risposta data 02.04.2011 - 15:45
fonte
1

Stream Cipher crittografa i dati in chiaro con un flusso casuale di bit (di solito con uno XOR perché può essere invertito facilmente). Se si dispone di dati a 128 bit, si utilizzerà uno stremuro casuale a 128 bit (chiave) per crittografare.

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

Naturalmente a causa di questo Block Cyphers sono più sicuri ma costosi da usare in termini di complessità hardware coinvolti. Gli Stream Cipher sono più veloci e "economici", ma possono essere suscettibili a problemi di sicurezza se implementati in modo errato.

    
risposta data 14.11.2010 - 15:54
fonte
-3

I dati (le cose da crittografare) di solito arrivano in streaming. Per crittografarlo, è necessario utilizzare un codice di flusso, ovvero un algoritmo di crittografia adatto per l'uso in 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 solitamente cifrari a blocchi. Un codice a blocchi è in grado di crittografare un singolo blocco di dati di dimensioni fisse; e, dalle prove intorno a noi, apparentemente è più facile costruire buoni codici a blocchi rispetto ai codici a flusso.

Buone notizie, comunque. Usando un determinato codice di blocco in alcuni particolari pattern (una "modalità di funzionamento"), e con l'aiuto di particolari strategie di padding, possiamo trasformare qualsiasi cifra di blocco in un codice di flusso! Ciò significa che possiamo usare i migliori cifrari, che sono cifrari a blocchi, per crittografare tutti i dati, la maggior parte dei quali arriva in streaming.

    
risposta data 02.04.2011 - 16:42
fonte

Leggi altre domande sui tag