ストリーム暗号
暗号では、ストリーム暗号とは、平文ビットと擬似ランダム暗号ビットストリーム(鍵ストリーム)を排他的論理和(xor)演算で結合した対称鍵暗号のことをいいます。ストリーム暗号では、平文の桁が一度に一つずつ暗号化され、連続する桁の変換は暗号化状態の間に変化します。各桁の暗号化は現在の状態に依存するため、別の名称として状態暗号があります。実際には、桁は通常シングルビットまたはバイトである。
ストリーム暗号は、ブロック暗号とは異なる対称暗号化のアプローチを表しています。ブロック暗号は、固定長の大きなブロックで動作します。ストリーム暗号は通常、ブロック暗号よりも高速で実行され、ハードウェア要件も低い。しかし、ストリーム暗号は、使用方法を誤ると、深刻なセキュリティ問題の影響を受けやすくなります。
ストリーム暗号は、より小さくて便利な暗号鍵、例えば 128 ビットの鍵を利用します。この鍵に基づいて、ワンタイムパッド暗号化アルゴリズムと同様の方法で平文の数字と組み合わせることができる疑似ランダムなキーストリームを生成します。しかし、キーストリームは疑似ランダムであり、真のランダムではないため、ワンタイムパッドに関連したセキュリティを適用することができず、ストリーム暗号が完全に安全ではない可能性があります。
携帯電話の会話の暗号化に用いられるLFSRベースのストリーム暗号A5/1における鍵ストリーム生成器の動作について説明する。
ストリーム暗号の種類
ストリーム暗号は、内部状態に基づいて鍵ストリームの連続した要素を生成します。この状態は 2 つの方法で更新されます。
- 平文や暗号文のメッセージとは独立して状態が変化する場合は、同期ストリーム暗号に分類される。
- 暗号文の桁数の前回の変化に基づいて状態が更新された場合、自己同期ストリーム暗号に分類される。
同期ストリーム暗号
同期ストリーム暗号では、平文と暗号文のメッセージから独立して擬似乱数桁のストリームを生成し、平文と組み合わせて(暗号化して)、または暗号文と組み合わせて(復号化して)暗号化します。最も一般的な形式では、2進数(ビット)が使用され、鍵ストリームは排他的または演算(XOR)を使用して平文と結合されます。これは二進加法ストリーム暗号と呼ばれています。
同期ストリーム暗号では、復号を成功させるためには送信者と受信者が同期していなければなりません。送信中にメッセージに桁が追加されたり削除されたりすると、同期が失われます。同期を回復するには、正しい復号を得るために様々なオフセットを系統的に試すことができます。もう一つの方法は、出力の規則的なポイントで暗号文にマーカーを付けることです。
しかし、送信中に桁が破損した場合は、追加や紛失ではなく、平文中の 1 桁だけが影響を受け、エラーはメッセージの他の部分に伝搬しません。この特性は、送信エラー率が高い場合に役立ちますが、さらなるメカニズムがなければエラーが検出される可能性が低くなります。さらに、この特性のため、同期ストリーム暗号は能動的な攻撃に非常に弱いです。攻撃者が暗号文中の桁を変更できれば、対応する平文のビットに予測可能な変更を加えることができるかもしれません。
自己同期ストリーム暗号
自己同期ストリーム暗号は、鍵ストリームを計算するために前の N 個の暗号文の桁数の一部を使用する別の技術です。このような方式は、非同期ストリーム暗号または暗号文オートキー(CTAK)としても知られています。自己同期のアイデアは1946年に特許を取得しており、N個の暗号文桁を受信した後に受信者が自動的に鍵ストリーム生成器と同期することで、桁が落ちたりメッセージストリームに追加されたりした場合に復旧が容易になるという利点があります。1 桁のエラーの影響は限定的で、N 個の平文桁までしか影響しません。自己同期ストリーム暗号に対して能動的な攻撃を実行するのは、同期暗号よりもやや困難である。
自己同期型ストリーム暗号の例として、暗号フィードバックモード(CFB)のブロック暗号がある。
リニアフィードバックシフトレジスタベースストリーム暗号
バイナリストリーム暗号は、ハードウェアに容易に実装でき、数学的に迅速に解析できるため、線形フィードバックシフトレジスタ(LFSR)を使用して構築されることが多い。しかし、LFSR を使用するだけでは、安全性を確保するには不十分です。LFSR の安全性を高めるために、さまざまなスキームが設計されてきました。
非線形結合関数
LFSR は本質的に線形であるため、線形性を除去するための 1 つの手法として、並列 LFSR のグループの出力を非線形ブール関数に入力して、組み合わせ生成器を形成することがあります。このような結合関数の様々な特性は、例えば相関攻撃を回避するためなど、結果として得られるスキームのセキュリティを確保するために重要です。
時計制御発電機
通常、LFSR は定期的にステッピングされます。非線形性を導入するための1つの手法は、第2のLFSRの出力によって制御されるLFSRを不規則にクロックさせることです。こ の よ う な発電機には、 ストップアンドゴー発電機、 交互ステップ発電機、 およびシュリンキング発電機があります。
ストップアンドゴージェネレーター(Beth and Piper, 1984)は、2つのLFSRで構成されています。1つのLFSRは、第2の出力が「1」の場合にクロックされ、そうでない場合には前の出力を繰り返します。この出力は、通常のレートでクロックされた第3のLFSRの出力と結合されます(一部のバージョンでは)。
シュリンキングジェネレーターは別の技術を使用します。2つのLFSRが使用され、両方とも以下の方法で定期的にクロックされます。
- 第1のLFSRの出力が「1」の場合、第2のLFSRの出力は発電機の出力となる。
- 第1のLFSRの出力が"0"の場合、第2のLFSRの出力は破棄され、ジェネレータからは何ビットも出力されない。
この手法は、出力の速度が第2のジェネレータの状態に依存して可変であるため、第2のジェネレータのタイミング攻撃に悩まされます。これは、出力をバッファリングすることで改善できます。
フィルタージェネレーター
LFSR のセキュリティを向上させる別のアプローチは、単一の LFSR の全状態を非線形フィルタリング関数に渡すことです。
その他のデザイン
線形駆動装置の代わりに、非線形更新関数を使用してもよい。例えば、KlimovとShamirは、nビットのワード上の1サイクルを有する三角関数(T関数)を提案した。
セキュリティ
安全であるためには、キーストリームの周期(ストリームがそれ自体を繰り返す前に出力される桁数)が十分に大きくなければならない。シーケンスが繰り返される場合、重なり合う暗号文を「深さ方向」で互いに整列させることができ、これらの方法で生成された平文形式の暗号文を抽出することができる技術がある。
使用方法
ストリーム暗号は、安全な無線接続のように平文が未知の長さで来るアプリケーションでよく使用されます。ブロック暗号がこの種のアプリケーションで使用される場合、ブロック暗号はブロックサイズよりも短いブロックでは直接動作しないため、設計者は伝送効率と実装の複雑さのどちらかを選択する必要があります。例えば、128 ビットのブロック暗号が 32 ビットの平文バーストを別々に受信した場合、送信データの 4 分の 3 をパディングする必要があります。ブロック暗号はパディングを避けるために暗号文盗用モードまたは残余ブロック終端モードで使用する必要がありますが、ストリーム暗号は最小の送信単位(通常はバイト)で動作することでこの問題を排除します。
軍事暗号におけるストリーム暗号のもう一つの利点は、暗号ストリームが、厳格なセキュリティ対策の対象となる暗号化装置によって生成され、その後、他の装置、例えば、無線セットに供給され、その機能の一部としてxor操作を実行することができることである。他のデバイスは、あまり安全ではない環境で使用するために設計することができます。
RC4 はソフトウェアで最も広く使われているストリーム暗号です。他には、A5/1、A5/2、カメレオン、FISH、Helix、ISAAC、MUGI、パナマ、Phelix、Pike、SEAL、SOBER、SOBER-128、WAKEなどがあります。
RC4 は、最も広く使われているストリーム暗号設計の一つです。
ストリーム暗号の比較
ストリーム | 創作 | 速度 | ビット | 攻撃 | |||
効果的な | 初期化ベクトル | 内部 | 最もよく知られている | 計算 | |||
A5/1 | 1989 | 音声(Wフォン | 54 | 114 | 64 | アクティブKPA OR | ~2秒程度 OR239.91 |
A5/2 | 1989 | 音声(Wフォン | 54 | 114 | 64? | アクティブ | 4.6 ミリ秒 |
フィッシュ | 1993 | かなり速い(Wsoft | 巨大な | ? | ? | 既知の平文攻撃 | 211 |
穀物 | 2004年以前 | ファスト | 80 | 64 | 160 | キーディリビジョン | 243 |
HC-256 | 2004年以前 | 4 (WP4) | 256 | 256 | 65536 | ? | ? |
アイザック | 1996 | 2.375 (W64-bit) - | 8-8288 | 該当なし | 8288 | (2006) 一回戦 | 4.67×101240 (2001) |
むぎ | 1998-2002 | ? | 128 | 128 | 1216 | 該当なし (2002年) | ~282 |
パナマ | 1998 | 2 | 256 | 128? | 1216? | ハッシュ・コリジョン (2001) | 282 |
フェリックス | 2004年以前 | 最大8 (Wx86) | 256 + 128ビットNonce | 128? | ? | ディファレンシャル (2006) | 237 |
パイク | 1994 | 0.9 x FISH (Wsoft) | 巨大な | ? | ? | 該当なし (2004年) | 該当なし (2004年) |
パイ | 2004年以前 | 2.6 | 8-2048? | 64 | 8320 | 暗号理論 (2006) | 275 |
うさぎ | 2003年2月 | 3.7(WP3)-9.7(WARM7) | 128 | 64 | 512 | 該当なし (2006年) | 該当なし (2006年) |
1987 | 印象的な | 8-2048 | 8 | 2064 | シャミール イニシャル・バイト・キー・デリベーション OR KPA | 213 OR 233 | |
サルサ20 | 2004年以前 | 4.24 (WG4) - | 128 + 64ビットNonce | 512 | 512 + 384 (キー+IV+インデックス) | ディファレンシャル (2005年) | 該当なし (2005年) |
スクリーム | 2002 | 4 - 5 (Wsoft) | 128 + 128ビットNonce | 32? | 64ビット丸関数 | ? | ? |
シール | 1997 | 非常に高速(W32ビット | ? | 32? | ? | ? | ? |
雪 | 2003年以前 | 非常に良い (W32ビット) | 128 OR 256 | 32 | ? | ? | ? |
ソバー128 | 2003 | ? | 128まで | ? | ? | メッセージフォージ | 2−6 |
ソセマヌク | 2004年以前 | 非常に良い (W32ビット) | 128 | 128 | ? | ? | ? |
トリビウム | 2004年以前 | 4 (Wx86) - 8 (WLG) | 80 | 80 | 288 | ブルートフォースアタック (2006) | 2135 |
チューリング | 2000-2003 | 5.5 (Wx86) | ? | 160 | ? | ? | ? |
ベスト | 2005 | 42 (WASIC) - | 可変的 | 可変的 | 256 - 800 | 該当なし (2006年) | 該当なし (2006年) |
ウェイク | 1993 | ファスト | ? | ? | 8192 | CPA&CCA | 脆弱 |
ストリーム | 創作 | 速度 | ビット | 攻撃 | |||
効果的な | 初期化ベクトル | 内部 | 最もよく知られている | 計算 |
関連ページ
- イーストリーム
質問と回答
Q: ストリーム暗号とは何ですか?
A:ストリーム暗号とは、平文ビットと擬似ランダム暗号ビットストリーム(鍵ストリーム)を排他的論理和(xor)演算で結合する対称鍵暗号です。
Q: ブロック暗号とどう違うのですか?
A:ストリーム暗号は通常、ブロック暗号よりも高速で実行され、ハードウェア要件も低くなります。ブロック暗号は固定長の大きなブロックに対して動作しますが、ストリーム暗号は1桁ずつ暗号化し、連続する桁の変換は暗号化状態の間に変化します。
Q:どのような鍵を使用するのですか?
A: ストリーム暗号は、128ビットの鍵など、より小さく便利な暗号鍵を使用します。
Q: キーストリームはどのように生成されるのですか?
A:キーストリームは、ワンタイムパッド暗号アルゴリズムと同様に、使用される暗号鍵に基づいて生成されます。ただし、キーストリームは擬似ランダムであり、真のランダムではないため、ワンタイムパッドのようなセキュリティは適用できません。
Q:なぜ同じ開始状態を2度使ってはいけないのですか?
A: 同じ開始状態を2回使用すると、攻撃者が暗号鍵を知らずに、あるいは暗号鍵にアクセスすることなくデータを解読することが容易になるため、深刻なセキュリティ問題に発展することがあります。
Q: ストリーム暗号を使用することにリスクはありますか?
A: はい、適切な予防措置をとらずに使用した場合、ストリーム暗号の使用にはリスクが伴います。