# Blu-ray (日本語)

関連記事

- オプティカルディスクドライブ

この記事では Linux ユーザーが合法的に購入した BluRay ディスクをコンピューター上で再生する方法を説明しています。Linux で利用可能な公式の BluRay プレイヤーのソフトウェアは存在しないため、Linux ユーザーはディスクのコンテンツを保護している DRM を扱えるオープンソースのライブラリを使う必要があります。これは相互運用性が許可している国では合法です。日本では著作権法の改正によって保護技術を回避しての複製は違法になっていますが、再生は問題ありません。

## 仕組み

### BluRay DRM

ユニークな暗号化キーが発見されて簡単に突破された DVD の CSS とは対照的に、BluRay はより強固な DRM 機構を使っており、それによって難易度が跳ね上がっています。まず、AACS 規格はディスクのコンテンツを保護するために非常に複雑な暗号プロセスを使用しているだけでなく、突破されたキーを無効にすることが可能になっており、新しい BR ディスクを使って新しいキーを配布できるようになっています。次に、BluRay はもうひとつの保護レイヤーである BD+ を使うことも可能です。市販のディスクのほとんどは AACS を使っていますが、中にはそれに加えて BD+ も利用しているものも少数ながら存在します。2007年に、AACS システムは解読され、復号キーがインターネットに出回りました。多くの復号化プログラムが利用可能になりましたが、Linux ユーザーにとって重要なのは（合法に購入した）ディスクをコンピューターで再生できるかということです。業界は最初にリークされた復号キーを無効にすることができましたが、イタチごっこのように新しいキーが定期的に公開されています。

#### AACS

AACS の仕様と復号プロセスは [1] で公開されています。さらに詳細な説明が多数の記事や研究論文でなされています: [2], [3], [4]。 libaacs は VideoLAN 開発チームによる Advanced Access Content System の仕様を実装するという研究プロジェクトです。オープンソースのライブラリとして配布されています [5]。このプロジェクトでは著作権保護で暗号化されたデータをデコードするのに使うキーや証明書を提供していません。しかしながら、キーのデータベースファイルと組み合わせることで、AACS 規格を使っている BluRay ディスクを再生するのに使用することが可能です。このファイルは `KEYDB.cfg` と呼ばれており、libaccs は `~/.config/aacs` からアクセスします。このファイルのフォーマットは [6] から確認できます。

##### AACS の復号プロセス

ライセンスを受けたプレイヤーによる保護ディスクの AACS 復号化プロセスは4段階に分けて行われています:

1. ソフトウェアや組み込みプレイヤーの Device Key と、ディスクの Media Key Block (MKB) データを使って "Processing Key" を取得します。さらに (MKB の他のデータと合わせて) それによって Media Key を計算します。
2. この Media Key と、ドライブの有効な Host Certificate を持つプレイヤーによって取得されたディスクの Volume ID (VID) を使って、Volume Unique Key (VUK) を計算します。
3. 計算された VUK を使ってディスクの暗号化された Title Key を解読します。
4. 最後にこの Title Key がディスクの保護されたメディアコンテンツを解読します。

MKB を含んでいるのはディスクだということに注意してください。MKB は最初の BluRay が2006年に市販開始された時から更新が行われています。最新の MKB はバージョン 30 ですが、実際はほとんどの MKB は同じキーを共有しています。ソフトウェアプレイヤーは Host Key/Certificate を提供する一方、ドライブは無効にされた Host Key/Certificate のリストを所持しています。

libaacs を使うことで、復号化プロセスの最後の手順に進み、メディアプレイヤーがディスクを再生できるようになるまでの段階をいくつかスキップすることができます。これは `KEYDB.cfg` ファイルで以下のどちらか（もしくは両方）を用意することで可能です:

- (ディスクの MKB バージョンに対応している) 有効な Processing Key と有効な (ドライブによって無効にならない) Host Key/Certificate
- 特定のディスクの有効な VUK

ディスクの MKB バージョンに対応した有効な Processing Key と有効な Host Key/Certificate を libaacs が見つけると、手順2から復号化プロセスが開始されます。ただし、Host Key/Certificate は新しい BluRay ディスクによって定期的に無効にされます。一度無効になると、ドライブは新旧両方のディスクが読み込めなくなります。基本的にこれを元に戻すことは不可能で、新しい最新の Host Key/Certificate を用意するしか直す方法はありません (Windows ユーザーの場合、ソフトウェアプレイヤーのアップデートでこれが行われています)。この方法の利点は、Host Key/Certificate が無効にされるまで、Processing Key が判明している MKB バージョンをディスクが使っている限り、libaacs は全てのディスクの VUK を計算することができるということです。現在、MKB バージョン 1 から 28 までの Processing Key が計算済みでインターネットから取得できるようになっています。

