it-swarm.dev

Vantaggi e svantaggi di Stream contro Block Ciphers

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

66
Eric Warriner

Mentre entrambi sono cifre simmetriche, le cifre di flusso si basano sulla generazione di un flusso di chiavi crittografico "infinito" e sull'utilizzo di tale crittografia per un bit o byte alla volta (simile al pad di una volta), mentre le cifre di blocco funzionano su blocchi di dati più grandi (ad es. blocchi) alla volta, spesso combinando blocchi per maggiore sicurezza (ad es. AES in modalità CBC).

  • I codici di 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 hanno un "riporto" dai blocchi precedenti, mentre poiché i cifrari a flusso funzionano su pochi bit alla volta hanno requisiti di memoria relativamente bassi (e quindi più economici per implementare in scenari limitati come dispositivi integrati, firmware e hardware specifico).
  • I cifrari di streaming sono più difficili da implementare correttamente e sono soggetti a debolezze basate sull'uso - poiché i principi sono simili al pad di una volta, il flusso di chiavi ha requisiti molto rigidi. D'altra parte, questa è di solito la parte difficile, e può essere scaricata ad es. una scatola esterna.
  • Poiché i cifrari a blocchi crittografano un intero blocco alla volta (e inoltre hanno le modalità di "feedback" che sono più consigliate), sono più sensibili al rumore nella trasmissione, ovvero se si incasina una parte dei dati, tutto il resto è probabilmente non recuperabile. Considerando che con i cifrari di flusso i byte sono crittografati individualmente senza alcuna connessione ad altri blocchi di dati (nella maggior parte delle cifre/modalità) e spesso hanno il supporto per le interruzioni sulla linea.
  • Inoltre, i codici di flusso non forniscono protezione o autenticazione dell'integrità, mentre alcuni codici a blocchi (a seconda della modalità) possono fornire protezione dell'integrità, oltre alla riservatezza.
  • A causa di tutto quanto sopra, le cifrature di flusso sono in genere le migliori per i casi in cui la quantità di dati è sconosciuta o continua, come i flussi di rete. I cifrari a blocchi, d'altra parte, o più utili quando la quantità di dati è già nota - come un file, campi di dati o protocolli di richiesta/risposta, come HTTP dove la lunghezza del messaggio totale è già nota al inizio.
48
AviD

Un cifrario a blocchi è un algoritmo versatile che implementa una permutazione dipendente da 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 usato con un appropriato modalità operativa (aka "modalità concatenamento"), quello tradizionale essendo CBC e la modalità più recente alla moda essendo 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 (ovvero qualcosa che crittografa i dati più veloce).

Entrambi i cifrari a blocchi con una modalità di crittografia orientata al flusso e i cifrari in streaming potrebbero incorrere in problemi di sicurezza se la stessa chiave viene utilizzata due volte, per due flussi distinti, senza un appropriato, unico/casuale sufficiente Vettore di inizializzazione. Per la crittografia CBC, IV deve essere una nuova sequenza uniformemente casuale di bit, della stessa dimensione di un blocco, per ogni nuovo messaggio. Cifre di flusso valide accettano anche un IV. Un codice di flusso tradizionale chiamato RC4 è IV-less (la sua specifica non indica dove o come un IV potrebbe essere inserito), il che ha portato a molti caos e ha dato un brutto nome al concetto di stream cipher.

Per i codici di flusso più recenti, più sicuri (e più veloci), vedere portafoglio eSTREAM . Questi algoritmi hanno subito un'analisi piuttosto approfondita da parte di molti crittografi e sono considerati "abbastanza sicuri".

Un codice di flusso può essere convertito in Pseudorandom Number Generator crittografando una lunga sequenza di byte di valore zero. In realtà, molti (ma non tutti) stream cipher lavorano internamente essendo un PRNG, generando una lunga sequenza di byte pseudo-casuali dipendenti dalla chiave, che viene successivamente combinato (da X bit bit a bit) con i dati per crittografare (o decrittografare), quindi la crittografia di zero byte equivale quindi a omettere il XOR del tutto. Pertanto, le cifrature di flusso vengono spesso utilizzate come PRNG personalizzato.

26
Thomas Pornin

Un vantaggio delle cifre di flusso che non sono state menzionate in precedenza è che non necessitano di riempimento (le cifre di blocco 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), l'imbottitura può essere sbagliata, come esemplificato ad esempio in Attacchi Oracle di imbottitura pratica .

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

Fondamentalmente non si può dire che uno sia migliore dell'altro, si deve guardare un sistema crittografico completo per dare un giudizio di sicurezza.

9
Bruno Rohée

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

Block Ciphers cripta i dati di testo semplice un blocco alla volta con la stessa trasformazione (in base alla chiave). Quindi hai i tuoi dati a 128 bit, la cifra li suddivide 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. Gli stream cipher sono più veloci ed "economici" ma possono essere suscettibili a problemi di sicurezza se implementati in modo errato.

1
gbr