藍光光碟機的加密方法

在藍光的光碟片上, 有著多重的保護機制. 隨然他們已經被有心人士破解了, 但是對於 BD player 或是 BD disk 的生產廠商來說, 卻是一個不得不繼續維護的規格, 以免問題變得更嚴重. (謎之音: 會更嚴重嗎? 有抓不到的片子嗎? 僅存的功能應該說是維護正版的尊嚴吧!)

無論如何, 我們來回顧一下 BD 的保護機制. 大致上有下面三種:

AACS (Advanced Access Control System) – 主要的保護機制.

BD+ – 使得每個 title 都有唯一的 scramble 方式. Content code 存在光碟片上.

ROM Marks – 存在光碟片上, 這些加密的資料用來給 AACS engine 生成 key (金鑰). 必須是取得授權的 BD 光碟機才能夠讀出上面的資訊, 用 bit-by-bit 也無法複製此部分.

其中比較重要的顯然是 AACS, 我就先把它做個描述. 接著再補充 BD+ 的部分.

 AACS 主要是使用 128 bits AES 來加解密影音的內容, 其中需要許多步驟來生成最後的 key, 而不是大剌剌地把 key 放在某個地方. 其步驟大致如下:

1. 從光碟片的 Media Key Block (MKB) 的一堆 key 中取出符合這個 BD player 的 key. 若是某支 key 已經被 hack了 (compromised), 新版的藍光光碟就不會再存放這支 key.

2. 從 ROM Mark 所保護的區域取出 Key Conversion Data (KCD), 和 step 1 的結果生成 AES-G.

3. 從 Sequence Key Block (SKB) 取出 data 加上 Volume ID 和 step 2 的結果生成新的 AES-G.

4. 用 step 3 的結果來解 disk 上的 title key, title key 受到 ROM Mark 的保護.

5. 用 AACS 的 public key 來驗證 title key 是否合法. 如果合法, 就用 title key 來做 disk 的解密.

除了 title key 的機制之外, 不合法的 BD player 與 BD 光碟機也都有黑名單. 這個黑名單會放在新版的藍光光碟片上. BD player 與 BD 光碟機要互相查詢對方是否在黑名單裡面.

這些保護機制雖然已經層層把關, 但是 user 仍然有可能從類比輸出或是數位輸出把影音內容 "備份" 起來. 為了防堵這個漏洞, AACS 另外有 4 個方法來阻止 "小偷".

1. Analog Sunset — 類比介面的落日條款. 2010 年開始, AACS 所保護的內容只能有限制地輸出. 到了 2013 年, 就不允許再有類比輸出了.

2. Image Constraint Token — 如果 BD 裝置有類比輸出, 視訊方面要受限在 52 萬畫素以下. 也就是 1080p 顯示器上 25% 的大小.

3. Digital-Only Token — 完全禁止 video 在類比輸出上面播放的技術.

4. Audio WaterMark – 嗯, 終於講到 audio 了.

Audio watermark 的做法是在 audio bit stream 的聽不到的部分, 載入一些 data. 這樣大家應該可以知道為什麼 Dolby, DTS 要狂推 192 KHz 這種超級高頻了吧! Audio watermark 又可以分為  “theatrical” 和“consumer” 兩類. 前者表示劇場級的音效, 只要看到這個就表示這個音源是非法的, BD player 會立刻停止播出. 第二種表示音源受到 AACS 的保護, 如果沒有偵測到合法的 AACS 系統在運作, 也是立刻喊 "卡"!

最後介紹一下 BD+, 原先我們的同仁認為它是一次性的檢查, 所以沒有 implement 相關的硬體. 雖然它的確不需要硬體, 不過它可不是個省油的燈! 如果沒有預留足夠的計算量, 它也可能會成為運算的瓶頸.

BD+ 要做三件事:

1. Media Transform function: 把光碟上的資料讀出來, 在 BD+ Virtual Machine 上面做 descramble. 特別的是, descramble 的 code 不是 BD player 管的, 而是存在藍光光碟上的. 而Fix-table 是存在 AV bit stream 裡面的. 只要 playback, BD+VM 就會運作, 不是只做一次喔!

2. Counter Measure: 和 AACS 不一樣的地方在於, AACS 看到被 hack 的 BD player 會直接拒絕和它溝通. 但是根據 BD+ 的概念, 若是一台 BD player 被破解了, 這台 BD player 總會去播其他的新 BD 光碟, 而新的光碟上面就會針對這家被破解的 BD player 特別給予 "更正"! 因為 BD VM 的 code 是參考光碟上面的, 也就是 content-specific.

3. 如果第二招也無效, BD+ 採用 Native code 來做 counter measure. 如果播放的時候, BD+ 偵測到這個 BD player 已經被 hack 過, 而 native code 又存在的話, 它會改 run native code 而不是被 hack 過的 code.

基本上, 只有在 playback 的時候, BD+ VM 才會去監視 BD player 是否合法? 而 BD+ VM 偵測的方法則是專注在 memory footprint 上面, 不會竄改 BD player 的設定, 也不會收集客戶的私人資訊, 這是據說 BD+ 比較優異的地方.

[reference]

http://www.dell.com/downloads/global/vectors/brcp.pdf