藍光 - Arch Linux 中文维基

跳至內容

# 藍光

出自 Arch Linux 中文维基

相關文章

- 光碟驅動器

翻譯狀態：

- 本文（或部分內容）譯自 Blu-ray，最近一次同步於 2025-01-04，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

本文旨在幫助 Linux 用戶在電腦上播放合法購買的藍光（Blu-ray）光碟。

注意：鑑於 Linux 上缺乏商業性藍光播放軟體，用戶必須使用開源庫來處理保護光碟內容的 DRM 方案。這在大多數允許互操作性的國家都是合法的。

## 原理

### 藍光光碟 DRM

與 DVD CSS 一旦特定加密密鑰洩露就會被攻破不同，藍光使用了更強的 DRM 手段，使得其更難以被破解。第一，AACS 標準使用了更複雜的加密流程來保護光碟內容，且一旦密鑰洩露，業內可將舊密鑰吊銷，並通過新光碟分發新的密鑰。第二，藍光具有另一層保護方式：BD+。雖然大部分商業光碟都使用 AACS，有一些額外使用了 BD+。在 2007 年，AACS 系統被黑入，解密密鑰被流出到網絡上，並由此產生了許多解密軟體，但 Linux 用戶的興趣主要集中如何於在電腦上播放合法購買的光碟的能力。雖然業內吊銷了最初流出的解密密鑰，但新密鑰還是時不時被流出，基本上已成了貓鼠遊戲。

#### AACS

AACS 標準和解密流程公開於 [1]。大量相關文章和研究報告位於 [2]，[3] 和 [4][失效連結 2024-07-30 ⓘ]。

libaacs包 是 VideoLAN 開發團隊基於高級內容訪問系統（Advanced Access Content System，AACS）標準實現並分發的開源庫 [5]。該項目不包含任何可被用於解密版權資源的密鑰或證書，但只要結合密鑰資料庫文件，就可以將其用於播放使用 AACS 標準的藍光光碟。該文件名為 `KEYDB.cfg`，會被 libaacs 在 `$XDG_CONFIG_DIRS/aacs` 路徑下進行訪問。該文件的格式位於 [6]。

##### AACS 解密流程

認證播放器解密受 AACS 保護的光碟內容分為四個階段：

1. 軟體/嵌入式播放器的設備密鑰和光碟的媒體密鑰塊（Media Key Block，MKB）被用於獲取「處理密鑰」，該密鑰加上來自 MKB 的其它數據被用於計算媒體密鑰。
2. 該媒體密鑰，加上播放器向光碟出示有效主機證書後獲取的光碟卷 ID（Volume ID，VID）被用於生成卷唯一密鑰（Volume Unique Key，VUK）。
3. 該 VUK 被用於解密光碟的一系列頭密鑰。
4. 最後，這些頭密鑰被用於解密受保護的光碟媒體內容。

注意，這些是包含 MKB 的光碟。從 2006 年第一個藍光產品發布開始，MKB 就一直在不斷更新。最新的 MKB 版本是 78，很多光碟其實有完全相同的 MKB。播放器軟體提供主機密鑰和證書，而光碟機包含了一系列被吊銷的主機密鑰/證書清單。主機密鑰/證書吊銷在 MKB 版本比之前播放過的盤更高的新光碟被（嘗試）解密/播放時發生（將光碟插入播放器時不會），在該情況下，光碟機會失去使用舊主機密鑰/證書的能力。

通過使用 libaacs包，可以跳過以上部分階段到最後一步，使得媒體播放器可以播放光碟。該步驟是通過在 `KEYDB.cfg` 中放入以下任一/兩者實現的：

- 一個有效（於光碟 MKB 版本對應）處理密鑰和一個有效（即未被光碟機吊銷）主機密鑰/證書
- 針對特定光碟的有效 VUK

如果 libaacs 找到了針對光碟 MKB 版本有效的處理密鑰及有效主機密鑰和證書，它就可以從步驟 2 開始解密流程。然而，主機密鑰/證書會隨著新藍光光碟的傳播而周期性被吊銷。在吊銷後，光碟機將無法讀取再新的和舊的光碟。該操作通常無法逆轉，唯一修複方法為提供更新的主機密鑰/證書（對於 Windows 用戶就是更新對應的播放器軟體）。該方法的優勢為，只要主機密鑰證書/有效且光碟使用處理密鑰已知的 MKB，libaacs 就可以為任意光碟計算 VUK。

