「ストリーム暗号」の版間の差分

削除された内容 追加された内容
Melan (会話 | 投稿記録)
混乱するので,先頭部の公開鍵暗号を削除.用字.用語.2文の交換.{{節stub}}
1行目:
'''ストリーム暗号'''(-あんごう、stream cipher)とは、平文をビット単位あるいはバイト単位などで逐次、[[暗号化]]する暗号である。
これに対して、平文を64ビットや128ビットなどの固定長のブロックに分割して暗号化する暗号は[[ブロック暗号]]という。ストリーム暗号とブロック暗号とに大別されるが、現代の主要な[[共通鍵暗号]]と[[公開鍵暗号]]と、現代暗号の主要な暗号方式をなすある
 
== 概要 ==
ストリーム暗号は、鍵ストリーム(key stream)を生成する鍵ストリーム生成部と、鍵ストリームと平文を結合する結合部から構成されることが多い。典型的な方式では、[[秘密鍵]]を[[シード]]初期値として[[擬似乱数]]列を生成し、[[平文]]との[[排他的論理和]] (XOR、<math>\oplus</math>) を取ることによって[[暗号文]]を作る。復号時には、同じシード初期値から生成した擬似乱数と暗号文との排他的論理和を取ることによって平文を得る。
:<math>(m \oplus k) \oplus k = m \oplus (k \oplus k) = m</math>
 
ブロック暗号はブロック単位で暗号化するので、ブロックサイズ分のデータがそろうまで暗号化処理が開始できない。一方、ストリーム暗号の多くは、似乱数を先行して生成できるので、待ち時間が少ない。また、ブロック暗号では平文がブロックサイズの整数倍ではない場合に必要なパディング処理も、ストリーム暗号では不要であり、常に平文サイズ=暗号文サイズとなる。処理遅延が少ないこと、データサイズが増加しないことは通信などに利用する場合にメリットとなりうる。
 
しかし、[[暗号利用モード]]のOFB, CFB, CTRなどでブロック暗号を利用するとストリーム暗号が構成できるので、ストリーム暗号専用アルゴリズムは、ブロック暗号と比べて何かしらの点で特長(メリット)がなければ存在する意味がない。
一度の暗号化処理で1bitあるい1[[ビット]]また1byte1[[バイト (情報)|バイト]]しか扱わないストリーム暗号は、ソフトウェアで実装すると性能が悪くなりがちである。そのため、近年では[[MUGI]]の様に一度の処理で64bit64ビットといったサイズの鍵ストリームを出力し、まとめて暗号化処理できるアルゴリズムも提案されている。近年提案されているストリーム暗号は[[AES暗号|AES]]より高速であることをアピールするものが多い。
 
ストリーム暗号の安全性についての研究は、ブロック暗号に比べて遅れている。安全性の評価手法の研究には長い時間を要するので、ブロック暗号に基づくストリーム暗号を利用すべきとの意見もある。ブロック暗号をCTRモードで利用した場合、ブロック暗号が似ランダム置換であれば、[[計算量的安全性|計算量的に安全]]である。
 
== 構造 ==
鍵ストリーム生成部は、128bit128ビット程度の秘密鍵を用いて[[擬似乱数]]を生成する。通常、共通鍵方式であるが、[[公開鍵暗号]]方式(非対称暗号)のストリーム暗号も提案されている。擬似乱数ではなく、真の乱数を利用する場合もある([[バーナム暗号]])。また、一度使用した鍵ストリームは、再使用しないように制御する必要があるので、平文ごとに異なる初期値 ([[初期化ベクトル]]または, IV) を使用する。IVは乱数かカウンタで作る。
 
鍵ストリーム生成のアルゴリズムとして方法には、専用のアルゴリズムによるものと、ブロック暗号を元にした生成方法がある。専用アルゴリズムによる鍵ストリーム生成は、フィードバックシフトレジスタにもとづくものが多い。[[シフトレジスタ]]とフィードバック関数から構成される。
 
フィードバックの構成方法に、暗号文を鍵ストリームにフィードバックする方式(同期式、外部同期)と、フィードバックしない方式(非同期式、自己同期)がある。暗号文がビットスリップしたときのエラーの伝播が異なる。
 
* ;同期式(Synchronous (Synchronous stream cipher) -cipher) :送信側・受信側とも、平文・暗号文とは独立して鍵シーケンスを生成する。bitエラービット誤りが発生したときに他のbitビットエラー誤りが波及しないという特がある。逆に、攻撃者が暗号文を操作(例:bit:ビット反転)することで、平文を変更できてしまうというデメリットにもなる。場合によっては[[メッセージ認証符号|MAC]]などのメッセージ認証が必要となる。また同期がずれた場合には、再同期の仕組みが別途必要となる。外部同期式ともいう。
 
* ;非同期式(asynchronous (asynchronous stream cipher)-cipher) :'''自己同期式'''(Self-synchronising stream cipher)とも呼ばれ、同期がずれたときでも自動的に再同期できるメリットがある。エラー1ビットの誤りが他のビットにも波及し、誤りが拡大するというデメリットもある。しかし、ビット誤りが発生してもレジスタ長だけ経過すると送信・受信側のレジスタ値が一致し、同期を自動的に回復させることができる。しかし1bitエラーが他のbitにも波及し、エラーが拡大するというデメリットもある。非同期式の例として暗号利用モードの CFB がある。
 
