説明

アプリケーション実行装置

【課題】復号化とロードの間で平文クラスファイルを受け渡しするためのインターフェース間の傍受が容易である。
【解決手段】ローディング判定部において、インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合にはクラスファイルをデクリプタローダへ送り、ローディング判定部において仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合にはクラスファイルをローダへ送るように構成したことを特徴とする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明はアプリケーションの著作権保護に関するものである。
【背景技術】
【0002】
従来のアプリケーションの著作権保護としては、クラスファイルを暗号化するものがあった。たとえば非特許文献1にはクラスファイルを暗号化する方法および暗号化されたクラスファイルを実行時に復号化するための方法が開示されている。図12は、従来のアプリケーションの著作権保護を行う一般的な再生装置の構成図であり、仮想マシーン101とJava(登録商標)アプリケーション102で構成されている。仮想マシーン(Java(登録商標)バーチャルマシーンとも言う)101はインタプリタ103、ヒープメモリ104、ローダ105で構成されている。アプリケーションは復号クラスローダ107、保護対象クラスファイル108、復号鍵109で構成されている。アプリケーションの著作権保護を行うために保護対象クラスファイル108は暗号化形式で配布されていて解釈実行される前に復号化し解釈可能な形式に変換される。保護対象クラスが暗号化されたクラスファイルからクラスオブジェクトに変更される制御フローを図13で示す。まず復号クラスローダ107が復号鍵109を利用し、保護対象クラスファイル108を復号化する(S201)。復号化することによりクラスファイルを得る。その後、復号化クラスローダ107がローダ105にクラスファイルを渡しクラスオブジェクトを得る(S202)。保護対象クラスファイル108は暗号化形式で配布されることでアプリケーションの著作権保護が行われる。
【0003】
上述の方式以外に、従来のコンテンツのコピープロテクションを適応し配布ファイル全体を暗号化するやり方も考えられる。
【非特許文献1】“Java(登録商標) World”、オンライン、インターネット<URL:http://www.javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html>
【発明の開示】
【発明が解決しようとする課題】
【0004】
しかしながら、従来の技術ではJava(登録商標)アプリケーションの著作権を十分に保護することができない。復号化とロードの間で平文クラスファイルを受け渡しするためのインターフェースは明確であり、復号化とロード処理の間に平文クラスファイルの傍受が容易であるという貧弱性がある。また、復号化された後の平文クラスファイルはヒープメモリ104上に配置されるため、解析が容易である。また、攻撃者が配信メディアを通常のリバースエンジニアリング技術で解析し著作権保護を無効化することが可能だという欠点もある。リバースエンジニアリングとは逆アセンブラなどのツールを利用しアプリケーションを解析する技術である。
【0005】
また、配布ファイル全体を暗号化した場合、実行の際に配布ファイル全体の復号化を行い、配布ファイル全体をメモリ上に配置するため、長時間配布ファイルを平文としたものをメモリ上に保持する必要があるためメモリの傍受に対し極めて弱い。
【課題を解決するための手段】
【0006】
本発明のアプリケーション実行装置は、オブジェクト指向型のプログラムで記述されたアプリケーションの実行を行うアプリケーション実行装置であって、入力される前記アプリケーションに含まれる暗号化クラスファイルを復号し平文のクラスファイルとした後、クラスオブジェクトに変換してヒープメモリへロードするデクリプタローダ、入力される前記アプリケーション内の平文クラスファイルをクラスオブジェクトに変換して前記ヒープメモリへロードするローダおよび前記ヒープメモリへロードされたクラスオブジェクトを解釈実行するインタプリタを有する仮想マシンと、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルまたは平文クラスファイルかを判定するローディング判定部とを備え、前記ローディング判定部において、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合には前記クラスファイルを前記デクリプタローダへ送り、前記ローディング判定部において前記仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合には前記クラスファイルを前記ローダへ送るように構成したことを特徴とする。
【0007】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵をマスター鍵にて暗号化して記録し、かつ前記デクリプタローダは前記マスター鍵を予め保持しており、前記暗号化されたクラスファイルが入力されると暗号化されたクラスファイルに対応する暗号化された復号鍵を前記記録媒体から取得し、前記暗号化された復号鍵を前記予め保持するマスター鍵を用いて復号し、前記復号された復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする。
【0008】
また、前記デクリプタローダは前記記録媒体から前記暗号化された復号鍵を取得し、暗号化されたクラスファイルが入力される前に前記マスター鍵を用いて前記暗号化された復号鍵を復号し、キャッシュするようにしたことを特徴とする。
【0009】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタローダへ送り、前記デクリプタローダは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、前記デクリプタローダが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする。
【0010】
また、前記デクリプタローダは前記記録媒体から取得した復号鍵を保持するようにしたことを特徴とする。
【0011】
本発明のアプリケーション実行装置は、オブジェクト指向型のプログラムで記述されたアプリケーションの実行を行うアプリケーション実行装置であって、入力される前記アプリケーションに含まれる暗号化されたクラスファイルを復号し、平文クラスファイルをローダへ送るためのデクリプタおよび入力される前記アプリケーション内の平文クラスファイルまたは前記デクリプタにより復号された平文クラスファイルをクラスオブジェクトに変換しヒープメモリへロードするローダおよび前記ヒープメモリへロードされたクラスオブジェクトを解釈実行するインタプリタを有する仮想マシンと、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルか平文クラスファイルかを判定するローディング判定部とを備え、前記ローディング判定部により前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合、前記暗号化されたクラスファイルを前記デクリプタへ送り、前記ローディング判定部により前記仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合には前記クラスファイルを前記ローダへ送るように構成したことを特徴とする。
【0012】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵をマスター鍵にて暗号化して記録し、前記デクリプタは前記マスター鍵を予め保持しており、前記暗号化されたクラスファイルが入力されると、前記暗号化されたクラスファイルを復号するための復号鍵を前記記録媒体から取得し、前記取得した暗号化された復号鍵を前記予め保持するマスター鍵を用いて復号し、前記復号された復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする。
【0013】
また、前記デクリプタは前記記録媒体から前記暗号化された復号鍵を取得し、前記暗号化されたクラスファイルが入力される前に前記復号鍵をキャッシュするようにしたことを特徴とする。
【0014】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタへ送り、前記デクリプタは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、前記デクリプタが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする。
【0015】
また、前記デクリプタは前記記録媒体から取得した復号鍵を保持するようにしたことを特徴とする。
【発明の効果】
【0016】
本発明のアプリケーション実行装置は、オブジェクト指向型のプログラムで記述されたアプリケーションの実行を行うアプリケーション実行装置であって、入力される前記アプリケーションに含まれる暗号化クラスファイルを復号し平文のクラスファイルとした後、クラスオブジェクトに変換してヒープメモリへロードするデクリプタローダ、入力される前記アプリケーション内の平文クラスファイルをクラスオブジェクトに変換して前記ヒープメモリへロードするローダおよび前記ヒープメモリへロードされたクラスオブジェクトを解釈実行するインタプリタを有する仮想マシンと、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルまたは平文クラスファイルかを判定するローディング判定部とを備え、前記ローディング判定部において、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合には前記クラスファイルを前記デクリプタローダへ送り、前記ローディング判定部において前記仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合には前記クラスファイルを前記ローダへ送るように構成したので、仮想マシン内で暗号化されたクラスファイルを復号し、ロードすることが可能となり、アプリケーション実行時の秘匿性が高くなるばかりか、クラスファイル単位でのロードが可能となるため、アプリケーション実行時の秘匿性が高くなる。
【0017】
更に、アプリケーションの中に著作権保護されるべきクラスファイルを暗号化クラスファイルとし、著作権保護される必要のないクラスファイルを通常のクラスファイルとすることで、通常のクラスファイルをロードさせる場合にローダをチューニングすることにより通常のクラスファイルのローディング処理速度の向上を図ることが可能となる。
【0018】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタローダへ送り、前記デクリプタローダは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、前記デクリプタローダが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号するので、復号鍵および暗号化されたクラスファイルのリバースエンジニアリング技術での解析が困難となる。
【0019】
また、前記デクリプタローダは前記記録媒体から前記暗号化された復号鍵を取得し、暗号化されたクラスファイルが入力される前に前記マスター鍵を用いて前記暗号化された復号鍵を復号し、キャッシュするようにしたので、復号鍵を用いて暗号化されたクラスファイルを復号する処理を速くすることができる。
【0020】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタローダへ送り、前記デクリプタローダは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、前記デクリプタローダが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号するこので、暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに複数の復号鍵を特定することで複数の復号鍵が利用可能になり、複数の復号鍵のひとつが暗号解読法により攻撃者にわかってしまっても、他の復号鍵が攻撃者に分らない限りは、他の復号鍵を用いて復号する暗号化されたクラスファイルの解読が出来ないため、より秘匿性が高くなる。
【0021】
また、前記デクリプタローダは前記記録媒体から取得した復号鍵を保持するようにしたので、復号鍵を用いて暗号化されたクラスファイルを復号する処理を速くすることができる。
【0022】
本発明のアプリケーション実行装置は、オブジェクト指向型のプログラムで記述されたアプリケーションの実行を行うアプリケーション実行装置であって、入力される前記アプリケーションに含まれる暗号化されたクラスファイルを復号し、平文クラスファイルをローダへ送るためのデクリプタおよび入力される前記アプリケーション内の平文クラスファイルまたは前記デクリプタにより復号された平文クラスファイルをクラスオブジェクトに変換しヒープメモリへロードするローダおよび前記ヒープメモリへロードされたクラスオブジェクトを解釈実行するインタプリタを有する仮想マシンと、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルか平文クラスファイルかを判定するローディング判定部とを備え、前記ローディング判定部により前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合、前記暗号化されたクラスファイルを前記デクリプタへ送り、前記ローディング判定部により前記仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合には前記クラスファイルを前記ローダへ送るように構成したことを特徴とする。
【0023】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵をマスター鍵にて暗号化して記録し、前記デクリプタは前記マスター鍵を予め保持しており、前記暗号化されたクラスファイルが入力されると、前記暗号化されたクラスファイルを復号するための復号鍵を前記記録媒体から取得し、前記取得した暗号化された復号鍵を前記予め保持するマスター鍵を用いて復号し、前記復号された復号鍵を用いて前記暗号化されたクラスファイルを復号するので、仮想マシン内で暗号化されたクラスファイルを復号し、ロードすることが可能となり、アプリケーション実行時の秘匿性が高くなるばかりか、クラスファイル単位でのロードが可能となるため、アプリケーション実行時の秘匿性が高くなる。
【0024】
更に、アプリケーションの中に著作権保護されるべきクラスファイルを暗号化クラスファイルとし、著作権保護される必要のないクラスファイルを通常のクラスファイルとすることで、通常のクラスファイルをロードさせる場合にローダをチューニングすることにより通常のクラスファイルのローディング処理速度の向上を図ることが可能となる。
【0025】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵をマスター鍵にて暗号化して記録し、前記デクリプタは前記マスター鍵を予め保持しており、前記暗号化されたクラスファイルが入力されると、前記暗号化されたクラスファイルを復号するための復号鍵を前記記録媒体から取得し、前記取得した暗号化された復号鍵を前記予め保持するマスター鍵を用いて復号し、前記復号された復号鍵を用いて前記暗号化されたクラスファイルを復号するので、復号鍵および暗号化されたクラスファイルのリバースエンジニアリング技術での解析が困難となる。
【0026】
また、前記デクリプタは前記記録媒体から前記暗号化された復号鍵を取得し、前記暗号化されたクラスファイルが入力される前に前記復号鍵をキャッシュするようにしたので、復号鍵を用いて暗号化されたクラスファイルを復号する処理を速くすることができる。
【0027】
また、前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタへ送り、前記デクリプタは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、前記デクリプタが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号するので、暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに複数の復号鍵を特定することで複数の復号鍵が利用可能になり、複数の復号鍵のひとつが暗号解読法により攻撃者にわかってしまっても、他の復号鍵が攻撃者に分らない限りは、他の復号鍵を用いて復号する暗号化されたクラスファイルの解読が出来ないため、より秘匿性が高くなる。
【0028】
また、前記デクリプタは前記記録媒体から取得した復号鍵を保持するようにしたので、復号鍵を用いて暗号化されたクラスファイルを復号する処理を速くすることができる。
【発明を実施するための最良の形態】
【0029】
以下に、本発明の実施形態を、図面を参照しながら説明する。
【0030】
(実施の形態1)
図1は、本実施の形態に用いる記録媒体の一例であるBD−ROM(BDともいう)の構成を示した図である。BDディスクは、他の光ディスク、例えばDVDやCDなどと同様にその内周から外周に向けてらせん状に記録領域を持ち、内周のリード・インと外周のリード・アウトの間に論理データを記録できる論理アドレス空間を有している。また、リード・インの内側にはBCA(Burst Cutting Area)と呼ばれるドライブでしか読み出せない特別な領域がある。この領域はアプリケーションから読み出せないため、例えば著作権保護技術などに利用されることがよくある。
【0031】
論理アドレス空間には、ファイルシステム情報(ボリューム)を先頭に映像データなどのアプリケーションデータが記録されている。ファイルシステムの実現例として、UDFやISO9660などの方式があり、通常のPCと同じように記録されている論理データをディレクトリ、ファイル構造を使って読み出しする事が可能になっている。
【0032】
本実施の形態の場合、BDディスク上のディレクトリ、ファイル構造は、ルートディレクトリ(ROOT)直下にBDDATAディレクトリが置かれている。このディレクトリはBD−ROMで扱うJava(登録商標)アプリケーションが記録されているディレクトリである。
【0033】
BDDATAディレクトリの下には、次の2種類のファイルが記録されている。
【0034】
(1) XXX.JAR(「XXX」は可変、拡張子「JAR」は固定)
Jarファイル仕様に準拠したJava(登録商標)アーカイブファイルである(以下Jarファイルと称する)。Jarファイルは複数のファイルをディレクトリ構造の形で格納している。一つのJarファイルは一つ以上のクラスファイル、Jarファイルの属性を示すメタファイル、画像などのデータが格納されている。基本的に一つのJarファイルに一つのJava(登録商標)アプリケーションが格納されており、Java(登録商標)アプリケーションはJava(登録商標)バーチャルマシーン上で実行することができる。Java(登録商標)アプリケーションは一つ以上のクラスファイルより構成されるが、Java(登録商標)アプリケーションの著作権保護を行う必要がある場合、一つ以上のクラスファイルが暗号化される。暗号化されていないクラスファイルは拡張子「class」を利用する。また、暗号化されているクラスファイルは拡張子「secure」を利用する。暗号化されているクラスファイルは、復号鍵(後述)がなければリバースエンジニアリングを利用しJava(登録商標)アプリケーションを復元することが不可能である。
【0035】
(2) XXX.KEY(「XXX」は可変、拡張子「KEY」は固定)
クラスファイルの復号化に必要な復号鍵である。復号鍵はマスター鍵で暗号化されており、再生装置でしか復号化できないようになっている。マスター鍵は再生装置の内部で保持されている。
【0036】
図2はJarファイルの中のファイル構造の一例である。ルートディレクトリ401以下に「META−INF」ディレクトリ402、「NotProtected.class」ファイル403、「Protected.secure」ファイル404が格納されている。「META−INF」ディレクトリ402以下に「MANIFEST.MF」に対応するマニフェストファイル405が格納されている。
【0037】
「NotProtected.class」ファイル403はクラスファイルの一例である。クラスファイルの仕様に準拠したファイルである。
【0038】
「Protected.secure」ファイル404は暗号化クラスファイルの一例である。暗号化されているため、現状でのリバースエンジニアリングでの解析が不可能と見なせるものである。
【0039】
図3は再生制御のレイヤモデルを示した図である。図3の第1層は、物理層であり、処理対象たるJarファイルの供給制御である。この第1層に示すように、処理対象たるJarファイルは、BD−ROMだけではなく、HD、メモリカード、ネットワークといったあらゆる記録媒体、通信媒体を供給源としている。これらHD、メモリカード、ネットワークといった供給源に対する制御(ディスクアクセス、カードアクセス、ネットワーク通信)が第1層の制御である。
【0040】
第2層は、ミドルウェアのレイアである。第1層で供給されたJarファイルを、どのように実行するのかを規定しているのがこの第2層である。たとえばオペレーティングシステムやJava(登録商標)バーチャルマシーンやCPUに依存したネイティブライブラリや実行ファイルなどがミドルウェア層に存在する。
【0041】
第3層は、Java(登録商標)のレイアである。Java(登録商標)バーチャルマシーン上で実行されるJava(登録商標)アプリケーションおよびクラスライブラリは第3層に存在する。Java(登録商標)アプリケーションは記述された命令やユーザ入力に基づき処理を行い一定の出力、例えばオーディオやビデオの出力を行う。クラスライブラリはJava(登録商標)アプリケーションに対してJava(登録商標)のプロファイルで定義されているアプリケーションプログラミングインターフェース(API)を提供する。Java(登録商標)アプリケーションおよびクラスライブラリはJava(登録商標)の中間コードで書かれていて、第2層のJava(登録商標)バーチャルマシーンにより解釈実行される。Java(登録商標)アプリケーションは複数のクラスファイルにより構成されるが解釈実行されるためにクラスファイルがクラスオブジェクトに変換される必要がある。クラスオブジェクトはクラスファイルの内部表現とも言える。
【0042】
図4は、再生装置の大まかな機能構成を示すブロック図である。図3に示すように、再生装置は、BD−ROMドライブ601、ヒープメモリ104、インタプリタ103、デクリプタローダ602、ローダ105、UO検知モジュール603、出力エンジン604から構成される。
【0043】
但し、図4の例ではJarファイルの供給源をBD−ROMとしたものを例にして説明するものであり、Jarファイルの供給源として他にHD、メモリカード、ネットワークといった記録媒体、通信媒体を供給源とするのであればそれらの情報を取り込む手段がBD−ROMドライブ601に代替することが可能である。
【0044】
BD−ROMドライブ601は、BD−ROMのローディング/イジェクトを行い、BD−ROMに対するアクセスを実行する。
【0045】
ヒープメモリ104は、Jarファイルを格納しJava(登録商標)層に必要なメモリである。ヒープメモリ104には後述するクラスファイルの内部形式(Java(登録商標)バーチャルマシーンに依存した構造体)であるクラスオブジェクトも格納される。
【0046】
インタプリタ103はJava(登録商標)バーチャルマシーンの中核であり、クラスオブジェクトの中にあるバイトコードの解釈実行を行う。インタプリタ103はJava(登録商標)アプリケーションの実行速度に直接影響を与える重要な部分である。解釈実行の高速化を図るためにバイトコードをネイティブコードに変換するJITコンパイラを備えたインタプリタ(図示せず)やインタプリタの一部をハードウェア(図示せず)で実装される製品も市販されている。
【0047】
ローディング判定部(図示せず)はクラスオブジェクトの生成(ロードともいう)の必要性を判定する。ローディング判定部はインタプリタ103上で解釈実行される。クラスオブジェクトが必要な場合、インタプリタ103がローディング判定部の解釈実行を行う。
【0048】
解釈実行により、インタプリタがヒープメモリ104上のクラスファイルのロードをデクリプタローダまたはローダに要求する。ローディング判定部はヒープメモリ103上にクラスオブジェクトのキャッシュを持っている。ローディング判定部はJava(登録商標)層にあるClassLoaderクラスまたはその継承クラスとして実装される。尚ローディング判定部は高速化のため、一部ミドルウェア層で実装されることもある。
【0049】
デクリプタローダ602はBD−ROMに存在する復号鍵を利用し暗号化クラスファイルを復号化した後、ヒープメモリ104上にクラスオブジェクトを生成する。BD−ROMに記録された復号鍵はマスター鍵で暗号化されている。デクリプタローダ602はマスター鍵を保持しており、マスター鍵を利用することで暗号化された復号鍵を復号した上で、この復号鍵を用いて暗号化されたクラスファイルを平文に復元することができる。デクリプタローダ602は著作権保護を行う上で重要な部分である。
【0050】
デクリプタローダ602内に保持されるマスター鍵が第3者にわかってしまうと、マスター鍵にて暗号化された復号鍵の詳細な情報わかってしまい、その第3者に対して著作権保護ができなくなる。
【0051】
その場合、マスター鍵に関する情報が第3者により公開されてしまう恐れがある上に、復号鍵やその中間データや平文クラスファイルが傍受されてしまう危険性があるため、マスター鍵については実装する場合にセキュリティの配慮が多いに必要である。
【0052】
デクリプタローダ602がハードウェアで実装される場合、マスター鍵をハードウェアに隠蔽することが可能になり秘匿性が高くなる。デクリプタローダ602は暗号化クラスファイルを復号した後、平文クラスファイルを一時的にヒープメモリ104上に配置することもできるが、その場合ヒープメモリ104内の情報の傍受を困難にさせるため、復号した平文のクラスファイルをヒープメモリへ配置する期間をなるべく短くする必要があり、復号した平文のクラスファイルの利用が完了した後、速やかにヒープメモリ104から削除(たとえば、0で上書き)しなければならない。
【0053】
ローダ105は平文クラスファイルを対応するクラスオブジェクトに変換し、ヒープメモリ104上にロードするものである。ヒープメモリ104上にロードされたクラスオブジェクトはインタプリタ103より解釈実行が可能である。
【0054】
UO検知モジュール603は、リモコン(図示せず)や再生装置のフロントパネルといった入力手段に対してなされたユーザ操作を検知して、Java(登録商標)バーチャルマシーンへの通知を行う。
【0055】
出力エンジン604はJava(登録商標)バーチャルマシーンより要求されるオーディオやビデオの出力を行う。
【0056】
インタプリタ103はアプリケーションプログラムを解釈実行中に、アプリケーションに含まれるクラスファイル(暗号化されたクラスファイルまたは平文のクラスファイル)の実行を必要とした場合、ローディング判定部を呼び出して、実行すべき対象となるクラスファイルをデクリプタローダ602によりロードさせるべきか、ローダ105によりロードさせるべきかを判定する。これは、例えばClassLoaderクラスが持つメソッドloadClass(クラス名)において、括弧内のクラス名を引数にして呼び出すことにより開始される。
【0057】
ローディング判定部とJava(登録商標)バーチャルマシーンとのインターフェースを図5に示す。
【0058】
ローディング判定部は例えばロードすべきクラスファイルの拡張子を調べ、対象となるクラスファイルが暗号化されている(例えば図2に示すものでは拡張子が「.secure」である)と判断した場合、APIであるdefineEncryptedClass(クラス名、暗号化クラスファイル)の呼び出しを行い暗号化クラスファイルのロードをミドルウェア層のデクリプタローダ602に依頼する。
【0059】
また、ローディング判定部はロードすべきクラスファイルが暗号化されていない(例えば図2に示すものでは拡張子が「.class」である)と判断した場合、APIであるdefineClass(クラス名、平文クラスファイル)の呼び出しを行い平文クラスファイルのロードをミドルウェア層のローダ105に依頼する。ローディング判定部はクラスライブラリの1つとして格納されており、呼び出しに応じて解釈実行されるため、ローディング判定部からデクリプタローダ602/ローダ105への依頼はインタプリタ103を通して行われる。
【0060】
図6を参照して、Java(登録商標)層で実行されるローディング判定部がクラスオブジェクトを返す制御フローを説明する。
【0061】
クラスオブジェクトを要求されたローディング判定部はまずキャッシュ(図示せず)に対象となるクラスオブジェクトがキャッシュされているかどうかを検索する(S601)。ローディング判定部は自身がロードしたクラスオブジェクトのキャッシュを持っていて同じクラスオブジェクトを2回以上ヒープメモリ104へロードしないようにしている。
【0062】
対象のクラスオブジェクトを見つけた場合(S602)、クラスオブジェクトをインタプリタ103に返す(S603)。
【0063】
ローディング判定部がキャッシュから対象となるクラスオブジェクトを見つからなかった場合(S602)、対象のクラスを定義するクラスファイルをJarファイルの中から取得する(S604)。
【0064】
クラスファイルはJarファイルの中に格納されていて必要なクラスの名前に基づきクラスファイルを取得することができる。例えば、クラス名が「Abracadabra」の場合、暗号化されているクラスファイルのファイル名は「Abracadabra.secure」であり、暗号化されていないクラスファイルのファイル名は「Abracadabra.class」である。ローディング判定部は優先的に暗号化されているクラスファイルを選択する。
【0065】
ローディング判定部はJarファイルより取得したクラスファイルが暗号化されているかどうかの判断を行う(S605)。クラスファイルが暗号化されているかどうかはクラスファイルの拡張子を調べることにより行うことができる。
【0066】
ローディング判定部はクラスファイルが暗号化されていると判断した場合、暗号化クラスファイルのロードを依頼する(S606)。暗号化クラスファイルのロードはAPIであるdefineEncryptedClass(クラス名、暗号化クラスファイル)の呼び出しにより行われる。暗号化クラスファイルのロードによりヒープメモリ104上の一つのクラスオブジェクトを取得する。
【0067】
ローディング判定部はクラスファイルが暗号化されていないと判断した場合、平文クラスファイルのロードを依頼する(S607)。平文クラスファイルのロードはAPIであるdefineClass(クラス名、平文クラスファイル)の呼び出しにより行われる。平文クラスファイルのロードによりヒープメモリ104上に一つのクラスオブジェクトを取得する。
【0068】
ローディング判定部は新しくできたクラスオブジェクトをキャッシュした後(S609)、新しくできたクラスオブジェクトを返す(S610)。
【0069】
暗号化クラスファイルのロードを行うためのAPI呼び出しdefineEncryptedClass(クラス名、暗号化クラスファイル)はデクリプタローダ602より処理される。図7を参照して、デクリプタローダ602が暗号化クラスファイルを復号し、ヒープメモリ104上にクラスオブジェクトを生成する制御フローを説明する。
【0070】
デクリプタローダ602は受け取った暗号化クラスファイルを復号し対応する平文のクラスファイルにする(S701)。この復号は、デクリプタローダ602が内部で保持する復号鍵で復号化できる。
【0071】
デクリプタローダ602はクラスファイルのベリファイを行いクラスファイルが改竄されていないかなどをチェックする(S702)。
【0072】
デクリプタローダ602はベリファイを行った後、クラスファイルをクラスオブジェクトに変換する(S703)。クラスオブジェクトはJava(登録商標)バーチャルマシーンに依存した構造体という形でヒープメモリ104に格納され、ヒープメモリ104上の情報が傍受されてもクラスオブジェクトをクラスファイルに復元することが困難である。
【0073】
デクリプタローダ602は著作権保護対象のクラスファイルを一時的に内部で保持している間はクラスファイルの傍受を避ける。クラスファイルの傍受を避けるために第2層のミドルウェア層や第1層の物理層に存在しなければならない。
【0074】
デクリプタローダは第3層のJava(登録商標)層に平文クラスファイルや復号鍵などを渡さないように構成している。第2層のミドルウェア層では処理中にヒープメモリのダンプが行われクラスファイルが傍受されてしまう危険性がある。傍受されないために、インタプリタ103等のほかのモジュールとのインタラクションを避け、ソフトウェア難読化技術を適用することが望ましい。また、ソフトウェア難読化技術の適用以外にCPUがセキュアな実行モードを提供するものもある。セキュアな実行モードで実行されるソフトウェアは他のソフトよりヒープメモリを傍受されることが困難になるため、CPUがその機能を提供する場合はデクリプタローダはセキュアな実行モードで実行されることが望ましい。
【0075】
平文クラスファイルのロードを行うためのAPI呼び出しdefineClass(クラス名、平文クラスファイル)はローダ105より処理される。図8を参照して、ローダ105が平文クラスファイルよりクラスオブジェクトを生成する制御フローを説明する。
【0076】
まずローダ105はクラスファイルのベリファイを行いクラスファイルが改竄されていないかなどをチェックする(S801)。
【0077】
ローダ105はベリファイを行った後、平文のクラスファイルをクラスオブジェクトに変換する(S802)。クラスオブジェクトはJava(登録商標)バーチャルマシーンに依存した構造体という形でヒープメモリ104に格納されるので、ヒープメモリ104上の情報が傍受されてもクラスオブジェクトをクラスファイルに復元することが困難である。
【0078】
ローダ105とデクリプタローダ602はクラスオブジェクトの生成に共通点が多く存在するがローダが生成するクラスオブジェクトは著作権保護の配慮を行う必要が特にないため、実装の高速化を計るためのチューニングが可能になる。
【0079】
または、デクリプタローダ602により暗号化されたクラスファイルを平文のクラスファイルへと変換した後の処理は、ローダ105による処理と同じ処理を行うため、デクリプタローダにおいて、平文のクラスファイルをクラスオブジェクトへと変換しヒープメモリへ格納する処理についてはローダ105を使用するような構成としても良い。
【0080】
これは例えば、ローダ105とデクリプタローダ602による処理の一部が共通のライブラリを共有することなどにより実現が可能となる。
【0081】
図9は再生装置で再生されるBD−ROMのマスタリングを行うマスタリング装置の大まかな機能構成を示すブロック図である。図9に示すように、マスタリング装置は、クラスファイル取得モジュール1101、暗号化判定部1102、鍵生成部1103、クラスファイルエンクリプタ1104、アーカイバ1105、マスター鍵取得モジュール1106、復号鍵エンクリプタ1107、BD−ROMバーナー1108から構成される。
【0082】
クラスファイル取得モジュール1101は処理対象のJava(登録商標)アプリケーションを構成するクラスファイルを順次取得する。
【0083】
暗号化判定部1102はクラスファイル取得モジュール1101より取得されたクラスファイルの暗号化の必要性を判断する。暗号化の必要性はクラスファイルの属性情報を用いたり、暗号化を行う前にユーザに問い合わせることで、暗号化の有無の判断を実現することが可能である。
【0084】
鍵生成部1103は復号鍵および暗号鍵を生成する。再生装置での復号化を高速化するためにAES(Advanced Encryption Standard)やDES(Data Encryption Standard)のような対称鍵暗号を利用することが望ましい。対称鍵暗号を利用する場合は暗号鍵と復号鍵が同じであるため、これらを秘匿としておく機構(図示せず)を設けるのが望ましい。
【0085】
クラスファイルエンクリプタ1104は暗号化判定部1102より暗号化する必要があると判断されたクラスファイルを、鍵生成部1103より生成された暗号鍵で暗号化する。
【0086】
アーカイバ1105はクラスファイルを一つのJarファイルに格納する。暗号化の必要がないクラスファイルを拡張子「class」で格納し、クラスファイルエンクリプタ1104より得られた暗号化クラスファイルを拡張子「secure」で格納する。
【0087】
マスター鍵取得モジュール1106は再生装置のマスター鍵を内部で保持し、復号鍵エンクリプタ1107に渡す。
【0088】
復号鍵エンクリプタ1107は復号鍵をマスター鍵で暗号化する。復号鍵はマスター鍵で暗号化されるため、このプロセスより作成されたBD−ROMはマスター鍵がなければ復号化は極めて困難となる。
【0089】
BD−ROMバーナー1108はJarファイルおよび暗号化された復号鍵を一つのBD−ROMに焼き付ける。
【0090】
マスタリング装置より作成された光ディスクは図1に示す構成を持つ。マスター鍵がなければJarファイルの中の暗号化クラスファイルを復号化するためにはクラスファイルエンクリプタ1104にて用いた暗号化アルゴリズムを破る必要が有り、リバースエンジニアリング技術での解析が不可能と見なせる。
【0091】
(実施の形態2)
本実施の形態は、マニフェストファイルに復号鍵の情報を格納するようにし、格納した復号鍵に関する情報に基づき記録媒体から復号鍵を取得し、デクリプタローダは取得した復号鍵を用いて暗号化されたクラスファイルを復号するように構成したことを特徴とする。
【0092】
実施の形態1にて、説明した事項と同一もしくは同一とみなせる事項については説明を簡潔にするため、本実施の形態では詳しい説明を省略する。
【0093】
本実施の形態にて用いる記録媒体の一例であるBD−ROMは図1にて説明をしたとおりである。
【0094】
BDDATAディレクトリの下には、次の2種類のファイルが記録されている。
【0095】
(1) XXX.JAR(「XXX」は可変、拡張子「JAR」は固定)
Jarファイル仕様に準拠したJava(登録商標)アーカイブファイルである(以下Jarファイルと称する)。Jarファイルは複数のファイルをディレクトリ構造の形で格納している。一つのJarファイルは一つ以上のクラスファイル、Jarファイルの属性を示すメタファイル、画像などのデータが格納されている。基本的に一つのJarファイルに一つのJava(登録商標)アプリケーションが格納されており、Java(登録商標)アプリケーションはJava(登録商標)バーチャルマシーン上で実行することができる。Java(登録商標)アプリケーションは一つ以上のクラスファイルより構成されるが、Java(登録商標)アプリケーションの著作権保護を行う必要がある場合、一つ以上のクラスファイルが暗号化される。暗号化されていないクラスファイルは拡張子「class」を利用する。また、暗号化されているクラスファイルは拡張子「secure」を利用する。暗号化されているクラスファイルは、復号鍵(後述)がなければリバースエンジニアリングを利用しJava(登録商標)アプリケーションを復元することが不可能である。
【0096】
(2) XXX.KEY(「XXX」は可変、拡張子「KEY」は固定)
クラスファイルの復号化に必要な一つ以上の復号鍵の暗号化形式である。複数の復号鍵が同じファイルに存在することが可能。ファイル全体がタイトル鍵で暗号化されており、再生装置で復号化できるようになっている。再生装置はCopy Protection for Recordable Media(CPRM)を利用し、再生装置が持っているデバイス鍵を元に光ディスクのタイトル鍵を取得することができる。
【0097】
図10は図2に示すマニフェストファイル405の内容の一例である。マニフェストファイル405に情報を記載する文法に関してはJarファイル仕様の中で公開されている。本実施の形態では通常のマニフェストファイルにキー「Key−ID」を追加することを特徴とする。キー「Key−ID」はファイルの復号化に利用する復号鍵のIDを示す。
【0098】
キー「Key−ID」を複数指定することにより、異なる暗号化されたクラスファイルを復号するために異なる復号鍵を用いて復号することが可能となり、複数の復号鍵が存在した場合一つ目の鍵を0番、二つ目の鍵を1番、と順番によりIDを設定する。マニフェストファイルでは復号化に必要な復号鍵のIDを指定する。マニフェストファイルのメインセッションにデフォルトの鍵IDを設定し、個別セッションに個別のファイルの鍵IDを設定する。たとえば、図10の例ではデフォルトの鍵は0番の鍵IDに対応する復号鍵を用い、「Protected.secure」ファイルの復号に用いる復号鍵は1番の鍵IDに対応する復号鍵を用いることを示すものである。
【0099】
再生制御のレイヤモデルは図3に示したとおりである。図3の第1層は、物理層であり、処理対象たるJarファイルの供給制御である。この第1層に示すように、処理対象たるJarファイルは、BD−ROMだけではなく、HD、メモリカード、ネットワークといったあらゆる記録媒体、通信媒体を供給源としている。これらHD、メモリカード、ネットワークといった供給源に対する制御(ディスクアクセス、カードアクセス、ネットワーク通信)が第1層の制御である。
【0100】
第2層は、ミドルウェアのレイアである。第1層で供給されたJarファイルを、どのように実行するのかを規定しているのがこの第2層である。たとえばオペレーティングシステムやJava(登録商標)バーチャルマシーンやCPUに依存したネイティブライブラリや実行ファイルなどがミドルウェア層に存在する。
【0101】
第3層は、Java(登録商標)のレイアである。Java(登録商標)バーチャルマシーン上で実行されるJava(登録商標)アプリケーションおよびクラスライブラリは第3層に存在する。Java(登録商標)アプリケーションはユーザ入力に基づき処理を行いオーディオやビデオの出力を行う。クラスライブラリはJava(登録商標)アプリケーションに対してJava(登録商標)のプロファイルで定義されているアプリケーションプログラミングインターフェース(API)を提供する。Java(登録商標)アプリケーションおよびクラスライブラリはJava(登録商標)の中間コードで書かれていて、第2層のJava(登録商標)バーチャルマシーンにより解釈実行される。Java(登録商標)アプリケーションは複数のクラスファイルにより構成されるが解釈実行されるためにクラスファイルがクラスオブジェクトに変換される必要がある。クラスオブジェクトはクラスファイルの内部表現とも言える。
【0102】
本実施の形態の再生装置の構成は図4に示すとおりである。図4に示すように、再生装置は、BD−ROMドライブ601、ヒープメモリ104、インタプリタ103、デクリプタローダ602、ローダ105、UO検知モジュール603、出力エンジン604から構成される。
【0103】
BD−ROMドライブ601は、BD−ROMのローディング/イジェクトを行い、BD−ROMに対するアクセスを実行する。BD−ROMドライブ601の内部でCPRMで定義しているデバイス鍵を持っており、BD−ROMドライブ601はBD−ROMのタイトル鍵を復元することができる。
【0104】
ヒープメモリ104は、Jarファイルを格納しJava(登録商標)層に必要なメモリである。ヒープメモリ104にクラスファイルの内部形式であるクラスオブジェクトも格納される。
【0105】
インタプリタ103はJava(登録商標)バーチャルマシーンの中核であり、クラスオブジェクトの中にあるバイトコードの解釈実行を行う。インタプリタ103はJava(登録商標)アプリケーションの実行速度に直接影響を与える重要な部分である。解釈実行の高速化を図るためにバイトコードをネイティブコードに変換するJITコンパイラを備えたインタプリタやインタプリタの一部をハードウェアで実装される製品も市販されている。また、インタプリタの実装は高速化を考えた実装となっているため著作権保護の観点では解析されやすい点を、設計上考慮する必要がある。
【0106】
ローディング判定部(図示せず)はクラスオブジェクトの生成(ロードともいう)の必要性を判定する。ローディング判定部はインタプリタ103上解釈実行される。クラスオブジェクトが必要な場合、インタプリタ103がローディング判定部の解釈実行を行う。解釈実行により、インタプリタがヒープメモリ104上のクラスファイルのロードをデクリプタローダまたはローダに要求する。また、ローディング判定部はクラスオブジェクトのキャッシュを持っている。ローディング判定部はJava(登録商標)層にあるClassLoaderクラスまたはその継承クラスとして実装される。ローディング判定部はJava(登録商標)層にあるClassLoaderクラスまたはその継承クラスとして実装される。尚ローディング判定部は高速化のため、一部ミドルウェア層で実装されることもある。
【0107】
デクリプタローダ602はBD−ROMドライブ601より平文形式のタイトル鍵を受け取る。BD−ROMドライブ601がデクリプタローダ602にタイトル鍵を渡すときに、鍵が傍受される可能性があるのでBD−ROMドライブ601がデクリプタローダ602を認証し、お互いの暗号化チャネル(SAC:Secure Authenticated Channel)を開き、開いた暗号化チャネルを通じて平文形式のタイトル鍵を受け取る。このとき、暗号化チャネルの実現には楕円曲線暗号化(ECC:Ellipic Curve Cryptosystem)とDiffie−Hellmanアルゴリズムとを利用することができる。
【0108】
デクリプタローダ602はさらにタイトル鍵で暗号化された復号鍵をBD−ROMを読み込んだBD−ROMドライブ601より受け取る。暗号化された復号鍵を先に受け取ったタイトル鍵にて復号した後、この復号鍵を用いて、暗号化クラスファイルを復号することができる。暗号化クラスファイルを平文のクラスファイルへ復号した後、ヒープメモリ104上にクラスオブジェクトを生成する。
【0109】
デクリプタローダ602は著作権保護を行う上で重要な部分である。デクリプタローダ602内にあるSACで利用される暗号鍵、タイトル鍵、復号鍵などが第3者より傍受されてしまうとシステム全体として著作権保護ができなくなる。また、内部に一時的に保持する平文クラスファイルが傍受されてしまう危険性があり、実装にセキュリティの配慮が必要である。
【0110】
ローダ105は平文クラスファイルを対応するクラスオブジェクトに変換し、ヒープメモリ104上へ配置する。ヒープメモリ104上に配置されたクラスオブジェクトはインタプリタ103より解釈実行が可能である。
【0111】
UO検知モジュール603は、リモコン(図示せず)や再生装置のフロントパネルなどの入力手段(図示せず)に対してなされたユーザ操作を検知して、検知した入力があったことをJava(登録商標)バーチャルマシーンへ通知する。
【0112】
出力エンジン604はJava(登録商標)バーチャルマシーンにより解釈実行された結果、要求されるオーディオやビデオの出力を行う。
【0113】
インタプリタ103による解釈実行を行う中、クラスオブジェクトを必要とした場合、インタプリタがローディング判定部の解釈実行を行う。要求はClassLoaderクラスが持つメソッドloadClass(クラス名)の呼び出しより開始される。
【0114】
ローディング判定部とJava(登録商標)バーチャルマシーンとのインターフェースは、図5に示すとおりである。但し、ローディング判定部はロードすべきクラスファイルが暗号化されていると判断した場合、API呼び出しdefineEncryptedClass(クラス名、暗号化クラスファイル、鍵ID)を行い、引数としてクラス名、暗号化クラスファイル、鍵IDを指定して暗号化クラスファイルのロードをミドルウェア層のデクリプタローダ602に依頼する。
【0115】
また、ローディング判定部はロードすべきクラスファイルが暗号化されていないと判断した場合、API呼び出しdefineClass(クラス名、平文クラスファイル)を行い、引数としてクラス名、クラスファイルを指定し、クラスファイルのロードをミドルウェア層のローダ105に依頼する。ローディング判定部は解釈実行されるため、これらの依頼はインタプリタ103を通して行われる。
【0116】
Java(登録商標)層で実行されるローディング判定部がクラスオブジェクトを返す制御フローは基本的には図6に示すものに同じである。
【0117】
但し、S605による判定の結果、ローディング判定部はクラスファイルが暗号化されていると判断した場合、暗号化クラスファイルのロードを依頼する(S606)場合、暗号化クラスファイルのロードはAPIであるdefineEncryptedClassを呼び出すことにより行われるが、この場合引数としてクラス名、暗号化クラスファイル、鍵IDを指定する必要がある点が実施の形態1に説明したものとは異なる(つまり、defineEncryptedClass(クラス名、暗号化クラスファイル、鍵ID)として、APIであるdefineEncryptedClassを呼び出す)。より行われる。
【0118】
ここで、クラス名は再生すべきクラスオブジェクトの名前である。暗号化クラスファイルはJarファイルより取得されたファイルである。鍵IDは図10に示すメタファイルより得られたクラス名に対応する鍵IDである。暗号化クラスファイルのロードによりヒープメモリ104上の一つのクラスオブジェクトを取得する。
【0119】
暗号化クラスファイルのロードを行うためのAPI呼び出しdefineEncryptedClass(クラス名、暗号化クラスファイル、鍵ID)はデクリプタローダ602より処理される。デクリプタローダ602が暗号化クラスファイルよりヒープメモリ104上にクラスオブジェクトを生成する制御フローは基本的には図7に示すものに同じである。
【0120】
但し、本実施の形態においては、複数の復号鍵をマニフェストファイルにて指定できるようにしたので、S701において、デクリプタローダ602は引数にて指定される鍵IDに相当する復号鍵を用いて受け取った暗号化されたクラスファイルを平文のクラスファイルに復号する。
【0121】
たとえば鍵IDが0の場合、一つ目の復号鍵を利用する。鍵IDが1の場合、二つ目の復号鍵を利用する。
【0122】
S702、S703については実施の形態1の説明と重複するためここでは、詳しい説明を省略する。
【0123】
デクリプタローダ602は著作権保護対象のクラスファイルを一時的に内部で保持している間はクラスファイルの傍受を避ける。クラスファイルの傍受を避けるために第2層や第1層の物理層に存在しなければならない。デクリプタローダは第3層のJava(登録商標)層に平文クラスファイルや復号鍵などを渡してはならない。第2層のミドルウェア層では処理中にメモリのダンプが行われクラスファイルが傍受されてしまう危険性がある。傍受されないために、インタプリタ103等のほかのモジュールとのインタラクションを避け、なんらかのソフトウェア難読化技術を適用することが望ましい。また、ソフトウェア難読化技術の適応以外にCPUがセキュアな実行モードを提供するものもある。セキュアな実行モードで実行されるソフトウェアは他のソフトよりメモリを傍受されることが困難になるため、CPUがその機能を提供する場合はデクリプタローダはセキュアな実行モードで実行されることが望ましい。
【0124】
平文クラスファイルのロードを行うためのAPI呼び出しdefineClass(クラス名、平文クラスファイル)はローダ105より処理される。その具体的な説明は実施の形態1にて説明したので、ここではその詳細な説明を省略する。
【0125】
ローダ105とデクリプタローダ602はクラスオブジェクトの生成に共通点が多く存在するがローダが生成するクラスオブジェクトは著作権保護の配慮を行う必要が特にないため、実装の高速化を計るためのチューニングが可能になる。ただし開発コストを考えた場合、実装上ローダ105とデクリプタローダ602が共通のライブラリを共有することが考えられる。
【0126】
図11は再生装置で再生されるBD−ROMのマスタリングを行うマスタリング装置の構成の一例を示す図である。
【0127】
図11に示すように、マスタリング装置は、クラスファイル取得モジュール1101、暗号化判定部1102、鍵生成部1103、クラスファイルエンクリプタ1104、アーカイバ1105、CPRMモジュール1301、復号鍵エンクリプタ1107、BD−ROMバーナー1108から構成される。
【0128】
クラスファイル取得モジュール1101は処理対象のJava(登録商標)アプリケーションを構成するクラスファイルを順次取得する。
【0129】
暗号化判定部1102はクラスファイル取得モジュール1101より取得されたクラスファイルの暗号化の必要性を判断する。暗号化の必要性はクラスファイルの属性情報を用いたり、暗号化を行う前にユーザに問い合わせることで実現することが可能である。
【0130】
鍵生成部1103は復号鍵および暗号鍵を生成する。対称暗号化を利用するため暗号鍵と復号鍵が同じである。
【0131】
クラスファイルエンクリプタ1104は暗号化判定部1102より暗号化する必要があると判断されたクラスファイルを、鍵生成部1103より生成された暗号鍵で暗号化する。暗号鍵には鍵IDがついており、クラスファイルエンクリプタ1104は利用した鍵のIDを記憶する。
【0132】
アーカイバ1105はクラスファイルを一つのJarファイルに格納する。暗号化の必要がないクラスファイルを拡張子「class」で格納し、クラスファイルエンクリプタ1104より得られた暗号化クラスファイルを拡張子「secure」で格納する。
【0133】
また、暗号に用いた暗号鍵の鍵IDの情報をクラスファイルエンクリプタ1104より受け取り、その情報をメタファイルに格納する。メタファイルはJarファイルのMETA−INFディレクトリにあるMANIFEST.MFファイルである。
【0134】
CPRMモジュール1301はCPRMに必要な鍵生成および情報保持を行う。CPRMモジュール1301はタイトル鍵を復号鍵エンクリプタ1107に渡す。また、CPRMの仕様で定められている情報をBD−ROMバーナー1108に渡す。CPRMの仕様は、例えば「http://www.4centity.com/tech/cprm/」より入手することができる。
【0135】
復号鍵エンクリプタ1107は必要な復号鍵をタイトル鍵で暗号化する。鍵ID=0の復号鍵より順番に連結した上でタイトル鍵で暗号化を行い復号鍵ファイルを生成する。
【0136】
BD−ROMバーナー1108はJarファイルと復号鍵ファイルとCPRM用情報を一つのBD−ROMに焼き付ける。
【0137】
マスタリング装置より作成された光ディスクは図3に示す構成を持つ。Jarファイルの中の暗号化クラスファイルは、リバースエンジニアリングを利用しての解析が不可能である。CPRMが定めるデバイス鍵がなければタイトル鍵を取得することができないため、Jarファイルの中の暗号化クラスファイルを復号化するためには復号鍵を用いることなく暗号化されたクラスファイルを復号する必要が有り、きわめて困難である。
【産業上の利用可能性】
【0138】
本発明は光ディスクやSDカードといった記録媒体またはインターネットといった通信媒体を介して受け取ったJava(登録商標)アプリケーションの著作権保護に利用できる。
【図面の簡単な説明】
【0139】
【図1】本発明の実施の形態におけるBD−ROMのデータ階層の一例を示す図
【図2】本実施の形態におけるJarファイルのファイル構造の一例を示す図
【図3】本実施の形態におけるソフトウェアのレイヤの一例を示す図
【図4】本発明の実施の形態における再生装置の構成の一例を示す図
【図5】本実施の形態におけるローディング判定部とデクリプタローダとローダとの間のインターフェースの一例を示す図
【図6】本実施の形態におけるローディング判定部の処理の一例を示す図
【図7】本実施の形態におけるデクリプタローダがクラスオブジェクトを生成する処理の一例を示す図
【図8】本実施の形態におけるローダがクラスオブジェクトを生成する処理の一例を示す図
【図9】本実施の形態におけるマスタリング装置の構成の一例を示す図
【図10】本実施の形態におけるメタファイルの中身の一例を示す図
【図11】本発明の二つ目の実施の形態におけるマスタリング装置の構成の一例を示す図
【図12】従来のJava(登録商標)アプリケーションの著作権保護を行う再生装置の構成の一例を示す図
【図13】暗号化クラスファイルからクラスオブジェクトに変更される処理の一例を示す図
【符号の説明】
【0140】
101 仮想マシン
102 Java(登録商標)アプリケーション
103 インタプリタ
104 ヒープメモリ
105 ローダ
107 復号クラスローダ
108 保護対象クラスファイル
109 復号鍵
401 ルートディレクトリ
402 META−INFディレクトリ
403 暗号化されていないクラスファイル
404 暗号化されたクラスファイル
405 マニフェストファイル
601 BD−ROMドライブ
602 デクリプタローダ
603 UO検知モジュール
604 出力エンジン
1101 クラスファイル取得モジュール
1102 暗号化判定部
1103 鍵生成部
1104 クラスファイルエンクリプタ
1105 アーカイバ
1106 マスター鍵取得モジュール
1107 復号鍵エンクリプタ
1108 BD−ROMバーナー
1301 CPRMモジュール

