ストリーム暗号

ストリーム暗号

 ストリーム暗号は、平文を流れるように暗号化する方式であり、ストリーム暗号生成器(stream cipher generator)と呼ばれるアルゴリズムによって暗号化されます。ストリーム暗号生成器は、擬似乱数ジェネレータを使用して、平文のビットに対応するキーストリーム(暗号化に使用される乱数列)を生成します。平文とキーストリームは、ビット単位でXOR演算を行うことによって暗号化されます。

ストリーム暗号は、ブロック暗号と比較して以下のような特徴があります。

  • 暗号化処理が高速であるため、リアルタイムでのデータ通信に適しています。
  • 暗号化されたデータを解読するためには、キーストリームを知る必要があります。しかし、キーストリームが推測されると、その時点から以前に送信された暗号文も復号化される可能性があります。
  • キーストリームが重複すると、同じキーストリームで暗号化された平文も同じ暗号文になるため、暗号文のパターンが分かっている場合は、平文を推測されるリスクがあります。

 ストリーム暗号は、ハードウェアやソフトウェアの両方で実装されており、BluetoothやWi-Fiなどの通信プロトコルで使用されています。しかし、キーストリームの生成アルゴリズムによっては、暗号化の強度が弱くなる可能性があるため、安全性に配慮したアルゴリズムの使用が推奨されています。

 ストリーム暗号は、データの一部分を暗号化するのに対し、ブロック暗号は固定サイズのブロックにデータを分割して暗号化します。ストリーム暗号は、暗号鍵と初期化ベクトル(IV)を使用して、ビット単位でデータを暗号化します。

 ストリーム暗号は、同期ストリーム暗号と自己同期ストリーム暗号に分類されます。同期ストリーム暗号では、暗号鍵とIVから擬似乱数列(ストリーム)を生成し、平文とXOR演算を行って暗号文を生成します。自己同期ストリーム暗号では、擬似乱数列を生成するための鍵とIVを使用して、特定のアルゴリズムで繰り返し演算を行い、ストリームを生成します。自己同期ストリーム暗号は、同期ストリーム暗号よりもセキュリティが高いとされています。

 ストリーム暗号は、ブロック暗号に比べて高速で、ストリームデータの暗号化や解読に適しています。一方で、暗号化されたデータをランダムアクセスできないため、ストリーム暗号を使用したストレージデバイスの暗号化には向いていません。

 また、ストリーム暗号は、暗号鍵やIVが漏洩した場合、すべてのストリームデータが簡単に解読できる可能性があるため、鍵管理に注意が必要です。