説明

アプリケーション実行方法およびアプリケーション実行装置

【課題】アプリケーションを配信側でアプリケーションの難読化を行っているため、配信先の端末の特性に合わせてアプリケーションの保護をすることができない。
【解決手段】アプリケーションの所定の単位と関連付けされたセキュリティメタファイルの情報に応じて、パーソナルコンピュータのような、ハードウェア等によるセキュリティサポートがなく、デバッガ等のアプリケーションを盗聴、改ざんするためのツールが豊富に提供されている環境下では、実行時の保護強度を高くして実行し、家電機器のような、ハードウェア等によりセキュリティサポートを持つ環境下では、実行時の保護強度を低くして実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、仮想マシン方式(特にJava(登録商標)仮想マシン)によりプログラムを実行する機能を持つ端末装置において、インターネットやDVD等の端末外部のメディアからダウンロードしたプログラムを実行する時に、プログラムの盗聴、改ざんを防止することに関する。
【背景技術】
【0002】
従来のデジタルTVや携帯電話などの電子機器では、オブジェクト指向型の言語、例えばJava(登録商標)言語で記述されたプログラム(Java(登録商標)プログラムと称す)をダウンロードし、実行する機能を搭載するものが増加している。例えば携帯電話では、NTT DoCoMoがi−アプリと呼ばれるサービスを提供している。このサービスは、携帯電話端末がインターネット上にあるアプリケーション配信サーバからJava(登録商標)プログラムをダウンロードして、端末上で実行する。また、欧州では、DVB−MHP(Digital Video Broadcasting−Multimedia Home Platform)と呼ばれる仕様が策定され、既に仕様に準拠した運用が開始されている。DVB−MHP規格に基づくデジタル放送では、放送波に多重化されたJava(登録商標)プログラムをデジタルTVが受信し、それを実行する。
【0003】
以上のように、Java(登録商標)プログラムは携帯電話や、デジタルTVなどさまざまな電子機器に配信されている。また、前記Java(登録商標)プログラムはプログラム開発者の著作権保護が求められており、これを悪意のある攻撃者が盗聴、改ざんすることを防がなくてはならない。
【0004】
これらを実現するために、従来は以下のような技術が用いられていた。
【0005】
(1)ソースコードを難読化し、実行時の解析を困難にする。
【0006】
従来のプログラムが盗聴、改ざんされることを防止する一例は、特許文献1に記載されている。図23は特許文献1に記載された従来のプログラムの盗聴、改ざんされることを防止する方法を説明するための図である。
【0007】
入力部201に難読化したいプログラムを入力し、中央処理部202で、難読化する対象を決定する処理や、変数や、ダミー関数の導入処理や、難読化処理を制御する。出力部203は、難読化されたソースコードや実行形式プログラムを出力する。難読化領域決定部204は、ソースコードを解析した後、ソースコードにおける難読化する部分を決定する。難読化処理部205は難読化に利用される関数ポインタ変数や、関数ポインタの配列変数を新たに導入して、それらを利用してプログラムのソースコードを難読化する。これにより、実行時の盗聴、改ざんを困難にしている。
【特許文献1】特開2003−337629号公報
【発明の開示】
【発明が解決しようとする課題】
【0008】
しかしながら、従来の技術においては、アプリケーションを配信側でアプリケーションの難読化を行っているため、配信先の端末の特性に合わせてアプリケーションの保護方法を変更することができない。
【0009】
例えば、パーソナルコンピュータのような、ハードウェア等によるセキュリティサポートがなく、デバッガなどアプリケーションの盗聴、改ざんするためのツールが豊富に開発されている環境を想定した場合には、プログラムの解析が不可能な程度の難読化が必要となる。プログラムの解析が不可能な程度の難読化を行えば、これに応じて処理量が大幅に増え、実行時のオーバヘッドが大きくなる。このように難読化された、アプリケーションをCPU能力が低く、ハードウェアのセキュリティサポートを有する家電機器等の電子機器に配信した場合には、実行が遅くなり実現性という観点からは適さない。
【0010】
一方、ハードウェア等によるセキュリティサポートを持つような家電機器を想定した場合には、簡単な難読化でよい。しかし、簡単な難読化を行ったアプリケーションをパーソナルコンピュータに配信し、実行した場合には、盗聴、改ざんが容易に行えてしまうという課題がある。
【0011】
つまり、配信側からすれば、受信側での電子機器はどんなものであれ、プログラムを一様に難読化したものを送っており、難読化の程度が高いプログラムを送るように構成すれば、受信側の電子機器が例えばハードウェアのセキュリティサポートを有する家電機器では実行処理が遅くなり、難読化の程度が低いプログラムを送るように構成すれば、受信側の電子機器が例えばハードウェアのセキュリティサポートのないパーソナルコンピュータの場合、盗聴改ざんが容易に行われてしまうといった課題がある。
【0012】
本発明は、上述の課題を解決するもので、アプリケーションの所定の処理単位と関連付けされた(セキュリティ)メタファイルの情報に応じて、パーソナルコンピュータのような、ハードウェア等によるセキュリティサポートがなく、デバッガ等のアプリケーションを盗聴、改ざんするためのツールが豊富に提供されている環境下では、実行時の保護強度を高くして実行し、家電機器のような、ハードウェア等によるセキュリティサポートを持つ環境下では、実行時の保護強度を低くして実行できるようなプログラムを実行するプログラム実行方法およびプログラム実行装置を得ることを目的とする。
【課題を解決するための手段】
【0013】
本発明のアプリケーション実行方法は、アプリケーション実行装置の外部からアプリケーションを取り込むステップと、前記取り込んだアプリケーションを構成する所定の単位と前記所定の単位に対応する保護レベルとを関連付けたメタ情報を有するセキュリティメタファイルを保存するステップと、前記所定の単位を実行するとき、前記所定の単位に対応する保護レベルに応じて、前記所定の単位を保護しつつ実行するステップを有することを特徴とする。
【0014】
また、アプリケーションはオブジェクト指向型の言語で記述されており、前記アプリケーションの記述を解析することにより前記セキュリティメタファイルを生成する生成ステップを有し、前記保存ステップは、前記生成したセキュリティメタファイルを保存することを特徴とする。
【0015】
また、前記生成ステップは、オブジェクト指向型の言語で記述されたアプリケーションが利用できる鍵管理、証明書管理または暗号化の機能を提供するメソッド呼出しをしているコードが前記所定の単位に対応し、前記所定の単位を保護対象として、前記セキュリティメタファイルを生成することを特徴とする。
【0016】
また、前記セキュリティメタファイルのメタ情報に記述された前記所定の単位に対応する保護レベルと前記所定の単位の実行時の保護方法が記述された保護アルゴリズムが対応付けされている保護レベル対応表が予め保存されており、前記実行ステップは前記保護レベル対応表を参照し、前記所定の単位の保護レベルに応じた保護アルゴリズムを実行することにより、前記所定の単位を保護しつつ実行することを特徴とする。
【0017】
また、前記保護レベル対応表に、前記セキュリティメタファイルに指定された所定の単位に対応する保護レベルが存在しない場合には、アプリケーションの実行を停止することを特徴とする。
【0018】
また、前記所定の単位がアプリケーション単位であることを特徴とする。
【0019】
また、前記所定の単位がアプリケーションを分割した一定の単位であることを特徴とする。
【0020】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのメソッド単位であることを特徴とする。
【0021】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのクラスファイル単位であることを特徴とする。
【0022】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションを圧縮したJarファイル単位であることを特徴とする。
【0023】
本発明のアプリケーション実行装置は、外部からアプリケーションを取り込む取得手段と、前記取り込んだアプリケーションを構成する所定の単位と前記所定の単位に対応する保護レベルとを関連付けたメタ情報を有するセキュリティメタファイルを保存する保存手段と、前記所定の単位を実行するとき、前記所定の単位に対応する保護レベルに応じて、前記所定の単位を保護しつつ実行する実行手段を有することを特徴とする。
【0024】
また、アプリケーションはオブジェクト指向型の言語で記述されており、前記アプリケーションの記述を解析することにより前記セキュリティメタファイルを生成する生成手段を有し、前記保存手段は、前記生成したセキュリティメタファイルを保存することを特徴とする。
【0025】
また、前記生成手段は、オブジェクト指向型の言語で記述されたアプリケーションが利用できる鍵管理、証明書管理または暗号化の機能を提供するメソッド呼出しをしているコードが前記所定の単位に対応し、前記所定の単位を保護対象として、前記セキュリティメタファイルを生成することを特徴とする。
【0026】
また、前記セキュリティメタファイルのメタ情報に記述された前記所定の単位に対応する保護レベルと前記所定の単位の実行時の保護方法が記述された保護アルゴリズムが対応付けされている保護レベル対応表が予め保存されており、前記実行ステップは前記保護レベル対応表を参照し、前記所定の単位の保護レベルに応じた保護アルゴリズムを実行することにより、前記所定の単位を保護しつつ実行することを特徴とする。
【0027】
また、前記保護レベル対応表に、前記セキュリティメタファイルに指定された所定の単位に対応する保護レベルが存在しない場合には、アプリケーションの実行を停止することを特徴とする。
【0028】
また、前記所定の単位がアプリケーション単位であることを特徴とする。
【0029】
また、前記所定の単位がアプリケーションを分割した一定の単位であることを特徴とする。
【0030】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのメソッド単位であることを特徴とする。
【0031】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのクラスファイル単位であることを特徴とする。
【0032】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションを圧縮したJarファイル単位であることを特徴とする。
【発明の効果】
【0033】
上記課題を解決するための本発明は、アプリケーション実行装置の外部からアプリケーションを取り込むステップと、前記取り込んだアプリケーションを構成する所定の単位と前記所定の単位に対応する保護レベルとを関連付けたメタ情報を有するセキュリティメタファイルを保存するステップ、前記所定の単位を実行するとき、前記所定の単位に対応する保護レベルに応じて、前記所定の単位を保護しつつ実行するステップを有するので、アプリケーション実行時の保護を所定の単位に応じて変更することができるので、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【0034】
また、アプリケーションはオブジェクト指向型の言語で記述されており、前記アプリケーションの記述を解析することにより前記セキュリティメタファイルを生成する生成ステップを有し、前記保存ステップは、前記生成したセキュリティメタファイルを保存するので、アプリケーションにセキュリティメタファイルが含まれていなくてもセキュリティメタファイルを自動的に作成し保存できるようになるので、アプリケーションを作成するプログラマの負荷が軽減されるようになる。
【0035】
また、前記セキュリティメタファイルを生成するステップは、オブジェクト指向型の言語で記述されたアプリケーションが利用できる鍵管理、証明書管理または暗号化の機能を提供するメソッド呼出しをしているコードが前記所定の単位に対応し、前記所定の単位を保護対象として、前記セキュリティメタファイルを生成するので、秘匿性の高くすべき単位の処理を保護しつつ実行時のオーバーヘッドを抑えることが可能となる。
【0036】
また、前記セキュリティメタファイルのメタ情報に記述された前記所定の単位に対応する保護レベルと前記所定の単位の実行時の保護方法が記述された保護アルゴリズムが対応付けされている保護レベル対応表が予め保存されており、前記実行ステップは前記保護レベル対応表を参照し、前記所定の単位の保護レベルに応じた保護アルゴリズムを実行することにより、前記所定の単位を保護しつつ実行するので、取り込まれるアプリケーションが一様であっても、実行する装置の環境に応じた保護アルゴリズムを保護レベル対応表に記述していれば、各装置の環境に応じた保護を行いつつ所定の単位の処理を実行することが可能となるばかりか、アプリケーションを配信する側は端末の特性に応じて難読化を行ったプログラムを複数配信する必要が無くなりアプリケーションを作成するプログラマの負荷を軽減する。
【0037】
また、前記保護レベル対応表に、前記セキュリティメタファイルに指定された所定の単位に対応する保護レベルが存在しない場合には、アプリケーションの実行を停止するので、アプリケーション実行時において、保護レベルが存在しないことに起因するアプリケーション提供者側が想定していない動作を防止することが可能となる。
【0038】
また、前記所定の単位がアプリケーション単位であるので、前記アプリケーションを秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぐことが可能となる。
【0039】
また、前記所定の単位がアプリケーションを分割した一定の単位であるので、前記一定の単位を秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【0040】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのメソッド単位であるので、前記メソッドを秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【0041】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのクラスファイル単位であるので、前記メソッドを秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【0042】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションを圧縮したJarファイル単位であるので、アプリケーション解凍時/実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【0043】
本発明のアプリケーション実行装置は、外部からアプリケーションを取り込む取得手段と、前記取り込んだアプリケーションを構成する所定の単位と前記所定の単位に対応する保護レベルとを関連付けたメタ情報を有するセキュリティメタファイルを保存する保存手段と、前記所定の単位を実行するとき、前記所定の単位に対応する保護レベルに応じて、前記所定の単位を保護しつつ実行する実行手段を有するので、アプリケーション実行時の保護を所定の単位に応じて変更することができるので、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【0044】
また、アプリケーションはオブジェクト指向型の言語で記述されており、前記アプリケーションの記述を解析することにより前記セキュリティメタファイルを生成する生成手段を有し、前記保存手段は、前記生成したセキュリティメタファイルを保存するので、アプリケーションにセキュリティメタファイルが含まれていなくてもセキュリティメタファイルを自動的に作成し保存できるようになるので、アプリケーションを作成するプログラマの負荷が軽減されるようになる。
【0045】
また、前記生成手段は、オブジェクト指向型の言語で記述されたアプリケーションが利用できる鍵管理、証明書管理または暗号化の機能を提供するメソッド呼出しをしているコードが前記所定の単位に対応し、前記所定の単位を保護対象として、前記セキュリティメタファイルを生成するので、秘匿性の高くすべき単位の処理を保護しつつ実行時のオーバーヘッドを抑えることが可能となる。
【0046】
また、前記セキュリティメタファイルのメタ情報に記述された前記所定の単位に対応する保護レベルと前記所定の単位の実行時の保護方法が記述された保護アルゴリズムが対応付けされている保護レベル対応表が予め保存されており、前記実行ステップは前記保護レベル対応表を参照し、前記所定の単位の保護レベルに応じた保護アルゴリズムを実行することにより、前記所定の単位を保護しつつ実行するので、取り込まれるアプリケーションが一様であっても、実行する装置の環境に応じた保護アルゴリズムを保護レベル対応表に記述していれば、各装置の環境に応じた保護を行いつつ所定の単位の処理を実行することが可能となるばかりか、アプリケーションを配信する側は端末の特性に応じて難読化を行ったプログラムを複数配信する必要が無くなりアプリケーションを作成するプログラマの負荷を軽減する。
【0047】
また、前記保護レベル対応表に、前記セキュリティメタファイルに指定された所定の単位に対応する保護レベルが存在しない場合には、アプリケーションの実行を停止するので、アプリケーション実行時において、保護レベルが存在しないことに起因するアプリケーション提供者側が想定していない動作を防止することが可能となる。
【0048】
また、前記所定の単位がアプリケーション単位であるので、前記アプリケーションを秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぐことが可能となる。
【0049】
また、前記所定の単位がアプリケーションを分割した一定の単位であるので、前記一定の単位を秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【0050】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのメソッド単位であるので、前記メソッドを秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【0051】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのクラスファイル単位であるので、前記メソッドを秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【0052】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションを圧縮したJarファイル単位であるので、アプリケーション解凍時/実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【発明を実施するための最良の形態】
【0053】
以下本発明の実施の形態について、図面を参照しながら説明する。
【0054】
(実施の形態1)
本発明に係わるプログラム実行装置をJava(登録商標)言語で記述されたJava(登録商標)アプリケーションプログラムを実行するJava(登録商標)アプリケーション実行装置を一例として実施の形態で、図面を参照しながら説明する。
【0055】
図1はJava(登録商標)アプリケーション実行装置の構成を示すブロック図である。100はダウンロード可能なオブジェクト指向言語で記載されたJava(登録商標)言語などで記述されたプログラムであり、例えばプログラム100はプログラム実行装置110がダウンロード可能なJava(登録商標)プログラム(例えばJava(登録商標)アプリケーションプログラム)のデータである。ダウンロードされるプログラムのデータは具体的には、Java(登録商標)アプリケーションプログラムを圧縮した1つ以上のJarファイルを有するものである。
【0056】
JarファイルはJava(登録商標)アプリケーションを構成する複数のファイルをひとつにまとめた、電子機器のプラットフォームに依存しないファイルの形式である。Jarファイルについては書籍「The Java(登録商標) Tutorial Continued:The Rest of the JDK(ISBN 0201485583)」等に解説されているため、ここでの詳細な説明を省略する。
【0057】
ダウンロード可能なプログラム100に対応するデータを構成するJarファイルの構成の一例を、図2を参照しながら説明する。300はプログラム100のデータを圧縮したJarファイルである。プログラム100が複数のJarファイルを有する場合、各Jarファイルのデータ構成は図2に示すものとなる。Jarファイル300の中身は例えばルートディレクトリ311、メタディレクトリ312、メタファイル313、セキュリティメタファイル314、クラスファイルA315、サブディレクトリ316、クラスファイル317から構成される。
【0058】
図2はJarファイルを構成する一例であり、図2に記載されていないサブディレクトリ、クラスファイル、画像ファイルおよび動画ファイル等を含んでいてもよい。
【0059】
ルートディレクトリ311は、Jarファイル300の最上位のディレクトリである。メタディレクトリ312は、そのディレクトリにメタファイル313、およびセキュリティメタファイル314を格納するディレクトリである。
【0060】
メタファイル313はJarファイル300に関するメタ情報を格納するファイルである。具体的にはJarファイル300を作成した、ツールのバージョンなどが記載されている。メタファイル313は前記書籍「The Java(登録商標) Tutorial Continued:The Rest of the JDK(ISBN 0201485583)」に詳細が記載されているので、ここでの詳細な説明は省略する。
【0061】
セキュリティメタファイル314は例えば実行時保護レベルを格納するファイルである。実行時保護レベルは、Java(登録商標)アプリケーションを実行するときの保護方法を変更するためのパラメータである。アプリケーション実行装置には、Java(登録商標)アプリケーションを実行するとき、これを保護するアルゴリズムを有するプログラムが同時に実行されることにより実行時におけるJava(登録商標)アプリケーションの盗聴・改竄を防止ことができる。この保護するプログラムは実行時保護レベルに関連付けられたものである。実行時保護レベルが高いほど、実行時に盗聴、改ざんがより困難なアルゴリズムでJava(登録商標)アプリケーションを保護しながら実行する。なお、実行時保護レベルが低ければ、実行時に盗聴、改ざんに対する保護が簡易で、実行オーバヘッドの少ないアルゴリズムでJava(登録商標)アプリケーションを保護しながら実行してもよい。
【0062】
セキュリティメタファイル314はJava(登録商標)アプリケーション開発者が、Java(登録商標)アプリケーション作成時に付加する。
【0063】
なお、セキュリティメタファイル314に電子署名を付加していてもよい。電子署名はデータの正当性を保証するものである。電子署名の詳細は書籍「電子署名法(ISBN 4897975115)」等、多くの書籍に解析されている。ここでの詳細な説明は省略する。
【0064】
Jarファイル300の説明をする。クラスファイルA315とクラスファイルB317はJava(登録商標)言語等で記述されたプログラムをJava(登録商標)仮想マシンが解析可能な形式に変換したバイナリデータである。
【0065】
セキュリティメタファイル314を、図3を参照しながら説明する。セキュリティメタファイル314は、Jarファイル300を構成するクラスファイルと対応関係を持つ、1つ以上のクラス別メタ情報3141を記載している。クラス別メタ情報3141はクラス名31411と実行時保護レベル31412から構成される。
【0066】
クラス名31411はルートディレクトリ311から対象となるクラスファイルへの相対パスが記載される。実行時保護レベル31412は対象となるクラスファイル実行時に保護するレベルを記述している。
【0067】
なお、本実施の形態においては、セキュリティメタファイル314をJarファイル300内のメタディレクトリ312に格納していたが、この限りではない。例えば、セキュリティメタファイル314をJarファイル300とは別に配信してよい。また、セキュリティメタファイル314をJarファイル300内の各ディレクトリに分散して格納してもよい。また、メタファイル313内に追加の形式をとってもよい。以上が、セキュリティメタファイル314の説明である。
【0068】
以上がダウンロード可能なプログラム100を構成する、Jarファイル300の説明である。
【0069】
図1に戻って、Java(登録商標)アプリケーション実行装置110は端末装置であり、ソフトウェア実行部120を備えている。Java(登録商標)アプリケーション実行装置は、具体的にはパーソナルコンピュータ、デジタルテレビ、セットトップボックス、Blu―Ray Disc(BD)レコーダ、カーナビゲーション端末、携帯電話、PDAなどの、Java(登録商標)仮想マシンを搭載する電子機器全般が該当する。
【0070】
ソフトウェア実行部120は、アプリ取得プログラム121はJava(登録商標)仮想マシン122、OS123、CPU124、RAM125、ROM126および安全な処理実行部127から構成される。
【0071】
アプリ取得プログラム121は、それが記載する内容に従って、端末内のハードウェア(HW)を制御しつつ、端末外に存在するアプリケーションを取得するプログラムであり、例えばJava(登録商標)言語で記述されたプログラムである。アプリ取得プログラム121は例えば、インターネット上にあるサーバから、TLS(Transport Layer Security)、HTTP(Hypertext Transfer Protocol)等のプロトコルに従い、端末外に存在するJava(登録商標)アプリケーションをダウンロードするJava(登録商標)プログラムが相当する。
【0072】
なお、TLSは暗号化により通信時のデータの盗聴、改ざんを防ぐデータ転送方式である。TLSの詳細はRFC2246に記載されており、ここでは詳細な説明を省略する。HTTPはインターネット上のデータ通信で一般的に用いられているデータ転送方式である。HTTPの詳細はRFC2616に記載されており、ここでは詳細な説明を省略する。
【0073】
また、アプリ取得プログラム121は、デジタル放送のデータ放送として、MPEG2トランスポートストリーム内に埋め込まれたJava(登録商標)アプリケーションを端末内に読み出すJava(登録商標)プログラムであってもよい。MPEG2トランスポートストリームの詳細はMPEG規格書ISO/IEC138181−1に記載されており、ここでは詳細な説明は省略する。MPEG2トランスポートストリームにJava(登録商標)プログラムを埋め込む方法は、DSMCC方式として、MPEG規格書ISO/IEC138181−6に記述されている。ここではDSMCCの詳細な説明を省略する。
【0074】
DSMCC方式は、MPEG2トランスポートストリームのパケットの中に、コンピュータで使用されているディレクトリやファイルで構成されるファイルシステムをエンコードする方法を規定している。
【0075】
また、アプリ取得プログラム121は、SDカード、CD−ROM、DVD、Blu―RayDisc等に記録されたJava(登録商標)アプリケーションを、RAM125に読み込むJava(登録商標)プログラムであってもよい。
【0076】
また、アプリ取得プログラム121は、Java(登録商標)アプリケーション実行装置内にあるROM126内に記録されたJava(登録商標)アプリケーションを、RAM125に読み込むJava(登録商標)プログラムであってもよい。
【0077】
なお、本実施の形態ではアプリ取得プログラム121はJava(登録商標)言語で記述されたJava(登録商標)プログラムとしているが、同等の機能を有する、ネイティブ言語で記述されたプログラムや、ハードウェア(LSIまたは専用の信号処理回路など)で実現されていても構わない。
【0078】
仮想機械に相当するJava(登録商標)仮想マシン122は例えば、Java(登録商標)言語で記述されたプログラムを逐次解析し、実行するJava(登録商標)バーチャルマシンである。Java(登録商標)言語で記述されたプログラムはバイトコードと呼ばれる、ハードウェアに依存しない中間コードにコンパイルされる。Java(登録商標)仮想マシン122は、このバイトコードを解釈、実行するソフトウェア、またはハードウェアである。また、Java(登録商標)仮想マシン122は、バイトコードをCPU124が理解可能な実行形式に翻訳するJITコンパイラと呼ばれる機能を有するものであっても構わないし、一部もしくはバイトコードを直接実行可能なプロセッサと、プロセッサでは直接実行できないバイトコードを実行するインタプリタを有するものであっても構わない。Java(登録商標)言語の詳細は、書籍「Java(登録商標) Language Specification(ISBN 0201634511)」等の多くの書籍で解説されている。ここでは、その詳細を省略する。Java(登録商標)仮想マシン122は複数のサブプログラムを有するものである。
【0079】
図4はJava(登録商標)仮想マシン122を構成するサブプログラムの一例である。図4では、バイトコードインタプリタ501、クラスローダライブラリ502、ベリファイヤ503、Java(登録商標)ヒープ管理部504、Java(登録商標)ネイティブライブラリ505、JITコンパイラ506、メタ情報管理部507で構成されている。なお、Java(登録商標)仮想マシン122は、図4に示されていないサブプログラムを含んでいてもよい。
【0080】
バイトコードインタプリタ501は、クラスローダライブラリ502によりロードされたバイトコードを解釈、実行するサブプログラムで、Java(登録商標)仮想マシンにおいて中核な処理を行うサブプログラムである。
【0081】
クラスローダライブラリ502はアプリ取得プログラム121からクラスファイルを受け取り、Java(登録商標)仮想マシン122内で所望の処理を実行するために受け取ったクラスファイルをロードする処理を行う。クラスファイルはバイトコードなどの情報を含むファイルであり、書籍「Java(登録商標) Virtual Machine Specification(ISBN 020163451X)」で定義されている。また、クラスローダライブラリ502は、クラスアンロード処理も行う。クラスアンロード処理は、アプリ取得プログラム121から受け取ってロードしたクラスファイルの処理が終了し、不要になった場合に、このクラスファイルをJava(登録商標)仮想マシン122から取り除く処理である。
【0082】
ベリファイヤ503は、クラスファイルのデータ形式の不備や、クラスファイルに含まれるバイトコードの安全性を判定する。バイトコードの安全性の検査方法について、簡単に説明する。なお、詳細については、Java(登録商標) Virtual Machine Specificationを参照されたい。
【0083】
ベリファイヤ503は、例えばクラスファイル内に定義された構造体が基本的な形式を満たしているかチェックする。
【0084】
図24はクラスファイルに含まれる項目を示す図である。図において、magic number2401はクラスファイルのフォーマットを識別するナンバーを保持する項目であり、Java(登録商標)のクラスファイルであれば、magic number2401には通常CAFEBABEという値が保持される。
【0085】
minor version2402は、このクラスファイルを生成したコンパイラのマイナーバージョン番号を示すものであり、major version2403は、このクラスファイルを生成したコンパイラのメジャーバージョン番号を示すものである。
【0086】
constant_pool_count2404には後述するconstant_pool_count[]2405で定義されるテーブルの要素数を保持する。constant_pool_count[]2405はクラスファイルの構造体とその副構造体内で参照する様々な文字列定数、クラス名、フィールド名、その他の定数を表現する可変長のテーブルである。テーブル内にエントリできる要素の数はconstant_pool_count2404で定義した個数分エントリできる。
【0087】
つまりconstant_pool_count[0]、constant_pool_count[1]、constant_pool_count[2]、・・・、constant_pool_count[(constant_pool_count2404にて定義された数)−1]をそれぞれ、クラスファイルの構造体とその副構造体内で参照する様々な文字列定数、クラス名、フィールド名、その他の定数のいずれかとしてそれぞれ表現させることができる。
【0088】
access_flags2406はアクセスの許可や属性を示すマスクである。
【0089】
this class2407、super class2408は、それぞれconstant_pool_count[]2405のテーブル内にエントリされた定数への参照を示すものである。
【0090】
interfaces_count2409は後述するinterfaces_count[]2410で定義される要素の数を保持する。interfaces_count[]2410はconstant_pool_count[]2405のテーブル内にエントリされた定数への参照を示すものである。
【0091】
fields_count2411は後述するfields_count[]2412の要素の数を保持するものである。fields_count[]2412はテーブルである。
【0092】
methods_count2413は後述するmethods_count[]2414の要素の数を保持するものである。methods_count[]2414はテーブルである。
【0093】
attributes_count2415は後述するattributes_count[]2416の要素の数を保持するものである。attributes_count[]2416はテーブルである。
【0094】
ベリファイヤ503はクラスファイル2400をロードすると、例えば以下に示すようなチェックを行う。
【0095】
(a)対象となるクラスファイル2400のmagic number2401に保持されている値をチェックし、保持されている値がCAFEBABEでなければ、クラスファイル2400をロードするのは妥当でないと判断する。
【0096】
(b)対象となるクラスファイル2400の終わりに余計なバイトコードがあるかどうかをチェックし、あればクラスファイル2400をロードするのは妥当でないと判断する。
【0097】
(c)クラスファイル内の一貫性や他のクラスファイルとの一貫性をチェックし、一貫性が無ければクラスファイル2400をロードするのは妥当でないと判断する。これは例えばconstant_pool_count[]2405、interfaces_count[]2410、fields_count[]2412、methods_count[]2414、attributes_count[]2416でそれぞれ定義されるテーブルの要素数が、constant_pool_count2404、interfaces_count2409、fields_count2411、methods_count2413、attributes_count2415で保持される数を超えているかどうかをチェックするなどがある。
【0098】
また、(a)〜(c)に説明をしたクラスファイル2400に含まれる構造体の形式的なチェック以外にベリファイヤ503はクラスファイルに含まれるメソッド内のコード属性からデータフロー解析による検証を行い、不整合が生じるようであればクラスファイル2400をロードするは妥当でないと判断する。
【0099】
クラスローダライブラリ502は、ベリファイヤ503において妥当でないと判定されたクラスファイルのロードはしない。
【0100】
Java(登録商標)ヒープ管理部は504、Java(登録商標)アプリケーションが使用するワーキングメモリの確保を行う。ワーキングメモリはRAM125内に確保される。また、Java(登録商標)ヒープ管理部504は、ガベージコレクションも行う。ガベージコレクションは、アプリケーション実行において確保していたワーキングメモリの領域を、その確保が不要となった後(例えばアプリケーション実行終了後など)に開放し、他の用途に再利用できるようにする公知の技術であり、詳細な説明は省略する。
【0101】
Java(登録商標)ネイティブライブラリ505は、Java(登録商標)アプリケーションから呼び出されるライブラリで、OS123や、Java(登録商標)アプリケーション実行装置110が備える図1には記載されていないハードウェア、サブプログラム等で提供される機能をJava(登録商標)アプリケーションへ提供する。
【0102】
JITコンパイラ506は、バイトコードをCPU124が理解可能な実行形式に変換するものである。
【0103】
メタ情報管理部507は、アプリ取得プログラム121が取得したJava(登録商標)アプリケーションの実行時保護レベルを決定するサブプログラムである。メタ情報管理部507の詳細については後ほど説明する。
【0104】
OS123は、Java(登録商標)アプリケーション110の電源が投入されるとCPU124が起動するサブプログラムである。OSは、オペレーティングシステムの略であり、Linux等が一例である。OS123は、他のサブプログラムを並行して実行するカーネルおよび、ライブラリで構成される公知の技術の総称であり、詳細な説明は省略する。OS123はJava(登録商標)仮想マシン122をサブプログラムとして実行する。
【0105】
CPU124はJava(登録商標)仮想マシン122、OS123、アプリケーション取得部121が取得したプログラムを実行する。RAM125は、具体的にはSRAM、DRAM等の一時記憶メモリで構成され、CPU124が処理を行う際、一時的にデータを保存するために使用される。
【0106】
ROM126は、具体的にはフラッシュメモリや、ハードディスク等の不揮発性メモリで構成され、CPU124から指示されたデータやプログラムを記憶する。安全な処理実行部127はJava(登録商標)アプリケーションを安全に実行するためのプログラムである。安全な処理実行部127は、実行時にクラスファイルを盗聴、改ざんすることを困難にする保護アルゴリズムを1つ以上備えており、クラスファイルを盗聴、改ざんを困難にする保護アルゴリズムの具体例としては、OverlayLoaderなどが挙げられる。以下、本実施の形態において、安全な処理実行部127の持つ保護アルゴリズムをOverlayLoaderとして説明する。なお、本実施の形態では、安全な処理実行部127の持つ保護アルゴリズムの具体例として、OverlayLoaderを利用しているが、保護アルゴリズムは、Java(登録商標)アプリケーションを実行時の盗聴、改ざんから保護するアルゴリズムであればよい。なお、安全な処理実行部127はJava(登録商標)仮想マシンの内部に含まれていてもよい。
【0107】
OverlayLoaderとは、アプリケーションの実行に必要な部分だけを復号化して、RAM125上に保存し、必要のない部分は暗号化してRAM125上に保存する公知の技術である。
【0108】
安全な処理実行部127の構成の一例を、図5を参照しながら説明する。安全な処理実行部127は例えば、エリア管理部611、バイトコード管理部612、暗号化部613、復号化部614から構成される。本実施の形態では、エリア管理部611、バイトコード管理部612、暗号化部613、復号化部614は、Java(登録商標)言語で記述されたJava(登録商標)プログラムとしているが、同等の機能を有する、ネイティブ言語で記述されたプログラムや、ハードウェア(LSIまたは専用の信号処理回路など)で実現されていても構わない。
【0109】
エリア管理部611は、RAM125上に平文のバイトコードを展開するための、エリアを確保する。エリア管理部611はバイトコードインタプリタ501が次に実行するバイトコードを確保したエリアに展開する。確保したエリアにバイトコードを展開する領域がなくなった場合には、十分な空き領域が確保できるまで、すでに展開されているバイトコードうちバイトコードインタプリタ501が使用中でないバイトコードの有無を調べ、あれば対応するバイトコードをエリアから削除し、この削除したエリアの領域を実行するバイトコードを展開する領域に割り当てるようにする。エリア管理部611が、RAM125上に確保するエリアのサイズを大きくした場合、エリア上に展開される平文のバイトコードの数が多いために、RAM125内のバイトコードを1回盗聴することにより、多くのバイトコードが盗まれ易くなるのに対し、エリア管理部611が、RAM125上に確保するエリアのサイズを小さくした場合には、1回の盗聴により、盗まれるバイトコードの数は少ないが、エリア管理部611がバイトコードをエリアに展開する回数が増えるために実行時のオーバヘッドが大きくなるといった問題があるため、RAM125内に確保するエリアの大きさを適切に選択する必要がある。
【0110】
Java(登録商標)仮想マシン122のバイトコード管理部612は、ベリファイヤ503にてロードすることが妥当であると判定されたクラスファイルのバイトコードを受け取り、暗号化部613に対応するクラスファイルのバイトコードの暗号化を依頼する。
【0111】
暗号化部613はバイトコード管理部612より依頼されたRAM125上に保存されているクラスファイルのバイトコードを受け取り、所定のアルゴリズムにより暗号化するプログラムである。
【0112】
また、バイトコード管理部612は暗号化部613から暗号化されたバイトコードを受け取ると、バイトコードのメソッド名とバイトコードの先頭アドレスと、バイトコードの保護アルゴリズムを対応付けてRAM125上に保存する。
【0113】
復号化部614は、RAM125上に保存されている暗号化されたバイトコードを所定のアルゴリズムにより復号化するプログラムである。
【0114】
以上が安全な処理実行部127の構成の一例である。なお、安全な処理実行部127はハードウェアにより構成される部分を含んでいてもよい。例えば、前記暗号化部613および前記復号化部614はハードウェアで実装されていてもよい。
【0115】
次に、Java(登録商標)アプリケーション実行装置110がJava(登録商標)アプリケーションを保護しながら実行する方法について説明する。
【0116】
以下では、家電機器のような暗号化鍵を管理するハードウェアを備えており、前記暗号化鍵が盗まれる可能性がないというようなセキュリティサポートがある環境に実装されているJava(登録商標)アプリケーション実行装置の動作を説明する。また、Java(登録商標)アプリケーション実行装置は図6に示す保護レベル対応表700をROM126に予め保持している。
【0117】
まず、図6の保護レベル対応表について説明する。図6の保護レベル対応表700は実行時保護レベルと、保護アルゴリズムから構成される。なお、Java(登録商標)アプリケーション実行装置110が保護強度を変化することのできる保護アルゴリズムを備えている場合には、保護強度を示すパラメータを実行時保護レベルと対応付けて記述していてもよい。前記実行時保護レベルは図3における実行時保護レベル422と対応付けされた項目である。保護アルゴリズムは実行時の保護の方法を表している。また、各Java(登録商標)アプリケーション実行装置110は1つ以上の保護レベル対応表を保持していなければならない。本実施の形態では、保護アルゴリズムとはアプリケーションの所定の単位(この例ではクラスファイル)をRAM125内の所定のサイズのエリア内に展開させて管理するようなプログラムがエリア管理部611に組み込まれたものを例に説明を行う。
【0118】
図6の保護レベル対応表700について詳細に説明する。711の行は図3に示すセキュリティメタファイル314の実行時保護レベル31412が「0」の場合には、クラス名421に記載のクラスファイルを実行するときに保護アルゴリズムが必要ないことを表している。同様に712は実行時保護レベル31412が「1」のときにも、実行時保護が必要ないことを表している。また、713の行はセキュリティメタファイル314の実行時保護レベル31412が「2」の場合には、対応するクラスファイル31411を実行するときには保護アルゴリズム「X」で保護する必要があることを示している。また、同様に714の行は実行時保護レベル31412が「3」のときに、保護アルゴリズム「Y」で保護する必要があることを示している。ここで、保護アルゴリズム「X」は保護アルゴリズム「Y」よりも保護強度が強い必要がある。例えば、保護アルゴリズム「X」と「Y」がともにOverlayLoaderである場合には、保護アルゴリズム「Y」で管理するエリアのサイズは保護アルゴリズム「X」の管理するエリアよりも小さくなっている等のJava(登録商標)アプリケーションの盗聴、改ざんがより困難になるアルゴリズムである必要がある。なお、図6の保護レベル対応表700では保護レベルを「0」、「1」、「2」「3」の4段階としているが、これに限るものではない。保護アルゴリズムが必要、不必要の2通りであってもよいし、3段階以上に細かく設定してもよい。
【0119】
以下の説明においては、説明が簡単なようにJarファイル100の一例として、図8を利用する。図8のJarファイル900は、図2のJarファイル100と同じ構成であり、各要素に具体的な名前を与えている。
【0120】
また、セキュリティメタファイル314の一例として、図9を利用する。図9のセキュリティメタファイル914はConfidential.class915のためのクラス別メタ情報1011とNormal.class917のためのクラス別メタ情報1012から構成される。
【0121】
また、Confidential.class915の一例として、図10に示すようなmethodA1111と、methodB1112から構成されていると仮定する。また、Normal.class917の一例として、図11に示すように、methodC1211、methodD1212から構成されていると仮定する。
【0122】
まず、Java(登録商標)アプリケーション実行装置110の起動からダウンロード可能なプログラム100の実行が開始するまでを図12を参照しながら説明する。
【0123】
ユーザがJava(登録商標)アプリケーション実行装置110の電源を投入する(ステップ1301)。次に、CPU124はOS123を起動する(ステップ1302)。
【0124】
OS123がROM126に保存されているJava(登録商標)仮想マシン122を構成するプログラムをRAM125上にロードし、Java(登録商標)仮想マシン122を起動する(ステップ1303)。
【0125】
OS123がROM126に保存されている図5の安全な処理実行部127を構成するプログラムをRAM125上にロードし、安全な処理実行部127を起動する(ステップ1304)。エリア管理部611は、RAM125上にバイトコードを展開するための、エリアを確保する。
【0126】
Java(登録商標)仮想マシン内のバイトコードインタプリタ501がアプリ取得プログラム121を起動し、アプリ取得プログラム121はダウンロード可能なプログラム100を圧縮したJarファイル900を取り込んでRAM125に保存する(ステップ1305)。
【0127】
メタ情報管理部507がRAM125に保存したJarファイル900の中のセキュリティメタファイル914を読み出し、RAM125上に保存する。また、ROM126に保存されている図6の保護レベル対応表700をRAM125上にロードする(ステップ1306)。
【0128】
バイトコードインタプリタ501がJarファイル900の実行を開始する(ステップ1307)。
【0129】
以上説明した処理で、Java(登録商標)アプリケーションが実行可能な状態になったので、次に、Java(登録商標)アプリケーション実行装置110が図8のConfidential.class915をロードしてからバイトコードインタプリタ501がmethodA1111を処理するまでの流れを、図13を参照しながら説明する。
【0130】
まず、バイトコードインタプリタ501はConfidential.class915のメソッドを初めて実行するときに、クラスローダライブラリ502にクラスロードの依頼をする(ステップ1401)。
【0131】
クラスローダライブラリ502がConfidential.class915のクラスロード処理を行う。クラスロード処理の詳細は、書籍「Java(登録商標) Virtual Machine Specification」に記載されているため、ここでは、詳細な説明を省略する。クラスローダライブライブラリ502はバイトコードインタプリタ501に処理を戻す。
【0132】
次にバイトコードインタプリタ501はConfidential.class915の検証をベリファイヤ503に依頼する(ステップ1402)。
【0133】
ベリファイヤ503はConfidential.class915の検証を行い、処理をバイトコードインタプリタ501に戻す。ベリファイヤの動作の詳細は書籍「Java(登録商標) Virtual Machine Specification」に記載されているため、ここでの詳細な説明は省略する。
【0134】
次にバイトコードインタプリタ501はメタ情報管理部507にConfidential.class915の実行時の保護レベルをメタ情報管理部507に問い合わせる(ステップ1403)。
【0135】
ここで、メタ情報管理部507の動作を、図14を参照しながら説明する。
【0136】
メタ情報管理部507は図9におけるセキュリティメタファイル914の各クラス別メタ情報のクラス名を検索する(ステップ1501)。メタ情報管理部507はクラス別メタ情報1011のクラス名1021がConfidential.classとなっている情報を見つける。次に、メタ情報管理部507は、クラス名1021に対応する実行時保護レベル1022を読み出し、実行時保護レベルが「3」であることを知る(ステップ1502)。次にメタ情報管理部507は図6の保護レベル対応表700をRAM125から読み出す。保護レベル対応表700の実行時保護レベルの列から「3」になっている行を検索し、行714を見つける(ステップ1503)。ここで、保護レベル対応表700に、実行時保護レベルが「3」である行が存在しない場合には(ステップ1504)、Java(登録商標)アプリケーションの実行を停止する(ステップ1507)。メタ情報管理部507は実行時保護レベルが「3」である、714の行から、実行時の保護アルゴリズムは「Y」を読み出し(ステップ1505)、保護アルゴリズム「Y」をバイトコードインタプリタ501に通知する(ステップ1506)。
【0137】
以上がメタ情報管理部507の動作の説明である。
【0138】
図13に戻ってバイトコードインタプリタ501の処理の動作を説明する。
【0139】
バイトコードインタプリタ501は、図5のバイトコード管理部612にConfidential.class915内にあるメソッドのバイトコードのRAM125上におけるアドレスと、前記バイトコードのメソッド名および保護アルゴリズム「Y」を通知する。
【0140】
バイトコード管理部612がバイトコードを暗号化する処理を、図15を参照しながら説明する。
【0141】
バイトコード管理部612はバイトコードのRAM上のアドレスを暗号化部613に通知する(ステップ1601)。暗号化部613は、バイトコードを暗号化し、RAM125に保存し、暗号化したバイトコードのアドレスをバイトコード管理部612に通知する(ステップ1602)。バイトコード管理部612に暗号化したバイトコードのRAM125上のアドレスと、暗号化されたバイトコードに含まれるメソッド名および保護アルゴリズム「Y」を図17の暗号化バイトコード対応表1800ように関連付けてRAM125上に記憶させておく(ステップ1603)。以下では、暗号化されたバイトコードを「暗号化バイトコード」と称する。
【0142】
以上が、バイトコード管理部612のバイトコードを暗号化するときの動作である。
【0143】
図13に戻って、バイトコードインタプリタ501の動作の説明をする。
【0144】
バイトコードの暗号化が終了した後、平文で保存されているRAM125上のバイトコードは盗聴される危険があるため消去する(1405)。次にバイトコードインタプリタ501は図5のエリア管理部611に実行するバイトコードのメソッド名「methodA」を渡して、復号化の依頼をする。
【0145】
ここで、エリア管理部611の動作を、図16を参照しながら説明する。
【0146】
エリア管理部611は、バイトコード管理部612にメソッド名「methodA」を通知して、methodAの暗号化バイトコードのアドレス取得と保護アルゴリズムの通知を依頼する(ステップ1701)。バイトコード管理部612は図17の暗号化バイトコード対応表1800から「methodA」に対応付けされている暗号化バイトコードと保護アルゴリズムを検索し、暗号化バイトコードのRAM125上のアドレス「0x12341234」と保護アルゴリズム「Y」をエリア管理部611に通知する。エリア管理部611は保護アルゴリズム「Y」に応じたサイズのエリアを検索する。ここで、対応するサイズのエリアが見つからなかった場合には(ステップ1702)、RAM125にエリアを確保する(ステップ1703)。エリアが見つかったら前記エリア内に展開すべき場所を探す(ステップ1704)。ここで、エリアに空き領域がない場合には(ステップ1705)、前記エリアから必要な空き領域が得られるまで、すでに前記エリアに展開されているバイトコードのうちバイトコードインタプリタ501が使用中でないバイトコードを削除する(ステップ1706)。エリア管理部611は暗号化バイトコードのアドレス「0x12341234」と、前記展開すべき場所のアドレスを復号化部614に通知して、復号を依頼する(ステップ1707)。復号化部614は前記エリア内の指定された場所に、暗号化バイトコードを復号する。復号化部は処理の終了をエリア管理部611に通知し、エリア管理部611は前記エリア上のmethodA1111のバイトコードが復号されたアドレスをバイトコードインタプリタ501に通知する(ステップ1708)。
【0147】
以上が、エリア管理部611のバイトコードを復号するまでの動作である。
【0148】
図13に戻って、バイトコードインタプリタ501の動作を説明する。
【0149】
バイトコードインタプリタ501は安全な処理実行部127から受け取ったmethodA1111のバイトコードのアドレスの先頭から、内容を解釈し実行するインタプリタ処理を行う。
【0150】
以上が、家電機器等、セキュリティサポートがある環境に実装されたJava(登録商標)アプリケーション実行装置が、Confidential.classをロードしてからバイトコードインタプリタで実行するまでの動作である。
【0151】
次に、Java(登録商標)アプリケーション実行装置が、Normal.class917のmethodC1211を実行するときの動作を、図18を参照しながら説明する。バイトコードインタプリタ501がメタ情報管理部507に保護レベルを問い合わせる以前の動作はConfidential.classの実行と同様であるため、説明は省略する。
【0152】
メタ情報管理部507は図9におけるセキュリティメタファイル914の各クラス別メタ情報のクラス名を検索する(ステップ1901)。メタ情報管理部507はクラス名が「local/Normal.class」となっている1031を見つける。次にメタ情報管理部507は、実行時保護レベル1032を読み出し、実行時保護レベルが「1」であることを知る(ステップ1902)。次に、メタ情報管理部507は図6の保護レベル対応表700から実行時保護が必要ないことを知る(ステップ1903)。メタ情報管理部507はバイトコードインタプリタ501に実行時保護が必要ないことを通知する(ステップ1904)。
【0153】
バイトコードインタプリタ501は、Normal.class917のmethodCの実行を開始する。
【0154】
以上が、家電機器等、セキュリティサポートがある環境に実装されたJava(登録商標)アプリケーション実行装置110がNormal.classをロードしてから、バイトコードインタプリタ501で実行を開始するまでの動作である。
【0155】
次に、異なる環境に実装されているJava(登録商標)アプリケーション実行装置110がアプリケーションを保護しながら実行する動作を、図19を参照しながら説明する。
【0156】
以下では、パーソナルコンピュータのように、ハードウェア等によるセキュリティサポートがなく、盗聴、改ざんが容易に行えるJava(登録商標)アプリケーション実行装置を仮定する。また、前記Java(登録商標)アプリケーション実行装置は図7に示す保護レベル対応表800をROM126上に予め保持している。図7の保護レベル対応表800の構成は図6の保護レベル対応表700と同じである。保護レベル対応表800に実行時保護レベルが「3」の行がないのは、Java(登録商標)アプリケーション実行装置にハードウェア等によるセキュリティサポートがなく、実行時保護レベルが「3」に相当する保護アルゴリズムが存在しないためである。
【0157】
Java(登録商標)アプリケーション実行装置がConfidential.class915をロードしてからmethodA1111の実行を開始するまでの動作の説明をする。メタ情報管理部507が図9のセキュリティメタファイルから実行時保護レベル「3」であることを読み出す以前の動作は家電機器等のセキュリティサポートのある環境に実装されているJava(登録商標)アプリケーション実行装置がConfidential.classを実行するときと同様であるため、説明を省略する。
【0158】
メタ情報管理部507は図7の保護レベル対応表800をRAM125から読み出す。保護レベル対応表800の実行時保護レベルの列から「3」になっている行を検索する(ステップ2001)。保護レベル対応表800に実行時保護レベルが「3」になっている行が存在しないため(ステップ2002)Java(登録商標)アプリケーションの実行を停止する(ステップ2003)。ここで、Java(登録商標)アプリケーションの実行の停止方法はいかなる方法であってもよい。例えば、Java(登録商標)アプリケーション実行装置110の電源を強制的に切ってもよいし、Java(登録商標)アプリケーション実行装置110を再起動してもよい。
【0159】
以上が、パーソナルコンピュータ等に実装されたJava(登録商標)アプリケーション実行装置110がConfidential.classを実行するときの動作である。
【0160】
以上の説明したように、セキュリティメタファイル314を用いるとともにアプリケーション実行装置内に保存された保護レベル対応表800とを用い、アプリケーションは実行時に所定の単位を動作させるときに用いる保護アルゴリズムを直接指定するのではなく、保護レベルを指定し装置内に保存された保護レベル対応表800により保護レベル対応する保護アルゴリズムを実行できるようにしている。
【0161】
これはアプリケーションを配信する側からすれば、対象とする端末毎に異なるアプリケーションを配信する(つまりPCへ配信するために難読性の高いプログラムコードを有するアプリケーションを配信し、家電機器に配信するために難読性の低いアプリケーションを配信する)必要が無くなり、同一のアプリケーションを配信できるようになるので配信側からすれば、配信するプログラムを開発するための負荷が大幅に削減されることになる。一方、受信側においては保護レベル対応表800において、受信側の環境(ハードウェアの構成、セキュリティサポート有無など)に応じて保護レベルと保護アルゴリズムの関係を保存しておくことにより、受信側の端末に応じたアプリケーションの実行、盗聴/改竄の保護を可能とする。
【0162】
更に、アプリケーションがオブジェクト指向型の言語にて記述されていれば、アプリケーションをクラス単位に分割し、このクラス単位毎の保護レベルを指定するように構成し、実行時において、秘匿性の低いクラスの処理について保護レベルを低くすることにより、実行時におけるオーバーヘッドを極力抑えることが可能となる。
【0163】
なお、本実施の形態では、クラスファイル単位で実行時保護レベルを定義していたが、メソッド単位、Jarファイル単位およびJava(登録商標)アプリケーション単位での適用も可能である。メソッド単位で、実行時保護レベルを定義する場合には、図3におけるセキュリティメタファイル314にメソッド別メタ情報を格納し、メソッド名および、実行時保護レベルを記載することで、本発明の適用が可能になる。Jarファイル単位で、実行時保護レベルを定義する場合には、Jarファイルと図3のセキュリティメタファイル314を対応付ける。また、セキュリティメタファイル314にはJar別メタ情報を格納し、Jarファイル名および実行時保護レベルを記載する。このときセキュリティメタファイル314とJarファイルとは別個のファイルとしておくようにするとともに、Jarファイルを解凍する前にセキュリティメタファイル314を読み出すようにすればよい。
【0164】
実行時には、クラスロード時にバイトコードインタプリタ501が必要としているクラスファイルの格納されているJarファイルの実行時保護アルゴリズムをメタ情報管理部507に問い合わせることで本発明の適用が可能になる。Java(登録商標)アプリケーション単位で、実行時保護レベルを定義する場合には、Java(登録商標)アプリケーションと図3のセキュリティメタファイル314を対応付けることで、本発明の実施は可能となる。
【0165】
(実施の形態2)
以下、本実施の形態におけるJava(登録商標)アプリケーション実行装置について、図20を参照しながら、説明する。
【0166】
本実施の形態は、Java(登録商標)アプリケーション開発者が、セキュリティメタファイルをJava(登録商標)アプリケーションに付加しなかった場合に、クラスファイルを安全に実行し、実行時のオーバヘッドを小さく抑える方法である。
【0167】
図20はJava(登録商標)アプリケーションが実行装置の構成を示すブロック図である。
【0168】
図20において、図1と同一の符号を付したものは同一もしくはこれに相当するものであり、ここではその説明を省略する。
【0169】
セキュリティメタファイル生成部128は、Java(登録商標)アプリケーションを構成するクラスファイルを解析して、クラスファイルに対応するセキュリティメタファイルを生成するプログラムである。セキュリティメタファイル生成部128はJava(登録商標)プログラムであってもよいし、ネイティブ言語で記述されたプログラムや、ハードウェアで実現されていてもよい。
【0170】
次に、Java(登録商標)アプリケーション実行装置110がJava(登録商標)アプリケーションを保護しながら実行する方法について図21および図22を参照しながら説明する。図21のJarファイル2200はダウンロード可能なプログラム100を構成するファイルである。Jarファイル2200の構成は図2のJarファイル300からセキュリティメタファイル314を削除したものであり、詳細な説明は省略する。
【0171】
アプリ取得プログラム121がダウンロード可能なプログラム2100を取得し、RAM125に保存する(2301)。セキュリティメタファイル生成部128はRAM2125から、Jarファイル2200を構成するクラスファイルA2215およびクラスファイルB2217を解析し、実行時保護が必要かどうかの判定をする(2302)。実行時保護が必要なクラスファイルの例としては、Java(登録商標)言語のセキュリティパッケージのAPI(Application Program Interface)を利用しているクラスファイル等が挙げられる。Java(登録商標)言語のセキュリティパッケージとは、Java(登録商標)アプリケーションが利用できる鍵管理、証明書管理および暗号化等の機能を提供するパッケージである。Java(登録商標)言語のセキュリティパッケージに詳細は、書籍「Java(登録商標) Security(ISBN 0596001576)」等の多くの書籍に解説されている。ここでは、詳細な説明を省略する。セキュリティメタファイル生成部128は、クラスファイル(図22に示す例では、クラスファイルA2215およびクラスファイルB2217)を解析し、セキュリティパッケージのAPIを呼び出すコードがあるかどうかを調べる。次に、セキュリティメタファイル生成部128は解析結果から、セキュリティパッケージのAPIを呼び出すコードがあるクラスは対応する保護レベルを高く指定し、そうでないクラスは対応する保護レベルを低く指定するようなセキュリティメタファイル314を生成する(2303)。次にセキュリティメタファイル生成部128は、生成した前記セキュリティメタファイル314をJarファイル2200のメタディレクトリ2212に格納して、RAM2125に保存する(2304)。
【0172】
なお、本実施の形態においては、セキュリティメタファイル314をJarファイル2200内のメタディレクトリ2212に格納していたが、この限りではない。例えば、セキュリティメタファイル314をJarファイル2200とは別のRAM上に格納してもよい。また、セキュリティメタファイル314をJarファイル2200内の各ディレクトリ単位で生成し、格納してもよい。また、メタファイル2213内に追加の形式をとってもよい。
【0173】
バイトコードインタプリタ501がJarファイル2200の実行を開始する以降の動作は、実施の形態1と同様であるため、説明を省略する。
【0174】
以上のように構成することにより、ダウンロード可能なプログラム100にセキュリティメタファイルが存在しない場合においても、実行時保護が必要なクラスファイルは、実行時に盗聴、改ざんが困難になる。
【産業上の利用可能性】
【0175】
本発明に係るアプリケーション実行方法および実行装置は、Java(登録商標)アプリケーションにセキュリティメタファイルを付加することで、端末の特性を生かして、Java(登録商標)アプリケーションを実行時の盗聴、改ざんから保護することが可能となる。本発明を利用することで、今後本格展開が予想されるJava(登録商標)アプリケーションのダウンロード配信ビジネスにおいて、コンテンツ作成者の権利を保護することができる。
【図面の簡単な説明】
【0176】
【図1】本発明に係るJava(登録商標)アプリケーション実行装置の実施の形態の構成図
【図2】本発明に係るJarファイルの構成の一例を示す図
【図3】本発明に係るセキュリティメタファイルの構成を示す図
【図4】本発明に係るJava(登録商標)仮想マシンの構成の一例を示す図
【図5】本発明に係る安全な処理実行部の構成の一例を示す図
【図6】本発明に係る実行時保護レベルと保護アルゴリズムの対応関係の一例を示す図
【図7】本発明に係る実行時保護レベルと保護アルゴリズムの対応関係の一例を示す図
【図8】本発明に係るJarファイルの構成の一例を示す図
【図9】本発明に係るセキュリティメタファイルの構成の一例を示す図
【図10】本発明に係るクラスファイルの構成の一例を示す図
【図11】本発明に係るクラスファイルの構成の一例を示す図
【図12】本発明に係るJava(登録商標)アプリケーション実行装置を起動するフローチャート
【図13】本発明に係るJava(登録商標)アプリケーション実行装置がJava(登録商標)アプリケーションの実行する処理のフローチャート
【図14】本発明に係るメタ情報管理部が実行時保護レベルを読み出す処理のフローチャート
【図15】本発明に係る安全な処理実行部がバイトコードを暗号化する処理のフローチャート
【図16】本発明に係る安全な処理実行部がバイトコードを復号化する処理のフローチャート
【図17】本発明に係るメソッド名と暗号化バイトコードの対応関係の一例を示す図
【図18】本発明に係るメタ情報管理部が実行時保護レベルを読み出す処理のフローチャート
【図19】本発明に係るメタ情報管理部が実行時保護レベルを読み出し、Java(登録商標)アプリケーションの実行を停止する処理のフローチャート
【図20】本発明に係るJava(登録商標)アプリケーション実行装置の実施の形態の構成図
【図21】本発明に係るJarファイルの構成の一例を示す図
【図22】本発明に係るセキュリティメタファイル生成部がセキュリティメタファイルを生成する処理のフローチャート
【図23】従来の難読化方法の実施の形態の構成図
【図24】クラスファイルに含まれる項目を示す図
【符号の説明】
【0177】
100 ダウンロード可能なプログラム
110 Java(登録商標)アプリケーション実行装置
120 ソフトウェア実行部
121 アプリ取得プログラム
122 Java(登録商標)仮想マシン
123 OS
124 CPU
125 RAM
126 ROM
127 安全な処理実行部

