(57)【要約】実行装置は、オブジェクト指向言語で作成されたアプリケーションプログラムを実行するものであって、アプリケーションは、１以上のメソッドを有する１以上のクラスと秘匿の必要性の有無を表す秘匿性情報とを含んでおり、前記秘匿性情報に基づいて、暗号化が必要であるか否かを判断し、メソッドを実行する際に、メソッドが操作するデータを含むオブジェクトをメモリに記録し、暗号化が必要であると判断された場合は、記録されるオブジェクト内のデータは暗号化されたデータを記録する。【特許請求の範囲】
【請求項１】
オブジェクト指向言語で作成されたアプリケーションプログラムを実行する実行装置であって、
前記アプリケーションプログラムは、１以上のメソッドを有する１以上のクラスと秘匿の必要性の有無を表す秘匿性情報とを含んでおり、
前記秘匿性情報に基づいて、暗号化が必要であるか否かを判断する暗号化判断手段と、
前記メソッドを実行する際に、前記メソッドが操作するデータを含むオブジェクトをメモリに記録するオブジェクト記録手段とを備え、
前記暗号化判断手段で暗号化が必要であると判断された場合においては、前記オブジェクト記録手段は、暗号化されたデータを含むオブジェクトを記録する
ことを特徴とする実行装置。
【請求項２】
前記秘匿性情報は、更に、秘匿の度合いを示す情報を含み、
前記実行装置は、更に、前記秘匿性情報に基づいて暗号化方式を決定する暗号方式決定手段を備え、
前記暗号化判断手段で暗号化が必要であると判断された場合においては、前記オブジェクト記録手段は、前記暗号方式決定手段で決定された暗号化方式で暗号化されたデータを含むオブジェクトを記録する
ことを特徴とする請求項１記載の実行装置。
【請求項３】
前記オブジェクト内のデータを書き換えるときは、前記データが暗号化されている場合は、暗号化されたデータを記録する
ことを特徴とする請求項１記載の実行装置。
【請求項４】
前記メモリに記録されたオブジェクトは、オブジェクト内のデータが暗号化されているか否かを示す情報を有し、
前記情報がオブジェクト内のデータが暗号化されていることを示している場合は、暗号化されたデータを記録する
ことを特徴とする請求項３記載の実行装置。
【請求項５】
前記実行装置は、更に、データが他のデータの所在位置特定に必要なデータであるか否かを判別する判別手段を備え、
前記判別手段が、他のデータの所在位置特定に必要なデータであると判別したデータの場合は、暗号化を抑止する
ことを特徴とする請求項１記載の実行装置。
【請求項６】
プログラムを実行する実行装置であって、
前記プログラムは、データ部と秘匿の必要性の有無を表す秘匿性情報とを含んでおり、
前記秘匿性情報に基づいて、暗号化が必要であるか否かを判断する暗号化判断手段と、
前記実行可能プログラムを実行する際に、前記データ部をメインメモリにロードするロード手段とを備え、
前記ロード手段は、前記暗号化判断手段で暗号化が必要であると判断された場合は、暗号化してデータ部をロードする
ことを特徴とする実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、プログラムの盗聴および改竄を防止する技術に関し、特に、プログラム実行時に、プログラムが盗聴および改竄されることを防止する技術に関する。
【背景技術】
【０００２】  近年、様々なアプリケーション・プログラム（以下、「アプリケーション」という。）が、パソコンをはじめ、デジタルテレビや携帯電話機などの情報処理機能を有した装置で実行されている。
これらのアプリケーションは、元々その装置に組み込まれていたものや、ユーザが購入し乗せたもの、また、プログラム配信サービスによって提供されているものなど様々である。プログラム配信サービスによるものとは、例えば、インターネットを介してダウンロードしたり、デジタル放送の放送波に多重化されて送信されてくるものである。【０００３】  このように、現在、アプリケーションを実行できる機能を有している装置（以下、「実行装置」という。）では、多種多様な用途・目的のプログラムが実行されていることになる。
その一方で、プログラムが改竄されたり、データが盗まれたりという不正行為が起こっている。このような不正行為は、プログラム配信サービス等の円滑な実施の障害となることから、プログラムの改竄等を防止する技術が開発されている。【０００４】  例えば、ＣＰＵ（中央処理装置：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の外部のメモリには、暗号化したプログラムを置くこととし、ＣＰＵに読込む際に復号するという技術である（特許文献１、図１１参照）。この方法であれば、デバッガ等を用いてメモリを参照したり、メモリの内容を書き換えてプログラムの動作を追ったりという方法によるプログラムの解析が非常に困難となり、結果としてプログラムの改竄やデータの盗聴を防止できる可能性が増大することになる。
【特許文献１】特開平２−２９７６２６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】  しかし、メモリ上に置くプログラムの全てを暗号化し、ＣＰＵが必要とする都度に復号化処理を行い、メモリに書き出す都度に暗号化処理を行うため、実行速度が遅くなってしまうという問題がある。
そこで、本発明は、改竄されたり、盗まれたりしては困るようなデータ等の改竄・盗聴を防止しつつ、プログラム実行速度の低下が気にならないような実行装置の提供を目的とする。
【課題を解決するための手段】
【０００６】  上記課題を解決する為に、本発明の実行装置は、オブジェクト指向言語で作成されたアプリケーションプログラムを実行する実行装置であって、前記アプリケーションプログラムは、１以上のメソッドを有する１以上のクラスと秘匿の必要性の有無を表す秘匿性情報とを含んでおり、前記秘匿性情報に基づいて、暗号化が必要であるか否かを判断する暗号化判断手段と、前記メソッドを実行する際に、前記メソッドが操作するデータを含むオブジェクトをメモリに記録するオブジェクト記録手段とを備え、前記暗号化判断手段で暗号化が必要であると判断された場合においては、前記オブジェクト記録手段は、暗号化されたデータを含むオブジェクトを記録することを特徴とする。
【発明の効果】
【０００７】  本発明に係る実行装置は、上述の構成を備えることにより、アプリケーションが実行されている間、メインメモリに記録されるデータのみを暗号化しておくことができるので、暗号化等に必要な処理時間を減らし、かつ、アプリケーションで扱うデータの盗聴・改竄を困難にすることができるようになる。
すなわち、プログラムは通常、命令部とデータ部とで構成されるが、保護したいものがデータである場合は、そのデータのみを暗号化すればよい。その結果として、命令部にアクセスする場合には、暗号化復号化の処理時間が不要になり、全体として保護したいものは保護しつつ、処理時間も最小限度に抑えることが出来るようになる。【０００８】  ここで、秘匿性情報が示す秘匿の必要性の有無の対象は、アプリケーション全体という単位、クラス単位、メソッド単位、さらにはフィールド単位などであってもよい。
また、前記秘匿性情報は、更に、秘匿の度合いを示す情報を含み、前記実行装置は、更に、前記秘匿性情報に基づいて暗号化方式を決定する暗号方式決定手段を備え、前記暗号化判断手段で暗号化が必要であると判断された場合においては、前記オブジェクト記録手段は、前記暗号方式決定手段で決定された暗号化方式で暗号化されたデータを含むオブジェクトを記録することとしてもよい。【０００９】  これにより実行装置は、アプリケーションの秘匿の度合いによって、暗号化のアルゴリズムを換えることができるので、アプリケーションの重要度とアプリケーションの実行速度とを考慮して、暗号化方式を決めることが出来るようになる。
ここで、秘匿性情報は、暗号化をすべきか否かの情報のみならず、どのようなレベルで保護すべきか、また、どのようなアルゴリズムを使用すべきか、どのくらいの長さの暗号鍵を使用すべきか等の情報を示すものであってもよい。【００１０】  また、前記オブジェクト内のデータを書き換えるときは、前記データが暗号化されている場合は、暗号化されたデータを記録することとしてもよい。
また、前記メモリに記録されたオブジェクトは、オブジェクト内のデータが暗号化されているか否かを示す情報を有し、前記情報がオブジェクト内のデータが暗号化されていることを示している場合は、暗号化されたデータを記録することとしてもよい。【００１１】  これにより実行装置は、アプリケーションのデータを書き換える際にも、データを暗号化することができるので、アプリケーション実行中は、データが保護されるようになる。
また、前記実行装置は、更に、データが他のデータの所在位置特定に必要なデータであるか否かを判別する判別手段を備え、前記判別手段が、他のデータの所在位置特定に必要なデータであると判別したデータの場合は、暗号化を抑止することとしてもよい。【００１２】  これにより実行装置は、暗号化するデータのうち、いわゆる参照型であるデータは暗号化しないことができるので、ガーベージコレクションの際の処理速度の低下を抑えることができるようになる。
すなわち、参照型のデータそのものは暗号化せずとも、その参照先のデータを暗号化しておけば、データを保護する目的は達せられるからである。また、ガーベージコレクションの際に参照型のデータを書き換える場合には、暗号化復号化の処理が不要になることから、処理速度の向上につながる。【００１３】  また、本発明の実行装置は、プログラムを実行する実行装置であって、前記プログラムは、データ部と秘匿の必要性の有無を表す秘匿性情報とを含んでおり、前記秘匿性情報に基づいて、暗号化が必要であるか否かを判断する暗号化判断手段と、前記実行可能プログラムを実行する際に、前記データ部をメインメモリにロードするロード手段とを備え、前記ロード手段は、前記暗号化判断手段で暗号化が必要であると判断された場合は、暗号化してデータ部をロードすることを特徴とする。【００１４】  本発明に係る実行装置は、上述の構成を備えることにより、プログラムが実行されている間、暗号化が必要なデータ部のみを暗号化してメインメモリにロードすることができるので、暗号化等に必要な処理時間を減らし、かつ、プログラムで扱うデータの盗聴・改竄を困難にすることができるようになる。
【図面の簡単な説明】
【００１５】
【図１】本発明にかかる実行装置の構成を表す図である。
【図２】仮想マシン２０００の構成を示す機能ブロック図である。
【図３】暗号化度情報２８１０の構成および内容例を示す図である。
【図４】アプリケーションファイル１０００に入っているアプリケーションの構成および内容例を示す図である。
【図５】ローダ２２００によってメソッド領域２６００に生成されるクラス情報１２１０の構成および内容例を示す図である。
【図６】暗号アルゴリズム情報２８２０の構成および内容例を示す図である。
【図７】図７（ａ）は、オブジェクト２５１０の構成例を示す図であり、図７（ｂ）は、オブジェクト２５１０の内容例を示す図である。
【図８】実行装置３０００の処理を表すフローチャートである。
【図９】アプリケーション登録処理を表すフローチャートである。
【図１０】オブジェクトの生成処理を表すフローチャートである。
【図１１】従来技術の構成を表す図である。
【符号の説明】
【００１６】  １０００  アプリケーションファイル
１２００  アプリケーションクラス
１２１０  クラス情報
１３００  データファイル
１４００  メタデータ
１４００  メタ情報
１４１０  起動クラス名
１４２０  セキュリティ強度情報
１６１０  対応処理情報
２０００  仮想マシン
２１００  アプリ登録部
２１１０  暗号化判定部
２２００  ローダ
２２１０  クラスローダ
２２２０  ベリファイヤ
２２３０  ＪＩＴコンパイラ
２３００  インタプリタ
２３１０  復号化部
２３２０  暗号化部
２４００  ヒープ管理部
２５００  ヒープ領域
２５１０  オブジェクト
２６００  メソッド領域
２７００  ネイティブクラスライブラリ
２８００  暗号化情報記憶部
２８１０  暗号化度情報
２８２０  暗号アルゴリズム情報
３０００  実行装置
３１００  アプリケーション
３２００  アプリケーション制御部
３２１０  アプリ取得プログラム
３３００  ＯＳ
３４００  ＣＰＵ
３５００  ＲＯＭ
３６００  ＲＡＭ
【発明を実施するための最良の形態】
【００１７】  ＜概要＞
本発明に係る実行装置は、実行装置で実行されるアプリケーション毎にその用途・目的が異なることから、アプリケーション毎にセキュリティ要件が異なること、および、アプリケーション自体よりもそのアプリケーションの扱うデータに秘匿性が高い場合が多いことに着目したものである。【００１８】  ここで、セキュリティ要件が異なるとは、アプリケーションによって、保護したいデータが異なっており、またさらに、秘匿性の度合いが異なっているということである。
すなわち、データの秘匿性を必要としないアプリケーションを実行する場合には、実行速度の低下を伴う暗号化、復号化の処理は極力減らしたほうが望ましく、また、非常に秘匿性の高いデータを取り扱うアプリケーションを実行する場合には、多少実行速度が遅くなっても、可能な限り強度の高い暗号アルゴリズムを用いてデータを保護したほうがよいこともあるということである。【００１９】  本発明は、扱うデータの重要度に応じて、自由に暗号化の度合いを変えることが可能であることを特徴とするものである。
アプリケーションで扱うデータの秘匿性の度合いは、そのアプリケーションを作成するときに、作成者またはそのユーザのみが知りうるものである。
従って、本発明に係る実行装置は、データを直接アクセス等するプログラムが、そのデータを生成したアプリケーションを特定する機能を有する。【００２０】  すなわち、生成したアプリケーションを特定することで、秘匿性の高いデータを扱うプログラムが生成したデータであるか否かを判別することができることになり、秘匿性の高いデータのみを暗号化することができるようになる。
結果として、本実行装置は、暗号化による実行時間の低下を最小限に抑えつつデータの盗聴を防ぐデータ保護機能を備えているものであるといえる。【００２１】  またさらに、アプリケーションに求められる秘匿性の度合いに応じて、暗号アルゴリズムの強度や鍵を選択できるものでもある。
以下、本発明の実施形態に係る実行装置について説明する。
本実施形態では、Ｊａｖａバーチャルマシン上で動くＪａｖａアプリケーションについて説明する。【００２２】  ＜構成＞
図１は、本発明にかかる実行装置の構成を表す図である。
実行装置３０００は、アプリケーション３１００、仮想マシン２０００、アプリケーション制御部３２００、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）３３００、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３４００、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３５００およびＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３６００で構成される。【００２３】  実行装置３０００は、アプリケーションを実行する機能のほか、それぞれの装置特有の機能を有する（図示していない）。本実行装置３０００は、具体的には、デジタルテレビ、セットトップボックス、ＤＶＤレコーダー、Ｂｌｕ−ＲａｙＤｉｓｃ（ＢＤ）レコーダー、カーナビ端末、携帯電話、ＰＤＡなどの、Ｊａｖａ（登録商標、以下同様。）仮想マシンを搭載する電子機器全般が該当する。【００２４】  ここで、本実行装置３０００のアプリケーションを実行する機能とは、通常のパーソナルコンピュータやデジタル家電機器等に搭載されているソフトウェア実行手段と同様のものである。例えば、実行装置３０００がデジタルテレビであれば、受信したデジタルデータを画像に変換し表示するアプリケーションを実行することになる。
まず、アプリケーション３１００は、本実行装置３０００で実行するアプリケーションであって、本装置外のアプリケーションファイル１０００からダウンロードしたものである。このアプリケーションファイル１０００には、暗号化されたＪａｖａアプリケーションが入っているものとする。【００２５】  仮想マシン２０００は、Ｊａｖａ言語で記述されたプログラムを逐次解析し実行するＪａｖａバーチャルマシンである。言い換えれば、ソフトウェアプログラムである仮想マシン２０００が、仮想のＣＰＵをシミュレートして、Ｊａｖａの命令コードを解析実行する。
本実施形態での仮想マシンは、バイトコードをＣＰＵ３４００が理解可能な実行形式に翻訳するＪＩＴコンパイラと呼ばれる機能を持つものとする。【００２６】  すなわち、Ｊａｖａ言語で記述されたソースプログラムは、バイトコードコンパイラによってバイトコードに変換される。このバイトコードとは、ハードウェアに依存しない中間コードである。このバイトコードが、アプリケーションファイル１０００に入っているものとする。
本実施形態の仮想マシンは、このバイトコードを読出し、ＪＩＴコンパイラで実行形式に翻訳したものを、メモリにローディングする。【００２７】  尚、Ｊａｖａバーチャルマシンは、一部もしくは全部のバイトコードを直接実行可能なプロセッサと、プロセッサでは直接実行できないバイトコードを実行するインタプリタから構成されるものなど、様々な構成がある（書籍「Ｊａｖａ  Ｌａｎｇｕａｇｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ（ＩＳＢＮ０−２０１−６３４５１−１）」等参照）。
また、アプリケーション制御部３２００は、アプリケーション３１００をダウンロードしたり、仮想マシン２０００を起動させるなどの、アプリケーションの実行に必要な処理を実行、制御する機能を有する。【００２８】  ＯＳ３３００は、他のサブプログラムを平行して実行するカーネル及び、ライブラリで構成される技術の総称であり、仮想マシン２０００をサブプログラムとして実行する。例えば、Ｌｉｎｕｘ等がある。
ＣＰＵ３４００は、仮想マシン２０００、ＯＳ３３００、アプリケーション３１００等を実行する機能を有する。【００２９】  ＲＡＭ３６００は、具体的にはＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の一次記憶メモリで構成され、ＣＰＵ３４００が処理を行う際、一時的にデータを保存するために使用される。
ＲＯＭ３５００は、具体的にはフラッシュメモリーやハードディスク等の不揮発性メモリで構成され、ＣＰＵ３４００から指示されたデータやプログラムを記憶する。【００３０】  図２は、仮想マシン２０００の構成を示す機能ブロック図である。
仮想マシン２０００は、アプリ登録部２１００、ローダ２２００、インタプリタ２３００、ヒープ管理部２４００、ヒープ領域２５００、メソッド領域２６００、ネイティブクラスライブラリ２７００および暗号化情報記憶部２８００で構成される。
また、アプリ取得プログラム３２１０は、アプリケーション制御部３２００のプログラムの１つであり、Ｊａｖａ言語で記述されており、アプリケーションをアプリケーションファイル１０００からダウンロードする機能を有する。ダウンロードするアプリケーションの中身については、図４を用いて後で説明する。【００３１】  まず、仮想マシン２０００の、各機能部について説明する。
アプリ登録部２１００は、アプリ取得プログラム３２１０から依頼を受け、登録依頼されたアプリケーションの暗号化の必要性の有無、暗号化する場合は、その方法等を決定し、暗号化情報記憶部２８００に記憶させる機能を有する。また、登録依頼されたアプリケーション用のクラスローダオブジェクトを作成する機能を有する。【００３２】  アプリ登録部２１００は、暗号化判定部２１１０を備え、暗号化判定部２１１０が、アプリ取得プログラム３２１０が取得したアプリケーションの暗号化の必要性の有無の判断と、その暗号化レベルを実行装置３０００が実現できるか否かを判定する。
暗号化判定部２１１０が、アプリケーションの暗号化が可能であると判断したら、アプリ登録部２１００は、そのアプリケーションが生成するデータを暗号化する為の暗号アルゴリズムと暗号鍵を決定し、決定した暗号アルゴリズムなどを対応づけて、暗号化情報記憶部２８００に記憶させる。【００３３】  ローダ２２００は、アプリケーションファイル１０００やネイティブクラスライブラリ２７００などから、クラスファイルをメソッド領域２６００にロードする機能を有する。クラスファイルについては、図５を用いて後で説明する。
ローダ２２００は、クラスローダ２２１０、ベリファイヤ２２２０、ＪＩＴコンパイラ２２３０を備えている。【００３４】  クラスローダ２２１０は、クラスファイルをアプリケーションファイル１０００から読込みロードする機能を有する。また、クラスローダ２２１０は、クラスをアンロードする機能も有する。実行が終了し不要になったクラスを仮想マシン２０００から取り除く機能である。
次に、ベリファイヤ２２２０は、クラスのデータ形式の不備や、クラスに含まれるバイトコードの安全性を判定する機能を有する。ローダ２２００は、ベリファイヤ２２２０において妥当ではないと判定されたクラスはロードをしない。【００３５】  ＪＩＴコンパイラ２２３０は、バイトコードをＣＰＵ３４００が理解可能な実行形式に翻訳する機能を有する。
次に、インタプリタ２３００は、ローダ２２００によりロードされたバイトコードを解釈、実行する機能を有し、Ｊａｖａ仮想マシンにおいて中核な処理を行う。
このインタプリタ２３００は、復号化部２３１０を備え、復号化部２３１０は、ヒープ領域２５００のデータを読み出す際に、データが暗号化されている場合に処理前に復号する機能を有する。また、暗号化部２３２０を備えており、この暗号化部２３２０は、ヒープ領域２５００に記憶するデータを暗号化する場合に、データを書込む前に暗号化する機能を有する。【００３６】  ヒープ管理部２４００は、インタプリタ２３００の制御の下、ヒープ領域にオブジェクトを作成し、また、消去する機能を有する。
さらに、ヒープ管理部２４００は、ガベージコレクションを行う機能も有する。ガベージコレクションとは、アプリケーション実行において不要になったワーキングメモリを開放し、他の用途に再利用できるようにする機能である。【００３７】  ここで、ヒープ領域２５００は、オブジェクトの作成されるメモリをいい、メソッド領域２６００は、クラスファイルをロードする先のメモリをいう。これらは、ＲＡＭ３６００に作成される。
また、ネイティブクラスライブラリ２７００は、Ｊａｖａアプリケーションから呼び出されるライブラリであって、ＯＳ３３００や、実行装置３０００が備えているハードウェア、サブプログラム等で提供される機能をＪａｖａアプリケーションへ提供している。【００３８】  暗号化情報記憶部２８００は、暗号化に必要な情報を記憶しておく機能を有し、ＲＡＭ３６００に作成される。
また、本実行装置３０００は、通常のＪａｖａバーチャルマシンが有する、スレッドを管理する機能部や、スタック領域など（図示していない。）を有するものとする。
尚、実行装置３０００の各機能は、実行装置３０００のメモリ又はハードディスクに格納されているプログラムをＣＰＵが実行することにより実現される。【００３９】  ＜データ＞
以下、本実行装置で用いる主なデータについて、図３から図６を用いて説明する。
図３は、暗号化度情報２８１０の構成および内容例を示す図である。
この暗号化度情報２８１０は、暗号化情報記憶部２８００に記憶されているものである。【００４０】  暗号化度情報２８１０は、セキュリティ強度２８１１およびデータ暗号化強度１８１２で構成される。
セキュリティ強度２８１１は、アプリケーションで扱うデータのセキュリティの高さを示すものであり、例では、「０」から「２」の３段階としている。この「０」から「３」までの値を、アプリケーション毎に指定することになる。【００４１】  また、データ暗号化強度１８１２は、データを暗号化する場合の度合いを表す。例えば、セキュリティ強度２８１１「０」の場合のデータ暗号化強度２８１２は、暗号化は「不要」である。すなわち、暗号化は行わないことを示す。セキュリティ強度２８１１「１」以上はデータの暗号化が必要であることを意味している。さらにセキュリティ強度２８１１「２」以上では、セキュリティ強度２８１１「１」よりも強力な暗号アルゴリズム、または長い鍵を用いて暗号化を行う必要があることを表している。【００４２】  次に、図４はアプリケーションファイル１０００に入っているアプリケーションの構成および内容例を示す図である。
アプリケーション１００１は、アプリケーションクラス１２００と、データファイル１３００と、メタデータ１４００を含んでいる。
アプリケーションクラス１２００は、アプリケーションを構成する１つ以上のクラスファイルの集合である。【００４３】  データファイル１３００は、アプリケーションが実行時に使用するデータである。具体的には、画像ファイルや音声ファイルなどが該当する。
また、メタデータ１４００には、アプリケーション１００１に関する様々な情報が保持されている。例えば、メタデータ１４００は、起動クラス名１４１０とセキュリティ強度情報１４２０とを含んでいる。【００４４】  起動クラス名１４１０は、アプリケーションクラス１２００のうち、最初に実行されるべきクラスの名前である。
セキュリティ強度情報１４２０は、アプリケーションクラス１２００を実行する際に、仮想マシン２０００に求められるセキュリティの強さを表す。このセキュリティ強度情報１４２０で表される情報は、暗号化度情報２８１０のセキュリティ強度２８１１と同じものである。【００４５】  このセキュリティ強度情報１４２０の指定の仕方は、例えばバイトコードコンパイラのオプションとして設定することとする。
図５は、ローダ２２００によってメソッド領域２６００に生成されるクラス情報１２１０の構成および内容例を示す図である。
クラス情報１２１０は、クラス名１２１１、親クラス１２１２、インタフェーステーブル１２１３、メソッドテーブル１２１４、フィールドテーブル１２１５、クラスローダＩＤ１２１６およびセキュアフラグ１２１７などで構成される。【００４６】  クラス名１２１１は、当該クラスのクラス名である。
親クラス１２１２は、当該クラスの親クラスを表す内部形式への参照である。
ここで、参照とは、ポインタやインデックスなど、そのデータの実体を指し示す表現をいう。
インタフェーステーブル１２１３は、当該クラスが実装するインタフェースへの参照である。【００４７】  メソッドテーブル１２１４は、当該クラスが備えるメソッドの一覧である。
フィールドテーブル１２１５は、このクラスが備えるフィールドの一覧である。
また、クラスローダＩＤ１２１６は、当該クラスをロードしたクラスローダオブジェクトを表す。具体的には、クラスローダＩＤ２８２１が入っている（図６参照）。
セキュアフラグ１２１７は、当該クラスがセキュアクラスか否かを表す。【００４８】  ここで、セキュアクラスとは、セキュリティ強度情報１４２０に、セキュリティ強度２８１１「１」もしくは「２」を指定されたアプリケーション１００１のアプリケーションクラス１２００に含まれるクラスをいう。
このセキュアフラグ１２１７が「ＯＮ」になっている場合は、このクラスで扱われるデータは、暗号化が必要と判断されることになる。【００４９】  また、このセキュアフラグ１２１７は、クラスがロードされるときに、ローダ２２００によって設定される。本実施形態では、アプリケーション１００１のセキュリティ強度情報１４２０によって、クラスのセキュアフラグ１２１７が一律に決まることとする。すなわち、暗号化が必要なアプリケーションのすべてのクラスのセキュアフラグ１２１７は「ＯＮ」とする。【００５０】  図６は、暗号アルゴリズム情報２８２０の構成および内容例を示す図である。
この暗号アルゴリズム情報２８２０は、暗号化情報記憶部２８００に記憶されており、アプリ登録部２１００によって、作成される。
暗号アルゴリズム情報２８２０は、クラスローダＩＤ２８２１、クラスローダアドレス２８２２、暗号アルゴリズム２８２３および暗号鍵２８２４で構成される。【００５１】  クラスローダＩＤ２８２１は、アプリ登録部２１００がクラスローダに一意に割り当てる識別子である。すなわち、アプリケーション１つに対して、１つのクラスローダ２２１０が存在することになる。本実施形態では、「０」から昇順につけていくものとする。
クラスローダアドレス２８２２は、仮想マシン２０００から登録を要求されたクラスローダオブジェクトのアドレスである。【００５２】  例では、クラスローダＩＤが「０」のクラスローダでロードされたアプリケーションが実行時に生成するデータは、暗号化されないことを表し、クラスローダＩＤが「２」のクラスローダでロードされたアプリケーションが実行時に生成するデータは、「ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）」アルゴリズ厶で暗号化され、その鍵は「ＹＹＹＹ」であることを表している。【００５３】  ＜動作＞
以下、本発明に係る実行装置３０００の動作について図７〜図１０を用いて説明する。
図７（ａ）は、オブジェクト２５１０の構成例を示す図であり、動作の説明で、必要に応じて参照する。まず、図７について説明する。
オブジェクト２５１０は、クラス内のメソッドが実行されるときに、作成されるものであり、ヒープ領域２５００に作成される。【００５４】  オブジェクト２５１０は、オブジェクトヘッダ２５１１とオブジェクトデータ２５１２とで構成され、オブジェクトヘッダ２５１１には、当該オブジェクトが属するクラス情報２５５１、オブジェクトデータ２５１２のサイズであるデータサイズ２５５２、オブジェクトデータ２５１２が暗号化されているか否かを示す暗号化フラグ２５５３などが含まれている。この暗号化フラグ２５５３が「ＯＮ」であれば、オブジェクトデータ２５１２が暗号化されていることとなる。【００５５】  この暗号化フラグ２５５３は、このメソッドが属するクラス、すなわちクラス情報２５５１で参照されるクラスのセキュアフラグ１２１７が「ＯＮ」の場合、「ＯＮ」とする。
クラス情報２５５１は、クラスローダによって、メソッド領域２６００内に生成されたクラスの内部表現のアドレスである。クラス情報１２１０（図５参照）の先頭アドレスが、クラス情報２５５１に入っていることになる。【００５６】  また、オブジェクトデータ２５１２は、Ｊａｖａアプリケーションが動作することによって生成される実行時データであり、０個以上のフィールドを持つ。フィールドの数はオブジェクトが属するクラスにより一意に決定される。
フィールドは、基本型と呼ばれる数値や文字を扱うフィールドと、参照型と呼ばれる他のオブジェクトへの参照を表すフィールドの２種類がある。本実施形態では、オブジェクトデータ２５１２全体で、暗号化がなされるものとする。【００５７】  図７（ｂ）は、オブジェクト２５１０の内容例を示す図である。
例えば、クラス情報２５５１はアドレス「Ｏｘｄｅａｄｂｅｅｆ」にある内部表現を参照し、オブジェクトデータのデータサイズ２５５２は「２４」である。暗号化フラグ２５５３の値が「１（ＯＮ）」であることで、このオブジェクトが暗号化されていることを表している。【００５８】  アドレス「Ｏｘｄｅａｄｂｅｅｆ」にある内部表現から、クラスローダＩＤ１２１６（図５参照）を参照することで、このクラスをロードしたクラスローダオブジェクトを特定できる。このクラスローダオブジェクトのＩＤであるクラスローダＩＤ１２１６が「２」であるとすると、そのクラスローダＩＤ１２１６「２」をキーに、暗号アルゴリズム情報２８２０（図６参照）を検索する。暗号アルゴリズム情報２８２０のクラスローダＩＤ２８２１が「２」であるので、該当のオブジェクトデータ２５１２は、「ＡＥＳ」アルゴリズムで、鍵「ＹＹＹＹ」を用いて暗号化されていることが分かる。【００５９】  実際の暗号化は、インタプリタ２３００の暗号化部２３２０が行い、復号化は、インタプリタ２３００の復号化部２３１０が行う。
以下、図８から図１０を用いて、実行装置の処理を説明する。
本実施形態では、実行装置の電源を入れた場合、予め定められているアプリケーションが実行されるものとする。【００６０】  図８は、実行装置３０００の処理を表すフローチャートである。
まず、ユーザが実行装置３０００の電源を投入する（ステップＳ８１０）。
通電したＣＰＵ３４００は、ＯＳ３３００を起動する（ステップＳ８２０）。
起動したＯＳ３３００は、仮想マシン２０００を起動して（ステップＳ８３０）、アプリ取得プログラム３２１０を起動するよう指示する。【００６１】  指示を受けた仮想マシン２０００は、アプリ取得プログラム３２１０を起動する（ステップＳ８４０）。
仮想マシン２０００によって起動されたアプリ取得プログラム３２１０は、アプリケーションファイルからアプリケーション１００１を読込み、アプリ登録部２１００に、アプリケーションの登録処理を依頼する。ここでは、アプリケーション１００１内の、メタデータ１４００（図４参照）のみを読込み、アプリ登録部２１００に渡す。他のアプリケーションクラス１２００とデータファイル１３００は、アプリケーションの実行に応じて、適時読込まれることになる。【００６２】  このアプリケーション登録処理において、アプリケーション１００１の秘匿性の度合いが判定され、暗号化のアルゴリズムなどが決定される。また、このアプリケーション１００１用のクラスローダオブジェクトが生成される（ステップＳ８５０）。すなわち、このアプリケーション登録処理が終了すると、図６で示す暗号アルゴリズム情報２８２０に、該当するアプリケーションの暗号化の情報が登録されていることになる。アプリケーション登録処理の詳細については、図９を用いて後で説明する。【００６３】  アプリケーションの登録処理を終了したアプリ登録部２１００は、その旨をアプリ取得プログラム３２１０に返す。登録処理が終了した旨を受け取ったアプリ取得プログラム３２１０は、インタプリタ２３００に起動クラス名１４１０を通知し、ロードを依頼する。
インタプリタ２３００は、クラスローダオブジェクトに、起動クラス名１４１０（図４参照）で指定されたクラス（以下、「起動クラス」という。）をロードする旨指示する。クラスローダオブジェクトは、指定されたクラスをメソッド領域２６００にロードする（ステップＳ８６０）。この時点で、図５に示すようなクラス情報１２１０がメソッド領域２６００に作成されており、クラスローダＩＤ１２１６とセキュアフラグ１２１７が設定されていることになる。【００６４】  この際、ベリファイヤ２２２０により正当性がチェックされ、ＪＩＴコンパイラ２２３０により、ネイティブコードに変換されている。
これで、アプリケーションは仮想マシン２０００へロードされ、実行可能な状態となる。
クラスローダオブジェクトによる起動クラスのロードが完了すると、インタプリタ２３００は、起動クラスのメソッドを実行することでアプリケーションの起動を行なう。【００６５】  メソッドを実行するとは、すなわち、ヒープ管理部２４００に依頼して、オブジェクトをヒープ領域２５００に作成（ステップＳ８７０）し、メソッドを実行していくことになる（ステップＳ８８０）。
新たなメソッドを実行する場合には、必要に応じて属するクラスをロードし（ステップＳ８６０）、オブジェクトを作成し（ステップＳ８７０）、メソッドを実行する。【００６６】  オブジェクトをヒープ領域２５００に作成した時点で、暗号化が必要である場合には、オブジェクトデータ２５１２が暗号化されており、暗号化フラグが設定されている。
従って、このオブジェクトのフィールドにアクセスする場合には、オブジェクトヘッダ２５１１の暗号化フラグ２５５３を参照して、「ＯＮ」ならば、読み出すときは、読み出したデータを復号して処理し、また、書込むときは暗号化したデータを書込むことを行う。暗号化フラグ２５５３が「ＯＦＦ」ならば、復号化、暗号化は行わずに、フィールドにアクセスする。暗号アルゴリズムなどの取得方法は、図７（ｂ）での説明の通りである。【００６７】  仮想マシン２０００を構成する全ての機能部は、オブジェクトに対して読み込みの操作を行う前に、オブジェクトヘッダ２５１１内の暗号化フラグ２５５３を検査し、暗号化されている場合には復号化部２３１０によりそれを復号化し、読み込む。また、オブジェクトに対して書き込みの操作を行う前に、オブジェクトヘッダ２５１１内の暗号化フラグ２５５３を検査し、オブジェクトが暗号化されている場合には暗号化部２３２０により暗号化したデータを書き込む。【００６８】  ＜１．アプリケーション登録処理＞
図９を用いて説明する。図９は、アプリケーション登録処理を表すフローチャートである。
仮想マシン２０００を起動したアプリ取得プログラム３２１０は、アプリケーションファイルからアプリケーション１００１を読込み、アプリ登録部２１００に、アプリケーションの登録処理を依頼する（ステップＳ９１０）。【００６９】  登録処理を依頼されたアプリ登録部３０７は、登録を依頼されたアプリケーションに含まれるセキュリティ強度情報１４２０（図４参照）を読み出す（ステップＳ９２０）。この時、アプリケーションが暗号化されていれば、セキュリティ強度情報１４２０の読み出しに先立ち復号する。
次に、読み出したセキュリティ強度情報１４２０に対応する暗号化機能を、実行装置３０００が備えているか否かを判定する（ステップＳ９３０）。この判定は、暗号化判定部２１１０に依頼して行う。【００７０】  具体的には、セキュリティ強度情報１４２０が「２」であった場合を想定すると、暗号化判定部２１１０は、暗号化情報記憶部２８００から暗号化度情報２８１０を読み出し、セキュリティ強度２８１１が「２」に対応するデータ暗号化強度２８１２が「強」であることを読み出す。
このデータ暗号化強度２８１２が「強」の暗号化方法を実行装置３０００がサポートしている場合、読み出したセキュリティ強度情報１４２０に対応する暗号化機能を実行装置３０００が備えていると判断する。尚、本実行装置において、どのレベルの暗号化がサポートされているかは、予め決められており、アプリ登録部２１００は記憶しているものとする。【００７１】  実行装置３０００が、読み出したセキュリティ強度情報１４２０に対応する暗号化機能を備えていると暗号化判定部２１１０が判断した場合には（ステップＳ９３０：ＹＥＳ）、アプリ登録部２１００は、アプリケーションをロードするためのクラスローダオブジェクトを生成する（ステップＳ９４０）。
次に、読み出したセキュリティ強度情報１４２０に応じて、暗号アルゴリズムと暗号化に使用する鍵の長さを決定し、暗号化鍵を生成する（ステップＳ９５０）。暗号鍵は、同じアプリケーションであっても、登録するたびにランダムに生成することとする。より判読されにくくなるからである。また、セキュリティ強度情報１４２０で指定されたよりも強い暗号アルゴリズムや鍵を用いてもよいものとする。【００７２】  アプリ登録部２１００は、クラスローダＩＤ２８２１、クラスローダオブジェクトのアドレス２８２２、暗号アルゴリズム２８２３、暗号鍵２８２４とを対応づけて、暗号アルゴリズム情報２８２０へ登録する（ステップＳ９６０）。
セキュリティ強度情報１４２０に対応する暗号化機能を実行装置３０００が備えていない場合には、アプリケーションの起動を中断する（ステップＳ９７０）。アプリケーションを起動しないことで、アプリケーションの秘匿性が守られることになる。【００７３】  ＜２．オブジェクト生成処理＞
図１０を用いて説明する。図１０は、オブジェクトの生成処理を表すフローチャートである。
クラスローダオブジェクトによる起動クラスのロードが完了する（図８、ステップＳ８６０参照）と、インタプリタ２３００は、起動クラスのメソッドを実行することでアプリケーションの起動を行なう。【００７４】  メソッドを実行するとは、まず、ヒープ管理部２４００に、オブジェクトの作成を依頼する。
依頼を受けたヒープ管理部２４００は、新しいオブジェクトのためのメモリ領域を確保する（ステップＳ１０１０）。
次に、インタプリタ２３００は、カレントクラスがセキュアクラスであるかを検査する。これはカレントクラスのセキュアフラグ１２１７を調べることで判定できる。セキュアフラグ１２１７が「ＯＮ」であれば、セキュアクラス、すなわち、暗号化が必要なクラスであると判定する。【００７５】  カレントクラスがセキュアクラスと判定された場合には（ステップＳ１０２０：ＹＥＳ）、オブジェクトヘッダ２５１１内の暗号化フラグにオブジェクトが暗号化されていることを表す「１」を設定する（ステップＳ１０４０）。
フラグの設定後、オブジェクトデータ２５１２を暗号化する（ステップＳ１０４０）。ここでの暗号化の方法は、暗号アルゴリズム情報２８２０（図６参照）を読み出すことで、決定する。【００７６】  カレントクラスがセキュアクラスではないと判定された場合には（ステップＳ１０２０：ＮＯ）、オブジェクトヘッダ２５１１内の暗号化フラグにオブジェクトが暗号化されていないことを表す「０」を設定する（ステップＳ１０５０）。
ここで、カレントクラスとは、実行中のメソッドを定義しているクラスをいう。
インタプリタ２３００は、Ｊａｖａメソッドを実行する際にＪａｖａフレームと呼ばれるデータ構造をＲＡＭ３６００上に作成する。ＪａｖａフレームはＪａｖａメソッドの呼び出し毎に一つ生成され、メソッドの実行が終了した時に破壊される。インタプリタ２３００は、複数のスレッドにより実行されるが、制御権が与えられているスレッドの任意の場所で、実行中のメソッドに対してアクティブなＪａｖａフレームは一つしか存在しない。このフレームのことをカレントフレームと呼び、そこで実行中のメソッドをカレントメソッドと呼ぶ。そのカレントメソッドを定義しているクラスがカレントクラスである。【００７７】  すなわち、カレントクラスは、ある瞬間には１つに定まる。
＜補足＞
以上、本発明に係る実行装置について実施形態に基づいて説明したが、この実行装置を部分的に変形することもでき、本発明は上述の実施形態に限られないことは勿論である。即ち、
（１）実施形態では、実行装置３０００で実行するアプリケーションは、アプリ取得プログラム３２１０が、本装置外のアプリケーションファイル１０００からダウンロードしたものであることとしているが、インターネット上にあるサーバから、ダウンロードすることとしてもよい。【００７８】  この場合、アプリ取得プログラム３２１０は、ＴＬＳ（Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ）、ＨＴＴＰ（Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）等のプロトコルに従いＪａｖａアプリケーションをダウンロードする機能を有するプログラムとなる。
ここで、ＴＬＳは暗号化により通信時のデータの盗聴、改竄を防ぐデータ転送方式である（ＲＦＣ２２４６参照）。また、ＨＴＴＰは、インターネット上のデータ通信で一般的に用いられているデータ転送方式である（ＲＦＣ２６１６参照）。【００７９】  尚、ＲＦＣ（Ｒｅｑｕｅｓｔ  Ｆｏｒ  Ｃｏｍｍｅｎｔｓ）とは、インターネット上の技術を規格化するＩＥＴＦ（Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋ  Ｆｏｒｃｅ）の公式文書であり、プロトコルなど様々な技術の使用がまとめられているものである。
また、実行装置３０００で実行するアプリケーションは、デジタル放送のデータ放送として、ＭＰＥＧ（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｃｏｄｉｎｇ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）２トランスポートストリーム内に埋め込まれたＪａｖａアプリケーションであってもよい。【００８０】  この場合、アプリ取得プログラム３２１０は、トランスポートストリーム内に埋め込まれたＪａｖａアプリケーションを実行装置３０００内に読み出すプログラムとなる。
ＭＰＥＧ２トランスポートストリームにＪａｖａプログラムを埋め込む方法としては、例えば、ＤＳＭＣＣ方式がある。ＤＳＭＣＣ方式とは、ＭＰＥＧ２トランスポートストリームのパケットの中に、コンピュータで使用されているディレクトリやファイルで構成されるファイルシステムをエンコードする方法である（ＭＰＥＧ規格書ＩＳＯ／ＩＥＣ１３８１８１−１、ＭＰＥＧ規格書ＩＳＯ／ＩＥＣ１３８１８１−６参照）。【００８１】  またさらに、実行装置３０００で実行するアプリケーションは、ＳＤカード（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ  ｍｅｍｏｒｙ  ｃａｒｄ）、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、Ｂｌｕ−ＲａｙＤｉｓｃ等に記録されたＪａｖａアプリケーションであってもよい。
この場合、アプリ取得プログラム３２１０は、これらの記録媒体からアプリケーションを読み出すプログラムとなる。【００８２】  また、実行装置３０００で実行するアプリケーションは、実行装置３０００内にあるＲＯＭ３５００に記録されたＪａｖａアプリケーションであってもよい。
この場合、アプリ取得プログラム３２１０は、ＲＯＭ３５００からＲＡＭ３６００に、Ｊａｖａアプリケーションを読み出すプログラムとなる。
（２）本実施形態ではアプリ取得プログラム３２１０などはＪａｖａ言語で記述されたＪａｖａプログラムとしているが、同等の機能を有する、ネイティブ言語で記述されたプログラムや、ハードウェアで実現されていてもよい。【００８３】  また、ＪＡＶＡバーチャルマシンで実行するアプリケーションは、Ｊａｖａ言語で記述されたものに限らず、Ｃ＋＋などの他のオブジェクト思考言語で記述されたものであってもよい。
（３）本実施形態では、セキュリティ強度２８１１は「０」〜「２」の３段階としているが、これに限るものではない。【００８４】  例えば、４段階以上にセキュリティ強度を設定してもよいし、データの暗号化が必要、不要の２段階であってもよい。
（４）本実施形態では、アプリケーション１００１のメタデータ１４００は、起動クラス名１４１０とセキュリティ強度情報１４２０とを含むこととしているが、これら以外の情報を含んでいてもよい。【００８５】  また、セキュリティ強度を指定する代わりに、メタデータ１４００内で暗号アルゴリズムや鍵の長さを指定することとしてもよい。
なお、アプリケーション１００１がメタデータ１４００を含まないこととする場合には、暗号化判定部２１１０は、そのアプリケーションのセキュリティ強度情報を「０」とみなしたり、実行装置３０００であつかえる最も高いレベルのセキュリティ強度とみなしたりすることとしてもよい
（５）本実施形態では、アプリケーション１００１は、一つのファイルとして構成されているが、アプリケーションクラス１２００、データファイル１３００、メタデータ１４００が別々のファイルであってもよい。また、メタデータ１４００をアプリケーションクラス１２００に埋め込むこととしてもよい。
（６）実施形態では、アプリケーション１００１のセキュリティ強度情報１４２０によって、クラスのセキュアフラグ１２１７が一律に決まることとしているが、このセキュアフラグ１２１７は、クラスごとに設定できることとしてもよい。【００８６】  例えば、暗号化が必要なクラスのセキュアフラグ１２１７は「ＯＮ」とし、暗号化が不要なクラスは「ＯＦＦ」とするなどである。また、クラスごとに、セキュリティ強度情報１４２０を設定できることとしてもよい。
（７）本実施形態においては、オブジェクトデータ２５１２全体を暗号化しているが、フィールドをそれぞれ個別に暗号化してもよい。【００８７】  また、フィールドを暗号化する際に、基本型のフィールドのみを暗号化し、参照型のフィールドの暗号化を行わなくしてもよい。この場合、参照型フィールドを識別できない場合には、フィールドごとに暗号化されているか否かのフラグを持つ必要がある。
これにより、多くの参照型のフィールドへのアクセスを必要とするヒープ管理部２４００が行うガベージコレクションを高速に実行できる。
（８）実施形態で示した実行装置の各機能を実現させる為の各制御処理（図２等参照）をＣＰＵに実行させる為のプログラムを、記録媒体に記録し又は各種通信路等を介して、流通させ頒布することもできる。このような記録媒体には、ＩＣカード、光ディスク、フレキシブルディスク、ＲＯＭ、フラッシュメモリ等がある。流通、頒布されたプログラムは、機器におけるＣＰＵで読み取り可能なメモリ等に格納されることにより利用に供され、そのＣＰＵがそのプログラムを実行することにより実施形態で示した実行装置の各機能が実現される。【００８８】  ＜従来技術の説明＞
図１１に示すように、この従来のデータ保護機能を備えた計算機は、中央処理装置２０３の内部に、データの復号処理を行う暗号化データ解読手段２０４、暗号化処理を行うデータ暗号化手段２０５、データバッファ２０６、プログラム実行手段２０７とを備え、中央処理装置２０３の外部にある暗号化データ２０２を中央処理装置２０３内のデータバッファ２０６へ読み込む際に復号し、プログラム実行手段２０７で処理した後に、データ暗号化手段２０５により暗号化して中央演算装置の外部へと出力している。
【産業上の利用可能性】
【００８９】  Ｊａｖａアプリケーションが実行時に生成するデータの盗聴、改ざんから保護することができ、今後本格展開が予想されるＪａｖａアプリケーションのダウンロード配信ビジネスにおいて、コンテンツ作成者の権利を保護すること場合などに、特に有用である。
ダウンロード配信ビジネスとして、例えば、携帯電話機では、ＮＴＴ  ＤｏＣｏＭｏがｉ−アプリと呼ばれるサービスを提供している。このサービスは、携帯電話端末がインターネット上にあるアプリケーション配信サーバからＪａｖａプログラムをダウンロードして、端末上で実行する。また、欧州では、ＤＶＢ−ＭＨＰ（Ｄｉｇｉｔａｌ  Ｖｉｄｅｏ  Ｂｒｏａｄｃａｓｔｉｎｇ−Ｍｕｌｔｉｍｅｄｉａ  Ｈｏｍｅ  Ｐｌａｔｆｏｒｍ）と呼ばれる仕様が策定され、既に仕様に準拠した運用が開始されている。ＤＶＢ−ＭＨＰ規格に基づくデジタル放送では、放送波に多重化されたＪａｖａプログラムをデジタルＴＶが受信し、それを実行する。
【図１】
2005096120.tif 000002
【図２】
2005096120.tif 000003
【図３】
2005096120.tif 000004
【図４】
2005096120.tif 000005
【図５】
2005096120.tif 000006
【図６】
2005096120.tif 000007
【図７】
2005096120.tif 000008
【図８】
2005096120.tif 000009
【図９】
2005096120.tif 000010
【図１０】
2005096120.tif 000011
【図１１】
2005096120.tif 000012
【手続補正書】
【提出日】平成18年9月27日(2006.9.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
オブジェクト指向言語で作成されたアプリケーションプログラムを実行する実行装置であって、
前記アプリケーションプログラムは、１以上のメソッドを有する1以上のクラスと各クラスに対応する秘匿の必要性の有無を表す秘匿性情報とを含んでおり、
メソッドが操作するデータの暗号化が必要であるか否かを、そのメソッドが属するクラスの前記秘匿性情報に基づいて判断する暗号化判断手段と、
メソッドを実行する際に、当該メソッドが操作するデータを含むオブジェクトをメモリに記録するオブジェクト記録手段とを備え、
前記暗号化判断手段で暗号化が必要であると判断された場合においては、前記オブジェクト記録手段は、暗号化されたデータを含むオブジェクトを記録する
ことを特徴とする実行装置。
【請求項２】
前記秘匿性情報は、更に、秘匿の度合いを示す情報を含み、
前記実行装置は、更に、前記秘匿性情報に基づいて暗号化方式を決定する暗号方式決定手段を備え、
前記暗号化判断手段で暗号化が必要であると判断された場合においては、前記オブジェクト記録手段は、前記暗号方式決定手段で決定された暗号化方式で暗号化されたデータを含むオブジェクトを記録する
ことを特徴とする請求項１記載の実行装置。
【請求項３】
前記オブジェクト内のデータを書き換えるときは、前記データが暗号化されている場合は、暗号化されたデータを記録する
ことを特徴とする請求項１記載の実行装置。
【請求項４】
前記メモリに記録されたオブジェクトは、オブジェクト内のデータが暗号化されているか否かを示す情報を有し、
前記情報がオブジェクト内のデータが暗号化されていることを示している場合は、暗号化されたデータを記録する
ことを特徴とする請求項３記載の実行装置。
【請求項５】
前記実行装置は、更に、データが他のデータの所在位置特定に必要なデータであるか否かを判別する判別手段を備え、
前記判別手段が、他のデータの所在位置特定に必要なデータであると判別したデータの場合は、暗号化を抑止する
ことを特徴とする請求項１記載の実行装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの盗聴および改竄を防止する技術に関し、特に、プログラム実行時に、プログラムが盗聴および改竄されることを防止する技術に関する。
【背景技術】
【０００２】
近年、様々なアプリケーション・プログラム（以下、「アプリケーション」という。）が、パソコンをはじめ、デジタルテレビや携帯電話機などの情報処理機能を有した装置で実行されている。
これらのアプリケーションは、元々その装置に組み込まれていたものや、ユーザが購入し乗せたもの、また、プログラム配信サービスによって提供されているものなど様々である。プログラム配信サービスによるものとは、例えば、インターネットを介してダウンロードしたり、デジタル放送の放送波に多重化されて送信されてくるものである。
【０００３】
このように、現在、アプリケーションを実行できる機能を有している装置（以下、「実行装置」という。）では、多種多様な用途・目的のプログラムが実行されていることになる。
その一方で、プログラムが改竄されたり、データが盗まれたりという不正行為が起こっている。このような不正行為は、プログラム配信サービス等の円滑な実施の障害となることから、プログラムの改竄等を防止する技術が開発されている。
【０００４】
例えば、ＣＰＵ（中央処理装置：Central Processing Unit）の外部のメモリには、暗号化したプログラムを置くこととし、ＣＰＵに読込む際に復号するという技術である（特許文献１、図１１参照）。この方法であれば、デバッガ等を用いてメモリを参照したり、メモリの内容を書き換えてプログラムの動作を追ったりという方法によるプログラムの解析が非常に困難となり、結果としてプログラムの改竄やデータの盗聴を防止できる可能性が増大することになる。
【特許文献１】特開平２−２９７６２６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、メモリ上に置くプログラムの全てを暗号化し、ＣＰＵが必要とする都度に復号化処理を行い、メモリに書き出す都度に暗号化処理を行うため、実行速度が遅くなってしまうという問題がある。
そこで、本発明は、改竄されたり、盗まれたりしては困るようなデータ等の改竄・盗聴を防止しつつ、プログラム実行速度の低下が気にならないような実行装置の提供を目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決する為に、本発明の実行装置は、オブジェクト指向言語で作成されたアプリケーションプログラムを実行する実行装置であって、前記アプリケーションプログラムは、１以上のメソッドを有する1以上のクラスと秘匿の必要性の有無を表す秘匿性情報とを含んでおり、前記秘匿性情報に基づいて、暗号化が必要であるか否かを判断する暗号化判断手段と、前記メソッドを実行する際に、前記メソッドが操作するデータを含むオブジェクトをメモリに記録するオブジェクト記録手段とを備え、前記暗号化判断手段で暗号化が必要であると判断された場合においては、前記オブジェクト記録手段は、暗号化されたデータを含むオブジェクトを記録することを特徴とする。
【発明の効果】
【０００７】
本発明に係る実行装置は、上述の構成を備えることにより、アプリケーションが実行されている間、メインメモリに記録されるデータのみを暗号化しておくことができるので、暗号化等に必要な処理時間を減らし、かつ、アプリケーションで扱うデータの盗聴・改竄を困難にすることができるようになる。
すなわち、プログラムは通常、命令部とデータ部とで構成されるが、保護したいものがデータである場合は、そのデータのみを暗号化すればよい。その結果として、命令部にアクセスする場合には、暗号化復号化の処理時間が不要になり、全体として保護したいものは保護しつつ、処理時間も最小限度に抑えることが出来るようになる。
【０００８】
ここで、秘匿性情報が示す秘匿の必要性の有無の対象は、アプリケーション全体という単位、クラス単位、メソッド単位、さらにはフィールド単位などであってもよい。
また、前記秘匿性情報は、更に、秘匿の度合いを示す情報を含み、前記実行装置は、更に、前記秘匿性情報に基づいて暗号化方式を決定する暗号方式決定手段を備え、前記暗号化判断手段で暗号化が必要であると判断された場合においては、前記オブジェクト記録手段は、前記暗号方式決定手段で決定された暗号化方式で暗号化されたデータを含むオブジェクトを記録することとしてもよい。
【０００９】
これにより実行装置は、アプリケーションの秘匿の度合いによって、暗号化のアルゴリズムを換えることができるので、アプリケーションの重要度とアプリケーションの実行速度とを考慮して、暗号化方式を決めることが出来るようになる。
ここで、秘匿性情報は、暗号化をすべきか否かの情報のみならず、どのようなレベルで保護すべきか、また、どのようなアルゴリズムを使用すべきか、どのくらいの長さの暗号鍵を使用すべきか等の情報を示すものであってもよい。
【００１０】
また、前記オブジェクト内のデータを書き換えるときは、前記データが暗号化されている場合は、暗号化されたデータを記録することとしてもよい。
また、前記メモリに記録されたオブジェクトは、オブジェクト内のデータが暗号化されているか否かを示す情報を有し、前記情報がオブジェクト内のデータが暗号化されていることを示している場合は、暗号化されたデータを記録することとしてもよい。
【００１１】
これにより実行装置は、アプリケーションのデータを書き換える際にも、データを暗号化することができるので、アプリケーション実行中は、データが保護されるようになる。
また、前記実行装置は、更に、データが他のデータの所在位置特定に必要なデータであるか否かを判別する判別手段を備え、前記判別手段が、他のデータの所在位置特定に必要なデータであると判別したデータの場合は、暗号化を抑止することとしてもよい。
【００１２】
これにより実行装置は、暗号化するデータのうち、いわゆる参照型であるデータは暗号化しないことができるので、ガーベージコレクションの際の処理速度の低下を抑えることができるようになる。
すなわち、参照型のデータそのものは暗号化せずとも、その参照先のデータを暗号化しておけば、データを保護する目的は達せられるからである。また、ガーベージコレクションの際に参照型のデータを書き換える場合には、暗号化復号化の処理が不要になることから、処理速度の向上につながる。
【００１３】
また、本発明の実行装置は、プログラムを実行する実行装置であって、前記プログラムは、データ部と秘匿の必要性の有無を表す秘匿性情報とを含んでおり、前記秘匿性情報に基づいて、暗号化が必要であるか否かを判断する暗号化判断手段と、前記実行可能プログラムを実行する際に、前記データ部をメインメモリにロードするロード手段とを備え、前記ロード手段は、前記暗号化判断手段で暗号化が必要であると判断された場合は、暗号化してデータ部をロードすることを特徴とする。
【００１４】
本発明に係る実行装置は、上述の構成を備えることにより、プログラムが実行されている間、暗号化が必要なデータ部のみを暗号化してメインメモリにロードすることができるので、暗号化等に必要な処理時間を減らし、かつ、プログラムで扱うデータの盗聴・改竄を困難にすることができるようになる。
【発明を実施するための最良の形態】
【００１５】
＜概要＞
本発明に係る実行装置は、実行装置で実行されるアプリケーション毎にその用途・目的が異なることから、アプリケーション毎にセキュリティ要件が異なること、および、アプリケーション自体よりもそのアプリケーションの扱うデータに秘匿性が高い場合が多いことに着目したものである。
【００１６】
ここで、セキュリティ要件が異なるとは、アプリケーションによって、保護したいデータが異なっており、またさらに、秘匿性の度合いが異なっているということである。
すなわち、データの秘匿性を必要としないアプリケーションを実行する場合には、実行速度の低下を伴う暗号化、復号化の処理は極力減らしたほうが望ましく、また、非常に秘匿性の高いデータを取り扱うアプリケーションを実行する場合には、多少実行速度が遅くなっても、可能な限り強度の高い暗号アルゴリズムを用いてデータを保護したほうがよいこともあるということである。
【００１７】
本発明は、扱うデータの重要度に応じて、自由に暗号化の度合いを変えることが可能であることを特徴とするものである。
アプリケーションで扱うデータの秘匿性の度合いは、そのアプリケーションを作成するときに、作成者またはそのユーザのみが知りうるものである。
従って、本発明に係る実行装置は、データを直接アクセス等するプログラムが、そのデータを生成したアプリケーションを特定する機能を有する。
【００１８】
すなわち、生成したアプリケーションを特定することで、秘匿性の高いデータを扱うプログラムが生成したデータであるか否かを判別することができることになり、秘匿性の高いデータのみを暗号化することができるようになる。
結果として、本実行装置は、暗号化による実行時間の低下を最小限に抑えつつデータの盗聴を防ぐデータ保護機能を備えているものであるといえる。
【００１９】
またさらに、アプリケーションに求められる秘匿性の度合いに応じて、暗号アルゴリズムの強度や鍵を選択できるものでもある。
以下、本発明の実施形態に係る実行装置について説明する。
本実施形態では、Ｊａｖａ（登録商標）バーチャルマシン上で動くＪａｖａ（登録商標）アプリケーションについて説明する。
【００２０】
＜構成＞
図１は、本発明にかかる実行装置の構成を表す図である。
実行装置３０００は、アプリケーション３１００、仮想マシン２０００、アプリケーション制御部３２００、ＯＳ（Operating System）３３００、ＣＰＵ（Central Processing Unit）３４００、ＲＯＭ（Read Only Memory）３５００およびＲＡＭ（Random Access Memory）３６００で構成される。
【００２１】
実行装置３０００は、アプリケーションを実行する機能のほか、それぞれの装置特有の機能を有する（図示していない）。本実行装置３０００は、具体的には、デジタルテレビ、セットトップボックス、ＤＶＤレコーダー、Ｂｌｕ−ＲａｙＤｉｓｃ（ＢＤ）レコーダー、カーナビ端末、携帯電話、ＰＤＡなどの、Ｊａｖａ（登録商標）仮想マシンを搭載する電子機器全般が該当する。
【００２２】
ここで、本実行装置３０００のアプリケーションを実行する機能とは、通常のパーソナルコンピュータやデジタル家電機器等に搭載されているソフトウェア実行手段と同様のものである。例えば、実行装置３０００がデジタルテレビであれば、受信したデジタルデータを画像に変換し表示するアプリケーションを実行することになる。
まず、アプリケーション３１００は、本実行装置３０００で実行するアプリケーションであって、本装置外のアプリケーションファイル１０００からダウンロードしたものである。このアプリケーションファイル１０００には、暗号化されたＪａｖａ（登録商標）アプリケーションが入っているものとする。
【００２３】
仮想マシン２０００は、Ｊａｖａ（登録商標）言語で記述されたプログラムを逐次解析し実行するＪａｖａ（登録商標）バーチャルマシンである。言い換えれば、ソフトウェアプログラムである仮想マシン２０００が、仮想のＣＰＵをシミュレートして、Ｊａｖａ（登録商標）の命令コードを解析実行する。
本実施形態での仮想マシンは、バイトコードをＣＰＵ３４００が理解可能な実行形式に翻訳するＪＩＴコンパイラと呼ばれる機能を持つものとする。
【００２４】
すなわち、Ｊａｖａ（登録商標）言語で記述されたソースプログラムは、バイトコードコンパイラによってバイトコードに変換される。このバイトコードとは、ハードウェアに依存しない中間コードである。このバイトコードが、アプリケーションファイル１０００に入っているものとする。
本実施形態の仮想マシンは、このバイトコードを読出し、ＪＩＴコンパイラで実行形式に翻訳したものを、メモリにローディングする。
【００２５】
尚、Ｊａｖａ（登録商標）バーチャルマシンは、一部もしくは全部のバイトコードを直接実行可能なプロセッサと、プロセッサでは直接実行できないバイトコードを実行するインタプリタから構成されるものなど、様々な構成がある（書籍「Ｊａｖａ（登録商標）  Ｌａｎｇｕａｇｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ（ＩＳＢＮ０−２０１−６３４５１−１）」等参照）。
また、アプリケーション制御部３２００は、アプリケーション３１００をダウンロードしたり、仮想マシン２０００を起動させるなどの、アプリケーションの実行に必要な処理を実行、制御する機能を有する。
【００２６】
ＯＳ３３００は、他のサブプログラムを平行して実行するカーネル及び、ライブラリで構成される技術の総称であり、仮想マシン２０００をサブプログラムとして実行する。例えば、Ｌｉｎｕｘ等がある。
ＣＰＵ３４００は、仮想マシン２０００、ＯＳ３３００、アプリケーション３１００等を実行する機能を有する。
【００２７】
ＲＡＭ３６００は、具体的にはＳＲＡＭ（Static Random Access Memory）、ＤＲＡＭ（Dynamic Random Access Memory）等の一次記憶メモリで構成され、ＣＰＵ３４００が処理を行う際、一時的にデータを保存するために使用される。
ＲＯＭ３５００は、具体的にはフラッシュメモリーやハードディスク等の不揮発性メモリで構成され、ＣＰＵ３４００から指示されたデータやプログラムを記憶する。
【００２８】
図２は、仮想マシン２０００の構成を示す機能ブロック図である。
仮想マシン２０００は、アプリ登録部２１００、ローダ２２００、インタプリタ２３００、ヒープ管理部２４００、ヒープ領域２５００、メソッド領域２６００、ネイティブクラスライブラリ２７００および暗号化情報記憶部２８００で構成される。
また、アプリ取得プログラム３２１０は、アプリケーション制御部３２００のプログラムの1つであり、Ｊａｖａ（登録商標）言語で記述されており、アプリケーションをアプリケーションファイル１０００からダウンロードする機能を有する。ダウンロードするアプリケーションの中身については、図４を用いて後で説明する。
【００２９】
まず、仮想マシン２０００の、各機能部について説明する。
アプリ登録部２１００は、アプリ取得プログラム３２１０から依頼を受け、登録依頼されたアプリケーションの暗号化の必要性の有無、暗号化する場合は、その方法等を決定し、暗号化情報記憶部２８００に記憶させる機能を有する。また、登録依頼されたアプリケーション用のクラスローダオブジェクトを作成する機能を有する。
【００３０】
アプリ登録部２１００は、暗号化判定部２１１０を備え、暗号化判定部２１１０が、アプリ取得プログラム３２１０が取得したアプリケーションの暗号化の必要性の有無の判断と、その暗号化レベルを実行装置３０００が実現できるか否かを判定する。
暗号化判定部２１１０が、アプリケーションの暗号化が可能であると判断したら、アプリ登録部２１００は、そのアプリケーションが生成するデータを暗号化する為の暗号アルゴリズムと暗号鍵を決定し、決定した暗号アルゴリズムなどを対応づけて、暗号化情報記憶部２８００に記憶させる。
【００３１】
ローダ２２００は、アプリケーションファイル１０００やネイティブクラスライブラリ２７００などから、クラスファイルをメソッド領域２６００にロードする機能を有する。クラスファイルについては、図５を用いて後で説明する。
ローダ２２００は、クラスローダ２２１０、ベリファイヤ２２２０、ＪＩＴコンパイラ２２３０を備えている。
【００３２】
クラスローダ２２１０は、クラスファイルをアプリケーションファイル１０００から読込みロードする機能を有する。また、クラスローダ２２１０は、クラスをアンロードする機能も有する。実行が終了し不要になったクラスを仮想マシン２０００から取り除く機能である。
次に、ベリファイヤ２２２０は、クラスのデータ形式の不備や、クラスに含まれるバイトコードの安全性を判定する機能を有する。ローダ２２００は、ベリファイヤ２２２０において妥当ではないと判定されたクラスはロードをしない。
【００３３】
ＪＩＴコンパイラ２２３０は、バイトコードをＣＰＵ３４００が理解可能な実行形式に翻訳する機能を有する。
次に、インタプリタ２３００は、ローダ２２００によりロードされたバイトコードを解釈、実行する機能を有し、Ｊａｖａ（登録商標）仮想マシンにおいて中核な処理を行う。
このインタプリタ２３００は、復号化部２３１０を備え、復号化部２３１０は、ヒープ領域２５００のデータを読み出す際に、データが暗号化されている場合に処理前に復号する機能を有する。また、暗号化部２３２０を備えており、この暗号化部２３２０は、ヒープ領域２５００に記憶するデータを暗号化する場合に、データを書込む前に暗号化する機能を有する。
【００３４】
ヒープ管理部２４００は、インタプリタ２３００の制御の下、ヒープ領域にオブジェクトを作成し、また、消去する機能を有する。
さらに、ヒープ管理部２４００は、ガベージコレクションを行う機能も有する。ガベージコレクションとは、アプリケーション実行において不要になったワーキングメモリを開放し、他の用途に再利用できるようにする機能である。
【００３５】
ここで、ヒープ領域２５００は、オブジェクトの作成されるメモリをいい、メソッド領域２６００は、クラスファイルをロードする先のメモリをいう。これらは、ＲＡＭ３６００に作成される。
また、ネイティブクラスライブラリ２７００は、Ｊａｖａ（登録商標）アプリケーションから呼び出されるライブラリであって、ＯＳ３３００や、実行装置３０００が備えているハードウェア、サブプログラム等で提供される機能をＪａｖａ（登録商標）アプリケーションへ提供している。
【００３６】
暗号化情報記憶部２８００は、暗号化に必要な情報を記憶しておく機能を有し、ＲＡＭ３６００に作成される。
また、本実行装置３０００は、通常のＪａｖａ（登録商標）バーチャルマシンが有する、スレッドを管理する機能部や、スタック領域など（図示していない。）を有するものとする。
尚、実行装置３０００の各機能は、実行装置３０００のメモリ又はハードディスクに格納されているプログラムをＣＰＵが実行することにより実現される。
【００３７】
＜データ＞
以下、本実行装置で用いる主なデータについて、図３から図６を用いて説明する。
図３は、暗号化度情報２８１０の構成および内容例を示す図である。
この暗号化度情報２８１０は、暗号化情報記憶部２８００に記憶されているものである。
【００３８】
暗号化度情報２８１０は、セキュリティ強度２８１１およびデータ暗号化強度１８１２で構成される。
セキュリティ強度２８１１は、アプリケーションで扱うデータのセキュリティの高さを示すものであり、例では、「０」から「２」の３段階としている。この「０」から「３」までの値を、アプリケーション毎に指定することになる。
【００３９】
また、データ暗号化強度１８１２は、データを暗号化する場合の度合いを表す。例えば、セキュリティ強度２８１１「０」の場合のデータ暗号化強度２８１２は、暗号化は「不要」である。すなわち、暗号化は行わないことを示す。セキュリティ強度２８１１「１」以上はデータの暗号化が必要であることを意味している。さらにセキュリティ強度２８１１「２」以上では、セキュリティ強度２８１１「１」よりも強力な暗号アルゴリズム、または長い鍵を用いて暗号化を行う必要があることを表している。
【００４０】
次に、図４はアプリケーションファイル１０００に入っているアプリケーションの構成および内容例を示す図である。
アプリケーション１００１は、アプリケーションクラス１２００と、データファイル１３００と、メタデータ１４００を含んでいる。
アプリケーションクラス１２００は、アプリケーションを構成する１つ以上のクラスファイルの集合である。
【００４１】
データファイル１３００は、アプリケーションが実行時に使用するデータである。具体的には、画像ファイルや音声ファイルなどが該当する。
また、メタデータ１４００には、アプリケーション１００１に関する様々な情報が保持されている。例えば、メタデータ１４００は、起動クラス名１４１０とセキュリティ強度情報１４２０とを含んでいる。
【００４２】
起動クラス名１４１０は、アプリケーションクラス１２００のうち、最初に実行されるべきクラスの名前である。
セキュリティ強度情報１４２０は、アプリケーションクラス１２００を実行する際に、仮想マシン２０００に求められるセキュリティの強さを表す。このセキュリティ強度情報１４２０で表される情報は、暗号化度情報２８１０のセキュリティ強度２８１１と同じものである。
【００４３】
このセキュリティ強度情報１４２０の指定の仕方は、例えばバイトコードコンパイラのオプションとして設定することとする。
図５は、ローダ２２００によってメソッド領域２６００に生成されるクラス情報１２１０の構成および内容例を示す図である。
クラス情報１２１０は、クラス名１２１１、親クラス１２１２、インタフェーステーブル１２１３、メソッドテーブル１２１４、フィールドテーブル１２１５、クラスローダＩＤ１２１６およびセキュアフラグ１２１７などで構成される。
【００４４】
クラス名１２１１は、当該クラスのクラス名である。
親クラス１２１２は、当該クラスの親クラスを表す内部形式への参照である。
ここで、参照とは、ポインタやインデックスなど、そのデータの実体を指し示す表現をいう。
インタフェーステーブル１２１３は、当該クラスが実装するインタフェースへの参照である。
【００４５】
メソッドテーブル１２１４は、当該クラスが備えるメソッドの一覧である。
フィールドテーブル１２１５は、このクラスが備えるフィールドの一覧である。
また、クラスローダＩＤ１２１６は、当該クラスをロードしたクラスローダオブジェクトを表す。具体的には、クラスローダＩＤ２８２１が入っている（図６参照）。
セキュアフラグ１２１７は、当該クラスがセキュアクラスか否かを表す。
【００４６】
ここで、セキュアクラスとは、セキュリティ強度情報１４２０に、セキュリティ強度２８１１「１」もしくは「２」を指定されたアプリケーション１００１のアプリケーションクラス１２００に含まれるクラスをいう。
このセキュアフラグ１２１７が「ＯＮ」になっている場合は、このクラスで扱われるデータは、暗号化が必要と判断されることになる。
【００４７】
また、このセキュアフラグ１２１７は、クラスがロードされるときに、ローダ２２００によって設定される。本実施形態では、アプリケーション１００１のセキュリティ強度情報１４２０によって、クラスのセキュアフラグ１２１７が一律に決まることとする。すなわち、暗号化が必要なアプリケーションのすべてのクラスのセキュアフラグ１２１７は「ＯＮ」とする。
【００４８】
図６は、暗号アルゴリズム情報２８２０の構成および内容例を示す図である。
この暗号アルゴリズム情報２８２０は、暗号化情報記憶部２８００に記憶されており、アプリ登録部２１００によって、作成される。
暗号アルゴリズム情報２８２０は、クラスローダＩＤ２８２１、クラスローダアドレス２８２２、暗号アルゴリズム２８２３および暗号鍵２８２４で構成される。
【００４９】
クラスローダＩＤ２８２１は、アプリ登録部２１００がクラスローダに一意に割り当てる識別子である。すなわち、アプリケーション1つに対して、1つのクラスローダ２２１０が存在することになる。本実施形態では、「０」から昇順につけていくものとする。
クラスローダアドレス２８２２は、仮想マシン２０００から登録を要求されたクラスローダオブジェクトのアドレスである。
【００５０】
例では、クラスローダＩＤが「０」のクラスローダでロードされたアプリケーションが実行時に生成するデータは、暗号化されないことを表し、クラスローダＩＤが「２」のクラスローダでロードされたアプリケーションが実行時に生成するデータは、「ＡＥＳ（Advanced Encryption Standard）」アルゴリズムで暗号化され、その鍵は「ＹＹＹＹ」であることを表している。
【００５１】
＜動作＞
以下、本発明に係る実行装置３０００の動作について図７〜図１０を用いて説明する。
図７（ａ）は、オブジェクト２５１０の構成例を示す図であり、動作の説明で、必要に応じて参照する。まず、図７について説明する。
オブジェクト２５１０は、クラス内のメソッドが実行されるときに、作成されるものであり、ヒープ領域２５００に作成される。
【００５２】
オブジェクト２５１０は、オブジェクトヘッダ２５１１とオブジェクトデータ２５１２とで構成され、オブジェクトヘッダ２５１１には、当該オブジェクトが属するクラス情報２５５１、オブジェクトデータ２５１２のサイズであるデータサイズ２５５２、オブジェクトデータ２５１２が暗号化されているか否かを示す暗号化フラグ２５５３などが含まれている。この暗号化フラグ２５５３が「ＯＮ」であれば、オブジェクトデータ２５１２が暗号化されていることとなる。
【００５３】
この暗号化フラグ２５５３は、このメソッドが属するクラス、すなわちクラス情報２５５１で参照されるクラスのセキュアフラグ１２１７が「ＯＮ」の場合、「ＯＮ」とする。
クラス情報２５５１は、クラスローダによって、メソッド領域２６００内に生成されたクラスの内部表現のアドレスである。クラス情報１２１０（図５参照）の先頭アドレスが、クラス情報２５５１に入っていることになる。
【００５４】
また、オブジェクトデータ２５１２は、Ｊａｖａ（登録商標）アプリケーションが動作することによって生成される実行時データであり、０個以上のフィールドを持つ。フィールドの数はオブジェクトが属するクラスにより一意に決定される。
フィールドは、基本型と呼ばれる数値や文字を扱うフィールドと、参照型と呼ばれる他のオブジェクトへの参照を表すフィールドの２種類がある。本実施形態では、オブジェクトデータ２５１２全体で、暗号化がなされるものとする。
【００５５】
図７（ｂ）は、オブジェクト２５１０の内容例を示す図である。
例えば、クラス情報２５５１はアドレス「０ｘｄｅａｄｂｅｅｆ」にある内部表現を参照し、オブジェクトデータのデータサイズ２５５２は「２４」である。暗号化フラグ２５５３の値が「１（ＯＮ）」であることで、このオブジェクトが暗号化されていることを表している。
【００５６】
アドレス「０ｘｄｅａｄｂｅｅｆ」にある内部表現から、クラスローダＩＤ１２１６（図５参照）を参照することで、このクラスをロードしたクラスローダオブジェクトを特定できる。このクラスローダオブジェクトのＩＤであるクラスローダＩＤ１２１６が「２」であるとすると、そのクラスローダＩＤ１２１６「２」をキーに、暗号アルゴリズム情報２８２０（図６参照）を検索する。暗号アルゴリズム情報２８２０のクラスローダＩＤ２８２１が「２」であるので、該当のオブジェクトデータ２５１２は、「ＡＥＳ」アルゴリズムで、鍵「ＹＹＹＹ」を用いて暗号化されていることが分かる。
【００５７】
実際の暗号化は、インタプリタ２３００の暗号化部２３２０が行い、復号化は、インタプリタ２３００の復号化部２３１０が行う。
以下、図８から図１０を用いて、実行装置の処理を説明する。
本実施形態では、実行装置の電源を入れた場合、予め定められているアプリケーションが実行されるものとする。
【００５８】
図８は、実行装置３０００の処理を表すフローチャートである。
まず、ユーザが実行装置３０００の電源を投入する（ステップＳ８１０）。
通電したＣＰＵ３４００は、ＯＳ３３００を起動する（ステップＳ８２０）。  
起動したＯＳ３３００は、仮想マシン２０００を起動して（ステップＳ８３０）、アプリ取得プログラム３２１０を起動するよう指示する。
【００５９】
指示を受けた仮想マシン２０００は、アプリ取得プログラム３２１０を起動する（ステップＳ８４０）。
仮想マシン２０００によって起動されたアプリ取得プログラム３２１０は、アプリケーションファイルからアプリケーション１００１を読込み、アプリ登録部２１００に、アプリケーションの登録処理を依頼する。ここでは、アプリケーション１００１内の、メタデータ１４００（図４参照）のみを読込み、アプリ登録部２１００に渡す。他のアプリケーションクラス１２００とデータファイル１３００は、アプリケーションの実行に応じて、適時読込まれることになる。
【００６０】
このアプリケーション登録処理において、アプリケーション１００１の秘匿性の度合いが判定され、暗号化のアルゴリズムなどが決定される。また、このアプリケーション１００１用のクラスローダオブジェクトが生成される（ステップＳ８５０）。すなわち、このアプリケーション登録処理が終了すると、図６で示す暗号アルゴリズム情報２８２０に、該当するアプリケーションの暗号化の情報が登録されていることになる。アプリケーション登録処理の詳細については、図９を用いて後で説明する。
【００６１】
アプリケーションの登録処理を終了したアプリ登録部２１００は、その旨をアプリ取得プログラム３２１０に返す。登録処理が終了した旨を受け取ったアプリ取得プログラム３２１０は、インタプリタ２３００に起動クラス名１４１０を通知し、ロードを依頼する。
インタプリタ２３００は、クラスローダオブジェクトに、起動クラス名１４１０（図４参照）で指定されたクラス（以下、「起動クラス」という。）をロードする旨指示する。クラスローダオブジェクトは、指定されたクラスをメソッド領域２６００にロードする（ステップＳ８６０）。この時点で、図５に示すようなクラス情報１２１０がメソッド領域２６００に作成されており、クラスローダＩＤ１２１６とセキュアフラグ１２１７が設定されていることになる。
【００６２】
この際、ベリファイヤ２２２０により正当性がチェックされ、ＪＩＴコンパイラ２２３０により、ネイティブコードに変換されている。
これで、アプリケーションは仮想マシン２０００へロードされ、実行可能な状態となる。
クラスローダオブジェクトによる起動クラスのロードが完了すると、インタプリタ２３００は、起動クラスのメソッドを実行することでアプリケーションの起動を行なう。
【００６３】
メソッドを実行するとは、すなわち、ヒープ管理部２４００に依頼して、オブジェクトをヒープ領域２５００に作成（ステップＳ８７０）し、メソッドを実行していくことになる（ステップＳ８８０）。
新たなメソッドを実行する場合には、必要に応じて属するクラスをロードし（ステップＳ８６０）、オブジェクトを作成し（ステップＳ８７０）、メソッドを実行する。
【００６４】
オブジェクトをヒープ領域２５００に作成した時点で、暗号化が必要である場合には、オブジェクトデータ２５１２が暗号化されており、暗号化フラグが設定されている。
従って、このオブジェクトのフィールドにアクセスする場合には、オブジェクトヘッダ２５１１の暗号化フラグ２５５３を参照して、「ＯＮ」ならば、読み出すときは、読み出したデータを復号して処理し、また、書込むときは暗号化したデータを書込むことを行う。暗号化フラグ２５５３が「ＯＦＦ」ならば、復号化、暗号化は行わずに、フィールドにアクセスする。暗号アルゴリズムなどの取得方法は、図７（ｂ）での説明の通りである。
【００６５】
仮想マシン２０００を構成する全ての機能部は、オブジェクトに対して読み込みの操作を行う前に、オブジェクトヘッダ２５１１内の暗号化フラグ２５５３を検査し、暗号化されている場合には復号化部２３１０によりそれを復号化し、読み込む。また、オブジェクトに対して書き込みの操作を行う前に、オブジェクトヘッダ２５１１内の暗号化フラグ２５５３を検査し、オブジェクトが暗号化されている場合には暗号化部２３２０により暗号化したデータを書き込む。
【００６６】
＜１．アプリケーション登録処理＞
図９を用いて説明する。図９は、アプリケーション登録処理を表すフローチャートである。
仮想マシン２０００を起動したアプリ取得プログラム３２１０は、アプリケーションファイルからアプリケーション１００１を読込み、アプリ登録部２１００に、アプリケーションの登録処理を依頼する（ステップＳ９１０）。
【００６７】
登録処理を依頼されたアプリ登録部２１００は、登録を依頼されたアプリケーションに含まれるセキュリティ強度情報１４２０（図４参照）を読み出す（ステップＳ９２０）。この時、アプリケーションが暗号化されていれば、セキュリティ強度情報１４２０の読み出しに先立ち復号する。
次に、読み出したセキュリティ強度情報１４２０に対応する暗号化機能を、実行装置３０００が備えているか否かを判定する（ステップＳ９３０）。この判定は、暗号化判定部２１１０に依頼して行う。
【００６８】
具体的には、セキュリティ強度情報１４２０が「２」であった場合を想定すると、暗号化判定部２１１０は、暗号化情報記憶部２８００から暗号化度情報２８１０を読み出し、セキュリティ強度２８１１が「２」に対応するデータ暗号化強度２８１２が「強」であることを読み出す。
このデータ暗号化強度２８１２が「強」の暗号化方法を実行装置３０００がサポートしている場合、読み出したセキュリティ強度情報１４２０に対応する暗号化機能を実行装置３０００が備えていると判断する。尚、本実行装置において、どのレベルの暗号化がサポートされているかは、予め決められており、アプリ登録部２１００は記憶しているものとする。
【００６９】
実行装置３０００が、読み出したセキュリティ強度情報１４２０に対応する暗号化機能を備えていると暗号化判定部２１１０が判断した場合には（ステップＳ９３０：ＹＥＳ）、アプリ登録部２１００は、アプリケーションをロードするためのクラスローダオブジェクトを生成する（ステップＳ９４０）。
次に、読み出したセキュリティ強度情報１４２０に応じて、暗号アルゴリズムと暗号化に使用する鍵の長さを決定し、暗号化鍵を生成する（ステップＳ９５０）。暗号鍵は、同じアプリケーションであっても、登録するたびにランダムに生成することとする。より判読されにくくなるからである。また、セキュリティ強度情報１４２０で指定されたよりも強い暗号アルゴリズムや鍵を用いてもよいものとする。
【００７０】
アプリ登録部２１００は、クラスローダＩＤ２８２１、クラスローダオブジェクトのアドレス２８２２、暗号アルゴリズム２８２３、暗号鍵２８２４とを対応づけて、暗号アルゴリズム情報２８２０へ登録する（ステップＳ９６０）。
セキュリティ強度情報１４２０に対応する暗号化機能を実行装置３０００が備えていない場合には、アプリケーションの起動を中断する（ステップＳ９７０）。アプリケーションを起動しないことで、アプリケーションの秘匿性が守られることになる。
【００７１】
＜２．オブジェクト生成処理＞
図１０を用いて説明する。図１０は、オブジェクトの生成処理を表すフローチャートである。
クラスローダオブジェクトによる起動クラスのロードが完了する（図８、ステップＳ８６０参照）と、インタプリタ２３００は、起動クラスのメソッドを実行することでアプリケーションの起動を行なう。
【００７２】
メソッドを実行するとは、まず、ヒープ管理部２４００に、オブジェクトの作成を依頼する。
依頼を受けたヒープ管理部２４００は、新しいオブジェクトのためのメモリ領域を確保する（ステップＳ１０１０）。
次に、インタプリタ２３００は、カレントクラスがセキュアクラスであるかを検査する。これはカレントクラスのセキュアフラグ１２１７を調べることで判定できる。セキュアフラグ１２１７が「ＯＮ」であれば、セキュアクラス、すなわち、暗号化が必要なクラスであると判定する。
【００７３】
カレントクラスがセキュアクラスと判定された場合には（ステップＳ１０２０：ＹＥＳ）、オブジェクトヘッダ２５１１内の暗号化フラグにオブジェクトが暗号化されていることを表す「１」を設定する（ステップＳ１０４０）。
フラグの設定後、オブジェクトデータ２５１２を暗号化する（ステップＳ１０４０）。ここでの暗号化の方法は、暗号アルゴリズム情報２８２０（図６参照）を読み出すことで、決定する。
【００７４】
カレントクラスがセキュアクラスではないと判定された場合には（ステップＳ１０２０：ＮＯ）、オブジェクトヘッダ２５１１内の暗号化フラグにオブジェクトが暗号化されていないことを表す「０」を設定する（ステップＳ１０５０）。
ここで、カレントクラスとは、実行中のメソッドを定義しているクラスをいう。
インタプリタ２３００は、Ｊａｖａ（登録商標）メソッドを実行する際にＪａｖａ（登録商標）フレームと呼ばれるデータ構造をＲＡＭ３６００上に作成する。Ｊａｖａ（登録商標）フレームはＪａｖａ（登録商標）メソッドの呼び出し毎に一つ生成され、メソッドの実行が終了した時に破壊される。インタプリタ２３００は、複数のスレッドにより実行されるが、制御権が与えられているスレッドの任意の場所で、実行中のメソッドに対してアクティブなＪａｖａ（登録商標）フレームは一つしか存在しない。このフレームのことをカレントフレームと呼び、そこで実行中のメソッドをカレントメソッドと呼ぶ。そのカレントメソッドを定義しているクラスがカレントクラスである。
【００７５】
すなわち、カレントクラスは、ある瞬間には1つに定まる。
＜補足＞
以上、本発明に係る実行装置について実施形態に基づいて説明したが、この実行装置を部分的に変形することもでき、本発明は上述の実施形態に限られないことは勿論である。即ち、
（１）実施形態では、実行装置３０００で実行するアプリケーションは、アプリ取得プログラム３２１０が、本装置外のアプリケーションファイル１０００からダウンロードしたものであることとしているが、インターネット上にあるサーバから、ダウンロードすることとしてもよい。
【００７６】
この場合、アプリ取得プログラム３２１０は、ＴＬＳ（Transport Layer Security）、ＨＴＴＰ（Hypertext Transfer Protocol）等のプロトコルに従いＪａｖａ（登録商標）アプリケーションをダウンロードする機能を有するプログラムとなる。
ここで、ＴＬＳは暗号化により通信時のデータの盗聴、改竄を防ぐデータ転送方式である（ＲＦＣ２２４６参照）。また、ＨＴＴＰは、インターネット上のデータ通信で一般的に用いられているデータ転送方式である（ＲＦＣ２６１６参照）。
【００７７】
尚、ＲＦＣ（Request For Comments）とは、インターネット上の技術を規格化するＩＥＴＦ（Internet Engineering Task Force）の公式文書であり、プロトコルなど様々な技術の使用がまとめられているものである。
また、実行装置３０００で実行するアプリケーションは、デジタル放送のデータ放送として、ＭＰＥＧ（Moving Picture Coding Experts Group）２トランスポートストリーム内に埋め込まれたＪａｖａ（登録商標）アプリケーションであってもよい。
【００７８】
この場合、アプリ取得プログラム３２１０は、トランスポートストリーム内に埋め込まれたＪａｖａ（登録商標）アプリケーションを実行装置３０００内に読み出すプログラムとなる。
ＭＰＥＧ２トランスポートストリームにＪａｖａ（登録商標）プログラムを埋め込む方法としては、例えば、ＤＳＭＣＣ方式がある。ＤＳＭＣＣ方式とは、ＭＰＥＧ２トランスポートストリームのパケットの中に、コンピュータで使用されているディレクトリやファイルで構成されるファイルシステムをエンコードする方法である（ＭＰＥＧ規格書ＩＳＯ／ＩＥＣ１３８１８１−１、ＭＰＥＧ規格書ＩＳＯ／ＩＥＣ１３８１８１−６参照）。
【００７９】
またさらに、実行装置３０００で実行するアプリケーションは、ＳＤカード（Secure Digital memory card）、ＣＤ−ＲＯＭ（Compact Disk Read Only Memory）、ＤＶＤ（Digital Versatile Disk）、Ｂｌｕ−ＲａｙＤｉｓｃ等に記録されたＪａｖａ（登録商標）アプリケーションであってもよい。
この場合、アプリ取得プログラム３２１０は、これらの記録媒体からアプリケーションを読み出すプログラムとなる。
【００８０】
また、実行装置３０００で実行するアプリケーションは、実行装置３０００内にあるＲＯＭ３５００に記録されたＪａｖａ（登録商標）アプリケーションであってもよい。
この場合、アプリ取得プログラム３２１０は、ＲＯＭ３５００からＲＡＭ３６００に、Ｊａｖａ（登録商標）アプリケーションを読み出すプログラムとなる。
（２）本実施形態ではアプリ取得プログラム３２１０などはＪａｖａ（登録商標）言語で記述されたＪａｖａ（登録商標）プログラムとしているが、同等の機能を有する、ネイティブ言語で記述されたプログラムや、ハードウェアで実現されていてもよい。
【００８１】
また、ＪＡＶＡ（登録商標）バーチャルマシンで実行するアプリケーションは、Ｊａｖａ（登録商標）言語で記述されたものに限らず、Ｃ＋＋などの他のオブジェクト思考言語で記述されたものであってもよい。
（３）本実施形態では、セキュリティ強度２８１１は「０」〜「２」の３段階としているが、これに限るものではない。
【００８２】
例えば、４段階以上にセキュリティ強度を設定してもよいし、データの暗号化が必要、不要の２段階であってもよい。
（４）本実施形態では、アプリケーション１００１のメタデータ１４００は、起動クラス名１４１０とセキュリティ強度情報１４２０とを含むこととしているが、これら以外の情報を含んでいてもよい。
【００８３】
また、セキュリティ強度を指定する代わりに、メタデータ１４００内で暗号アルゴリズムや鍵の長さを指定することとしてもよい。
なお、アプリケーション１００１がメタデータ１４００を含まないこととする場合には、暗号化判定部２１１０は、そのアプリケーションのセキュリティ強度情報を「０」とみなしたり、実行装置３０００であつかえる最も高いレベルのセキュリティ強度とみなしたりすることとしてもよい
（５）本実施形態では、アプリケーション１００１は、一つのファイルとして構成されているが、アプリケーションクラス１２００、データファイル１３００、メタデータ１４００が別々のファイルであってもよい。また、メタデータ１４００をアプリケーションクラス１２００に埋め込むこととしてもよい。
（６）実施形態では、アプリケーション１００１のセキュリティ強度情報１４２０によって、クラスのセキュアフラグ１２１７が一律に決まることとしているが、このセキュアフラグ１２１７は、クラスごとに設定できることとしてもよい。
【００８４】
例えば、暗号化が必要なクラスのセキュアフラグ１２１７は「ＯＮ」とし、暗号化が不要なクラスは「ＯＦＦ」とするなどである。また、クラスごとに、セキュリティ強度情報１４２０を設定できることとしてもよい。
（７）本実施形態においては、オブジェクトデータ２５１２全体を暗号化しているが、フィールドをそれぞれ個別に暗号化してもよい。
【００８５】
また、フィールドを暗号化する際に、基本型のフィールドのみを暗号化し、参照型のフィールドの暗号化を行わなくしてもよい。この場合、参照型フィールドを識別できない場合には、フィールドごとに暗号化されているか否かのフラグを持つ必要がある。
これにより、多くの参照型のフィールドへのアクセスを必要とするヒープ管理部２４００が行うガベージコレクションを高速に実行できる。
（８）実施形態で示した実行装置の各機能を実現させる為の各制御処理（図２等参照）をＣＰＵに実行させる為のプログラムを、記録媒体に記録し又は各種通信路等を介して、流通させ頒布することもできる。このような記録媒体には、ＩＣカード、光ディスク、フレキシブルディスク、ＲＯＭ、フラッシュメモリ等がある。流通、頒布されたプログラムは、機器におけるＣＰＵで読み取り可能なメモリ等に格納されることにより利用に供され、そのＣＰＵがそのプログラムを実行することにより実施形態で示した実行装置の各機能が実現される。
【００８６】
＜従来技術の説明＞
図１１に示すように、この従来のデータ保護機能を備えた計算機は、中央処理装置２０３の内部に、データの復号処理を行う暗号化データ解読手段２０４、暗号化処理を行うデータ暗号化手段２０５、データバッファ２０６、プログラム実行手段２０７とを備え、中央処理装置２０３の外部にある暗号化データ２０２を中央処理装置２０３内のデータバッファ２０６へ読み込む際に復号し、プログラム実行手段２０７で処理した後に、データ暗号化手段２０５により暗号化して中央演算装置の外部へと出力している。
【産業上の利用可能性】
【００８７】
Ｊａｖａ（登録商標）アプリケーションが実行時に生成するデータの盗聴、改ざんから保護することができ、今後本格展開が予想されるＪａｖａ（登録商標）アプリケーションのダウンロード配信ビジネスにおいて、コンテンツ作成者の権利を保護すること場合などに、特に有用である。
ダウンロード配信ビジネスとして、例えば、携帯電話機では、ＮＴＴ  ＤｏＣｏＭｏがｉ−アプリと呼ばれるサービスを提供している。このサービスは、携帯電話端末がインターネット上にあるアプリケーション配信サーバからＪａｖａ（登録商標）プログラムをダウンロードして、端末上で実行する。また、欧州では、ＤＶＢ−ＭＨＰ（Ｄｉｇｉｔａｌ  Ｖｉｄｅｏ  Ｂｒｏａｄｃａｓｔｉｎｇ−Ｍｕｌｔｉｍｅｄｉａ  Ｈｏｍｅ  Ｐｌａｔｆｏｒｍ）と呼ばれる仕様が策定され、既に仕様に準拠した運用が開始されている。ＤＶＢ−ＭＨＰ規格に基づくデジタル放送では、放送波に多重化されたＪａｖａ（登録商標）プログラムをデジタルＴＶが受信し、それを実行する。
【図面の簡単な説明】
【００８８】
【図１】本発明にかかる実行装置の構成を表す図である。
【図２】仮想マシン２０００の構成を示す機能ブロック図である。
【図３】暗号化度情報２８１０の構成および内容例を示す図である。
【図４】アプリケーションファイル１０００に入っているアプリケーションの構成および内容例を示す図である。
【図５】ローダ２２００によってメソッド領域２６００に生成されるクラス情報１２１０の構成および内容例を示す図である。
【図６】暗号アルゴリズム情報２８２０の構成および内容例を示す図である。
【図７】図７（ａ）は、オブジェクト２５１０の構成例を示す図であり、図７（ｂ）は、オブジェクト２５１０の内容例を示す図である。
【図８】実行装置３０００の処理を表すフローチャートである。
【図９】アプリケーション登録処理を表すフローチャートである。
【図１０】オブジェクトの生成処理を表すフローチャートである。
【図１１】従来技術の構成を表す図である。
【符号の説明】
【００８９】
１０００    アプリケーションファイル
１２００    アプリケーションクラス
１２１０    クラス情報
１３００    データファイル
１４００    メタデータ
１４００    メタ情報
１４１０    起動クラス名
１４２０    セキュリティ強度情報
１６１０    対応処理情報
２０００    仮想マシン
２１００    アプリ登録部
２１１０    暗号化判定部
２２００    ローダ
２２１０    クラスローダ
２２２０    ベリファイヤ
２２３０    ＪＩＴコンパイラ
２３００    インタプリタ
２３１０    復号化部
２３２０    暗号化部
２４００    ヒープ管理部
２５００    ヒープ領域
２５１０    オブジェクト
２６００    メソッド領域
２７００    ネイティブクラスライブラリ
２８００    暗号化情報記憶部
２８１０    暗号化度情報
２８２０    暗号アルゴリズム情報
３０００    実行装置
３１００    アプリケーション
３２００    アプリケーション制御部
３２１０    アプリ取得プログラム
３３００    ＯＳ
３４００    ＣＰＵ
３５００    ＲＯＭ
３６００    ＲＡＭ
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2005096120.tif 000013
【図２】
2005096120.tif 000014
【図３】
2005096120.tif 000015
【図４】
2005096120.tif 000016
【図５】
2005096120.tif 000017
【図６】
2005096120.tif 000018
【図７】
2005096120.tif 000019
【図８】
2005096120.tif 000020
【図９】
2005096120.tif 000021
【図１０】
2005096120.tif 000022
【図１１】
2005096120.tif 000023
【国際調査報告】
2005096120.tif 000024
2005096120.tif 000025
2005096120.tif 000026
2005096120.tif 000027