6.2.1. OFB and CTR Sequences (OFBおよびCTRシーケンス)
6.2.1. OFB and CTR Sequences (OFBおよびCTRシーケンス)
強力なシーケンスを生成する1つの方法は, シード値を取り, シードと連続した整数などを連結することによって生成された数量をハッシュし, 次に敵対者が利用できる生成器状態の量を制限するために取得した値をマスクすることです。
ランダム鍵とシード値を使用して "暗号化" アルゴリズムを使用し, カウンタ (CTR) モード暗号化のように連続した整数を暗号化することも可能です。あるいは, 暗号化からのすべての出力値を次の反復のために暗号化される値にフィードバックできます。これは出力フィードバックモード (OFB) の特定の例です [MODES]。
以下の例は, シフトとマスキングを使用して出力フィードバックの一部を古い入力の一部と結合する例を示しています。このタイプの部分フィードバックは, 以下で説明する理由で避けるべきです。
+---------------+
| V |
| | n |--+
+--+------------+ |
| | +---------+
shift| +---> | | +-----+
+--+ | Encrypt | <--- | Key |
| +-------- | | +-----+
| | +---------+
V V
+------------+--+
| V | |
| n+1 |
+---------------+
1のシフトが使用される場合, これはセクション6.1.3で説明されているシフトレジスタ技術と同じですが, フィードバックがいくつかのビット位置タップからの出力の単純な線形または多項式結合ではなく, すべてのビットの複雑な非線形関数によって決定されるという非常に重要な違いがあります。
Donald W. Daviesは, この種のシフトされた部分出力フィードバックが, すべての出力ビットを入力としてフィードバックするのと比較して, アルゴリズムを大幅に弱めることを示しました。特に, DESの場合, 完全な64ビットの数量を繰り返し暗号化すると, 約2^63回の反復で予想される繰り返しが得られます。64未満 (および0より大きい) のビットをフィードバックすると, 2^31と2^32の間の反復で予想される繰り返しが得られます!
これらの技術によってシーケンスが生成されたときに他のものからシーケンスの値を予測することは, 暗号システムを破ること, または部分的な情報のみが利用可能な状態で "非可逆的な" ハッシングを反転することと同等です。各反復で明らかになる情報が少ないほど, 敵対者がシーケンスを予測することは難しくなります。したがって, 各値から1ビットのみを使用することが最善です。場合によっては, 生成された値のすべてが明らかにされた場合に暗号システムが可逆的で破られる可能性がある場合でも, これによってシステムを破ることが不可能になることが示されています。