ストリーム暗号とは? (Stream Cipher) 🔗
ビット単位で暗号化する共通鍵暗号方式です。
入力は、連続して受け取る要素です。
出力は、一度に一つの要素です。
ブロック暗号より高速です。
鍵を一度だけ使用します。
既知平文攻撃に弱い性質があります:
M⊕C=M⊕(M⊕k)=k
例:LFSR、RC4、ChaCha。
- 暗号学で幅広く使われます。
- 公開鍵暗号の秘密鍵
- ストリーム暗号の鍵
- 一時的なセッション鍵として使う共通鍵
- 要件
- ランダム性
- 一様分布:各数値の出現頻度が同じであること。
- 独立性:ほかの値から値を推測できないこと。
- 予測不可能性
- 各数値が、ほかの数値と統計的に独立であること。
- 過去の要素から、将来の要素を誰も予測できないこと。
乱数と疑似乱数 (Random Numbers vs Pseudo-Random Numbers) 🔗
- 真性乱数生成器 (True Random Number Generator, TRNG)
- 実現には大きな費用がかかります。
- 非決定的な情報源を使います。
- 放射性崩壊、ガスの放出、コンデンサーの漏れなど、予測できない自然現象を測定します。
- 最近のプロセッサーでは、提供されることが増えています。
- 疑似乱数 (Pseudorandom numbers)
- 統計的な乱数テストを満たす系列を生成します。
- 決定的な情報源を使うため、予測されやすい性質があります。
RCはRivest Cipherの略です。
可変長の鍵を持つストリーム暗号で、バイト単位の演算から構成されます。
ランダムな置換の利用に基づいています。
RC4:Sの初期化 (RC4: Initialization of S) 🔗
Sは256バイトの配列です。
- 0から255までの数が、昇順に一度ずつ現れます。
Tは一時的なベクトルで、最初のkeylen個の要素はkからコピーします。
- keylenは鍵の長さです。
- kは鍵であり、Tを埋める必要があるたびに繰り返します。
Tを使ってSを置換します。
j = 0
for i=0 to 255 do
j = (j + S[i] + T[i]) mod 256;
Swap(S[i], S[j]);
RC4:ストリームの生成 (RC4: Stream Generation) 🔗
S[i]のすべての要素をたどります。
i = 0
j = 0
while(true)
i = (i + 1) mod 256
j = (j + S[i]) mod 256
Swap(S[i], S[j])
t = (S[i] + S[j]) mod 256
k = S[t]
暗号化:kと、平文の次のバイトのXORを取ります。
復号:kと、暗号文の次のバイトのXORを取ります。
RC4:安全性の分析 (RC4: Security Analysis) 🔗
鍵長が適切であれば(例:128ビット)、RC4は安全と考えられています。
WEB (Wired Equivalant Privacy) プロトコルに対して脆弱性があります。
暗号利用モード (Modes of Operation) 🔗
暗号利用モードとは? (Modes of Operation) 🔗
ブロック暗号を使って、メッセージを暗号化する方法です。
ブロック暗号の制約は、平文の長さが固定されることです。
利用モードは、ブロック暗号で任意長のメッセージを暗号化するために使います。
- ECB (Electronic Codebook) モード
- CBC (Cipher Block Chaining) モード
- CFB (Cipher Feedback) モード
- OFB (Output Feedback) モード
- CTR (Counter) モード
ECBモード (Electronic Codebook Mode) 🔗
暗号化は、順にブロック単位で行います。
- 時刻nにおいて、Pnを暗号化してCnを得ます。
復号も、順にブロック単位で行います。
- 時刻nにおいて、Cnを復号してPnを得ます。
長所
- ブロックの同期は不要です。
- 伝送エラーの影響が、そのブロック内に限られます。
- 並列処理できます。
短所
- 決定的な暗号化です。
- 置換攻撃に弱く、同じ平文ブロックを同じ暗号文ブロックへ変換できます。
CBCモード (Cipher Block Chaining Mode) 🔗
暗号化:前のブロックの暗号文と鍵KのXORを使います。
- Cn=EK(Pn⊕Cn−1)
復号:前のブロックの暗号文と鍵KのXORを使います。
- Pn=DK(Cn)⊕Cn−1
初期化ベクトルが必要です。
CFBモード (Cipher Feedback Mode) 🔗
暗号化:初期化ベクトルを鍵KとのXORで暗号化し、使用する……