幸運的是，在無有效處理密鑰及/或主機證書被吊銷的情況下，libaacs 還是有辦法解密光碟內容：在 `KEYDB.cfg` 文件內提供有效 VUK，使得 libaacs 跳到步驟 3 開始處理。與處理密鑰不同，VUK 是特定於單個光碟的，但優勢是只要被計算出來，VUK 就無法被吊銷。如果 libaacs 使用有效主機密鑰/證書成功進行了步驟 2，那它會將步驟 3 生成的 VUK 存放在 `~/.cache/aacs/vuk`。後續對同一光碟的播放，libaacs 會重用之前保存的 VUK。因此，建議備份這些 VUK，或是在網上進行共享。

已經有多次從不同來源彙編 VUK 的嘗試，最早的可在如 Doom9.org 的論壇上找到。隨著社群不斷組織起來，[7] 上創建了一個中心化的 VUK 資料庫，其中包括了超過 24,000 個 VUK，但該網站似乎已不再進行維護。由 FindVUK tool 的作者倡導的新庫創建在了 http://fvonline-db.bplaced.net/ ，其中包含超過 150,000 條可下載項，使其成為了最完整的公開可用 VUK 來源。

#### BD+

BD+ 是藍光 DRM 的一個可選附加組件。在 2013 年 12 月，VideoLAN 發布了 libbdplusAUR，其提供了實驗性 BD+ 解密支持。該庫不提供 BD+ 解密所需的密鑰或證書，需要你手動在其他地方獲取並安裝。

BD+ 主要工作方式為在視頻流中添加錯誤，雖不到無法觀看的地步，但其持續性的偽影足以令人難以忍受。官方播放器通過使用「修復表」來修復這些問題。「修復表」從網上下載，提供了將損壞的視頻流轉換為正確視頻流的映射。

## 回放

### 準備工作

1. 安裝 libbluray包 和 libaacs包。
2. 從 [8] 下載一個 `KEYDB.cfg` 文件（名稱區分大小寫），並複製到 `~/.config/aacs` 或 `/etc/xdg/aacs` 目錄下，其中包含解密超過 90,000 張光碟所需的 VUK 數據。順帶一提，不同語言包含的光碟解密信息是一樣的，只有光碟名稱被翻譯過。光碟數據會不斷更新，所以你可能會想定期更新下該文件。
3. 你可以將 [9] 提供的處理密鑰和主機密鑰/證書數據複製到 `KEYDB.cfg` 文件的開頭，這些數據適用於 MKB v68 及更舊的光碟。該操作僅適用於未在 VUK 文件中列出的光碟，且只對從未讀取過 MKB v70 及以上光碟的光碟機有用。
4. 如有需要的話（如卷未被自動掛載），可以用如下命令將光碟掛載到目錄下：

       # mount /dev/sr0 /media/blurays

### 調取光碟信息

libbluray包 附帶的 `bd_info` 工具可用於識別光碟使用的加密和 DRM 方案，以及當前配置是否可以對其進行解密。例如：

    # bd_info /dev/sr0

    Using libbluray version 1.2.1
    aacs.c:597: Error calculating media key. Missing right processing key ?
    mmc.c:386: AACS not active or supported by the drive
    bluray.c:1091: WARNING: BluRay profile 6 BD-J menu support is experimental
    Volume Identifier   : TITLE
    BluRay detected     : yes
    First Play supported: yes
    Top menu supported  : yes
    HDMV titles         : 8
    BD-J titles         : 3
    UNSUPPORTED titles  : 0

    BD-J detected       : yes
    Java VM found       : yes
    BD-J handled        : yes
    BD-J organization ID: XXXXX
    BD-J disc ID        : XX000000000000000000000000XXXXX

    AACS detected       : yes
    libaacs detected    : yes
    Disc ID             : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    AACS MKB version    : 76
    AACS handled        : yes

    BD+ detected        : no
    ...

注意，`AACS handled: yes` 表示光碟可被解密，且回放應不成問題。

### 解密流程

打開例如 VLC 的藍光播放軟體，並播放光碟（以 VLC 為例，選擇 Media > Open Disc，然後進入 Disc 標籤，選擇 Blu-ray，並確保選中了 No disc Menus）。接著播放軟體會進行如下解密操作：

1. 用戶使用支持 libbluray 和 libaacs 的播放軟體打開藍光碟
2. 如果藍光碟沒有使用 AACS 加擾，跳到步驟 4.1。
3. 如果藍光碟使用了 AACS 加擾，那麼 libaacs 將：
   1. 檢查 `~/.cache/aacs/vuk/` 是否存在有效 VUK，如果有，就跳到步驟 4.1；如果沒有，繼續下一步。
   2. 讀取 `$XDG_CONFIG_DIRS/KEYDB.cfg`：
      1. 如果存在有效 VUK，就跳到步驟 4.1，否則繼續下一步。
      2. 如果存在有效處理密鑰（與光碟 MKB 版本對應），且存在有效（未被光碟機吊銷）的主機密鑰/證書，那麼 libaacs 將嘗試計算 VUK。計算出的 VUK 將被保存在 `~/.cache/aacs/vuk` 供日後使用，並繼續到步驟 4.1。如果找不到有效處理密鑰或主機密鑰/證書，就跳到步驟 4.2。