ありがたいことに、有効な Processing Key がなかったり Host Certificate が無効になっているような場合、libaacs にはディスクを復号する代わりの方法があります: `KEYDB.cfg` ファイルに有効な VUK を準備することです。これによって libaacs は手順3まで直接飛ぶことができます。Processing Key とは対照的に、VUK はディスクによって異なります。そのためユーザーはサードパーティから VUK を取得する必要があるので、あまり効率的ではありません。しかしながら VUK は無効にされることがないという点では大きく有利です。libaacs は (有効な Host Key/Certificate を使って) 手順2が実行できる場合、手順3で計算した VUK を `~/.cache/aacs/vuk` に保存します。同じディスクを二度目に見る時は、libaacs は保存された VUK を再利用できます。そのため作成された VUK はバックアップしておくと良いでしょう。

#### BD+

2013年12月、VideoLAN は BD+ 復号化の実験的なサポートを提供する待望の libbdplus をリリースしました。

### 概要

1. ユーザーが libbluray と libaacs をサポートしているビデオプレイヤーで BluRay の再生を始めます。

2. BR ディスクが AACS で暗号化されていない場合、4a に行きます。

3. BR ディスクが AACS で暗号化されている場合、libaacs は以下を実行します:

  3.1. ディスクの有効な VUK が `~/.cache/aacs/vuk/` に存在するか確認します。存在する場合、4a に行きます。存在しない場合、次のステップに進みます。

  3.2. `~/.config/aacs/KEYDB.cfg` を読み込みます:

    3.2.1. 有効な VUK が存在する場合、4a に行きます。存在しない場合、次のステップに進みます。

    3.2.2. (ディスクの MKB バージョンに対応している) 有効な Processing Key と有効な Host Key/Certificate が存在する場合、libaacs は VUK を計算します。今後の使用のために VUK は `~/.cache/aacs/vuk` に保存されます。ステップ 4a に行きます。

  3.3 有効なキーが存在しない場合、ステップ 4b に行きます。

4a. ソフトウェアプレイヤーはディスクのコンテンツを再生することができます。

4b. ソフトウェアプレイヤーはディスクのコンテンツを読み込むことができません。

## 再生

### 準備

まず公式リポジトリから libbluray と libaacs をインストールしてください。それから方法1を試してみて、それでダメだったら、方法2を試して下さい。2つの方法は共存することができ、同じ `KEYDB.cfg` ファイルで両方の方法を使うことができます。

#### 方法 1 (PK と Host K/C)

http://vlc-bluray.whoknowsmy.name/files/KEYDB.cfg を `~/.config/aacs/` にダウンロードしてください (VUK は含まれていませんが、MKB v28 までの Processing Key と Host Key/Certificate が含まれています。MKB v30 のディスクでは無効になっています)。あなたのドライブがこの `KEYDB.cfg` ファイルの Host Key/Certificate を無効にしない場合にだけこの方法が使えます。

    cd ~/.config/aacs/ && wget http://vlc-bluray.whoknowsmy.name/files/KEYDB.cfg

次に、bluray をディレクトリにマウントしてください。例:

    # mount /dev/sr0 /media/blurays

(mplayer や vlc を使って) ディスクを再生すると、libaacs は `~/.cache/aacs/vuk` に VUK を保存します。ファイル名はディスクの ID で中身は VUK です。有効な `KEYDB.cfg` ファイルが見つからないとき VLC はこの VUK を再利用するため、今後のためにこのディレクトリをバックアップしておくと良いかもしれません。

#### 方法 2 (VUK)

上述の hcert による bluray 再生が上手く行かない場合、http://forum.doom9.org/attachment.php?attachmentid=11170&d=1276615904 や http://forum.doom9.org/showthread.php?p=1525922#post1525922 (こちらの方が新しい) から VUK のリストをダウンロードしてください。`~/.config/aacs` ディレクトリに2つのファイルを作成する必要があります。残念ながら、どちらも 'KEYDB' という名前で配布されています。幸いにも、doom9 のフォーラムでは VUK ファイルは基本的に KEYDB.txt という名前が付けられています。'KEYDB.cfg' ファイルはそのままこのディレクトリにダウンロードできます。'KEYDB.txt' ファイルは 'vuk' に名前を変更してください (ファイルの拡張子は必要ありません)。VUK エントリを KEYDB.cfg ファイルに挿入しようとするとファイルが無効になります。VUK エントリのフォーマットは libaacs の初期バージョンから変更されていることに注意してください。全てのキーは先頭に 0x が必要です。次のコマンドはキーのフォーマットを自動的に変更します:

    sed -i 's/\([[:xdigit:]]\)\{5,\}/0x&/g' ~/.config/aacs/vuk

