レッスン
理論 — 10ブロックに1つのブロックを暗号化 (CENC cbcs)
Common Encryption (ISO/IEC 23001-7) は、1つの暗号化ファイルセットで複数のDRMシステムに対応するための規格です。メディアサンプルをAES-128で暗号化しつつ、その構造を読み取れる状態に保ちます。符号化された各ビデオスライスは、平文の部分(NALユニットの長さ、ヘッダ、スライスヘッダ)と、それに続く保護範囲に分割されます。cencスキームは、この保護範囲のすべてのバイトに対してカウンターモードでAESを実行します。一方、cbcsスキームはCBCモードを使用し、16バイトの完全なブロックのパターン(1つを暗号化し、9つを平文のまま残す)を範囲の最後まで繰り返します。末尾にある不完全なブロックは平文のまま残されます。
各記号の意味
L- スライス。符号化されたスライスのNALユニット1つ(バイト単位)
h- 平文のヘッダ。長さプレフィックス、NALヘッダ、スライスヘッダ。サブサンプル暗号化によって読み取れる状態で残される
B- 保護範囲 P = L − h に含まれる16バイトの完全なブロック。cbcsはそのうち⌈B/10⌉個を暗号化する
- 前提
- ストリーム全体でスライスサイズが1つであると仮定しています。実際のエンコーダは、他の予測元になるピクチャには大きなスライスを、それ以外には小さなスライスを書き出します。そのため、スライスごとの数値は個々のスライスで成立しますが、ストリームに関する数値はすべてが等しいスライスで構成されたストリームを説明するものです。平文ヘッダのデフォルトを32バイトとしているのは、これが仕様で固定されている唯一の長さだからです。AppleのSAMPLE-AESは、NALタイプバイトとその後の31バイトを平文のまま残します。CENCパッケージャは正確にヘッダだけを平文にしますが、その長さはスライスごとに異なります。パラメータセット、SEIメッセージ、およびサンプルの周囲にあるMP4ボックスは平文であり、計算から除外しています。したがって、実際のファイルの暗号文の割合はもう少し低くなります。音声は48 kHzのAAC-LC、1フレーム1024サンプルで、暗号化されていると仮定しています。音声を暗号化せずに提供するサービスでは、その分の処理負荷もなくなります。
- 成り立たない場合
- 映像以外のものを隠す手段としては機能しません。平文のヘッダは読まれることを前提として存在しており、鍵の有無に関わらず、ファイルを持つ者にはすべてのスライスの種類、すべてのフレームのサイズ、そしてストリーム全体のタイミングが筒抜けになります。
全プロセスの詳細解説
-
1:9のパターンが過剰暗号化を引き起こす最大値 3 ステップ
スライスの暗号化率は10分の1をどこまで超えるのでしょうか? マクロブロック行ごとに1スライスを押してください。306バイトで、暗号文は10.46%になります。このページでは1回に1つのスライスを表示します。32バイトのヘッダを持ち、1,000バイト以上あるスライスのなかで、cbcsが暗号化する最大の割合を見つけてください。また、その最悪のケースがスライスの拡大とともにどのように縮小していくかを確認してください。
-
割合は 16⌈B/10⌉/L になります。⌈B/10⌉ の値が維持される間は L が大きくなるにつれて割合が下がるだけなので、最悪のサイズとなるのは新しい暗号化ブロックがちょうど始まったタイミングです。つまり、保護範囲が正確に 10k + 1 個の完全なブロックを持ち、そのうち k + 1 個が暗号化されている状態です。
-
そのサイズでは L = h + 16(10k + 1) となります。これを割り算し、10分の1の部分を切り離してみましょう。残った部分が10%の超過分であり、L に対する固定バイト数として表されます。
-
h = 32 の場合、超過分は L に対して 11.2 バイトになります。1,000バイト以上で最初に最悪のサイズとなるのは k = 6 のときです。これは1,008バイトのスライス内に61個の完全なブロックがあり、そのうち7個が暗号化されるケースです。
解答
1,008バイト中の112バイトで、11.11%です。1,000バイト以上でこれより悪化するものはありません。超過分は 1/L として減少していくため、10,000バイト以上で最悪のスライスは10,128バイト時の10.11%となり、これが最初の解説で引用した範囲の上限にあたります。さらにこの数式は、どの長さのヘッダが過剰暗号化を終わらせるかも示しています。超過分は 16 − (h + 16)/10 バイトであり、これは h = 144 のときにゼロになります。つまり、平文ヘッダが144バイト以上あるスライスであれば、サイズがいくつであっても10分の1を超えて暗号化されることは決してありません。
-
参考文献 (3)
- The standard itself. Paywalled; the publisher's preview is openly readable and carries the introduction, the scope and the table of contents, which is where the page's two quotations come from: ISO/IEC 23001-7:2023, Information technology — MPEG systems technologies — Part 7: Common encryption in ISO base media file format files. 4th edition. Preview via iTeh Standards.
- The cbcs rules as a working decryptor applies them, with the standard's §9.6.1 and §10.4.2 quoted in its comments: the pattern over whole blocks, the partial block left clear, and a 0:0 pattern meaning every block: The Chromium Authors, media/cdm/cbcs_decryptor.cc, Chromium source tree (BSD licence).
- HLS's transport-stream format, SAMPLE-AES, which uses the same one-block-in-ten pattern with a fixed 32-byte clear leader. RFC 8216 names it as the format for non-fMP4 segments and 'cbcs' for fMP4 ones: Apple Inc., "MPEG-2 Stream Encryption Format for HTTP Live Streaming", §2.2 H.264 Video Streams and §2.3 Audio Streams. Documentation Archive, updated 2015-10-29.