4. 結果
   1. 播放器軟體成功讀取到光碟內容。
   2. 播放器軟體讀取光碟內容失敗。

#### 使用 VUK 進行解密（步驟 3.1 或 3.2.1）

由於 VUK 是藍光光碟最下游的解密密鑰，因此使用光碟專用的 VUK 將始終有效，而且不會被業界撤銷。但是，每張光碟只有唯一的一個 VUK 對應一個 VID，因此這種方法依賴於 VUK 列表或資料庫。如果滿足以下任意一種情況，就可以得出 VUK：

- 使用處理密鑰和主機密鑰/證書按下文方法解密過一次，並將得出的 VUK 存放到了 `~/.cache/aacs/vuk`；
- 從第三方獲取到了光碟的有效 VUK（即 `KEYDB.cfg` 中的數據）。這使得在處理密鑰和主機密鑰/證書被光碟 MKB 版本註銷的情況下，還能讀取光碟內容。

如果不滿足以上情況，播放軟體會嘗試通過第二種方法進行解密。

#### 使用處理密鑰和主機密鑰/證書進行解密（步驟 3.2.2）

該方法使用了 `KEYDB.cfg` 開頭的處理密鑰和主機密鑰/證書，只有在這兩者未被光碟機吊銷的情況下可用。

注意：從 2019 年 8 月開始，最新的藍光碟都攜帶了 MKB v70。鑑於最新公開的處理密鑰和主機密鑰/證書僅對 MKB v68 及更老的版本可用，該方法只適用於讀取過不高於 MKB v68 版本光碟的光碟機有效。如果你讀取過包含 MKB v70 及以上版本的光碟，那所有公開已知的主機密鑰/證書都已被光碟機註銷，你只能使用上面的方法。

如果該方法可用，libaacs 將在播放光碟後將 VUK 保存在 `~/.cache/aacs/vuk` 下，文件名是光碟 ID，內容是 VUK。即使在沒有有效 `KEYDB.cfg` 文件的情況下，VLC 還是會復用該 VUK，因此建議備份該文件夾以供後續使用。

#### BD+ 支持

libbdplusAUR 提供了實驗性 BD+ 解密支持。但如果該方法失敗，用戶只能使用類似 makemkvAUR 或 DVDFab（在 Wine 下使用）的商業方案。

自 0.2.0 版本起，libbdplus 支持用於校正數據流的緩存表，從而避免了完全模擬 BD+ 虛擬機的需要。

為了讓 libbdplus 正常工作，需要進行以下準備：

1. 從 Doom9 論壇 [10] 下載 BD+ 虛擬機文件及緩存表存檔。
2. 將虛擬機文件移動到 `~/.config/bdplus/vm0/`。
3. 解壓緩存表，並移動到 `~/.cache/bdplus/convtab/`。

完成後，在播放受 BD+ 保護的光碟時，libbdplus 應能找到相應的表並修複數據流。

### 媒體播放器

有些媒體播放器可以使用 libbluray 和 libaacs 來播放 AACS 加密過的藍光碟。

#### mplayer

用 mplayer 播放藍光碟的基本命令是：

    $ mplayer br:////bluray/mount/dir

或者是：

    $ mplayer br://title number -bluray-device /bluray/mount/dir

##### 視頻卡頓

你可能需要啟用硬體加速和多核 CPU 支持，才能流暢播放藍光碟。

對於 nvidia 顯卡用戶，可以通過安裝 libvdpau 來啟用硬體加速，並對 mplayer 使用 `--hwdec=auto` 選項，例如：

    $ mplayer --hwdec=auto br:////bluray/mount/dir

使用 `--vd-lavc-threads=N` 選項來啟用多核 CPU 支持，其中 `N` 是核心數，例如：

    $ mplayer --vd-lavc-threads=4 br:////bluray/mount/dir

##### 音頻語言錯誤

你可以用 `#` 鍵查看回放語言列表。

##### 音畫不同步

你需要從 mplayer 的第一個輸出中，找到藍光使用的編解碼器。它位於 」Selected video codec「 一行的末尾。

對於 H.264 光碟，使用 `-vc ffh264vdpau` 選項，例如：

    $ mplayer -vc ffh264vdpau br:////bluray/mount/dir

