6.2.1. OFB and CTR Sequences (Sequenze OFB e CTR)
6.2.1. OFB and CTR Sequences (Sequenze OFB e CTR)
Un modo per produrre una sequenza robusta è prendere un valore seed e fare l'hash delle quantità prodotte concatenando il seed con interi successivi, o simili, e poi mascherare i valori ottenuti in modo da limitare la quantità di stato del generatore disponibile all'avversario.
PUÒ anche essere possibile usare un algoritmo di "cifratura" con una chiave casuale e un valore seed per cifrare interi successivi, come nella cifratura in modalità contatore (CTR, counter mode). In alternativa, si può reimmettere tutto il valore di output dalla cifratura nel valore da cifrare per l'iterazione successiva. Questo è un esempio particolare della modalità output feedback (OFB) [MODES].
Un esempio è mostrato sotto in cui spostamento e mascheramento sono usati per combinare parte del feedback di output con parte del vecchio input. Questo tipo di feedback parziale DOVREBBE essere evitato per le ragioni descritte sotto.
+---------------+
| V |
| | n |--+
+--+------------+ |
| | +---------+
shift| +---> | | +-----+
+--+ | Encrypt | <--- | Key |
| +-------- | | +-----+
| | +---------+
V V
+------------+--+
| V | |
| n+1 |
+---------------+
Si noti che se viene usato uno spostamento di uno, questo è uguale alla tecnica del registro a scorrimento descritta nella Sezione 6.1.3, ma con la differenza fondamentale che il feedback è determinato da una funzione complessa non lineare di tutti i bit piuttosto che da una semplice combinazione lineare o polinomiale dell'output da pochi tap di posizione di bit.
Donald W. Davies ha mostrato che questo tipo di feedback di output parziale spostato indebolisce significativamente un algoritmo, rispetto a reimmettere tutti i bit di output come input. In particolare, per DES, cifrare ripetutamente una quantità completa a 64 bit darà una ripetizione prevista in circa 2^63 iterazioni. Reimmettere qualsiasi cosa meno di 64 (e più di 0) bit darà una ripetizione prevista tra 2^31 e 2^32 iterazioni!
Prevedere valori di una sequenza da altri quando la sequenza è stata generata da queste tecniche è equivalente a violare il criptosistema o a invertire l'hashing "non invertibile" con solo informazioni parziali disponibili. Meno informazioni vengono rivelate in ogni iterazione, più difficile sarà per un avversario prevedere la sequenza. Quindi è meglio usare solo un bit da ogni valore. È stato dimostrato che in alcuni casi questo rende impossibile violare un sistema anche quando il sistema crittografico è invertibile e potrebbe essere violato se tutti i valori generati fossero rivelati.