5.2. Stronger Mixing Functions (Funzioni di Miscelazione Più Forti)
5.2. Stronger Mixing Functions (Funzioni di Miscelazione Più Forti)
L'US Government Advanced Encryption Standard [AES] è un esempio di una forte funzione di miscelazione per quantità di bit multipli. Accetta fino a 384 bit di input (128 bit di "dati" e 256 bit di "chiave") e produce 128 bit di output, ciascuno dei quali dipende da una complessa funzione non lineare di tutti i bit di input. Altre funzioni di crittografia con questa caratteristica, come [DES], possono anche essere utilizzate considerandole per miscelare tutti i loro bit di input di chiave e dati.
Un'altra buona famiglia di funzioni di miscelazione è quella delle funzioni "message digest" o di hashing come gli US Government Secure Hash Standards [SHA*] e la serie MD4, MD5 [MD4, MD5]. Queste funzioni prendono tutte una quantità praticamente illimitata di input e producono un output di lunghezza fissa relativamente breve miscelando tutti i bit di input. La serie MD* produce 128 bit di output, SHA-1 produce 160 bit, e altre funzioni SHA producono fino a 512 bit.
Sebbene le funzioni message digest siano progettate per quantità variabili di input, AES e altre funzioni di crittografia possono anche essere utilizzate per combinare qualsiasi numero di input. Se 128 bit di output sono adeguati, gli input possono essere compattati in una quantità di dati di 128 bit e successive "chiavi" AES, riempiendo con zeri se necessario; la quantità viene quindi successivamente crittografata dalle "chiavi" utilizzando AES in Electronic Codebook Mode. In alternativa, l'input potrebbe essere compattato in una chiave di 128 bit e più blocchi di dati e un CBC-MAC potrebbe essere calcolato [MODES].
Dovrebbe essere utilizzata una miscelazione più complessa se sono necessari più di 128 bit di output e si vuole impiegare AES (ma si noti che è assolutamente impossibile ottenere più bit di "casualità" di quanti ne vengano immessi). Ad esempio, supponiamo che gli input siano compattati in tre quantità, A, B e C. Si può usare AES per crittografare A con B e poi con C come chiavi per produrre la prima parte dell'output, poi crittografare B con C e poi A per più output e, se necessario, crittografare C con A e poi B per ancora più output. Ancora più output può essere prodotto invertendo l'ordine delle chiavi date sopra. Lo stesso può essere fatto con le funzioni hash, facendo l'hash di vari sottoinsiemi dei dati di input o copie diverse dei dati di input con prefissi e/o suffissi diversi per produrre più output.
Per un esempio di utilizzo di una forte funzione di miscelazione, si riconsideri il caso di una stringa di 308 bit, ciascuno dei quali è biased al 99% verso zero. La tecnica di parità data nella Sezione 4.1 riduce questo a un bit, con solo una deviazione di 1/1000 dall'essere ugualmente probabilmente uno zero o uno. Ma, applicando l'equazione per l'informazione data nella Sezione 2, questa sequenza skewed di 308 bit contiene oltre 5 bit di informazione. Pertanto, facendo l'hash con SHA-1 e prendendo i 5 bit inferiori del risultato si otterrebbero 5 bit casuali non biased e non il singolo bit dato calcolando la parità della stringa. In alternativa, per alcune applicazioni, si potrebbe usare l'intero output hash per mantenere quasi tutti i 5+ bit di entropia in una quantità di 160 bit.