對於 VC-1 光碟，使用 `-vc ffvc1vdpau` 選項，例如：

    $ mplayer -vc ffvc1vdpau br:////bluray/mount/dir

對於 MPEG 光碟，使用 `-vc ffmpeg12vdpau` 選項，例如：

    $ mplayer -vc ffmpeg12vdpau br:////bluray/mount/dir

#### mpv

可以通過如下命令播放藍光碟：

    $ mpv bd://title/device

#### VLC

使用如下命令進行回放：

    $ vlc bluray:///bluray/mount/dir

##### VLC 長時加載

如果 VLC 一直在加載，同時沒有出現報錯信息，請參考 VLC#介質無法加載。

#### xine

使用如下命令進行回放：

    $ xine bluray:///bluray/mount/dir

### 排障

#### KEYDB.cfg 文件缺失

如果 `~/.cache/aacs/vuk` 中存在有效 VUK，則 libaacs 無需 `KEYDB.cfg` 來解密光碟內容。但是，`$XDG_CONFIG_DIRS/aacs/` 下仍必須要有一個 `KEYDB.cfg` 文件（與是否為空無關）。

#### 主機密鑰/證書被吊銷

不幸的是，當嘗試播放較新的藍光碟時，可能會發生主機密鑰/證書（即受認證的軟體播放器的密鑰）被光碟機吊銷的情況。出現這種情況時，aacskeysAUR 將返回以下信息：

    The given Host Certficate / Private Key has been revoked by your drive.

這是 AACS 保護方案的一部分：編輯人員可以吊銷在網際網路上洩露的舊軟體播放器主機密鑰，並在新的商業光碟上分發這些列表。該操作不可逆，即使重新刷寫光碟機也無法修復。糾正這種情況的方法只有兩種：

- 將 `KEYDB.cfg` 中的主機密鑰/證書替換為尚未被吊銷密鑰/證書
- 參考上文在 `KEYDB.cfg` 中添加光碟特定的 VUK。VUK 無法被業內吊銷。

使用 mplayer 或 VLC 將光碟解密成功後，libaacs 會將 VUK 保存在 `~/.cache/aacs/vuk` 中。如果 `KEYDB.cfg` 中的主機密鑰/證書隨後被吊銷，VLC 仍能使用已存儲的 VUK，建議備份 `~/.cache/aacs` 目錄以供後續使用。

#### 使用 aacskeys

安裝 aacskeysAUR。你需要在包含有效主機密鑰/證書和處理密鑰的文件夾中運行 aacskeysAUR:

    $ cd /usr/share/aacskeys

然後運行：

    $ aacskeys /bluray/mount/dir

例如：

    $ cd /usr/share/aacskeys && aacskeys /media/blurays

你也可以將藍光碟添加到密鑰資料庫中：編輯 `$XDG_CONFIG_DIRS/KEYDB.cfg` 並按如下格式添加 aacskeys 的輸出：

    0xunit key file hash = Film Title    | V | 0xvolume unique key

##### aacskeys 無法生成密鑰

試下 makemkvAUR，它給出的報錯信息相對會更清晰些。

在光碟機支持的情況下，你可以嘗試刷入定製固件來解除讀取限制，也就是「LibreDrive」模式。makemkvAUR 附帶的 `sdftool` 可被用於在 Linux 下原生刷寫光碟機固件。具體選項作用可參考 GUI 封裝程序的討論貼，可幫你決定是否需要使用如 `enc` 等選項。

和其它固件刷寫操作一樣，該操作有可能會損壞設備，需十分小心。

刷入新固件後，光碟機將能允許 VLC 等媒體播放器直接讀取光碟機，無需使用 makemkv。

#### 如果你有對應的 VUK，但還是沒法播放藍光碟

有些光碟機需要加載 sg 內核模塊。

    # modprobe sg

## 參考

下面為一些藍光碟/HD-DVD 盤的解密方式。用戶可在合理使用原則的指導下使用它們對商業藍光電影進行備份：

- aacskeysAUR - 開源
- makemkvAUR - 閉源/功能有限的免費測試版，提供原生 Linux 版本

- vukextract VukExtract 支持+討論 - 使用私有 DVDFab 來提取 VUK 的開源軟體
- AnyDVD HD[失效連結 2024-07-30 ⓘ] - 商業軟體，需要 Windows 虛擬機來運行
- DVDFab HD Decrypter - 用於 Windows 下的商業軟體，但可以用 Wine 來運行
- Aiseesoft Blu-ray Player - Windows 下的商業播放軟體，但可以用 Wine 來運行
- 使用 libaacs 和 libbdplus 來播放藍光碟 - Doom9 論壇討論貼

分類：​

- 多媒體
- 光碟
- 包含失效連結的頁面

藍光
新增話題