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

削除された内容 追加された内容
Melan (会話 | 投稿記録)
いくらか改稿
1行目:
'''ストリーム暗号'''(-あんごう、Stream cipher)とは、内部状態を更新しながら平文をビット単位あるいはバイト単位などで逐次[[暗号化]]する暗号である。これに対して、ある鍵に対して固定された平文を64ビットや128ビット等の一定サイズ毎に暗号化す文の変換をあたえる暗号は[[ブロック暗号]]といい、ストリーム暗号とブロック暗号とに大別される[[共通鍵暗号]]と、[[公開鍵暗号]]とで現代暗号の主要な暗号方式をなす。
 
== 概要 ==
ストリーム暗号は、鍵ストリーム(key stream)を生成する鍵ストリーム生成部と、鍵ストリームと平文を結合する結合部から構成されことが多い暗号で、典型的には、[[秘密鍵]]を[[シード]]として[[擬似乱数]]を生成し、[[平文]]とXORして[[暗号文]]を作り、復号時には、同じくシードから擬似乱数を生成して暗号文とXORすることで平文を得るものである。
 
ブロック暗号はブロック単位で暗号化するため、ブロックサイズ分のデータが揃うまで暗号化処理を開始できないが、ストリーム暗号の多くは、1bitあるいは1byteなどの単位で処理疑似乱数して生成することができるため、待ち時間が少ない。<-- また、ブロック暗号では、平文がブロックサイズの整数倍ではない場合に必要なパディング処理も、ストリーム暗号では不要であり、常に平文サイズ=暗号文サイズとなる。-->処理遅延が少ないこと<--、データサイズが増加しないこと-->は通信などに利用する場合にメリットとなりうる。
平文を一文字入力して暗号文の一文字が得られる暗号はストリーム暗号であり、古典暗号や[[機械式暗号]]の多くが該当する。例えば[[シーザー暗号]]などの[[単一換字式暗号]]や[[ヴィジュネル暗号]]、[[エニグマ (暗号機)|エニグマ暗号機]]の暗号方式などはストリーム暗号に分類される。ストリーム暗号ではない古典暗号には、綴字換字式暗号や[[転置式暗号]]などがある。逆に現代暗号では、[[DES (暗号)|DES]],[[AES暗号|AES]]等ブロック暗号が多い。ストリーム暗号は、通信などストリーム暗号の特徴が生かされる用途に利用されている。
 
しかしながら、[[暗号利用モード]]のOFB, CFBやCTRでブロック暗号を利用するとストリーム暗号が構成できるため、ストリーム暗号専用アルゴリズムは、ブロック暗号と比べて何かしらの点で特徴(メリット)がなければ存在する意味がない。
ブロック暗号はブロック単位で暗号化するため、ブロックサイズ分のデータが揃うまで暗号化処理を開始できないが、ストリーム暗号は、1bitあるいは1byteなどの単位で処理を行うため、待ち時間が少ない。また、ブロック暗号では、平文がブロックサイズの整数倍ではない場合に必要なパディング処理も、ストリーム暗号では不要であり、常に平文サイズ=暗号文サイズとなる。処理遅延が少ないこと、データサイズが増加しないことは通信などに利用する場合にメリットとなりうる。
この点、ストリーム暗号は、ソフトウェア実装すると一度の暗号化処理で1bitあるいは1byteしか扱えないストリーム暗号は、ソフトウェア実装するとため性能が悪くなりがちである。ハードウェア実装しその場合には、回路規模が小さく近年では[[MUGI]]の様に64bit単位といった大きいブロック単位で処理速度するアルゴリズム提案されてものがある。しかし、安全性については、ブロック暗号と比べてストリーム暗号の研究は遅れていて、安全性の評価手法の研究には長い時間を要するため、ブロック暗号ベースのストリーム暗号を利用すべきとの意見もある。ブロック暗号をCTRモードで利用した場合、ブロック暗号が疑似ランダム置換であれば、[[計算量的安全性|計算量的安全]]である。
 
しかしながら、[[暗号利用モード]]のOFBやCFBでブロック暗号を利用するとストリーム暗号が構成できるため、ストリーム暗号専用アルゴリズムは、ブロック暗号と比べて何かしらの点で特徴(メリット)がなければ存在する意味がない。
この点、ストリーム暗号は、ソフトウェア実装すると一度の暗号化処理で1bitあるいは1byteしか扱えないため性能が悪くなりがちである。ハードウェア実装した場合には、回路規模が小さく、処理速度が高いものがある。しかし、安全性については、ブロック暗号と比べてストリーム暗号の研究は遅れていて、安全性の評価手法の研究には長い時間を要するため、ブロック暗号ベースのストリーム暗号を利用すべきとの意見もある。
 
== 構造 ==
37 ⟶ 35行目:
RC4やSEALのような、状態変数を逐次更新することで、鍵ストリーム生成する方式もある。stub
 
=== カオス関数 ===
<!-- 主観が混じらないにようにしばらく、放置。
=== カオス関数 === [[カオス]]暗号としてられている暗号もある。過去に多くの提案があったがその多くの安全性解読厳密に評価されていない物が多いアルゴリズムカオス自体は周期秘匿して持たな等優れた性質があもの多く安全デジタルで実装する場合はそのような評価受けてい持たないため、電子政府へ。近年使用研究で推奨、単純な実装の場合極端に短い周期を持つ可能性があることが指摘されVSC。BLIC。FSAngo。-->
<!-- 単にリストならば暗号理論のリストに記述すればよいか。
* LFSR型
67 ⟶ 65行目:
ストリーム暗号は、平文がいつ何バイト発生するか不確定なアプリケーションによく採用される。例えば、秘匿通信(秘話)である。
 
[[ウェブブラウザ]]で使用される暗号化通信[[Secure Socket Layer|SSL]]の暗号方式としてRC4が採用 (オプション) されている。[[無線LAN]](WEP (WEP,WPA)WPA) でもRC4が使用される。他に、[[携帯電話]]用に A5/1, A5/2 などがある。
 
== 標準 ==
73 ⟶ 71行目:
 
* 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
90 ⟶ 88行目:
 
安全性の証明については:
* 鍵ストリームとして完全なランダムシーケンスを採用すると、OTP(One Time Pad)となって[[情報理論的安全性]]を持つ。しかし、平文と同じ長さの乱数が必要であり、OTPは広くは採用されていない。
* 鍵ストリーム生成部にブロック暗号を部品として使用し、ストリーム暗号の安全性をブロック暗号の安全性に帰着させるものがある。
*ブロック暗号のCTRモードは、ブロック暗号が疑似ランダム関数と見なせるのならば計算量的安全性を持つが、バースデイパラドックスからブロック長 n に対して <math>2^(n/2)</math> ブロック程度の出力で自然乱数と識別可能である。
 
== 歴史 ==