暗号分野でいうストリーム暗号は、平文ビットと擬似ランダムな暗号ビット列(鍵ストリーム)を排他的論理和(xor)で結合してデータを暗号化する対称鍵暗号です。ストリーム暗号では、平文の桁が一般に一度に一つずつ(多くはビットまたはバイト単位で)暗号化され、暗号化の挙動は内部の「状態」に依存して時間とともに変化します。このため別名で状態暗号と呼ばれることもあります。

仕組み

基本構成は次の通りです。

  • 鍵(例:暗号鍵、多くの場合128ビットなど)と初期化ベクトル(IV/nonce)から内部状態を初期化する。
  • 状態遷移により疑似ランダムなビット列(キーストリーム)を生成する。
  • 生成したキーストリームと平文をxorして暗号文を得る(復号は同じ操作で平文を再生する)。

ストリーム暗号には大きく二つの方式があります。

  • 同期型ストリーム暗号:送信側と受信側が同じキーストリーム位置を共有する想定で動作する。IV(nonce)を同期すれば同期が取れるが、パケットの欠落や再配列は別途対処が必要。
  • 自己同期型(自動同期)ストリーム暗号:直近の暗号文ビット列の一部から状態を再構築するため、ある程度の誤り回復・再同期が可能。ただし設計が複雑になる。

ブロック暗号との違い

ブロック暗号は一定長のブロックを単位に処理するのに対して、ストリーム暗号は逐次的にデータを処理します。主な違いは以下の通りです。

  • 処理単位:ブロック単位 vs ビット/バイト単位
  • レイテンシ:ストリーム暗号は低遅延でリアルタイム処理に向く
  • 性能と実装規模:ストリーム暗号は一般に軽量で高速、組み込み向けに適する
  • 運用上の注意:ストリーム暗号は使用方法を誤るとブロック暗号以上に致命的な脆弱性を招く場合がある(特にキーストリームの再利用)
  • なお、ブロック暗号を特定の動作モード(例:CTRモード)で使うと、実質的にストリーム暗号と同様の動作をする

例と実装

  • 古典的な実装例:RC4(現在は脆弱性のため非推奨)
  • 近年の代表例:Salsa20 / ChaCha20(高速で安全性が高く、ChaCha20-Poly1305はAEADとして広く使われる)
  • ブロック暗号のストリーム化:AES-CTR や AES-CTR + MAC(ただしCTRのみでは整合性は保証されない)

安全性と代表的な攻撃

ストリーム暗号の主なリスクと攻撃手法:

  • キーストリームの再利用(二重使用):同じ鍵とIVで生じた2つの暗号文をxorすると平文のxorが得られ、既知平文があれば他方の平文を復元できる(ワンタイムパッドの二重使用の致命的欠陥)。
  • IV/nonceの管理不備:IVが再利用されるとキーストリーム再利用につながる。IVは鍵ごとに一意でなければならない。
  • ビット反転攻撃(bit-flipping):xor特性により、暗号文のビットを反転させると復号時に対応する平文ビットが反転する。これを利用した改ざんが可能なので、整合性検査(MACやAE)を併用する必要がある。
  • 初期出力バイアスや統計的弱点:一部の古いストリーム暗号(例:RC4)は初期出力に偏りがあり、統計解析で鍵が漏れる恐れがある。
  • 状態漏洩・継続的侵害:内部状態が漏れると大量の過去・将来のデータが復号され得る。キー管理と再鍵化の方針が重要。
  • 関連鍵攻撃、既知平文攻撃、区別攻撃:設計やパラメータ管理に問題があるとこうした高度な攻撃に弱くなる。

対策とベストプラクティス

  • IV(nonce)は鍵ごとに必ず一意にする。可能ならランダムではなくカウンタや組み合わせで衝突を避ける。
  • キーストリームの使用量に制限を設け、一定量を超えたら再鍵化する(長時間・大量データの同一鍵使用を避ける)。
  • 整合性保護を必ず行う。単純なストリーム暗号だけでは改ざん検出が不能なため、MACを併用するか、AEAD(例:ChaCha20-Poly1305、AES-GCM)を使用する。
  • 古いアルゴリズム(RC4等)は避け、現在推奨されている設計を採用する。
  • 実装上の注意:初期出力の破棄(ドロップ)やサイドチャネル対策、乱数源の確保などを行う。
  • プロトコル設計での明確な鍵/nonce管理と再同期手段の設計を行う。

用途

ストリーム暗号は以下のような場面で特に有用です。

  • リアルタイム通信用(VoIP、ライブストリーミング)— 低遅延が要求される通信
  • 組み込み機器やIoTデバイス— 計算資源やメモリが限られる環境
  • 大規模なデータストリームの暗号化— ハードウェア実装で高スループットが得やすい

まとめ(要点)

  • ストリーム暗号はキーストリームをxorで結合するシンプルで高速な方式だが、キーストリーム再利用や整合性欠如といった運用面のリスクに注意が必要。
  • 安全に使うには「一意なIV管理」「整合性保護(AEAD)」および「推奨アルゴリズムの採用」が不可欠である。
  • 近年はChaCha20-Poly1305のようなAEAD構成が実運用で広く採用されており、ストリーム処理の利点を享受しつつ安全性を確保できる。