(57)【要約】【課題】プログラムの解析や改ざん、権限の奪取による秘密データの漏洩や不正な動作を防止し、安全性を確保することができるプログラム分割装置を提供する。【解決手段】プログラム分割装置１００は、分割コードの生成における規則を与えるポリシーを入力して、与えられたソースコードの保護が必要な関数と変数に保護属性を付与するソースコード解析部１１０と、ソースコード解析部１１０による解析結果を利用して、保護属性を持つ関数を含む保護コードを生成する保護コード生成部１３０と、ソースコード解析部１１０による解析結果を利用して、保護属性を持たない関数と保護コードの関数を呼び出す関数を含む通常コードを生成する通常コード生成部１４０とを備える。【選択図】図１
2006164184.tif 000002
【特許請求の範囲】
【請求項１】
１つのプログラムを、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割するプログラム分割装置であって、
分割コードの生成における規則を与えるポリシーを入力して、与えられたソースコードの保護が必要な関数と変数に保護属性を付与するソースコード解析部と、
前記ソースコード解析部による解析結果を利用して、保護属性を持つ関数を含む前記保護コードを生成する保護コード生成部と、
前記ソースコード解析部による解析結果を利用して、保護属性を持たない関数と前記保護コードの関数を呼び出す関数を含む前記通常コードを生成する通常コード生成部と
を備えることを特徴とするプログラム分割装置。
【請求項２】
前記ソースコード解析部は、
ファイナルシステムやネットワーク上のサーバ装置からプログラムのソースコードを入力するソースコード入力部と、
ソースコードを入力した装置とは同一あるいは別の装置上のファイルシステムやネットワーク上のサーバ装置からポリシーを入力するポリシー入力部と
を備えることを特徴とする請求項１に記載のプログラム分割装置。
【請求項３】
前記保護コード生成部は、前記ポリシーを利用して、前記保護コードと前記通常コードの少なくともいずれか１つの動作の検証を行うコードを生成し、前記保護コードに埋め込む自己検証コード埋め込み部を備えることを特徴とする請求項１又は２に記載のプログラム分割装置。
【請求項４】
前記通常コード生成部は、前記ポリシーを利用して、前記保護コードの起動を制御するコードを生成し、前記保護コードあるいは前記通常コードに埋め込む起動制御コード埋め込み部を備えることを特徴とする請求項１〜３のいずれか１項に記載のプログラム分割装置。
【請求項５】
前記通常コード生成部は、前記ポリシーを利用して、前記保護コードの導入を制御するコードを生成し、前記通常コードに埋め込む導入制御コード埋め込み部を備えることを特徴とする請求項１〜４のいずれか１項に記載のプログラム分割装置。
【請求項６】
前記保護コード生成部及び前記通常コード生成部は、認証と暗号化、改ざんの検査の少なくともいずれか一つの通信の保護機能を通信の関数に組み込む通信保護部を備えることを特徴とする請求項１〜５のいずれか１項に記載のプログラム分割装置。
【請求項７】
保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割されたプログラムの実行環境を提供するプログラム実行装置であって、
前記保護コードのための保護環境と前記通常コードのための通常環境との、２つの環境の隔離と制御を行う複数プログラム実行環境管理部と、
前記保護コードの導入及び起動を管理する保護コード管理部と、
前記通常コードの導入及び起動を管理する通常コード管理部と
備えることを特徴とするプログラム実行装置。
【請求項８】
保護環境と通常環境はそれぞれ仮想マシンであり、
前記複数プログラム実行環境管理部は、仮想マシンの隔離と制御を行う仮想マシンモニタであることを特徴とする請求項７に記載のプログラム実行装置。
【請求項９】
前記保護コード管理部は、
前記保護コードのデジタル署名を検証する署名検証部と、
前記署名検証部による署名の検証が成功した場合、前記保護コードを保護環境で実行可能に組み込む保護導入部と、
前記保護コードの完全性の検証に成功した場合、前記保護コードを起動する保護起動部と
を備えることを特徴とする請求項７又は８に記載のプログラム実行装置。
【請求項１０】
前記複数プログラム実行環境管理部は、前記保護コードと前記通常コードが安全に通信するための保護手段を提供する環境間通信制御部を備えることを特徴とする請求項７〜９のいずれか１項に記載のプログラム実行装置。
【請求項１１】
複数プログラム実行環境管理部は、前記保護コードが、前記通常コードの動作あるいは状態を取得し、検証する環境間監視制御部を備えることを特徴とする請求項７〜１０のいずれか１項に記載のプログラム実行装置。
【請求項１２】
１つのプログラムを、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割するプログラム分割方法であって、
分割コードの生成における規則を与えるポリシーを入力して、与えられたソースコードの保護が必要な関数と変数に保護属性を付与するステップと、
前記解析結果を利用して、保護属性を持つ関数を含む前記保護コードを生成するステップと、
前記解析結果を利用して、保護属性を持たない関数と前記保護コードの関数を呼び出す関数を含む前記通常コードを生成するステップと
を含むことを特徴とするプログラム分割方法。
【請求項１３】
保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割されたプログラムの実行環境を提供するプログラム実行方法であって、
前記保護コードのための保護環境と前記通常コードのための通常環境との、２つの環境の隔離と制御を行うステップと、
前記保護コードの導入及び起動を管理するステップと、
前記通常コードの導入及び起動を管理するステップと
を含むことを特徴とするプログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法に関する。
【背景技術】
【０００２】
従来、計算機上で動作するプログラムを保護するために、様々な技術が開示されている。
【０００３】
例えば、鍵やパスワード、電子価値等の重要データを扱うプログラムを、保護が必要な部分（保護コード）とそれ以外の通常コードにあらかじめ分割して用意し、各々を保護環境と通常環境という１つのＰＣ上の独立した２つの計算機環境で連係動作させる技術がある（例えば、特許文献１参照。）。分割の例として、プログラムをライセンス検査やコンテンツの復号化に関わる不正操作から保護したい部分と、ユーザインタフェース処理に係わる部分に分け、それぞれ保護環境、通常環境で動作させることで、著作権付きコンテンツの視聴用プログラムの解析、改ざんを困難にする利用例が説明されている。導入前のプログラムは、保護環境上で動作する部分と通常環境上で動作する部分と、デジタル署名を持ち、通常環境上で動作する部分のプログラムが、保護環境と通常環境間の通信方法により、保護環境側へインストール命令を送信する。保護環境側では、デジタル署名を用いて正規のコードであることを確認したら、インストールを行う。
【０００４】
このようにして、計算機上で動作するプログラムの保護したい部分の解析、改ざんを防止し、安全性を確保したプログラム実行環境が提供できる。
【特許文献１】特開２００２−２５１３２６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来技術における第一の課題として、通常コードが改ざんされたり、権限が奪取されたりした場合、通常コードが保護コード中の本来呼び出しが必要な関数１をバイパスして関数２を呼び出してしまうなどの不正な手順でプログラムが実行される可能性がある。
【０００６】
又、第二の課題としてプログラムの分割基準と実行場所が固定的であるため、異なるデバイス種別や異なるセキュリティ要求に対して、コードの分割基準を変更したり、保護コードの実行場所を変更したりすることができない。このため、デバイス種別や実行環境ごとに利用可能なリソースが異なる場合、保護コードに入れられた関数が、ある保護環境で必要なリソースにアクセスできない場合がある。この場合、当該関数を通常コードに含めたり、別のデバイス上の保護環境で実行したりするなどの柔軟性が必要となる。
【０００７】
更に、頻繁な通常コードから保護コードへの呼び出しは、処理・通信遅延や通常・保護計算機環境間の切り替え処理による負荷の増加を引き起こす。性能と安全性のバランスをとるため、プログラムを動作させる環境の安全性と、ユーザやプログラム提供者のセキュリティ要求に従って最適なコードの分割基準や起動・導入場所が決定されることが望ましい。起動・導入場所として、同一の装置上の耐タンパハードウェアの保護環境、ソフトウェアベースの保護環境、別の装置上の保護環境など、安全性や性能が異なる複数の保護環境が利用可能である。
【０００８】
そこで、本発明は、上記の課題に鑑み、保護環境と通常環境という２つの計算機環境でプログラムを動作させ、適切なリソースにアクセスでき、処理負荷を増大させずに、プログラムの解析や改ざん、権限の奪取による秘密データの漏洩や不正な動作を防止し、安全性を確保することができるプログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の第１の特徴は、１つのプログラムを、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割するプログラム分割装置であって、（ａ）分割コードの生成における規則を与えるポリシーを入力して、与えられたソースコードの保護が必要な関数と変数に保護属性を付与するソースコード解析部と、（ｂ）ソースコード解析部による解析結果を利用して、保護属性を持つ関数を含む保護コードを生成する保護コード生成部と、（ｃ）ソースコード解析部による解析結果を利用して、保護属性を持たない関数と保護コードの関数を呼び出す関数を含む通常コードを生成する通常コード生成部とを備えるプログラム分割装置であることを要旨とする。
【００１０】
第１の特徴に係るプログラム分割装置によると、プログラムのソースコードを解析し、与えられたポリシーに従って、プログラムを保護が必要な関数と変数を含む保護コードとそれ以外の通常コードに分割することができる。このため、プログラムの提供者が、自身のポリシーに従ってコード分割基準を与えてプログラムを分割することができ、適切なセキュリティと性能のバランスをとることができる。
【００１１】
又、第１の特徴に係るプログラム分割装置のソースコード解析部は、ファイルシステムやネットワーク上のサーバ装置からプログラムのソースコードを入力するソースコード入力部と、ソースコードを入力した装置とは同一あるいは別の装置上のファイルシステムやネットワーク上のサーバ装置からポリシーを入力するポリシー入力部とを備えてもよい。
【００１２】
このプログラム分割装置によると、ソースコードおよびポリシーをファイルシステムやネットワークから取得することができる。プログラム分割装置は遠隔のサーバ装置からソースコードやポリシーを取得して、分割コードを作成できると共に、ソースコードやポリシーを別々のサーバ装置から取得して組み合わせることができるため、任意のタイミングで動的に分割コードを生成できるだけでなく、サービス提供者やユーザなどの異なるセキュリティポリシーに対応した分割コードを生成することができる。
【００１３】
又、第１の特徴に係るプログラム分割装置の保護コード生成部は、ポリシーを利用して、保護コードと通常コードの少なくともいずれか１つの動作の検証を行うコードを生成し、保護コードに埋め込む自己検証コード埋め込み部を備えてもよい。
【００１４】
このプログラム分割装置によると、与えられたポリシーに従って、保護された環境で動作する保護コードに、保護コードと通常コードとを含むプログラム自身の動作の検証を行うコードを埋め込むことができる。このため、安全な環境からプログラム全体の動作を監査でき、ライセンスチェックのバイパスや許可されていない特権操作など（ライブラリ／システムコール等）のアプリの不正動作を検知、防止できる。
【００１５】
又、第１の特徴に係るプログラム分割装置の通常コード生成部は、ポリシーを利用して、保護コードの起動を制御するコードを生成し、保護コードあるいは通常コードに埋め込む起動制御コード埋め込み部を備えてもよい。
【００１６】
このプログラム分割装置によると、与えられたポリシーに従って保護コードの起動を制御するコードを生成し、保護コードか通常コードに埋め込むことができる。このため、ポリシーに従って保護コードの実行場所を決定することができ、適切なセキュリティと性能を達成することができる。
【００１７】
又、第１の特徴に係るプログラム分割装置の通常コード生成部は、ポリシーを利用して、保護コードの導入を制御するコードを生成し、通常コードに埋め込む導入制御コード埋め込み部を備えてもよい。
【００１８】
このプログラム分割装置によると、与えられたポリシーに従って、保護コードの導入を制御するコードを生成し、保護コードあるいは通常コードに埋め込むことができる。このため、ポリシーに従って保護コードの導入場所を決定することができ、適切なセキュリティと性能を達成することができる。
【００１９】
又、第１の特徴に係るプログラム分割装置の保護コード生成部及び通常コード生成部は、認証と暗号化、改ざんの検査の少なくともいずれか一つの通信の保護機能を通信の関数に組み込む通信保護部を備えてもよい。
【００２０】
このプログラム分割装置によると、保護コードや通常コードに認証や暗号化、署名などの通信保護機能を加えることができる。このため、保護コードと通常コード間の通信の盗聴や改ざんなどの攻撃を防御でき、プログラムを安全に実行することができる。
【００２１】
本発明の第２の特徴は、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割されたプログラムの実行環境を提供するプログラム実行装置であって、（ａ）保護コードのための保護環境と通常コードのための通常環境との、２つの環境の隔離と制御を行う複数プログラム実行環境管理部と、（ｂ）保護コードの導入及び起動を管理する保護コード管理部と、（ｃ）通常コードの導入及び起動を管理する通常コード管理部と備えるプログラム実行装置であることを要旨とする。
【００２２】
第２の特徴に係るプログラム実行装置によると、保護を要求するコードとそれ以外のコードに分割されたプログラムをそれぞれ保護環境と通常環境において、導入および起動させる手段と、相互で通信可能とする手段と、２つの環境の隔離手段を提供することができる。このため、保護を要求するコードとそれ以外のコードに分割されたプログラムのために安全な実行環境を提供することができる。
【００２３】
又、第２の特徴に係るプログラム実行装置において、保護環境と通常環境はそれぞれ仮想マシンであり、複数プログラム実行環境管理部は、仮想マシンの隔離と制御を行う仮想マシンモニタであってもよい。
【００２４】
このプログラム実行装置によると、仮想マシンモニタベースのデバイスにおいて、保護を要求するコードとそれ以外のコードに分割されたプログラムのために安全な実行環境を提供することができる。
【００２５】
又、第２の特徴に係るプログラム実行装置の保護コード管理部は、保護コードのデジタル署名を検証する署名検証部と、署名検証部による署名の検証が成功した場合、保護コードを保護環境で実行可能に組み込む保護導入部と、保護コードの完全性の検証に成功した場合、保護コードを起動する保護起動部とを備えてもよい。
【００２６】
このプログラム実行装置によると、保護を要求するコードの起動時に、その完全性を検証し、成功した際にのみ、起動することができる。又、保護環境においてはコードの署名を検証した後、導入を行うことができる。このため、信頼できないコードを導入したり、改ざんされたコードを実行したりする危険性を回避し、安全なプログラム保護環境実行を維持することができる。
【００２７】
又、第２の特徴に係るプログラム実行装置の複数プログラム実行環境管理部は、保護コードと通常コードが安全に通信するための保護手段を提供する環境間通信制御部を備えてもよい。
【００２８】
このプログラム実行装置によると、通信のなりすましや改ざん、盗聴を防ぎ、プログラム実行における秘密情報の流出や処理の不整合を防止することができる。
【００２９】
又、第２の特徴に係るプログラム実行装置の複数プログラム実行環境管理部は、保護コードが、通常コードの動作あるいは状態を取得し、検証する環境間監視制御部を備えてもよい。
【００３０】
このプログラム実行装置によると、安全な環境に存在する保護コードが保護コード、通常コードを含むプログラム全体の動作を監査でき、ライセンスチェックのバイパスや許可されていない特権操作（ライブラリ／システムコール等）の実行などのアプリの不正動作を検知、防止できる。
【００３１】
本発明の第３の特徴は、１つのプログラムを、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割するプログラム分割方法であって、（ａ）分割コードの生成における規則を与えるポリシーを入力して、与えられたソースコードの保護が必要な関数と変数に保護属性を付与するステップと、（ｂ）解析結果を利用して、保護属性を持つ関数を含む保護コードを生成するステップと、（ｃ）解析結果を利用して、保護属性を持たない関数と保護コードの関数を呼び出す関数を含む通常コードを生成するステップとを含むプログラム分割方法であることを要旨とする。
【００３２】
第３の特徴に係るプログラム分割方法によると、プログラムのソースコードを解析し、与えられたポリシーに従って、プログラムを保護が必要な関数と変数を含む保護コードとそれ以外の通常コードに分割することができる。このため、プログラムの提供者が、自身のポリシーに従ってコード分割基準を与えてプログラムを分割することができ、適切なセキュリティと性能のバランスをとることができる。
【００３３】
本発明の第４の特徴は、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割されたプログラムの実行環境を提供するプログラム実行方法であって、（ａ）保護コードのための保護環境と通常コードのための通常環境との、２つの環境の隔離と制御を行うステップと、（ｂ）保護コードの導入及び起動を管理するステップと、（ｃ）通常コードの導入及び起動を管理するステップとを含むプログラム実行方法であることを要旨とする。
【００３４】
第４の特徴に係るプログラム実行方法によると、保護を要求するコードとそれ以外のコードに分割されたプログラムのために安全な実行環境を提供することができる。
【発明の効果】
【００３５】
本発明によると、保護環境と通常環境という２つの計算機環境でプログラムを動作させ、適切なリソースにアクセスでき、処理負荷を増大させずに、プログラムの解析や改ざん、権限の奪取による秘密データの漏洩や不正な動作を防止し、安全性を確保することができるプログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法を提供することができる。
【発明を実施するための最良の形態】
【００３６】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には、同一又は類似の符号を付している。ただし、図面は模式的なものであることに留意すべきである。
【００３７】
＜第１の実施の形態＞
（プログラム分割装置）
第１の実施の形態に係るプログラム分割装置は、１つのプログラムを、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割する。
【００３８】
第１の実施の形態に係るプログラム分割装置は、図１に示すように、ソースコード解析部１１０と、保護コード生成部１３０と、通常コード生成部１４０と、これらを制御する制御部１２０とを備える。更に、ソースコード解析部１１０は、ソースコード入力部１１１とポリシー入力部１１２とを含み、保護コード生成部１３０は、自己検証コード埋め込み部１３１と通信保護部１３２とを含み、通常コード生成部１４０は、起動制御コード埋め込み部１４１と導入制御コード埋め込み部１４２と通信保護部１４３とを含む。
【００３９】
｛ソースコード解析部｝
ソースコード解析部１１０は、分割コードの生成における規則を与えるポリシーを入力して、与えられたソースコードにおいて保護が必要な関数と変数に対して保護属性を付与する。ソースコードとポリシーの具体例を以下で述べた後、解析や保護属性の付与手順について説明する。
【００４０】
ソースコード入力部１１１は、プログラムのソースコードをファイルシステムやネットワークから入力して、その後の解析やコード生成のための準備を行う。プログラムは、Ｃ言語やＣ++言語、Java言語など言語を問わないが、関数呼び出しや変数の利用をするものであるとする。又、プログラマは保護を必要とする部分に注釈（アノテーション）を付けてもよい。
【００４１】
図２に具体例として、著作権付きの曲を扱う音楽再生用プログラムの元のソースコードの一部を示す。関数宣言やその本体、エラー処理などは説明の簡単化のため、省略している。このソースコードのOnPlayButton関数は、ユーザがある曲（ＩＤがmusic_id）の再生を要求する際に呼び出され、MakeRecordName関数でその曲に対応するレコード名を作成し、SimReadRecord関数により、そのレコード名に対するライセンス情報をＳＩＭと呼ばれる耐タンパモジュールから取得する。そして、DrmCheckValid関数でライセンス情報にアクセスし、その曲の再生期限が規定されている場合、有効な再生期間であるかを検査する。再生可能である場合、AddPlayCount関数により、課金のために再生回数をカウントしてＳＩＭ内の当該のレコードに書き込む。そして、DrmGetKey関数により、ライセンス情報から暗号化された曲ファイルの復号鍵を取得し、DecryptSong関数により、曲を復号化する。最後に、OutputMusic関数で復号されたデータを、サウンドドライバなどを通じてスピーカに出力する。
【００４２】
ポリシー入力部１１２は、分割コードの生成に関わるポリシーをファイルシステムやネットワークから入力して、その後の解析やコード生成のための準備を行うものである。図３にポリシーの具体例を２つ示す。ここでは、ポリシーは分割基準を指定する<sensitive>，<insensitive>部分と、検証の規則を推定する<verification>部分と、起動・導入場所を指定する<launch>，<install>部分から構成されるものとしている。これら以外にも、コード生成においてターゲットとするデバイスの種別や利用するコンパイラなど、コード分割を制御するための命令や指示をポリシーに与えてもよい。又本具体例ではＸＭＬによる記述を示したがその他の記述方式でもよい。
【００４３】
ポリシー１（Policy1）では分割において保護環境に含める関数として、SimReadRecord関数に<sensitive>タグを付与している。そして検証の規則として、曲を復号する鍵を取得するDrmGetKey関数の前に、ライセンス検査のためのDrmCheckValid関数がターゲットの関数（DrmGetKey関数）と同一の引数で実行されていて、返り値がＴＲＵＥであること、再生回数のカウントのためのAddPlayCount関数が実行されていることが正常であると規定している。そして、<action>タグにより、この条件が満たされない場合、DrmGetKey関数の呼び出しを拒否（ＲＥＪＥＣＴ）することを規定している。ここではある関数の実行前に、特定の関数が実行されていることを検証規則として与えたが、他にも呼び出しの引数が想定した値の範囲にあること、単位時間あたりの呼び出しの回数が指定の閾値以下であることなどの検証規則が考えられる。更に、このポリシーでは、保護コード（<monitor>タグにより指定している）を、securevm.mydevice.mydomainという名前で表される同一デバイス上の保護環境に導入し、起動するものと指定している。
【００４４】
一方、ポリシー２（Policy2）では、コード分割においてOutputMusic関数を通常環境に含めるように<insentive>タグを付与している。これは、保護環境でサウンドドライバが利用不可能である場合や、保護環境と通常環境が物理的に別のデバイスに分割されていて、通常環境のデバイスで音楽を出力したい場合を想定している。そして、保護コードを、myhandset.mydomainという名前で表される同一デバイス上の保護環境に導入し、起動するものと指定している。なお、検証規則はポリシー１と同様であるため、省略している。
【００４５】
上述のソースコードとポリシーの具体例に基づき、ソースコード解析部が出力するソースコードの解析結果の具体例を図４に示す。ポリシーにおいてSimReadRecord関数のlicenseinfo引数とDrmGetKey関数の返り値は$sensitiveという修飾語が付与されている。この伝播を解析し、licenseinfoを引数とするDrmCheckValid関数、DrmAddPlayCount関数、DrmGetKey関数にも保護属性が付与され、sensitive_という接頭辞が付与される。更に、DrmGetKey関数の返り値である変数keyの伝播から、DecryptSong関数にも保護属性が付与される。このように、与えられたソースコードにおいて保護が必要な関数と変数に対して保護属性が付与される。
【００４６】
｛通常コード生成部｝
通常コード生成部１４０は、ソースコード解析部１１０による解析結果を利用して、保護属性を持たない関数と保護コードの関数を呼び出す関数を含む通常コードを生成する。
【００４７】
具体的には、通常コード生成部１４０は、ソースコード解析結果を利用して、保護属性が付与された関数の呼び出しを、保護コード内の対応する関数を呼び出すラッパ関数に置き換えると共に保護属性が付与された変数を保護コード内の対応する変数のインデックスとして置き換えた後、コンパイルやリンクによって通常コードを生成する。置き換えるラッパ関数や変数の名前は、sensitive_SimReadRecordやsensitive_licenseinfoのようにソースコード解析結果をそのまま利用してもよいし、別の名前としてもよい。ラッパ関数は内部で、保護コード内の対応する関数をＲＰＣ（Remote Procedure Call）や共有メモリを介して呼び出し、返り値を受け取り、ラッパ関数の呼び出し元に与えるものである。呼び出しの際に与える引数に保護属性が付与されている場合、保護コードにはその変数の実体へのインデックス値が与えられ、保護コードにおいてインデックス値から実体へと変換がなされる。返り値に保護属性が付与されている場合も、ラッパ関数が受け取る返り値はインデックス値となる。なお、ラッパ関数の実体はあらかじめ開発者などが用意しておいてもよいし、動的に生成してもよい。
【００４８】
起動制御コード埋め込み部１４１は、ポリシーを利用して、保護コードの起動を制御するコードを生成し、通常コードに埋め込むものである。ポリシー１の場合、同一デバイス上の保護環境における保護コードを起動するコードが埋め込まれ、ポリシー２の場合、携帯電話上の保護コードを起動するコードが埋め込まれる。図４に示す具体例では、StartMonitor()がこの起動コードに対応する。
【００４９】
導入制御コード埋め込み部１４２は、ポリシーを利用して、保護コードの導入を制御するコードを生成し、通常コードに埋め込むものである。ポリシー１の場合、同一デバイス上の保護環境に保護コードを導入するコードが埋め込まれ、ポリシー２の場合、携帯電話内の保護環境に保護コードを導入するコードが埋め込まれる。図４に示す具体例では、InstallMonitor()の呼び出しがこの導入コードに対応する。
【００５０】
通信保護部１４３は、認証と暗号化、改ざんの検査の少なくともいずれか一つの通信の保護機能を、上記のラッパ関数による保護コードの対応する関数の呼び出しと、返り値の受け取りに関する通信機構に組み込むものである。例えば、保護コードと通常コードの間であらかじめ秘密鍵を共有しておき、チャレンジレスポンスプロトコルを利用して認証を行い、交換したセッション鍵を使ってデータを暗号化する。更に、ＭＡＣ（Message Authentication Code）の利用により、通信途中の改ざんを検査する。
【００５１】
｛保護コード生成部｝
保護コード生成部１３０は、ソースコード解析部１１０による解析結果を利用して、保護属性を持つ関数を含む保護コードを生成する。
【００５２】
具体的には、保護コード生成部１３０は、ソースコード解析結果を利用して、保護属性が付けられた関数を内部で呼び出すラッパ関数と、通常コードからの呼び出しを受け付け、処理する通信部と、保護が必要な変数を管理する変数管理部とを含み、保護コードを生成する。図５に、ポリシー１を適用した際の、保護コードの具体例を示す。通信部には例えば、通常コードからの呼び出しを受け付ける部分（main()内のReceiveRpc行）や、通常コードが与える引数のインデックスから実体を復元する部分（RestoreArg行）、呼び出しと引数、返り値の履歴を保存する部分（CallLog行）、ラッパ関数へ呼び出しを振り分ける部分（Dispatch行）が含まれる。ラッパ関数は、保護属性が付与されたSimReadRecord，DrmCheckValid，DrmAddPlayCount，DrmGetKey，DecryptSongの各関数に対応して、monitor_SimReadRecord，monitor_DrmCheckValid関数などが用意される。ラップ関数は内部で、インデックスから復元された引数を利用して、SimReadRecord，DrmCheckValidなどの実体の関数を呼び出し、返り値を呼び出し元の通常コードへ返す。ただし、返り値に保護属性が付与されている場合、その返り値は変数管理部によってインデックス値と共に保持され、通常コードへはそのインデックスが返される。図６に、変数管理部が保持するテーブルの具体例を示す。保護が必要な変数としてlicenseinfo、保護が必要な返り値としてkeyが、モニタの変数管理部によって保持されており、インデックス１０１，１０２によってアクセスされる。
【００５３】
自己検証コード埋め込み部１３１は、ポリシーを利用して、プログラムの動作の検証を行うコードを生成し、保護コードに埋め込む。図５の具体例では、main()内のCheckPolicy関数呼び出しにおいてポリシーを検査している。ポリシー１の場合、曲を復号する鍵を取得するDrmGetKey関数が呼ばれた際、DrmCheckValid関数がDrmGetKey関数と同一の引数で実行されていて、返り値がＴＲＵＥであること、再生回数のカウントのためのAddPlayCount関数が実行されていることを検査し、この条件が満たされない場合、DrmCheckValid関数の呼び出しをブロックする。これらポリシーの検査は、例えば図７に示すように、保護コードにおいて呼び出しと引数、返り値の履歴をテーブル形式で保存しておき、このテーブルを検索することで実現できる。
【００５４】
通信保護部１３２は、通常コードと同様に、認証と暗号化、改ざんの検査の少なくともいずれか一つの通信の保護機能を、保護コードに組み込む。通常コードからの呼び出しを受け付け、処理する通信部やラッパ関数が通常コードに返り値を返す部分にこれらの保護機能を追加する。
【００５５】
又、プログラム分割装置１００は、処理制御装置（ＣＰＵ）を有し、上述したソースコード解析部１１０、保護コード生成部１３０、通常コード生成部１４０などをモジュールとして、ＣＰＵによって実行させる構成とすることができる。これらのモジュールは、パーソナルコンピュータ等の汎用コンピュータにおいて、所定のプログラム言語を利用するための専用プログラムを実行することにより実現することができる。
【００５６】
又、図示していないが、プログラム分割装置１００は、ソースコード解析処理、保護コード生成処理、通常コード生成処理などをＣＰＵに実行させるためのプログラムを蓄積するプログラム保持部を備えてもよい。プログラム保持部は、例えば、ＲＡＭ、ＲＯＭ、ハードディスク、フレキシブルディスク、コンパクトディスク、ＩＣチップ、カセットテープなどの記録媒体である。このような記録媒体によれば、プログラムの蓄積、運搬、販売などを容易に行うことができる。
【００５７】
（プログラム分割方法）
次に、第１の実施の形態に係るプログラム分割方法について、図８を用いて、説明する。本方法は、ユーザからの入力や外部装置からの入力をトリガとして、起動される。
【００５８】
まず、ステップＳ１０１において、ソースコードが入力され、ステップＳ１０２においてポリシーが入力される。次に、ステップＳ１０３において、ソースコード解析部１１０は、ソースコードを解析し、ポリシーで与えられた保護属性を関連する関数、変数へと伝播させる。
【００５９】
次に、ステップＳ１０４及びステップＳ１０５において、ステップＳ１０３における解析結果のソースコードを利用して、通常コードと保護コードを生成する。ステップＳ１０４及びステップＳ１０５については、後に詳述する。
【００６０】
次に、ステップＳ１０６において、通常コードと保護コードをパッケージ化した後、ステップＳ１０７において、デジタル署名と証明書をパッケージに付与する。その際、リバースエンジニアリングの防止やデータ量の削減のため、暗号化や圧縮を行ってもよい。
【００６１】
図８のステップＳ１０４に示す通常コードの生成方法について、図９を用いて説明する。
【００６２】
まず、ステップＳ２０１において、解析結果のソースコード中の保護属性が付けられた関数・変数をそれぞれラッパ関数とインデックス変数に置き換える。
【００６３】
次に、ステップＳ２０２及びステップＳ２０３において、ポリシーで指定された保護コードの起動場所、導入場所に従って起動コード、導入コードをそのソースコードに埋め込む。
【００６４】
そして、ステップＳ２０４において、そのソースコードをコンパイルし、ステップＳ２０５において、保護コードの関数を呼び出すための通信ライブラリなどをリンクして、実行可能（executable）な通常コードを生成する。
【００６５】
又、図示していないが、通常コードにデジタル署名や証明書を付与してもよいし、リバースエンジニアリングの防止やデータ量の削減のため、暗号化や圧縮を行ってもよい。
【００６６】
次に、図８のステップＳ１０５に示す保護コードの生成方法について、図１０を用いて説明する。
【００６７】
まず、ステップＳ３０１において、解析結果のソースコードから、保護属性が付けられた関数・変数を抜き出す。そして、通常コードからの呼び出しを処理する通信部と、保護が必要な変数を管理する変数管理部のコードと、保護属性の関数それぞれに対応するラッパ関数を生成する。ラッパ関数は内部で実体の関数を呼び出すと共に、返り値に保護属性が付与されている場合はインデックス変数を返すように作成される。
【００６８】
次に、ステップＳ３０２において、自己検証コード埋め込み部１３１は、ポリシーを利用して、プログラムの動作の検証を行うコードを生成し、保護コードに埋め込む。
【００６９】
次に、ステップＳ３０３において、ソースコードをコンパイルし、ステップＳ３０４において、通信ライブラリなどをリンクし、実行可能（executable）な保護コードを生成する。
【００７０】
次に、ステップＳ３０６において、デジタル署名と証明書を保護コードに付与する。その際、リバースエンジニアリングの防止やデータ量の削減のため、暗号化や圧縮を行ってもよい（ステップＳ３０５）。
【００７１】
（プログラム実行装置）
第１の実施の形態に係るプログラム実行装置は、保護を要求するコード（保護コード）とそれ以外の通常コードに分割されたプログラムのための実行環境を提供する。
【００７２】
第１の実施の形態に係るプログラム実行装置は、図１１に示すように、複数プログラム実行環境管理部２３０と、保護コード管理部２１２と、通常コード管理部２２２とを備える。更に、複数プログラム実行環境管理部２３０は、環境間通信制御部２３２と、環境間監視制御部２３１とを含み、保護コード管理部２１２は、署名検証部２１５と、保護起動部２１３と、保護導入部２１４とを含む。
【００７３】
｛複数プログラム実行環境管理部｝
複数プログラム実行環境管理部２３０は、保護コードの実行のための保護環境２１０と通常コードの実行のための通常環境２２０の、２つ以上の実行環境の隔離と制御を行う。実行環境の実現手段に制限はなく、複数プログラム実行環境管理部２３０の実現にあたり、仮想マシンモニタの技術を用いて仮想マシンレベルの複数の実行環境を管理してもよいし、オペレーティングシステムによってプロセスレベルの複数の実行環境を管理してもよい。更に、分散システム用のミドルウェアを利用して複数のデバイス上の複数の実行環境を管理させてもよい。第１の実施の形態では、保護環境２１０と通常環境２２０はそれぞれ仮想マシンであり、複数プログラム実行環境管理部２３０は、仮想マシンの隔離と制御を行う仮想マシンモニタであるものとして説明する。
【００７４】
環境間通信制御部２３２は、保護コードと通常コードが安全に通信する手段を提供する。例えば、環境間通信制御部２３２が鍵の割り当てを管理し、保護コードと通常コードからの要求に従って共有鍵を与えることで、チャレンジレスポンスプロトコルによる認証や、交換したセッション鍵によるデータの暗号化、ＭＡＣ（Message Authentication Code）の利用による通信途中の改ざんを検査する。
【００７５】
環境間監視制御部２３１は、保護を要求するコードが、通常コードの動作あるいは状態を取得し、検証する。例えば、通常コードのシステムコールやマシン語レベルの実行系列や、実行コードのテキストセグメント、データセグメント、ヒープやスタックなどのメモリの状態を取得可能とする。
【００７６】
｛保護コード管理部｝
保護コード管理部２１２は、保護を要求するコードの導入や起動を管理する。
【００７７】
署名検証部２１５は、保護コードに付与されたデジタル署名や証明書の検証を行う。デジタル署名のアルゴリズムは、ＲＳＡ，El Gamal，ＤＳＡ，Rabin方式などいずれでもよい。又、証明書もX.509証明書フォーマットなど形式を問わない。
【００７８】
保護導入部２１４は、署名および証明書の検証が成功した場合にのみ保護コードを保護環境で実行可能なように組み込む。導入の際、保護コードが暗号化、圧縮されている場合は復号化や解凍を行い、保護環境内のファイルシステムに必要なファイルをコピーしたり、環境変数や設定ファイル等の設定を行ったりする。又、保護コードのハッシュ値をＳＨＡ１などのハッシュ関数を利用して計算し、正常なハッシュ値として保護コード管理部に保存する。検証が失敗した場合、保護コードの導入の要求元に検証の失敗を示す応答を返してもよいし、応答を返さずに処理を中断してもよい。
【００７９】
保護起動部２１３は、保護コードの完全性を検証し、検証が成功した際、起動する。完全性は、保護コードの実行可能ファイルのハッシュ値を計算し、保護コード管理部が保持する正常なハッシュ値と一致するかを比較することで検証できる。検証が失敗した場合、保護コードの起動の要求元に検証の失敗を示す応答を返してもよいし、応答を返さずに処理を中断してもよい。
【００８０】
｛通常コード管理部｝
通常コード管理部２２２は、保護を要求しない通常コードの導入や起動を管理する。導入手順においては、通常環境内のファイルシステムに必要なファイルをコピーしたり、環境変数や設定ファイル等の設定を行ったりする。このとき、保護コード管理部のように署名を検証して導入の可否を決定してもよいし、通常コードの正常なハッシュ値を計算し、保持してもよい。又、起動手順においてはユーザや外部装置からの入力にしたがって、通常コードの実行可能ファイルを起動する。このとき、保護コード管理部のように完全性を検証した後、起動処理を行ってもよい。
【００８１】
又、プログラム実行装置２００は、処理制御装置（ＣＰＵ）を有し、上述した複数プログラム実行環境管理部２３０、保護コード管理部２１２、通常コード管理部２２２などをモジュールとして、ＣＰＵによって実行させる構成とすることができる。これらのモジュールは、パーソナルコンピュータ等の汎用コンピュータにおいて、所定のプログラム言語を利用するための専用プログラムを実行することにより実現することができる。
【００８２】
又、図示していないが、プログラム実行装置２００は、複数プログラム実行環境管理処理、保護コード管理処理、通常コード管理処理などをＣＰＵに実行させるためのプログラムを蓄積するプログラム保持部を備えてもよい。プログラム保持部は、例えば、ＲＡＭ、ＲＯＭ、ハードディスク、フレキシブルディスク、コンパクトディスク、ＩＣチップ、カセットテープなどの記録媒体である。このような記録媒体によれば、プログラムの蓄積、運搬、販売などを容易に行うことができる。
【００８３】
（プログラム実行方法）
次に、第１の実施の形態に係るプログラム実行方法について、図１２〜１４を用いて説明する。
【００８４】
｛保護コードの導入手順｝
図１２を用いて、保護コードの導入方法について説明する。
【００８５】
まず、ユーザは保護コードと通常コードが同梱されているパッケージを、ネットワーク上のサーバ装置からのダウンロードや、ＣＤ−ＲＯＭなどのストレージメディアを通して、デバイスの通常環境上に取得する。そして、パッケージから通常コードを取り出し、通常環境に導入する。通常コードの導入は、通常コード管理部や通常コード自身、あるいは外部のインストーラプログラムによって行われ、ファイルを特定の場所にコピーしたり、環境変数や設定ファイルの設定が行われたりする。通常コードの導入の完了後、通常コード管理部や通常コード自身が、保護コード管理部に保護コードの導入要求を発行する。ここから、図１０の保護コードの導入手順が開始される。
【００８６】
まず、ステップＳ４０１において、保護コード管理部２１２は、通常コードやユーザからの保護コードの導入要求を受け付ける。そして、ステップＳ４０２において、保護コードのファイルの署名と証明書を検証する。保護コードのファイルは、ファイルシステムや通信を通じて与えられる。例えば、通常コードが保護コード管理部を呼び出して通信チャネルを確立し、保護コードのバイナリデータを転送してもよいし、通常コードが通常環境内の保護コードのファイルをＯＳや仮想マシンモニタが提供するファイルコピーの手段によって、保護環境にコピーしてもよい。
【００８７】
ステップＳ４０３において、署名および証明書の検証が成功した場合は、ステップＳ４０４に進み、保護コード導入の際、保護コードが暗号化、圧縮されている場合は復号化や解凍を行う。又、ステップＳ４０５において、保護環境内のファイルシステムに必要なファイルをコピーしたり、環境変数や設定ファイル等の設定を行ったりする。又、ステップＳ４０６において、保護コードのハッシュ値をＳＨＡ１などのハッシュ関数を利用して計算し、正常なハッシュ値として保護コード管理部に保存する。
【００８８】
一方、ステップＳ４０３において、検証が失敗した場合は、ステップＳ４０７に進み、保護コードの導入の要求元に検証の失敗を示す応答を返す。
【００８９】
｛保護コードの起動手順｝
図１３を用いて、保護コードの起動方法について説明する。本手順は、通常コードやユーザからの保護コードの起動要求をトリガに実行が開始される。
【００９０】
まず、ステップＳ５０１において、保護コード管理部２１２は、通常コードやユーザからの保護コードの起動要求を受け付ける。そして、ステップＳ５０２において、保護コードのハッシュ値を計算し、保護コード管理部が保持する正常なハッシュ値と比較、検証する。
【００９１】
ステップＳ５０３において、検証が成功した場合、ステップＳ５０４に進み、保護コードを起動する。
【００９２】
一方、ステップＳ５０３において、検証が失敗した場合、ステップＳ５０５に進み、保護コードの起動の要求元に検証の失敗を示す応答を返す。
【００９３】
｛通常コードから保護コードの関数呼び出し手順｝
図１４を用いて、通常コードから保護コード内の保護が必要とされる関数を呼び出す方法について説明する。
【００９４】
まず、ステップＳ６０１において、通常コード内で保護コードに含まれる関数がラップ関数を通じて呼び出される。すると、ステップＳ６０２において、通常コードからの呼び出しを保護コードが受け付け、ステップＳ６０３において、認証や改ざんの検査を行い、その呼び出しが正当なものであるかを検査する。
【００９５】
ステップＳ６０３において、正当でないと判断した場合、ステップＳ６１２に進み、通常コードに呼び出しの拒否を応答する。
【００９６】
一方、ステップＳ６０３において、正当だと判断した場合、ステップＳ６０４に進み、呼び出しの引数において保護された変数を指すインデックス変数が与えられていた場合、実体の引数を変数管理テーブルから引き出す。
【００９７】
次に、ステップＳ６０５において、保護コードに埋め込まれた自己検証コードが、通常コードからの呼び出しがポリシーに沿っているかを検査する。ここで、図３で示した自己検証ポリシーと図７に示す通常コードｘと通常コードｙからの呼び出しの履歴例を利用して、自己検証ポリシー検査の具体例を説明する。図３で示した自己検証ポリシーに従い、保護コードはDrmGetKey関数の呼び出しの際に、DrmCheckValid関数がDrmGetKey関数と同一の引数で実行されていて、返り値がＴＲＵＥであること、再生回数のカウントのためのAddPlayCount関数が実行されていることを検査する。通常コードｘからの場合、この検証規則を満たしているため、自己検証ポリシーの検査は成功する（ステップＳ６０６→ステップＳ６０７）。しかしながら、通常コードｙの呼び出しではDrmGetKey関数の前にDrmCheckValid関数もAddPlayCount関数も実行されていない。そのため、検証規則を満たしておらず、保護コードはDrmGetKey関数の呼び出しを拒否する（ステップＳ６０６→ステップＳ６１２）。
【００９８】
次に、ステップＳ６０７において、保護コードは呼び出しの関数名と引数、返り値、呼び出しを受け付けたタイムスタンプを履歴として保持する。この履歴は自己検証ポリシーの検証において利用される。
【００９９】
そして、ステップＳ６０８において、復元された引数のもと、保護コード内のラッパ関数が呼び出される。ステップＳ６０９において、ラッパ関数内では、SimReadRecord，DrmCheckValidなどの実体の関数を呼び出し、ステップＳ６１０において、返り値を作成する。そして、ステップＳ６１０において、返り値を通常コードへ返す。ただし、返り値に保護属性が付与されている場合、返り値を変数管理テーブルにインデックス付きで保持し、そのインデックスを通常コードへ返す。
【０１００】
（作用及び効果）
第１の実施の形態に係るプログラム分割装置１００は、与えられたポリシーに従って、プログラムを保護が必要な関数と変数を含む保護コードとそれ以外の通常コードに分割することができる。このため、プログラムの提供者が、自身のポリシーに従ってコード分割基準を与えてプログラムを分割することができ、適切なセキュリティと性能のバランスをとることができる。
【０１０１】
又、第１の実施の形態に係るプログラム分割装置１００のソースコード解析部１１０は、ソースコード入力部１１１と、ポリシー入力部１１２とを備えるため、ソースコードおよびポリシーをファイルシステムやネットワークから取得することができる。プログラム分割装置は遠隔のサーバ装置からソースコードやポリシーを取得して、分割コードを作成できると共に、ソースコードやポリシーを別々のサーバ装置から取得して組み合わせることができるため、任意のタイミングで動的に分割コードを生成できるだけでなく、サービス提供者やユーザなどの異なるセキュリティポリシーに対応した分割コードを生成することができる。
【０１０２】
又、第１の実施の形態に係るプログラム分割装置１００の保護コード生成部１３０は、自己検証コード埋め込み部１３１を備えるため、与えられたポリシーに従って、保護された環境で動作する保護コードに、保護コードと通常コードとを含むプログラム自身の動作の検証を行うコードを埋め込むことができる。このため、安全な環境からプログラム全体の動作を監査でき、ライセンスチェックのバイパスや許可されていない特権操作など（ライブラリ／システムコール等）のアプリの不正動作を検知、防止できる。
【０１０３】
又、第１の実施の形態に係るプログラム分割装置の通常コード生成部１４０は、起動制御コード埋め込み部１４１を備えるため、与えられたポリシーに従って保護コードの起動を制御するコードを生成し、保護コードか通常コードに埋め込むことができる。このため、ポリシーに従って保護コードの実行場所を決定することができ、適切なセキュリティと性能を達成することができる。
【０１０４】
又、第１の実施の形態に係るプログラム分割装置１００の通常コード生成部１４０は、導入制御コード埋め込み部１４２を備えるため、与えられたポリシーに従って、保護コードの導入を制御するコードを生成し、保護コードあるいは通常コードに埋め込むことができる。このため、ポリシーに従って保護コードの導入場所を決定することができ、適切なセキュリティと性能を達成することができる。
【０１０５】
又、第１の実施の形態に係るプログラム分割装置１００の保護コード生成部１３０及び通常コード生成部１４０は、それぞれ通信保護部１３２、１４３を備えるため、保護コードや通常コードに認証や暗号化、署名などの通信保護機能を加えることができる。このため、保護コードと通常コード間の通信の盗聴や改ざんなどの攻撃を防御でき、プログラムを安全に実行することができる。
【０１０６】
第１の実施の形態に係るプログラム実行装置は、保護を要求するコードとそれ以外のコードに分割されたプログラムをそれぞれ保護環境と通常環境において、導入および起動させる手段と、相互で通信可能とする手段と、２つの環境の遠隔手段を提供することができる。このため、保護を要求するコードとそれ以外のコードに分割されたプログラムのために安全な実行環境を提供することができる。
【０１０７】
又、第１の実施の形態に係るプログラム実行装置２００において、保護環境と通常環境はそれぞれ仮想マシンであり、複数プログラム実行環境管理部２３０は、仮想マシンの隔離と制御を行う仮想マシンモニタである。このため、仮想マシンモニタベースのデバイスにおいて、保護を要求するコードとそれ以外のコードに分割されたプログラムのために安全な実行環境を提供することができる。
【０１０８】
又、第１の実施の形態に係るプログラム実行装置２００の保護コード管理部２１２は、保護コードのデジタル署名を検証する署名検証部２１５と、署名検証部による署名の検証が成功した場合、保護コードを保護環境で実行可能に組み込む保護導入部２１４と、保護コードの完全性の検証に成功した場合、保護コードを起動する保護起動部２１３とを備えるため、保護を要求するコードの起動時に、その完全性を検証し、成功した際にのみ、起動することができる。又、保護環境においてはコードの署名を検証した後、導入を行うことができる。このため、信頼できないコードを導入したり、改ざんされたコードを実行したりする危険性を回避し、安全なプログラム保護環境実行を維持することができる。
【０１０９】
又、第１の実施の形態に係る実行装置２００の複数プログラム実行環境管理部２３０は、保護コードと通常コードが安全に通信するための保護手段を提供する環境間通信制御部２３２を備えるため、通信のなりすましや改ざん、盗聴を防ぎ、プログラム実行における秘密情報の流出や処理の不整合を防止することができる。
【０１１０】
又、第１の実施の形態に係るプログラム実行装置２００の複数プログラム実行環境管理部２３０は、保護コードが、通常コードの動作あるいは状態を取得し、検証する環境間監視制御部２３１を備えるため、安全な環境に存在する保護コードが保護コード、通常コードを含むプログラム全体の動作を監査でき、ライセンスチェックのバイパスや許可されていない特権操作など（ライブラリ／システムコール等）のアプリの不正動作を検知、防止できる。
【０１１１】
このように、第１の実施の形態に係るプログラム分割装置及びプログラム実行装置によると、安全な環境内の保護コード自身がプログラム動作を監査でき、権限の奪取や改ざんによるプログラムの不正動作（ライセンス検査のバイパスや不許可のライブラリ呼び出し等）を検知、防止できる。又、プログラム提供者やユーザが、コード分割基準や保護コードの実行場所（セキュア仮想マシンや携帯機、耐タンパチップ等）を指定でき、多様なデバイス環境や異なるセキュリティポリシーに対応して、プログラムを安全に実行できる。
【０１１２】
＜第２の実施の形態＞
第１の実施の形態では、同一デバイス上の保護環境と通常環境の間で分割したプログラムを動作させていたが、第２の実施の形態では、別々のデバイス上に存在する保護環境と通常環境の間で保護コードと通常コードを連携実行させる。ここでは、ユーザの携帯機上の保護環境と、ラップトップＰＣや情報家電などの周辺デバイス上の通常環境の間で、分割したプログラムを動作させるものとする。
【０１１３】
第２の実施の形態に係るプログラム実行装置は、図１５に示すように、保護環境２１０と通常環境２２０が物理的に別のデバイス上に配置されると共に、複数プログラム実行環境管理部２３０ａ、２３０ｂは双方のデバイス上に配置され、協調して実行環境の隔離と制御を行う。
【０１１４】
この異なるデバイス上に存在する保護環境と通常環境にプログラムを分割して実行するため、プログラム分割装置に、図３で示したポリシー２を渡して、通常コードと保護コードを生成させる。このポリシーにより、周辺デバイス上で動作する通常コードと、携帯機上で動作する保護コードが生成されると共に、通常コードには、携帯機に保護コードを導入する導入コードと携帯機上の保護コードを起動する起動コードが埋め込まれる。第１の実施の形態と同様に、図１２の手順に従って保護コードが導入されるが、第１の実施の形態と異なるのは通常コードから保護コード管理部への要求が周辺デバイスと携帯機の間の通信路を通っていく点である。
【０１１５】
第２の実施の形態に係るプログラム実行装置２００によると、別々のデバイス上に保護環境と通常環境が存在しても、保護環境と通常環境の間で保護コードと通常コードを連携実行させることができる。
【０１１６】
＜第３の実施の形態＞
第３の実施の形態として、プログラム実行装置に、外部からの盗聴や改ざんなどの攻撃に対して内部の秘密データや重要な処理を保護するための耐タンパハードウェアが組み込まれている場合を説明する。耐タンパハードウェアは、例えばＳＩＭ（Subscriber Information Module）のようなスマートカード（ＩＣカード）やTrusted Computing Group（www.trustedcomputing）が仕様を規定しているＴＰＭ（Trusted Platform Module）を利用して実装することができる。
【０１１７】
第１の実施の形態との違いは、耐タンパ保護環境が付け加えられたため、プログラム分割装置１００において、保護コードと通常コードと、耐タンパ保護コードの３つに分割する点と、プログラム実行装置において保護環境と通常環境、耐タンパ保護環境に分割して実行する点が異なる。
【０１１８】
第３の実施の形態に係るプログラム分割装置は、図１６に示すように、保護コード生成部１３０に耐タンパ保護コード生成部１３３が追加されている。耐タンパ保護コード生成部１３３は、耐タンパ保護環境で実行可能なコードを生成し、保護コードから呼び出し可能とする。通常コードに保護コードの起動や導入を制御するコードを組み込むように、保護コードに耐タンパ保護コードの起動や導入を制御するコードを組み込んでもよいし、保護コードと同様に耐タンパ保護コードに自己検証コードを組み込んでもよい。
【０１１９】
耐タンパ保護コード生成部１３３以外の機能については、第１の実施の形態と同様であるので、ここでは説明を省略する。
【０１２０】
第３の実施の形態に係るプログラム実行装置２００は、図１７に示すように、耐タンパ保護環境２４０を備える。上記のプログラム分割装置１００によって生成された耐タンパ保護コードが、この耐タンパ保護環境で実行される。第１の実施の形態の保護コードの導入や起動手順と同様に、署名やハッシュの検証により導入や起動の可否を決定してもよい。
【０１２１】
耐タンパ保護環境２４０を備えること以外は、第１の実施の形態と同様であるので、ここでは説明を省略する。
【０１２２】
第３の実施の形態に係るプログラム分割装置１００及びプログラム実行装置２００によると、保護環境、通常環境に加え、耐タンパ保護環境に分割するため、多様なデバイス環境や異なるセキュリティポリシーに対応して、プログラムをより安全に実行することができる。
【図面の簡単な説明】
【０１２３】
【図１】第１の実施の形態に係るプログラム分割装置の構成ブロック図である。
【図２】第１の実施の形態に係るプログラム分割装置が入力するソースコードの一例である。
【図３】第１の実施の形態に係るプログラム分割装置が入力するポリシーの一例である。
【図４】第１の実施の形態に係るプログラム分割装置が生成する通常コードの一例である。
【図５】第１の実施の形態に係るプログラム分割装置が生成する保護コードの一例である。
【図６】第１の実施の形態に係る保護コードが管理する変数管理テーブルの一例である。
【図７】第１の実施の形態に係る保護コードが保持する呼び出しの履歴の一例である。
【図８】第１の実施の形態に係るプログラム分割方法を示すフローチャートである。
【図９】図８のステップＳ１０４の詳細を示すフローチャートである。
【図１０】図８のステップＳ１０５の詳細を示すフローチャートである。
【図１１】第１の実施の形態に係るプログラム実行装置の構成ブロック図である。
【図１２】第１の実施の形態に係る保護コードの導入方法を示すフローチャートである。
【図１３】第１の実施の形態に係る保護コードの起動方法を示すフローチャートである。
【図１４】第１の実施の形態に係る保護コード内の関数を呼び出す方法を示すフローチャートである。
【図１５】第２の実施の形態に係るプログラム実行装置の構成ブロック図である。
【図１６】第３の実施形態に係わるプログラム分割装置の構成ブロック図である。
【図１７】第３の実施形態に係わるプログラム実行装置の構成ブロック図である。
【符号の説明】
【０１２４】
１００…プログラム分割装置
１１０…ソースコード解析部
１１１…ソースコード入力部
１１２…ポリシー入力部
１２０…制御部
１３０…保護コード生成部
１３１…自己検証コード埋め込み部
１３２…通信保護部
１３３…耐タンパ保護コード生成部
１４０…通常コード生成部
１４１…起動制御コード埋め込み部
１４２…導入制御コード埋め込み部
１４３…通信保護部
２００…プログラム実行装置
２１０…保護環境
２１２…保護コード管理部
２１３…保護起動部
２１４…保護導入部
２１５…署名検証部
２２０…通常環境
２２２…通常コード管理部
２３０…複数プログラム実行環境管理部
２３１…環境間監視制御部
２３２…環境間通信制御部
２４０…耐タンパ保護環境
【図１】
2006164184.tif 000003
【図２】
2006164184.tif 000004
【図３】
2006164184.tif 000005
【図４】
2006164184.tif 000006
【図５】
2006164184.tif 000007
【図６】
2006164184.tif 000008
【図７】
2006164184.tif 000009
【図８】
2006164184.tif 000010
【図９】
2006164184.tif 000011
【図１０】
2006164184.tif 000012
【図１１】
2006164184.tif 000013
【図１２】
2006164184.tif 000014
【図１３】
2006164184.tif 000015
【図１４】
2006164184.tif 000016
【図１５】
2006164184.tif 000017
【図１６】
2006164184.tif 000018
【図１７】
2006164184.tif 000019