4.1.1. AES in Counter Mode (カウンタモードの AES)
4.1.1. AES in Counter Mode (カウンタモードの AES)
概念的には, カウンタモード [AES-CTR] は連続する整数を暗号化することで構成されます。整数シーケンスの開始点をランダム化するために, 実際の定義はやや複雑になっています。各パケットは異なる鍵ストリームセグメントで暗号化され, 次のように計算されなければなりません。
鍵ストリームセグメントは, 鍵 k = k_e を使用し, ブロックインデックスが昇順である, 暗号化方向の AES 暗号の 128 ビット出力ブロックの連結でなければなりません。記号的には, 各鍵ストリームセグメントは次のようになります
E(k, IV) || E(k, IV + 1 mod 2^128) || E(k, IV + 2 mod 2^128) ...
ここで, 128 ビット整数値 IV は, 以下のように SSRC, SRTP パケットインデックス i, および SRTP セッションソルト鍵 k_s によって定義されなければなりません。
IV = (k_s * 2^16) XOR (SSRC * 2^64) XOR (i * 2^16)
上記の XOR 和の 3 つの項のそれぞれは, 128 ビット値として考えた場合に操作が適切に定義されるように, 必要なだけの先行ゼロでパディングされます。
SSRC を含めることで, 同じ RTP セッション内の異なる SRTP ストリームを保護するために同じ鍵を使用できます。セキュリティに関する注意事項については, セクション 9.1 を参照してください。
SRTCP の場合, 複合パケットの最初のヘッダーの SSRC を使用しなければならず, i は 31 ビットの SRTCP インデックスでなければならず, k_e と k_s は SRTCP 暗号化セッション鍵とソルトに置き換えられなければなりません。
初期値 IV は各パケットで固定されており, カウンタの目的で最下位ビットに 16 個のゼロを "予約" することによって形成されることに注意してください。鍵ストリームの再利用を避けるために, 任意の固定 IV 値に対して生成される鍵ストリームのブロック数は 2^16 を超えてはなりません (下記参照)。AES のブロックサイズは 128 ビットであるため, 2^16 個の出力ブロックは, 最大の RTP パケットを暗号化するために必要な 2^23 ビットの鍵ストリームを生成するのに十分です (IPv6 "ジャンボグラム" [RFC2675] を除く。これらは RTP ベースのマルチメディアトラフィックに使用される可能性は低いです)。暗号化できるパケットの最大ビットサイズに対するこの制限は, 確率的攻撃の有効性を制限することによって暗号化方法のセキュリティを保証します [BDJR]。
特定のカウンタモード鍵の場合, ツータイムパッド状況のセキュリティ露出を避けるために, 入力として使用される各 IV 値は異なっていなければなりません (セクション 9.1)。この制約を満たすために, 実装は ROC || SEQ の SRTP パケットインデックスの組み合わせと, IV の構築に使用される SSRC が任意の特定の鍵に対して異なることを保証しなければなりません。この一意性を保証しないと, セキュア RTP にとって壊滅的な結果となる可能性があります。これは, このような失敗を許容できる可能性がある RTP 自体の状況とは対照的です。専用のセキュリティモジュールが存在する場合, RTP シーケンス番号と SSRC はそのモジュールによって生成またはチェックされることが推奨されます (つまり, SRTP システムにおけるシーケンス番号と SSRC の処理は鍵と同様に保護される必要があります)。