Blu-ray

提供: ArchWiki
移動先: 案内検索

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

仕組み

Blu-ray DRM

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

AACS

AACS の仕様と復号プロセスは [1] で公開されています。さらに詳細な説明が多数の記事や研究論文でなされています: [2], [3], [4]libaacs は VideoLAN 開発チームによる Advanced Access Content System の仕様を実装するという研究プロジェクトです。オープンソースのライブラリとして配布されています [5]。このプロジェクトでは著作権保護で暗号化されたデータをデコードするのに使うキーや証明書を提供していません。しかしながら、キーのデータベースファイルと組み合わせることで、AACS 規格を使っている Blu-ray ディスクを再生するのに使用することが可能です。このファイルは 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 は最初の Blu-ray が2006年に市販開始された時から更新が行われています。最新の MKB はバージョン 64 ですが、実際はほとんどの MKB は同じキーを共有しています。ソフトウェアプレイヤーは Host Key/Certificate を提供する一方、ドライブは無効にされた Host Key/Certificate のリストを所持しています。(バージョンが新しい 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 は新しい Blu-ray ディスクによって定期的に無効にされます。一度無効になると、ドライブは新旧両方のディスクが読み込めなくなります。基本的にこれを元に戻すことは不可能で、新しい最新の Host Key/Certificate を用意するしか直す方法はありません (Windows ユーザーの場合、ソフトウェアプレイヤーのアップデートでこれが行われています)。この方法の利点は、Host Key/Certificate が無効にされるまで、Processing Key が判明している MKB バージョンをディスクが使っている限り、libaacs は全てのディスクの VUK を計算することができるということです。現在、MKB バージョン 61 までの 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 はバックアップしておくと良いでしょう。

[7][8] など、様々な場所から VUK を収集する試みがありました。最近では [9] に VUK データベースが存在し 24,000 近くの VUK が公開されています。

BD+

BD+ は Blu-ray DRM の任意の補助コンポーネントです。2013年12月、VideoLAN は BD+ 復号化の実験的なサポートを提供する待望の libbdplusAUR をリリースしました。ライブラリには BD+ の復号化に必要なキーや証明書が含まれていないので、[10][11] で説明されているように、別個に入手してインストールする必要があります。

ノート: LabDV によって提供されているファイルは .tar.bz2 アーカイブですが、名前は bdplus-vm0.bz2 となっています。~/.config/bdplusvm0 という名前のフォルダを作成すると良いでしょう。フォルダの名前を bdplus-vm0 としてはいけません。GUI の圧縮ツールを使っている場合はファイルの拡張子を .tar.bz2 に変えてください。

再生

準備

  1. 公式リポジトリから libbluraylibaacs パッケージをインストールしてください。
  2. [12] から KEYDB.cfg ファイルをダウンロードして ~/.config/aacs ディレクトリにコピーしてください。ファイルには PK, HC, VUK データが含まれており、以下で説明している復号化プロセスで必要になります。
  3. 必要であれば (ボリュームがシステムに自動的にマウントされない場合)、ディスクをディレクトリにマウントしてください。例:
    # mount /dev/sr0 /media/blurays

復号化プロセス

VLC など Blu-ray に対応しているソフトウェアプレイヤーを起動して、ディスクを再生してください (VLC ではメディア -> ディスクを開くから、ディスクタブで Blu-ray を選択します。「ディスクメニューなし」にはチェックを入れてください)。ソフトウェアプレイヤーは以下のような復号化プロセスを辿ります:

  1. ユーザーが libbluray と libaacs をサポートしているビデオプレイヤーで Blu-ray の再生を始めます。
  2. BR ディスクが AACS で暗号化されていない場合、4.1 に進みます。
  3. BR ディスクが AACS で暗号化されている場合、libaacs は以下を実行します:
    1. ディスクの有効な VUK が ~/.cache/aacs/vuk/ に存在するか確認します。存在する場合、4.1 に進みます。存在しない場合、次のステップに進みます。
    2. ~/.config/aacs/KEYDB.cfg を読み込みます:
      1. 有効な VUK が存在する場合、4.1 に進みます。存在しない場合、次のステップに進みます。
      2. (ディスクの MKB バージョンに対応している) 有効な Processing Key と有効な Host Key/Certificate が存在する場合、libaacs は VUK を計算します。今後の使用のために VUK は ~/.cache/aacs/vuk に保存されます。その後ステップ 4.1 に進みます。有効な PK/HKC が存在しない場合、ステップ 4.2 に進みます。
  4. 結果
    1. ソフトウェアプレイヤーはディスクのコンテンツを再生することができます。
    2. ソフトウェアプレイヤーはディスクのコンテンツを読み込むことができません。

VUK による復号化 (ステップ 3.1 または 3.2.1)

ディスク固有の VUK を使用する方法はいつでも機能し、無効化されることはありません。Blu-ray ディスクの直近の復号化キーだからです。ただし、VUK はディスク毎に異なるため、VUK リストやデータベースに依存します。VUK は以下のどちらかの方法で入手できます:

  • PK と Host K/C による復号化が上手くいくと、ディスクの VUK が ~/.cache/aacs/vuk に保存されます。
  • 第三者からディスクの VUK を取得する (KEYDB.cfg に指定します)。

たとえディスクの MKB バージョンによって PK と Host Key/Certificate が無効化されても VUK があればディスクを読み込むことができます。VUK が存在しない場合、ソフトウェアプレイヤーは以下の方法を使って復号化を行います。

PK と Host K/C による復号化 (ステップ 3.2.2)

(特定の MBK バージョンまでの) あらゆるディスクを復号化して再生に必要な VUK を計算できる方法です。VUK が判明すると、次の利用のために保存されます。

ノート: 2016年12月現在、最新の市販 Blu-ray ディスクは MKB v64 を搭載しています。MKB v61 から先の PK は判明していないため、新しいディスクではこちらの方法を使うことはできません。

この方法では KEYDB.cfg ファイルの最初にある Processing Key と Host Key/Certificate を使用します。現在、MKB v61 までのディスクを再生できますが、MKB v62 以上のディスクを再生しようとするとドライブによって KEYDB.cfg ファイル内の Host Key/Certificate が無効化されて再生できなくなります。

ディスクの再生が上手くいった場合、libaacs は VUK を ~/.cache/aacs/vuk に保存します。ファイル名はディスク ID になります。VLC は KEYDB.cfg ファイルが使えなくなっても場合、フォルダ内の VUK を再利用するため、将来のためにバックアップすることを推奨します。

BD+ のサポート

[13][14] のページに BD+ で暗号化された Blu-ray ディスクを再生する手順が載っています。libbdplusAUR は BD+ の復号化を実験的にサポートしていますが、上手く行かない場合は makemkvAURDVDFab などの商用アプリケーションを使う必要があります。

BD+ は基本的に動画ストリームにエラーデータを追加することで暗号化を施します。暗号化された状態でも全く視聴できなくなるわけではありませんが、動画に乱れがずっと発生するので見れたものではありません。公式プレイヤーはインターネットからダウンロードしたテーブルを使って、壊れた動画ストリームを正しい動画ストリームに変換します。libbdplus はかなり前から機能しなくなっており、オープンソースのアプリケーションで BD+ で保護されたディスクを再生する方法は現在存在しません。

メディアプレーヤー

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

MPlayer

MPlayer で Blu-ray を再生する基本の再生コマンドは:

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

もしくは:

$ mplayer br://<title number> -bluray-device </bluray/mount/dir>
動画が遅れる

おそらく Blu-ray をスムーズに再生するためにハードウェアアクセラレーションやマルチコアの 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 の最初の出力から、その Blu-ray に使用されているコーデックを探す必要があります。"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 は Blu-ray の再生を実験的にサポートしています。Blu-ray のメニューはまだ使えません (ただし、開発は行われています。libbluray の代わりに libbluray-gitAUR を使ってみてください)。

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

$ 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

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

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 を使う

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

$ 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 パッケージが必要な復号化ライブラリを提供します。以下は Blu-ray/HD-DVD の復号に使えるソフトウェアです:

  • anydvdhd - 市販ソフトウェア、VM 上の Microsoft OS で動かす必要があります。
  • DVDFab HD Decrypter - Windows 用の商用ソフトウェア。Wine で動作します。