説明

プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法

【課題】プログラムの解析や改ざん、権限の奪取による秘密データの漏洩や不正な動作を防止し、安全性を確保することができるプログラム分割装置を提供する。
【解決手段】プログラム分割装置100は、分割コードの生成における規則を与えるポリシーを入力して、与えられたソースコードの保護が必要な関数と変数に保護属性を付与するソースコード解析部110と、ソースコード解析部110による解析結果を利用して、保護属性を持つ関数を含む保護コードを生成する保護コード生成部130と、ソースコード解析部110による解析結果を利用して、保護属性を持たない関数と保護コードの関数を呼び出す関数を含む通常コードを生成する通常コード生成部140とを備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法に関する。
【背景技術】
【0002】
従来、計算機上で動作するプログラムを保護するために、様々な技術が開示されている。
【0003】
例えば、鍵やパスワード、電子価値等の重要データを扱うプログラムを、保護が必要な部分(保護コード)とそれ以外の通常コードにあらかじめ分割して用意し、各々を保護環境と通常環境という1つのPC上の独立した2つの計算機環境で連係動作させる技術がある(例えば、特許文献1参照。)。分割の例として、プログラムをライセンス検査やコンテンツの復号化に関わる不正操作から保護したい部分と、ユーザインタフェース処理に係わる部分に分け、それぞれ保護環境、通常環境で動作させることで、著作権付きコンテンツの視聴用プログラムの解析、改ざんを困難にする利用例が説明されている。導入前のプログラムは、保護環境上で動作する部分と通常環境上で動作する部分と、デジタル署名を持ち、通常環境上で動作する部分のプログラムが、保護環境と通常環境間の通信方法により、保護環境側へインストール命令を送信する。保護環境側では、デジタル署名を用いて正規のコードであることを確認したら、インストールを行う。
【0004】
このようにして、計算機上で動作するプログラムの保護したい部分の解析、改ざんを防止し、安全性を確保したプログラム実行環境が提供できる。
【特許文献1】特開2002−251326号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかしながら、上記従来技術における第一の課題として、通常コードが改ざんされたり、権限が奪取されたりした場合、通常コードが保護コード中の本来呼び出しが必要な関数1をバイパスして関数2を呼び出してしまうなどの不正な手順でプログラムが実行される可能性がある。
【0006】
又、第二の課題としてプログラムの分割基準と実行場所が固定的であるため、異なるデバイス種別や異なるセキュリティ要求に対して、コードの分割基準を変更したり、保護コードの実行場所を変更したりすることができない。このため、デバイス種別や実行環境ごとに利用可能なリソースが異なる場合、保護コードに入れられた関数が、ある保護環境で必要なリソースにアクセスできない場合がある。この場合、当該関数を通常コードに含めたり、別のデバイス上の保護環境で実行したりするなどの柔軟性が必要となる。
【0007】
更に、頻繁な通常コードから保護コードへの呼び出しは、処理・通信遅延や通常・保護計算機環境間の切り替え処理による負荷の増加を引き起こす。性能と安全性のバランスをとるため、プログラムを動作させる環境の安全性と、ユーザやプログラム提供者のセキュリティ要求に従って最適なコードの分割基準や起動・導入場所が決定されることが望ましい。起動・導入場所として、同一の装置上の耐タンパハードウェアの保護環境、ソフトウェアベースの保護環境、別の装置上の保護環境など、安全性や性能が異なる複数の保護環境が利用可能である。
【0008】
そこで、本発明は、上記の課題に鑑み、保護環境と通常環境という2つの計算機環境でプログラムを動作させ、適切なリソースにアクセスでき、処理負荷を増大させずに、プログラムの解析や改ざん、権限の奪取による秘密データの漏洩や不正な動作を防止し、安全性を確保することができるプログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
上記目的を達成するため、本発明の第1の特徴は、1つのプログラムを、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割するプログラム分割装置であって、(a)分割コードの生成における規則を与えるポリシーを入力して、与えられたソースコードの保護が必要な関数と変数に保護属性を付与するソースコード解析部と、(b)ソースコード解析部による解析結果を利用して、保護属性を持つ関数を含む保護コードを生成する保護コード生成部と、(c)ソースコード解析部による解析結果を利用して、保護属性を持たない関数と保護コードの関数を呼び出す関数を含む通常コードを生成する通常コード生成部とを備えるプログラム分割装置であることを要旨とする。
【0010】
第1の特徴に係るプログラム分割装置によると、プログラムのソースコードを解析し、与えられたポリシーに従って、プログラムを保護が必要な関数と変数を含む保護コードとそれ以外の通常コードに分割することができる。このため、プログラムの提供者が、自身のポリシーに従ってコード分割基準を与えてプログラムを分割することができ、適切なセキュリティと性能のバランスをとることができる。
【0011】
又、第1の特徴に係るプログラム分割装置のソースコード解析部は、ファイルシステムやネットワーク上のサーバ装置からプログラムのソースコードを入力するソースコード入力部と、ソースコードを入力した装置とは同一あるいは別の装置上のファイルシステムやネットワーク上のサーバ装置からポリシーを入力するポリシー入力部とを備えてもよい。
【0012】
このプログラム分割装置によると、ソースコードおよびポリシーをファイルシステムやネットワークから取得することができる。プログラム分割装置は遠隔のサーバ装置からソースコードやポリシーを取得して、分割コードを作成できると共に、ソースコードやポリシーを別々のサーバ装置から取得して組み合わせることができるため、任意のタイミングで動的に分割コードを生成できるだけでなく、サービス提供者やユーザなどの異なるセキュリティポリシーに対応した分割コードを生成することができる。
【0013】
又、第1の特徴に係るプログラム分割装置の保護コード生成部は、ポリシーを利用して、保護コードと通常コードの少なくともいずれか1つの動作の検証を行うコードを生成し、保護コードに埋め込む自己検証コード埋め込み部を備えてもよい。
【0014】
このプログラム分割装置によると、与えられたポリシーに従って、保護された環境で動作する保護コードに、保護コードと通常コードとを含むプログラム自身の動作の検証を行うコードを埋め込むことができる。このため、安全な環境からプログラム全体の動作を監査でき、ライセンスチェックのバイパスや許可されていない特権操作など(ライブラリ/システムコール等)のアプリの不正動作を検知、防止できる。
【0015】
又、第1の特徴に係るプログラム分割装置の通常コード生成部は、ポリシーを利用して、保護コードの起動を制御するコードを生成し、保護コードあるいは通常コードに埋め込む起動制御コード埋め込み部を備えてもよい。
【0016】
このプログラム分割装置によると、与えられたポリシーに従って保護コードの起動を制御するコードを生成し、保護コードか通常コードに埋め込むことができる。このため、ポリシーに従って保護コードの実行場所を決定することができ、適切なセキュリティと性能を達成することができる。
【0017】
又、第1の特徴に係るプログラム分割装置の通常コード生成部は、ポリシーを利用して、保護コードの導入を制御するコードを生成し、通常コードに埋め込む導入制御コード埋め込み部を備えてもよい。
【0018】
このプログラム分割装置によると、与えられたポリシーに従って、保護コードの導入を制御するコードを生成し、保護コードあるいは通常コードに埋め込むことができる。このため、ポリシーに従って保護コードの導入場所を決定することができ、適切なセキュリティと性能を達成することができる。
【0019】
又、第1の特徴に係るプログラム分割装置の保護コード生成部及び通常コード生成部は、認証と暗号化、改ざんの検査の少なくともいずれか一つの通信の保護機能を通信の関数に組み込む通信保護部を備えてもよい。
【0020】
このプログラム分割装置によると、保護コードや通常コードに認証や暗号化、署名などの通信保護機能を加えることができる。このため、保護コードと通常コード間の通信の盗聴や改ざんなどの攻撃を防御でき、プログラムを安全に実行することができる。
【0021】
本発明の第2の特徴は、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割されたプログラムの実行環境を提供するプログラム実行装置であって、(a)保護コードのための保護環境と通常コードのための通常環境との、2つの環境の隔離と制御を行う複数プログラム実行環境管理部と、(b)保護コードの導入及び起動を管理する保護コード管理部と、(c)通常コードの導入及び起動を管理する通常コード管理部と備えるプログラム実行装置であることを要旨とする。
【0022】
第2の特徴に係るプログラム実行装置によると、保護を要求するコードとそれ以外のコードに分割されたプログラムをそれぞれ保護環境と通常環境において、導入および起動させる手段と、相互で通信可能とする手段と、2つの環境の隔離手段を提供することができる。このため、保護を要求するコードとそれ以外のコードに分割されたプログラムのために安全な実行環境を提供することができる。
【0023】
又、第2の特徴に係るプログラム実行装置において、保護環境と通常環境はそれぞれ仮想マシンであり、複数プログラム実行環境管理部は、仮想マシンの隔離と制御を行う仮想マシンモニタであってもよい。
【0024】
このプログラム実行装置によると、仮想マシンモニタベースのデバイスにおいて、保護を要求するコードとそれ以外のコードに分割されたプログラムのために安全な実行環境を提供することができる。
【0025】
又、第2の特徴に係るプログラム実行装置の保護コード管理部は、保護コードのデジタル署名を検証する署名検証部と、署名検証部による署名の検証が成功した場合、保護コードを保護環境で実行可能に組み込む保護導入部と、保護コードの完全性の検証に成功した場合、保護コードを起動する保護起動部とを備えてもよい。
【0026】
このプログラム実行装置によると、保護を要求するコードの起動時に、その完全性を検証し、成功した際にのみ、起動することができる。又、保護環境においてはコードの署名を検証した後、導入を行うことができる。このため、信頼できないコードを導入したり、改ざんされたコードを実行したりする危険性を回避し、安全なプログラム保護環境実行を維持することができる。
【0027】
又、第2の特徴に係るプログラム実行装置の複数プログラム実行環境管理部は、保護コードと通常コードが安全に通信するための保護手段を提供する環境間通信制御部を備えてもよい。
【0028】
このプログラム実行装置によると、通信のなりすましや改ざん、盗聴を防ぎ、プログラム実行における秘密情報の流出や処理の不整合を防止することができる。
【0029】
又、第2の特徴に係るプログラム実行装置の複数プログラム実行環境管理部は、保護コードが、通常コードの動作あるいは状態を取得し、検証する環境間監視制御部を備えてもよい。
【0030】
このプログラム実行装置によると、安全な環境に存在する保護コードが保護コード、通常コードを含むプログラム全体の動作を監査でき、ライセンスチェックのバイパスや許可されていない特権操作(ライブラリ/システムコール等)の実行などのアプリの不正動作を検知、防止できる。
【0031】
本発明の第3の特徴は、1つのプログラムを、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割するプログラム分割方法であって、(a)分割コードの生成における規則を与えるポリシーを入力して、与えられたソースコードの保護が必要な関数と変数に保護属性を付与するステップと、(b)解析結果を利用して、保護属性を持つ関数を含む保護コードを生成するステップと、(c)解析結果を利用して、保護属性を持たない関数と保護コードの関数を呼び出す関数を含む通常コードを生成するステップとを含むプログラム分割方法であることを要旨とする。
【0032】
第3の特徴に係るプログラム分割方法によると、プログラムのソースコードを解析し、与えられたポリシーに従って、プログラムを保護が必要な関数と変数を含む保護コードとそれ以外の通常コードに分割することができる。このため、プログラムの提供者が、自身のポリシーに従ってコード分割基準を与えてプログラムを分割することができ、適切なセキュリティと性能のバランスをとることができる。
【0033】
本発明の第4の特徴は、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割されたプログラムの実行環境を提供するプログラム実行方法であって、(a)保護コードのための保護環境と通常コードのための通常環境との、2つの環境の隔離と制御を行うステップと、(b)保護コードの導入及び起動を管理するステップと、(c)通常コードの導入及び起動を管理するステップとを含むプログラム実行方法であることを要旨とする。
【0034】
第4の特徴に係るプログラム実行方法によると、保護を要求するコードとそれ以外のコードに分割されたプログラムのために安全な実行環境を提供することができる。
【発明の効果】
【0035】
本発明によると、保護環境と通常環境という2つの計算機環境でプログラムを動作させ、適切なリソースにアクセスでき、処理負荷を増大させずに、プログラムの解析や改ざん、権限の奪取による秘密データの漏洩や不正な動作を防止し、安全性を確保することができるプログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法を提供することができる。
【発明を実施するための最良の形態】
【0036】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には、同一又は類似の符号を付している。ただし、図面は模式的なものであることに留意すべきである。
【0037】
<第1の実施の形態>
(プログラム分割装置)
第1の実施の形態に係るプログラム分割装置は、1つのプログラムを、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割する。
【0038】
第1の実施の形態に係るプログラム分割装置は、図1に示すように、ソースコード解析部110と、保護コード生成部130と、通常コード生成部140と、これらを制御する制御部120とを備える。更に、ソースコード解析部110は、ソースコード入力部111とポリシー入力部112とを含み、保護コード生成部130は、自己検証コード埋め込み部131と通信保護部132とを含み、通常コード生成部140は、起動制御コード埋め込み部141と導入制御コード埋め込み部142と通信保護部143とを含む。
【0039】
{ソースコード解析部}
ソースコード解析部110は、分割コードの生成における規則を与えるポリシーを入力して、与えられたソースコードにおいて保護が必要な関数と変数に対して保護属性を付与する。ソースコードとポリシーの具体例を以下で述べた後、解析や保護属性の付与手順について説明する。
【0040】
ソースコード入力部111は、プログラムのソースコードをファイルシステムやネットワークから入力して、その後の解析やコード生成のための準備を行う。プログラムは、C言語やC++言語、Java言語など言語を問わないが、関数呼び出しや変数の利用をするものであるとする。又、プログラマは保護を必要とする部分に注釈(アノテーション)を付けてもよい。
【0041】
図2に具体例として、著作権付きの曲を扱う音楽再生用プログラムの元のソースコードの一部を示す。関数宣言やその本体、エラー処理などは説明の簡単化のため、省略している。このソースコードのOnPlayButton関数は、ユーザがある曲(IDがmusic_id)の再生を要求する際に呼び出され、MakeRecordName関数でその曲に対応するレコード名を作成し、SimReadRecord関数により、そのレコード名に対するライセンス情報をSIMと呼ばれる耐タンパモジュールから取得する。そして、DrmCheckValid関数でライセンス情報にアクセスし、その曲の再生期限が規定されている場合、有効な再生期間であるかを検査する。再生可能である場合、AddPlayCount関数により、課金のために再生回数をカウントしてSIM内の当該のレコードに書き込む。そして、DrmGetKey関数により、ライセンス情報から暗号化された曲ファイルの復号鍵を取得し、DecryptSong関数により、曲を復号化する。最後に、OutputMusic関数で復号されたデータを、サウンドドライバなどを通じてスピーカに出力する。
【0042】
ポリシー入力部112は、分割コードの生成に関わるポリシーをファイルシステムやネットワークから入力して、その後の解析やコード生成のための準備を行うものである。図3にポリシーの具体例を2つ示す。ここでは、ポリシーは分割基準を指定する<sensitive>,<insensitive>部分と、検証の規則を推定する<verification>部分と、起動・導入場所を指定する<launch>,<install>部分から構成されるものとしている。これら以外にも、コード生成においてターゲットとするデバイスの種別や利用するコンパイラなど、コード分割を制御するための命令や指示をポリシーに与えてもよい。又本具体例ではXMLによる記述を示したがその他の記述方式でもよい。
【0043】
ポリシー1(Policy1)では分割において保護環境に含める関数として、SimReadRecord関数に<sensitive>タグを付与している。そして検証の規則として、曲を復号する鍵を取得するDrmGetKey関数の前に、ライセンス検査のためのDrmCheckValid関数がターゲットの関数(DrmGetKey関数)と同一の引数で実行されていて、返り値がTRUEであること、再生回数のカウントのためのAddPlayCount関数が実行されていることが正常であると規定している。そして、<action>タグにより、この条件が満たされない場合、DrmGetKey関数の呼び出しを拒否(REJECT)することを規定している。ここではある関数の実行前に、特定の関数が実行されていることを検証規則として与えたが、他にも呼び出しの引数が想定した値の範囲にあること、単位時間あたりの呼び出しの回数が指定の閾値以下であることなどの検証規則が考えられる。更に、このポリシーでは、保護コード(<monitor>タグにより指定している)を、securevm.mydevice.mydomainという名前で表される同一デバイス上の保護環境に導入し、起動するものと指定している。
【0044】
一方、ポリシー2(Policy2)では、コード分割においてOutputMusic関数を通常環境に含めるように<insentive>タグを付与している。これは、保護環境でサウンドドライバが利用不可能である場合や、保護環境と通常環境が物理的に別のデバイスに分割されていて、通常環境のデバイスで音楽を出力したい場合を想定している。そして、保護コードを、myhandset.mydomainという名前で表される同一デバイス上の保護環境に導入し、起動するものと指定している。なお、検証規則はポリシー1と同様であるため、省略している。
【0045】
上述のソースコードとポリシーの具体例に基づき、ソースコード解析部が出力するソースコードの解析結果の具体例を図4に示す。ポリシーにおいてSimReadRecord関数のlicenseinfo引数とDrmGetKey関数の返り値は$sensitiveという修飾語が付与されている。この伝播を解析し、licenseinfoを引数とするDrmCheckValid関数、DrmAddPlayCount関数、DrmGetKey関数にも保護属性が付与され、sensitive_という接頭辞が付与される。更に、DrmGetKey関数の返り値である変数keyの伝播から、DecryptSong関数にも保護属性が付与される。このように、与えられたソースコードにおいて保護が必要な関数と変数に対して保護属性が付与される。
【0046】
{通常コード生成部}
通常コード生成部140は、ソースコード解析部110による解析結果を利用して、保護属性を持たない関数と保護コードの関数を呼び出す関数を含む通常コードを生成する。
【0047】
具体的には、通常コード生成部140は、ソースコード解析結果を利用して、保護属性が付与された関数の呼び出しを、保護コード内の対応する関数を呼び出すラッパ関数に置き換えると共に保護属性が付与された変数を保護コード内の対応する変数のインデックスとして置き換えた後、コンパイルやリンクによって通常コードを生成する。置き換えるラッパ関数や変数の名前は、sensitive_SimReadRecordやsensitive_licenseinfoのようにソースコード解析結果をそのまま利用してもよいし、別の名前としてもよい。ラッパ関数は内部で、保護コード内の対応する関数をRPC(Remote Procedure Call)や共有メモリを介して呼び出し、返り値を受け取り、ラッパ関数の呼び出し元に与えるものである。呼び出しの際に与える引数に保護属性が付与されている場合、保護コードにはその変数の実体へのインデックス値が与えられ、保護コードにおいてインデックス値から実体へと変換がなされる。返り値に保護属性が付与されている場合も、ラッパ関数が受け取る返り値はインデックス値となる。なお、ラッパ関数の実体はあらかじめ開発者などが用意しておいてもよいし、動的に生成してもよい。
【0048】
起動制御コード埋め込み部141は、ポリシーを利用して、保護コードの起動を制御するコードを生成し、通常コードに埋め込むものである。ポリシー1の場合、同一デバイス上の保護環境における保護コードを起動するコードが埋め込まれ、ポリシー2の場合、携帯電話上の保護コードを起動するコードが埋め込まれる。図4に示す具体例では、StartMonitor()がこの起動コードに対応する。
【0049】
導入制御コード埋め込み部142は、ポリシーを利用して、保護コードの導入を制御するコードを生成し、通常コードに埋め込むものである。ポリシー1の場合、同一デバイス上の保護環境に保護コードを導入するコードが埋め込まれ、ポリシー2の場合、携帯電話内の保護環境に保護コードを導入するコードが埋め込まれる。図4に示す具体例では、InstallMonitor()の呼び出しがこの導入コードに対応する。
【0050】
通信保護部143は、認証と暗号化、改ざんの検査の少なくともいずれか一つの通信の保護機能を、上記のラッパ関数による保護コードの対応する関数の呼び出しと、返り値の受け取りに関する通信機構に組み込むものである。例えば、保護コードと通常コードの間であらかじめ秘密鍵を共有しておき、チャレンジレスポンスプロトコルを利用して認証を行い、交換したセッション鍵を使ってデータを暗号化する。更に、MAC(Message Authentication Code)の利用により、通信途中の改ざんを検査する。
【0051】
{保護コード生成部}
保護コード生成部130は、ソースコード解析部110による解析結果を利用して、保護属性を持つ関数を含む保護コードを生成する。
【0052】
具体的には、保護コード生成部130は、ソースコード解析結果を利用して、保護属性が付けられた関数を内部で呼び出すラッパ関数と、通常コードからの呼び出しを受け付け、処理する通信部と、保護が必要な変数を管理する変数管理部とを含み、保護コードを生成する。図5に、ポリシー1を適用した際の、保護コードの具体例を示す。通信部には例えば、通常コードからの呼び出しを受け付ける部分(main()内のReceiveRpc行)や、通常コードが与える引数のインデックスから実体を復元する部分(RestoreArg行)、呼び出しと引数、返り値の履歴を保存する部分(CallLog行)、ラッパ関数へ呼び出しを振り分ける部分(Dispatch行)が含まれる。ラッパ関数は、保護属性が付与されたSimReadRecord,DrmCheckValid,DrmAddPlayCount,DrmGetKey,DecryptSongの各関数に対応して、monitor_SimReadRecord,monitor_DrmCheckValid関数などが用意される。ラップ関数は内部で、インデックスから復元された引数を利用して、SimReadRecord,DrmCheckValidなどの実体の関数を呼び出し、返り値を呼び出し元の通常コードへ返す。ただし、返り値に保護属性が付与されている場合、その返り値は変数管理部によってインデックス値と共に保持され、通常コードへはそのインデックスが返される。図6に、変数管理部が保持するテーブルの具体例を示す。保護が必要な変数としてlicenseinfo、保護が必要な返り値としてkeyが、モニタの変数管理部によって保持されており、インデックス101,102によってアクセスされる。
【0053】
自己検証コード埋め込み部131は、ポリシーを利用して、プログラムの動作の検証を行うコードを生成し、保護コードに埋め込む。図5の具体例では、main()内のCheckPolicy関数呼び出しにおいてポリシーを検査している。ポリシー1の場合、曲を復号する鍵を取得するDrmGetKey関数が呼ばれた際、DrmCheckValid関数がDrmGetKey関数と同一の引数で実行されていて、返り値がTRUEであること、再生回数のカウントのためのAddPlayCount関数が実行されていることを検査し、この条件が満たされない場合、DrmCheckValid関数の呼び出しをブロックする。これらポリシーの検査は、例えば図7に示すように、保護コードにおいて呼び出しと引数、返り値の履歴をテーブル形式で保存しておき、このテーブルを検索することで実現できる。
【0054】
通信保護部132は、通常コードと同様に、認証と暗号化、改ざんの検査の少なくともいずれか一つの通信の保護機能を、保護コードに組み込む。通常コードからの呼び出しを受け付け、処理する通信部やラッパ関数が通常コードに返り値を返す部分にこれらの保護機能を追加する。
【0055】
又、プログラム分割装置100は、処理制御装置(CPU)を有し、上述したソースコード解析部110、保護コード生成部130、通常コード生成部140などをモジュールとして、CPUによって実行させる構成とすることができる。これらのモジュールは、パーソナルコンピュータ等の汎用コンピュータにおいて、所定のプログラム言語を利用するための専用プログラムを実行することにより実現することができる。
【0056】
又、図示していないが、プログラム分割装置100は、ソースコード解析処理、保護コード生成処理、通常コード生成処理などをCPUに実行させるためのプログラムを蓄積するプログラム保持部を備えてもよい。プログラム保持部は、例えば、RAM、ROM、ハードディスク、フレキシブルディスク、コンパクトディスク、ICチップ、カセットテープなどの記録媒体である。このような記録媒体によれば、プログラムの蓄積、運搬、販売などを容易に行うことができる。
【0057】
(プログラム分割方法)
次に、第1の実施の形態に係るプログラム分割方法について、図8を用いて、説明する。本方法は、ユーザからの入力や外部装置からの入力をトリガとして、起動される。
【0058】
まず、ステップS101において、ソースコードが入力され、ステップS102においてポリシーが入力される。次に、ステップS103において、ソースコード解析部110は、ソースコードを解析し、ポリシーで与えられた保護属性を関連する関数、変数へと伝播させる。
【0059】
次に、ステップS104及びステップS105において、ステップS103における解析結果のソースコードを利用して、通常コードと保護コードを生成する。ステップS104及びステップS105については、後に詳述する。
【0060】
次に、ステップS106において、通常コードと保護コードをパッケージ化した後、ステップS107において、デジタル署名と証明書をパッケージに付与する。その際、リバースエンジニアリングの防止やデータ量の削減のため、暗号化や圧縮を行ってもよい。
【0061】
図8のステップS104に示す通常コードの生成方法について、図9を用いて説明する。
【0062】
まず、ステップS201において、解析結果のソースコード中の保護属性が付けられた関数・変数をそれぞれラッパ関数とインデックス変数に置き換える。
【0063】
次に、ステップS202及びステップS203において、ポリシーで指定された保護コードの起動場所、導入場所に従って起動コード、導入コードをそのソースコードに埋め込む。
【0064】
そして、ステップS204において、そのソースコードをコンパイルし、ステップS205において、保護コードの関数を呼び出すための通信ライブラリなどをリンクして、実行可能(executable)な通常コードを生成する。
【0065】
又、図示していないが、通常コードにデジタル署名や証明書を付与してもよいし、リバースエンジニアリングの防止やデータ量の削減のため、暗号化や圧縮を行ってもよい。
【0066】
次に、図8のステップS105に示す保護コードの生成方法について、図10を用いて説明する。
【0067】
まず、ステップS301において、解析結果のソースコードから、保護属性が付けられた関数・変数を抜き出す。そして、通常コードからの呼び出しを処理する通信部と、保護が必要な変数を管理する変数管理部のコードと、保護属性の関数それぞれに対応するラッパ関数を生成する。ラッパ関数は内部で実体の関数を呼び出すと共に、返り値に保護属性が付与されている場合はインデックス変数を返すように作成される。
【0068】
次に、ステップS302において、自己検証コード埋め込み部131は、ポリシーを利用して、プログラムの動作の検証を行うコードを生成し、保護コードに埋め込む。
【0069】
次に、ステップS303において、ソースコードをコンパイルし、ステップS304において、通信ライブラリなどをリンクし、実行可能(executable)な保護コードを生成する。
【0070】
次に、ステップS306において、デジタル署名と証明書を保護コードに付与する。その際、リバースエンジニアリングの防止やデータ量の削減のため、暗号化や圧縮を行ってもよい(ステップS305)。
【0071】
(プログラム実行装置)
第1の実施の形態に係るプログラム実行装置は、保護を要求するコード(保護コード)とそれ以外の通常コードに分割されたプログラムのための実行環境を提供する。
【0072】
第1の実施の形態に係るプログラム実行装置は、図11に示すように、複数プログラム実行環境管理部230と、保護コード管理部212と、通常コード管理部222とを備える。更に、複数プログラム実行環境管理部230は、環境間通信制御部232と、環境間監視制御部231とを含み、保護コード管理部212は、署名検証部215と、保護起動部213と、保護導入部214とを含む。
【0073】
{複数プログラム実行環境管理部}
複数プログラム実行環境管理部230は、保護コードの実行のための保護環境210と通常コードの実行のための通常環境220の、2つ以上の実行環境の隔離と制御を行う。実行環境の実現手段に制限はなく、複数プログラム実行環境管理部230の実現にあたり、仮想マシンモニタの技術を用いて仮想マシンレベルの複数の実行環境を管理してもよいし、オペレーティングシステムによってプロセスレベルの複数の実行環境を管理してもよい。更に、分散システム用のミドルウェアを利用して複数のデバイス上の複数の実行環境を管理させてもよい。第1の実施の形態では、保護環境210と通常環境220はそれぞれ仮想マシンであり、複数プログラム実行環境管理部230は、仮想マシンの隔離と制御を行う仮想マシンモニタであるものとして説明する。
【0074】
環境間通信制御部232は、保護コードと通常コードが安全に通信する手段を提供する。例えば、環境間通信制御部232が鍵の割り当てを管理し、保護コードと通常コードからの要求に従って共有鍵を与えることで、チャレンジレスポンスプロトコルによる認証や、交換したセッション鍵によるデータの暗号化、MAC(Message Authentication Code)の利用による通信途中の改ざんを検査する。
【0075】
環境間監視制御部231は、保護を要求するコードが、通常コードの動作あるいは状態を取得し、検証する。例えば、通常コードのシステムコールやマシン語レベルの実行系列や、実行コードのテキストセグメント、データセグメント、ヒープやスタックなどのメモリの状態を取得可能とする。
【0076】
{保護コード管理部}
保護コード管理部212は、保護を要求するコードの導入や起動を管理する。
【0077】
署名検証部215は、保護コードに付与されたデジタル署名や証明書の検証を行う。デジタル署名のアルゴリズムは、RSA,El Gamal,DSA,Rabin方式などいずれでもよい。又、証明書もX.509証明書フォーマットなど形式を問わない。
【0078】
保護導入部214は、署名および証明書の検証が成功した場合にのみ保護コードを保護環境で実行可能なように組み込む。導入の際、保護コードが暗号化、圧縮されている場合は復号化や解凍を行い、保護環境内のファイルシステムに必要なファイルをコピーしたり、環境変数や設定ファイル等の設定を行ったりする。又、保護コードのハッシュ値をSHA1などのハッシュ関数を利用して計算し、正常なハッシュ値として保護コード管理部に保存する。検証が失敗した場合、保護コードの導入の要求元に検証の失敗を示す応答を返してもよいし、応答を返さずに処理を中断してもよい。
【0079】
保護起動部213は、保護コードの完全性を検証し、検証が成功した際、起動する。完全性は、保護コードの実行可能ファイルのハッシュ値を計算し、保護コード管理部が保持する正常なハッシュ値と一致するかを比較することで検証できる。検証が失敗した場合、保護コードの起動の要求元に検証の失敗を示す応答を返してもよいし、応答を返さずに処理を中断してもよい。
【0080】
{通常コード管理部}
通常コード管理部222は、保護を要求しない通常コードの導入や起動を管理する。導入手順においては、通常環境内のファイルシステムに必要なファイルをコピーしたり、環境変数や設定ファイル等の設定を行ったりする。このとき、保護コード管理部のように署名を検証して導入の可否を決定してもよいし、通常コードの正常なハッシュ値を計算し、保持してもよい。又、起動手順においてはユーザや外部装置からの入力にしたがって、通常コードの実行可能ファイルを起動する。このとき、保護コード管理部のように完全性を検証した後、起動処理を行ってもよい。
【0081】
又、プログラム実行装置200は、処理制御装置(CPU)を有し、上述した複数プログラム実行環境管理部230、保護コード管理部212、通常コード管理部222などをモジュールとして、CPUによって実行させる構成とすることができる。これらのモジュールは、パーソナルコンピュータ等の汎用コンピュータにおいて、所定のプログラム言語を利用するための専用プログラムを実行することにより実現することができる。
【0082】
又、図示していないが、プログラム実行装置200は、複数プログラム実行環境管理処理、保護コード管理処理、通常コード管理処理などをCPUに実行させるためのプログラムを蓄積するプログラム保持部を備えてもよい。プログラム保持部は、例えば、RAM、ROM、ハードディスク、フレキシブルディスク、コンパクトディスク、ICチップ、カセットテープなどの記録媒体である。このような記録媒体によれば、プログラムの蓄積、運搬、販売などを容易に行うことができる。
【0083】
(プログラム実行方法)
次に、第1の実施の形態に係るプログラム実行方法について、図12〜14を用いて説明する。
【0084】
{保護コードの導入手順}
図12を用いて、保護コードの導入方法について説明する。
【0085】
まず、ユーザは保護コードと通常コードが同梱されているパッケージを、ネットワーク上のサーバ装置からのダウンロードや、CD−ROMなどのストレージメディアを通して、デバイスの通常環境上に取得する。そして、パッケージから通常コードを取り出し、通常環境に導入する。通常コードの導入は、通常コード管理部や通常コード自身、あるいは外部のインストーラプログラムによって行われ、ファイルを特定の場所にコピーしたり、環境変数や設定ファイルの設定が行われたりする。通常コードの導入の完了後、通常コード管理部や通常コード自身が、保護コード管理部に保護コードの導入要求を発行する。ここから、図10の保護コードの導入手順が開始される。
【0086】
まず、ステップS401において、保護コード管理部212は、通常コードやユーザからの保護コードの導入要求を受け付ける。そして、ステップS402において、保護コードのファイルの署名と証明書を検証する。保護コードのファイルは、ファイルシステムや通信を通じて与えられる。例えば、通常コードが保護コード管理部を呼び出して通信チャネルを確立し、保護コードのバイナリデータを転送してもよいし、通常コードが通常環境内の保護コードのファイルをOSや仮想マシンモニタが提供するファイルコピーの手段によって、保護環境にコピーしてもよい。
【0087】
ステップS403において、署名および証明書の検証が成功した場合は、ステップS404に進み、保護コード導入の際、保護コードが暗号化、圧縮されている場合は復号化や解凍を行う。又、ステップS405において、保護環境内のファイルシステムに必要なファイルをコピーしたり、環境変数や設定ファイル等の設定を行ったりする。又、ステップS406において、保護コードのハッシュ値をSHA1などのハッシュ関数を利用して計算し、正常なハッシュ値として保護コード管理部に保存する。
【0088】
一方、ステップS403において、検証が失敗した場合は、ステップS407に進み、保護コードの導入の要求元に検証の失敗を示す応答を返す。
【0089】
{保護コードの起動手順}
図13を用いて、保護コードの起動方法について説明する。本手順は、通常コードやユーザからの保護コードの起動要求をトリガに実行が開始される。
【0090】
まず、ステップS501において、保護コード管理部212は、通常コードやユーザからの保護コードの起動要求を受け付ける。そして、ステップS502において、保護コードのハッシュ値を計算し、保護コード管理部が保持する正常なハッシュ値と比較、検証する。
【0091】
ステップS503において、検証が成功した場合、ステップS504に進み、保護コードを起動する。
【0092】
一方、ステップS503において、検証が失敗した場合、ステップS505に進み、保護コードの起動の要求元に検証の失敗を示す応答を返す。
【0093】
{通常コードから保護コードの関数呼び出し手順}
図14を用いて、通常コードから保護コード内の保護が必要とされる関数を呼び出す方法について説明する。
【0094】
まず、ステップS601において、通常コード内で保護コードに含まれる関数がラップ関数を通じて呼び出される。すると、ステップS602において、通常コードからの呼び出しを保護コードが受け付け、ステップS603において、認証や改ざんの検査を行い、その呼び出しが正当なものであるかを検査する。
【0095】
ステップS603において、正当でないと判断した場合、ステップS612に進み、通常コードに呼び出しの拒否を応答する。
【0096】
一方、ステップS603において、正当だと判断した場合、ステップS604に進み、呼び出しの引数において保護された変数を指すインデックス変数が与えられていた場合、実体の引数を変数管理テーブルから引き出す。
【0097】
次に、ステップS605において、保護コードに埋め込まれた自己検証コードが、通常コードからの呼び出しがポリシーに沿っているかを検査する。ここで、図3で示した自己検証ポリシーと図7に示す通常コードxと通常コードyからの呼び出しの履歴例を利用して、自己検証ポリシー検査の具体例を説明する。図3で示した自己検証ポリシーに従い、保護コードはDrmGetKey関数の呼び出しの際に、DrmCheckValid関数がDrmGetKey関数と同一の引数で実行されていて、返り値がTRUEであること、再生回数のカウントのためのAddPlayCount関数が実行されていることを検査する。通常コードxからの場合、この検証規則を満たしているため、自己検証ポリシーの検査は成功する(ステップS606→ステップS607)。しかしながら、通常コードyの呼び出しではDrmGetKey関数の前にDrmCheckValid関数もAddPlayCount関数も実行されていない。そのため、検証規則を満たしておらず、保護コードはDrmGetKey関数の呼び出しを拒否する(ステップS606→ステップS612)。
【0098】
次に、ステップS607において、保護コードは呼び出しの関数名と引数、返り値、呼び出しを受け付けたタイムスタンプを履歴として保持する。この履歴は自己検証ポリシーの検証において利用される。
【0099】
そして、ステップS608において、復元された引数のもと、保護コード内のラッパ関数が呼び出される。ステップS609において、ラッパ関数内では、SimReadRecord,DrmCheckValidなどの実体の関数を呼び出し、ステップS610において、返り値を作成する。そして、ステップS610において、返り値を通常コードへ返す。ただし、返り値に保護属性が付与されている場合、返り値を変数管理テーブルにインデックス付きで保持し、そのインデックスを通常コードへ返す。
【0100】
(作用及び効果)
第1の実施の形態に係るプログラム分割装置100は、与えられたポリシーに従って、プログラムを保護が必要な関数と変数を含む保護コードとそれ以外の通常コードに分割することができる。このため、プログラムの提供者が、自身のポリシーに従ってコード分割基準を与えてプログラムを分割することができ、適切なセキュリティと性能のバランスをとることができる。
【0101】
又、第1の実施の形態に係るプログラム分割装置100のソースコード解析部110は、ソースコード入力部111と、ポリシー入力部112とを備えるため、ソースコードおよびポリシーをファイルシステムやネットワークから取得することができる。プログラム分割装置は遠隔のサーバ装置からソースコードやポリシーを取得して、分割コードを作成できると共に、ソースコードやポリシーを別々のサーバ装置から取得して組み合わせることができるため、任意のタイミングで動的に分割コードを生成できるだけでなく、サービス提供者やユーザなどの異なるセキュリティポリシーに対応した分割コードを生成することができる。
【0102】
又、第1の実施の形態に係るプログラム分割装置100の保護コード生成部130は、自己検証コード埋め込み部131を備えるため、与えられたポリシーに従って、保護された環境で動作する保護コードに、保護コードと通常コードとを含むプログラム自身の動作の検証を行うコードを埋め込むことができる。このため、安全な環境からプログラム全体の動作を監査でき、ライセンスチェックのバイパスや許可されていない特権操作など(ライブラリ/システムコール等)のアプリの不正動作を検知、防止できる。
【0103】
又、第1の実施の形態に係るプログラム分割装置の通常コード生成部140は、起動制御コード埋め込み部141を備えるため、与えられたポリシーに従って保護コードの起動を制御するコードを生成し、保護コードか通常コードに埋め込むことができる。このため、ポリシーに従って保護コードの実行場所を決定することができ、適切なセキュリティと性能を達成することができる。
【0104】
又、第1の実施の形態に係るプログラム分割装置100の通常コード生成部140は、導入制御コード埋め込み部142を備えるため、与えられたポリシーに従って、保護コードの導入を制御するコードを生成し、保護コードあるいは通常コードに埋め込むことができる。このため、ポリシーに従って保護コードの導入場所を決定することができ、適切なセキュリティと性能を達成することができる。
【0105】
又、第1の実施の形態に係るプログラム分割装置100の保護コード生成部130及び通常コード生成部140は、それぞれ通信保護部132、143を備えるため、保護コードや通常コードに認証や暗号化、署名などの通信保護機能を加えることができる。このため、保護コードと通常コード間の通信の盗聴や改ざんなどの攻撃を防御でき、プログラムを安全に実行することができる。
【0106】
第1の実施の形態に係るプログラム実行装置は、保護を要求するコードとそれ以外のコードに分割されたプログラムをそれぞれ保護環境と通常環境において、導入および起動させる手段と、相互で通信可能とする手段と、2つの環境の遠隔手段を提供することができる。このため、保護を要求するコードとそれ以外のコードに分割されたプログラムのために安全な実行環境を提供することができる。
【0107】
又、第1の実施の形態に係るプログラム実行装置200において、保護環境と通常環境はそれぞれ仮想マシンであり、複数プログラム実行環境管理部230は、仮想マシンの隔離と制御を行う仮想マシンモニタである。このため、仮想マシンモニタベースのデバイスにおいて、保護を要求するコードとそれ以外のコードに分割されたプログラムのために安全な実行環境を提供することができる。
【0108】
又、第1の実施の形態に係るプログラム実行装置200の保護コード管理部212は、保護コードのデジタル署名を検証する署名検証部215と、署名検証部による署名の検証が成功した場合、保護コードを保護環境で実行可能に組み込む保護導入部214と、保護コードの完全性の検証に成功した場合、保護コードを起動する保護起動部213とを備えるため、保護を要求するコードの起動時に、その完全性を検証し、成功した際にのみ、起動することができる。又、保護環境においてはコードの署名を検証した後、導入を行うことができる。このため、信頼できないコードを導入したり、改ざんされたコードを実行したりする危険性を回避し、安全なプログラム保護環境実行を維持することができる。
【0109】
又、第1の実施の形態に係る実行装置200の複数プログラム実行環境管理部230は、保護コードと通常コードが安全に通信するための保護手段を提供する環境間通信制御部232を備えるため、通信のなりすましや改ざん、盗聴を防ぎ、プログラム実行における秘密情報の流出や処理の不整合を防止することができる。
【0110】
又、第1の実施の形態に係るプログラム実行装置200の複数プログラム実行環境管理部230は、保護コードが、通常コードの動作あるいは状態を取得し、検証する環境間監視制御部231を備えるため、安全な環境に存在する保護コードが保護コード、通常コードを含むプログラム全体の動作を監査でき、ライセンスチェックのバイパスや許可されていない特権操作など(ライブラリ/システムコール等)のアプリの不正動作を検知、防止できる。
【0111】
このように、第1の実施の形態に係るプログラム分割装置及びプログラム実行装置によると、安全な環境内の保護コード自身がプログラム動作を監査でき、権限の奪取や改ざんによるプログラムの不正動作(ライセンス検査のバイパスや不許可のライブラリ呼び出し等)を検知、防止できる。又、プログラム提供者やユーザが、コード分割基準や保護コードの実行場所(セキュア仮想マシンや携帯機、耐タンパチップ等)を指定でき、多様なデバイス環境や異なるセキュリティポリシーに対応して、プログラムを安全に実行できる。
【0112】
<第2の実施の形態>
第1の実施の形態では、同一デバイス上の保護環境と通常環境の間で分割したプログラムを動作させていたが、第2の実施の形態では、別々のデバイス上に存在する保護環境と通常環境の間で保護コードと通常コードを連携実行させる。ここでは、ユーザの携帯機上の保護環境と、ラップトップPCや情報家電などの周辺デバイス上の通常環境の間で、分割したプログラムを動作させるものとする。
【0113】
第2の実施の形態に係るプログラム実行装置は、図15に示すように、保護環境210と通常環境220が物理的に別のデバイス上に配置されると共に、複数プログラム実行環境管理部230a、230bは双方のデバイス上に配置され、協調して実行環境の隔離と制御を行う。
【0114】
この異なるデバイス上に存在する保護環境と通常環境にプログラムを分割して実行するため、プログラム分割装置に、図3で示したポリシー2を渡して、通常コードと保護コードを生成させる。このポリシーにより、周辺デバイス上で動作する通常コードと、携帯機上で動作する保護コードが生成されると共に、通常コードには、携帯機に保護コードを導入する導入コードと携帯機上の保護コードを起動する起動コードが埋め込まれる。第1の実施の形態と同様に、図12の手順に従って保護コードが導入されるが、第1の実施の形態と異なるのは通常コードから保護コード管理部への要求が周辺デバイスと携帯機の間の通信路を通っていく点である。
【0115】
第2の実施の形態に係るプログラム実行装置200によると、別々のデバイス上に保護環境と通常環境が存在しても、保護環境と通常環境の間で保護コードと通常コードを連携実行させることができる。
【0116】
<第3の実施の形態>
第3の実施の形態として、プログラム実行装置に、外部からの盗聴や改ざんなどの攻撃に対して内部の秘密データや重要な処理を保護するための耐タンパハードウェアが組み込まれている場合を説明する。耐タンパハードウェアは、例えばSIM(Subscriber Information Module)のようなスマートカード(ICカード)やTrusted Computing Group(www.trustedcomputing)が仕様を規定しているTPM(Trusted Platform Module)を利用して実装することができる。
【0117】
第1の実施の形態との違いは、耐タンパ保護環境が付け加えられたため、プログラム分割装置100において、保護コードと通常コードと、耐タンパ保護コードの3つに分割する点と、プログラム実行装置において保護環境と通常環境、耐タンパ保護環境に分割して実行する点が異なる。
【0118】
第3の実施の形態に係るプログラム分割装置は、図16に示すように、保護コード生成部130に耐タンパ保護コード生成部133が追加されている。耐タンパ保護コード生成部133は、耐タンパ保護環境で実行可能なコードを生成し、保護コードから呼び出し可能とする。通常コードに保護コードの起動や導入を制御するコードを組み込むように、保護コードに耐タンパ保護コードの起動や導入を制御するコードを組み込んでもよいし、保護コードと同様に耐タンパ保護コードに自己検証コードを組み込んでもよい。
【0119】
耐タンパ保護コード生成部133以外の機能については、第1の実施の形態と同様であるので、ここでは説明を省略する。
【0120】
第3の実施の形態に係るプログラム実行装置200は、図17に示すように、耐タンパ保護環境240を備える。上記のプログラム分割装置100によって生成された耐タンパ保護コードが、この耐タンパ保護環境で実行される。第1の実施の形態の保護コードの導入や起動手順と同様に、署名やハッシュの検証により導入や起動の可否を決定してもよい。
【0121】
耐タンパ保護環境240を備えること以外は、第1の実施の形態と同様であるので、ここでは説明を省略する。
【0122】
第3の実施の形態に係るプログラム分割装置100及びプログラム実行装置200によると、保護環境、通常環境に加え、耐タンパ保護環境に分割するため、多様なデバイス環境や異なるセキュリティポリシーに対応して、プログラムをより安全に実行することができる。
【図面の簡単な説明】
【0123】
【図1】第1の実施の形態に係るプログラム分割装置の構成ブロック図である。
【図2】第1の実施の形態に係るプログラム分割装置が入力するソースコードの一例である。
【図3】第1の実施の形態に係るプログラム分割装置が入力するポリシーの一例である。
【図4】第1の実施の形態に係るプログラム分割装置が生成する通常コードの一例である。
【図5】第1の実施の形態に係るプログラム分割装置が生成する保護コードの一例である。
【図6】第1の実施の形態に係る保護コードが管理する変数管理テーブルの一例である。
【図7】第1の実施の形態に係る保護コードが保持する呼び出しの履歴の一例である。
【図8】第1の実施の形態に係るプログラム分割方法を示すフローチャートである。
【図9】図8のステップS104の詳細を示すフローチャートである。
【図10】図8のステップS105の詳細を示すフローチャートである。
【図11】第1の実施の形態に係るプログラム実行装置の構成ブロック図である。
【図12】第1の実施の形態に係る保護コードの導入方法を示すフローチャートである。
【図13】第1の実施の形態に係る保護コードの起動方法を示すフローチャートである。
【図14】第1の実施の形態に係る保護コード内の関数を呼び出す方法を示すフローチャートである。
【図15】第2の実施の形態に係るプログラム実行装置の構成ブロック図である。
【図16】第3の実施形態に係わるプログラム分割装置の構成ブロック図である。
【図17】第3の実施形態に係わるプログラム実行装置の構成ブロック図である。
【符号の説明】
【0124】
100…プログラム分割装置
110…ソースコード解析部
111…ソースコード入力部
112…ポリシー入力部
120…制御部
130…保護コード生成部
131…自己検証コード埋め込み部
132…通信保護部
133…耐タンパ保護コード生成部
140…通常コード生成部
141…起動制御コード埋め込み部
142…導入制御コード埋め込み部
143…通信保護部
200…プログラム実行装置
210…保護環境
212…保護コード管理部
213…保護起動部
214…保護導入部
215…署名検証部
220…通常環境
222…通常コード管理部
230…複数プログラム実行環境管理部
231…環境間監視制御部
232…環境間通信制御部
240…耐タンパ保護環境