結合部は、典型的にはXORなどで平文と鍵ストリームを結合する。XOR以外に、加算や[[特別計算法|テーブル特別な表]]を用いた方式もある。
 
鍵ストリーム生成部と結合部を別の装置にするとした場合、前者はセキュア安全に保管運用する必要があるが、後者は通信装置に組込み可能になる。暗号装置を通信装置と結合する際には注意が必要なので、メリットとなる。<!-- カスケードにより、安全性を向上できる。-->
 
== 種類 ==
 
=== LFSR型 ===
鍵ストリーム生成の方式として、[[線形帰還シフトレジスタ]] (LFSR; Linear Feedback Shift Register) を用いた方法が知られている。LFSRはハードウェアを用いて容易に実装することができる。しかし、LFSRは数学的に容易に解析可能であるため、そのまま暗号に使用することは推奨されない。相関攻撃 (Correlation attack) の餌食となる。非線形なFSRを使うものもある(NFSR:; Nonlinear Feedback Shift Register)。
*コンバイナ型:複数のLFSRを非線形関数で結合した方式
*フィルタ型:LFSRの全状態をFilterに入れる方式。
: 例:よく研究対象にされている方式としてTOYOCRYPTがある。
*クロック制御型:LFSRを非連続的動作させる方式。一つのLFSRのLFSRのクロック制御する。
: 例:ベス&パイパーによる stop-and-go generator (Beth and Piper, 1984)、[[GSM]]音声暗号化で使っている[[A5/1]]
 
=== 状態遷移型 ===
RC4やSEALのような、状態変数を逐次更新することで、によって鍵ストリーム生成する方式もある。{{節stub}}
 
=== カオス関数 ===
[[カオス]]暗号として知られている暗号もある。過去に多くの提案があったがその多くの安全性は厳密に評価されていないものが多い。カオス自体は周期をたないなど優れた性質があるが、デジタルで実装する場合はそのような性質をたない。近年の研究では、単純な実装の場合極端に短い周期をつ可能性があることが指摘されている。
<!-- 単にリストならば暗号理論のリストに記述すればよいか。
* LFSR型
69 ⟶ 71行目:
ストリーム暗号は、平文がいつ何バイト発生するか不確定なアプリケーションによく採用される。例えば、[[秘匿通信]](秘話)である。
 
[[ウェブブラウザ]]で使用される暗号化通信[[Secure Sockets Layer|SSL]]の暗号方式としてRC4が採用 (オプションとして) 採用されている。[[無線LAN]] (WEP,WPA) でもRC4が使用される。他に、[[携帯電話]]用に [[A5/1]], A5/2 などがある。
 
== 標準 ==
暗号標準として採用(or(または推奨)されているストリーム暗号には次のものがある。
 
* OFB, CFB, CTR --- [[ISO/IEC_18033]](asブロック暗号利用モード)
* SNOW 2.0 ------ ISO/IEC_18033
* [[MUGI]] ---------- ISO/IEC_18033, [[CRYPTREC]]
* MULTI-SO1 ----- ISO/IEC_18033(as (MOF), CRYPTREC
* [[RC4]] ----------- RFC 2246 (TLS), WEP, WPA, CRYPTREC (128bit-RC4のみだけ)
 
== 安全性 ==
ストリーム暗号の安全性の条件としては:、次の5項目があげられる。<!-- ゴーリッシュの基準 -->
* 統計的乱数性
* 非線形性
87 ⟶ 89行目:
* 長周期性
* 線形複雑度(linear complexity)
などがあげられる。<!-- ゴーリッシュの基準 -->
 
鍵ストリーム生成部は、通常、内部状態を記憶するレジスタがあり、レジスタ長が安全性の上限の一つとなる。レジスタの初期値を決める秘密鍵のサイズ長さも安全性の上限を決める。これらのサイズ長さは安全性の上限を決めるのであって下限ではない。
 
安全性の証明については根拠
* 鍵ストリームとして完全なランダムシーケンス乱数列を採用するとればOTP(One Time Pad)[[ワンタイムパッド]]となって[[情報理論的安全性]]をつ。しかし、平文と同じ長さの乱数が必要であり、OTPワンタイムパッドは広くは採用されていない。
* 鍵ストリーム生成部にブロック暗号を部品として使用し、ストリーム暗号の安全性をブロック暗号の安全性に帰着させるものがある。
* ブロック暗号のCTRモードは、ブロック暗号が似ランダム関数となせるのならば計算量的安全性をつが、バースデイ[[誕生日のパラドックス]]からブロック長 ''n'' に対して <math>2^{n/2}</math> ブロック程度の出力で自然乱数と識別可能である。
 
== 歴史 ==
自己同期式のストリーム暗号は、ブレーズ・ド・ヴィジュネルが考案している。{{節stub}}
<!-- 乱数式ができたのはいつ?2005年には、ISOでの標準化もなされている。-->
 
== 参考文献 ==
* Thomas Beth, Fred Piper, "The Stop-and-Go Generator", EUROCRYPT'1984, pp88pp. 88-92.
 
== 関連項目 ==