【特許請求の範囲】
【請求項1】
外部からアプリケーションを取り込む取得ステップと、
前記取り込んだアプリケーションを構成する所定の単位と前記所定の単位に対応する保護レベルとを関連付けたメタ情報を有するセキュリティメタファイルを保存する保存ステップと、
前記所定の単位を実行するとき、前記所定の単位に対応する保護レベルに応じて、前記所定の単位を保護しつつ実行する実行ステップを有することを特徴とするアプリケーション実行方法。
【請求項2】
アプリケーションはオブジェクト指向型の言語で記述されており、
前記アプリケーションの記述を解析することにより前記セキュリティメタファイルを生成する生成ステップを有し、
前記保存ステップは、前記生成したセキュリティメタファイルを保存することを特徴とする請求項1に記載のアプリケーション実行方法。
【請求項3】
前記生成ステップは、オブジェクト指向型の言語で記述されたアプリケーションが利用できる鍵管理、証明書管理または暗号化の機能を提供するメソッド呼出しをしているコードが前記所定の単位に対応し、前記所定の単位を保護対象として、前記セキュリティメタファイルを生成することを特徴とする、請求項2に記載のアプリケーション実行方法。
【請求項4】
前記セキュリティメタファイルのメタ情報に記述された前記所定の単位に対応する保護レベルと前記所定の単位の実行時の保護方法が記述された保護アルゴリズムが対応付けされている保護レベル対応表が予め保存されており、前記実行ステップは前記保護レベル対応表を参照し、前記所定の単位の保護レベルに応じた保護アルゴリズムを実行することにより、前記所定の単位を保護しつつ実行することを特徴とする請求項1〜3のいずれか1項に記載のアプリケーション実行方法。
【請求項5】
前記保護レベル対応表に、前記セキュリティメタファイルに指定された所定の単位に対応する保護レベルが存在しない場合には、アプリケーションの実行を停止することを特徴とする請求項1〜4のいずれか1項に記載のアプリケーション実行方法。
【請求項6】
前記所定の単位がアプリケーション単位であることを特徴とする、請求項1〜5のいずれか1項に記載のアプリケーション保護の切り替え方法。
【請求項7】
前記所定の単位がアプリケーションを分割した一定の単位であることを特徴とする請求項1〜5のいずれか1項に記載のアプリケーション実行方法。
【請求項8】
前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのメソッド単位であることを特徴とする請求項7に記載のアプリケーション実行方法。
【請求項9】
前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのクラスファイル単位であることを特徴とする請求項7に記載のアプリケーション実行方法。
【請求項10】
前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションを圧縮したJarファイル単位であることを特徴とする請求項7に記載のアプリケーション実行方法。
【請求項11】
アプリケーション実行装置であって、
外部からアプリケーションを取り込む取得手段と、
前記取り込んだアプリケーションを構成する所定の単位と前記所定の単位に対応する保護レベルとを関連付けたメタ情報を有するセキュリティメタファイルを保存する保存手段、
前記所定の単位を実行するとき、前記所定の単位に対応する保護レベルに応じて、前記所定の単位を保護しつつ実行する実行手段を有することを特徴とするアプリケーション実行装置。
【請求項12】
アプリケーションはオブジェクト指向型の言語で記述されており、
前記アプリケーションの記述を解析することにより前記セキュリティメタファイルを生成する生成手段を有し、
前記保存手段は、前記生成したセキュリティメタファイルを保存することを特徴とする請求項11に記載のアプリケーション実行装置。
【請求項13】
前記生成手段は、オブジェクト指向型の言語で記述されたアプリケーションが利用できる鍵管理、証明書管理または暗号化の機能を提供するメソッド呼出しをしているコードが前記所定の単位に対応し、前記所定の単位を保護対象として、前記セキュリティメタファイルを生成することを特徴とする、請求項12に記載のアプリケーション実行装置。
【請求項14】
前記セキュリティメタファイルのメタ情報に記述された前記所定の単位に対応する保護レベルと前記所定の単位の実行時の保護方法が記述された保護アルゴリズムが対応付けされている保護レベル対応表が予め保存されており、前記実行ステップは前記保護レベル対応表を参照し、前記所定の単位の保護レベルに応じた保護アルゴリズムを実行することにより、前記所定の単位を保護しつつ実行することを特徴とする請求項11〜13のいずれか1項に記載のアプリケーション実行装置。
【請求項15】
前記保護レベル対応表に、前記セキュリティメタファイルに指定された所定の単位に対応する保護レベルが存在しない場合には、アプリケーションの実行を停止することを特徴とする請求項11〜14のいずれか1項に記載のアプリケーション実行装置。
【請求項16】
前記所定の単位がアプリケーション単位であることを特徴とする、請求項11〜15のいずれか1項に記載のアプリケーション実行方法。
【請求項17】
前記所定の単位がアプリケーションを分割した一定の単位であることを特徴とする請求項11〜15のいずれか1項に記載のアプリケーション実行装置。
【請求項18】
前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのメソッド単位であることを特徴とする請求項17に記載のアプリケーション実行装置。
【請求項19】
前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのクラスファイル単位であることを特徴とする請求項17に記載のアプリケーション実行装置。
【請求項20】
前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションを圧縮したJarファイル単位であることを特徴とする請求項17に記載のアプリケーション実行装置。

【図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

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate


【公開番号】特開2008−40853(P2008−40853A)
【公開日】平成20年2月21日(2008.2.21)
【国際特許分類】
【出願番号】特願2006−215301(P2006−215301)
【出願日】平成18年8月8日(2006.8.8)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(000005821)松下電器産業株式会社 (73,050)
【Fターム(参考)】