【特許請求の範囲】
【請求項1】
1つのプログラムを、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割するプログラム分割装置であって、
分割コードの生成における規則を与えるポリシーを入力して、与えられたソースコードの保護が必要な関数と変数に保護属性を付与するソースコード解析部と、
前記ソースコード解析部による解析結果を利用して、保護属性を持つ関数を含む前記保護コードを生成する保護コード生成部と、
前記ソースコード解析部による解析結果を利用して、保護属性を持たない関数と前記保護コードの関数を呼び出す関数を含む前記通常コードを生成する通常コード生成部と
を備えることを特徴とするプログラム分割装置。
【請求項2】
前記ソースコード解析部は、
ファイナルシステムやネットワーク上のサーバ装置からプログラムのソースコードを入力するソースコード入力部と、
ソースコードを入力した装置とは同一あるいは別の装置上のファイルシステムやネットワーク上のサーバ装置からポリシーを入力するポリシー入力部と
を備えることを特徴とする請求項1に記載のプログラム分割装置。
【請求項3】
前記保護コード生成部は、前記ポリシーを利用して、前記保護コードと前記通常コードの少なくともいずれか1つの動作の検証を行うコードを生成し、前記保護コードに埋め込む自己検証コード埋め込み部を備えることを特徴とする請求項1又は2に記載のプログラム分割装置。
【請求項4】
前記通常コード生成部は、前記ポリシーを利用して、前記保護コードの起動を制御するコードを生成し、前記保護コードあるいは前記通常コードに埋め込む起動制御コード埋め込み部を備えることを特徴とする請求項1〜3のいずれか1項に記載のプログラム分割装置。
【請求項5】
前記通常コード生成部は、前記ポリシーを利用して、前記保護コードの導入を制御するコードを生成し、前記通常コードに埋め込む導入制御コード埋め込み部を備えることを特徴とする請求項1〜4のいずれか1項に記載のプログラム分割装置。
【請求項6】
前記保護コード生成部及び前記通常コード生成部は、認証と暗号化、改ざんの検査の少なくともいずれか一つの通信の保護機能を通信の関数に組み込む通信保護部を備えることを特徴とする請求項1〜5のいずれか1項に記載のプログラム分割装置。
【請求項7】
保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割されたプログラムの実行環境を提供するプログラム実行装置であって、
前記保護コードのための保護環境と前記通常コードのための通常環境との、2つの環境の隔離と制御を行う複数プログラム実行環境管理部と、
前記保護コードの導入及び起動を管理する保護コード管理部と、
前記通常コードの導入及び起動を管理する通常コード管理部と
備えることを特徴とするプログラム実行装置。
【請求項8】
保護環境と通常環境はそれぞれ仮想マシンであり、
前記複数プログラム実行環境管理部は、仮想マシンの隔離と制御を行う仮想マシンモニタであることを特徴とする請求項7に記載のプログラム実行装置。
【請求項9】
前記保護コード管理部は、
前記保護コードのデジタル署名を検証する署名検証部と、
前記署名検証部による署名の検証が成功した場合、前記保護コードを保護環境で実行可能に組み込む保護導入部と、
前記保護コードの完全性の検証に成功した場合、前記保護コードを起動する保護起動部と
を備えることを特徴とする請求項7又は8に記載のプログラム実行装置。
【請求項10】
前記複数プログラム実行環境管理部は、前記保護コードと前記通常コードが安全に通信するための保護手段を提供する環境間通信制御部を備えることを特徴とする請求項7〜9のいずれか1項に記載のプログラム実行装置。
【請求項11】
複数プログラム実行環境管理部は、前記保護コードが、前記通常コードの動作あるいは状態を取得し、検証する環境間監視制御部を備えることを特徴とする請求項7〜10のいずれか1項に記載のプログラム実行装置。
【請求項12】
1つのプログラムを、保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割するプログラム分割方法であって、
分割コードの生成における規則を与えるポリシーを入力して、与えられたソースコードの保護が必要な関数と変数に保護属性を付与するステップと、
前記解析結果を利用して、保護属性を持つ関数を含む前記保護コードを生成するステップと、
前記解析結果を利用して、保護属性を持たない関数と前記保護コードの関数を呼び出す関数を含む前記通常コードを生成するステップと
を含むことを特徴とするプログラム分割方法。
【請求項13】
保護された実行環境での実行を要求する保護コードと、それ以外の通常コードに分割されたプログラムの実行環境を提供するプログラム実行方法であって、
前記保護コードのための保護環境と前記通常コードのための通常環境との、2つの環境の隔離と制御を行うステップと、
前記保護コードの導入及び起動を管理するステップと、
前記通常コードの導入及び起動を管理するステップと
を含むことを特徴とするプログラム実行方法。



【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate


【公開番号】特開2006−164184(P2006−164184A)
【公開日】平成18年6月22日(2006.6.22)
【国際特許分類】
【出願番号】特願2004−358724(P2004−358724)
【出願日】平成16年12月10日(2004.12.10)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
【出願人】(392026693)株式会社エヌ・ティ・ティ・ドコモ (5,876)
【Fターム(参考)】