ストリーム暗号
自己同期式(Self-synchronising stream cipher)ともいい、同期がずれたときでも自動的に再同期できるメリットがある。1ビットの誤りが他のビットにも波及して誤りが拡大するというデメリットもある。しかし、ビット誤りが発生してもレジスタ長だけ経過すれば送信側と受信側のレジスタ値が一致し、同期を自動的に回復させることができる。非同期式の例として暗号利用モードの CFB がある。
結合部は、典型的にはXORなどで平文と鍵ストリームを結合する。理論的には、暗号文に原文あるいは鍵ストリームの痕跡が現れず、何らかの逆関数が存在するような可逆な関数であればXOR以外でも構わないが、基本的には強度が変化するなどということはないのであまり意味はない。
鍵ストリーム生成部と結合部を別の装置にした場合、前者は安全に保管・運用する必要があるが、後者は通信装置に組み込むことが可能になる。暗号装置を通信装置と結合する際には注意が必要なので、これを省略できることはメリットとなる。
ストリーム暗号は、鍵ストリームを重複して使用しないことを前提とした暗号アルゴリズムである。そのコンセプトは、鍵ストリームとして推測不可能な乱数列を想定しているバーナム暗号と同じである。ストリーム暗号は、平文ごとに異なる初期化ベクトル (IV) を使用する必要があるが、IVが重複して設定された場合、鍵ストリームも重複して使用されることとなるため、その危険性を以下に例として示す。
平文メッセージ m {\displaystyle m} と鍵ストリーム k {\displaystyle k} から暗号文メッセージ c {\displaystyle c} を生成する場合、次の式で表現できる。
m ⊕ k = c {\displaystyle m\oplus k=c}
次に、異なる平文メッセージ m ′ {\displaystyle m'} と鍵ストリーム k {\displaystyle k} (重複して使用)から暗号文メッセージ c ′ {\displaystyle c'} を生成する場合は、次の式となる。
m ′ ⊕ k = c ′ {\displaystyle m'\oplus k=c'}
ここで、暗号解読者が暗号文メッセージ c {\displaystyle c} と暗号文メッセージ c ′ {\displaystyle c'} を入手したという前提とする。