(57)【要約】【課題】アプリケーションを配信側でアプリケーションの難読化を行っているため、配信先の端末の特性に合わせてアプリケーションの保護をすることができない。【解決手段】アプリケーションの所定の単位と関連付けされたセキュリティメタファイルの情報に応じて、パーソナルコンピュータのような、ハードウェア等によるセキュリティサポートがなく、デバッガ等のアプリケーションを盗聴、改ざんするためのツールが豊富に提供されている環境下では、実行時の保護強度を高くして実行し、家電機器のような、ハードウェア等によりセキュリティサポートを持つ環境下では、実行時の保護強度を低くして実行する。【選択図】図１
2008040853.tif 000002
【特許請求の範囲】
【請求項１】
外部からアプリケーションを取り込む取得ステップと、
前記取り込んだアプリケーションを構成する所定の単位と前記所定の単位に対応する保護レベルとを関連付けたメタ情報を有するセキュリティメタファイルを保存する保存ステップと、
前記所定の単位を実行するとき、前記所定の単位に対応する保護レベルに応じて、前記所定の単位を保護しつつ実行する実行ステップを有することを特徴とするアプリケーション実行方法。
【請求項２】
アプリケーションはオブジェクト指向型の言語で記述されており、
前記アプリケーションの記述を解析することにより前記セキュリティメタファイルを生成する生成ステップを有し、
前記保存ステップは、前記生成したセキュリティメタファイルを保存することを特徴とする請求項１に記載のアプリケーション実行方法。
【請求項３】
前記生成ステップは、オブジェクト指向型の言語で記述されたアプリケーションが利用できる鍵管理、証明書管理または暗号化の機能を提供するメソッド呼出しをしているコードが前記所定の単位に対応し、前記所定の単位を保護対象として、前記セキュリティメタファイルを生成することを特徴とする、請求項２に記載のアプリケーション実行方法。
【請求項４】
前記セキュリティメタファイルのメタ情報に記述された前記所定の単位に対応する保護レベルと前記所定の単位の実行時の保護方法が記述された保護アルゴリズムが対応付けされている保護レベル対応表が予め保存されており、前記実行ステップは前記保護レベル対応表を参照し、前記所定の単位の保護レベルに応じた保護アルゴリズムを実行することにより、前記所定の単位を保護しつつ実行することを特徴とする請求項１〜３のいずれか１項に記載のアプリケーション実行方法。
【請求項５】
前記保護レベル対応表に、前記セキュリティメタファイルに指定された所定の単位に対応する保護レベルが存在しない場合には、アプリケーションの実行を停止することを特徴とする請求項１〜４のいずれか１項に記載のアプリケーション実行方法。
【請求項６】
前記所定の単位がアプリケーション単位であることを特徴とする、請求項１〜５のいずれか１項に記載のアプリケーション保護の切り替え方法。
【請求項７】
前記所定の単位がアプリケーションを分割した一定の単位であることを特徴とする請求項１〜５のいずれか１項に記載のアプリケーション実行方法。
【請求項８】
前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのメソッド単位であることを特徴とする請求項７に記載のアプリケーション実行方法。
【請求項９】
前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのクラスファイル単位であることを特徴とする請求項７に記載のアプリケーション実行方法。
【請求項１０】
前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションを圧縮したＪａｒファイル単位であることを特徴とする請求項７に記載のアプリケーション実行方法。
【請求項１１】
アプリケーション実行装置であって、
外部からアプリケーションを取り込む取得手段と、
前記取り込んだアプリケーションを構成する所定の単位と前記所定の単位に対応する保護レベルとを関連付けたメタ情報を有するセキュリティメタファイルを保存する保存手段、
前記所定の単位を実行するとき、前記所定の単位に対応する保護レベルに応じて、前記所定の単位を保護しつつ実行する実行手段を有することを特徴とするアプリケーション実行装置。
【請求項１２】
アプリケーションはオブジェクト指向型の言語で記述されており、
前記アプリケーションの記述を解析することにより前記セキュリティメタファイルを生成する生成手段を有し、
前記保存手段は、前記生成したセキュリティメタファイルを保存することを特徴とする請求項１１に記載のアプリケーション実行装置。
【請求項１３】
前記生成手段は、オブジェクト指向型の言語で記述されたアプリケーションが利用できる鍵管理、証明書管理または暗号化の機能を提供するメソッド呼出しをしているコードが前記所定の単位に対応し、前記所定の単位を保護対象として、前記セキュリティメタファイルを生成することを特徴とする、請求項１２に記載のアプリケーション実行装置。
【請求項１４】
前記セキュリティメタファイルのメタ情報に記述された前記所定の単位に対応する保護レベルと前記所定の単位の実行時の保護方法が記述された保護アルゴリズムが対応付けされている保護レベル対応表が予め保存されており、前記実行ステップは前記保護レベル対応表を参照し、前記所定の単位の保護レベルに応じた保護アルゴリズムを実行することにより、前記所定の単位を保護しつつ実行することを特徴とする請求項１１〜１３のいずれか１項に記載のアプリケーション実行装置。
【請求項１５】
前記保護レベル対応表に、前記セキュリティメタファイルに指定された所定の単位に対応する保護レベルが存在しない場合には、アプリケーションの実行を停止することを特徴とする請求項１１〜１４のいずれか１項に記載のアプリケーション実行装置。
【請求項１６】
前記所定の単位がアプリケーション単位であることを特徴とする、請求項１１〜１５のいずれか１項に記載のアプリケーション実行方法。
【請求項１７】
前記所定の単位がアプリケーションを分割した一定の単位であることを特徴とする請求項１１〜１５のいずれか１項に記載のアプリケーション実行装置。
【請求項１８】
前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのメソッド単位であることを特徴とする請求項１７に記載のアプリケーション実行装置。
【請求項１９】
前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのクラスファイル単位であることを特徴とする請求項１７に記載のアプリケーション実行装置。
【請求項２０】
前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションを圧縮したＪａｒファイル単位であることを特徴とする請求項１７に記載のアプリケーション実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシン方式（特にＪａｖａ（登録商標）仮想マシン）によりプログラムを実行する機能を持つ端末装置において、インターネットやＤＶＤ等の端末外部のメディアからダウンロードしたプログラムを実行する時に、プログラムの盗聴、改ざんを防止することに関する。
【背景技術】
【０００２】
従来のデジタルＴＶや携帯電話などの電子機器では、オブジェクト指向型の言語、例えばＪａｖａ（登録商標）言語で記述されたプログラム（Ｊａｖａ（登録商標）プログラムと称す）をダウンロードし、実行する機能を搭載するものが増加している。例えば携帯電話では、ＮＴＴ  ＤｏＣｏＭｏがｉ−アプリと呼ばれるサービスを提供している。このサービスは、携帯電話端末がインターネット上にあるアプリケーション配信サーバからＪａｖａ（登録商標）プログラムをダウンロードして、端末上で実行する。また、欧州では、ＤＶＢ−ＭＨＰ（Ｄｉｇｉｔａｌ  Ｖｉｄｅｏ  Ｂｒｏａｄｃａｓｔｉｎｇ−Ｍｕｌｔｉｍｅｄｉａ  Ｈｏｍｅ  Ｐｌａｔｆｏｒｍ）と呼ばれる仕様が策定され、既に仕様に準拠した運用が開始されている。ＤＶＢ−ＭＨＰ規格に基づくデジタル放送では、放送波に多重化されたＪａｖａ（登録商標）プログラムをデジタルＴＶが受信し、それを実行する。
【０００３】
以上のように、Ｊａｖａ（登録商標）プログラムは携帯電話や、デジタルＴＶなどさまざまな電子機器に配信されている。また、前記Ｊａｖａ（登録商標）プログラムはプログラム開発者の著作権保護が求められており、これを悪意のある攻撃者が盗聴、改ざんすることを防がなくてはならない。
【０００４】
これらを実現するために、従来は以下のような技術が用いられていた。
【０００５】
（１）ソースコードを難読化し、実行時の解析を困難にする。
【０００６】
従来のプログラムが盗聴、改ざんされることを防止する一例は、特許文献１に記載されている。図２３は特許文献１に記載された従来のプログラムの盗聴、改ざんされることを防止する方法を説明するための図である。
【０００７】
入力部２０１に難読化したいプログラムを入力し、中央処理部２０２で、難読化する対象を決定する処理や、変数や、ダミー関数の導入処理や、難読化処理を制御する。出力部２０３は、難読化されたソースコードや実行形式プログラムを出力する。難読化領域決定部２０４は、ソースコードを解析した後、ソースコードにおける難読化する部分を決定する。難読化処理部２０５は難読化に利用される関数ポインタ変数や、関数ポインタの配列変数を新たに導入して、それらを利用してプログラムのソースコードを難読化する。これにより、実行時の盗聴、改ざんを困難にしている。
【特許文献１】特開２００３−３３７６２９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、従来の技術においては、アプリケーションを配信側でアプリケーションの難読化を行っているため、配信先の端末の特性に合わせてアプリケーションの保護方法を変更することができない。
【０００９】
例えば、パーソナルコンピュータのような、ハードウェア等によるセキュリティサポートがなく、デバッガなどアプリケーションの盗聴、改ざんするためのツールが豊富に開発されている環境を想定した場合には、プログラムの解析が不可能な程度の難読化が必要となる。プログラムの解析が不可能な程度の難読化を行えば、これに応じて処理量が大幅に増え、実行時のオーバヘッドが大きくなる。このように難読化された、アプリケーションをＣＰＵ能力が低く、ハードウェアのセキュリティサポートを有する家電機器等の電子機器に配信した場合には、実行が遅くなり実現性という観点からは適さない。
【００１０】
一方、ハードウェア等によるセキュリティサポートを持つような家電機器を想定した場合には、簡単な難読化でよい。しかし、簡単な難読化を行ったアプリケーションをパーソナルコンピュータに配信し、実行した場合には、盗聴、改ざんが容易に行えてしまうという課題がある。
【００１１】
つまり、配信側からすれば、受信側での電子機器はどんなものであれ、プログラムを一様に難読化したものを送っており、難読化の程度が高いプログラムを送るように構成すれば、受信側の電子機器が例えばハードウェアのセキュリティサポートを有する家電機器では実行処理が遅くなり、難読化の程度が低いプログラムを送るように構成すれば、受信側の電子機器が例えばハードウェアのセキュリティサポートのないパーソナルコンピュータの場合、盗聴改ざんが容易に行われてしまうといった課題がある。
【００１２】
本発明は、上述の課題を解決するもので、アプリケーションの所定の処理単位と関連付けされた（セキュリティ）メタファイルの情報に応じて、パーソナルコンピュータのような、ハードウェア等によるセキュリティサポートがなく、デバッガ等のアプリケーションを盗聴、改ざんするためのツールが豊富に提供されている環境下では、実行時の保護強度を高くして実行し、家電機器のような、ハードウェア等によるセキュリティサポートを持つ環境下では、実行時の保護強度を低くして実行できるようなプログラムを実行するプログラム実行方法およびプログラム実行装置を得ることを目的とする。
【課題を解決するための手段】
【００１３】
本発明のアプリケーション実行方法は、アプリケーション実行装置の外部からアプリケーションを取り込むステップと、前記取り込んだアプリケーションを構成する所定の単位と前記所定の単位に対応する保護レベルとを関連付けたメタ情報を有するセキュリティメタファイルを保存するステップと、前記所定の単位を実行するとき、前記所定の単位に対応する保護レベルに応じて、前記所定の単位を保護しつつ実行するステップを有することを特徴とする。
【００１４】
また、アプリケーションはオブジェクト指向型の言語で記述されており、前記アプリケーションの記述を解析することにより前記セキュリティメタファイルを生成する生成ステップを有し、前記保存ステップは、前記生成したセキュリティメタファイルを保存することを特徴とする。
【００１５】
また、前記生成ステップは、オブジェクト指向型の言語で記述されたアプリケーションが利用できる鍵管理、証明書管理または暗号化の機能を提供するメソッド呼出しをしているコードが前記所定の単位に対応し、前記所定の単位を保護対象として、前記セキュリティメタファイルを生成することを特徴とする。
【００１６】
また、前記セキュリティメタファイルのメタ情報に記述された前記所定の単位に対応する保護レベルと前記所定の単位の実行時の保護方法が記述された保護アルゴリズムが対応付けされている保護レベル対応表が予め保存されており、前記実行ステップは前記保護レベル対応表を参照し、前記所定の単位の保護レベルに応じた保護アルゴリズムを実行することにより、前記所定の単位を保護しつつ実行することを特徴とする。
【００１７】
また、前記保護レベル対応表に、前記セキュリティメタファイルに指定された所定の単位に対応する保護レベルが存在しない場合には、アプリケーションの実行を停止することを特徴とする。
【００１８】
また、前記所定の単位がアプリケーション単位であることを特徴とする。
【００１９】
また、前記所定の単位がアプリケーションを分割した一定の単位であることを特徴とする。
【００２０】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのメソッド単位であることを特徴とする。
【００２１】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのクラスファイル単位であることを特徴とする。
【００２２】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションを圧縮したＪａｒファイル単位であることを特徴とする。
【００２３】
本発明のアプリケーション実行装置は、外部からアプリケーションを取り込む取得手段と、前記取り込んだアプリケーションを構成する所定の単位と前記所定の単位に対応する保護レベルとを関連付けたメタ情報を有するセキュリティメタファイルを保存する保存手段と、前記所定の単位を実行するとき、前記所定の単位に対応する保護レベルに応じて、前記所定の単位を保護しつつ実行する実行手段を有することを特徴とする。
【００２４】
また、アプリケーションはオブジェクト指向型の言語で記述されており、前記アプリケーションの記述を解析することにより前記セキュリティメタファイルを生成する生成手段を有し、前記保存手段は、前記生成したセキュリティメタファイルを保存することを特徴とする。
【００２５】
また、前記生成手段は、オブジェクト指向型の言語で記述されたアプリケーションが利用できる鍵管理、証明書管理または暗号化の機能を提供するメソッド呼出しをしているコードが前記所定の単位に対応し、前記所定の単位を保護対象として、前記セキュリティメタファイルを生成することを特徴とする。
【００２６】
また、前記セキュリティメタファイルのメタ情報に記述された前記所定の単位に対応する保護レベルと前記所定の単位の実行時の保護方法が記述された保護アルゴリズムが対応付けされている保護レベル対応表が予め保存されており、前記実行ステップは前記保護レベル対応表を参照し、前記所定の単位の保護レベルに応じた保護アルゴリズムを実行することにより、前記所定の単位を保護しつつ実行することを特徴とする。
【００２７】
また、前記保護レベル対応表に、前記セキュリティメタファイルに指定された所定の単位に対応する保護レベルが存在しない場合には、アプリケーションの実行を停止することを特徴とする。
【００２８】
また、前記所定の単位がアプリケーション単位であることを特徴とする。
【００２９】
また、前記所定の単位がアプリケーションを分割した一定の単位であることを特徴とする。
【００３０】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのメソッド単位であることを特徴とする。
【００３１】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのクラスファイル単位であることを特徴とする。
【００３２】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションを圧縮したＪａｒファイル単位であることを特徴とする。
【発明の効果】
【００３３】
上記課題を解決するための本発明は、アプリケーション実行装置の外部からアプリケーションを取り込むステップと、前記取り込んだアプリケーションを構成する所定の単位と前記所定の単位に対応する保護レベルとを関連付けたメタ情報を有するセキュリティメタファイルを保存するステップ、前記所定の単位を実行するとき、前記所定の単位に対応する保護レベルに応じて、前記所定の単位を保護しつつ実行するステップを有するので、アプリケーション実行時の保護を所定の単位に応じて変更することができるので、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【００３４】
また、アプリケーションはオブジェクト指向型の言語で記述されており、前記アプリケーションの記述を解析することにより前記セキュリティメタファイルを生成する生成ステップを有し、前記保存ステップは、前記生成したセキュリティメタファイルを保存するので、アプリケーションにセキュリティメタファイルが含まれていなくてもセキュリティメタファイルを自動的に作成し保存できるようになるので、アプリケーションを作成するプログラマの負荷が軽減されるようになる。
【００３５】
また、前記セキュリティメタファイルを生成するステップは、オブジェクト指向型の言語で記述されたアプリケーションが利用できる鍵管理、証明書管理または暗号化の機能を提供するメソッド呼出しをしているコードが前記所定の単位に対応し、前記所定の単位を保護対象として、前記セキュリティメタファイルを生成するので、秘匿性の高くすべき単位の処理を保護しつつ実行時のオーバーヘッドを抑えることが可能となる。
【００３６】
また、前記セキュリティメタファイルのメタ情報に記述された前記所定の単位に対応する保護レベルと前記所定の単位の実行時の保護方法が記述された保護アルゴリズムが対応付けされている保護レベル対応表が予め保存されており、前記実行ステップは前記保護レベル対応表を参照し、前記所定の単位の保護レベルに応じた保護アルゴリズムを実行することにより、前記所定の単位を保護しつつ実行するので、取り込まれるアプリケーションが一様であっても、実行する装置の環境に応じた保護アルゴリズムを保護レベル対応表に記述していれば、各装置の環境に応じた保護を行いつつ所定の単位の処理を実行することが可能となるばかりか、アプリケーションを配信する側は端末の特性に応じて難読化を行ったプログラムを複数配信する必要が無くなりアプリケーションを作成するプログラマの負荷を軽減する。
【００３７】
また、前記保護レベル対応表に、前記セキュリティメタファイルに指定された所定の単位に対応する保護レベルが存在しない場合には、アプリケーションの実行を停止するので、アプリケーション実行時において、保護レベルが存在しないことに起因するアプリケーション提供者側が想定していない動作を防止することが可能となる。
【００３８】
また、前記所定の単位がアプリケーション単位であるので、前記アプリケーションを秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぐことが可能となる。
【００３９】
また、前記所定の単位がアプリケーションを分割した一定の単位であるので、前記一定の単位を秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【００４０】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのメソッド単位であるので、前記メソッドを秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【００４１】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのクラスファイル単位であるので、前記メソッドを秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【００４２】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションを圧縮したＪａｒファイル単位であるので、アプリケーション解凍時／実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【００４３】
本発明のアプリケーション実行装置は、外部からアプリケーションを取り込む取得手段と、前記取り込んだアプリケーションを構成する所定の単位と前記所定の単位に対応する保護レベルとを関連付けたメタ情報を有するセキュリティメタファイルを保存する保存手段と、前記所定の単位を実行するとき、前記所定の単位に対応する保護レベルに応じて、前記所定の単位を保護しつつ実行する実行手段を有するので、アプリケーション実行時の保護を所定の単位に応じて変更することができるので、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【００４４】
また、アプリケーションはオブジェクト指向型の言語で記述されており、前記アプリケーションの記述を解析することにより前記セキュリティメタファイルを生成する生成手段を有し、前記保存手段は、前記生成したセキュリティメタファイルを保存するので、アプリケーションにセキュリティメタファイルが含まれていなくてもセキュリティメタファイルを自動的に作成し保存できるようになるので、アプリケーションを作成するプログラマの負荷が軽減されるようになる。
【００４５】
また、前記生成手段は、オブジェクト指向型の言語で記述されたアプリケーションが利用できる鍵管理、証明書管理または暗号化の機能を提供するメソッド呼出しをしているコードが前記所定の単位に対応し、前記所定の単位を保護対象として、前記セキュリティメタファイルを生成するので、秘匿性の高くすべき単位の処理を保護しつつ実行時のオーバーヘッドを抑えることが可能となる。
【００４６】
また、前記セキュリティメタファイルのメタ情報に記述された前記所定の単位に対応する保護レベルと前記所定の単位の実行時の保護方法が記述された保護アルゴリズムが対応付けされている保護レベル対応表が予め保存されており、前記実行ステップは前記保護レベル対応表を参照し、前記所定の単位の保護レベルに応じた保護アルゴリズムを実行することにより、前記所定の単位を保護しつつ実行するので、取り込まれるアプリケーションが一様であっても、実行する装置の環境に応じた保護アルゴリズムを保護レベル対応表に記述していれば、各装置の環境に応じた保護を行いつつ所定の単位の処理を実行することが可能となるばかりか、アプリケーションを配信する側は端末の特性に応じて難読化を行ったプログラムを複数配信する必要が無くなりアプリケーションを作成するプログラマの負荷を軽減する。
【００４７】
また、前記保護レベル対応表に、前記セキュリティメタファイルに指定された所定の単位に対応する保護レベルが存在しない場合には、アプリケーションの実行を停止するので、アプリケーション実行時において、保護レベルが存在しないことに起因するアプリケーション提供者側が想定していない動作を防止することが可能となる。
【００４８】
また、前記所定の単位がアプリケーション単位であるので、前記アプリケーションを秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぐことが可能となる。
【００４９】
また、前記所定の単位がアプリケーションを分割した一定の単位であるので、前記一定の単位を秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【００５０】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのメソッド単位であるので、前記メソッドを秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【００５１】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションのクラスファイル単位であるので、前記メソッドを秘匿性の高さに関連付ければ、アプリケーション実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【００５２】
また、前記一定の単位がオブジェクト指向型の言語により記述されたアプリケーションを圧縮したＪａｒファイル単位であるので、アプリケーション解凍時／実行時の盗聴、改ざんを防ぎつつ実行時のオーバヘッドを抑えることが可能となる。
【発明を実施するための最良の形態】
【００５３】
以下本発明の実施の形態について、図面を参照しながら説明する。
【００５４】
（実施の形態１）
本発明に係わるプログラム実行装置をＪａｖａ（登録商標）言語で記述されたＪａｖａ（登録商標）アプリケーションプログラムを実行するＪａｖａ（登録商標）アプリケーション実行装置を一例として実施の形態で、図面を参照しながら説明する。
【００５５】
図１はＪａｖａ（登録商標）アプリケーション実行装置の構成を示すブロック図である。１００はダウンロード可能なオブジェクト指向言語で記載されたＪａｖａ（登録商標）言語などで記述されたプログラムであり、例えばプログラム１００はプログラム実行装置１１０がダウンロード可能なＪａｖａ（登録商標）プログラム（例えばＪａｖａ（登録商標）アプリケーションプログラム）のデータである。ダウンロードされるプログラムのデータは具体的には、Ｊａｖａ（登録商標）アプリケーションプログラムを圧縮した１つ以上のＪａｒファイルを有するものである。
【００５６】
ＪａｒファイルはＪａｖａ（登録商標）アプリケーションを構成する複数のファイルをひとつにまとめた、電子機器のプラットフォームに依存しないファイルの形式である。Ｊａｒファイルについては書籍「Ｔｈｅ  Ｊａｖａ（登録商標）  Ｔｕｔｏｒｉａｌ  Ｃｏｎｔｉｎｕｅｄ：Ｔｈｅ  Ｒｅｓｔ  ｏｆ  ｔｈｅ  ＪＤＫ（ＩＳＢＮ  ０２０１４８５５８３）」等に解説されているため、ここでの詳細な説明を省略する。
【００５７】
ダウンロード可能なプログラム１００に対応するデータを構成するＪａｒファイルの構成の一例を、図２を参照しながら説明する。３００はプログラム１００のデータを圧縮したＪａｒファイルである。プログラム１００が複数のＪａｒファイルを有する場合、各Ｊａｒファイルのデータ構成は図２に示すものとなる。Ｊａｒファイル３００の中身は例えばルートディレクトリ３１１、メタディレクトリ３１２、メタファイル３１３、セキュリティメタファイル３１４、クラスファイルＡ３１５、サブディレクトリ３１６、クラスファイル３１７から構成される。
【００５８】
図２はＪａｒファイルを構成する一例であり、図２に記載されていないサブディレクトリ、クラスファイル、画像ファイルおよび動画ファイル等を含んでいてもよい。
【００５９】
ルートディレクトリ３１１は、Ｊａｒファイル３００の最上位のディレクトリである。メタディレクトリ３１２は、そのディレクトリにメタファイル３１３、およびセキュリティメタファイル３１４を格納するディレクトリである。
【００６０】
メタファイル３１３はＪａｒファイル３００に関するメタ情報を格納するファイルである。具体的にはＪａｒファイル３００を作成した、ツールのバージョンなどが記載されている。メタファイル３１３は前記書籍「Ｔｈｅ  Ｊａｖａ（登録商標）  Ｔｕｔｏｒｉａｌ  Ｃｏｎｔｉｎｕｅｄ：Ｔｈｅ  Ｒｅｓｔ  ｏｆ  ｔｈｅ  ＪＤＫ（ＩＳＢＮ  ０２０１４８５５８３）」に詳細が記載されているので、ここでの詳細な説明は省略する。
【００６１】
セキュリティメタファイル３１４は例えば実行時保護レベルを格納するファイルである。実行時保護レベルは、Ｊａｖａ（登録商標）アプリケーションを実行するときの保護方法を変更するためのパラメータである。アプリケーション実行装置には、Ｊａｖａ（登録商標）アプリケーションを実行するとき、これを保護するアルゴリズムを有するプログラムが同時に実行されることにより実行時におけるＪａｖａ（登録商標）アプリケーションの盗聴・改竄を防止ことができる。この保護するプログラムは実行時保護レベルに関連付けられたものである。実行時保護レベルが高いほど、実行時に盗聴、改ざんがより困難なアルゴリズムでＪａｖａ（登録商標）アプリケーションを保護しながら実行する。なお、実行時保護レベルが低ければ、実行時に盗聴、改ざんに対する保護が簡易で、実行オーバヘッドの少ないアルゴリズムでＪａｖａ（登録商標）アプリケーションを保護しながら実行してもよい。
【００６２】
セキュリティメタファイル３１４はＪａｖａ（登録商標）アプリケーション開発者が、Ｊａｖａ（登録商標）アプリケーション作成時に付加する。
【００６３】
なお、セキュリティメタファイル３１４に電子署名を付加していてもよい。電子署名はデータの正当性を保証するものである。電子署名の詳細は書籍「電子署名法（ＩＳＢＮ  ４８９７９７５１１５）」等、多くの書籍に解析されている。ここでの詳細な説明は省略する。
【００６４】
Ｊａｒファイル３００の説明をする。クラスファイルＡ３１５とクラスファイルＢ３１７はＪａｖａ（登録商標）言語等で記述されたプログラムをＪａｖａ（登録商標）仮想マシンが解析可能な形式に変換したバイナリデータである。
【００６５】
セキュリティメタファイル３１４を、図３を参照しながら説明する。セキュリティメタファイル３１４は、Ｊａｒファイル３００を構成するクラスファイルと対応関係を持つ、１つ以上のクラス別メタ情報３１４１を記載している。クラス別メタ情報３１４１はクラス名３１４１１と実行時保護レベル３１４１２から構成される。
【００６６】
クラス名３１４１１はルートディレクトリ３１１から対象となるクラスファイルへの相対パスが記載される。実行時保護レベル３１４１２は対象となるクラスファイル実行時に保護するレベルを記述している。
【００６７】
なお、本実施の形態においては、セキュリティメタファイル３１４をＪａｒファイル３００内のメタディレクトリ３１２に格納していたが、この限りではない。例えば、セキュリティメタファイル３１４をＪａｒファイル３００とは別に配信してよい。また、セキュリティメタファイル３１４をＪａｒファイル３００内の各ディレクトリに分散して格納してもよい。また、メタファイル３１３内に追加の形式をとってもよい。以上が、セキュリティメタファイル３１４の説明である。
【００６８】
以上がダウンロード可能なプログラム１００を構成する、Ｊａｒファイル３００の説明である。
【００６９】
図１に戻って、Ｊａｖａ（登録商標）アプリケーション実行装置１１０は端末装置であり、ソフトウェア実行部１２０を備えている。Ｊａｖａ（登録商標）アプリケーション実行装置は、具体的にはパーソナルコンピュータ、デジタルテレビ、セットトップボックス、Ｂｌｕ―Ｒａｙ  Ｄｉｓｃ（ＢＤ）レコーダ、カーナビゲーション端末、携帯電話、ＰＤＡなどの、Ｊａｖａ（登録商標）仮想マシンを搭載する電子機器全般が該当する。
【００７０】
ソフトウェア実行部１２０は、アプリ取得プログラム１２１はＪａｖａ（登録商標）仮想マシン１２２、ＯＳ１２３、ＣＰＵ１２４、ＲＡＭ１２５、ＲＯＭ１２６および安全な処理実行部１２７から構成される。
【００７１】
アプリ取得プログラム１２１は、それが記載する内容に従って、端末内のハードウェア（ＨＷ）を制御しつつ、端末外に存在するアプリケーションを取得するプログラムであり、例えばＪａｖａ（登録商標）言語で記述されたプログラムである。アプリ取得プログラム１２１は例えば、インターネット上にあるサーバから、ＴＬＳ（Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ）、ＨＴＴＰ（Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）等のプロトコルに従い、端末外に存在するＪａｖａ（登録商標）アプリケーションをダウンロードするＪａｖａ（登録商標）プログラムが相当する。
【００７２】
なお、ＴＬＳは暗号化により通信時のデータの盗聴、改ざんを防ぐデータ転送方式である。ＴＬＳの詳細はＲＦＣ２２４６に記載されており、ここでは詳細な説明を省略する。ＨＴＴＰはインターネット上のデータ通信で一般的に用いられているデータ転送方式である。ＨＴＴＰの詳細はＲＦＣ２６１６に記載されており、ここでは詳細な説明を省略する。
【００７３】
また、アプリ取得プログラム１２１は、デジタル放送のデータ放送として、ＭＰＥＧ２トランスポートストリーム内に埋め込まれたＪａｖａ（登録商標）アプリケーションを端末内に読み出すＪａｖａ（登録商標）プログラムであってもよい。ＭＰＥＧ２トランスポートストリームの詳細はＭＰＥＧ規格書ＩＳＯ／ＩＥＣ１３８１８１−１に記載されており、ここでは詳細な説明は省略する。ＭＰＥＧ２トランスポートストリームにＪａｖａ（登録商標）プログラムを埋め込む方法は、ＤＳＭＣＣ方式として、ＭＰＥＧ規格書ＩＳＯ／ＩＥＣ１３８１８１−６に記述されている。ここではＤＳＭＣＣの詳細な説明を省略する。
【００７４】
ＤＳＭＣＣ方式は、ＭＰＥＧ２トランスポートストリームのパケットの中に、コンピュータで使用されているディレクトリやファイルで構成されるファイルシステムをエンコードする方法を規定している。
【００７５】
また、アプリ取得プログラム１２１は、ＳＤカード、ＣＤ−ＲＯＭ、ＤＶＤ、Ｂｌｕ―ＲａｙＤｉｓｃ等に記録されたＪａｖａ（登録商標）アプリケーションを、ＲＡＭ１２５に読み込むＪａｖａ（登録商標）プログラムであってもよい。
【００７６】
また、アプリ取得プログラム１２１は、Ｊａｖａ（登録商標）アプリケーション実行装置内にあるＲＯＭ１２６内に記録されたＪａｖａ（登録商標）アプリケーションを、ＲＡＭ１２５に読み込むＪａｖａ（登録商標）プログラムであってもよい。
【００７７】
なお、本実施の形態ではアプリ取得プログラム１２１はＪａｖａ（登録商標）言語で記述されたＪａｖａ（登録商標）プログラムとしているが、同等の機能を有する、ネイティブ言語で記述されたプログラムや、ハードウェア（ＬＳＩまたは専用の信号処理回路など）で実現されていても構わない。
【００７８】
仮想機械に相当するＪａｖａ（登録商標）仮想マシン１２２は例えば、Ｊａｖａ（登録商標）言語で記述されたプログラムを逐次解析し、実行するＪａｖａ（登録商標）バーチャルマシンである。Ｊａｖａ（登録商標）言語で記述されたプログラムはバイトコードと呼ばれる、ハードウェアに依存しない中間コードにコンパイルされる。Ｊａｖａ（登録商標）仮想マシン１２２は、このバイトコードを解釈、実行するソフトウェア、またはハードウェアである。また、Ｊａｖａ（登録商標）仮想マシン１２２は、バイトコードをＣＰＵ１２４が理解可能な実行形式に翻訳するＪＩＴコンパイラと呼ばれる機能を有するものであっても構わないし、一部もしくはバイトコードを直接実行可能なプロセッサと、プロセッサでは直接実行できないバイトコードを実行するインタプリタを有するものであっても構わない。Ｊａｖａ（登録商標）言語の詳細は、書籍「Ｊａｖａ（登録商標）  Ｌａｎｇｕａｇｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ（ＩＳＢＮ  ０２０１６３４５１１）」等の多くの書籍で解説されている。ここでは、その詳細を省略する。Ｊａｖａ（登録商標）仮想マシン１２２は複数のサブプログラムを有するものである。
【００７９】
図４はＪａｖａ（登録商標）仮想マシン１２２を構成するサブプログラムの一例である。図４では、バイトコードインタプリタ５０１、クラスローダライブラリ５０２、ベリファイヤ５０３、Ｊａｖａ（登録商標）ヒープ管理部５０４、Ｊａｖａ（登録商標）ネイティブライブラリ５０５、ＪＩＴコンパイラ５０６、メタ情報管理部５０７で構成されている。なお、Ｊａｖａ（登録商標）仮想マシン１２２は、図４に示されていないサブプログラムを含んでいてもよい。
【００８０】
バイトコードインタプリタ５０１は、クラスローダライブラリ５０２によりロードされたバイトコードを解釈、実行するサブプログラムで、Ｊａｖａ（登録商標）仮想マシンにおいて中核な処理を行うサブプログラムである。
【００８１】
クラスローダライブラリ５０２はアプリ取得プログラム１２１からクラスファイルを受け取り、Ｊａｖａ（登録商標）仮想マシン１２２内で所望の処理を実行するために受け取ったクラスファイルをロードする処理を行う。クラスファイルはバイトコードなどの情報を含むファイルであり、書籍「Ｊａｖａ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ（ＩＳＢＮ  ０２０１６３４５１Ｘ）」で定義されている。また、クラスローダライブラリ５０２は、クラスアンロード処理も行う。クラスアンロード処理は、アプリ取得プログラム１２１から受け取ってロードしたクラスファイルの処理が終了し、不要になった場合に、このクラスファイルをＪａｖａ（登録商標）仮想マシン１２２から取り除く処理である。
【００８２】
ベリファイヤ５０３は、クラスファイルのデータ形式の不備や、クラスファイルに含まれるバイトコードの安全性を判定する。バイトコードの安全性の検査方法について、簡単に説明する。なお、詳細については、Ｊａｖａ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎを参照されたい。
【００８３】
ベリファイヤ５０３は、例えばクラスファイル内に定義された構造体が基本的な形式を満たしているかチェックする。
【００８４】
図２４はクラスファイルに含まれる項目を示す図である。図において、ｍａｇｉｃ  ｎｕｍｂｅｒ２４０１はクラスファイルのフォーマットを識別するナンバーを保持する項目であり、Ｊａｖａ（登録商標）のクラスファイルであれば、ｍａｇｉｃ  ｎｕｍｂｅｒ２４０１には通常ＣＡＦＥＢＡＢＥという値が保持される。
【００８５】
ｍｉｎｏｒ  ｖｅｒｓｉｏｎ２４０２は、このクラスファイルを生成したコンパイラのマイナーバージョン番号を示すものであり、ｍａｊｏｒ  ｖｅｒｓｉｏｎ２４０３は、このクラスファイルを生成したコンパイラのメジャーバージョン番号を示すものである。
【００８６】
ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ２４０４には後述するｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ［］２４０５で定義されるテーブルの要素数を保持する。ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ［］２４０５はクラスファイルの構造体とその副構造体内で参照する様々な文字列定数、クラス名、フィールド名、その他の定数を表現する可変長のテーブルである。テーブル内にエントリできる要素の数はｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ２４０４で定義した個数分エントリできる。
【００８７】
つまりｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ［０］、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ［１］、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ［２］、・・・、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ［（ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ２４０４にて定義された数）−１］をそれぞれ、クラスファイルの構造体とその副構造体内で参照する様々な文字列定数、クラス名、フィールド名、その他の定数のいずれかとしてそれぞれ表現させることができる。
【００８８】
ａｃｃｅｓｓ＿ｆｌａｇｓ２４０６はアクセスの許可や属性を示すマスクである。
【００８９】
ｔｈｉｓ  ｃｌａｓｓ２４０７、ｓｕｐｅｒ  ｃｌａｓｓ２４０８は、それぞれｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ［］２４０５のテーブル内にエントリされた定数への参照を示すものである。
【００９０】
ｉｎｔｅｒｆａｃｅｓ＿ｃｏｕｎｔ２４０９は後述するｉｎｔｅｒｆａｃｅｓ＿ｃｏｕｎｔ［］２４１０で定義される要素の数を保持する。ｉｎｔｅｒｆａｃｅｓ＿ｃｏｕｎｔ［］２４１０はｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ［］２４０５のテーブル内にエントリされた定数への参照を示すものである。
【００９１】
ｆｉｅｌｄｓ＿ｃｏｕｎｔ２４１１は後述するｆｉｅｌｄｓ＿ｃｏｕｎｔ［］２４１２の要素の数を保持するものである。ｆｉｅｌｄｓ＿ｃｏｕｎｔ［］２４１２はテーブルである。
【００９２】
ｍｅｔｈｏｄｓ＿ｃｏｕｎｔ２４１３は後述するｍｅｔｈｏｄｓ＿ｃｏｕｎｔ［］２４１４の要素の数を保持するものである。ｍｅｔｈｏｄｓ＿ｃｏｕｎｔ［］２４１４はテーブルである。
【００９３】
ａｔｔｒｉｂｕｔｅｓ＿ｃｏｕｎｔ２４１５は後述するａｔｔｒｉｂｕｔｅｓ＿ｃｏｕｎｔ［］２４１６の要素の数を保持するものである。ａｔｔｒｉｂｕｔｅｓ＿ｃｏｕｎｔ［］２４１６はテーブルである。
【００９４】
ベリファイヤ５０３はクラスファイル２４００をロードすると、例えば以下に示すようなチェックを行う。
【００９５】
（ａ）対象となるクラスファイル２４００のｍａｇｉｃ  ｎｕｍｂｅｒ２４０１に保持されている値をチェックし、保持されている値がＣＡＦＥＢＡＢＥでなければ、クラスファイル２４００をロードするのは妥当でないと判断する。
【００９６】
（ｂ）対象となるクラスファイル２４００の終わりに余計なバイトコードがあるかどうかをチェックし、あればクラスファイル２４００をロードするのは妥当でないと判断する。
【００９７】
（ｃ）クラスファイル内の一貫性や他のクラスファイルとの一貫性をチェックし、一貫性が無ければクラスファイル２４００をロードするのは妥当でないと判断する。これは例えばｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ［］２４０５、ｉｎｔｅｒｆａｃｅｓ＿ｃｏｕｎｔ［］２４１０、ｆｉｅｌｄｓ＿ｃｏｕｎｔ［］２４１２、ｍｅｔｈｏｄｓ＿ｃｏｕｎｔ［］２４１４、ａｔｔｒｉｂｕｔｅｓ＿ｃｏｕｎｔ［］２４１６でそれぞれ定義されるテーブルの要素数が、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ２４０４、ｉｎｔｅｒｆａｃｅｓ＿ｃｏｕｎｔ２４０９、ｆｉｅｌｄｓ＿ｃｏｕｎｔ２４１１、ｍｅｔｈｏｄｓ＿ｃｏｕｎｔ２４１３、ａｔｔｒｉｂｕｔｅｓ＿ｃｏｕｎｔ２４１５で保持される数を超えているかどうかをチェックするなどがある。
【００９８】
また、（ａ）〜（ｃ）に説明をしたクラスファイル２４００に含まれる構造体の形式的なチェック以外にベリファイヤ５０３はクラスファイルに含まれるメソッド内のコード属性からデータフロー解析による検証を行い、不整合が生じるようであればクラスファイル２４００をロードするは妥当でないと判断する。
【００９９】
クラスローダライブラリ５０２は、ベリファイヤ５０３において妥当でないと判定されたクラスファイルのロードはしない。
【０１００】
Ｊａｖａ（登録商標）ヒープ管理部は５０４、Ｊａｖａ（登録商標）アプリケーションが使用するワーキングメモリの確保を行う。ワーキングメモリはＲＡＭ１２５内に確保される。また、Ｊａｖａ（登録商標）ヒープ管理部５０４は、ガベージコレクションも行う。ガベージコレクションは、アプリケーション実行において確保していたワーキングメモリの領域を、その確保が不要となった後（例えばアプリケーション実行終了後など）に開放し、他の用途に再利用できるようにする公知の技術であり、詳細な説明は省略する。
【０１０１】
Ｊａｖａ（登録商標）ネイティブライブラリ５０５は、Ｊａｖａ（登録商標）アプリケーションから呼び出されるライブラリで、ＯＳ１２３や、Ｊａｖａ（登録商標）アプリケーション実行装置１１０が備える図１には記載されていないハードウェア、サブプログラム等で提供される機能をＪａｖａ（登録商標）アプリケーションへ提供する。
【０１０２】
ＪＩＴコンパイラ５０６は、バイトコードをＣＰＵ１２４が理解可能な実行形式に変換するものである。
【０１０３】
メタ情報管理部５０７は、アプリ取得プログラム１２１が取得したＪａｖａ（登録商標）アプリケーションの実行時保護レベルを決定するサブプログラムである。メタ情報管理部５０７の詳細については後ほど説明する。
【０１０４】
ＯＳ１２３は、Ｊａｖａ（登録商標）アプリケーション１１０の電源が投入されるとＣＰＵ１２４が起動するサブプログラムである。ＯＳは、オペレーティングシステムの略であり、Ｌｉｎｕｘ等が一例である。ＯＳ１２３は、他のサブプログラムを並行して実行するカーネルおよび、ライブラリで構成される公知の技術の総称であり、詳細な説明は省略する。ＯＳ１２３はＪａｖａ（登録商標）仮想マシン１２２をサブプログラムとして実行する。
【０１０５】
ＣＰＵ１２４はＪａｖａ（登録商標）仮想マシン１２２、ＯＳ１２３、アプリケーション取得部１２１が取得したプログラムを実行する。ＲＡＭ１２５は、具体的にはＳＲＡＭ、ＤＲＡＭ等の一時記憶メモリで構成され、ＣＰＵ１２４が処理を行う際、一時的にデータを保存するために使用される。
【０１０６】
ＲＯＭ１２６は、具体的にはフラッシュメモリや、ハードディスク等の不揮発性メモリで構成され、ＣＰＵ１２４から指示されたデータやプログラムを記憶する。安全な処理実行部１２７はＪａｖａ（登録商標）アプリケーションを安全に実行するためのプログラムである。安全な処理実行部１２７は、実行時にクラスファイルを盗聴、改ざんすることを困難にする保護アルゴリズムを１つ以上備えており、クラスファイルを盗聴、改ざんを困難にする保護アルゴリズムの具体例としては、ＯｖｅｒｌａｙＬｏａｄｅｒなどが挙げられる。以下、本実施の形態において、安全な処理実行部１２７の持つ保護アルゴリズムをＯｖｅｒｌａｙＬｏａｄｅｒとして説明する。なお、本実施の形態では、安全な処理実行部１２７の持つ保護アルゴリズムの具体例として、ＯｖｅｒｌａｙＬｏａｄｅｒを利用しているが、保護アルゴリズムは、Ｊａｖａ（登録商標）アプリケーションを実行時の盗聴、改ざんから保護するアルゴリズムであればよい。なお、安全な処理実行部１２７はＪａｖａ（登録商標）仮想マシンの内部に含まれていてもよい。
【０１０７】
ＯｖｅｒｌａｙＬｏａｄｅｒとは、アプリケーションの実行に必要な部分だけを復号化して、ＲＡＭ１２５上に保存し、必要のない部分は暗号化してＲＡＭ１２５上に保存する公知の技術である。
【０１０８】
安全な処理実行部１２７の構成の一例を、図５を参照しながら説明する。安全な処理実行部１２７は例えば、エリア管理部６１１、バイトコード管理部６１２、暗号化部６１３、復号化部６１４から構成される。本実施の形態では、エリア管理部６１１、バイトコード管理部６１２、暗号化部６１３、復号化部６１４は、Ｊａｖａ（登録商標）言語で記述されたＪａｖａ（登録商標）プログラムとしているが、同等の機能を有する、ネイティブ言語で記述されたプログラムや、ハードウェア（ＬＳＩまたは専用の信号処理回路など）で実現されていても構わない。
【０１０９】
エリア管理部６１１は、ＲＡＭ１２５上に平文のバイトコードを展開するための、エリアを確保する。エリア管理部６１１はバイトコードインタプリタ５０１が次に実行するバイトコードを確保したエリアに展開する。確保したエリアにバイトコードを展開する領域がなくなった場合には、十分な空き領域が確保できるまで、すでに展開されているバイトコードうちバイトコードインタプリタ５０１が使用中でないバイトコードの有無を調べ、あれば対応するバイトコードをエリアから削除し、この削除したエリアの領域を実行するバイトコードを展開する領域に割り当てるようにする。エリア管理部６１１が、ＲＡＭ１２５上に確保するエリアのサイズを大きくした場合、エリア上に展開される平文のバイトコードの数が多いために、ＲＡＭ１２５内のバイトコードを１回盗聴することにより、多くのバイトコードが盗まれ易くなるのに対し、エリア管理部６１１が、ＲＡＭ１２５上に確保するエリアのサイズを小さくした場合には、１回の盗聴により、盗まれるバイトコードの数は少ないが、エリア管理部６１１がバイトコードをエリアに展開する回数が増えるために実行時のオーバヘッドが大きくなるといった問題があるため、ＲＡＭ１２５内に確保するエリアの大きさを適切に選択する必要がある。
【０１１０】
Ｊａｖａ（登録商標）仮想マシン１２２のバイトコード管理部６１２は、ベリファイヤ５０３にてロードすることが妥当であると判定されたクラスファイルのバイトコードを受け取り、暗号化部６１３に対応するクラスファイルのバイトコードの暗号化を依頼する。
【０１１１】
暗号化部６１３はバイトコード管理部６１２より依頼されたＲＡＭ１２５上に保存されているクラスファイルのバイトコードを受け取り、所定のアルゴリズムにより暗号化するプログラムである。
【０１１２】
また、バイトコード管理部６１２は暗号化部６１３から暗号化されたバイトコードを受け取ると、バイトコードのメソッド名とバイトコードの先頭アドレスと、バイトコードの保護アルゴリズムを対応付けてＲＡＭ１２５上に保存する。
【０１１３】
復号化部６１４は、ＲＡＭ１２５上に保存されている暗号化されたバイトコードを所定のアルゴリズムにより復号化するプログラムである。
【０１１４】
以上が安全な処理実行部１２７の構成の一例である。なお、安全な処理実行部１２７はハードウェアにより構成される部分を含んでいてもよい。例えば、前記暗号化部６１３および前記復号化部６１４はハードウェアで実装されていてもよい。
【０１１５】
次に、Ｊａｖａ（登録商標）アプリケーション実行装置１１０がＪａｖａ（登録商標）アプリケーションを保護しながら実行する方法について説明する。
【０１１６】
以下では、家電機器のような暗号化鍵を管理するハードウェアを備えており、前記暗号化鍵が盗まれる可能性がないというようなセキュリティサポートがある環境に実装されているＪａｖａ（登録商標）アプリケーション実行装置の動作を説明する。また、Ｊａｖａ（登録商標）アプリケーション実行装置は図６に示す保護レベル対応表７００をＲＯＭ１２６に予め保持している。
【０１１７】
まず、図６の保護レベル対応表について説明する。図６の保護レベル対応表７００は実行時保護レベルと、保護アルゴリズムから構成される。なお、Ｊａｖａ（登録商標）アプリケーション実行装置１１０が保護強度を変化することのできる保護アルゴリズムを備えている場合には、保護強度を示すパラメータを実行時保護レベルと対応付けて記述していてもよい。前記実行時保護レベルは図３における実行時保護レベル４２２と対応付けされた項目である。保護アルゴリズムは実行時の保護の方法を表している。また、各Ｊａｖａ（登録商標）アプリケーション実行装置１１０は１つ以上の保護レベル対応表を保持していなければならない。本実施の形態では、保護アルゴリズムとはアプリケーションの所定の単位（この例ではクラスファイル）をＲＡＭ１２５内の所定のサイズのエリア内に展開させて管理するようなプログラムがエリア管理部６１１に組み込まれたものを例に説明を行う。
【０１１８】
図６の保護レベル対応表７００について詳細に説明する。７１１の行は図３に示すセキュリティメタファイル３１４の実行時保護レベル３１４１２が「０」の場合には、クラス名４２１に記載のクラスファイルを実行するときに保護アルゴリズムが必要ないことを表している。同様に７１２は実行時保護レベル３１４１２が「１」のときにも、実行時保護が必要ないことを表している。また、７１３の行はセキュリティメタファイル３１４の実行時保護レベル３１４１２が「２」の場合には、対応するクラスファイル３１４１１を実行するときには保護アルゴリズム「Ｘ」で保護する必要があることを示している。また、同様に７１４の行は実行時保護レベル３１４１２が「３」のときに、保護アルゴリズム「Ｙ」で保護する必要があることを示している。ここで、保護アルゴリズム「Ｘ」は保護アルゴリズム「Ｙ」よりも保護強度が強い必要がある。例えば、保護アルゴリズム「Ｘ」と「Ｙ」がともにＯｖｅｒｌａｙＬｏａｄｅｒである場合には、保護アルゴリズム「Ｙ」で管理するエリアのサイズは保護アルゴリズム「Ｘ」の管理するエリアよりも小さくなっている等のＪａｖａ（登録商標）アプリケーションの盗聴、改ざんがより困難になるアルゴリズムである必要がある。なお、図６の保護レベル対応表７００では保護レベルを「０」、「１」、「２」「３」の４段階としているが、これに限るものではない。保護アルゴリズムが必要、不必要の２通りであってもよいし、３段階以上に細かく設定してもよい。
【０１１９】
以下の説明においては、説明が簡単なようにＪａｒファイル１００の一例として、図８を利用する。図８のＪａｒファイル９００は、図２のＪａｒファイル１００と同じ構成であり、各要素に具体的な名前を与えている。
【０１２０】
また、セキュリティメタファイル３１４の一例として、図９を利用する。図９のセキュリティメタファイル９１４はＣｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓ９１５のためのクラス別メタ情報１０１１とＮｏｒｍａｌ．ｃｌａｓｓ９１７のためのクラス別メタ情報１０１２から構成される。
【０１２１】
また、Ｃｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓ９１５の一例として、図１０に示すようなｍｅｔｈｏｄＡ１１１１と、ｍｅｔｈｏｄＢ１１１２から構成されていると仮定する。また、Ｎｏｒｍａｌ．ｃｌａｓｓ９１７の一例として、図１１に示すように、ｍｅｔｈｏｄＣ１２１１、ｍｅｔｈｏｄＤ１２１２から構成されていると仮定する。
【０１２２】
まず、Ｊａｖａ（登録商標）アプリケーション実行装置１１０の起動からダウンロード可能なプログラム１００の実行が開始するまでを図１２を参照しながら説明する。
【０１２３】
ユーザがＪａｖａ（登録商標）アプリケーション実行装置１１０の電源を投入する（ステップ１３０１）。次に、ＣＰＵ１２４はＯＳ１２３を起動する（ステップ１３０２）。
【０１２４】
ＯＳ１２３がＲＯＭ１２６に保存されているＪａｖａ（登録商標）仮想マシン１２２を構成するプログラムをＲＡＭ１２５上にロードし、Ｊａｖａ（登録商標）仮想マシン１２２を起動する（ステップ１３０３）。
【０１２５】
ＯＳ１２３がＲＯＭ１２６に保存されている図５の安全な処理実行部１２７を構成するプログラムをＲＡＭ１２５上にロードし、安全な処理実行部１２７を起動する（ステップ１３０４）。エリア管理部６１１は、ＲＡＭ１２５上にバイトコードを展開するための、エリアを確保する。
【０１２６】
Ｊａｖａ（登録商標）仮想マシン内のバイトコードインタプリタ５０１がアプリ取得プログラム１２１を起動し、アプリ取得プログラム１２１はダウンロード可能なプログラム１００を圧縮したＪａｒファイル９００を取り込んでＲＡＭ１２５に保存する（ステップ１３０５）。
【０１２７】
メタ情報管理部５０７がＲＡＭ１２５に保存したＪａｒファイル９００の中のセキュリティメタファイル９１４を読み出し、ＲＡＭ１２５上に保存する。また、ＲＯＭ１２６に保存されている図６の保護レベル対応表７００をＲＡＭ１２５上にロードする（ステップ１３０６）。
【０１２８】
バイトコードインタプリタ５０１がＪａｒファイル９００の実行を開始する（ステップ１３０７）。
【０１２９】
以上説明した処理で、Ｊａｖａ（登録商標）アプリケーションが実行可能な状態になったので、次に、Ｊａｖａ（登録商標）アプリケーション実行装置１１０が図８のＣｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓ９１５をロードしてからバイトコードインタプリタ５０１がｍｅｔｈｏｄＡ１１１１を処理するまでの流れを、図１３を参照しながら説明する。
【０１３０】
まず、バイトコードインタプリタ５０１はＣｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓ９１５のメソッドを初めて実行するときに、クラスローダライブラリ５０２にクラスロードの依頼をする（ステップ１４０１）。
【０１３１】
クラスローダライブラリ５０２がＣｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓ９１５のクラスロード処理を行う。クラスロード処理の詳細は、書籍「Ｊａｖａ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ」に記載されているため、ここでは、詳細な説明を省略する。クラスローダライブライブラリ５０２はバイトコードインタプリタ５０１に処理を戻す。
【０１３２】
次にバイトコードインタプリタ５０１はＣｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓ９１５の検証をベリファイヤ５０３に依頼する（ステップ１４０２）。
【０１３３】
ベリファイヤ５０３はＣｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓ９１５の検証を行い、処理をバイトコードインタプリタ５０１に戻す。ベリファイヤの動作の詳細は書籍「Ｊａｖａ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ」に記載されているため、ここでの詳細な説明は省略する。
【０１３４】
次にバイトコードインタプリタ５０１はメタ情報管理部５０７にＣｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓ９１５の実行時の保護レベルをメタ情報管理部５０７に問い合わせる（ステップ１４０３）。
【０１３５】
ここで、メタ情報管理部５０７の動作を、図１４を参照しながら説明する。
【０１３６】
メタ情報管理部５０７は図９におけるセキュリティメタファイル９１４の各クラス別メタ情報のクラス名を検索する（ステップ１５０１）。メタ情報管理部５０７はクラス別メタ情報１０１１のクラス名１０２１がＣｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓとなっている情報を見つける。次に、メタ情報管理部５０７は、クラス名１０２１に対応する実行時保護レベル１０２２を読み出し、実行時保護レベルが「３」であることを知る（ステップ１５０２）。次にメタ情報管理部５０７は図６の保護レベル対応表７００をＲＡＭ１２５から読み出す。保護レベル対応表７００の実行時保護レベルの列から「３」になっている行を検索し、行７１４を見つける（ステップ１５０３）。ここで、保護レベル対応表７００に、実行時保護レベルが「３」である行が存在しない場合には（ステップ１５０４）、Ｊａｖａ（登録商標）アプリケーションの実行を停止する（ステップ１５０７）。メタ情報管理部５０７は実行時保護レベルが「３」である、７１４の行から、実行時の保護アルゴリズムは「Ｙ」を読み出し（ステップ１５０５）、保護アルゴリズム「Ｙ」をバイトコードインタプリタ５０１に通知する（ステップ１５０６）。
【０１３７】
以上がメタ情報管理部５０７の動作の説明である。
【０１３８】
図１３に戻ってバイトコードインタプリタ５０１の処理の動作を説明する。
【０１３９】
バイトコードインタプリタ５０１は、図５のバイトコード管理部６１２にＣｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓ９１５内にあるメソッドのバイトコードのＲＡＭ１２５上におけるアドレスと、前記バイトコードのメソッド名および保護アルゴリズム「Ｙ」を通知する。
【０１４０】
バイトコード管理部６１２がバイトコードを暗号化する処理を、図１５を参照しながら説明する。
【０１４１】
バイトコード管理部６１２はバイトコードのＲＡＭ上のアドレスを暗号化部６１３に通知する（ステップ１６０１）。暗号化部６１３は、バイトコードを暗号化し、ＲＡＭ１２５に保存し、暗号化したバイトコードのアドレスをバイトコード管理部６１２に通知する（ステップ１６０２）。バイトコード管理部６１２に暗号化したバイトコードのＲＡＭ１２５上のアドレスと、暗号化されたバイトコードに含まれるメソッド名および保護アルゴリズム「Ｙ」を図１７の暗号化バイトコード対応表１８００ように関連付けてＲＡＭ１２５上に記憶させておく（ステップ１６０３）。以下では、暗号化されたバイトコードを「暗号化バイトコード」と称する。
【０１４２】
以上が、バイトコード管理部６１２のバイトコードを暗号化するときの動作である。
【０１４３】
図１３に戻って、バイトコードインタプリタ５０１の動作の説明をする。
【０１４４】
バイトコードの暗号化が終了した後、平文で保存されているＲＡＭ１２５上のバイトコードは盗聴される危険があるため消去する（１４０５）。次にバイトコードインタプリタ５０１は図５のエリア管理部６１１に実行するバイトコードのメソッド名「ｍｅｔｈｏｄＡ」を渡して、復号化の依頼をする。
【０１４５】
ここで、エリア管理部６１１の動作を、図１６を参照しながら説明する。
【０１４６】
エリア管理部６１１は、バイトコード管理部６１２にメソッド名「ｍｅｔｈｏｄＡ」を通知して、ｍｅｔｈｏｄＡの暗号化バイトコードのアドレス取得と保護アルゴリズムの通知を依頼する（ステップ１７０１）。バイトコード管理部６１２は図１７の暗号化バイトコード対応表１８００から「ｍｅｔｈｏｄＡ」に対応付けされている暗号化バイトコードと保護アルゴリズムを検索し、暗号化バイトコードのＲＡＭ１２５上のアドレス「０ｘ１２３４１２３４」と保護アルゴリズム「Ｙ」をエリア管理部６１１に通知する。エリア管理部６１１は保護アルゴリズム「Ｙ」に応じたサイズのエリアを検索する。ここで、対応するサイズのエリアが見つからなかった場合には（ステップ１７０２）、ＲＡＭ１２５にエリアを確保する（ステップ１７０３）。エリアが見つかったら前記エリア内に展開すべき場所を探す（ステップ１７０４）。ここで、エリアに空き領域がない場合には（ステップ１７０５）、前記エリアから必要な空き領域が得られるまで、すでに前記エリアに展開されているバイトコードのうちバイトコードインタプリタ５０１が使用中でないバイトコードを削除する（ステップ１７０６）。エリア管理部６１１は暗号化バイトコードのアドレス「０ｘ１２３４１２３４」と、前記展開すべき場所のアドレスを復号化部６１４に通知して、復号を依頼する（ステップ１７０７）。復号化部６１４は前記エリア内の指定された場所に、暗号化バイトコードを復号する。復号化部は処理の終了をエリア管理部６１１に通知し、エリア管理部６１１は前記エリア上のｍｅｔｈｏｄＡ１１１１のバイトコードが復号されたアドレスをバイトコードインタプリタ５０１に通知する（ステップ１７０８）。
【０１４７】
以上が、エリア管理部６１１のバイトコードを復号するまでの動作である。
【０１４８】
図１３に戻って、バイトコードインタプリタ５０１の動作を説明する。
【０１４９】
バイトコードインタプリタ５０１は安全な処理実行部１２７から受け取ったｍｅｔｈｏｄＡ１１１１のバイトコードのアドレスの先頭から、内容を解釈し実行するインタプリタ処理を行う。
【０１５０】
以上が、家電機器等、セキュリティサポートがある環境に実装されたＪａｖａ（登録商標）アプリケーション実行装置が、Ｃｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓをロードしてからバイトコードインタプリタで実行するまでの動作である。
【０１５１】
次に、Ｊａｖａ（登録商標）アプリケーション実行装置が、Ｎｏｒｍａｌ．ｃｌａｓｓ９１７のｍｅｔｈｏｄＣ１２１１を実行するときの動作を、図１８を参照しながら説明する。バイトコードインタプリタ５０１がメタ情報管理部５０７に保護レベルを問い合わせる以前の動作はＣｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓの実行と同様であるため、説明は省略する。
【０１５２】
メタ情報管理部５０７は図９におけるセキュリティメタファイル９１４の各クラス別メタ情報のクラス名を検索する（ステップ１９０１）。メタ情報管理部５０７はクラス名が「ｌｏｃａｌ／Ｎｏｒｍａｌ．ｃｌａｓｓ」となっている１０３１を見つける。次にメタ情報管理部５０７は、実行時保護レベル１０３２を読み出し、実行時保護レベルが「１」であることを知る（ステップ１９０２）。次に、メタ情報管理部５０７は図６の保護レベル対応表７００から実行時保護が必要ないことを知る（ステップ１９０３）。メタ情報管理部５０７はバイトコードインタプリタ５０１に実行時保護が必要ないことを通知する（ステップ１９０４）。
【０１５３】
バイトコードインタプリタ５０１は、Ｎｏｒｍａｌ．ｃｌａｓｓ９１７のｍｅｔｈｏｄＣの実行を開始する。
【０１５４】
以上が、家電機器等、セキュリティサポートがある環境に実装されたＪａｖａ（登録商標）アプリケーション実行装置１１０がＮｏｒｍａｌ．ｃｌａｓｓをロードしてから、バイトコードインタプリタ５０１で実行を開始するまでの動作である。
【０１５５】
次に、異なる環境に実装されているＪａｖａ（登録商標）アプリケーション実行装置１１０がアプリケーションを保護しながら実行する動作を、図１９を参照しながら説明する。
【０１５６】
以下では、パーソナルコンピュータのように、ハードウェア等によるセキュリティサポートがなく、盗聴、改ざんが容易に行えるＪａｖａ（登録商標）アプリケーション実行装置を仮定する。また、前記Ｊａｖａ（登録商標）アプリケーション実行装置は図７に示す保護レベル対応表８００をＲＯＭ１２６上に予め保持している。図７の保護レベル対応表８００の構成は図６の保護レベル対応表７００と同じである。保護レベル対応表８００に実行時保護レベルが「３」の行がないのは、Ｊａｖａ（登録商標）アプリケーション実行装置にハードウェア等によるセキュリティサポートがなく、実行時保護レベルが「３」に相当する保護アルゴリズムが存在しないためである。
【０１５７】
Ｊａｖａ（登録商標）アプリケーション実行装置がＣｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓ９１５をロードしてからｍｅｔｈｏｄＡ１１１１の実行を開始するまでの動作の説明をする。メタ情報管理部５０７が図９のセキュリティメタファイルから実行時保護レベル「３」であることを読み出す以前の動作は家電機器等のセキュリティサポートのある環境に実装されているＪａｖａ（登録商標）アプリケーション実行装置がＣｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓを実行するときと同様であるため、説明を省略する。
【０１５８】
メタ情報管理部５０７は図７の保護レベル対応表８００をＲＡＭ１２５から読み出す。保護レベル対応表８００の実行時保護レベルの列から「３」になっている行を検索する（ステップ２００１）。保護レベル対応表８００に実行時保護レベルが「３」になっている行が存在しないため（ステップ２００２）Ｊａｖａ（登録商標）アプリケーションの実行を停止する（ステップ２００３）。ここで、Ｊａｖａ（登録商標）アプリケーションの実行の停止方法はいかなる方法であってもよい。例えば、Ｊａｖａ（登録商標）アプリケーション実行装置１１０の電源を強制的に切ってもよいし、Ｊａｖａ（登録商標）アプリケーション実行装置１１０を再起動してもよい。
【０１５９】
以上が、パーソナルコンピュータ等に実装されたＪａｖａ（登録商標）アプリケーション実行装置１１０がＣｏｎｆｉｄｅｎｔｉａｌ．ｃｌａｓｓを実行するときの動作である。
【０１６０】
以上の説明したように、セキュリティメタファイル３１４を用いるとともにアプリケーション実行装置内に保存された保護レベル対応表８００とを用い、アプリケーションは実行時に所定の単位を動作させるときに用いる保護アルゴリズムを直接指定するのではなく、保護レベルを指定し装置内に保存された保護レベル対応表８００により保護レベル対応する保護アルゴリズムを実行できるようにしている。
【０１６１】
これはアプリケーションを配信する側からすれば、対象とする端末毎に異なるアプリケーションを配信する（つまりＰＣへ配信するために難読性の高いプログラムコードを有するアプリケーションを配信し、家電機器に配信するために難読性の低いアプリケーションを配信する）必要が無くなり、同一のアプリケーションを配信できるようになるので配信側からすれば、配信するプログラムを開発するための負荷が大幅に削減されることになる。一方、受信側においては保護レベル対応表８００において、受信側の環境（ハードウェアの構成、セキュリティサポート有無など）に応じて保護レベルと保護アルゴリズムの関係を保存しておくことにより、受信側の端末に応じたアプリケーションの実行、盗聴／改竄の保護を可能とする。
【０１６２】
更に、アプリケーションがオブジェクト指向型の言語にて記述されていれば、アプリケーションをクラス単位に分割し、このクラス単位毎の保護レベルを指定するように構成し、実行時において、秘匿性の低いクラスの処理について保護レベルを低くすることにより、実行時におけるオーバーヘッドを極力抑えることが可能となる。
【０１６３】
なお、本実施の形態では、クラスファイル単位で実行時保護レベルを定義していたが、メソッド単位、Ｊａｒファイル単位およびＪａｖａ（登録商標）アプリケーション単位での適用も可能である。メソッド単位で、実行時保護レベルを定義する場合には、図３におけるセキュリティメタファイル３１４にメソッド別メタ情報を格納し、メソッド名および、実行時保護レベルを記載することで、本発明の適用が可能になる。Ｊａｒファイル単位で、実行時保護レベルを定義する場合には、Ｊａｒファイルと図３のセキュリティメタファイル３１４を対応付ける。また、セキュリティメタファイル３１４にはＪａｒ別メタ情報を格納し、Ｊａｒファイル名および実行時保護レベルを記載する。このときセキュリティメタファイル３１４とＪａｒファイルとは別個のファイルとしておくようにするとともに、Ｊａｒファイルを解凍する前にセキュリティメタファイル３１４を読み出すようにすればよい。
【０１６４】
実行時には、クラスロード時にバイトコードインタプリタ５０１が必要としているクラスファイルの格納されているＪａｒファイルの実行時保護アルゴリズムをメタ情報管理部５０７に問い合わせることで本発明の適用が可能になる。Ｊａｖａ（登録商標）アプリケーション単位で、実行時保護レベルを定義する場合には、Ｊａｖａ（登録商標）アプリケーションと図３のセキュリティメタファイル３１４を対応付けることで、本発明の実施は可能となる。
【０１６５】
（実施の形態２）
以下、本実施の形態におけるＪａｖａ（登録商標）アプリケーション実行装置について、図２０を参照しながら、説明する。
【０１６６】
本実施の形態は、Ｊａｖａ（登録商標）アプリケーション開発者が、セキュリティメタファイルをＪａｖａ（登録商標）アプリケーションに付加しなかった場合に、クラスファイルを安全に実行し、実行時のオーバヘッドを小さく抑える方法である。
【０１６７】
図２０はＪａｖａ（登録商標）アプリケーションが実行装置の構成を示すブロック図である。
【０１６８】
図２０において、図１と同一の符号を付したものは同一もしくはこれに相当するものであり、ここではその説明を省略する。
【０１６９】
セキュリティメタファイル生成部１２８は、Ｊａｖａ（登録商標）アプリケーションを構成するクラスファイルを解析して、クラスファイルに対応するセキュリティメタファイルを生成するプログラムである。セキュリティメタファイル生成部１２８はＪａｖａ（登録商標）プログラムであってもよいし、ネイティブ言語で記述されたプログラムや、ハードウェアで実現されていてもよい。
【０１７０】
次に、Ｊａｖａ（登録商標）アプリケーション実行装置１１０がＪａｖａ（登録商標）アプリケーションを保護しながら実行する方法について図２１および図２２を参照しながら説明する。図２１のＪａｒファイル２２００はダウンロード可能なプログラム１００を構成するファイルである。Ｊａｒファイル２２００の構成は図２のＪａｒファイル３００からセキュリティメタファイル３１４を削除したものであり、詳細な説明は省略する。
【０１７１】
アプリ取得プログラム１２１がダウンロード可能なプログラム２１００を取得し、ＲＡＭ１２５に保存する（２３０１）。セキュリティメタファイル生成部１２８はＲＡＭ２１２５から、Ｊａｒファイル２２００を構成するクラスファイルＡ２２１５およびクラスファイルＢ２２１７を解析し、実行時保護が必要かどうかの判定をする（２３０２）。実行時保護が必要なクラスファイルの例としては、Ｊａｖａ（登録商標）言語のセキュリティパッケージのＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）を利用しているクラスファイル等が挙げられる。Ｊａｖａ（登録商標）言語のセキュリティパッケージとは、Ｊａｖａ（登録商標）アプリケーションが利用できる鍵管理、証明書管理および暗号化等の機能を提供するパッケージである。Ｊａｖａ（登録商標）言語のセキュリティパッケージに詳細は、書籍「Ｊａｖａ（登録商標）  Ｓｅｃｕｒｉｔｙ（ＩＳＢＮ  ０５９６００１５７６）」等の多くの書籍に解説されている。ここでは、詳細な説明を省略する。セキュリティメタファイル生成部１２８は、クラスファイル（図２２に示す例では、クラスファイルＡ２２１５およびクラスファイルＢ２２１７）を解析し、セキュリティパッケージのＡＰＩを呼び出すコードがあるかどうかを調べる。次に、セキュリティメタファイル生成部１２８は解析結果から、セキュリティパッケージのＡＰＩを呼び出すコードがあるクラスは対応する保護レベルを高く指定し、そうでないクラスは対応する保護レベルを低く指定するようなセキュリティメタファイル３１４を生成する（２３０３）。次にセキュリティメタファイル生成部１２８は、生成した前記セキュリティメタファイル３１４をＪａｒファイル２２００のメタディレクトリ２２１２に格納して、ＲＡＭ２１２５に保存する（２３０４）。
【０１７２】
なお、本実施の形態においては、セキュリティメタファイル３１４をＪａｒファイル２２００内のメタディレクトリ２２１２に格納していたが、この限りではない。例えば、セキュリティメタファイル３１４をＪａｒファイル２２００とは別のＲＡＭ上に格納してもよい。また、セキュリティメタファイル３１４をＪａｒファイル２２００内の各ディレクトリ単位で生成し、格納してもよい。また、メタファイル２２１３内に追加の形式をとってもよい。
【０１７３】
バイトコードインタプリタ５０１がＪａｒファイル２２００の実行を開始する以降の動作は、実施の形態１と同様であるため、説明を省略する。
【０１７４】
以上のように構成することにより、ダウンロード可能なプログラム１００にセキュリティメタファイルが存在しない場合においても、実行時保護が必要なクラスファイルは、実行時に盗聴、改ざんが困難になる。
【産業上の利用可能性】
【０１７５】
本発明に係るアプリケーション実行方法および実行装置は、Ｊａｖａ（登録商標）アプリケーションにセキュリティメタファイルを付加することで、端末の特性を生かして、Ｊａｖａ（登録商標）アプリケーションを実行時の盗聴、改ざんから保護することが可能となる。本発明を利用することで、今後本格展開が予想されるＪａｖａ（登録商標）アプリケーションのダウンロード配信ビジネスにおいて、コンテンツ作成者の権利を保護することができる。
【図面の簡単な説明】
【０１７６】
【図１】本発明に係るＪａｖａ（登録商標）アプリケーション実行装置の実施の形態の構成図
【図２】本発明に係るＪａｒファイルの構成の一例を示す図
【図３】本発明に係るセキュリティメタファイルの構成を示す図
【図４】本発明に係るＪａｖａ（登録商標）仮想マシンの構成の一例を示す図
【図５】本発明に係る安全な処理実行部の構成の一例を示す図
【図６】本発明に係る実行時保護レベルと保護アルゴリズムの対応関係の一例を示す図
【図７】本発明に係る実行時保護レベルと保護アルゴリズムの対応関係の一例を示す図
【図８】本発明に係るＪａｒファイルの構成の一例を示す図
【図９】本発明に係るセキュリティメタファイルの構成の一例を示す図
【図１０】本発明に係るクラスファイルの構成の一例を示す図
【図１１】本発明に係るクラスファイルの構成の一例を示す図
【図１２】本発明に係るＪａｖａ（登録商標）アプリケーション実行装置を起動するフローチャート
【図１３】本発明に係るＪａｖａ（登録商標）アプリケーション実行装置がＪａｖａ（登録商標）アプリケーションの実行する処理のフローチャート
【図１４】本発明に係るメタ情報管理部が実行時保護レベルを読み出す処理のフローチャート
【図１５】本発明に係る安全な処理実行部がバイトコードを暗号化する処理のフローチャート
【図１６】本発明に係る安全な処理実行部がバイトコードを復号化する処理のフローチャート
【図１７】本発明に係るメソッド名と暗号化バイトコードの対応関係の一例を示す図
【図１８】本発明に係るメタ情報管理部が実行時保護レベルを読み出す処理のフローチャート
【図１９】本発明に係るメタ情報管理部が実行時保護レベルを読み出し、Ｊａｖａ（登録商標）アプリケーションの実行を停止する処理のフローチャート
【図２０】本発明に係るＪａｖａ（登録商標）アプリケーション実行装置の実施の形態の構成図
【図２１】本発明に係るＪａｒファイルの構成の一例を示す図
【図２２】本発明に係るセキュリティメタファイル生成部がセキュリティメタファイルを生成する処理のフローチャート
【図２３】従来の難読化方法の実施の形態の構成図
【図２４】クラスファイルに含まれる項目を示す図
【符号の説明】
【０１７７】
１００    ダウンロード可能なプログラム
１１０    Ｊａｖａ（登録商標）アプリケーション実行装置
１２０    ソフトウェア実行部
１２１    アプリ取得プログラム
１２２    Ｊａｖａ（登録商標）仮想マシン
１２３    ＯＳ
１２４    ＣＰＵ
１２５    ＲＡＭ
１２６    ＲＯＭ
１２７    安全な処理実行部
【図１】
2008040853.tif 000003
【図２】
2008040853.tif 000004
【図３】
2008040853.tif 000005
【図４】
2008040853.tif 000006
【図５】
2008040853.tif 000007
【図６】
2008040853.tif 000008
【図７】
2008040853.tif 000009
【図８】
2008040853.tif 000010
【図９】
2008040853.tif 000011
【図１０】
2008040853.tif 000012
【図１１】
2008040853.tif 000013
【図１２】
2008040853.tif 000014
【図１３】
2008040853.tif 000015
【図１４】
2008040853.tif 000016
【図１５】
2008040853.tif 000017
【図１６】
2008040853.tif 000018
【図１７】
2008040853.tif 000019
【図１８】
2008040853.tif 000020
【図１９】
2008040853.tif 000021
【図２０】
2008040853.tif 000022
【図２１】
2008040853.tif 000023
【図２２】
2008040853.tif 000024
【図２３】
2008040853.tif 000025
【図２４】
2008040853.tif 000026