(57)【要約】【課題】  ＯＳのプロセス状態において、処理だけでなく整合性をチェックしている状態や保護しなければならないデータを扱っている状態などの状態を追加・管理することで、プロセスの信頼性の状態によって、処理を変化させて、不正なプロセスや改竄されたプロセスの実行を防ぎ、信頼性を向上させる。【解決手段】  プロセス状態判定部７は、プロセスの状態が少なくとも整合性が保たれている状態であるか否かを判定する。処理実行部８は、プロセス状態判定部７による判定結果に基づいて処理を実行する。信頼性判定部９は、プロセス状態判定部７によって判定されたプロセス状態に応じて、主記憶装置４上に読み込まれたプログラムやデータの信頼性を判定する。【選択図】  図２
2005202523.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティングシステムによってプログラムの実行をプロセス単位で管理し実行しているコンピュータ装置において、
プロセスの状態が少なくとも整合性が保たれている状態であるか否かを判定するプロセス状態判定手段と、
上記プロセス状態判定手段による判定結果に基づいて処理を実行する処理実行手段と
を備えることを特徴とするコンピュータ装置。
【請求項２】
上記プロセス状態判定手段は、プロセスの状態が整合性が保たれている状態か、或いは整合性が保障されていない通常状態であるかを判定することを特徴とする請求項１記載のコンピュータ装置。
【請求項３】
上記プロセス状態判定手段は、プロセスの状態が整合性が保たれ、かつ保護を必要とする重要データを扱っている状態か、或いは整合性が保障されていない通常状態であるかを判定することを特徴とする請求項１記載のコンピュータ装置。
【請求項４】
上記プロセス状態判定手段は、プロセスの状態が整合性のみ保たれている状態か、或いは整合性が保たれ、かつ保護を必要とする重要データを扱っている状態であるかを判定することを特徴とする請求項１記載のコンピュータ装置。
【請求項５】
上記プロセス状態判定手段は、プロセスの状態が整合性のみ保たれている状態か、整合性が保たれ、かつ保護を必要とする重要データを扱っている状態か、或いは整合性が保障されていない通常状態であるかを判定することを特徴とする請求項１記載のコンピュータ装置。
【請求項６】
上記処理実行手段は、主記憶装置上に読み込まれたプログラムやデータに対して、上記プロセス状態判定手段による判定結果に基づいて処理を実行することを特徴とする請求項１記載のコンピュータ装置。
【請求項７】
上記処理実行手段は、主記憶装置上に読み込まれたプログラムやデータに対して、上記プロセス状態判定手段による判定結果に基づいて復号処理を実行することを特徴とする請求項６記載のコンピュータ装置。
【請求項８】
上記プロセス状態判定手段によって判定されたプロセス状態に応じて、主記憶装置上に読み込まれたプログラムやデータの信頼性を判定する信頼性判定手段をさらに備え、上記処理実行手段は上記信頼性判定手段による判定結果に基づいて処理を実行することを特徴とする請求項１記載のコンピュータ装置。
【請求項９】
プログラムの実行をプロセス単位で管理し実行しているプロセス制御方法において、
プロセスの状態が少なくとも整合性が保たれている状態であるか否かを判定するプロセス状態判定工程と、
上記プロセス状態判定工程による判定結果に基づいて処理を実行する処理実行工程と
を備えることを特徴とするプロセス制御方法。
【請求項１０】
上記プロセス状態判定工程は、プロセスの状態が整合性が保たれている状態か、或いは整合性が保障されていない通常状態であるかを判定することを特徴とする請求項９記載のプロセス制御方法。
【請求項１１】
上記プロセス状態判定工程は、プロセスの状態が整合性が保たれ、かつ保護を必要とする重要データを扱っている状態か、或いは整合性が保障されていない通常状態であるかを判定することを特徴とする請求項９記載のプロセス制御方法。
【請求項１２】
上記プロセス状態判定工程は、プロセスの状態が整合性のみ保たれている状態か、或いは整合性が保たれ、かつ保護を必要とする重要データを扱っている状態であるかを判定することを特徴とする請求項９記載のプロセス制御方法。
【請求項１３】
上記プロセス状態判定工程は、プロセスの状態が整合性のみ保たれている状態か、整合性が保たれ、かつ保護を必要とする重要データを扱っている状態か、或いは整合性が保障されていない通常状態であるかを判定することを特徴とする請求項９記載のプロセス制御方法。
【請求項１４】
上記処理実行工程は、主記憶装置上に読み込まれたプログラムやデータに対して、上記プロセス状態判定工程による判定結果に基づいて処理を実行することを特徴とする請求項９記載のプロセス制御方法。
【請求項１５】
上記処理実行工程は、主記憶装置上に読み込まれたプログラムやデータに対して、上記プロセス状態判定工程による判定結果に基づいて復号処理を実行することを特徴とする請求項１４記載のプロセス制御方法。
【請求項１６】
上記プロセス状態判定工程によって判定されたプロセス状態に応じて、主記憶装置上に読み込まれたプログラムやデータの信頼性を判定する信頼性判定工程をさらに備え、上記処理実行工程は上記信頼性判定工程による判定結果に基づいて処理を実行することを特徴とする請求項９記載のプロセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータ装置及びプロセス制御方法に関し、例えばリナックス等のオペレーティングシステムがプログラムの実行をプロセスによって管理し実行しているコンピュータ装置及びプロセス制御方法に関する。
【背景技術】
【０００２】
例えば、リナックスLinux、フリービーエスディーFreeBSDに代表されるパーソナルコンピュータ用ユニックスPC-Unix（登録商標）等の基本ソフトウェア（オペレーティングシステム：Operating system：ＯＳ）は、コンピュータ装置にあってプログラムの実行をプロセスによって管理し実行している。また、携帯情報処理装置（ＰＤＡ）、或いはデジタルカメラ装置、デジタルビデオ装置等のＣＰＵ搭載の電子機器においても、ＯＳは同様にプログラムの実行をプロセスによって管理し実行している。
【０００３】
従来、上記ＯＳは、プロセスの状態管理を実行状態、実行可能状態、一時休止状態などの処理に関してのみ行っていた。また、実行ファイルやライブラリの整合性のチェックは、トリップワイヤTripwireのような定期的に整合性を行うツールや実行直前に実行ファイル全体の整合性のチェック行うものがある。また、ファイルの暗号化は、ファイル単位で行われる。
【０００４】
また、本願出願人は、ＷＯ００／３４８７１により、オペレーティングシステムにおいて不正なアドレス領域へのアクセスが生じたときのメモリ保護を、実行処理速度を低下することなく行うための技術を開示している。
【０００５】
【特許文献１】ＷＯ００／３４８７１
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、従来のＯＳは、プロセスの処理に関しての状態管理を、上述したように実行状態、実行可能状態、一時休止状態などの処理に関してのみ行っており、プロセスの整合性が保たれているかどうか、或いは第３者による解析を防ぐために暗号化された重要な実行ファイルを復号した重要なデータを保持しているかどうかなどの状態に関してはまったく把握できなかった。
【０００７】
したがって、重要なデータにアクセスするプロセスが改竄されたプロセスであっても、ＯＳは通常のプロセスと見分けがつかないためデータへのアクセスを許してしまうことになる。実行するプロセスが改竄されたプロセスであっても、処理さえ正しければ実行できてしまうことになる。
【０００８】
プロセスは、実行ファイルと様々なライブラリによって成り立っている。したがって、リンクしているライブラリがすべて署名などによってチェックされていて、ライブラリの整合性が保たれていても、実行ファイルに署名がなく整合性が保たれていることが保障されていなければ、プロセスが改竄されていない正しいプロセスであるとは保障できない。また、一つの実行ファイルの整合性がとれていても、他のライブラリの整合性が保たれていなかったら、プロセス全体としては、整合性が保たれていないことになる。また、実行ファイルだけに署名が付いているかどうかをチェックし整合性を確認するツールを用いることが考えられるが、全体として１個のプロセスとして動くので、実行ファイル、ライブラリのそれぞれが一つでも整合性が保たれていないとプロセスとしての整合性を保障することができない。
【０００９】
しかしながら、すべての実行ファイルやライブラリに署名するのもオーバーヘッドや管理の点から実用的でなく、必要なファイルだけに署名を付加するべきである。
【００１０】
このように、処理のみのプロセス制御・管理の形態だと、どのプロセスがどのような信頼性で実行されているかを把握できず、ＯＳ側で重要なデータなどへのアクセス制御ができない。
【００１１】
また、実行ファイルやライブラリの整合性のチェックにおいて、１週間とか、１ヶ月というように定期的に整合性をチェックする場合は、チェック終了直後ならば整合性を保障できるが、次にチェックされるまでの整合性は、次の整合性チェックが終了するまで、整合性が保たれていたかどうかは確認ができない。
【００１２】
実行直前に整合性をチェックする場合は、サイズが大きな実行ファイルやライブラリをチェックするときに、そのファイルをすべてメモリ上に読み込むため、メモリを大量に消費し、起動が遅くなる。したがって、よく使われるライブラリは比較的サイズが大きく、起動時ごとにファイル全体をチェックするのは実用的ではない。また起動時にチェックするだけなので、実行中のチェックは行われない。したがって、プロセスが実行中に改ざんされた場合の整合性は保たれない。
【００１３】
実行ファイル、データファイルに無関係にファイル単位で行われているファイルの暗号化において、実行前に暗号化された実行ファイルを復号化して実行を行う必要があるが、暗号化もファイル単位であるため、いったんファイル全体をメモリ上に読み込んでから復号化しなければならない。したがって、上記整合性のチェックと同様にサイズの大きいファイルの場合は、メモリを大量に消費し、起動が遅くなってしまう。
【００１４】
また、上記特許文献１は、不正なアドレス領域へのアクセスが生じたときについてメモリを保護する技術を開示しており、本願発明で目的とするプロセスの処理状態を管理したり、実行ファイルで実行しようとするプログラムのファイルの整合性をチェックしたり、暗号化データを復号するようなデータを保護するためのプロセス制御については示唆されていない。
【００１５】
本発明は、上記実情に鑑みてなされたものであり、ＯＳのプロセス状態において、処理だけでなく整合性をチェックしている状態や保護しなければならないデータを扱っている状態などの状態を追加・管理することで、プロセスの信頼性の状態によって、処理を変化させて、不正なプロセスや改竄されたプロセスの実行を防ぎ、信頼性を向上させることができるコンピュータ装置及びプロセス制御方法の提供を目的とする。
【課題を解決するための手段】
【００１６】
本発明に係るコンピュータ装置は、上記課題を解決するために、オペレーティングシステムによってプログラムの実行をプロセス単位で管理し実行しているコンピュータ装置において、プロセスの状態が少なくとも整合性が保たれている状態（整合性が保障されている状態）であるか否かを判定するプロセス状態判定手段と、上記プロセス状態判定手段による判定結果に基づいて処理を実行する処理実行手段とを備える。
【００１７】
プロセス状態判定手段はプロセスの状態が少なくとも整合性が保障されている状態であるか否かを判定し、処理実行手段はプロセス状態判定手段による判定結果に基づいて処理を実行する。
【００１８】
本発明に係るプロセス制御方法は、上記課題を解決するために、プログラムの実行をプロセス単位で管理し実行しているプロセス制御方法において、プロセスの状態が少なくとも整合性が保たれている状態（保障されている状態）であるか否かを判定するプロセス状態判定工程と、上記プロセス状態判定工程による判定結果に基づいて処理を実行する処理実行工程とを備える。
【００１９】
プロセス状態判定工程はプロセスの状態が少なくとも整合性が保障されている状態であるか否かを判定し、処理実行工程はプロセス状態判定工程による判定結果に基づいて処理を実行する。
【発明の効果】
【００２０】
本発明に係るコンピュータ装置は、プロセス状態判定手段がプロセスの状態が少なくとも整合性が保たれている状態（保障されている状態）であるか否かを判定し、処理実行手段がプロセス状態判定手段による判定結果に基づいて処理を実行するので、プロセスの状態管理を行うことにより、ＯＳ側で正しいプロセスかどうかなどを判断できるようになり、重要なデータへのアクセス制御や不正なプログラムや改ざんされたプログラムの実行を防ぐことができ、信頼性を向上させることができる。
【００２１】
また、データの整合性のチェックや復号化を処理単位で行うことにより、プログラムの起動時間がファイル全体をチェックする場合に比べ起動時間が短くなり、メモリも節約ができる。また、処理の直前に整合性をチェックするので安全性が従来のより高くなる。さらに、必要最小限の部分のみ復号化を行える。
本発明に係るプロセス制御方法は、プロセス状態判定工程がプロセスの状態が少なくとも整合性が保たれている状態（保障されている状態）であるか否かを判定し、処理実行工程がプロセス状態判定工程による判定結果に基づいて処理を実行するので、プロセスの状態管理を行うことにより、ＯＳ側で正しいプロセスかどうかなどを判断できるようになり、重要なデータへのアクセス制御や不正なプログラムや改ざんされたプログラムの実行を防ぐことができ、信頼性を向上させることができる。
【００２２】
また、データの整合性のチェックや復号化を処理単位で行うことにより、プログラムの起動時間がファイル全体をチェックする場合に比べ起動時間が短くなり、メモリも節約ができる。また、処理の直前に整合性をチェックするので安全性が従来のより高くなる。さらに、必要最小限の部分のみ復号化を行える。
【発明を実施するための最良の形態】
【００２３】
以下、本発明を実施するための最良の形態を説明する。この実施の形態は、図１にハードウェア構成を示すコンピュータ装置１である。このコンピュータ装置１は、中央演算処理装置（Central Processing Unit：ＣＰＵ）２を中心に構成され、バス３を介して主記憶装置４、外部記憶装置５及び入出力装置６をＣＰＵ２に接続している。ＣＰＵ２は、リナックスLinuxを基本ソフトウェア（オペレーティングシステム：Operating system：ＯＳ）として動作させる。ＣＰＵ２は、上記ＯＳに必要なデータを例えばＨＤＤのような外部記憶装置５からＲＡＭなどの主記憶装置４に読み込み、プログラムを実行する。
【００２４】
外部記憶装置５は、ＣＰＵ２が実行すべきＯＳのプログラムを格納している。主記憶装置４には、ＣＰＵ２が外部記憶装置５から取り出したプログラムが読み込まれる。ＣＰＵ２は、主記憶装置４に読み込まれたプログラムをプロセス単位で管理し実行する。
【００２５】
入出力装置６の入力装置としては、入力機器インターフェースに接続されたキーボードやマウスがある。キーボードやマウスからの入力信号は、入力機器インターフェースからバス３を介してＣＰＵ２に転送される。また、入出力装置６の出力装置としては、ディスプレイコントローラに接続された表示装置がある。ディスプレイコントローラは、ＣＰＵ２から送られてくる描画命令にしたがって表示画像を生成し、表示装置に送る。表示装置は、ディスプレイコントローラから送られた表示画像情報に従い、その画像を画面に表示する。
【００２６】
このコンピュータ装置１は、本発明のプロセス制御方法を適用したＯＳをＣＰＵ２により実行することにより、図２に示すように機能する。つまり、このコンピュータ装置１は、プロセスの状態が少なくとも整合性が保たれている状態であるか否かを判定するプロセス状態判定部７と、プロセス状態判定部７による判定結果に基づいて処理を実行する処理実行部８とを備える。また、このコンピュータ装置１は、プロセス状態判定部７によって判定されたプロセス状態に応じて、主記憶装置４上に読み込まれたプログラムやデータの信頼性を判定する信頼性判定部９を備える。
【００２７】
プロセス状態判定部７は、プロセスの状態が整合性のみ保たれている状態か、整合性が保たれ、かつ保護を必要とする重要データを扱っている状態か、或いは整合性が保障されていない通常状態であるかという三つの状態を判定する。もちろん、プロセスの状態が整合性が保たれている状態か、或いは整合性が保障されていない通常状態であるかという二つの状態を判定するだけのこともある。また、プロセスの状態が整合性のみ保たれている状態か、或いは整合性が保たれ、かつ保護を必要とする重要データを扱っている状態であるかという二つの状態を判定するだけのこともある。
【００２８】
処理実行部８は、主記憶装置上に読み込まれたプログラムやデータに対して、プロセス状態判定部７による判定結果に基づいて、後述するエグゼックExec( )処理、ダイナミック・リンクDynamic_link( )処理、デクリプトDecrypt( )処理、トラステッド・トウ・ノーマルTrusted_To_Normal( )処理、クリティカル・トウ・トラステッドCritical_To_Trusted( )処理、トラステッド・トウ・クリティカルTrusted_To_Critical( )処理、ページ・フォルトPage_Fault( )処理、イグジットExit( )処理等を施す。
【００２９】
信頼性判定部９は、プロセス状態判定部７によって判定されたプロセス状態に応じて、主記憶装置４上に読み込まれたプログラムやデータの信頼性を判定する。この判定結果は、処理実行部８に送られる。処理実行部８は信頼性判定部９による判定結果に基づいて処理を実行する。信頼性判定部９は、後述するダイナミックリンク、デマンドページングなどのように実行中に後から動的に主記憶装置４に読み込まれるプログラムやデータの整合性をチェックする。もちろん、主記憶装置４に読み込まれるプロセスの実行ファイルやライブラリの整合性をチェックしてもいる。
【００３０】
コンピュータ装置１は、本発明のプロセス制御方法を適用したＯＳをＣＰＵ２にて実行することにより、機能的にプロセス状態判定部７で上記状態の判定を行い、プロセス状態判定部７の判定結果に基づいて機能的に処理実行部８で処理を実行することによって、改竄されたプロセスや不正なプロセスの実行を防ぎ、信頼性を向上させることができる。
【００３１】
また、処理実行部８において処理を実行するときには、ファイルのすべてが主記憶装置４のようなメモリ上に読み込まれているわけではなく、処理に必要になった部分のみをメモリ上に読み込む。読み込む単位は、あるサイズの固定長である。したがって、読み込む単位ごとに信頼性判定部９にて整合性をチェックすることにより、起動時にファイルすべてをチェックしないで、プロセスの処理の整合性を保つことができ、なおかつ処理中にファイルが改ざんされても処理中に検知することができる。
【００３２】
また、従来、実行ファイル、データファイルに無関係にファイル単位で行われているファイルの暗号化において、実行前に暗号化された実行ファイルを復号化して実行を行う必要があったが、処理実行部８は、整合性のチェックと同様に主記憶装置４上に単位ごとに読み込まれた暗号化データに、復号化を行うことで、必要な部分のみの復号化が行える。
【００３３】
以下、コンピュータ装置１の動作について詳細に説明するが、先ず、リナックスLinuxにおける通常のプログラムの実行について述べておく。
【００３４】
リナックスLinuxにおけるプログラムの実行は、プロセス単位で図３に示す処理手順にしたがって動作する。図３中のＳ１〜Ｓ５は、対応するステップを示す記号である。また分岐に関しては、ステップＳ１の処理でＹＥＳならば、（Ｓ１:YES）と表現する。
【００３５】
リナックスLinuxには、フォーク（fork）システムコールがあり、これを呼び出すことによって現在のプロセスを複製する。また、エグゼック（exec）システムコールと呼ばれるものがあり、現在のプロセスの資源を解放して、プログラムの実行開始に必要な資源を獲得してプログラムの実行を行う。プログラムの実行開始の流れは、forkシステムコールでプロセスを複製して、その後、複製したプロセスでexecシステムコールを発行して、プログラムの実行に必要な資源を獲得してプログラムの実行に移る。起動時に関しては、プロセスがないので別の方法でイニット（init）プロセスと呼ばれるプロセスが生成される。
【００３６】
プログラムの実行開始にあたっては、まずexecシステムコールが呼ばれる(ステップＳ１）。そして現在のプロセスのアドレス空間などの資源を解放する(ステップＳ２)。次に実行する実行ファイルをアドレス空間に割り当てる(ステップＳ３)。プログラム実行開始前に、実行に必要な共有ライブラリがあるならば(ステップＳ４:ＹＥＳ)、共有ライブラリをアドレス空間に割り当て(ステップＳ５)、プログラムを実行する。共有ライブラリの割り当ての処理は動的に行われるので、開始時だけでなくプログラム実行中にも必要になった時点で処理される。もしも、必要な共有ライブラリがないとき(ステップＳ４：ＮＯ)は、そのままプログラムの実行に移る。
【００３７】
プログラムの実行は、基本的に命令の読み込み、命令の実行の繰り返しである。以下、図４に示す処理手順にしたがって動作を説明する。まず命令の読み込みを行う(ステップＳ１１)。そして、命令が主記憶上に存在するか否かをチェックし(ステップＳ１２)、存在しなければ(ステップＳ１２：ＮＯ)、ページフォルト例外が発生して、ページフォルト例外ハンドラに処理が移る(ステップＳ１３)。
【００３８】
ページフォルトについて説明しておく。ステップＳ１２にてＮＯであり、アクセス先が主記憶装置４上に存在しない場合は、ページフォルト例外を発生し、ページフォルト例外ハンドラを呼び出して、外部記憶装置から主記憶装置上にページ単位でデータをロードする。このように必要になったページをロードする処理をデマンドページングと呼ぶ。主記憶装置上にロードされるサイズは、ページと呼ばれる固定長のデータ単位でロードされる。例えば、リナックスの多くの場合は、４ｋbyte（４０９６ｂｙｔｅ）単位である。ページフォルトにより主記憶装置上に必要なデータが読み込まれ、命令の読み込みが終わると、命令の実行を行う(ステップＳ１４）。
【００３９】
ステップＳ１５では、命令がexitシステムコールであるか否かをチェックし、もしも、命令がexitシステムコールならば(ステップＳ１５：ＹＥＳ)、プロセスを終了するためにexitシステムコールを呼び出す。exitシステムコールでなければ(ステップＳ１５：ＮＯ）、命令を実行するが命令によっては、データなどにアクセスするため、アドレス空間にアクセスする場合がある(ステップＳ１６)。もしアクセスする場合(ステップＳ１６：ＹＥＳ)、アクセス先が主記憶装置上にあれば(ステップＳ１７：ＹＥＳ)、命令を実行する。もしアクセス先が主記憶装置上になければ、ページフォルト例外が発生して(ステップＳ１８)、必要なデータが主記憶装置上に読み込まれる。命令の実行が終わると次の命令の読み込みに戻る(ステップＳ１１)。以上、リナックスにおける通常のプログラムの実行について述べた。
【００４０】
これに対して、実施の形態のコンピュータ装置１では、プロセスに、通常の状態(整合性が保障されていない状態)、整合性が保たれている状態（整合性が保障されている状態）、整合性が保たれていて、なおかつ保護を必要とする重要データを扱っている状態、という３つの状態を加えた。保護を必要とする重要データとは、暗号化されている実行ファイルを復号化している場合などの外部に漏れてはいけない重要データをいう。
【００４１】
図２のプロセス状態判定部７にて各状態を判定し、その判定結果に応じてプロセス処理実行部８が、プロセス状態を変更して処理を実行する。ここで、判定されるプロセス状態には、整合性が保障されていない通常状態を示すノーマルnormal、整合性が保たれている状態を示すトラステッドtrusted、整合性が保たれかつ保護を必要とする復号データのような重要なデータを扱う状態を示すクリティカルcriticalという３つの状態を追加した。
【００４２】
まとめると、以下のようになる。ノーマルnormalは、通常の状態を表す。リナックスで実行される普通のプロセスと同じ状態である。
【００４３】
トラステッドtrustedとクリティカルcritical状態のプロセスには、リナックスLinuxのケイパビリティcapabilityの機構を利用して、特別な操作の特権を与える。ケイパビリティcapabilityの機構は、プロセスに対して特定の特権付きの操作を実行する権限を与える機構のことを言う。つまり、ここでは、トラステッドtrusted、クリティカルcritical状態のプロセスに与える特権をトラステッド・ケイパビリティtrusted capabilityと呼ぶ。以下、フローチャートにおいてトラステッドtrusted、クリティカルcriticalのプロセス状態のみ通れるルートの処理に関しては、すべてトラステッド・ケイパビリティtrusted capabilityの特権が必要であるとする。もし、特権がない場合に処理しようとすると、特権がないことを表すエラーを返して終了するものとする。
【００４４】
トラステッドtrustedは、トラステッド・ケイパビリティtrusted capabilityの特権が与えられている状態である。また実行ファイルとライブラリの署名やハッシュがチェックされていて、整合性が保たれている状態を表す。
【００４５】
クリティカルcriticalは、トラステッドtrusted状態と同様に実行ファイルとライブラリの署名やハッシュがチェックされていて、整合性が保たれている状態に加え、暗号化された実行ファイルを復号化して実行している状態を表す。もちろん、トラステッド・ケイパビリティtrusted capabilityの特権が与えられている状態でもある。
【００４６】
次に、信頼性判定部９にて行われる整合性(Integrity)のチェック、および処理実行部８にて行われる暗号化データの復号化について説明する。
【００４７】
信頼性判定部９は、データの整合性をダイジェスト(digest)によりチェックする。ダイジェストは、ハッシュ値である。ダイジェストの整合性は、署名(signature)でチェックする。
【００４８】
ダイジェストによりチェックする単位を図５のようにページ(page)単位として、ページフォルト例外が発生して、ページが主記憶装置（メモリ）上に読み込まれたときにそのページに対して整合性のチェックを行う。ページフォルトは、上述したように、命令が主記憶上に存在するか否かのチェックの結果、存在しないときに移行する、ページフォルト例外によって発生し、ページフォルト例外ハンドラによって処理される。
【００４９】
また、図６のように一部のページに対してのみ、ダイジェストにより整合性をチェックするようにしてもよい。ダイジェストの整合性は、署名(signature)によりチェックされる。また、ダイジェストにより整合性をチェックしたうえで、暗号化（Encrypted)する単位を図７のようにページ(page)単位として、ページフォルト例外が発生して、ページがメモリ上に読み込まれたときにそのページに対して、整合性のチェックと、処理実行部８による復号化ができるようにする。また、図８のように一部のページに対してのみ、暗号化やダイジェストにより整合性をチェックするなど、自由に組み合わせることができる。
【００５０】
次に、図２の機能ブロック図に戻り、各機能ブロックによる総合的な動作の連携を図９の状態遷移図に基づいて説明する。処理実行部８では、以下の処理を行う。エグゼックExec( )は、エグゼックexecシステムコールに署名チェックなどの処理を追加した処理である。ダイナミック・リンクDynamic_link( )は、共有ライブラリをリンクするときの処理に署名チェックの処理などを追加した処理である。デクリプトDecrypt( )は、暗号化されたページを復号化する処理である。トラステッド・トウ・ノーマルTrusted_To_Normal( )は、プロセス状態をトラステッドtrustedからノーマルnormalにする処理である。クリティカル・トウ・トラステッドCritical_To_Trusted( )は、プロセス状態をクリティカルcriticalからトラステッドtrustedにする処理である。トラステッド・トウ・クリティカルTrusted_To_Critical( )は、プロセス状態をトラステッドtrustedからクリティカルcriticalにする処理である。ページ・フォルトPage_Fault( )は、ページフォルト時の処理に、ページのハッシュ値の比較の処理などを追加した処理である。イグジットExit( )は、イグジットexitシステムコールを呼ぶ前に処理を追加している。
【００５１】
また、図９の状態遷移図において、normal、trusted、criticalは、それぞれノーマルnormal、トランステッドtrusted、クリティカルcriticalのプロセス状態を表している。initはイニットinitプロセス、exitは、プロセスの終了を表している。Exec( )、Dynamic_link( )などは、上述したように遷移を行う処理について表している。プロセス・エラーProcess ErrorとチェックエラーCheck Errorについては、それぞれプロセス状態によって引き起こされるエラーと署名などのチェックが間違っていたときのエラーを表す。また、Ｍ１〜Ｍ１１は、状態遷移を表している。
【００５２】
図９の状態遷移図において、プロセス状態がノーマルnormalからは、トラステッドtrustedとイグジットexitのみに遷移できる。ノーマルnormalからexec( )の呼び出しでtrustedに遷移する(Ｍ１)。Dynamic_Link( )の呼び出しでは、プロセス状態は変わらない(Ｍ２)。Exit( )の呼び出しで、exitに遷移する(Ｍ４)。プロセス状態のエラーが発生した場合も、exitに遷移する。この場合のエラーは、Critical_To_Trustedなどのように、normal状態では呼び出せない処理を行おうとしたときなどのエラーである。
【００５３】
また、上記状態遷移図において、プロセス状態がtrustedからの状態遷移は、normal、critical、exitである。normal状態への遷移は、Trusted_To_Normal( )が呼び出されて遷移する場合と署名の検査でエラー（Check Error）が出た場合も整合性が保たれた状態ではなくなるので、normalに遷移する(Ｍ３)。trusted状態でExec( )かDynamic_link( )が呼び出された場合は遷移しない(Ｍ５)。trustedからcriticalへの遷移は、Decrypt( )かTrusted_to_Critical( )が呼び出されたときに遷移する(Ｍ８)。
【００５４】
また、上記状態遷移図において、プロセス状態がcriticalからの遷移は、trustedかexitである。trustedへの遷移は、Critical_to_Trusted( )を呼び出されたときである(Ｍ９)。exec( )、Dynamic_link( )もしくはDecrypt( )を呼んだときには、遷移しない(Ｍ１０)。Exit( )が呼び出されるとexitに遷移する(Ｍ１１)。また、criticalの状態は重要なデータなどを保持した場合であり、何かのエラーの発生や整合性が保たれない場合は、すぐに終了しなければならないので、Process ErrorもしくはCheck Errorなどのエラーが発生した場合もexitに遷移する。
【００５５】
上述した処理が呼び出されたときの状態遷移について詳細に説明する。先ず、エグゼックExec( )について説明する。これは、上記図３に示したプログラムの実行を開始する処理に署名チェックなどの処理を加えたものである。以下、図１０のフローチャートにより動作を説明する。
【００５６】
始めに、forkシステムコールなどでプロセスを複製するが、そのときプロセスの状態も複製元のプロセス状態を引き継ぐものとする。したがって、プロセス状態がcriticalのものからは、criticalのプロセスが複製される。initプロセスについては、trusted状態からプロセスが生成されるものとする。
【００５７】
ステップＳ２１では、execシステムコールが呼ばれ、現在のプロセスのアドレス空間を開放する。実行ファイルをアドレス空間に割り当てる前に、ステップＳ２２にてプロセス状態判定部７は現在のプロセス状態を確認する。プロセス状態がnormalならば(ステップＳ２２:normal)、ステップＳ２３にてプロセス状態をtrustedに設定し、ステップＳ２３にてプロセスにtrusted capabilityの特権を与える。プロセス状態の確認後、信頼性判定部９は実行ファイルの署名をチェックする(ステップＳ２５)。署名をチェックした結果をステップＳ２６で判定し、署名が正しければ(ステップＳ２６:OK)、ステップＳ２７に移行する。ステップＳ２７では、信頼性判定部９は、実行ファイルのダイジェストを主記憶装置４上に記憶する。ステップＳ２６の判定にて、信頼性判定部９が、もし署名が正しくない、つまりチェックエラーCheck errorと判定すれば(ステップＳ２６:NG)、ステップＳ２８に移行し、Trusted_To_Normal( )を呼び出す。署名がないファイルも署名が正しくないと判定される。
【００５８】
署名のチェック終了後、ステップＳ２９にて処理実行部８は実行ファイルをアドレス空間に割り当てる。ステップＳ３０にて共有ライブラリが必要であるか否かを判定し、必要である（ステップＳ３０:YES)となれば、ステップＳ３１にてDynamic_Link( )を呼び出して共有ライブラリをアドレス空間に割り当てる。そして、処理実行部８は、プログラムを実行する。ステップＳ３０にて共有ライブラリが必要ないと判定すれば(ステップＳ３０:NO)、そのままプログラムを実行する。
【００５９】
次に、ダイナミック・リンクDynamic_link( )について説明する。これは、共有ライブラリをアドレス空間に割り当てる場合にも共有ライブラリの署名などをチェックする必要があるので、署名チェックの処理を追加したものである。以下、図１１のフローチャートにより動作を説明する。
【００６０】
ステップＳ４１にて、プロセス状態判定部７は現在のプロセス状態を確認する。もし、プロセス状態がnormalであると判定すれば(ステップＳ４１:normal)、ステップＳ４６に移行して処理実行部８は共有ライブラリをアドレス空間に割り当てる。ステップＳ４１にてプロセス状態判定部７はプロセス状態がnormal以外であると判定すれば(ステップＳ４６:other)、ステップＳ４２に移行して信頼性判定部９はロードする共有ライブラリの署名をチェックする。信頼性判定部９はステップＳ４３にて署名のチェック結果を判定し、署名が正しくなくチェックエラーであると判定すれば(ステップＳ４３:NG)、処理実行部８はステップＳ４５にてTrusted_To_Normal( )を呼び出してノーマルに移行してから、ステップＳ４６にて共有ライブラリをプロセスのアドレス空間に割り当てる。署名がない場合も署名が正しくないと判定される。信頼性判定部９がステップＳ４３にて署名が正しいと判定すれば(ステップＳ４３:OK)、ステップＳ４４に移行して処理実行部８は共有ライブラリのダイジェストを主記憶装置４上に記憶する。そして、ステップＳ４６にて共有ライブラリをプロセスのアドレス空間に割り当てる。
【００６１】
次に、デクリプトDecrypt( )処理について説明する。これは、暗号化されているページを復号化する処理を追加したものである。以下、図１２のフローチャートにより動作を説明する。
【００６２】
プロセス状態判定部７はステップＳ５１にて現在のプロセス状態を確認する。もしcriticalならば(ステップＳ５１:critical)、ステップＳ５４に移行して処理実行部８にページを復号化させリターンする。プロセス状態判定部７がステップＳ５１にてプロセス状態がtrustedと判定すれば(ステップＳ５１:trusted)、ステップＳ５２に移行して処理実行部８はプロセス状態をcriticalに設定してから、ステップＳ５４にてページを復号化しリターンする。プロセス状態判定部７がステップＳ５１にてプロセス状態がnormalと判定すれば(ステップＳ５１:normal)、ステップＳ５３に移行して処理実行部８は実行できないことを表すエラー値を戻り値に設定してリターンする。
【００６３】
次に、トラステッド・トウ・ノーマルTrusted_To_Normal( )処理について説明する。プロセス状態をtrustedからnormalに設定するための追加処理である。以下、図１３のフローチャートにより動作を説明する。
【００６４】
始めに、プロセス状態判定部７はステップＳ５５にて現在のプロセス状態を確認する。もしプロセスがtrustedではなくその他の状態であると判定したのならば(ステップＳ５５:other)、信頼性判定部９はプロセスエラーとし、ステップＳ５６のExit( )を呼び出す。プロセス状態判定部７がステップＳ５５にてプロセス状態がtrustedと判定すると(ステップＳ５５:trusted)、ステップＳ５７に移行し、処理実行部８はtrusted capabilityの特権を破棄してから、ステップＳ５８に移行してプロセス状態をnormalに設定しリターンする。
【００６５】
次に、クリティカル・トウ・トラステッドCritical_To_Trusted( )処理について説明する。プロセス状態をcriticalからtrustedに設定するために追加した処理である。以下、図１４のフローチャートにより動作を説明する。
【００６６】
始めに、プロセス状態判定部７はステップＳ６１にて現在のプロセス状態を確認する。もしプロセスがcriticalではなくその他の状態であると判定したのならば(ステップＳ６１:other)、信頼性判定部９はプロセスエラーとし、処理実行部８はステップＳ６２のExit( )を呼び出す。プロセス状態判定部７のステップＳ６１にてプロセス状態がcriticalならば(ステップＳ６１:critical)、ステップＳ６３に移行して処理実行部８はプロセス状態をtrustedに設定してリターンする。
【００６７】
Critical_To_Trusted( )は、明示的にプロセス状態をcriticalからtrustedに変更する命令である。critical状態で保持している復号化したデータなどのデータは、プログラム自身が責任を持って消去することが前提である。
【００６８】
次に、トラステッド・トウ・クリティカルTrusted_To_Critical( )処理について説明する。プロセス状態をcriticalからtrustedに設定するために追加した処理である。以下、図１５のフローチャートにより動作を説明する。
【００６９】
始めに、プロセス状態判定部７はステップＳ７１にて現在のプロセス状態を確認する。もしプロセスがtrustedではなく他の状態であると判定したのならば(ステップＳ７１:other)、信頼性判定部９はプロセスエラーとし、処理実行部８はステップＳ７２のExit( )を呼び出す。ステップＳ７１にてプロセス状態がtrustedならば(ステップＳ７１:trusted)、ステップＳ７３に移行してプロセス状態をcriticalに設定してリターンする。
【００７０】
次に、ページフォルトPage_Fault( )処理について説明する。ページフォルト例外が発生するとページフォルト例外ハンドラが呼ばれて、外部記憶装置５から主記憶装置４上に必要なページが読み込まれる。読み込まれたページに対して整合性のチェックや復号化を行うので、その処理を追加する。
【００７１】
以下、図１６のフローチャートにより動作を説明する。まずプロセス状態判定部７はページフォルト例外発生後、例外を発生させたプロセスの状態を確認する(ステップＳ８１)。もしプロセス状態がnormalならば(ステップＳ８１:normal)、チェックする必要がないページなので、ステップＳ８２のダイジェストの比較は行わない。ステップＳ８１にて現在のプロセス状態がnormalではなく、その他の場合ならば(ステップＳ８１:other)、ステップＳ８２にて信頼性判定部９はページのダイジェストを計算して、そのダイジェストをチェックする。信頼性判定部９が、ダイジェストをチェックした結果、ステップＳ８３にてダイジェストが正しくないと判定すれば(ステップＳ８３:NO)、チェックエラーCheck Errorとし、処理実行部８はステップＳ８４のTrusted_To_Normalを呼び出す。信頼性判定部９は、ステップＳ８３にてダイジェストの結果が正しいと判定すれば(ステップＳ８３:YES)、ステップＳ８５に移行してページが暗号化されているかどうかをチェックする。処理実行部８は、ステップＳ８５にて信頼性判定部９がページが暗号化されていないと判定すると(ステップＳ８５:NO)、リターンする。ステップＳ８５にてページが暗号化されていると判定すれば、ステップＳ８６に移行してDecrypt( )を呼び出す。信頼性判定部９は、ステップＳ８６の復号Decrypt( )に対して、ステップＳ８７では戻り値がエラーであるか否かを判定する。ステップＳ８７にてもしエラーの値が返ってきた(ステップＳ８７:YES)ならば、暗号化されたデータにアクセスできなかったことなので、ステップＳ８８に移行し、処理実行部８はページが獲得できなかったことを表すエラーをセットして、リターンする。ステップＳ８７にて信頼性判定部９がエラーではないと判定すれば(ステップＳ８７:NO)、処理実行部８はリターンする。
【００７２】
次に、イグジットExit( )処理について説明する。プロセスを終了するときに、exitシステムコールが呼ばれるが、exitシステムコールを呼ぶ直前で、クリティカル状態のときにプロセスのデータを主記憶装置上から消去する処理を追加する。
【００７３】
以下、図１７のフローチャートにより動作を説明する。先ず、プロセス状態判定部７は、ステップＳ９１にて現在のプロセス状態を確認する。もし、プロセスがcriticalではなく他の状態であると判定すると(ステップＳ９１:other)、処理実行部８はexitシステムコールを呼び出してプロセスを終了する。ステップＳ９１にてプロセス状態がcriticalであると判定すると(ステップＳ９１:critical)、主記憶装置上には復号化したページなどの重要なデータが残っているので、ステップＳ９２にて処理実行部８は主記憶上からプロセスのすべての情報を消去してから、exitシステムコールを呼び出してプロセスを終了する。
【００７４】
次に、一連の流れとしてのプログラムの実行処理について図１８及び図１９のフローチャートを参照して説明する。Exec( )が呼ばれて、プログラムの実行の準備が整うとプログラムの実行が始まる(ステップＳ１０１)。まずはステップＳ１０２にて命令を読み込んで、プログラムの実行を開始する。コンピュータ装置１は、ステップＳ１０３にて命令が主記憶装置上に存在するか否かを判定し、もしなければ(ステップＳ１０３:NO)、ステップＳ１０４に移行してPage_Fault( )により、ページのチェックを行ってから、ステップＳ１０５にて命令の実行に移る。ステップＳ１０３にて命令が主記憶上に存在すると判定すれば(ステップＳ１０３:YES)、ステップＳ１０５以下にて命令を実行するがステップＳ１０６、Ｓ１０８、Ｓ１１０、Ｓ１１２、Ｓ１１４及びＳ１１６にて命令を確認してから実行する。
【００７５】
処理実行部８は、ステップＳ１０６では、実行する命令がExit( )であるか否かを判定する。Exit( )ならば(ステップＳ１０６:YES)、ステップＳ１０７に移行しExit( )を呼び出して、プロセスを終了させる。ステップＳ１０６にて実行する命令がExit( )でないと判定し(ステップＳ１０６:NO)、さらにステップＳ１０８にてExec( )であるか否かを判定した結果、Exec( )であると判定したならば(ステップＳ１０８:YES)、ステップＳ１０９に移行してExec( )を呼び出し、プロセスに適切な状態をセットしてプログラムの実行を開始する。
【００７６】
ステップＳ１０８にて命令がExec( )ではないと判定し(ステップＳ１０８:NO)、さらにステップＳ１１０にてDynamic_link( )であるか否かを判定した結果、Dynamic_link( )であると判定したならば(ステップＳ１１０:YES)、ステップＳ１１１に移行してDynamic_link( )を呼び出して、プロセスを適切な状態にセットして、共有ライブラリをアドレス空間に割り当てる。呼び出し後、ステップＳ１０２に移行して次の命令を読み込む。
【００７７】
ステップＳ１１０にて命令がDynamic_link( )ではないと判定し(ステップＳ１１０:NO)、さらにステップＳ１１２にてTrusted_To_Normal( )であるか否かを判定した結果、Trusted_To_Normal( )であると判定したならば(ステップＳ１１２:YES)、ステップＳ１１３に移行してTrusted_To_Normal( )を呼び出して、プロセス状態をtrustedからnormalにセットする。処理後、ステップＳ１０２に移行して次の命令の読み込みを行う。
【００７８】
ステップＳ１１２にて命令がTrusted_To_Normal( )でないと判定し(ステップＳ１１２:NO)、さらにステップＳ１１４にてTrusted_To_Critical( )であるか否かを判定した結果、Trusted_To_Critical( )であると判定したならば(ステップＳ１１４:YES)、ステップＳ１１５に移行してTrusted_To_Critical( )を呼び出し、プロセス状態をTrustedからCriticalに設定する。呼び出し後、ステップＳ１０２に移行し次の命令を読み込む。
【００７９】
ステップＳ１１４にて命令がTrusted_To_Critical( )ではなく(ステップＳ１１４:NO)、さらにステップＳ１１６にてCritical_To_Trusted( )であるか否かを判定した結果、Critical_To_Trusted( )であると判定したならば（ステップＳ１１６:YES）、ステップＳ１１７にてCritical_To_Trusted( )を呼び出して、プロセス状態をCriticalからTrustedに設定する。呼び出し後、ステップＳ１０２に移行して次の命令を読み込む。
【００８０】
ステップＳ１１６にてCritical_To_Trusted( )でないと判定したとき、つまり命令がExec( )、Dynamic_link( )、Trusted_To_Normal( )、Trusted_To_Critical( )、Critical_To_Trusted( )のいずれでもないの場合(ステップＳ１１６:NO)には、図１９のステップＳ１１８に移行してその読み込んだ命令を実行する。ステップＳ１１９では、その命令が主記憶装置４上にアクセスする命令であるか否かを判定し、主記憶装置４上にアクセスしない命令ならば(ステップＳ１１９:NO)、実行して、ステップＳ１０２にて次の命令の読み込みを行い次の命令に移る。
【００８１】
ステップＳ１１９にて主記憶上にアクセスする命令であると判定したならば(ステップＳ１１９:YES)、ステップＳ１２０にてそのアクセス先が主記憶装置上にあるかどうかをチェックする。ステップＳ１２０にてアクセス先が主記憶装置上にあると判定すれば(ステップＳ１２０:YES)、命令を実行して次の命令に移る(ステップＳ１０２)。もしステップＳ１２０にて主記憶装置上にアクセス先がないと判定すれば(ステップＳ１２０:NO)、ステップＳ１２１移行しページフォルト例外が発生してPage_Fault( )を呼び出される。呼出し後、次の命令に移る(ステップＳ１０２)。
【００８２】
なお、これまで、Linuxについて例にとって説明を行ってきたが、その他のプロセス単位で管理するシステム全般に応用できることは明らかである。
【００８３】
そのほか、normal状態を禁止する場合や上記の３つ以外にも状態を追加して、管理を行って信頼性を向上させることについても応用は明らかである。
【００８４】
また署名のチェック方法についても、デマンドページングだけでなく実行前にファイル全体をチェックする方法と組み合わせて、プロセスの整合性をチェックできることも明らかである。
【図面の簡単な説明】
【００８５】
【図１】コンピュータ装置のハードウェア構成図である。
【図２】コンピュータ装置の機能ブロック図である。
【図３】リナックスLinuxにおける実行開始プログラムの処理手順を示すフローチャートである。
【図４】リナックスLinuxにおける実行プログラムの処理手順を示すフローチャートである。
【図５】ダイジェストによりページをチェックする処理を説明するための図である。
【図６】ダイジェストにより一部のページに対してのみチェックする処理を説明するための図である。
【図７】ダイジェストにより暗号化ページをチェックする処理を説明するための図である。
【図８】ダイジェストにより一部の暗号化ページ、ページに対してのみチェックする処理を説明するための図である。
【図９】状態遷移図である。
【図１０】エグゼックExec( )処理の手順を示すフローチャートである。
【図１１】ダイナミック・リンクDynamic_link( )処理の手順を示すフローチャートである。
【図１２】デクリプトDecrypt( )処理の手順を示すフローチャートである。
【図１３】トラステッド・トウ・ノーマルTrusted_To_Normal( )処理の手順を示すフローチャートである。
【図１４】クリティカル・トウ・トラステッドCritical_To_Trusted( )処理の手順を示すフローチャートである。
【図１５】トラステッド・トウ・クリティカルTrusted_To_Critical( )処理の手順を示すフローチャートである。
【図１６】ページフォルトPage_Fault( )処理の手順を示すフローチャートである。
【図１７】イグジットExit( )処理の手順を示すフローチャートである。
【図１８】プログラムの実行処理の手順を示すフローチャートである。
【図１９】プログラムの実行処理の手順を示すフローチャートである。
【符号の説明】
【００８６】
１  コンピュータ装置、２  ＣＰＵ、４  主記憶装置、５  外部記憶装置、７  プロセス状態判定部、８  処理実行部、９  信頼性判定部
【図１】
2005202523.tif 000003
【図２】
2005202523.tif 000004
【図３】
2005202523.tif 000005
【図４】
2005202523.tif 000006
【図５】
2005202523.tif 000007
【図６】
2005202523.tif 000008
【図７】
2005202523.tif 000009
【図８】
2005202523.tif 000010
【図９】
2005202523.tif 000011
【図１０】
2005202523.tif 000012
【図１１】
2005202523.tif 000013
【図１２】
2005202523.tif 000014
【図１３】
2005202523.tif 000015
【図１４】
2005202523.tif 000016
【図１５】
2005202523.tif 000017
【図１６】
2005202523.tif 000018
【図１７】
2005202523.tif 000019
【図１８】
2005202523.tif 000020
【図１９】
2005202523.tif 000021