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?
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?
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).
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.
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.
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.
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.
Leggi altre domande sui tag cryptography encryption