ストリーム暗号
https://scrapbox.io/files/6961ee7cc7a25cff71df2dbc.png
平文を小さい単位(ビット、バイト、ワード)で順次処理する共通鍵暗号の一種 平文と秘密鍵(あるいは疑似乱数)のXORをとることで暗号化・復号する
ストリーム暗号の安全性や効率性は、内部で使用する疑似乱数生成器に依存する ストリーム暗号に対する攻撃
前提
ストリーム暗号のアルゴリズムは全て公開されているものとして、主張を強める
平文と暗号文のペアに対してXORを適用すれば、疑似乱数系列を計算できる
まず、疑似乱数系列から秘密鍵を特定する
鍵全数探索攻撃では、秘密鍵を推測して、正しい鍵をいつか特定できる
そのため、ストリーム暗号の安全性の上限は、鍵全数探索攻撃に対する耐性になる
その次の攻撃アプローチとして、過去の疑似乱数系列から、未来の疑似乱数系列を予測する
この攻撃に耐性を持たせるためには、疑似乱数に一様分布性と予測不可能性があることが必要
上記2つのアプローチに対して安全であれば、安全なストリーム暗号といえる
死角
秘密鍵の固定
秘密鍵は擬似乱数生成器の種となり、同じ秘密鍵からは同じ疑似乱数系列が出力される
そのため、秘密鍵が固定化されたストリーム暗号では、全て同じ疑似乱数系列で暗号化される
敵が暗号文と対応する平文を知った場合、疑似乱数系列が特定されてしまい、別の平文を暗号化したり別の暗号文を平文化できてしまう
不適切な擬似乱数生成器の使用
ブロック暗号とは異なり、ストリーム暗号では暗号化の前にセットアップという処理が必要 ストリーム暗号の擬似乱数生成器は、セットアップ時に疑似乱数系列から秘密鍵の部分情報が推測できないように処理する
しかし、疑似乱数の序盤では、秘密鍵に大きく影響された値が出力される傾向にある
最悪の場合、疑似乱数系列の最初に秘密鍵の一部がそのまま出力されるおそれも
処理速度
疑似乱数生成器によってはセットアップ時に攪拌処理を行うため、時間がかかる