(57)【要約】【課題】復号化とロードの間で平文クラスファイルを受け渡しするためのインターフェース間の傍受が容易である。【解決手段】ローディング判定部において、インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合にはクラスファイルをデクリプタローダへ送り、ローディング判定部において仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合にはクラスファイルをローダへ送るように構成したことを特徴とする。【選択図】図４
2009258772.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクト指向型のプログラムで記述されたアプリケーションの実行を行うアプリケーション実行装置であって、
入力される前記アプリケーションに含まれる暗号化クラスファイルを復号し平文のクラスファイルとした後、クラスオブジェクトに変換してヒープメモリへロードするデクリプタローダ、入力される前記アプリケーション内の平文クラスファイルをクラスオブジェクトに変換して前記ヒープメモリへロードするローダおよび前記ヒープメモリへロードされたクラスオブジェクトを解釈実行するインタプリタを有する仮想マシンと、
前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルまたは平文クラスファイルかを判定するローディング判定部とを備え、
前記ローディング判定部において、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合には前記クラスファイルを前記デクリプタローダへ送り、
前記ローディング判定部において前記仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合には前記クラスファイルを前記ローダへ送るように構成したことを特徴とするアプリケーション実行装置。
【請求項２】
前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵をマスター鍵にて暗号化して記録し、かつ
前記デクリプタローダは前記マスター鍵を予め保持しており、前記暗号化されたクラスファイルが入力されると暗号化されたクラスファイルに対応する暗号化された復号鍵を前記記録媒体から取得し、
前記暗号化された復号鍵を前記予め保持するマスター鍵を用いて復号し、前記復号された復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする請求項１記載のアプリケーション実行装置。
【請求項３】
前記デクリプタローダは前記記録媒体から前記暗号化された復号鍵を取得し、暗号化されたクラスファイルが入力される前に前記マスター鍵を用いて前記暗号化された復号鍵を復号し、キャッシュするようにしたことを特徴とする請求項１記載のアプリケーション実行装置。
【請求項４】
前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、
前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタローダへ送り、
前記デクリプタローダは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、
前記デクリプタローダが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする請求項１記載のアプリケーション実行装置。
【請求項５】
前記デクリプタローダは前記記録媒体から取得した復号鍵を保持するようにしたことを特徴とする請求項４記載のアプリケーション実行装置。
【請求項６】
オブジェクト指向型のプログラムで記述されたアプリケーションの実行を行うアプリケーション実行装置であって、
入力される前記アプリケーションに含まれる暗号化されたクラスファイルを復号し、平文クラスファイルをローダへ送るためのデクリプタおよび入力される前記アプリケーション内の平文クラスファイルまたは前記デクリプタにより復号された平文クラスファイルをクラスオブジェクトに変換しヒープメモリへロードするローダおよび前記ヒープメモリへロードされたクラスオブジェクトを解釈実行するインタプリタを有する仮想マシンと、
前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルか平文クラスファイルかを判定するローディング判定部とを備え、
前記ローディング判定部により前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合、前記暗号化されたクラスファイルを前記デクリプタへ送り、
前記ローディング判定部により前記仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合には前記クラスファイルを前記ローダへ送るように構成したことを特徴とするアプリケーション実行装置。
【請求項７】
前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵をマスター鍵にて暗号化して記録し、
前記デクリプタは前記マスター鍵を予め保持しており、前記暗号化されたクラスファイルが入力されると、前記暗号化されたクラスファイルを復号するための復号鍵を前記記録媒体から取得し、
前記取得した暗号化された復号鍵を前記予め保持するマスター鍵を用いて復号し、前記復号された復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする請求項６記載のアプリケーション実行装置。
【請求項８】
前記デクリプタは前記記録媒体から前記暗号化された復号鍵を取得し、前記暗号化されたクラスファイルが入力される前に前記復号鍵をキャッシュするようにしたことを特徴とする請求項７記載のアプリケーション実行装置。
【請求項９】
前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、
前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタへ送り、
前記デクリプタは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、
前記デクリプタが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする請求項６記載のアプリケーション実行装置。
【請求項１０】
前記デクリプタは前記記録媒体から取得した復号鍵を保持するようにしたことを特徴とする請求項９記載のアプリケーション実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はアプリケーションの著作権保護に関するものである。
【背景技術】
【０００２】
従来のアプリケーションの著作権保護としては、クラスファイルを暗号化するものがあった。たとえば非特許文献１にはクラスファイルを暗号化する方法および暗号化されたクラスファイルを実行時に復号化するための方法が開示されている。図１２は、従来のアプリケーションの著作権保護を行う一般的な再生装置の構成図であり、仮想マシーン１０１とＪａｖａ（登録商標）アプリケーション１０２で構成されている。仮想マシーン（Ｊａｖａ（登録商標）バーチャルマシーンとも言う）１０１はインタプリタ１０３、ヒープメモリ１０４、ローダ１０５で構成されている。アプリケーションは復号クラスローダ１０７、保護対象クラスファイル１０８、復号鍵１０９で構成されている。アプリケーションの著作権保護を行うために保護対象クラスファイル１０８は暗号化形式で配布されていて解釈実行される前に復号化し解釈可能な形式に変換される。保護対象クラスが暗号化されたクラスファイルからクラスオブジェクトに変更される制御フローを図１３で示す。まず復号クラスローダ１０７が復号鍵１０９を利用し、保護対象クラスファイル１０８を復号化する（Ｓ２０１）。復号化することによりクラスファイルを得る。その後、復号化クラスローダ１０７がローダ１０５にクラスファイルを渡しクラスオブジェクトを得る（Ｓ２０２）。保護対象クラスファイル１０８は暗号化形式で配布されることでアプリケーションの著作権保護が行われる。
【０００３】
上述の方式以外に、従来のコンテンツのコピープロテクションを適応し配布ファイル全体を暗号化するやり方も考えられる。
【非特許文献１】“Java（登録商標） World”、オンライン、インターネット＜URL:http://www.javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html>
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の技術ではＪａｖａ（登録商標）アプリケーションの著作権を十分に保護することができない。復号化とロードの間で平文クラスファイルを受け渡しするためのインターフェースは明確であり、復号化とロード処理の間に平文クラスファイルの傍受が容易であるという貧弱性がある。また、復号化された後の平文クラスファイルはヒープメモリ１０４上に配置されるため、解析が容易である。また、攻撃者が配信メディアを通常のリバースエンジニアリング技術で解析し著作権保護を無効化することが可能だという欠点もある。リバースエンジニアリングとは逆アセンブラなどのツールを利用しアプリケーションを解析する技術である。
【０００５】
また、配布ファイル全体を暗号化した場合、実行の際に配布ファイル全体の復号化を行い、配布ファイル全体をメモリ上に配置するため、長時間配布ファイルを平文としたものをメモリ上に保持する必要があるためメモリの傍受に対し極めて弱い。
【課題を解決するための手段】
【０００６】
本発明のアプリケーション実行装置は、オブジェクト指向型のプログラムで記述されたアプリケーションの実行を行うアプリケーション実行装置であって、入力される前記アプリケーションに含まれる暗号化クラスファイルを復号し平文のクラスファイルとした後、クラスオブジェクトに変換してヒープメモリへロードするデクリプタローダ、入力される前記アプリケーション内の平文クラスファイルをクラスオブジェクトに変換して前記ヒープメモリへロードするローダおよび前記ヒープメモリへロードされたクラスオブジェクトを解釈実行するインタプリタを有する仮想マシンと、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルまたは平文クラスファイルかを判定するローディング判定部とを備え、前記ローディング判定部において、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合には前記クラスファイルを前記デクリプタローダへ送り、前記ローディング判定部において前記仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合には前記クラスファイルを前記ローダへ送るように構成したことを特徴とする。
【０００７】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵をマスター鍵にて暗号化して記録し、かつ前記デクリプタローダは前記マスター鍵を予め保持しており、前記暗号化されたクラスファイルが入力されると暗号化されたクラスファイルに対応する暗号化された復号鍵を前記記録媒体から取得し、前記暗号化された復号鍵を前記予め保持するマスター鍵を用いて復号し、前記復号された復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする。
【０００８】
また、前記デクリプタローダは前記記録媒体から前記暗号化された復号鍵を取得し、暗号化されたクラスファイルが入力される前に前記マスター鍵を用いて前記暗号化された復号鍵を復号し、キャッシュするようにしたことを特徴とする。
【０００９】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタローダへ送り、前記デクリプタローダは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、前記デクリプタローダが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする。
【００１０】
また、前記デクリプタローダは前記記録媒体から取得した復号鍵を保持するようにしたことを特徴とする。
【００１１】
本発明のアプリケーション実行装置は、オブジェクト指向型のプログラムで記述されたアプリケーションの実行を行うアプリケーション実行装置であって、入力される前記アプリケーションに含まれる暗号化されたクラスファイルを復号し、平文クラスファイルをローダへ送るためのデクリプタおよび入力される前記アプリケーション内の平文クラスファイルまたは前記デクリプタにより復号された平文クラスファイルをクラスオブジェクトに変換しヒープメモリへロードするローダおよび前記ヒープメモリへロードされたクラスオブジェクトを解釈実行するインタプリタを有する仮想マシンと、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルか平文クラスファイルかを判定するローディング判定部とを備え、前記ローディング判定部により前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合、前記暗号化されたクラスファイルを前記デクリプタへ送り、前記ローディング判定部により前記仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合には前記クラスファイルを前記ローダへ送るように構成したことを特徴とする。
【００１２】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵をマスター鍵にて暗号化して記録し、前記デクリプタは前記マスター鍵を予め保持しており、前記暗号化されたクラスファイルが入力されると、前記暗号化されたクラスファイルを復号するための復号鍵を前記記録媒体から取得し、前記取得した暗号化された復号鍵を前記予め保持するマスター鍵を用いて復号し、前記復号された復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする。
【００１３】
また、前記デクリプタは前記記録媒体から前記暗号化された復号鍵を取得し、前記暗号化されたクラスファイルが入力される前に前記復号鍵をキャッシュするようにしたことを特徴とする。
【００１４】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタへ送り、前記デクリプタは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、前記デクリプタが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする。
【００１５】
また、前記デクリプタは前記記録媒体から取得した復号鍵を保持するようにしたことを特徴とする。
【発明の効果】
【００１６】
本発明のアプリケーション実行装置は、オブジェクト指向型のプログラムで記述されたアプリケーションの実行を行うアプリケーション実行装置であって、入力される前記アプリケーションに含まれる暗号化クラスファイルを復号し平文のクラスファイルとした後、クラスオブジェクトに変換してヒープメモリへロードするデクリプタローダ、入力される前記アプリケーション内の平文クラスファイルをクラスオブジェクトに変換して前記ヒープメモリへロードするローダおよび前記ヒープメモリへロードされたクラスオブジェクトを解釈実行するインタプリタを有する仮想マシンと、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルまたは平文クラスファイルかを判定するローディング判定部とを備え、前記ローディング判定部において、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合には前記クラスファイルを前記デクリプタローダへ送り、前記ローディング判定部において前記仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合には前記クラスファイルを前記ローダへ送るように構成したので、仮想マシン内で暗号化されたクラスファイルを復号し、ロードすることが可能となり、アプリケーション実行時の秘匿性が高くなるばかりか、クラスファイル単位でのロードが可能となるため、アプリケーション実行時の秘匿性が高くなる。
【００１７】
更に、アプリケーションの中に著作権保護されるべきクラスファイルを暗号化クラスファイルとし、著作権保護される必要のないクラスファイルを通常のクラスファイルとすることで、通常のクラスファイルをロードさせる場合にローダをチューニングすることにより通常のクラスファイルのローディング処理速度の向上を図ることが可能となる。
【００１８】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタローダへ送り、前記デクリプタローダは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、前記デクリプタローダが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号するので、復号鍵および暗号化されたクラスファイルのリバースエンジニアリング技術での解析が困難となる。
【００１９】
また、前記デクリプタローダは前記記録媒体から前記暗号化された復号鍵を取得し、暗号化されたクラスファイルが入力される前に前記マスター鍵を用いて前記暗号化された復号鍵を復号し、キャッシュするようにしたので、復号鍵を用いて暗号化されたクラスファイルを復号する処理を速くすることができる。
【００２０】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタローダへ送り、前記デクリプタローダは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、前記デクリプタローダが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号するこので、暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに複数の復号鍵を特定することで複数の復号鍵が利用可能になり、複数の復号鍵のひとつが暗号解読法により攻撃者にわかってしまっても、他の復号鍵が攻撃者に分らない限りは、他の復号鍵を用いて復号する暗号化されたクラスファイルの解読が出来ないため、より秘匿性が高くなる。
【００２１】
また、前記デクリプタローダは前記記録媒体から取得した復号鍵を保持するようにしたので、復号鍵を用いて暗号化されたクラスファイルを復号する処理を速くすることができる。
【００２２】
本発明のアプリケーション実行装置は、オブジェクト指向型のプログラムで記述されたアプリケーションの実行を行うアプリケーション実行装置であって、入力される前記アプリケーションに含まれる暗号化されたクラスファイルを復号し、平文クラスファイルをローダへ送るためのデクリプタおよび入力される前記アプリケーション内の平文クラスファイルまたは前記デクリプタにより復号された平文クラスファイルをクラスオブジェクトに変換しヒープメモリへロードするローダおよび前記ヒープメモリへロードされたクラスオブジェクトを解釈実行するインタプリタを有する仮想マシンと、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルか平文クラスファイルかを判定するローディング判定部とを備え、前記ローディング判定部により前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合、前記暗号化されたクラスファイルを前記デクリプタへ送り、前記ローディング判定部により前記仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合には前記クラスファイルを前記ローダへ送るように構成したことを特徴とする。
【００２３】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵をマスター鍵にて暗号化して記録し、前記デクリプタは前記マスター鍵を予め保持しており、前記暗号化されたクラスファイルが入力されると、前記暗号化されたクラスファイルを復号するための復号鍵を前記記録媒体から取得し、前記取得した暗号化された復号鍵を前記予め保持するマスター鍵を用いて復号し、前記復号された復号鍵を用いて前記暗号化されたクラスファイルを復号するので、仮想マシン内で暗号化されたクラスファイルを復号し、ロードすることが可能となり、アプリケーション実行時の秘匿性が高くなるばかりか、クラスファイル単位でのロードが可能となるため、アプリケーション実行時の秘匿性が高くなる。
【００２４】
更に、アプリケーションの中に著作権保護されるべきクラスファイルを暗号化クラスファイルとし、著作権保護される必要のないクラスファイルを通常のクラスファイルとすることで、通常のクラスファイルをロードさせる場合にローダをチューニングすることにより通常のクラスファイルのローディング処理速度の向上を図ることが可能となる。
【００２５】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵をマスター鍵にて暗号化して記録し、前記デクリプタは前記マスター鍵を予め保持しており、前記暗号化されたクラスファイルが入力されると、前記暗号化されたクラスファイルを復号するための復号鍵を前記記録媒体から取得し、前記取得した暗号化された復号鍵を前記予め保持するマスター鍵を用いて復号し、前記復号された復号鍵を用いて前記暗号化されたクラスファイルを復号するので、復号鍵および暗号化されたクラスファイルのリバースエンジニアリング技術での解析が困難となる。
【００２６】
また、前記デクリプタは前記記録媒体から前記暗号化された復号鍵を取得し、前記暗号化されたクラスファイルが入力される前に前記復号鍵をキャッシュするようにしたので、復号鍵を用いて暗号化されたクラスファイルを復号する処理を速くすることができる。
【００２７】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタへ送り、前記デクリプタは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、前記デクリプタが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号するので、暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに複数の復号鍵を特定することで複数の復号鍵が利用可能になり、複数の復号鍵のひとつが暗号解読法により攻撃者にわかってしまっても、他の復号鍵が攻撃者に分らない限りは、他の復号鍵を用いて復号する暗号化されたクラスファイルの解読が出来ないため、より秘匿性が高くなる。
【００２８】
また、前記デクリプタは前記記録媒体から取得した復号鍵を保持するようにしたので、復号鍵を用いて暗号化されたクラスファイルを復号する処理を速くすることができる。
【発明を実施するための最良の形態】
【００２９】
以下に、本発明の実施形態を、図面を参照しながら説明する。
【００３０】
（実施の形態１）
図１は、本実施の形態に用いる記録媒体の一例であるＢＤ−ＲＯＭ（ＢＤともいう）の構成を示した図である。ＢＤディスクは、他の光ディスク、例えばＤＶＤやＣＤなどと同様にその内周から外周に向けてらせん状に記録領域を持ち、内周のリード・インと外周のリード・アウトの間に論理データを記録できる論理アドレス空間を有している。また、リード・インの内側にはＢＣＡ（Ｂｕｒｓｔ  Ｃｕｔｔｉｎｇ  Ａｒｅａ）と呼ばれるドライブでしか読み出せない特別な領域がある。この領域はアプリケーションから読み出せないため、例えば著作権保護技術などに利用されることがよくある。
【００３１】
論理アドレス空間には、ファイルシステム情報（ボリューム）を先頭に映像データなどのアプリケーションデータが記録されている。ファイルシステムの実現例として、ＵＤＦやＩＳＯ９６６０などの方式があり、通常のＰＣと同じように記録されている論理データをディレクトリ、ファイル構造を使って読み出しする事が可能になっている。
【００３２】
本実施の形態の場合、ＢＤディスク上のディレクトリ、ファイル構造は、ルートディレクトリ（ＲＯＯＴ）直下にＢＤＤＡＴＡディレクトリが置かれている。このディレクトリはＢＤ−ＲＯＭで扱うＪａｖａ（登録商標）アプリケーションが記録されているディレクトリである。
【００３３】
ＢＤＤＡＴＡディレクトリの下には、次の２種類のファイルが記録されている。
【００３４】
（１）  ＸＸＸ．ＪＡＲ（「ＸＸＸ」は可変、拡張子「ＪＡＲ」は固定）
Ｊａｒファイル仕様に準拠したＪａｖａ（登録商標）アーカイブファイルである（以下Ｊａｒファイルと称する）。Ｊａｒファイルは複数のファイルをディレクトリ構造の形で格納している。一つのＪａｒファイルは一つ以上のクラスファイル、Ｊａｒファイルの属性を示すメタファイル、画像などのデータが格納されている。基本的に一つのＪａｒファイルに一つのＪａｖａ（登録商標）アプリケーションが格納されており、Ｊａｖａ（登録商標）アプリケーションはＪａｖａ（登録商標）バーチャルマシーン上で実行することができる。Ｊａｖａ（登録商標）アプリケーションは一つ以上のクラスファイルより構成されるが、Ｊａｖａ（登録商標）アプリケーションの著作権保護を行う必要がある場合、一つ以上のクラスファイルが暗号化される。暗号化されていないクラスファイルは拡張子「ｃｌａｓｓ」を利用する。また、暗号化されているクラスファイルは拡張子「ｓｅｃｕｒｅ」を利用する。暗号化されているクラスファイルは、復号鍵（後述）がなければリバースエンジニアリングを利用しＪａｖａ（登録商標）アプリケーションを復元することが不可能である。
【００３５】
（２）  ＸＸＸ．ＫＥＹ（「ＸＸＸ」は可変、拡張子「ＫＥＹ」は固定）
クラスファイルの復号化に必要な復号鍵である。復号鍵はマスター鍵で暗号化されており、再生装置でしか復号化できないようになっている。マスター鍵は再生装置の内部で保持されている。
【００３６】
図２はＪａｒファイルの中のファイル構造の一例である。ルートディレクトリ４０１以下に「ＭＥＴＡ−ＩＮＦ」ディレクトリ４０２、「ＮｏｔＰｒｏｔｅｃｔｅｄ．ｃｌａｓｓ」ファイル４０３、「Ｐｒｏｔｅｃｔｅｄ．ｓｅｃｕｒｅ」ファイル４０４が格納されている。「ＭＥＴＡ−ＩＮＦ」ディレクトリ４０２以下に「ＭＡＮＩＦＥＳＴ．ＭＦ」に対応するマニフェストファイル４０５が格納されている。
【００３７】
「ＮｏｔＰｒｏｔｅｃｔｅｄ．ｃｌａｓｓ」ファイル４０３はクラスファイルの一例である。クラスファイルの仕様に準拠したファイルである。
【００３８】
「Ｐｒｏｔｅｃｔｅｄ．ｓｅｃｕｒｅ」ファイル４０４は暗号化クラスファイルの一例である。暗号化されているため、現状でのリバースエンジニアリングでの解析が不可能と見なせるものである。
【００３９】
図３は再生制御のレイヤモデルを示した図である。図３の第１層は、物理層であり、処理対象たるＪａｒファイルの供給制御である。この第１層に示すように、処理対象たるＪａｒファイルは、ＢＤ−ＲＯＭだけではなく、ＨＤ、メモリカード、ネットワークといったあらゆる記録媒体、通信媒体を供給源としている。これらＨＤ、メモリカード、ネットワークといった供給源に対する制御（ディスクアクセス、カードアクセス、ネットワーク通信）が第１層の制御である。
【００４０】
第２層は、ミドルウェアのレイアである。第１層で供給されたＪａｒファイルを、どのように実行するのかを規定しているのがこの第２層である。たとえばオペレーティングシステムやＪａｖａ（登録商標）バーチャルマシーンやＣＰＵに依存したネイティブライブラリや実行ファイルなどがミドルウェア層に存在する。
【００４１】
第３層は、Ｊａｖａ（登録商標）のレイアである。Ｊａｖａ（登録商標）バーチャルマシーン上で実行されるＪａｖａ（登録商標）アプリケーションおよびクラスライブラリは第３層に存在する。Ｊａｖａ（登録商標）アプリケーションは記述された命令やユーザ入力に基づき処理を行い一定の出力、例えばオーディオやビデオの出力を行う。クラスライブラリはＪａｖａ（登録商標）アプリケーションに対してＪａｖａ（登録商標）のプロファイルで定義されているアプリケーションプログラミングインターフェース（ＡＰＩ）を提供する。Ｊａｖａ（登録商標）アプリケーションおよびクラスライブラリはＪａｖａ（登録商標）の中間コードで書かれていて、第2層のＪａｖａ（登録商標）バーチャルマシーンにより解釈実行される。Ｊａｖａ（登録商標）アプリケーションは複数のクラスファイルにより構成されるが解釈実行されるためにクラスファイルがクラスオブジェクトに変換される必要がある。クラスオブジェクトはクラスファイルの内部表現とも言える。
【００４２】
図４は、再生装置の大まかな機能構成を示すブロック図である。図３に示すように、再生装置は、ＢＤ−ＲＯＭドライブ６０１、ヒープメモリ１０４、インタプリタ１０３、デクリプタローダ６０２、ローダ１０５、ＵＯ検知モジュール６０３、出力エンジン６０４から構成される。
【００４３】
但し、図４の例ではＪａｒファイルの供給源をＢＤ−ＲＯＭとしたものを例にして説明するものであり、Ｊａｒファイルの供給源として他にＨＤ、メモリカード、ネットワークといった記録媒体、通信媒体を供給源とするのであればそれらの情報を取り込む手段がＢＤ−ＲＯＭドライブ６０１に代替することが可能である。
【００４４】
ＢＤ−ＲＯＭドライブ６０１は、ＢＤ−ＲＯＭのローディング／イジェクトを行い、ＢＤ−ＲＯＭに対するアクセスを実行する。
【００４５】
ヒープメモリ１０４は、Ｊａｒファイルを格納しＪａｖａ（登録商標）層に必要なメモリである。ヒープメモリ１０４には後述するクラスファイルの内部形式（Ｊａｖａ（登録商標）バーチャルマシーンに依存した構造体）であるクラスオブジェクトも格納される。
【００４６】
インタプリタ１０３はＪａｖａ（登録商標）バーチャルマシーンの中核であり、クラスオブジェクトの中にあるバイトコードの解釈実行を行う。インタプリタ１０３はＪａｖａ（登録商標）アプリケーションの実行速度に直接影響を与える重要な部分である。解釈実行の高速化を図るためにバイトコードをネイティブコードに変換するＪＩＴコンパイラを備えたインタプリタ（図示せず）やインタプリタの一部をハードウェア（図示せず）で実装される製品も市販されている。
【００４７】
ローディング判定部（図示せず）はクラスオブジェクトの生成（ロードともいう）の必要性を判定する。ローディング判定部はインタプリタ１０３上で解釈実行される。クラスオブジェクトが必要な場合、インタプリタ１０３がローディング判定部の解釈実行を行う。
【００４８】
解釈実行により、インタプリタがヒープメモリ１０４上のクラスファイルのロードをデクリプタローダまたはローダに要求する。ローディング判定部はヒープメモリ１０３上にクラスオブジェクトのキャッシュを持っている。ローディング判定部はＪａｖａ（登録商標）層にあるＣｌａｓｓＬｏａｄｅｒクラスまたはその継承クラスとして実装される。尚ローディング判定部は高速化のため、一部ミドルウェア層で実装されることもある。
【００４９】
デクリプタローダ６０２はＢＤ−ＲＯＭに存在する復号鍵を利用し暗号化クラスファイルを復号化した後、ヒープメモリ１０４上にクラスオブジェクトを生成する。ＢＤ−ＲＯＭに記録された復号鍵はマスター鍵で暗号化されている。デクリプタローダ６０２はマスター鍵を保持しており、マスター鍵を利用することで暗号化された復号鍵を復号した上で、この復号鍵を用いて暗号化されたクラスファイルを平文に復元することができる。デクリプタローダ６０２は著作権保護を行う上で重要な部分である。
【００５０】
デクリプタローダ６０２内に保持されるマスター鍵が第３者にわかってしまうと、マスター鍵にて暗号化された復号鍵の詳細な情報わかってしまい、その第３者に対して著作権保護ができなくなる。
【００５１】
その場合、マスター鍵に関する情報が第３者により公開されてしまう恐れがある上に、復号鍵やその中間データや平文クラスファイルが傍受されてしまう危険性があるため、マスター鍵については実装する場合にセキュリティの配慮が多いに必要である。
【００５２】
デクリプタローダ６０２がハードウェアで実装される場合、マスター鍵をハードウェアに隠蔽することが可能になり秘匿性が高くなる。デクリプタローダ６０２は暗号化クラスファイルを復号した後、平文クラスファイルを一時的にヒープメモリ１０４上に配置することもできるが、その場合ヒープメモリ１０４内の情報の傍受を困難にさせるため、復号した平文のクラスファイルをヒープメモリへ配置する期間をなるべく短くする必要があり、復号した平文のクラスファイルの利用が完了した後、速やかにヒープメモリ１０４から削除（たとえば、０で上書き）しなければならない。
【００５３】
ローダ１０５は平文クラスファイルを対応するクラスオブジェクトに変換し、ヒープメモリ１０４上にロードするものである。ヒープメモリ１０４上にロードされたクラスオブジェクトはインタプリタ１０３より解釈実行が可能である。
【００５４】
ＵＯ検知モジュール６０３は、リモコン（図示せず）や再生装置のフロントパネルといった入力手段に対してなされたユーザ操作を検知して、Ｊａｖａ（登録商標）バーチャルマシーンへの通知を行う。
【００５５】
出力エンジン６０４はＪａｖａ（登録商標）バーチャルマシーンより要求されるオーディオやビデオの出力を行う。
【００５６】
インタプリタ１０３はアプリケーションプログラムを解釈実行中に、アプリケーションに含まれるクラスファイル（暗号化されたクラスファイルまたは平文のクラスファイル）の実行を必要とした場合、ローディング判定部を呼び出して、実行すべき対象となるクラスファイルをデクリプタローダ６０２によりロードさせるべきか、ローダ１０５によりロードさせるべきかを判定する。これは、例えばＣｌａｓｓＬｏａｄｅｒクラスが持つメソッドｌｏａｄＣｌａｓｓ（クラス名）において、括弧内のクラス名を引数にして呼び出すことにより開始される。
【００５７】
ローディング判定部とＪａｖａ（登録商標）バーチャルマシーンとのインターフェースを図５に示す。
【００５８】
ローディング判定部は例えばロードすべきクラスファイルの拡張子を調べ、対象となるクラスファイルが暗号化されている（例えば図２に示すものでは拡張子が「．ｓｅｃｕｒｅ」である）と判断した場合、ＡＰＩであるｄｅｆｉｎｅＥｎｃｒｙｐｔｅｄＣｌａｓｓ（クラス名、暗号化クラスファイル）の呼び出しを行い暗号化クラスファイルのロードをミドルウェア層のデクリプタローダ６０２に依頼する。
【００５９】
また、ローディング判定部はロードすべきクラスファイルが暗号化されていない（例えば図２に示すものでは拡張子が「．ｃｌａｓｓ」である）と判断した場合、ＡＰＩであるｄｅｆｉｎｅＣｌａｓｓ（クラス名、平文クラスファイル）の呼び出しを行い平文クラスファイルのロードをミドルウェア層のローダ１０５に依頼する。ローディング判定部はクラスライブラリの１つとして格納されており、呼び出しに応じて解釈実行されるため、ローディング判定部からデクリプタローダ６０２／ローダ１０５への依頼はインタプリタ１０３を通して行われる。
【００６０】
図６を参照して、Ｊａｖａ（登録商標）層で実行されるローディング判定部がクラスオブジェクトを返す制御フローを説明する。
【００６１】
クラスオブジェクトを要求されたローディング判定部はまずキャッシュ（図示せず）に対象となるクラスオブジェクトがキャッシュされているかどうかを検索する（Ｓ６０１）。ローディング判定部は自身がロードしたクラスオブジェクトのキャッシュを持っていて同じクラスオブジェクトを２回以上ヒープメモリ１０４へロードしないようにしている。
【００６２】
対象のクラスオブジェクトを見つけた場合（Ｓ６０２）、クラスオブジェクトをインタプリタ１０３に返す（Ｓ６０３）。
【００６３】
ローディング判定部がキャッシュから対象となるクラスオブジェクトを見つからなかった場合（Ｓ６０２）、対象のクラスを定義するクラスファイルをＪａｒファイルの中から取得する（Ｓ６０４）。
【００６４】
クラスファイルはＪａｒファイルの中に格納されていて必要なクラスの名前に基づきクラスファイルを取得することができる。例えば、クラス名が「Ａｂｒａｃａｄａｂｒａ」の場合、暗号化されているクラスファイルのファイル名は「Ａｂｒａｃａｄａｂｒａ．ｓｅｃｕｒｅ」であり、暗号化されていないクラスファイルのファイル名は「Ａｂｒａｃａｄａｂｒａ．ｃｌａｓｓ」である。ローディング判定部は優先的に暗号化されているクラスファイルを選択する。
【００６５】
ローディング判定部はＪａｒファイルより取得したクラスファイルが暗号化されているかどうかの判断を行う（Ｓ６０５）。クラスファイルが暗号化されているかどうかはクラスファイルの拡張子を調べることにより行うことができる。
【００６６】
ローディング判定部はクラスファイルが暗号化されていると判断した場合、暗号化クラスファイルのロードを依頼する（Ｓ６０６）。暗号化クラスファイルのロードはＡＰＩであるｄｅｆｉｎｅＥｎｃｒｙｐｔｅｄＣｌａｓｓ（クラス名、暗号化クラスファイル）の呼び出しにより行われる。暗号化クラスファイルのロードによりヒープメモリ１０４上の一つのクラスオブジェクトを取得する。
【００６７】
ローディング判定部はクラスファイルが暗号化されていないと判断した場合、平文クラスファイルのロードを依頼する（Ｓ６０７）。平文クラスファイルのロードはＡＰＩであるｄｅｆｉｎｅＣｌａｓｓ（クラス名、平文クラスファイル）の呼び出しにより行われる。平文クラスファイルのロードによりヒープメモリ１０４上に一つのクラスオブジェクトを取得する。
【００６８】
ローディング判定部は新しくできたクラスオブジェクトをキャッシュした後（Ｓ６０９）、新しくできたクラスオブジェクトを返す（Ｓ６１０）。
【００６９】
暗号化クラスファイルのロードを行うためのＡＰＩ呼び出しｄｅｆｉｎｅＥｎｃｒｙｐｔｅｄＣｌａｓｓ（クラス名、暗号化クラスファイル）はデクリプタローダ６０２より処理される。図７を参照して、デクリプタローダ６０２が暗号化クラスファイルを復号し、ヒープメモリ１０４上にクラスオブジェクトを生成する制御フローを説明する。
【００７０】
デクリプタローダ６０２は受け取った暗号化クラスファイルを復号し対応する平文のクラスファイルにする（Ｓ７０１）。この復号は、デクリプタローダ６０２が内部で保持する復号鍵で復号化できる。
【００７１】
デクリプタローダ６０２はクラスファイルのベリファイを行いクラスファイルが改竄されていないかなどをチェックする（Ｓ７０２）。
【００７２】
デクリプタローダ６０２はベリファイを行った後、クラスファイルをクラスオブジェクトに変換する（Ｓ７０３）。クラスオブジェクトはＪａｖａ（登録商標）バーチャルマシーンに依存した構造体という形でヒープメモリ１０４に格納され、ヒープメモリ１０４上の情報が傍受されてもクラスオブジェクトをクラスファイルに復元することが困難である。
【００７３】
デクリプタローダ６０２は著作権保護対象のクラスファイルを一時的に内部で保持している間はクラスファイルの傍受を避ける。クラスファイルの傍受を避けるために第２層のミドルウェア層や第１層の物理層に存在しなければならない。
【００７４】
デクリプタローダは第3層のＪａｖａ（登録商標）層に平文クラスファイルや復号鍵などを渡さないように構成している。第２層のミドルウェア層では処理中にヒープメモリのダンプが行われクラスファイルが傍受されてしまう危険性がある。傍受されないために、インタプリタ１０３等のほかのモジュールとのインタラクションを避け、ソフトウェア難読化技術を適用することが望ましい。また、ソフトウェア難読化技術の適用以外にＣＰＵがセキュアな実行モードを提供するものもある。セキュアな実行モードで実行されるソフトウェアは他のソフトよりヒープメモリを傍受されることが困難になるため、ＣＰＵがその機能を提供する場合はデクリプタローダはセキュアな実行モードで実行されることが望ましい。
【００７５】
平文クラスファイルのロードを行うためのＡＰＩ呼び出しｄｅｆｉｎｅＣｌａｓｓ（クラス名、平文クラスファイル）はローダ１０５より処理される。図８を参照して、ローダ１０５が平文クラスファイルよりクラスオブジェクトを生成する制御フローを説明する。
【００７６】
まずローダ１０５はクラスファイルのベリファイを行いクラスファイルが改竄されていないかなどをチェックする（Ｓ８０１）。
【００７７】
ローダ１０５はベリファイを行った後、平文のクラスファイルをクラスオブジェクトに変換する（Ｓ８０２）。クラスオブジェクトはＪａｖａ（登録商標）バーチャルマシーンに依存した構造体という形でヒープメモリ１０４に格納されるので、ヒープメモリ１０４上の情報が傍受されてもクラスオブジェクトをクラスファイルに復元することが困難である。
【００７８】
ローダ１０５とデクリプタローダ６０２はクラスオブジェクトの生成に共通点が多く存在するがローダが生成するクラスオブジェクトは著作権保護の配慮を行う必要が特にないため、実装の高速化を計るためのチューニングが可能になる。
【００７９】
または、デクリプタローダ６０２により暗号化されたクラスファイルを平文のクラスファイルへと変換した後の処理は、ローダ１０５による処理と同じ処理を行うため、デクリプタローダにおいて、平文のクラスファイルをクラスオブジェクトへと変換しヒープメモリへ格納する処理についてはローダ１０５を使用するような構成としても良い。
【００８０】
これは例えば、ローダ１０５とデクリプタローダ６０２による処理の一部が共通のライブラリを共有することなどにより実現が可能となる。
【００８１】
図９は再生装置で再生されるＢＤ−ＲＯＭのマスタリングを行うマスタリング装置の大まかな機能構成を示すブロック図である。図９に示すように、マスタリング装置は、クラスファイル取得モジュール１１０１、暗号化判定部１１０２、鍵生成部１１０３、クラスファイルエンクリプタ１１０４、アーカイバ１１０５、マスター鍵取得モジュール１１０６、復号鍵エンクリプタ１１０７、ＢＤ−ＲＯＭバーナー１１０８から構成される。
【００８２】
クラスファイル取得モジュール１１０１は処理対象のＪａｖａ（登録商標）アプリケーションを構成するクラスファイルを順次取得する。
【００８３】
暗号化判定部１１０２はクラスファイル取得モジュール１１０１より取得されたクラスファイルの暗号化の必要性を判断する。暗号化の必要性はクラスファイルの属性情報を用いたり、暗号化を行う前にユーザに問い合わせることで、暗号化の有無の判断を実現することが可能である。
【００８４】
鍵生成部１１０３は復号鍵および暗号鍵を生成する。再生装置での復号化を高速化するためにＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）やＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）のような対称鍵暗号を利用することが望ましい。対称鍵暗号を利用する場合は暗号鍵と復号鍵が同じであるため、これらを秘匿としておく機構（図示せず）を設けるのが望ましい。
【００８５】
クラスファイルエンクリプタ１１０４は暗号化判定部１１０２より暗号化する必要があると判断されたクラスファイルを、鍵生成部１１０３より生成された暗号鍵で暗号化する。
【００８６】
アーカイバ１１０５はクラスファイルを一つのＪａｒファイルに格納する。暗号化の必要がないクラスファイルを拡張子「ｃｌａｓｓ」で格納し、クラスファイルエンクリプタ１１０４より得られた暗号化クラスファイルを拡張子「ｓｅｃｕｒｅ」で格納する。
【００８７】
マスター鍵取得モジュール１１０６は再生装置のマスター鍵を内部で保持し、復号鍵エンクリプタ１１０７に渡す。
【００８８】
復号鍵エンクリプタ１１０７は復号鍵をマスター鍵で暗号化する。復号鍵はマスター鍵で暗号化されるため、このプロセスより作成されたＢＤ−ＲＯＭはマスター鍵がなければ復号化は極めて困難となる。
【００８９】
ＢＤ−ＲＯＭバーナー１１０８はＪａｒファイルおよび暗号化された復号鍵を一つのＢＤ−ＲＯＭに焼き付ける。
【００９０】
マスタリング装置より作成された光ディスクは図１に示す構成を持つ。マスター鍵がなければＪａｒファイルの中の暗号化クラスファイルを復号化するためにはクラスファイルエンクリプタ１１０４にて用いた暗号化アルゴリズムを破る必要が有り、リバースエンジニアリング技術での解析が不可能と見なせる。
【００９１】
（実施の形態２）
本実施の形態は、マニフェストファイルに復号鍵の情報を格納するようにし、格納した復号鍵に関する情報に基づき記録媒体から復号鍵を取得し、デクリプタローダは取得した復号鍵を用いて暗号化されたクラスファイルを復号するように構成したことを特徴とする。
【００９２】
実施の形態１にて、説明した事項と同一もしくは同一とみなせる事項については説明を簡潔にするため、本実施の形態では詳しい説明を省略する。
【００９３】
本実施の形態にて用いる記録媒体の一例であるＢＤ−ＲＯＭは図１にて説明をしたとおりである。
【００９４】
ＢＤＤＡＴＡディレクトリの下には、次の２種類のファイルが記録されている。
【００９５】
（１）  ＸＸＸ．ＪＡＲ（「ＸＸＸ」は可変、拡張子「ＪＡＲ」は固定）
Ｊａｒファイル仕様に準拠したＪａｖａ（登録商標）アーカイブファイルである（以下Ｊａｒファイルと称する）。Ｊａｒファイルは複数のファイルをディレクトリ構造の形で格納している。一つのＪａｒファイルは一つ以上のクラスファイル、Ｊａｒファイルの属性を示すメタファイル、画像などのデータが格納されている。基本的に一つのＪａｒファイルに一つのＪａｖａ（登録商標）アプリケーションが格納されており、Ｊａｖａ（登録商標）アプリケーションはＪａｖａ（登録商標）バーチャルマシーン上で実行することができる。Ｊａｖａ（登録商標）アプリケーションは一つ以上のクラスファイルより構成されるが、Ｊａｖａ（登録商標）アプリケーションの著作権保護を行う必要がある場合、一つ以上のクラスファイルが暗号化される。暗号化されていないクラスファイルは拡張子「ｃｌａｓｓ」を利用する。また、暗号化されているクラスファイルは拡張子「ｓｅｃｕｒｅ」を利用する。暗号化されているクラスファイルは、復号鍵（後述）がなければリバースエンジニアリングを利用しＪａｖａ（登録商標）アプリケーションを復元することが不可能である。
【００９６】
（２）  ＸＸＸ．ＫＥＹ（「ＸＸＸ」は可変、拡張子「ＫＥＹ」は固定）
クラスファイルの復号化に必要な一つ以上の復号鍵の暗号化形式である。複数の復号鍵が同じファイルに存在することが可能。ファイル全体がタイトル鍵で暗号化されており、再生装置で復号化できるようになっている。再生装置はＣｏｐｙ  Ｐｒｏｔｅｃｔｉｏｎ  ｆｏｒ  Ｒｅｃｏｒｄａｂｌｅ  Ｍｅｄｉａ（ＣＰＲＭ）を利用し、再生装置が持っているデバイス鍵を元に光ディスクのタイトル鍵を取得することができる。
【００９７】
図１０は図２に示すマニフェストファイル４０５の内容の一例である。マニフェストファイル４０５に情報を記載する文法に関してはＪａｒファイル仕様の中で公開されている。本実施の形態では通常のマニフェストファイルにキー「Ｋｅｙ−ＩＤ」を追加することを特徴とする。キー「Ｋｅｙ−ＩＤ」はファイルの復号化に利用する復号鍵のＩＤを示す。
【００９８】
キー「Ｋｅｙ−ＩＤ」を複数指定することにより、異なる暗号化されたクラスファイルを復号するために異なる復号鍵を用いて復号することが可能となり、複数の復号鍵が存在した場合一つ目の鍵を０番、二つ目の鍵を１番、と順番によりＩＤを設定する。マニフェストファイルでは復号化に必要な復号鍵のＩＤを指定する。マニフェストファイルのメインセッションにデフォルトの鍵ＩＤを設定し、個別セッションに個別のファイルの鍵ＩＤを設定する。たとえば、図１０の例ではデフォルトの鍵は０番の鍵ＩＤに対応する復号鍵を用い、「Ｐｒｏｔｅｃｔｅｄ．ｓｅｃｕｒｅ」ファイルの復号に用いる復号鍵は１番の鍵ＩＤに対応する復号鍵を用いることを示すものである。
【００９９】
再生制御のレイヤモデルは図３に示したとおりである。図３の第１層は、物理層であり、処理対象たるＪａｒファイルの供給制御である。この第１層に示すように、処理対象たるＪａｒファイルは、ＢＤ−ＲＯＭだけではなく、ＨＤ、メモリカード、ネットワークといったあらゆる記録媒体、通信媒体を供給源としている。これらＨＤ、メモリカード、ネットワークといった供給源に対する制御（ディスクアクセス、カードアクセス、ネットワーク通信）が第１層の制御である。
【０１００】
第２層は、ミドルウェアのレイアである。第１層で供給されたＪａｒファイルを、どのように実行するのかを規定しているのがこの第２層である。たとえばオペレーティングシステムやＪａｖａ（登録商標）バーチャルマシーンやＣＰＵに依存したネイティブライブラリや実行ファイルなどがミドルウェア層に存在する。
【０１０１】
第３層は、Ｊａｖａ（登録商標）のレイアである。Ｊａｖａ（登録商標）バーチャルマシーン上で実行されるＪａｖａ（登録商標）アプリケーションおよびクラスライブラリは第３層に存在する。Ｊａｖａ（登録商標）アプリケーションはユーザ入力に基づき処理を行いオーディオやビデオの出力を行う。クラスライブラリはＪａｖａ（登録商標）アプリケーションに対してＪａｖａ（登録商標）のプロファイルで定義されているアプリケーションプログラミングインターフェース（ＡＰＩ）を提供する。Ｊａｖａ（登録商標）アプリケーションおよびクラスライブラリはＪａｖａ（登録商標）の中間コードで書かれていて、第2層のＪａｖａ（登録商標）バーチャルマシーンにより解釈実行される。Ｊａｖａ（登録商標）アプリケーションは複数のクラスファイルにより構成されるが解釈実行されるためにクラスファイルがクラスオブジェクトに変換される必要がある。クラスオブジェクトはクラスファイルの内部表現とも言える。
【０１０２】
本実施の形態の再生装置の構成は図４に示すとおりである。図４に示すように、再生装置は、ＢＤ−ＲＯＭドライブ６０１、ヒープメモリ１０４、インタプリタ１０３、デクリプタローダ６０２、ローダ１０５、ＵＯ検知モジュール６０３、出力エンジン６０４から構成される。
【０１０３】
ＢＤ−ＲＯＭドライブ６０１は、ＢＤ−ＲＯＭのローディング／イジェクトを行い、ＢＤ−ＲＯＭに対するアクセスを実行する。ＢＤ−ＲＯＭドライブ６０１の内部でＣＰＲＭで定義しているデバイス鍵を持っており、ＢＤ−ＲＯＭドライブ６０１はＢＤ−ＲＯＭのタイトル鍵を復元することができる。
【０１０４】
ヒープメモリ１０４は、Ｊａｒファイルを格納しＪａｖａ（登録商標）層に必要なメモリである。ヒープメモリ１０４にクラスファイルの内部形式であるクラスオブジェクトも格納される。
【０１０５】
インタプリタ１０３はＪａｖａ（登録商標）バーチャルマシーンの中核であり、クラスオブジェクトの中にあるバイトコードの解釈実行を行う。インタプリタ１０３はＪａｖａ（登録商標）アプリケーションの実行速度に直接影響を与える重要な部分である。解釈実行の高速化を図るためにバイトコードをネイティブコードに変換するＪＩＴコンパイラを備えたインタプリタやインタプリタの一部をハードウェアで実装される製品も市販されている。また、インタプリタの実装は高速化を考えた実装となっているため著作権保護の観点では解析されやすい点を、設計上考慮する必要がある。
【０１０６】
ローディング判定部（図示せず）はクラスオブジェクトの生成（ロードともいう）の必要性を判定する。ローディング判定部はインタプリタ１０３上解釈実行される。クラスオブジェクトが必要な場合、インタプリタ１０３がローディング判定部の解釈実行を行う。解釈実行により、インタプリタがヒープメモリ１０４上のクラスファイルのロードをデクリプタローダまたはローダに要求する。また、ローディング判定部はクラスオブジェクトのキャッシュを持っている。ローディング判定部はＪａｖａ（登録商標）層にあるＣｌａｓｓＬｏａｄｅｒクラスまたはその継承クラスとして実装される。ローディング判定部はＪａｖａ（登録商標）層にあるＣｌａｓｓＬｏａｄｅｒクラスまたはその継承クラスとして実装される。尚ローディング判定部は高速化のため、一部ミドルウェア層で実装されることもある。
【０１０７】
デクリプタローダ６０２はＢＤ−ＲＯＭドライブ６０１より平文形式のタイトル鍵を受け取る。ＢＤ−ＲＯＭドライブ６０１がデクリプタローダ６０２にタイトル鍵を渡すときに、鍵が傍受される可能性があるのでＢＤ−ＲＯＭドライブ６０１がデクリプタローダ６０２を認証し、お互いの暗号化チャネル（ＳＡＣ：Ｓｅｃｕｒｅ  Ａｕｔｈｅｎｔｉｃａｔｅｄ  Ｃｈａｎｎｅｌ）を開き、開いた暗号化チャネルを通じて平文形式のタイトル鍵を受け取る。このとき、暗号化チャネルの実現には楕円曲線暗号化（ＥＣＣ：Ｅｌｌｉｐｉｃ  Ｃｕｒｖｅ  Ｃｒｙｐｔｏｓｙｓｔｅｍ）とＤｉｆｆｉｅ−Ｈｅｌｌｍａｎアルゴリズムとを利用することができる。
【０１０８】
デクリプタローダ６０２はさらにタイトル鍵で暗号化された復号鍵をＢＤ−ＲＯＭを読み込んだＢＤ−ＲＯＭドライブ６０１より受け取る。暗号化された復号鍵を先に受け取ったタイトル鍵にて復号した後、この復号鍵を用いて、暗号化クラスファイルを復号することができる。暗号化クラスファイルを平文のクラスファイルへ復号した後、ヒープメモリ１０４上にクラスオブジェクトを生成する。
【０１０９】
デクリプタローダ６０２は著作権保護を行う上で重要な部分である。デクリプタローダ６０２内にあるＳＡＣで利用される暗号鍵、タイトル鍵、復号鍵などが第３者より傍受されてしまうとシステム全体として著作権保護ができなくなる。また、内部に一時的に保持する平文クラスファイルが傍受されてしまう危険性があり、実装にセキュリティの配慮が必要である。
【０１１０】
ローダ１０５は平文クラスファイルを対応するクラスオブジェクトに変換し、ヒープメモリ１０４上へ配置する。ヒープメモリ１０４上に配置されたクラスオブジェクトはインタプリタ１０３より解釈実行が可能である。
【０１１１】
ＵＯ検知モジュール６０３は、リモコン（図示せず）や再生装置のフロントパネルなどの入力手段（図示せず）に対してなされたユーザ操作を検知して、検知した入力があったことをＪａｖａ（登録商標）バーチャルマシーンへ通知する。
【０１１２】
出力エンジン６０４はＪａｖａ（登録商標）バーチャルマシーンにより解釈実行された結果、要求されるオーディオやビデオの出力を行う。
【０１１３】
インタプリタ１０３による解釈実行を行う中、クラスオブジェクトを必要とした場合、インタプリタがローディング判定部の解釈実行を行う。要求はＣｌａｓｓＬｏａｄｅｒクラスが持つメソッドｌｏａｄＣｌａｓｓ（クラス名）の呼び出しより開始される。
【０１１４】
ローディング判定部とＪａｖａ（登録商標）バーチャルマシーンとのインターフェースは、図５に示すとおりである。但し、ローディング判定部はロードすべきクラスファイルが暗号化されていると判断した場合、ＡＰＩ呼び出しｄｅｆｉｎｅＥｎｃｒｙｐｔｅｄＣｌａｓｓ（クラス名、暗号化クラスファイル、鍵ＩＤ）を行い、引数としてクラス名、暗号化クラスファイル、鍵ＩＤを指定して暗号化クラスファイルのロードをミドルウェア層のデクリプタローダ６０２に依頼する。
【０１１５】
また、ローディング判定部はロードすべきクラスファイルが暗号化されていないと判断した場合、ＡＰＩ呼び出しｄｅｆｉｎｅＣｌａｓｓ（クラス名、平文クラスファイル）を行い、引数としてクラス名、クラスファイルを指定し、クラスファイルのロードをミドルウェア層のローダ１０５に依頼する。ローディング判定部は解釈実行されるため、これらの依頼はインタプリタ１０３を通して行われる。
【０１１６】
Ｊａｖａ（登録商標）層で実行されるローディング判定部がクラスオブジェクトを返す制御フローは基本的には図６に示すものに同じである。
【０１１７】
但し、Ｓ６０５による判定の結果、ローディング判定部はクラスファイルが暗号化されていると判断した場合、暗号化クラスファイルのロードを依頼する（Ｓ６０６）場合、暗号化クラスファイルのロードはＡＰＩであるｄｅｆｉｎｅＥｎｃｒｙｐｔｅｄＣｌａｓｓを呼び出すことにより行われるが、この場合引数としてクラス名、暗号化クラスファイル、鍵ＩＤを指定する必要がある点が実施の形態１に説明したものとは異なる（つまり、ｄｅｆｉｎｅＥｎｃｒｙｐｔｅｄＣｌａｓｓ（クラス名、暗号化クラスファイル、鍵ＩＤ）として、ＡＰＩであるｄｅｆｉｎｅＥｎｃｒｙｐｔｅｄＣｌａｓｓを呼び出す）。より行われる。
【０１１８】
ここで、クラス名は再生すべきクラスオブジェクトの名前である。暗号化クラスファイルはＪａｒファイルより取得されたファイルである。鍵ＩＤは図１０に示すメタファイルより得られたクラス名に対応する鍵ＩＤである。暗号化クラスファイルのロードによりヒープメモリ１０４上の一つのクラスオブジェクトを取得する。
【０１１９】
暗号化クラスファイルのロードを行うためのＡＰＩ呼び出しｄｅｆｉｎｅＥｎｃｒｙｐｔｅｄＣｌａｓｓ（クラス名、暗号化クラスファイル、鍵ＩＤ）はデクリプタローダ６０２より処理される。デクリプタローダ６０２が暗号化クラスファイルよりヒープメモリ１０４上にクラスオブジェクトを生成する制御フローは基本的には図７に示すものに同じである。
【０１２０】
但し、本実施の形態においては、複数の復号鍵をマニフェストファイルにて指定できるようにしたので、Ｓ７０１において、デクリプタローダ６０２は引数にて指定される鍵ＩＤに相当する復号鍵を用いて受け取った暗号化されたクラスファイルを平文のクラスファイルに復号する。
【０１２１】
たとえば鍵ＩＤが０の場合、一つ目の復号鍵を利用する。鍵ＩＤが１の場合、二つ目の復号鍵を利用する。
【０１２２】
Ｓ７０２、Ｓ７０３については実施の形態１の説明と重複するためここでは、詳しい説明を省略する。
【０１２３】
デクリプタローダ６０２は著作権保護対象のクラスファイルを一時的に内部で保持している間はクラスファイルの傍受を避ける。クラスファイルの傍受を避けるために第２層や第１層の物理層に存在しなければならない。デクリプタローダは第3層のＪａｖａ（登録商標）層に平文クラスファイルや復号鍵などを渡してはならない。第２層のミドルウェア層では処理中にメモリのダンプが行われクラスファイルが傍受されてしまう危険性がある。傍受されないために、インタプリタ１０３等のほかのモジュールとのインタラクションを避け、なんらかのソフトウェア難読化技術を適用することが望ましい。また、ソフトウェア難読化技術の適応以外にＣＰＵがセキュアな実行モードを提供するものもある。セキュアな実行モードで実行されるソフトウェアは他のソフトよりメモリを傍受されることが困難になるため、ＣＰＵがその機能を提供する場合はデクリプタローダはセキュアな実行モードで実行されることが望ましい。
【０１２４】
平文クラスファイルのロードを行うためのＡＰＩ呼び出しｄｅｆｉｎｅＣｌａｓｓ（クラス名、平文クラスファイル）はローダ１０５より処理される。その具体的な説明は実施の形態１にて説明したので、ここではその詳細な説明を省略する。
【０１２５】
ローダ１０５とデクリプタローダ６０２はクラスオブジェクトの生成に共通点が多く存在するがローダが生成するクラスオブジェクトは著作権保護の配慮を行う必要が特にないため、実装の高速化を計るためのチューニングが可能になる。ただし開発コストを考えた場合、実装上ローダ１０５とデクリプタローダ６０２が共通のライブラリを共有することが考えられる。
【０１２６】
図１１は再生装置で再生されるＢＤ−ＲＯＭのマスタリングを行うマスタリング装置の構成の一例を示す図である。
【０１２７】
図１１に示すように、マスタリング装置は、クラスファイル取得モジュール１１０１、暗号化判定部１１０２、鍵生成部１１０３、クラスファイルエンクリプタ１１０４、アーカイバ１１０５、ＣＰＲＭモジュール１３０１、復号鍵エンクリプタ１１０７、ＢＤ−ＲＯＭバーナー１１０８から構成される。
【０１２８】
クラスファイル取得モジュール１１０１は処理対象のＪａｖａ（登録商標）アプリケーションを構成するクラスファイルを順次取得する。
【０１２９】
暗号化判定部１１０２はクラスファイル取得モジュール１１０１より取得されたクラスファイルの暗号化の必要性を判断する。暗号化の必要性はクラスファイルの属性情報を用いたり、暗号化を行う前にユーザに問い合わせることで実現することが可能である。
【０１３０】
鍵生成部１１０３は復号鍵および暗号鍵を生成する。対称暗号化を利用するため暗号鍵と復号鍵が同じである。
【０１３１】
クラスファイルエンクリプタ１１０４は暗号化判定部１１０２より暗号化する必要があると判断されたクラスファイルを、鍵生成部１１０３より生成された暗号鍵で暗号化する。暗号鍵には鍵ＩＤがついており、クラスファイルエンクリプタ１１０４は利用した鍵のＩＤを記憶する。
【０１３２】
アーカイバ１１０５はクラスファイルを一つのＪａｒファイルに格納する。暗号化の必要がないクラスファイルを拡張子「ｃｌａｓｓ」で格納し、クラスファイルエンクリプタ１１０４より得られた暗号化クラスファイルを拡張子「ｓｅｃｕｒｅ」で格納する。
【０１３３】
また、暗号に用いた暗号鍵の鍵ＩＤの情報をクラスファイルエンクリプタ１１０４より受け取り、その情報をメタファイルに格納する。メタファイルはＪａｒファイルのＭＥＴＡ−ＩＮＦディレクトリにあるＭＡＮＩＦＥＳＴ．ＭＦファイルである。
【０１３４】
ＣＰＲＭモジュール１３０１はＣＰＲＭに必要な鍵生成および情報保持を行う。ＣＰＲＭモジュール１３０１はタイトル鍵を復号鍵エンクリプタ１１０７に渡す。また、ＣＰＲＭの仕様で定められている情報をＢＤ−ＲＯＭバーナー１１０８に渡す。ＣＰＲＭの仕様は、例えば「ｈｔｔｐ：／／ｗｗｗ．４ｃｅｎｔｉｔｙ．ｃｏｍ／ｔｅｃｈ／ｃｐｒｍ／」より入手することができる。
【０１３５】
復号鍵エンクリプタ１１０７は必要な復号鍵をタイトル鍵で暗号化する。鍵ＩＤ＝０の復号鍵より順番に連結した上でタイトル鍵で暗号化を行い復号鍵ファイルを生成する。
【０１３６】
ＢＤ−ＲＯＭバーナー１１０８はＪａｒファイルと復号鍵ファイルとＣＰＲＭ用情報を一つのＢＤ−ＲＯＭに焼き付ける。
【０１３７】
マスタリング装置より作成された光ディスクは図３に示す構成を持つ。Ｊａｒファイルの中の暗号化クラスファイルは、リバースエンジニアリングを利用しての解析が不可能である。ＣＰＲＭが定めるデバイス鍵がなければタイトル鍵を取得することができないため、Ｊａｒファイルの中の暗号化クラスファイルを復号化するためには復号鍵を用いることなく暗号化されたクラスファイルを復号する必要が有り、きわめて困難である。
【産業上の利用可能性】
【０１３８】
本発明は光ディスクやＳＤカードといった記録媒体またはインターネットといった通信媒体を介して受け取ったＪａｖａ（登録商標）アプリケーションの著作権保護に利用できる。
【図面の簡単な説明】
【０１３９】
【図１】本発明の実施の形態におけるＢＤ−ＲＯＭのデータ階層の一例を示す図
【図２】本実施の形態におけるＪａｒファイルのファイル構造の一例を示す図
【図３】本実施の形態におけるソフトウェアのレイヤの一例を示す図
【図４】本発明の実施の形態における再生装置の構成の一例を示す図
【図５】本実施の形態におけるローディング判定部とデクリプタローダとローダとの間のインターフェースの一例を示す図
【図６】本実施の形態におけるローディング判定部の処理の一例を示す図
【図７】本実施の形態におけるデクリプタローダがクラスオブジェクトを生成する処理の一例を示す図
【図８】本実施の形態におけるローダがクラスオブジェクトを生成する処理の一例を示す図
【図９】本実施の形態におけるマスタリング装置の構成の一例を示す図
【図１０】本実施の形態におけるメタファイルの中身の一例を示す図
【図１１】本発明の二つ目の実施の形態におけるマスタリング装置の構成の一例を示す図
【図１２】従来のＪａｖａ（登録商標）アプリケーションの著作権保護を行う再生装置の構成の一例を示す図
【図１３】暗号化クラスファイルからクラスオブジェクトに変更される処理の一例を示す図
【符号の説明】
【０１４０】
１０１    仮想マシン
１０２    Ｊａｖａ（登録商標）アプリケーション
１０３    インタプリタ
１０４    ヒープメモリ
１０５    ローダ
１０７    復号クラスローダ
１０８    保護対象クラスファイル
１０９    復号鍵
４０１    ルートディレクトリ
４０２    ＭＥＴＡ−ＩＮＦディレクトリ
４０３    暗号化されていないクラスファイル
４０４    暗号化されたクラスファイル
４０５    マニフェストファイル
６０１    ＢＤ−ＲＯＭドライブ
６０２    デクリプタローダ
６０３    ＵＯ検知モジュール
６０４    出力エンジン
１１０１    クラスファイル取得モジュール
１１０２    暗号化判定部
１１０３    鍵生成部
１１０４    クラスファイルエンクリプタ
１１０５    アーカイバ
１１０６    マスター鍵取得モジュール
１１０７    復号鍵エンクリプタ
１１０８    ＢＤ−ＲＯＭバーナー
１３０１    ＣＰＲＭモジュール
【図１】
2009258772.tif 000003
【図２】
2009258772.tif 000004
【図３】
2009258772.tif 000005
【図４】
2009258772.tif 000006
【図５】
2009258772.tif 000007
【図６】
2009258772.tif 000008
【図７】
2009258772.tif 000009
【図８】
2009258772.tif 000010
【図９】
2009258772.tif 000011
【図１０】
2009258772.tif 000012
【図１１】
2009258772.tif 000013
【図１２】
2009258772.tif 000014
【図１３】
2009258772.tif 000015