【特許請求の範囲】
【請求項1】
オブジェクト指向型のプログラムで記述されたアプリケーションの実行を行うアプリケーション実行装置であって、
入力される前記アプリケーションに含まれる暗号化クラスファイルを復号し平文のクラスファイルとした後、クラスオブジェクトに変換してヒープメモリへロードするデクリプタローダ、入力される前記アプリケーション内の平文クラスファイルをクラスオブジェクトに変換して前記ヒープメモリへロードするローダおよび前記ヒープメモリへロードされたクラスオブジェクトを解釈実行するインタプリタを有する仮想マシンと、
前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルまたは平文クラスファイルかを判定するローディング判定部とを備え、
前記ローディング判定部において、前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合には前記クラスファイルを前記デクリプタローダへ送り、
前記ローディング判定部において前記仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合には前記クラスファイルを前記ローダへ送るように構成したことを特徴とするアプリケーション実行装置。
【請求項2】
前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵をマスター鍵にて暗号化して記録し、かつ
前記デクリプタローダは前記マスター鍵を予め保持しており、前記暗号化されたクラスファイルが入力されると暗号化されたクラスファイルに対応する暗号化された復号鍵を前記記録媒体から取得し、
前記暗号化された復号鍵を前記予め保持するマスター鍵を用いて復号し、前記復号された復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする請求項1記載のアプリケーション実行装置。
【請求項3】
前記デクリプタローダは前記記録媒体から前記暗号化された復号鍵を取得し、暗号化されたクラスファイルが入力される前に前記マスター鍵を用いて前記暗号化された復号鍵を復号し、キャッシュするようにしたことを特徴とする請求項1記載のアプリケーション実行装置。
【請求項4】
前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、
前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタローダへ送り、
前記デクリプタローダは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、
前記デクリプタローダが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする請求項1記載のアプリケーション実行装置。
【請求項5】
前記デクリプタローダは前記記録媒体から取得した復号鍵を保持するようにしたことを特徴とする請求項4記載のアプリケーション実行装置。
【請求項6】
オブジェクト指向型のプログラムで記述されたアプリケーションの実行を行うアプリケーション実行装置であって、
入力される前記アプリケーションに含まれる暗号化されたクラスファイルを復号し、平文クラスファイルをローダへ送るためのデクリプタおよび入力される前記アプリケーション内の平文クラスファイルまたは前記デクリプタにより復号された平文クラスファイルをクラスオブジェクトに変換しヒープメモリへロードするローダおよび前記ヒープメモリへロードされたクラスオブジェクトを解釈実行するインタプリタを有する仮想マシンと、
前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルか平文クラスファイルかを判定するローディング判定部とを備え、
前記ローディング判定部により前記インタプリタにて実行すべきクラスファイルが暗号化されたクラスファイルであると判定された場合、前記暗号化されたクラスファイルを前記デクリプタへ送り、
前記ローディング判定部により前記仮想マシンへ送られるクラスファイルが平文クラスファイルであると判定された場合には前記クラスファイルを前記ローダへ送るように構成したことを特徴とするアプリケーション実行装置。
【請求項7】
前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵をマスター鍵にて暗号化して記録し、
前記デクリプタは前記マスター鍵を予め保持しており、前記暗号化されたクラスファイルが入力されると、前記暗号化されたクラスファイルを復号するための復号鍵を前記記録媒体から取得し、
前記取得した暗号化された復号鍵を前記予め保持するマスター鍵を用いて復号し、前記復号された復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする請求項6記載のアプリケーション実行装置。
【請求項8】
前記デクリプタは前記記録媒体から前記暗号化された復号鍵を取得し、前記暗号化されたクラスファイルが入力される前に前記復号鍵をキャッシュするようにしたことを特徴とする請求項7記載のアプリケーション実行装置。
【請求項9】
前記アプリケーションは記録媒体内に記録され、かつ前記記録媒体は、前記アプリケーションに含まれる暗号化されたクラスファイルを復号するための復号鍵であってタイトル鍵で暗号化された復号鍵および前記復号鍵を取り出すための情報を記述したメタファイルを記録し、
前記ローディング判定部は前記アプリケーション実行時に前記アプリケーションに含まれる前記暗号化されたクラスファイルに対応する復号鍵を取り出すための情報を記述したメタファイルに基づいて対応する復号鍵を取り出すための情報を前記デクリプタへ送り、
前記デクリプタは前記復号鍵を取り出すための情報に基づき前記暗号化された復号鍵を前記記録媒体から取得し、
前記デクリプタが保持するタイトル鍵を用いて復号した復号鍵を用いて前記暗号化されたクラスファイルを復号することを特徴とする請求項6記載のアプリケーション実行装置。
【請求項10】
前記デクリプタは前記記録媒体から取得した復号鍵を保持するようにしたことを特徴とする請求項9記載のアプリケーション実行装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate


【公開番号】特開2009−258772(P2009−258772A)
【公開日】平成21年11月5日(2009.11.5)
【国際特許分類】
【出願番号】特願2006−216861(P2006−216861)
【出願日】平成18年8月9日(2006.8.9)
【出願人】(000005821)パナソニック株式会社 (73,050)
【Fターム(参考)】