(57)【要約】【課題】メディアキーブロックが更新される前の期間中においても、デジタルコンテントの再生を許可または禁止する制御を安全且つ柔軟に実行することが可能な再生装置を実現する。【解決手段】演算処理部２０２は、ＡＡＣＳモジュール１３内に保持されているメディアキープレカーサを操作するためのインタフェースをスクリプト１０２に対して提供する。演算処理部２０２は、ＡＡＣＳモジュール１３内に保持されているメディアキープレカーサの値をスクリプト１０２、スクリプト・エンジン１４に渡すのではなく、スクリプト・エンジン１４を介してスクリプト１０２から送出される、メディアキープレカーサに対する演算処理指示に応じて、メディアキープレカーサに対する演算を実行する。これにより、メディアキープレカーサからメディアキーを算出する演算処理を安全に実行できる。【選択図】      図１
2008311961.tif 000002
【特許請求の範囲】
【請求項１】
記憶メディアに格納されている暗号化されたデジタルコンテントを再生する再生装置であって、
前記記憶メディアに格納されたプログラムを実行するためのプログラム実行モジュールと、
耐タンパ化された処理モジュールであって、前記記憶メディアに格納されたメディアキーブロックを前記再生装置が有するデバイスキーのセットによって処理することによって、前記再生装置が属する再生装置グループまたは前記再生装置単体に固有なデータであって、当該データに所定の演算を施すことによって得られる値が前記記憶メディア上のタイトルキーファイルを復号可能なメディアキーとなるデータである、メディアキープレカーサを算出する手段と、前記プログラム実行モジュールを介して前記プログラムから送出される、前記メディアキープレカーサに対する演算処理指示に応じて、前記メディアキープレカーサの値および前記メディアキープレカーサに対する演算結果を前記プログラムおよび前記プログラム実行モジュールから隠蔽した状態で、前記メディアキープレカーサに対する演算を実行する演算手段と、前記メディアキープレカーサに対する演算結果をメディアキーとして使用することによって前記タイトルキーファイルを復号するための処理を実行する手段とを含む、処理モジュールとを具備することを特徴とする再生装置。
【請求項２】
前記プログラムには、複数の再生装置グループまたは複数の再生装置単体それぞれに対応した、異なる複数の演算処理指示が記述されており、前記プログラムは、前記再生装置が属する再生装置グループまたは前記再生装置単体を判別し、且つ前記複数の演算処理指示の中から、前記再生装置が属する再生装置グループまたは前記再生装置単体に対応する演算処理指示を選択し、当該選択した演算処理指示を前記プログラム実行モジュールを介して前記処理モジュールに送出することを特徴とする請求項１記載の再生装置。
【請求項３】
前記演算処理指示は、前記再生装置が属する再生装置グループまたは前記再生装置単体に固有の対応するメディアキープレカーサから前記メディアキーを導出するための演算処理を識別するための識別情報であり、前記演算手段は、前記識別情報に従って、前記メディアキープレカーサに対して実行すべき演算処理を特定し、前記特定された演算処理を前記メディアキープレカーサに対して実行することを特徴とする請求項１または２のいずれか１項に記載の再生装置。
【請求項４】
前記演算手段は、前記演算処理指示が送出された後に前記プログラム実行モジュールを介して前記プログラムから送出される、前記メディアキープレカーサに対する演算結果が前記メディアキーであることを示す通知に応答して、前記メディアキープレカーサに対する演算結果を前記メディアキーとして確定することを特徴とする請求項１記載の再生装置。
【請求項５】
前記プログラムには暗号化が施されていることを特徴とする請求項１記載の再生装置。
【請求項６】
前記プログラムには改竄防止対策が施されていることを特徴とする請求項１記載の再生装置。
【請求項７】
記憶メディアに格納されている暗号化されたデジタルコンテントを、再生装置内に設けられた耐タンパ化された処理モジュールによって、復号する復号方法であって、
前記記憶メディアに格納されたメディアキーブロックを前記再生装置が有するデバイスキーのセットによって処理することによって、前記再生装置が属する再生装置グループまたは前記再生装置単体に固有なデータであって、当該データに所定の演算を施すことによって得られる値が前記記憶メディア上のタイトルキーファイルを復号可能なメディアキーとなるデータである、メディアキープレカーサを算出する処理を、前記処理モジュールによって実行するステップと、
前記記憶メディアに格納されたプログラムを実行するステップと、
前記プログラムから送出される、前記メディアキープレカーサに対する演算処理指示に従って、前記メディアキープレカーサの値および前記メディアキープレカーサに対する演算結果を前記プログラムから隠蔽した状態で、前記メディアキープレカーサに対する演算を実行する処理を前記処理モジュールによって実行する演算処理ステップと、
前記メディアキープレカーサに対する演算結果をメディアキーとして使用することによって前記タイトルキーファイルを復号するための処理を、前記処理モジュールによって実行するステップとを具備することを特徴とする復号方法。
【請求項８】
前記プログラムには、複数の再生装置グループまたは複数の再生装置単体それぞれに対応した、異なる複数の演算処理指示が記述されており、
前記プログラムを実行するステップは、前記プログラムを実行することによって、前記再生装置が属する再生装置グループまたは前記再生装置単体を判別するステップと、前記複数の演算処理指示の中から、前記再生装置が属する再生装置グループまたは前記再生装置単体に対応する演算処理指示を選択し、当該選択した演算処理指示を前記処理モジュールに送出するステップとを含むことを特徴とする請求項７記載の復号方法。
【請求項９】
前記演算処理指示は、前記再生装置が属する再生装置グループまたは前記再生装置単体に固有の対応するメディアキープレカーサから前記メディアキーを導出するための演算処理を識別するための識別情報であり、
前記演算処理ステップは、前記識別情報に従って、前記メディアキープレカーサに対して実行すべき演算処理を特定し、前記特定された演算処理を前記メディアキープレカーサに対して実行することを特徴とする請求項７または８のいずれか１項に記載の復号方法。
【請求項１０】
前記演算処理ステップは、前記演算処理指示が送出された後に前記プログラムから送出される、前記メディアキープレカーサに対する演算結果が前記メディアキーであることを示す通知に応答して、前記メディアキープレカーサに対する演算結果を前記メディアキーとして確定することを特徴とする請求項７記載の復号方法。
【請求項１１】
前記プログラムには暗号化が施されていることを特徴とする請求項７記載の復号方法。
【請求項１２】
前記プログラムには改竄防止対策が施されていることを特徴とする請求項７記載の復号方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶メディアに格納された暗号化されたデジタルコンテントを再生する再生装置および当該暗号化されたデジタルコンテントを復号する復号方法に関する。
【背景技術】
【０００２】
近年、動画像のデジタル圧縮符号化技術の進展に伴い、ＨＤ（High Definition）規格の高精細映像を扱うことが可能な再生装置（プレーヤ）の開発が進められている。
【０００３】
このようなプレーヤにおいては、ＨＤ  ＤＶＤ（High Definition Digital Versatile Disc）のような記憶メディアが用いられる。ＨＤ  ＤＶＤ（High Definition Digital Versatile Disc）のような記憶メディアを用いることにより、ＨＤ映像データと高品質のサラウンドオーディオデータとを一枚の記憶メディアにパッケージ化することができる。
【０００４】
記憶メディアに格納されたデジタルコンテンツをその不正コピーから保護するための技術としては、従来から、ＣＳＳ（Content Scramble System）のような暗号化技術が知られている。
【０００５】
特許文献１には、コピー制御情報が埋め込まれた、映像データのようなデジタルコンテントのストリームが開示されている。コピー制御情報は、映像データのようなデジタルコンテントのコピーを制限するためのコピープロテクト機能を実現するために使用される。
【０００６】
また、近年では、ＨＤコンテントを含む各種デジタルコンテンツを保護するための新たな技術として、ＡＡＣＳ（Advanced Access Content System）が用いられている。
【０００７】
ＡＡＣＳ仕様では、プレーヤのＡＡＣＳモジュールが、当該プレーヤが有するデバイスキーのセットを用いて記憶メディア上のメディアキーブロック（ＭＫＢ）を処理することによってメディアキーを生成する。そして、ＡＡＣＳモジュールは、このメディアキーによって記憶メディア上のタイトルキーファイルを復号し、これによって記憶メディア上のデジタルコンテンツを復号するためのタイトルキーをタイトルキーファイルから取得する。
【０００８】
ビデオ、静止画、XMLファイル、スクリプトを含む、記憶メディア上のコンテントデータは、タイトルキーファイルに記録されているタイトルキーを用いて復号される。また、タイトルキーは、コンテントデータの正当性をチェックするためにも用いられる。
【０００９】
ＭＫＢには、プレーヤ単体または一群のプレーヤを無効化（リボーク）する情報が含まれている。無効化されたプレーヤが記憶メディア上のＭＫＢを処理しても正しいメディアキーが得られない。したがって、無効化されたプレーヤが当該記憶メディア上のコンテンツデータを再生することを防止することができる。
【特許文献１】特許第３１６２０４６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかし、もしあるプレーヤがハッキングされて、記憶メディア上のＭＫＢから導出されたメディアキーが当該プレーヤから不正に取り出されてしまうと、以降は、当該プレーヤ上で再生可能な全てのビデオタイトルが不正コピーされてしまう危険がある。
【００１１】
ハッキングされたプレーヤは、上述のように、ＭＫＢを更新することによって無効化する事ができる。ハッキングされたプレーヤを無効化するように更新されたＭＫＢは、ＡＡＣＳライセンシングアドミニストレータ（ＡＡＣＳＬＡ）より発行される。しかし、更新されたＭＫＢが格納された新たなビデオタイトルが流通するまでには、多くの時間が要される。これは、i) 更新されたＭＫＢの入手、ii) 当該ＭＫＢを用いたディスク製盤、iii) 新しいディスクの発売、というステップを踏む必要があるからである。
【００１２】
ＭＫＢが更新される前に発売されたビデオタイトルは不正にコピーされてしまう危険がある。
【００１３】
したがって、補助的な手段として、ビデオタイトルをリリースするスタジオ（コンテントプロバイダ）が、独自にプレーヤを無効化することができる新たな機能を実現する事が望ましい。換言すれば、メディアキーブロックが更新される前の期間中においても、ビデオタイトルの再生を許可または禁止する制御を柔軟に行うことを可能にする新たな機能の実現が必要である。この場合においても、メディアキー、またはそのメディアキーの導出課程で生成される他のデータ等の漏洩を防止することが必要である。
【００１４】
本発明は上述の事情を考慮してなされたものであり、メディアキーブロックが更新される前の期間中においても、ビデオタイトルのようなデジタルコンテントの再生を許可または禁止する制御を安全且つ柔軟に実行することが可能な再生装置および復号方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
上述の課題を解決するため、本発明は、記憶メディアに格納されている暗号化されたデジタルコンテントを再生する再生装置であって、前記記憶メディアに格納されたプログラムを実行するためのプログラム実行モジュールと、耐タンパ化された処理モジュールであって、前記記憶メディアに格納されたメディアキーブロックを前記再生装置が有するデバイスキーのセットによって処理することによって、前記再生装置が属する再生装置グループまたは前記再生装置単体に固有なデータであって、当該データに所定の演算を施すことによって得られる値が前記記憶メディア上のタイトルキーファイルを復号可能なメディアキーとなるデータである、メディアキープレカーサを算出する手段と、前記プログラム実行モジュールを介して前記プログラムから送出される、前記メディアキープレカーサに対する演算処理指示に応じて、前記メディアキープレカーサの値および前記メディアキープレカーサに対する演算結果を前記プログラムおよび前記プログラム実行モジュールから隠蔽した状態で、前記メディアキープレカーサに対する演算を実行する演算手段と、前記メディアキープレカーサに対する演算結果をメディアキーとして使用することによって前記タイトルキーファイルを復号するための処理を実行する手段とを含む、処理モジュールとを具備することを特徴とする。
【発明の効果】
【００１６】
本発明によれば、メディアキーブロックが更新される前の期間中においても、ビデオタイトルのようなデジタルコンテントの再生を許可または禁止する制御を安全且つ柔軟に実行することが可能となる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照して本発明の実施形態を説明する。
【００１８】
図１には、本発明の一実施形態の係る再生装置の構成例が示されている。この再生装置は映像データ（オーディオビジュアルデータ）のようなデータストリームから構成されるデジタルコンテントを再生するプレーヤである。この再生装置は、例えばＨＤ  ＤＶＤ（High Definition Digital Versatile Disc）のような記憶メディアに予め格納された、ビデオタイトルのようなデジタルコンテントを再生するＨＤ  ＤＶＤプレーヤ１０として実現されている。ＨＤ  ＤＶＤプレーヤ１０は、記憶メディアである光ディスクメディアに格納されたデジタルコンテントを再生するのみならず、インターネットのようなネットワークを介してネットワークサーバからダウンロードしたデジタルコンテントを再生することもできる。
【００１９】
このＨＤ  ＤＶＤプレーヤ１０は、図１に示されているように、ＨＤ  ＤＶＤドライブ１１、データ読み取り部１２、ＡＡＣＳモジュール（暗号処理モジュール）１３、スクリプト・エンジン１４、および再生処理部１５を備えている。
【００２０】
ＨＤ  ＤＶＤドライブ１１によって駆動される光ディスクメディア（ＨＤ  ＤＶＤメディア）１００には、暗号化されたデジタルコンテント１０１、スクリプト１０２、メディアキーブロック（ＭＫＢ）１０３、およびタイトルキーファイル１０４などが格納されている。
【００２１】
デジタルコンテント１０１は、例えば、映画、アニメーションのようなオーディオビジュアルコンテントである。オーディオビジュアルコンテントは、ビデオデータとオーディオデータとが多重化されたストリームである。もちろん、オーディオデータのみから構成されるオーディオコンテントが光ディスクメディアに格納されていても良い。
【００２２】
デジタルコンテント１０１は、ＨＤ  ＤＶＤ規格で規定されたエンハンスドビデオオブジェクトＥＶＯＢ（プライマリーエンハンスドビデオオブジェクトＰ−ＥＶＯＢ、またはセカンダリーエンハンスドビデオオブジェクトＳ−ＥＶＯＢ）のようなビデオオブジェクトＶＯＢを含んでいる。ビデオオブジェクトＶＯＢは、複数のビデオオブジェクトユニットＶＯＢＵ（ＨＤ  ＤＶＤ規格で規定された、プライマリーエンハンスドビデオオブジェクトユニットＰ−ＥＶＯＢＵ、セカンダリーエンハンスドビデオオブジェクトＳ−ＥＶＯＢＵ等）から構成されている。ビデオオブジェクトユニットＶＯＢＵは所定の再生時間に対応するデータストリームであり、圧縮符号化されたビデオデータおよび圧縮符号化されたオーディオデータ等を含んでいる。デジタルコンテントは、例えば、Ｐ−ＥＶＯＢＵ、Ｓ−ＥＶＯＢＵのようなビデオオブジェクトユニットＶＯＢＵを単位として暗号化されている。
【００２３】
スクリプト１０３は、光ディスクメディア１００に格納された複数のスクリプトの一つである。これらスクリプトの多くは、デジタルコンテント１０１をインタラクティブに再生するための手順を記述したプログラムである。本実施形態においては、さらに、ＭＫＢ１０３からメディアキーを導出する処理を制御するためのプログラムであるスクリプト１０３が光ディスクメディア１００に格納されている。
【００２４】
すなわち、本実施形態においては、タイトルキーファイル１０４を復号するためのメディアキーは、ＭＫＢ１０３から直接的には算出されず、プレーヤ１０が有するデバイスキーのセットによってＭＫＢ１０３を処理することによって得られるデータであるメディアキープレカーサ（Media key precursor）に対して所定の演算処理を施すことによって算出される。この所定の演算処理は、スクリプト１０３によって与えられる。
【００２５】
デバイスキーのセットは、各プレーヤに与えられた秘密の鍵群であり、プレーヤ単体毎にまたはプレーヤグループ毎に異なっている。例えば、同一の製造メーカによって製造されたプレーヤそれぞれは、同一のプレーヤグループに属する。
【００２６】
デバイスキーのセットは、プレーヤ１０の製造時等に当該プレーヤ１０に予め保持されている。プレーヤ１０の有するデバイスキーのセットは、ＭＫＢ１０３を処理して、メディアキーを導出するために必要なデータであるメディアキープレカーサ（Media key precursor）を算出するために使用される。メディアキープレカーサ（Media key precursor）は、プレーヤ単体毎にまたはプレーヤグループ毎に異なっている。すなわち、メディアキープレカーサ（Media key precursor）は、プレーヤ単体またはプレーヤグループに固有のデータであり、且つ、当該データ（メディアキープレカーサ）に所定の演算を施すことによって得られる値が光ディスクメディア１００上のタイトルキーファイル１０９を復号するためのメディアキーとなる、データである。つまり、メディアキープレカーサをＫｍｐとし、メディアキーをＫｍとすると、
Ｋｍ＝ｆ(Ｋｍｐ)
という関係が成り立つ。ここで、ｆは、ある所定の演算（オペレーションとも云う）である。
【００２７】
スクリプト１０３には、複数のプレーヤグループまたは複数のプレーヤ単体それぞれに対応した、異なる複数の演算処理指示を予め記述することができる。この場合、スクリプト１０３は、プレーヤ１０が属するプレーヤグループまたはプレーヤ１０単体を判別し、複数の演算処理指示の中から、プレーヤ１０が属するプレーヤグループまたはプレーヤ１０単体に対応する演算処理指示を選択し、当該選択した演算処理指示をＡＡＣＳモジュール１３に送出する。
【００２８】
ＭＫＢ１０３は、プレーヤ単体またはプレーヤグループに固有の上述のメディアキープレカーサ（Media key precursor）に対するアクセスを提供するデータブロックである。すなわち、ＭＫＢ１０３は、ＡＡＣＳＬＡによって生成され、各プレーヤが、自身のデバイスキーのセットを使用することによって、当該プレーヤ単体または当該プレーヤが属するプレーヤグループに固有のメディアキープレカーサ（Media key precursor）を算出することを許可するデータブロックである。ＭＫＢ１０３は、subset-difference tree system と称されるツリー構造を有している。
【００２９】
タイトルキーファイル１０４は幾つかのタイトルキーを含むファイルであり、暗号化されている。コンテント１０１はタイトルキーによって暗号化されている。このタイトルキーは、コンテント１０１を復号するためのキーとして使用される。
【００３０】
データ読み取り部１２は、ＨＤ  ＤＶＤドライブ１１をアクセスして、光ディスクメディア１００に格納されたデータ（デジタルコンテント１０１、スクリプト１０２、ＭＫＢ１０３、およびタイトルキーファイル１０４など）をリードする。
【００３１】
ＡＡＣＳモジュール１３は、Advanced Access Content System (AACS)で規定された著作権保護機能を実現するための処理モジュールであり、データ読み取り部１２と再生処理部１５との間に配置されている。ＡＡＣＳモジュール１３はＴＲＳ（タンパ・レジスタント・ソフトウェア）等の技術によって耐タンパ化されたモジュールであり、コンテント１０１を復号するための処理を実行する。
【００３２】
このＡＡＣＳモジュール１３は、ＭＫＢ処理部２０１、演算処理部２０２、タイトルキー処理部２０３、およびコンテント復号処理部２０４等を備えている。
【００３３】
ＭＫＢ処理部２０１は、光ディスクメディア１００に格納されたＭＫＢ１０３をプレーヤ１０が有するデバイスキーのセットによって処理することによって、プレーヤ１０が属するプレーヤグループまたはプレーヤ１０単体に固有なデータである上述のメディアキープレカーサを算出する。
【００３４】
演算処理部２０２は、ＡＡＣＳモジュール１３内に保持されているメディアキープレカーサを操作するためのインタフェースをスクリプト１０２に対して提供する。この場合、演算処理部２０２は、ＡＡＣＳモジュール１３内に保持されているメディアキープレカーサの値をスクリプト１０２、スクリプト・エンジン１４に渡すのではなく、スクリプト・エンジン１４を介してスクリプト１０２から送出される、メディアキープレカーサに対する演算処理指示に応じて、メディアキープレカーサに対する演算を実行する。この演算は、メディアキープレカーサの値およびメディアキープレカーサに対する演算結果をスクリプト１０２、およびスクリプト・エンジン１４から隠蔽した状態で実行される。このように、スクリプト１０２から送出される演算処理指示を演算処理部２０２が受信し、メディアキープレカーサに対する実際の演算は演算処理部２０２自体が行うことにより、メディアキープレカーサの値およびメディアキープレカーサに対する演算結果を隠蔽することができる。
【００３５】
例えば、演算処理部２０２は、メディアキープレカーサを演算するための幾つかの関数を有しており、スクリプト１０２は、これら関数を通じて、メディアキープレカーサに対して実行すべき演算内容を指示する。スクリプト１０２はメディアキープレカーサを直接操作することはできず、メディアキープレカーサに対する操作は、演算処理部２０２が有する関数を通じてのみ実行可能である。
【００３６】
もしスクリプト１０２から演算処理部２０２に対して正しい演算処理指示が送信されたならば、演算処理部２０２は、メディアキープレカーサに対して正しい演算処理を施すことができ、これによって正しいメディアキーを算出することができる。一方、スクリプト１０２から演算処理部２０２に対して正しい演算処理指示が送信されなかったならば、演算処理部２０２は、正しいメディアキーを算出することができない。コンテント１０１に付随するスクリプト１０２はスタジオが独自に提供可能である。このため、スタジオはスクリプト１０２の内容を変更するだけで、コンテント１０１の再生を許可または禁止するための制御を柔軟に行うことが出来る。しかも、演算処理部２０２は、ＡＡＣＳモジュール１３内に保持されているメディアキープレカーサの値をスクリプト１０２、スクリプト・エンジン１４に渡すのではなく、スクリプト１０２から送出される演算処理指示に応じてメディアキープレカーサに対する演算を実行するように構成されているので、メディアキープレカーサの値およびメディアキープレカーサに対する演算結果をスクリプト１０２、スクリプト・エンジン１４から隠蔽することができ、メディアキープレカーサに対する演算を安全に実行することが可能となる。
【００３７】
タイトルキー処理部２０３は、演算処理部２０２によるメディアキープレカーサに対する演算結果をメディアキーとして使用することによって、タイトルキーファイル１０４を復号するための処理を実行する。演算処理部２０２によって正しいメディアキーが算出されたならば、タイトルキー処理部２０３は、そのメディアキーを用いてタイトルキーファイル１０４を正しく復号することができ、これにより、タイトルキーファイル１０４から、コンテント１０１を復号するためのタイトルキーを取得することができる。
【００３８】
コンテント復号処理部２０４は、タイトルキー処理部２０３によって得られたタイトルキーによってコンテント１０１を復号する。
【００３９】
再生処理部１５は、コンテント復号処理部２０４によって復号されたコンテント１０１を再生するための再生処理を実行する。再生処理においては、Ｐ−ＥＶＯＢＵ、Ｓ−ＥＶＯＢＵのような各ビデオオブジェクトユニットＶＯＢＵに含まれるビデオデータおよびオーディオデータをそれぞれデコードする処理等が実行される。
【００４０】
スクリプト・エンジン１４は、スクリプト１０２を実行するプログラム実行モジュールである。スクリプト・エンジン１４は、インタープリタのようなプログラム実行環境として機能する。
【００４１】
次に、メディアキープレカーサとメディアキーとの関係の例を具体的に説明する。
【００４２】
ＭＫＢ１０３は、プレーヤ１０のＡＡＣＳモジュール１３がＭＫＢ１０３を処理した結果に、あるオペレーションｆを施したものがメディアキーになるように作成されている。ＡＡＣＳモジュール１３によるＭＫＢ処理によって導出されるデータは上述のメディアキープレカーサ（Media key precursor）である。上述したように、ＫｍｐをMedia key precursor、Ｋｍをメディアキーとすると、Ｋｍ＝ｆ（Ｋｍｐ）という関係が成立する。
【００４３】
オペレーションｆの内容はプレーヤによって異なる。たとえばあるメーカによって製造されたプレーヤそれぞれから構成される、一群のプレーヤは、ディスク上のＭＫＢ１０３を処理する事により、同一のMedia key precursorを出力する。たとえばある別のメーカによって製造されたプレーヤそれぞれから構成される、別の一群のプレーヤは、同一のＭＫＢ１０３を処理して、前記のMedia key precursorとは異なったMedia key precursorを出力する。各プレーヤにはＮｏｄｅ  ＩＤと呼ばれる数値（識別情報）が割り当てられている。
【００４４】
今、図２に示されているように、ある一群のＮｏｄｅ  ＩＤに対応するMedia key precursorをＫｍｐ０、別の一群のＮｏｄｅ  ＩＤに対応するMedia key precursorをＫｍｐ１、更に又別の一群のＮｏｄｅ  ＩＤに対応するMedia key precursorをＫｍｐ２、…とする。Ｋｍｐ０，Ｋｍｐ１，Ｋｍｐ２，…それぞれに対応するオペレーションｆ０、ｆ１、ｆ２、…が存在して、ｆ０（Ｋｍｐ０）＝ｆ１（Ｋｍｐ１）＝ｆ２（Ｋｍｐ２）＝…＝Ｋｍが成立する。
【００４５】
すなわち、図２においては、Ｎｏｄｅ  ＩＤ＝０，Ｎｏｄｅ  ＩＤ＝１，Ｎｏｄｅ  ＩＤ＝２，…Ｎｏｄｅ  ＩＤ＝９９のプレーヤそれぞれは、ある同一のプレーヤグループに属している。このプレーヤグループの各プレーヤが当該プレーヤに国有のデバイスキーのセットを用いてＭＫＢ１０３を処理する事によって得られるMedia key precursorは、Ｋｍｐ０である。Ｋｍｐ０に対応するオペレーションｆは、ｆ０である。
【００４６】
Ｎｏｄｅ  ＩＤ＝１００，Ｎｏｄｅ  ＩＤ＝１０１，Ｎｏｄｅ  ＩＤ＝１０２，…Ｎｏｄｅ  ＩＤ＝１９９のプレーヤそれぞれは、別の同一のプレーヤグループに属している。このプレーヤグループの各プレーヤが当該プレーヤに国有のデバイスキーのセットを用いてＭＫＢ１０３を処理する事によって得られるMedia key precursorは、Ｋｍｐ１である。Ｋｍｐ１に対応するオペレーションｆは、ｆ１である。
【００４７】
Ｎｏｄｅ  ＩＤ＝５００，Ｎｏｄｅ  ＩＤ＝５０１，Ｎｏｄｅ  ＩＤ＝５０２，…Ｎｏｄｅ  ＩＤ＝５９９のプレーヤそれぞれは、さらに別の同一のプレーヤグループに属している。このプレーヤグループの各プレーヤが当該プレーヤに国有のデバイスキーのセットを用いてＭＫＢ１０３を処理する事によって得られるMedia key precursorは、Ｋｍｐ５である。Ｋｍｐ５に対応するオペレーションｆは、ｆ５である。
【００４８】
オペレーションｆ１、ｆ２、…ｆ５、…の実行指示はスクリプト１０２からＡＡＣＳモジュール１３に与えられる。
【００４９】
次に、図３を参照して、スクリプト１０２とＡＡＣＳモジュール１３の演算処理部２０２との間の具体的なインタフェースの例について説明する。
【００５０】
Media key precursor、メディアキーなどのデータは、ＡＡＣＳモジュール１３内に格納されている。ＡＡＣＳモジュール１３は耐タンパ化されており、当該ＡＡＣＳモジュール１３の外部から当該ＡＡＣＳモジュール１３内のデータを読み出す事や、当該ＡＡＣＳモジュール１３内部の処理内容を知る事はできない。
【００５１】
一方、スクリプト・エンジン１４は耐タンパ化されていない。従って、スクリプト・エンジン１４で実行されるスクリプト１０２が、Media key precursorの値、およびメディアキーの値を、ＡＡＣＳモジュール１３から読み出すことは、安全上好ましくない。すなわち、もしスクリプト１０２がメディアキーの値を読み出したとすると、スクリプト・エンジン１４には耐タンパ性が無い為、ハッカーがメディアキーの値を知る可能性がある。
【００５２】
しかし、スクリプト１０２は、Media key precursorやメディアキーを操作する必要がある。具体的には、スクリプト１０２は、メディアキーを導出するために、Media key precursorに対して、例えば、ある数値を加える、あるビット数シフト演算を行う、などの操作を施す必要がある。この一連の操作が前述のオペレーションｆを構成する事になる。その為、ＡＡＣＳモジュール１３内の演算処理部２０２には、Media key precursorをスクリプト１０２が操作するためのハンドルが用意されている。このハンドルは、スクリプト１０２が、ＡＡＣＳモジュール１３に対して、そのＡＡＣＳモジュール１３内に保持されているメディアキープレカーサに施すべき演算を指示することを可能にするためのインタフェースである。このハンドルは、例えば、メディアキープレカーサに対して演算処理をそれぞれ施すための関数群と、メディアキープレカーサに対する演算結果がメディアキーであることをＡＡＣＳモジュール１３に通知するための関数、等とによって実現することができる。例えば、このハンドルは、オブジェクト指向プログラミングにおけるクラスによって実現することができる。
【００５３】
図４は、上述のハンドルを実現するためのクラスの例を示している。図４においては、クラス（ｃｌａｓｓ  ＭＫｅｙ）は、Ｃ++言語によって記述されている。
【００５４】
ｃｌａｓｓ  ＭＫｅｙは１６バイトの数値を格納しているが、ｃｌａｓｓ  ＭＫｅｙには、当該数値をスクリプト１０２が読み出す手段は提供していない。しかし、ｃｌａｓｓ  ＭＫｅｙには、当該数値に対して、代入演算、加法演算、減法演算、乗法演算、除法演算、剰余演算、左シフト演算、右シフト演算、ビット単位の論理積演算、ビット単位の排他的論理和演算、ビット単位の論理和演算、左ローテート、右ローテート、といった種々の演算を行うための複数のメンバ関数が用意されている。スクリプト１０２は、これらメンバ関数の組み合わせによって、実行すべきオペレーションｆを演算処理部２０２に指示することができる。
【００５５】
なお、必ずしも、実行すべきオペレーションｆ、つまり実行すべき演算処理の内容自体を、スクリプト１０２からＡＡＣＳモジュール１３に送出する必要はなく、例えば、実行すべきオペレーションｆを識別する識別情報のみをスクリプト１０２からＡＡＣＳモジュール１３に送出するようにしてもよい。この場合、ＡＡＣＳモジュール１３の演算処理部２０２は、識別情報に従って、メディアキープレカーサに対して実行すべき演算処理を特定し、特定された演算処理をメディアキープレカーサに対して実行する。これにより、メディアキープレカーサに対して実行すべき演算処理の内容、つまりオペレーションfの内容をグローバルシークレットとすることが可能となり、より安全性を高めることが出来る。
【００５６】
スクリプト１０２は、ｃｌａｓｓ  ＭＫｅｙを呼び出し、そして、ｃｌａｓｓ  ＭＫｅｙ内に定義されたメンバ関数を用いて、Media key precursorの値によって初期化されているＭＫｅｙ変数に対するオペレーションｆの実行を演算処理部２０２に指示する。この後、スクリプト１０２は、ＭｅｄｉａＫｅｙ（）メソッドを呼び出す。このメソッドは、ＡＡＣＳモジュール１４に対して、現在のＭＫｅｙ変数の値がメディアキーであることを通知する。演算処理部２０２は、演算処理指示の後にスクリプト１０２から送出される上述の通知に応答して、メディアキープレカーサに対する演算結果、つまり現在のＭＫｅｙ変数の値を、メディアキーとして確定する。換言すれば、上述の通知に応答して、現在のＭＫｅｙ変数の値をメディアキーとして使用することによって、タイトルキーファイルを復号する処理が開始される。オペレーションｆは様々な演算の組み合わせから構成されるので、上述の通知により、演算処理部２０２は、メディアキープレカーサに対する演算処理が完了したことを正しく判別すること出来る。
【００５７】
このように、メディアキープレカーサの値およびメディアキープレカーサを操作するための手続きはカプセル化されており、スクリプト１０２は、メディアキープレカーサの値を直接操作することはできず、ｃｌａｓｓ  ＭＫｅｙ内の関数を通じてのみメディアキープレカーサを操作することができる。
【００５８】
次に、スクリプト１０２の例を説明する。
【００５９】
上述したように、スクリプト１０２は、まずｃｌａｓｓ  ＭＫｅｙを呼び出し、そしてプレーヤ１０が属するプレーヤグループを判別する。そして、スクリプト１０２は、プレーヤ１０が属するプレーヤグループに対応するオペレーションｆの実行を、演算処理指示としてＡＡＣＳモジュール１４に送出する。そして、スクリプト１０２は、ＭｅｄｉａＫｅｙ（）メソッドを呼び出して、現在のＭＫｅｙ変数の値がメディアキーであることをＡＡＣＳモジュール１４に通知する。
【００６０】
図５には、スクリプト１０２の記述例が示されている。
【００６１】
図５においては、スクリプト１０２をＣ++言語によって記述した例が示されている。スクリプト１０２においては、プレーヤ１０が属するプレーヤグループを判別するための関数（SW=nodeID/100）が含まれている。この関数は、例えば、nodeIDを100で割ることにより得られる値（商）が０，１，２，３，…９９のいずれであるかを判別する。商０，１，２，３，…９９それぞれの値は、プレーヤグループを示している。また、スクリプト１０２においては、プレーヤグループ０，１，２，３，…９９それぞれに対応する演算処理指示として、オペレーションｆ０，ｆ１，ｆ２，ｆ３，…ｆ９９が記述されている。オペレーションｆ０，ｆ１，ｆ２，ｆ３，…ｆ９９は、実行すべき実際の演算処理の内容そのものを記述したものでもよいが、上述したように、実行すべき演算処理を識別するための識別情報を記述したものでもよい。このような識別情報を用いることにより、オペレーションｆの内容を外部から隠蔽することが可能となり、メディアキーをより安全に保護することが可能となる。
【００６２】
さらに、スクリプト１０２においては、上述のＭｅｄｉａＫｅｙ（）メソッドを呼び出して、現在のＭＫｅｙ変数の値がメディアキーであることをＡＡＣＳモジュール１４に通知するためのコード（return mkp.MediaKey();）も記述されている。
【００６３】
さて、ここで、スタジオがnodeID/100が９に等しいプレーヤ、つまりプレーヤグループ９に属するプレーヤを無効化する場合を想定する。この場合、スタジオは、図６に示すようなスクリプト１０２を光ディスクメディア１００に記録する。
【００６４】
図６のスクリプト１０２においては、プレーヤグループ９に対応する演算処理指示が記述されていない。このため、光ディスクメディア１００が挿入されたプレーヤがプレーヤグループ９に属するならば、スクリプト１０２は、正しい演算処理指示（ｆ９）をＡＡＣＳモジュール１３の演算処理部２０２に与えない。この結果、プレーヤグループ９に属する各プレーヤは、正しいメディアキーを算出することが出来ず、結果として光ディスクメディア１００に格納されたコンテント１０１を正しく再生することが出来ない。例えば、図３に示されているようにプレーヤ１０のnodeIDが905であるならば、プレーヤ１０はプレーヤグループ９に属するので、スクリプト１０２は、正しい演算処理指示（ｆ９）をＡＡＣＳモジュール１３の演算処理部２０２に与えない。
【００６５】
なお、リボーク対象のプレーヤグループ９に演算処理指示を与えないのではなく、正しいオペレーションｆ９とは異なる間違ったオペレーションをプレーヤグループ９に対応する演算処理指示としてスクリプト１０２に記述してもよい。
【００６６】
また、nodeIDを100で割ることにより得られる値に基づいてプレーヤグループを特定するかわりに、各プレーヤのメーカＩＤなどを用いてプレーヤそれぞれをメーカ別にグループ分けしてもよい。
【００６７】
次に、図７のフローチャートを参照して、スクリプト１０２によって実行される処理手順の例を説明する。
【００６８】
プレーヤ１０内に設けられたＣＰＵのようなプロセッサは、スクリプト・エンジン１４上でスクリプト１０２を実行する。スクリプト１０２はスクリプト・エンジン１４上で起動され、以下の処理を実行する。
【００６９】
スクリプト１０２は、まず、ｃｌａｓｓ  ＭＫｅｙを呼び出し、そしてプレーヤ１０が属するプレーヤグループを判別する（ステップＳ１０１）。ステップＳ１０１では、例えば、スクリプト１０２は、プレーヤ１０のnodeIDを100で割る処理を実行する。次いで、スクリプト１０２は、スクリプト１０２に記述された複数の演算処理指示（オペレーション）の中から、プレーヤ１０が属するプレーヤグループに対応する演算処理指示（オペレーション）を選択する。例えば、プレーヤ１０が属するプレーヤグループに対応する演算処理指示がスクリプト１０２に記述されていない場合には、プレーヤ１０が属するプレーヤグループはリボーク対象のプレーヤグループであると判定される（ステップＳ１０２のＹＥＳ）。この場合、スクリプト１０２は、ＡＡＣＳモジュール１３に演算処理指示を送出することなく、処理を終了する。
【００７０】
一方、プレーヤ１０が属するプレーヤグループに対応する演算処理指示がスクリプト１０２に記述されている場合、つまりプレーヤ１０が属するプレーヤグループがリボーク対象のプレーヤグループではないならば（ステップＳ１０２のＮＯ）、スクリプト１０２は、プレーヤ１０が属するプレーヤグループに対応する演算処理指示をスクリプト・エンジン１４を介してＡＡＣＳモジュール１３に送出する（ステップＳ１０４）。この後、スクリプト１０２は、ＭｅｄｉａＫｅｙ（）メソッドを呼び出して、現在のＭＫｅｙ変数の値がメディアキーであることをＡＡＣＳモジュール１４に通知する（ステップＳ１０４）。
【００７１】
次に、図８のフローチャートを参照して、ＡＡＣＳモジュール１４によって実行される一連の処理の手順を説明する。
【００７２】
ＡＡＣＳモジュール１４は、プレーヤ１０の有するデバイスキーのセットによってＭＫＢ１０３を処理することによって、プレーヤ１０またはプレーヤ１０が属するプレーヤグループに固有のMedia key precursorを算出する（ステップＳ２０１）。次いで、ＡＡＣＳモジュール１４は、スクリプト１０２から送出される演算処理指示を待つ。
【００７３】
スクリプト１０２から送出される演算処理指示をスクリプト・エンジン１４を介して受信すると、ＡＡＣＳモジュール１４は、受信した演算処理指示に応じて、Media key precursorに対する演算処理を、Media key precursorの値およびMedia key precursorに対する演算結果をスクリプト１０２およびスクリプト・エンジン１４の各々から隠蔽した状態で、実行する（ステップＳ２０３）。次いで、ＡＡＣＳモジュール１４は、スクリプト１０２から送出される、Media key precursorに対する演算結果がメディアキーであることを示す通知を待つ（ステップＳ２０４）。
【００７４】
この通知をスクリプト・エンジン１４を介して受信すると、ＡＡＣＳモジュール１４は、Media key precursorに対する演算結果をメディアキーとして確定し、そのメディアキーによってタイトルキーファイル１０４を処理することにより、タイトルキーをタイトルキーファイル１０４から取得する（ステップＳ２０５）。次いで、ＡＡＣＳモジュール１４は、取得したタイトルキーによってコンテント１０１を復号する（ステップＳ２０６）。
【００７５】
なお、上述の通知を待たずに、演算処理の実行終了に応答してステップＳ２０５の処理を自動的に開始するようにしてもよい。
【００７６】
以上のように、本実施形態においては、スクリプト１０２の制御で、ＡＡＣＳモジュール１３による正しいメディアキーの導出を許可又は禁止することができる。スクリプト１０２はスタジオが独自に提供可能である。したがって、ＭＫＢ１０３が更新される前の期間中においても、ビデオタイトルのようなコンテント１０１の再生を許可または禁止する制御を、スタジオの独自の判断で柔軟に行うことができる。よって、スタジオは、独自に特定のプレーヤまたはプレーヤグループをリボークすることができる。
【００７７】
また、Media key precursorに対する演算処理においては、ＡＡＣＳモジュール１３は、Media key precursorをスクリプト１０２に渡すのではなく、スクリプト１０２からの演算処理指示に従って、ＡＡＣＳモジュール１３内に保持されているMedia key precursorに対する演算処理を実行する。このため、Media key precursorの値とその演算結果の値とをスクリプト１０２から隠蔽することができ、スクリプト１０２によってＡＡＣＳモジュール１３によるメディアキーの導出を制御するという機能を、安全に実行することができる。
【００７８】
なお、図５のスクリプト１０２がハッカーによって読み取られると、例えば、ｃａｓｅ９の場合におけるオペレーションｆ９の内容がハッカーに知られてしまう。これを防ぐ為に、スクリプト１０２を暗号化して光ディスクメディア１００に格納するようにしても良い。また、上述したように、オペレーションｆの内容そのものをスクリプト１０２に記述するのではなく、オペレーションｆを識別する識別情報（例えば、オペレーションｆのｉｄ）をスクリプト１０２に記述することが有効である。
【００７９】
更に、スクリプト１０２の改竄を防ぐ為、当該スクリプト１０２に対して改竄防止対策を施し、改竄防止対策が施されたスクリプト１０２を光ディスクメディア１００に格納するようにしても良い。改竄防止対策としては、スクリプト１０２のハッシュ値を算出し、そのハッシュ値を光ディスクメディア１００内のコンテントハッシュテーブルに格納するという方法を利用することができる。ＡＡＣＳモジュール１３は、まず、スクリプト１０２のハッシュ値を算出し、その算出されたハッシュ値が、コンテントハッシュテーブルに格納されているハッシュ値に一致するか否かに応じて、スクリプト１０２の正当性をチェックすることができる。
【００８０】
スクリプト・エンジン１４は耐タンパ性を有していない。このため、例えばオペレーションｆ９の内容がハッカーに一旦知られてしまうと、たとえスクリプト１０２によってプレーヤ１０をリボークしたとしても、ハッカーは、スクリプト・エンジン１４をコントロールすることによって、正しいオペレーションｆ９の実行指示をスクリプト・エンジン１４からＡＡＣＳモジュール１３に与え、これによってメディアキーを導出し得る。しかし、ＭＫＢ１０３を更新して、Media key precursorを変更すれば、これに伴ってオペレーションｆ９の内容も変更される為、ハッカーは正しいメディアキーを導出する事ができなくなる。
【００８１】
なお、図１のプレーヤ１０の機能はすべてコンピュータプログラムによって実現することができるので、このコンピュータプログラムをコンピュータ読み取り可能な記憶媒体を通じて通常のコンピュータに導入するだけで、通常のコンピュータをプレーヤ１０（ソフトウェアプレーヤ）として機能させることができる。
【００８２】
また、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００８３】
【図１】本発明の一実施形態に係る再生装置の構成を示すブロック図。
【図２】プレーヤグループとメディアキープレカーサとの関係の例を示す図。
【図３】同実施形態の再生装置に設けられたＡＡＣＳモジュールの演算処理部と、スクリプトとの間のインタフェースの例を示す図。
【図４】同実施形態の再生装置に設けられたＡＡＣＳモジュールによって提供されるクラスの記述例を示す図。
【図５】同実施形態の再生装置で用いられるスクリプトの例を示す図。
【図６】同実施形態の再生装置で用いられるスクリプトの他の例を示す図。
【図７】同実施形態の再生装置に適用されるスクリプトによって実行される処理の手順を示すフローチャート。
【図８】同実施形態の再生装置に設けられたＡＡＣＳモジュールによって実行される処理の手順を示すフローチャート。
【符号の説明】
【００８４】
１０…プレーヤ、１３…ＡＡＣＳモジュール、１４…スクリプト・エンジン、１５…再生処理部、２０１…ＭＫＢ処理部、２０２…演算処理部、２０３…タイトルキー処理部、２０４…コンテント復号処理部。
【図１】
2008311961.tif 000003
【図２】
2008311961.tif 000004
【図３】
2008311961.tif 000005
【図４】
2008311961.tif 000006
【図５】
2008311961.tif 000007
【図６】
2008311961.tif 000008
【図７】
2008311961.tif 000009
【図８】
2008311961.tif 000010