(57)【要約】【課題】従来のアプリケーション保護技術では、ダウンロード前後のアプリケーションのハッシュ値を比較することで、ダウンロード時にアプリケーションが改ざんされていないことを保証していた。しかしこの方法では実行時の改ざんに対抗できないため、実行中の仮想マシンが改ざんされた場合にはアプリケーションを保護することができない。【解決手段】改ざんのできない安全な実行部で仮想マシンの改ざん検査を所定のタイミングで行い、改ざんが検出された場合にはアプリケーション実行装置を強制終了させる。【選択図】図１
2007226277.tif 000002
【特許請求の範囲】
【請求項１】
プラットフォームに依存しない中間言語で表現されたプログラムを、プラットフォームに依存した命令へ変換しながら動作する仮想マシンの改ざんを検査する方法であって、第３者による盗聴、改ざんを防止する耐タンパ実行部で実行される仮想マシンローダにより仮想マシンをロードするステップと、
ロードされた仮想マシンのアドレス領域を、前記耐タンパ実行部で実行される改ざん検査部に通知するステップと、
前記改ざん検査部により、前記仮想マシンのアドレス領域が改ざんされたか否かを、所定のタイミングで判定するステップと、
判定の結果、前記仮想マシンが改ざんされていると判定された場合には、前記改ざん検査部は前記仮想マシンの実行を停止させるステップとを含む、仮想マシン改ざん検査方法。
【請求項２】
前記仮想マシンローダが、暗号化された仮想マシンを復号するステップをさらに含む、請求項１に記載の仮想マシン改ざん検査方法。
【請求項３】
前記仮想マシンのアドレス領域は、前記仮想マシンの開始アドレスから終了アドレスまでの領域である請求項１または請求項２に記載の仮想マシン改ざん検査方法。
【請求項４】
前記仮想マシンのアドレス領域は、前記仮想マシンを構成するサブプログラムの開始アドレスから終了アドレスまでの領域である請求項１または請求項２に記載の仮想マシン改ざん検査方法。
【請求項５】
前記仮想マシンが所定の処理を行う直前に、前記仮想マシンが前記改ざん検査部を呼び出し、改ざん検査を行う請求項１から請求項４のいずれか１項に記載の仮想マシン改ざん検査方法。
【請求項６】
前記所定の処理は、クラスロード処理を含む請求項５に記載の仮想マシン改ざん検査方法。
【請求項７】
前記所定の処理は、メソッド呼び出し処理を含む請求項５に記載の仮想マシン改ざん検査方法。
【請求項８】
前記所定の処理は、バイトコードベリファイ処理を含む請求項５に記載の仮想マシン改ざん検査方法。
【請求項９】
前記所定の処理は、ＪＩＴコンパイル処理を含む請求項５に記載の仮想マシン改ざん検査方法。
【請求項１０】
クラスファイルに埋め込み、もしくは添付されたセキュリティ属性を読み取り、セキュリティ属性に応じて前記所定の処理をアプリケーション実行の途中に変更する請求項５から請求項９のいずれか１項に記載の仮想マシン改ざん検査方法。
【請求項１１】
前記改ざん検査部による前記仮想マシンの改ざん検査を所定の間隔で定期的に行うことを特徴とする請求項１から請求項４のいずれか１項に記載の仮想マシン改ざん検査方法。
【請求項１２】
クラスファイルに埋め込み、もしくは添付されたセキュリティ属性を読み取り、セキュリティ属性に応じて前記所定の間隔を動的に変更する請求項１１に記載の仮想マシン改ざん検査方法。
【請求項１３】
前記仮想マシン上で動作するアプリケーションがアイドル状態の間は、前記改ざん検査部による前記仮想マシンの改ざん検査を一時停止する請求項１から請求項１２のいずれか１項に記載の仮想マシン改ざん検査方法。
【請求項１４】
ソフトウェア実行部と、第３者による盗聴、改ざんを防止する耐タンパソフトウェア実行部を備え、前記耐タンパソフトウェア実行部内で実行される、仮想マシンを前記ソフトウェア実行部内へロードする仮想マシンロード手段と、前記仮想マシンが実行時に改ざんされていないか否かを所定のタイミングで検査し、前記検査の結果、前記仮想マシンは改ざんされていると判定された場合には、前記仮想マシンを終了させる改ざん検査部とを備えた仮想マシン改ざん検査装置。
【請求項１５】
前記安全ソフトウェア実行部は、前記仮想マシン改ざん検査装置内の耐タンパ機能で保護されたソフトウェア実行部である請求項１４に記載の仮想マシン改ざん検査装置。
【請求項１６】
前記耐タンパ実行部は、前記仮想マシン改ざん検査装置に内蔵されたハードウェアである請求項１４に記載の仮想マシン改ざん検査装置。
【請求項１７】
前記耐タンパソフトウェア実行部は、前記仮想マシン改ざん検査装置から着脱可能なスマートカードである請求項１４に記載の仮想マシン改ざん検査装置。
【請求項１８】
前記改ざん検査部は、前記仮想マシンが改ざんされていると判定した際に、前記仮想マシン改ざん検査装置の電源を切断することを特徴とする請求項１４から請求項１７のいずれか１項に記載の仮想マシン改ざん検査装置。
【請求項１９】
前記改ざん検査部は、前記仮想マシンが改ざんされていると判定した際に、前記仮想マシン改ざん検査装置を再起動させることを特徴とする請求項１４から請求項１７のいずれか１項に記載の仮想マシン改ざん検査装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシン方式（特にＪａｖａ（Ｒ）仮想マシン）によりプログラムを実行する機能を持つ端末装置において、インターネットやＤＶＤ等の端末外部のメディアからダウンロードしたプログラムを実行する時に、プログラムが盗聴、改竄されることを防止することに関する。
【背景技術】
【０００２】
従来のデジタルＴＶや携帯電話などの電子機器では、Ｊａｖａ（Ｒ）言語で記述されたプログラムをダウンロードし、実行する機能を搭載するものが増加している。例えば携帯電話では、ＮＴＴ  ＤｏＣｏＭｏがｉ−アプリと呼ばれるサービスを提供している。このサービスは、携帯電話端末がインターネット上にあるアプリケーション配信サーバからＪａｖａ（Ｒ）プログラムをダウンロードして、端末上で実行する。また、欧州では、ＤＶＢ−ＭＨＰ（Ｄｉｇｉｔａｌ  Ｖｉｄｅｏ  Ｂｒｏａｄｃａｓｔｉｎｇ−Ｍｕｌｔｉｍｅｄｉａ  Ｈｏｍｅ  Ｐｌａｔｆｏｒｍ）と呼ばれる仕様が策定され、既に仕様に準拠した運用が開始されている。ＤＶＢ−ＭＨＰ規格に基づくデジタル放送では、放送波に多重化されたＪａｖａ（Ｒ）プログラムをデジタルＴＶが受信し、それを実行する。
【０００３】
このようなプログラム配信サービスにおいて、配信されるプログラムはそのプログラムの開発者の知的財産権で保護されており、これを悪意のある攻撃者が盗聴することは防がなくてはならない。また、悪意のある攻撃者により改ざんされたプログラムが、利用者やアプリ製作者の意図しない動作をすることを防がなくてはならない。これらを実現するために、従来の電子機器は以下のような機能を備えている。
【０００４】
暗号化したプログラムをダウンロードし、端末内部で復号することにより、通信途中の盗聴、改ざんを防止する。
【０００５】
ハッシュ関数等を使い、ダウンロード時にプログラムが改ざんの有無を検証し、改ざんされたプログラムの実行を防止する。
【０００６】
従来のプログラムの改ざんを検査する方法の一例は、特許文献１に記載されている。図２に示すように、この従来のプログラムの改ざんを検査する方法は、主に安全性検証手段２０１と、安全な記憶手段２０２と、実行手段２０３とから構成されている。
【０００７】
安全性検証手段２０１は、ダウンロードしたプログラムの改ざんの有無を検証し、改ざんがないと確認されたプログラムのみを、他の手段によってプログラムを書き換えできないことを保証する安全な記憶手段２０２へと記憶させ、実行手段２０３は安全な記憶装置からプログラムを読み出して実行する。これにより、実行手段２０３が実行するプログラムが改ざんされていないことを保証していた。
【特許文献１】特開２００１−１９５２４７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、従来の技術においては、プログラム実行以前にそのプログラムが改ざんされていないことを保証できるが、実行中のプログラムが改ざんされないことを保証することができない。
【０００９】
近年の電子機器は、多数のソフトウェアモジュールから構成されている。専門的な知識を有する者であれば、これらのソフトウェアモジュールのバグを悪用することで端末内のソフトウェアを改ざんすることも可能である。また、デバッガやＩＣＥ（Ｉｎ−Ｃｉｒｃｕｉｔ  Ｅｍｕｌａｔｏｒ）等のツールを用いることでも同様のことは実現可能である。さらに、Ｊａｖａ（Ｒ）仮想マシンなどの仮想マシンのように、プログラムを実行する環境自体がソフトウェアで実現されている場合には、デバッガやＩＣＥを使用する場合には、実行中の仮想マシンにブレークポイントを設定することにより、任意のタイミングで仮想マシンの動作を一時停止や、仮想マシンが使用しているメモリを盗聴、改ざんすることが可能になる。暗号化されて配信されるアプリケーションも、実行時には復号され平文となる。そのため、攻撃者が仮想マシンの処理のうち、クラスをロードする処理やメソッドを実行する処理にブレークポイントを設置すると、攻撃者は平文のアプリケーションにアクセスすることができる。
【００１０】
そのため、仮想マシンやダウンロードしたプログラム自体を実行時に改ざんすることで、本来の挙動とは異なる動きをさせることができる。特にプログラムに著作権管理機能や課金機能が含まれる場合には、これらの機能を無効化できてしまうという問題が発生する。今後、インターネット等を利用したプログラムの配信ビジネスが本格化するに従い、このようなプログラムの盗聴、改ざんの問題が深刻化すると予想される。
【００１１】
このような攻撃を防ぐ技術として耐タンパ技術が存在するが、従来の耐タンパ技術では、保護できるプログラムの大きさが非常に小さく、鍵の管理や課金処理などの特に扱いに慎重さを求められる処理にのみ適用されており、仮想マシンのような巨大なプログラム全体を保護することは不可能である。
【００１２】
本発明は、改ざんの恐れのない安全な実行環境にある改ざん検査部が、仮想マシンが改ざんされたか否かを所定のタイミングで検査し、検査の結果仮想マシンが改ざんされていると判定された場合には、ただちにアプリケーション実行を停止することにより、仮想マシン自体が正常に動作することを保証し、アプリケーションが盗聴、改ざんされることなく安全に動作する仮想マシンを提供することを目的とする。
【課題を解決するための手段】
【００１３】
前記従来の課題を解決するために、本発明は、第３者による盗聴、改ざんを防止する安全な実行部で実行される仮想マシンローダにより仮想マシンをロードするステップと、前記ロードされた仮想マシンのアドレス領域を、前記安全な実行部で実行される改ざん検査部に通知するステップと、前記改ざん検査部により、前記仮想マシンのアドレス領域が改ざんされたか否かを、所定のタイミングで判定するステップと、前記判定の結果、前記仮想マシンが改ざんされていると判定された場合には、前記改ざん検査部は即座に前記仮想マシンの実行を停止させるステップとを含むことを特徴とする。
【発明の効果】
【００１４】
以上のように、本発明によれば、仮想マシンの実行時に発生する改ざんを検査する方法であって、第３者による盗聴、改ざんを防止する安全な実行部で実行される仮想マシンローダにより仮想マシンをロードするステップと、前記ロードされた仮想マシンのアドレス領域を、前記安全な実行部で実行される改ざん検査部に通知するステップと、前記改ざん検査部により、前記仮想マシンのアドレス領域が改ざんされたか否かを、所定のタイミングで判定するステップと、前記判定の結果、前記仮想マシンが改ざんされていると判定された場合には、前記改ざん検査部は即座に前記仮想マシンの実行を停止させるステップとを含むことにより、仮想マシンの実行時の改ざんを発見し、改ざん発見時には直ちに仮想マシンの動作を終了することができる。
【００１５】
また、前記仮想マシンローダが、暗号化された仮想マシンを復号するステップをさらに含むことにより、暗号化された状態で端末内に保存された仮想マシンをロードすることができる。これにより、端末内のＲＯＭを吸い出すことにより仮想マシンの改ざん可能な個所を解析されることを防ぐことができる。
【００１６】
また、前記仮想マシンのアドレス領域は、前記仮想マシンの開始アドレスから終了アドレスまでの領域であることにより、仮想マシンの領域内のいかなる個所に改ざんが行われても、それを検出可能になる。
【００１７】
また、前記仮想マシンのアドレス領域は、前記仮想マシンを構成するサブプログラムの開始アドレスから終了アドレスまでの領域であることにより、バイトコードの扱いに関連の深いサブプログラムのみを検査することができ、改ざん検査にかかる時間を短縮することができる。
【００１８】
また、前記仮想マシンが所定の処理を行う直前に、前記仮想マシンが前記改ざん検査部を呼び出し、改ざん検査を行うことにより、仮想マシンがバイトコードを取り扱う処理を行う際には必ず改ざん検査を行うことが可能になる。
【００１９】
また、前記所定の処理は、クラスロード処理を含むことにより、仮想マシンがクラスロード処理を行う際には必ず改ざん検査を行うことが可能になる。
【００２０】
また、前記所定の処理は、メソッド呼び出し処理を含むことにより、仮想マシンがメソッド呼び出し処理を行う際には必ず改ざん検査を行うことが可能になる。
【００２１】
また、前記所定の処理は、バイトコードベリファイ処理を含むことにより、仮想マシンがバイトコードベリファイ処理を行う際には必ず改ざん検査を行うことが可能になる。
【００２２】
また、前記所定の処理は、ＪＩＴコンパイル処理を含むことにより、仮想マシンがＪＩＴコンパイル処理を行う際には必ず改ざん検査を行うことが可能になる。
【００２３】
また、クラスファイルに埋め込み、もしくは添付されたセキュリティ属性を読み取り、セキュリティ属性に応じて前記所定の処理を動的に変更するにより、実行中のアプリケーションに求められるセキュリティレベルに応じて、改ざん検査の強さを調節することができる。
【００２４】
また、前記改ざん検査部による前記仮想マシンの改ざん検査を所定の間隔で定期的に行うことを特徴とすることにより、仮想マシンの処理内容に関わらず、定期的に仮想マシンの改ざんを検査することができる。
【００２５】
クラスファイルに埋め込み、もしくは添付されたセキュリティ属性を読み取り、セキュリティ属性に応じて前記所定の間隔を動的に変更することにより、実行中のアプリケーションに求められるセキュリティレベルに応じて、改ざん検査の強さを調節することができる。
【００２６】
また、前記仮想マシン上で動作するアプリケーションがアイドル状態の間は、前記改ざん検査部による前記仮想マシンの改ざん検査を一時停止することにより、アプリケーションが動作していない場合には改ざん検査を止めることができ、無駄な消費電力を抑えることができる。
【００２７】
また、ソフトウェア実行部と、第３者による盗聴、改ざんを防止する安全なソフトウェア実行部を備え、前記安全なソフトウェア実行部内で実行される、仮想マシンを前記ソフトウェア実行部内へロードする仮想マシンロード手段と、前記仮想マシンが実行時に改ざんされていないか否かを所定のタイミングで検査し、前記検査の結果、前記仮想マシンは改ざんされていると判定された場合には、前記仮想マシンを終了させる改ざん検査部とを備えることにより、仮想マシンの実行時の改ざんを発見し、改ざん発見時には直ちに仮想マシンの動作を終了することができる。
【００２８】
また、前記安全な実行部は、前記仮想マシン改ざん検査装置内の耐タンパ機能で保護されたソフトウェア実行部であることにより、改ざん検査部自体の改ざんを困難にすることができる。
【００２９】
また、前記安全な実行部は、前記仮想マシン改ざん検査装置に内蔵されたハードウェアであることにより、改ざん検査部自体の改ざんを不可能にすることができる。
【００３０】
また、前記安全な実行部は、前記仮想マシン改ざん検査装置から着脱可能なスマートカードであることにより、改ざん検査部自体の改ざんを不可能にすることができる。
【００３１】
また、前記改ざん検査部は、前記仮想マシンが改ざんされていると判定した際に、前記仮想マシン改ざん検査装置の電源を切断することを特徴とすることにより、改ざんが発覚した際に、確実に攻撃者の攻撃を終了させることができる。
【００３２】
前記改ざん検査部は、前記仮想マシンが改ざんされていると判定した際に、前記仮想マシン改ざん検査装置を再起動させることを特徴とすることにより、改ざんが発覚した際に、確実に攻撃者の攻撃を終了させることができる。
【発明を実施するための最良の形態】
【００３３】
以下本発明の実施の形態について、図面を参照しながら説明する。
【００３４】
（実施の形態１）
本発明に係る仮想マシン改ざん検査装置の実施の形態を、図面を参照しながら説明する。本実施の形態では、Ｊａｖａ（Ｒ）仮想マシンなどの仮想マシンの改ざん検査機能を備えたＪａｖａ（Ｒ）アプリケーション実行装置（アプリケーション実行装置と称す）を例に説明する。
【００３５】
図１は、アプリケーション実行装置の構成を示すブロック図である。ダウンロード可能なプログラム１００はＪａｖａ（Ｒ）アプリケーション実行装置１１０（アプリケーション実行装置１１０と称す）からダウンロード可能なアプリケーションプログラムであり、具体的には、暗号化されたＪａｖａ（Ｒ）アプリケーションが該当する。
【００３６】
アプリケーション実行装置１１０は端末装置であり、実行部１２０、安全な実行部１３０から構成される。アプリケーション実行装置は、具体的にはデジタルテレビ、セットトップボックス、ＤＶＤレコーダー、ＢｌｕｅＲａｙＤｉｓｃ（ＢＤ）レコーダー、カーナビ端末、携帯電話、ＰＤＡなどの、Ｊａｖａ（Ｒ）仮想マシンを搭載する電子機器全般が該当する。
【００３７】
実行部１２０は、通常のパーソナルコンピュータやデジタル家電機器等に搭載されているプログラム実行手段と同様のものであり、アプリ取得プログラム１２１、Ｊａｖａ（Ｒ）仮想マシン１２２（仮想マシン１２２と称す）、ＯＳ１２３、第１ＣＰＵ１２４、第１ＲＡＭ１２５、第１ＲＯＭ１２６から構成される。
【００３８】
安全な実行部１３０は、悪意のある第３者からの攻撃を防御しつつ安全にプログラムを実行させることができるプログラム実行手段であり、改ざん検査部１３１、Ｊａｖａ（Ｒ）仮想マシンローダ１３２（仮想マシンローダ１３２と称す）、第２ＣＰＵ１３３、第２ＲＡＭ１３４、第２ＲＯＭ１３５からなる。
【００３９】
アプリ取得プログラム１２１は、任意の手法でアプリケーションを端末外から取得をするＪａｖａ（Ｒ）プログラムである。アプリ取得プログラム１２１は、例えば、インターネット上にあるサーバから、ＴＬＳ（Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ）、ＨＴＴＰ（Ｈｙｐｅｒｔｅｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）等のプロトコルに従いＪａｖａ（Ｒ）アプリケーションをダウンロードするＪａｖａ（Ｒ）プログラムが相当する。ＴＬＳは暗号化により通信時のデータの盗聴、改ざんを防ぐデータ転送方式である。ＴＬＳの詳細はＲＦＣ２２４６に記載されており、ここでは詳細な説明を省略する。ＨＴＴＰは、インターネット上のデータ通信で一般的に用いられているデータ転送方式である。ＨＴＴＰの詳細はＲＦＣ２６１６に記載されており、ここでは詳細な説明を省略する。
【００４０】
また、アプリ取得プログラム１２１は、デジタル放送のデータ放送として、ＭＰＥＧ２トランスポートストリーム内に埋め込まれたＪａｖａ（Ｒ）アプリケーションを端末内に読み出すＪａｖａ（Ｒ）プログラムであってもよい。ＭＰＥＧ２トランスポートストリームの詳細はＭＰＥＧ規格書ＩＳＯ／ＩＥＣ１３８１８１−１に記載されており、本実施の形態では詳細は省略する。ＭＰＥＧ２トランスポートストリームにＪａｖａ（Ｒ）プログラムを埋め込む方法は、ＤＳＭＣＣ方式として、ＭＰＥＧ規格書ＩＳＯ／ＩＥＣ１３８１８１−６に記述されている。ここではＤＳＭＣＣの詳細な説明は省略する。ＤＳＭＣＣ方式は、ＭＰＥＧ２トランスポートストリームのパケットの中に、コンピュータで使用されているディレクトリやファイルで構成されるファイルシステムをエンコードする方法を規定している。
【００４１】
また、アプリ取得プログラム１２１は、ＳＤカード、ＣＤ−ＲＯＭ、ＤＶＤ、ＢｌｕｅＲａｙＤｉｓｃ等に記録されたＪａｖａ（Ｒ）アプリケーションを、第１ＲＡＭ１２５に読み込むＪａｖａ（Ｒ）プログラムであってもよい。
【００４２】
また、アプリ取得プログラム１２１は、アプリケーション実行装置１１０内にある第１ＲＯＭ１２６内に記録されたＪａｖａ（Ｒ）アプリケーションを、第１ＲＡＭ１２５に読み込むＪａｖａ（Ｒ）プログラムであってもよい。
【００４３】
尚、本実施の形態ではアプリ取得プログラム１２１はＪａｖａ（Ｒ）言語で記述されたＪａｖａ（Ｒ）プログラムとしているが、同等の機能を有する、ネイティブ言語で記述されたプログラムや、ハードウェアで実現されていても同様に本発明を実施できる。
【００４４】
仮想マシン１２２は、Ｊａｖａ（Ｒ）言語で記述されたプログラムを逐次解析し実行するＪａｖａ（Ｒ）バーチャルマシンである。Ｊａｖａ（Ｒ）言語で記述されたプログラムはバイトコードと呼ばれる、ハードウエアに依存しない中間コードにコンパイルされる。Ｊａｖａ（Ｒ）バーチャルマシンは、このバイトコードを解釈、実行するソフトウェア、またはハードウェアである。また、一部のＪａｖａ（Ｒ）バーチャルマシンは、バイトコードを第１ＣＰＵ１２４が理解可能な実行形式に翻訳するＪＩＴコンパイラと呼ばれる機能を持つものもある。また、一部のＪａｖａ（Ｒ）バーチャルマシンは、一部もしくは全部のバイトコードを直接実行可能なプロセッサと、プロセッサでは直接実行できないバイトコードを実行するインタープリターから構成されることもある。Ｊａｖａ（Ｒ）言語の詳細は、書籍「Ｊａｖａ（Ｒ）  Ｌａｎｇｕａｇｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ（ＩＳＢＮ  ０−２０１−６３４５１−１）」等の多くの書籍で解説されている。ここでは、その詳細を省略する。仮想マシン１２２は、複数のサブプログラムから構成される。図３は仮想マシン１２２を構成するサブプログラムの一例である。図３では、バイトコードインタプリタ３０１、クラスローダ３０２、ベリファイヤ３０３、Ｊａｖａ（Ｒ）ヒープ管理部３０４（ヒープ管理部３０４と称す）、Ｊａｖａ（Ｒ）ネイティブライブラリ３０５（ネイティブライブラリ３０５と称す）、ＪＩＴコンパイラ３０６で構成されている。
【００４５】
バイトコードインタプリタ３０１は、クラスローダ３０２によりロードされたバイトコードを解釈、実行するサブプログラムで、Ｊａｖａ（Ｒ）仮想マシンにおいて中核な処理を行うサブプログラムである。
【００４６】
クラスローダ３０２は、アプリ取得プログラム１２１からクラスファイルを受け取り、仮想マシン１２２内部へロードする処理を行う。クラスファイルは、バイトコードなどの情報を含むファイルであり、書籍「Ｊａｖａ（Ｒ）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ（ＩＳＢＮ  ０−２０１−６３４５１―）」で定義されている。また、クラスローダ３０２は、クラスアンロード処理も行う。クラスアンロード処理は、実行が終了し不要になったクラスをＪａｖａ（Ｒ）仮想マシン１２２から取り除く処理である。
【００４７】
ベリファイヤ３０３は、クラスのデータ形式の不備や、クラスに含まれるバイトコードの安全性を判定する。バイトコードの安全性の検査方法は、Ｊａｖａ（Ｒ）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎで定義されているため詳細な説明は省略する。クラスローダ３０２は、ベリファイヤ３０３において妥当ではないと判定されたクラスはロードをしない。
【００４８】
ヒープ管理部は３０４、Ｊａｖａ（Ｒ）アプリケーションが使用するワーキングメモリの確保を行う。ワーキングメモリは第１ＲＡＭ１２５内に確保される。また、ヒープ管理部３０４は、ガベージコレクションも行う。ガベージコレクションは、アプリケーション実行において不要になったワーキングメモリを開放し、他の用途に再利用できるようにする公知の技術であり、詳細な説明は省略する。
【００４９】
ネイティブライブラリ３０５は、Ｊａｖａ（Ｒ）アプリケーションから呼び出されるライブラリで、ＯＳ１２３や、アプリケーション実行装置１１０が備える図１には記載されていないハードウェア、サブプログラム等で提供される機能をＪａｖａ（Ｒ）アプリケーションへ提供する。
【００５０】
ＪＩＴコンパイラ３０６は、バイトコードを第１ＣＰＵ１２４が理解可能な実行形式に翻訳する。
【００５１】
ＯＳ１２３は、アプリケーション実行装置１１０の電源が投入されると第１ＣＰＵ１２４が起動するサブプログラムである。ＯＳ１２３は、オペレーティングシステムの略であり、Ｌｉｎｕ等が一例である。ＯＳ１２３は、他のサブプログラムを平行して実行するカーネル及び、ライブラリで構成される公知の技術の総称であり、詳細な説明は省略する。ＯＳ１２３は仮想マシン１２２をサブプログラムとして実行する。
【００５２】
第１ＣＰＵ１２４は、仮想マシン１２２、ＯＳ１２３、アプリケーション取得部１２１が取得したプログラムを実行する。
【００５３】
第１ＲＡＭ１２５は、具体的にはＳＲＡＭ、ＤＲＡＭ等の一次記憶メモリーで構成され、第１ＣＰＵ１２４が処理を行う際、一時的にデータを保存するために使用される。
【００５４】
第１ＲＯＭ１２６は、具体的にはフラッシュメモリーやハードディスク等の不揮発性メモリで構成され、第１ＣＰＵ１２４から指示されたデータやプログラムを記憶する。図４は本実施の形態における第１ＲＯＭ１２６が記憶しているデータの一例を示したものである。図４に示す様に、第１ＲＯＭ１２６は暗号化された仮想マシン４０１、暗号化されたアプリ取得プログラム４０２、暗号化された起動クラス名４０３を含む。暗号化された起動クラス名４０３は仮想マシン１２２が起動した際に最初に実行するプログラムのクラス名である。本実施の形態では暗号化起動クラス名４０３にはアプリ取得プログラム１２１が指定されているものとする。尚、第１ＲＯＭ１２６は図４に示した以外のデータを記憶していてもよい。
【００５５】
改ざん検査部１３１は、仮想マシン１２２が改ざんされていないか検査し、検査の結果仮想マシン１２２が改ざんされていると判定した場合には、第１ＣＰＵ１２４に仮想マシン１２２の実行を停止させるなどの処理を行う。改ざん検査部１３１については後に詳細に説明をする。
【００５６】
仮想マシンローダ１３２は、アプリケーション実行装置１１０の電源投入後に、第１ＣＰＵ１２５が仮想マシン１２２を実行可能な状態にするための処理を行う。仮想マシンローダ１３２については後に詳細に説明をする。
【００５７】
第２ＣＰＵ１３３は、改ざん検査部１３１、仮想マシンローダ１３２を実行する。
【００５８】
第２ＲＡＭ１３４は、具体的にはＤＲＡＭやＳＲＡＭ等で構成され、第２ＣＰＵ１３３が処理を行う際、一時的にデータを保存するために使用され、第２ＣＰＵ１３３以外からは第２ＲＡＭ１３４が記憶するデータを読むことも書くことも出来ないことを保証するものである。第２ＲＡＭ１３４はＣＰＵ１３３に混載されていてもよい。
【００５９】
第２ＲＯＭ１３５は、読み出し専用の不揮発性メモリで、第２ＣＰＵ１３３以外からは第２ＲＯＭ１３５が記憶するデータを読みだすことが出来ないことを保証するものである。図５に第２ＲＯＭ１３５が記憶するデータの一例を示す。第２ＲＯＭ１３５には、第１ＲＯＭ１２６が記憶する暗号化されたＪａｖａ（Ｒ）仮想マシン４０１（仮想マシン４０１と称す）、暗号化されたアプリ取得プログラム４０２、暗号化された起動クラス名４０３を復号するための復号鍵５０１と、ハッシュ値５０２を記録している。ハッシュ値５０２は、仮想マシン１２２を入力としてハッシュ関数を実行することにより求めた値である。ハッシュ関数（メッセージダイジェスト関数とも呼ばれる）とは、入力された原文から固定長の擬似乱数を生成する関数であり、公知の技術である。ハッシュ値は、ハッシュ値から原文を再現することはできず、また同じハッシュ値を持つ異なるデータを作成することは極めて困難である特徴をもつ。本実施の形態では、仮想マシン、アプリ取得プログラム、起動クラス名を復号する鍵は５０１一つのみとしているが、それぞれに別々の鍵を用いても本発明は実施可能である。尚、第２ＲＯＭ１３５は図５に示されていない別のデータを記憶していてもよい。
【００６０】
なお、本実施の形態では、アプリケーション実行装置１１０は二つのＣＰＵを備えているが、一つのＣＰＵが動作モードを切り替えるなどの方法で仮想的に二つのＣＰＵのように振る舞ってもよい。
【００６１】
なお、第１ＲＡＭ１２５、第２ＲＡＭ１３４は一つのＲＡＭを仮想的に二つのＲＡＭとして扱ってもよい。
【００６２】
なお、第１ＲＯＭ１２６、第２ＲＯＭ１３５は一つのＲＯＭを仮想的に二つのＲＯＭとして扱ってもよい。
【００６３】
なお、安全な実行部１３０全体をハードウェアにより実現してもよい。この場合、第１ＣＰＵ１２４と第２ＣＰＵ１３３間のデータ通信は暗号化して行い、第３者による盗聴を防ぐ。これは両ＣＰＵを結ぶデータバス（図示されていない）にデータを送信する際に暗号化し、データを受信後に復号することで行われる。また、安全な実行部１３０はスマートカードやＩＣカードのように、アプリケーション実行装置１１０から取り外し可能な装置であってもよい。スマートカード、ＩＣカードはカード内部にＣＰＵやメモリ、セキュリティ回路を含む公知の技術であり、詳細な説明を省略する。この場合、実行部１２０と安全な実行部１３０間のデータ転送は、ＳＡＣ（Ｓｅｃｕｒｅ  Ａｕｔｈｅｎｔｉｃａｔｅｄ  Ｃｈａｎｎｅｌ）等の技術を用いて、第３者による盗聴を防ぎながら行う。ＳＡＣはＩＣカードと外部機器の相互認証、および暗号鍵の共有を安全に行うための公知の技術である。
【００６４】
次に、本発明の主要機能であるＪａｖａ（Ｒ）仮想マシンの改ざん検査機能について説明する。
【００６５】
ユーザがアプリケーション実行装置１１０の電源を投入すると、第１ＣＰＵ１２４はＯＳ１２３を起動する。ＯＳ１２３は起動後、第１ＣＰＵ１２４を通じて第２ＣＰＵ１３３へ、仮想マシンローダ１３２を起動するよう指示する。第２ＣＰＵ１３３によって起動された仮想マシンローダ１３２は、図６に示された手順で仮想マシン１２２を第１ＲＡＭ１２５上にロードする。まず、ステップ６０１で第１ＲＯＭ１２６が記憶する暗号化された仮想マシン４０１、暗号化されたアプリ取得手段４０２、暗号化された起動クラス名４０３を、第２ＣＰＵ１３３を通じて読み出す。次にステップ６０２で第２ＲＯＭ１３５から復号鍵５０１を取得し、ステップ６０３で復号処理を行う。そして、復号された仮想マシン、アプリ取得プログラムを、第２ＣＰＵ１３３を通じて第１ＲＡＭ１２５へ記憶させる。（ステップ６０４）この時、Ｊａｖａ（Ｒ）仮想マシンを書き出したアドレスの範囲を第２ＲＡＭ１３４内に記憶しておく。図７は、第２ＲＡＭ１３４が記憶する、仮想マシンローダ１３２によって第１ＲＡＭ１２５上へロードされた仮想マシン１２２のアドレスを示すものである。仮想マシン１２２は０４０００００００番地から０４０１９ｆｆｆｆ番地の間にロードされている。
【００６６】
図６を参照して、ステップ６０５において、仮想マシンローダ１３２は、第２ＲＡＭ１３４に記憶させた仮想マシン１２２のアドレスの範囲を指定し、改ざん検査部１３１を実行することにより仮想マシン１２２の改ざんの有無を確認する。図８に改ざん検査部１３１の処理内容を示す。
【００６７】
ステップ８０１で、仮想マシンローダ１３２から指定された仮想マシン１２２のアドレスの範囲に基づき、仮想マシン１２２のハッシュ値を計算する。次に、ステップ８０２で、第２ＲＯＭ１３５が記憶する仮想マシン１２２の正しいハッシュ値５０２を読み出す。そして、両者を比較し（ステップ８０３）、比較の結果両者が一致していれば仮想マシン１２２は改ざんされていないと判断し、改ざん検査部１３１は成功裏に終了する（ステップ８０４）。しかし、ステップ８０３において、比較結果が不一致であった場合には、仮想マシン１２２は改ざんされていると判定し、アプリケーション実行装置１１０の電源を切断もしくは再起動する（ステップ８０５）。
【００６８】
図６を参照して、ステップ６０５において、改ざん検査部１３１の実行が成功裏に終了した場合には、仮想マシン１２２のロードを終了する。
【００６９】
ＯＳ１２３は、仮想マシンローダ１３２の終了を受け、第１のＲＡＭ１２５が記憶する復号化された起動クラス名を指定し、仮想マシン１２２の実行を開始する。
【００７０】
仮想マシン１２２は、所定の処理を行う直前に、ＣＰＵ１２４を通して改ざん検査部１３１を呼び出す。改ざん検査部１３１の処理ステップ８０５にあるように、仮想マシン１２２に改ざんがあった場合にはアプリケーション実行装置１１０は電源を切断、もしくは再起動されるため、デバッガ等の悪意のあるプログラムがダウンロードされたアプリケーションを盗聴、改ざんすることを防ぐことが出来る。ここで所定の処理とは、例えばメソッドを呼び出す処理、クラスロード、ベリファイを行う処理、ＪＩＴコンパイルする処理などが該当する。特に、バイトコードを第１ＲＡＭ１２５から読み込む処理をする際に行うのが好ましい。
【００７１】
上記実施の形態の様に構成することにより、仮想マシン１２２が実行時に改ざんされた場合には直ちにアプリケーション実行装置１１０の動作が停止するため、Ｊａｖａ（Ｒ）仮想マシン１２２が実行するダウンロードＪａｖａ（Ｒ）アプリケーションが盗聴、改ざんされることを防ぐことができる。
【００７２】
尚、本実施の形態では、仮想マシン１２２全体のハッシュ値を計算し、改ざんの判定をしていたが、一部のサブプログラムのハッシュ値を計算し、改ざん判定をするように構成しても本発明は実施可能である。その場合、第１ＲＯＭ１２６は仮想マシン１２２のサブプログラム（例えばバイトコードインタプリタ３０１とクラスローダ３０２）のハッシュ値５０２を記憶させ、仮想マシンローダ１３２は、前記２つのサブプログラムのアドレス範囲を改ざん検査部１３１に通知し、改ざん検査部１３１は、ステップ８０１において、前記２つのサブプログラムのアドレス範囲についてハッシュ値を求めればよい。
【００７３】
図９に仮想マシンローダ１３２が改ざん検査部１３１に通知するアドレス範囲の例を示す。列９０１がサブプログラム、列９０２がそのサブプログラムがロードされたアドレス範囲を表している。図９のように複数のサブプログラムを改ざん検査する場合には、改ざん検査部１３１はそれぞれのサブプログラムのアドレス範囲についてハッシュ値を求め、第２ＲＯＭ１３５内に記憶されている正しいハッシュ値と比較する。図１０に、複数のサブプログラムを改ざん検査する場合の第２ＲＯＭ１３５内に記憶されている正しいハッシュ値の例を示す。列１００１がサブプログラム、列１００２が正しいハッシュ値を表している。改ざん検査部１３１は全てのサブプログラムのハッシュ値が正しい場合に、仮想マシン１２２は改ざんされていないと判定する。
【００７４】
これにより、ステップ８０１においてハッシュ値を計算する時間を短縮することができる。また、サブプログラム単位ではなく、さらに細かい粒度（例えば関数単位）で改ざん判定を行うようにしてもよい。
【００７５】
尚、本実施の形態では、暗号化された仮想マシン４０１、暗号化されたアプリ取得プログラム４０２、暗号化された起動クラス名４０３は暗号化された状態で第１ＲＯＭ１２６が記憶していたが、これらは暗号化されていなくても本発明を適用することは可能である。また、これらは第１ＲＯＭ１２６ではなく、第２ＲＯＭ１３５に記憶されていても同様に本発明を適用することが可能である。
【００７６】
（実施の形態２）
実施の形態１では、Ｊａｖａ（Ｒ）仮想マシン全体が所定の処理を行う際に、改ざん検査部１３１が改ざん検査を行っていたが、改ざん検査の方法はＪａｖａ（Ｒ）仮想マシンの処理に関係なく所定の間隔で随時行ってもよい。
【００７７】
図１１は、本実施の形態における改ざん検査部１３１の処理を示したものである。ステップ１１０１からステップ１１０３、ステップ１１０５までは実施の形態１の図８と同様であるため詳細な説明を省略する。ステップ１１０４では予め決められた所定の時間改ざん検査部１３１の実行を中断させる。こうすることで、仮想マシン１２２の実行状態とは関係なく仮想マシン１２２の改ざんの有無を検査することができる。
【００７８】
尚、所定の時間は仮想マシン１２２の実行状態に応じて選択可能にしてもよい。例えば仮想マシン１２２上で動作するアプリケーションがアイドル状態になっている場合には改ざん検査の間隔を大きく取るなどの処理をしてもよい。アプリケーションがアイドル状態か否かは、仮想マシン１２２が管理するスレッドの状態を調べることにより判定することが可能である。アプリケーションを構成するすべてのスレッドがアイドル状態である場合、そのアプリケーションはアイドル状態であることがわかる。これにより無駄な改ざん検査の回数を抑えることができ、アプリケーション実行装置１１０の消費電力を低減させることが可能になる。
【００７９】
（実施の形態３）
実施の形態１、２においては、頻繁に改ざん検査を行うことにより、より確実に仮想マシン１２２が実行時に改ざんされたか否かを検査できるようになる。しかし、改ざん検査を頻繁に行うに伴い改ざん検査に要する時間が増えるためＪａｖａ（Ｒ）アプリケーションの実行が遅くなることが考えられる。どの程度の頻度で検査を行えば十分かは、Ｊａｖａ（Ｒ）アプリケーションが求めるセキュリティの度合いに依存する。仮想マシン１２２が実行しているアプリケーションのセキュリティの度合いを知ることにより、改ざん検査の頻度を適切に調節することが可能になる。
【００８０】
図１２は、Ｊａｖａ（Ｒ）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎで定義されているクラスファイルの構成を示したものである。クラスファイルには多くの要素が格納されているが、ここでは本実施の形態に特に関係のあるメソッド情報１２１４のみを説明し、他の要素の詳細な説明は省略する。
【００８１】
図１３はｍｅｔｈｏｄｓ１２１４の詳細な内容である。ｍｅｔｈｏｄｓ１２１４は、ａｃｃｅｓｓ＿ｆｌａｇｓ１３０１、ｎａｍｅ＿ｉｎｄｅ１３０２、ｄｅｓｃｒｉｐｔｏｒ＿ｉｎｄｅ１３０３、ａｔｔｒｉｂｕｔｅｓ＿ｃｏｕｎｔ１３０４、ａｔｔｒｉｂｕｔｅｓ１３０５を含む。ａｃｃｅｓｓ＿ｆｌａｇｓ１３０１はこのメソッドの呼び出し可能条件を保存するフラグである。呼び出し可能条件には、自クラスのからのみ呼び出し可能、全てのクラスから呼び出し可能などがある。ｎａｍｅ＿ｉｎｄｅ１３０２には、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ１２０５内にある、このメソッドの名前を含むエントリのインデックスである。ｄｅｓｃｒｉｐｔｏｒ＿ｉｎｄｅ１３０３は、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ１２０５内にある、このメソッドの引数や戻り値の型を含むエントリのインデックスである。ａｔｔｒｉｂｕｔｅｓ＿ｃｏｕｎｔ１３０４は、続くａｔｔｒｉｂｕｔｅｓ１３０５のエントリ数を表す。ａｔｔｒｉｂｕｔｅｓ１３０５はこのメソッドがもつ属性を格納する。属性には例えばバイトコードを格納するコード属性などがある。
【００８２】
図１４はａｔｔｒｉｂｕｔｅｓ１３０５の構成を示す図である。ａｔｔｒｉｂｕｔｅ＿ｎａｍｅ＿ｉｎｄｅ１２０１は、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ１２０５内にある、この属性の名前（例：コード属性）を含むエントリのインデックスである。ａｔｔｒｉｂｕｔｅ＿ｌｅｎｇｔｈ１４０２は続くｉｎｆｏ１４０３のバイト数である。ｉｎｆｏ１４０３は属性の値を格納する。コード属性の場合にはｉｎｆｏ１４０３にバイトコードを格納する。これらの属性に、新規の属性を追加する拡張はＪａｖａ（Ｒ）言語仕様で許容されている。本実施の形態では、メソッドに求められるセキュリティの強さを表すセキュリティ属性を、新たに追加する。
【００８３】
図１５にセキュリティ属性の例を示す。値１５０１は、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ１２０５の１９番目のエントリにセキュリティ属性の名前が含まれていることを表す。値１５０２は、このセキュリティ属性が４バイトの情報を持つことを表す。値１５０３は、このセキュリティ属性を持つメソッドのセキュリティレベルを表す。本実施の形態では、セキュリティレベルの値が大きいほど、求められるセキュリティの度合いが強いとし、セキュリティレベル０のクラスは特に保護の必要のないクラスとする。また、あるクラスがセキュリティレベルの異なる複数のメソッドを持つ場合、それらのセキュリティレベルのうち最も高いレベルを、そのクラスのセキュリティレベルと呼ぶことにする。尚、本実施の形態では、ｍｅｔｈｏｄｓ１２１４内部のａｔｔｒｉｂｕｔｅｓ１３０５にセキュリティ属性を追加したが、クラス単位の属性として、ａｔｔｒｉｂｕｔｅｓ１２１５にセキュリティ属性を追加してもよい。この場合、クラスに含まれる全てのメソッドがａｔｔｒｉｂｕｔｅｓ１２１５で指定されたセキュリティレベルを持つと判断する。このようにセキュリティ属性をクラスファイルに追加することで、仮想マシン１２２は、実行中のメソッドに求められるセキュリティの属性を認識することができる。
【００８４】
図１６は、セキュリティレベルが０より大きいメソッドを処理する場合のみ仮想マシン１２２の改ざん検査を行う際の、バイトコードインタプリタ３０１が行うメソッド呼び出し処理である。ステップ１６０１で、これから呼び出そうとするメソッドのセキュリティレベルを調べ、その結果が０より大きな値であれば（ステップ１６０２）、改ざん検査部１３１により仮想マシン１２２の改ざんの有無を調べる（ステップ１６０３）。その後、通常のメソッド呼び出し処理（ステップ１６０４）を実行する。クラスロード処理やＪＩＴコンパイル処理時にセキュリティレベルの値に応じて改ざん検査をすることも同様に実現可能である。これにより、特にセキュリティを求められないクラスを実行する際には、改ざん検査処理を省略でき、Ｊａｖａ（Ｒ）アプリケーションの実行時間の低下を抑えることができる。
【００８５】
また、特定のセキュリティレベルのメソッドを持つクラスが仮想マシン１２２内にロードされている間のみ、定期的に改ざん検査を行うように構成してもよい。例えば、仮想マシン１２２内にロードされているクラスのうち、最も高いセキュリティレベルに応じて、図１１に示すステップ１１０４の改ざん検査部１３１の中断時間を変化させることができる。
【００８６】
図１７はセキュリティレベルと改ざん検査部１３１の中断時間の対応関係の一例である。図１７のように、仮想マシン１２２内にセキュリティレベル３のクラスがロードされている間は１０秒に１度改ざん検査を行うが、セキュリティレベルが高々１の場合には６０秒に1度改ざん検査を行い、セキュリティレベルが０のクラスしかロードしていない場合には、改ざん検査を一切行わないなど、実行するアプリケーションによって、柔軟に改ざんの頻度を変更することができ、無駄な改ざん検査を減らすことができる。
【００８７】
尚、本実施の形態では、セキュリティレベルをクラスファイルの拡張属性に埋め込んだが、これ以外の方法を用いてセキュリティレベルを定義しても本発明は実施可能である。例えば、セキュリティレベルを記録したＭＬファイルをＪａｖａ（Ｒ）アプリケーションと同時にアプリ取得手段１２１が取得し、仮想マシン１２２へ渡すことにより、仮想マシン１２２はメソッドのセキュリティレベルを知ることが可能になる。図１８はそのようなＭＬファイルの一例である。
【産業上の利用可能性】
【００８８】
本発明に係る仮想マシン改ざん検査装置は、仮想マシンが実行時に改ざんされたか否かを、ハードウェアなどで実現された、盗聴、改ざんが困難な安全な改ざん検査部より所定のタイミングで検査することにより、仮想マシンの実行時改ざんを素早く検知し、アプリケーション実行装置の強制終了等の処置をとるため、ダウンロードされたアプリケーションを実行時の盗聴、改ざんから保護することができ、今後本格展開が予想されるアプリケーションのダウンロード配信ビジネスにおいて、コンテンツ作成者の権利を保護することができる。
【図面の簡単な説明】
【００８９】
【図１】本発明に係るアプリケーション実行装置の実施の形態の構成図
【図２】従来のアプリケーション実行装置の実施の形態の構成図
【図３】本発明に係る仮想マシンの構成の一例の構成図
【図４】本発明に係るアプリケーション実行装置が備える第１のＲＯＭに記憶されている情報の一例の構成図
【図５】本発明に係るアプリケーション実行装置が備える第２のＲＯＭに記憶されている情報の一例の構成図
【図６】本発明に係るアプリケーション実行装置のロード手順を示すフローチャート
【図７】本発明に係るアプリケーション実行装置の仮想マシンのロード後のアドレスの一例を示す図
【図８】本発明に係るアプリケーション実行装置の、改ざん検査方法の一例を示すフローチャート
【図９】本発明に係る仮想マシンのサブプログラムのアドレス範囲を示す図
【図１０】本発明に係る第２ＲＯＭ１３５に記憶される、サブプログラムごとの正しいハッシュ値の例を示す図
【図１１】本発明に係るアプリケーション実行装置の、改ざん検査方法の一例を示すフローチャート
【図１２】仮想マシン仕様で定義されたクラスファイルの内容の構成図
【図１３】仮想マシン仕様で定義されたメソッド情報テーブルの内容の構成図
【図１４】仮想マシン仕様で定義された属性テーブルの内容の構成図
【図１５】本発明に係るセキュリティ拡張属性の内容の構成図
【図１６】本発明に係るバイトコードインタプリタの処理の一部を表すフローチャート
【図１７】本発明に係るセキュリティレベルと改ざん検査間隔の対応関係の一例を示す図
【図１８】本発明に係るセキュリティ拡張属性を定義するＭＬファイルの一例を示す図
【符号の説明】
【００９０】
１００    ダウンロード可能なプログラム
１１０    アプリケーション実行装置
１２０    実行部
１２１    アプリ取得プログラム
１２２    仮想マシン
１２３    ＯＳ
１２４    第１ＣＰＵ
１２５    第１ＲＡＭ
１２６    第１ＲＯＭ
１３０    安全な実行部
１３１    改ざん検査部
１３２    仮想マシンローダ
１３３    第２ＣＰＵ
１３４    第２ＲＡＭ
１３５    第２ＲＯＭ
【図１】
2007226277.tif 000003
【図２】
2007226277.tif 000004
【図３】
2007226277.tif 000005
【図４】
2007226277.tif 000006
【図５】
2007226277.tif 000007
【図６】
2007226277.tif 000008
【図７】
2007226277.tif 000009
【図８】
2007226277.tif 000010
【図９】
2007226277.tif 000011
【図１０】
2007226277.tif 000012
【図１１】
2007226277.tif 000013
【図１２】
2007226277.tif 000014
【図１３】
2007226277.tif 000015
【図１４】
2007226277.tif 000016
【図１５】
2007226277.tif 000017
【図１６】
2007226277.tif 000018
【図１７】
2007226277.tif 000019
【図１８】
2007226277.tif 000020