次に、bluray をディレクトリにマウントしてください。例:

    # mount /dev/sr0 /media/blurays

### メディアプレーヤー

以下のメディアプレーヤーは libbluray や libaacs を使って AACS で暗号化された BluRay ディスクを再生できます。

#### mplayer

mplayer で bluray を再生する基本の再生コマンドは:

    mplayer br:///</bluray/mount/dir>

もしくは:

    mplayer br://<title number> -bluray-device </bluray/mount/dir>

##### 動画が遅れる

おそらく bluray をスムーズに再生するためにハードウェアアクセラレーションやマルチコアの CPU サポートを有効にする必要があります。

nvidia のカードを使っている場合、libvdpau をインストールして mplayer に '-vo vdpau' オプションを使ってハードウェアアクセラレーションを有効にしてください。例:

    mplayer -vo vdpau br:///</bluray/mount/dir>

マルチコアの CPU サポートを有効にするには '-lavdopts threads=N' オプションを使って下さい。'N' はコアの数に置き換えて下さい。例:

    mplayer -lavdopts threads=2 br:///</bluray/mount/dir>

##### 音声言語が間違っている

'#' キーを使って再生言語を切り替えることができます。

##### 音声がズレる

mplayer の最初の出力から、その bluray に使用されているコーデックを探す必要があります。"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>

#### vlc

バージョン 2.0.0 から、vlc は bluray の再生を実験的にサポートしています。Bluray のメニューはまだ使えません (ただし、開発は行われています。libbluray の代わりに libbluray-git を使ってみて下さい)。

次のコマンドで再生を開始します:

    vlc bluray://</bluray/mount/dir>

#### xine

次のコマンドで再生を開始します:

    xine bluray://</bluray/mount/dir>

### トラブルシューティング

#### `KEYDB.cfg` ファイルが存在しない

有効な VUK が `~/.cache/aacs/vuk` に存在する場合、libaacs はコンテンツを復号するのに `KEYDB.cfg` を使う必要はありません。しかしながら、`~/.config/aacs/` の `KEYDB.cfg` ファイルは必要です（ファイルが空であったとしても）。

#### 無効になった Host Key/Certificate

残念ながら、新しい BluRay ディスクを再生しようとするとドライブによって Host Key/Certificate (ライセンスを受けたソフトウェアプレイヤーのキー) が無効になることがあります。このような場合、aacskeys は次のメッセージを返します:

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

これは AACS の保護機構に含まれていることです: インターネットにリークされた古いソフトウェアプレイヤーの Host Key は無効にすることができ、新しい市販のディスクのリリースによってリストが配布されます。これは不可逆の措置で、ドライブのフラッシュメモリを書き換えても戻すことはできません。修正する方法はたった2つしか存在しません:

- `KEYDB.cfg` の Host Key/Certificate を（まだ）無効になっていないキーに更新する
- 上述のとおり各ディスクの VUK を `KEYDB.cfg` に追加する。VUK が無効にされることはありません。

(mplayer や vlc を使って) ディスクの復号化が成功した場合、libaacs は `~/.cache/aacs/vuk` に VUK を保存します。後になって `KEYDB.cfg` の Host Key/Certificate が無効になっても、VLC は保存された VUK を使うことができます。そのため今後のために `~/.cache/aacs` ディレクトリはバックアップすることを推奨します。

#### aacskeys を使う

aacskeys をインストールしてください。有効な Host Key/Certificate と Processing Key が含まれているディレクトリに移動してから:

    cd /usr/share/aacskeys

aacskeys を実行してください:

    aacskeys </bluray/mount/dir>

例:

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

必要ならば、BR をキーデータベースに追加することができます: `~/.config/aacs/KEYDB.cfg` を編集して以下の形式で aacskeys による情報出力を追加してください:

    0x<unit key file hash> = Film Title    | V | 0x<volume unique key>

##### aacskeys がキーを生成できない場合

wine を使って DumpVID で VolumeID を生成してみて下さい。現在 VolumeID を使うことで aacskeys の VolumeID オプションによって bluray キーを生成できるようになっています。

    Usage: aacskeys [options] <mountpath> [volume id / binding nonce]

## 他の有用なソフトウェア

DVD では、libdvdcss パッケージが必要な復号化ライブラリを提供します。以下は BluRay/HD-DVD の復号に使えるソフトウェアです:

- aacskeys - オープンソース
- dumphd - オープンソース
- makemkv - クローズドソース/無料制限ベータ

- anydvdhd - 市販ソフトウェア、VM 上の Microsoft OS で動かす必要があります。

Categories:

- Audio/Video (日本語)
- Optical (日本語)