(57)【要約】【課題】セキュアＯＳが管理するデータをセキュアに生成、加工する事が可能な情報処理装置を提供する。【解決手段】実施形態の情報処理装置は、メインプロセッサ部と、セキュアＯＳ部と、ノンセキュアＯＳ部と、セキュアモニタメモリ設定部と、タイマ部と、アドレス空間制御部と、を備える。前記セキュアモニタ部は、前記タイマ部からの前記割り込みの通知を受けた場合に所定の処理の実行を前記セキュアＯＳ部へ指示し、前記セキュアＯＳ部は、前記セキュアモニタ部で実行を指示された結果のデータを前記第１メモリ領域に記憶させる。【選択図】図２
2015064677.tif 000002
【特許請求の範囲】
【請求項１】
セキュアモードとノンセキュアモードとに選択的に切り替えられ、それぞれのモードで所定のデータ処理を行なうメインプロセッサ部と、
メインメモリ部に対して前記メインプロセッサ部のモードごとに独立してリード許可・ライト許可のアクセス権を設定するアドレス空間制御部と、
前記アドレス空間制御部に対して、両モードでデータのリードが可能であり、前記セキュアモードでのみデータのライトが可能な第１メモリ領域と、両モードでデータのリードとライトが可能な第２メモリ領域と、前記セキュアモードでのみデータのリードとライトが可能な第３メモリ領域を設定するセキュアモニタメモリ設定部と、
前記第２メモリ領域に配置され、前記ノンセキュアモードで動作するノンセキュアＯＳ部と、
前記第３メモリ領域に配置され、前記セキュアモードで動作するセキュアＯＳ部と、
所定の周期で前記メインプロセッサ部に対して割り込みをかけ、前記セキュアモニタ部へと前記割り込みを通知するタイマ部と、
を備え、
前記セキュアモニタ部は、前記タイマ部からの前記割り込みの通知を受けた場合に所定の処理の実行を前記セキュアＯＳ部へ指示し、
前記セキュアＯＳ部は、前記セキュアモニタ部で実行を指示された結果のデータを前記第１メモリ領域に記憶させる
ことを特徴とする情報処理装置。
【請求項２】
所定の周期で前記メインプロセッサ部に対して割り込みをかけ、前記ノンセキュアＯＳ部へと第２割り込みを通知する第２タイマ部を更に備え、
前記ノンセキュアＯＳ部は、前記第２タイマ部からの前記第２割り込みの通知を受けると、前記ノンセキュアＯＳ部上で動作するタスクの切り替え処理を実行する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記セキュアＯＳ部は、
前記タイマ部からの前記割り込みの通知を受けた前記セキュアモニタ部より、前記所定の処理の実行を指示されるごとに、所定のデータを更新するデータ更新部を
更に備えることを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記セキュアＯＳ部は、
前記データ更新部が更新したデータの値を所定の鍵を用いて暗号化する暗号処理部と、
前記暗号処理部が用いる鍵を保持する鍵管理部と、
前記データ更新部が更新した暗号化されていないデータ、及び暗号化されたデータの両方を前記第１メモリ領域へとライトするデータライト部と、
を備えることを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記ノンセキュアＯＳ部は、
前記データ更新部が更新したデータの値を暗号化して出力するか、暗号化せずに出力するかを設定するモード設定部を
更に備え、
前記セキュアＯＳ部は、
前記モード設定部による設定に基づき、データを暗号化するか否かを前記データ更新部へと指示する出力モード設定部を
更に備えることを特徴とする請求項３に記載の情報処理装置。
【請求項６】
前記ノンセキュアＯＳ部は、
起動後に前記ノンセキュアＯＳ部が配置された領域を前記セキュアモードでのみデータのライトが可能なようにアドレス空間制御部を設定する領域設定部と、
を更に備えることを特徴とする請求項１に記載の情報処理装置。
【請求項７】
前記ノンセキュアＯＳ部は、
起動後に前記セキュアＯＳ部に対して、前記ノンセキュアＯＳ部が配置された領域を前記セキュアモードでのみデータのライトが可能なようにアドレス空間制御部を設定する領域指定部を更に備え、
前記セキュアＯＳ部は、
前記領域指定部からの指示に基づき、前記ノンセキュアＯＳ部が配置された領域を前記セキュアモードでのみデータのライトが可能なようにアドレス空間制御部に設定する第２領域設定部と、
を更に備えることを特徴とする請求項１に記載の情報処理装置。
【請求項８】
情報処理装置と、前記情報処理装置とネットワークを通じて接続された検証サーバとを備える情報処理システムであって、
前記情報処理装置は、
セキュアモードとノンセキュアモードとに選択的に切り替えられ、それぞれのモードで所定のデータ処理を行なうメインプロセッサ部と、
メインメモリ部に対して前記メインプロセッサ部のモードごとに独立してリード許可・ライト許可のアクセス権を設定するアドレス空間制御部と、
前記アドレス空間制御部に対して、両モードでデータのリードが可能であり、前記セキュアモードでのみデータのライトが可能な第１メモリ領域と、両モードでデータのリードとライトが可能な第２メモリ領域と、前記セキュアモードでのみデータのリードとライトが可能な第３メモリ領域を設定するセキュアモニタメモリ設定部と、
前記第２メモリ領域に配置され、前記ノンセキュアモードで動作するノンセキュアＯＳ部と、
前記第３メモリ領域に配置され、前記セキュアモードで動作するセキュアＯＳ部と、
所定の周期で前記メインプロセッサ部に対して割り込みをかけ、前記セキュアモニタ部へと前記割り込みを通知するタイマ部と、
を備え、
前記セキュアモニタ部は、前記タイマ部からの前記割り込みの通知を受けた場合に所定の処理の実行を前記セキュアＯＳ部へ指示し、
前記セキュアＯＳ部は、前記セキュアモニタ部で実行を指示された結果のデータを前記第１メモリ領域に記憶させ、
前記セキュアＯＳ部は、前記タイマ部からの前記割り込みの通知を受けた前記セキュアモニタ部より、前記所定の処理の実行を指示されるごとに、所定のデータを更新するデータ更新部を更に有し、
前記ノンセキュアＯＳ部は、暗号化された前記データを前記第１メモリ領域からリードし、前記検証サーバへと送信する暗号化データリード部を更に有し、
前記検証サーバは、
前記暗号化データリード部より受信したデータを、暗号化に用いられた鍵と対応する所定の鍵を用いて復号し、前記暗号化データリード部へと返信するデータ復号部と、
を備える
ことを特徴とする情報処理システム。
【請求項９】
セキュアモードとノンセキュアモードとに選択的に切り替えられ、それぞれのモードで所定のデータ処理を行なうメインプロセッサ部と、
メインメモリ部に対して前記メインプロセッサ部のモードごとに独立してリード許可・ライト許可のアクセス権を設定するアドレス空間制御部と、
前記アドレス空間制御部に対して、前記ノンセキュアモードでのデータのリード・ライトを禁止するとともに、前記セキュアモードでのみデータのリード・ライトを許可する第４メモリ領域と、両モードでデータのリードとライトが可能な第５メモリ領域と、前記セキュアモードでのみデータのライトが可能な第６メモリ領域を設定し、更に前記ノンセキュアモードで前記第６メモリ領域へのアクセスがあった場合に、前記セキュアモードに処理を遷移させるように設定するセキュアモニタメモリ設定部と、
前記第６メモリ領域に配置され、前記ノンセキュアモードで動作するノンセキュアＯＳ部と、
前記第４メモリ領域に配置され、前記セキュアモードで動作するセキュアＯＳ部と、
を備え、
前記セキュアＯＳ部は、前記ノンセキュアモードで前記第６メモリ領域へのアクセスがあった場合に、その領域のどのアドレスへのアクセスであったかを調査する
ことを特徴とする情報処理装置。
【請求項１０】
前記セキュアＯＳ部は、前記ノンセキュアモードで前記第６メモリ領域へのアクセスがあった場合に、所定のアドレスへのアクセスであると判断した場合に、システムの停止処理を行う
ことを特徴とする請求項９に記載の情報処理装置。
【請求項１１】
セキュアモードとノンセキュアモードとに選択的に切り替えられ、それぞれのモードで所定のデータ処理を行なうメインプロセッサ部と、メインメモリ部に対して前記メインプロセッサのモードごとに独立してリード許可・ライト許可のアクセス権を設定するアドレス空間制御部と、を備えるコンピュータを、
前記アドレス空間制御部に対して、両モードでデータのリードが可能であり、前記セキュアモードでのみデータのライトが可能な第１メモリ領域と、両モードでデータのリードとライトが可能な第２メモリ領域と、前記セキュアモードでのみデータのリードとライトが可能な第３メモリ領域を設定するセキュアモニタメモリ設定部と、
前記第２メモリ領域に配置され、前記ノンセキュアモードで動作するノンセキュアＯＳ部と、
前記第３メモリ領域に配置され、前記セキュアモードで動作するセキュアＯＳ部と、
所定の周期で前記メインプロセッサ部に対して割り込みをかけ、前記セキュアモニタ部へと前記割り込みを通知するタイマ部と、
として機能させるためのプログラムであって、
前記セキュアモニタ部は、前記タイマ部からの前記割り込みの通知を受けた場合に所定の処理の実行を前記セキュアＯＳ部へ指示し、
前記セキュアＯＳ部は、前記セキュアモニタ部で実行を指示された結果のデータを前記第１メモリ領域に記憶させる
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム、プログラムに関する。
【背景技術】
【０００２】
従来、ソフトウェアとして実装されるシステムにおいて、鍵などの秘密情報を攻撃者による不正な解析から防止したり、処理の内容を書き換えられないようしたりする事が求められる場面が存在した。このような場合に対処するためには、オペレーティングシステム（ＯＳ）のアクセス制御のメカニズムを利用したり、アプリケーションプログラムを難読化したり、アプリケーションの解析に用いるデバッガの機能を無効化したり、ＯＳ内のアクセス制御メカニズムを強化したりする技術が提供されていた。
【０００３】
しかしながら、アプリケーションやＯＳから脆弱性を完全に排除する事は実質的に不可能であり、ソフトウェアのみによるアプローチは限界があった。また、汎用PCでは仮想マシンによって保護対象の処理を実行させるＯＳと、汎用処理を実行させるＯＳを分離するアプローチも提案されているが、組み込み装置向けのプロセッサではハードウェアによる仮想化支援機能が普及しておらず、ＰＣに比べて性能の劣る組み込みプロセッサで汎用ＰＣと同じ仮想マシンを用いたシステムを実現する事は困難であった。
【０００４】
このような場合に対処するためのシステムとして、組み込み向けのプロセッサにおいて、メインプロセッサにセキュアモードと、ノンセキュアモードの二つのモードを持たせ、改変や解析などの攻撃を防止する必要のあるプログラムはセキュアモードで実行させ、汎用のプログラムはノンセキュアモードで実行させるプロセッサのアーキテクチャが提案されている。このアーキテクチャでは、セキュアモードとノンセキュアモードで動作させる動作用ソフトウェアであるＯＳ(Operation  System)を別々に用意し、データを暗号化したり復号化したりする処理はセキュアモードで動作するセキュアＯＳ、又はセキュアＯＳ上で動作するアプリケーションソフトウェアで実行する。一方、二次記憶部からのデータのリードなどの汎用の処理はノンセキュアモードで動作するノンセキュアＯＳ部、又はノンセキュアＯＳ部上で動作するアプリケーションソフトウェアとして実行する。すなわち、必要に応じてセキュアモードとノンセキュアモードを遷移させながら実行する構成である。
【０００５】
さらにメモリ空間に対するハードウェアのアクセス制御機構により、ノンセキュアＯＳ部からセキュアＯＳの領域を読んだり、改変したりする事は不可能となっている。これにより、仮にノンセキュアＯＳ部やノンセキュアＯＳ部上で動作するアプリケーションに不具合(バグ)が組み込まれており、この不具合を不正に利用して、ノンセキュアモードで動作するソフトウェアからセキュアＯＳ、又はセキュアＯＳ上で動作するアプリケーションのデータを盗み見たり、改変したりしようとしても、これを防止することができる。このため、保護対象の処理を改変したり、保護対象のデータを取得したりする攻撃を防止することができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−１３５００４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、ＯＳを分離させ、ノンセキュアモードからセキュアモードへのメモリアクセスを防止する手段は提供されていたが、セキュアモードで動作する暗号処理などの機能はノンセキュアモードで動作するプログラムから明示的に呼び出す事を前提にしたものが多い。この場合、ノンセキュアモードで何らかの処理を実行中に、その処理を定期的、強制的に中断し、セキュアモードに遷移させてセキュアモードの状態でデータを生成・加工するといった機能は提供されておらず、具体的な実現方法は明らかになっていなかった。さらに、そのデータをセキュアモードで暗号化してノンセキュアＯＳに提供するための手法も実現されていなかった。
【０００８】
本発明の実施形態は、セキュアＯＳが管理するデータをセキュアに生成、加工する事が可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明の実施形態は、情報処理装置は、メインプロセッサ部と、セキュアＯＳ部と、ノンセキュアＯＳ部と、セキュアモニタメモリ設定部と、タイマ部と、アドレス空間制御部を備える。
【００１０】
メインプロセッサ部は、セキュアモードとノンセキュアモードとに選択的に切り替えられ、それぞれのモードで所定のデータ処理を行なう。アドレス空間制御部は、メインメモリ部に対して前記メインプロセッサのモードごとに独立してリード許可・ライト許可のアクセス権を設定する。セキュアモニタメモリ設定部は、前記アドレス空間制御部に対して、両モードでデータのリードが可能であり、前記セキュアモードでのみデータのライトが可能な第１メモリ領域と、両モードでデータのリードとライトが可能な第２メモリ領域と、前記セキュアモードでのみデータのリードとライトが可能な第３メモリ領域を設定する。セキュアＯＳ部は、前記第３メモリ領域に配置され、前記セキュアモードで動作する。ノンセキュアＯＳ部は、前記第２メモリ領域に配置され、前記ノンセキュアモードで動作する。タイマ部は、所定の周期で前記メインプロセッサ部に対して割り込みをかけ、前記セキュアモニタ部へと前記割り込みを通知する。
【００１１】
前記セキュアモニタ部は、前記タイマ部からの前記割り込みの通知を受けた場合に所定の処理の実行を前記セキュアＯＳ部へ指示し、前記セキュアＯＳ部は、前記セキュアモニタ部で実行を指示された結果のデータを前記第１メモリ領域に記憶させる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施形態の情報処理装置のハードウェア構成図。
【図２】第１の実施形態のソフトウェアのブロック図。
【図３】第１の実施形態のメモリ領域の区分の一例を示す図。
【図４】第１の実施形態のメモリ領域に対するアクセスの可否の一例を示す図。
【図５】第１の実施形態のタイマ割り込み発生時における処理を示すフロー図。
【図６】第１の実施形態の変形例のソフトウェアのブロック図。
【図７】第２の実施形態のソフトウェアのブロック図。
【図８】第２の実施形態のメモリ領域の区分の一例を示す図。
【図９】第２の実施形態のタイマ割り込み発生時における処理を示すフロー図。
【図１０】第２の実施形態の変形例のソフトウェアのブロック図。
【図１１】第２の実施形態の変形例のタイマ割り込み発生時のフロー図。
【図１２】第２の実施形態の変形例のソフトウェアのブロック図。
【図１３】第２の実施形態の変形例のメモリ領域の区分の一例を示す図。
【図１４】第２の実施形態の変形例のソフトウェアのブロック図。
【図１５】第２の実施形態の変形例のソフトウェアのブロック図。
【図１６】第２の実施形態の変形例のソフトウェアのブロック図。
【図１７】第２の実施形態の変形例のメモリ領域の区分の一例を示す図。
【図１８】第２の実施形態の変形例のタイマ割り込み発生時のフロー図。
【図１９】第３の実施形態のソフトウェアのブロック図。
【図２０】第３の実施形態のメモリ領域の区分の一例を示す図。
【図２１】第３の実施形態の変形例のソフトウェアのブロック図。
【図２２】第３の実施形態の変形例のメモリ領域の区分の一例を示す図。
【図２３】第３の実施形態の変形例のタイマ割り込み発生時のフロー図。
【図２４】第４の実施形態のソフトウェアのブロック図。
【図２５】第４の実施形態の割り込み発生時における処理の流れを示すフロー図。
【図２６】第４の実施形態のメモリ領域の区分の一例を示す図。
【図２７】第４の実施形態のメモリ領域へのアクセス権の一例を示す図。
【図２８】第４の実施形態の変形例の割り込み発生時の示すフロー図。
【図２９】第４の実施形態の変形例の割り込み発生時のフロー図。
【図３０】第４の実施形態の変形例の割り込み発生時のフロー図。
【図３１】第４の実施形態の変形例のソフトウェアのブロック図。
【図３２】第４の実施形態の変形例の割り込み発生時のフロー図。
【図３３】第４の実施形態の変形例のソフトウェアのブロック図。
【図３４】第４の実施形態の変形例のソフトウェアのブロック図。
【図３５】第４の実施形態の変形例の割り込み発生時のフロー図。
【図３６】第４の実施形態の変形例のソフトウェアのブロック図。
【図３７】第５の実施形態のソフトウェアのブロック図。
【図３８】第４の実施形態の別例のソフトウェアのブロック図。
【図３９】第６の実施形態のソフトウェアのブロック図。
【図４０】第７の実施形態のソフトウェアのブロック図。
【発明を実施するための形態】
【００１３】
（第１の実施形態）
以下、実施の形態について図面を参照して詳細に説明する。図１は、第１の実施の形態で説明する情報処理装置のハードウェア構成を概略的に示している。情報処理装置としては、例えばデジタルテレビジョン放送受信装置やＳＴＢ(Set  Top  Box)、スマートフォン、監視カメラ等を想定している。
【００１４】
情報処理装置は、メインプロセッサ部２、アドレス空間制御部３、メモリ制御部４、メインメモリ部５、二次記憶部制御部６、二次記憶部７、ブリッジ部８、及びＩ／Ｏ処理部９を備えている。メインプロセッサ部２、アドレス空間制御部３、二次記憶部制御部６、及びブリッジ部８はバス１によって接続されている。また、Ｉ／Ｏ処理部９はブリッジ部８とバス２によって接続されている。
【００１５】
メインプロセッサ部２は、メインメモリ部５からロードした命令やデータを逐次的に処理し、処理した結果をメインメモリ部５に記憶させる。このメインプロセッサ部２は、たとえばＡＲＭ（登録商標）Ｃｏｒｔｅｘ  Ａシリーズのような汎用のプロセッサである。このメインプロセッサ部２は、少なくともセキュアモードとノンセキュアモードの二つの排他的な状態を持ち、メインプロセッサ部２の動作状態は、ソフトウェアからの指示、たとえばレジスタの設定によってセキュアモードとノンセキュアモードとに選択的に切り替えられる。すなわち、メインプロセッサ部２の動作用ソフトウェアは、必要に応じてセキュアモードとノンセキュアモードとを交互に切り替えながらプログラムを実行する。さらに、メインプロセッサ部２は、現在どちらの状態にあるかを示す少なくとも１ビットの状態情報をバス１に送信している。すなわち、バス１に接続される各モジュールはバス１に送信されている状態情報を監視する事によってメインプロセッサ部２がセキュアモードとノンセキュアモードのどちらのモードにあるかを識別することができる。このモードを選択的に切り替えて実行する方法として、たとえばＡＲＭプロセッサのセキュリティ機能であるＴｒｕｓｔＺｏｎｅ（登録商標）機能を利用すればよい。
【００１６】
メインプロセッサ部２は内部にタイマ部１１を有する。タイマ部１１は、設定に従って一定周期で割り込みを発生させる機能を有する。メインプロセッサ部２で動作するソフトウェアは、この割り込みをハンドルすることで、周期的に特定の処理を実行させることができる。メインプロセッサ部２は複数のタイマ部１１を有していてもよい。その場合、各タイマ部１１は独立に動作し、それぞれ別々に一定周期が経過する度に割り込みを発生させる。
【００１７】
メインメモリ部５は汎用の主記憶装置である。例えばＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ)やＭＲＡＭ（Ｍａｇｎｅｔｉｃ  ＲＡＭ)を用いることができる。メモリ制御部４はメインプロセッサ部２からの指示に基づいてメインメモリ部５に対するリード・ライト命令(ロード・ストア命令)及び対象データを受信したり、メインメモリ部５のリフレッシュなどを制御したりする。メインメモリ部５がＤＲＡＭの場合、メモリ制御部４は、たとえばＤＲＡＭコントローラを想定している。
【００１８】
アドレス空間制御部３は、メインプロセッサ部２からメインメモリ部５へのアクセスを監視し、アドレス範囲ごとにアクセス制御を行う。つまり、メインメモリ部５に対してメインプロセッサ部２のモードごとに独立してリード許可・ライト許可のアクセス権を設定する。たとえば、情報処理装置の起動時の初期化処理の一手順として、メインプロセッサ部２がセキュアモードの状態にある時のみメインメモリ部５の特定のアドレス領域に対してアクセスが可能であり、ノンセキュアの状態にある時にはその特定のアドレス領域にはアクセスを許可しないといった設定をメインプロセッサ部２で動作させる制御用ソフトウェアが、アドレス空間制御部３にあらかじめ施しておく。メインプロセッサ部２からその指定した特定の領域へのアクセスがあった場合に、アドレス空間制御部３はバス１に流れる状態からプロセッサがセキュアモードかノンセキュアモードであるかを識別する。そして、アドレス空間制御部３はプロセッサがセキュアモードにあるならばアクセスを許可し、そうでない場合はアクセスを許可せず例外信号(フォールト信号またはアボート信号)を割り込み信号としてメインプロセッサ部２に送信する。アドレス空間制御部３がメインメモリ部５の領域を設定する方法については後述する。
【００１９】
二次記憶部７はメインメモリ部５よりも低速だが大容量な不揮発性のメモリ(ストレージ)である。たとえば磁気ディスクやフラッシュメモリを用いることができる。二次記憶部制御部６は、メインプロセッサ部２からの指示に基づいて二次記憶部７に対するリード・ライト命令及び対象データを受信し、二次記憶部７にデータをリード・ライトの制御を行う。二次記憶部７がフラッシュメモリの場合、たとえばフラッシュメモリコントローラとフラッシュメモリを想定している。
【００２０】
ブリッジ部８はバス１とバス２を接続するブリッジコントローラである。バス１はたとえばＡＸＩ（Ａｄｖａｎｃｅｄ  ｅＸｔｅｎｓｉｂｌｅ  Ｉｎｔｅｒｆａｃｅ)仕様を想定し、バス２はたとえばＡＰＢ(Ａｄｖａｎｃｅｄ  Ｐｅｒｉｐｈｅｒａｌ  Ｂｕｓ)規格に準拠したものを想定している。Ｉ／Ｏ処理部９はマウスやキーボードなどの入出力デバイスと接続し、それらの入出力デバイスを制御する。キーボードやマウスからの入力があった場合にはブリッジ部８を介して割り込み信号としてメインプロセッサ部２に送信する。
【００２１】
図２はメインプロセッサ部２で動作するソフトウェアの構成の一例を示している。図２に示されるように、ソフトウェアとしては、セキュアモニタ部１００、セキュアＯＳ部２００、ノンセキュアＯＳ部３００を備えている。なお、説明を容易にするためにハードウェアであるアドレス空間制御部３とタイマ部１１も記載しているが、本質的にはこの図面はソフトウェア構成を示すものである。また、ここでは説明を容易にするためにセキュアモニタ部１００とセキュアＯＳ部２００が別々の構成になっている場合について説明するが、セキュアモニタ部１００とセキュアＯＳ部２００が一体のモジュールになっていてもよい。
【００２２】
メインプロセッサ部２はセキュアモードとノンセキュアモードの二つの状態を選択的に切り替えながらソフトウェアを実行するが、セキュアモードで動作する制御用ソフトウェア、すなわちＯＳ(Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ)がセキュアＯＳ部２００であり、ノンセキュアモードで動作するＯＳがノンセキュアＯＳ部３００である。
【００２３】
セキュアモニタ部１００はセキュアＯＳ部２００とノンセキュアＯＳ部３００を切り替える処理を行う。セキュアモニタ部１００はまた情報処理装置の起動時の初期化処理の一手順としてセキュアＯＳ部２００とノンセキュアＯＳ部３００をロードして実行する処理も行う。
【００２４】
セキュアＯＳ部２００はメインプロセッサ部２がセキュアモードの状態の時に動作させるためのＯＳである。ノンセキュアＯＳ部３００はメインプロセッサ部２がノンセキュアモードの状態の時に動作させるためのＯＳである。ノンセキュアＯＳ部３００は、たとえばＬｉｎｕｘ(登録商標)のような汎用のオペレーティングシステムを想定している。
【００２５】
セキュアモニタ部１００は、ＯＳ切替部１０２と、セキュアモニタメモリ設定部１０３、タイマハンドラ部１０１を含んでいる。ＯＳ切替部１０２はメインプロセッサ部２の動作状態をセキュアモードとノンセキュアモードとに選択的に切り替える処理を行う。切り替えるタイミングとしては、セキュアＯＳ部２００、又はノンセキュアＯＳ部３００から明示的な切り替え命令を実行した時、タイマや外部ハードウェアモジュールからの割り込み信号を受信した時などがある。明示的な切り替え命令とは、メインプロセッサ部２がＡＲＭ  Ｃｏｒｔｅｘ  Ａシリーズのプロセッサの場合、ＳＭＣ（Ｓｅｃｕｒｅ  Ｍｏｎｉｔｏｒ  Ｃａｌｌ）命令の事を指す。
【００２６】
セキュアＯＳ部２００が明示的な切り替え命令を実行した場合は、メインプロセッサ部２はセキュアＯＳ部２００からセキュアモニタ部１００のＯＳ切替部１０２に処理を遷移させる。そしてＯＳ切替部１０２はメインプロセッサのモードをノンセキュアモードからセキュアモードに切り替え、処理をノンセキュアＯＳ部３００に切り替える。ノンセキュアＯＳ部３００から明示的な切り替え命令を受信した場合は、メインプロセッサ部２はノンセキュアＯＳ部３００からセキュアモニタ部１００のＯＳ切替部１０２に処理を遷移させ、ＯＳ切替部１０２はメインプロセッサのモードをノンセキュアモードからセキュアモードに切り替え、処理をセキュアＯＳ部２００に遷移させる。
【００２７】
ＯＳ切替部１０２は、この切り替えの際に切り替え前のＯＳが元の状態に復帰できるように切り替え前のＯＳの状態(コンテキスト)をメインメモリ部５に保存しておく処理も行う。たとえば、ノンセキュアＯＳ部３００からセキュアＯＳ部２００に切り替える場合、ＯＳ切替部１０２はノンセキュアＯＳ部３００が利用中のレジスタの値、すなわちコンテキストを、セキュアモニタ部１００が管理する所定のメモリ領域に退避させ、セキュアＯＳ部２００を実行する。そして、ＯＳ切替部１０２は、セキュアＯＳ部２００からノンセキュアＯＳ部３００に切り替える際には退避しておいたノンセキュアＯＳ部３００のコンテキストをレジスタに復帰させる。同様に、セキュアＯＳ部２００からノンセキュアＯＳ部３００に切り替える際もセキュアＯＳ部２００が利用中のコンテキストの退避と、ノンセキュアＯＳのコンテキストの復帰の処理を行う。なお、セキュアＯＳ部２００からノンセキュアＯＳ部３００に遷移させる際、ノンセキュアＯＳ部３００に遷移した後にノンセキュアＯＳ部３００からレジスタの値を見る事でセキュアＯＳ部２００で実行していた状態が読まれてしまう事を防ぐため、ＯＳ切替部１０２は、セキュアＯＳ部２００が利用していたレジスタの値をクリアすることが望ましい。
【００２８】
なお、タイマや外部モジュールからの割り込み信号でモードを切り替える場合、セキュアモニタ部１００のＯＳ切替部１０２は、情報処理装置１の起動時に初期化処理の一手順として、例外(割り込み)が発生した場合にどちらのモードに遷移させてどのハンドラを実行するのかをあらかじめ決定しておき、割り込み発生元に設定しておく。たとえば、アドレス空間制御部３からメインプロセッサ部２に例外信号が送信されてきた場合、メインプロセッサ部２がセキュアモードの状態にある時にはセキュアＯＳ部２００の割り込みハンドラを実行し、ノンセキュアモードの状態にある時には強制的に状態を切り替えてセキュアＯＳ部２００の割り込みハンドラを実行するといった処理を起動時に行う。同様に、タイマ割り込みが発生した場合にモードに応じてどのハンドラを呼び出すのかをＯＳ切替部１０２に設定しておく。タイマ割り込みが発生した場合の割り込みハンドラの設定については後述する。
【００２９】
セキュアモニタメモリ設定部１０３はメインメモリ部５に対して領域を設定し、各領域に対してアクセス制御の設定を行う。領域の指定は、たとえば開始アドレスとその領域の長さを指定したり、開始アドレスと終了アドレスを指定したりするようにすればよい。タイマハンドラ部１０１はタイマ部１１が割り込みを発生させた場合にプロセッサが実行する処理部である。タイマハンドラ部１０１はＯＳ切替部１０２に対しノンセキュアモードからセキュアモードに状態を遷移させるよう指示し、遷移後にセキュアＯＳ部２００のタイマハンドラ部１０１を呼び出す。タイマ部１１から割り込みが発生した場合にこのセキュアモニタ部１００のタイマハンドラ部１０１を実行する事を、情報処理装置の起動時の初期化処理の一手順としてＯＳ切替部１０２が指定する。
【００３０】
セキュアＯＳ部２００は、タイマハンドラ部２０１と、データ更新部２０２と、データライト部２０４と、セキュアＯＳ遷移命令呼び出し部２０３と、を含んでいる。タイマハンドラ部２０１は、タイマ部１１が割り込みを発生させた場合に呼び出される処理部である。タイマハンドラ部２０１はデータ更新部２０２にタイマ割り込みが発生したことを通知する処理を行う。
【００３１】
データ更新部２０２は、メインプロセッサ部２のレジスタなどを用いて自身でカウンタ値（更新データ）を管理しており、タイマハンドラ部１０１からタイマ割り込みの発生通知を受信すると、そのカウンタ値を更新(たとえば１ずつインクリメントする)する処理を行う。そして、データ更新部２０２はデータライト部２０４に対してメインメモリ部５にその更新した値を書きこむよう指示する処理を行う。さらにデータ更新部２０２はメインメモリ部５に更新したカウンタ値を書きこんだ後、セキュアＯＳ遷移命令呼び出し部２０３を実行する。データライト部２０４は、データ更新部２０２からの指示に基づき、データ更新部２０２で管理しているカウンタ値をメインメモリ部５の更新データ領域に書きこむ処理を行う。
【００３２】
なお、本明細書では便宜上、メインメモリ部５への読み込み・書きこみを二次記憶装置と同様にリード・ライトと表現しているが、ロード・ストアと読み替えてもよい。
【００３３】
セキュアＯＳ遷移命令呼び出し部２０３は、メインプロセッサ部２でＯＳ切り替え命令を実行する。前述のようにメインプロセッサ部２でＯＳ切り替え命令が実行されると、メインプロセッサ部２はセキュアモニタ部１００のＯＳ切替部１０２に処理を遷移させる。そして、前述のようにＯＳ切替部１０２がメインプロセッサ部２の動作状態をノンセキュアモードからセキュアモードに切り替える処理を行う。
【００３４】
ノンセキュアＯＳ部３００は、タイマハンドラ部３０１と、スケジューラ部３０２と、タスク実行部３０３と、データリード部３０４と、を備えている。タイマハンドラ部３０１は、タイマ部１１が割り込みを発生させた場合に呼び出される処理部である。タイマハンドラ部３０１はスケジューラ部３０２を呼び出す。スケジューラ部３０２は、ノンセキュアＯＳ部３００で実行される様々なタスク(ジョブ)のうち、どのタスクを実行するか決定する処理を行う。タスクの優先度によってはタスク実行部３０３を呼び出す。
【００３５】
タスク実行部３０３は、データ更新部２０２がメインメモリ部５に書きこんだカウンタ値を利用するタスクを実行する処理部である。タスク実行部３０３に処理の順番が回ってくると、データリード部３０４にカウンタ値を取得するよう指示する。データリード部３０４は、タスク実行部３０３の指示に基づき、メインメモリ部５の更新データ領域から読み込む処理を行い、その値をタスク実行部３０３に渡す処理を行う。
【００３６】
図３は、セキュアモニタメモリ設定部１０３がメインメモリ部５のメモリ領域を区分けした一例を示している。この区分けの設定は、セキュアモニタメモリ設定部１０３によって機器起動時の処理の一部としてなされる。すなわち、メインメモリ部５のメモリ領域には、ノンセキュア領域とセキュア領域と共有領域とが設定される。
【００３７】
ノンセキュア領域には、ノンセキュアＯＳ（ノンセキュアＯＳのＯＳ実行イメージ）及びノンセキュアＯＳ用データが格納される。セキュア領域には、セキュアモニタ（セキュアモニタのＯＳ実行イメージ）、セキュアモニタ用データ、セキュアＯＳ（セキュアＯＳのＯＳ実行イメージ）、セキュアＯＳ用データ、メモリエリア設定レジスタ、及び後述する更新データ等が格納される。
【００３８】
ＯＳ実行イメージは、ＯＳを実行するためのバイナリーイメージを指す。ＯＳ用データとはＯＳが使う様々なデータ(コンテキストを含む)である。なお、各領域の隙間の部分は明示的に説明がない限り、ノンセキュア領域とする。もちろん、隙間がないように各領域を配置してもよい。セキュア領域は、メインプロセッサ部２がセキュアモードの状態にある時にはリードとライトの両方が許可される。また、セキュア領域はメインプロセッサ部２がノンセキュアモードの状態にある時に、メインメモリ部５にアクセスした場合、リードとライトの両方を禁止する領域と、リードのみ許可する(ライトは禁止する)領域の二つの領域に分けられる。セキュアモニタ（セキュアモニタのＯＳ実行イメージ）、セキュアモニタ用データ、セキュアＯＳ（セキュアＯＳのＯＳ実行イメージ）、セキュアＯＳ用データ、メモリエリア設定レジスタはセキュア領域の中でもノンセキュアモードからリードとライトの両方を禁止する領域に設定され、更新データ（第１メモリ領域）はセキュア領域の中でもノンセキュアモードからリードのみ許可する領域に配置される。
【００３９】
図４は、メインメモリ部５の各メモリ領域に対するアクセスの可否を示している。このアクセス制御の設定は、セキュアモニタメモリ設定部１０３によって情報処理装置の起動時の初期化処理の一部としてなされる。すなわち、メインプロセッサ部２がセキュアモードにある場合、メインプロセッサ部２で動作するソフトウェアがメインメモリ部５のセキュア領域とノンセキュア領域両方にリードとライトのアクセスが可能である。つまり、セキュアＯＳ部２００は、メインメモリ部５のセキュア領域、及びノンセキュア領域全てにアクセスが可能である。一方、メインプロセッサ部２がノンセキュアモードにある場合、メインメモリ部５のセキュア領域のうちリード・ライト禁止と指定された領域にはリードとライト両方のアクセスが不可であり、リード許可ライト禁止と指定された領域にはリードのみ許可される。また、ノンセキュア領域にはリードとライトのアクセスが可能である。なお、ここでのアクセスとは、メインメモリ部５に対して書き込みや読み出しを行なうことである。
【００４０】
このようなメインメモリ部５に対するアクセス制御は、上記メモリ制御部４がメインプロセッサ部２から現在のモードがセキュアモードであるかノンセキュアモードであるかを示す信号を受信し、その信号からメインプロセッサ部２の状態をメモリ制御部４が把握して、メインプロセッサ部２からメインメモリ部５にアクセスがあった場合、どのメモリ領域にアクセスが可能であるかを判別することにより実現される。
【００４１】
なお、アドレス空間制御部３に対して図４に示したようなアクセス制御を行うように設定するが、その設定はメモリエリア設定レジスタを経由して行う。図３に示したようにメモリエリア設定レジスタはセキュア領域に指定されているため、セキュアモード、すなわちセキュアＯＳ部２００ないしセキュアモニタ部１００からしか設定できない。つまり、メインメモリ部５のアドレス空間制御部３によるアクセス制御はノンセキュアＯＳ部３００から設定する事ができないように保護する事ができる。
【００４２】
図５は、タイマ割り込み発生時におけるメインプロセッサ部２の処理動作の一例をまとめたフローチャートを示している。ここで、セキュアモニタ部１００、セキュアＯＳ部２００、ノンセキュアＯＳ部３００は初期化処理を含む起動時の処理が完了しているものと仮定する。さらに、説明を容易にするためにこのフローチャートの初期状態ではメインプロセッサ部２がノンセキュアモードにあり、ノンセキュアＯＳ部３００が実行されている状態と仮定する。
【００４３】
タイマ割り込みが発生した場合、どちらのモードに遷移させるのかあらかじめＯＳ切替部１０２に設定しておく。たとえば、タイマ割り込みが発生した場合、セキュアモニタ部１００のタイマハンドラ部１０１に処理を遷移させるようにタイマ部１１に設定しておく。なお、メインプロセッサ部２が複数のタイマ部１１を備えている場合、ＯＳ切替部１０２は二つのタイマ部１１を使い、それぞれＦＩＱ割り込みとＩＲＱ割り込みが発生するように設定しておいてもよい。たとえば、一つ目のタイマ部１１(タイマ部１１Ａ)に対しては、周期Ｍミリ秒でＦＩＱ割り込みを発生させるように設定しておき、もう一つのタイマ部１１(タイマ部１１Ｂ)には、周期Ｎミリ秒でＩＲＱ割り込みを設定しておく。さらに、ＯＳ切替部１０２はタイマのＦＩＱ割り込みが発生した場合にはセキュアモニタ部１００のタイマハンドラに遷移するよう設定しておく。同様に、ＯＳ切り替え部はタイマのＩＲＱ割り込みが発生した場合にはセキュアモニタ部１００のタイマハンドラに遷移するよう設定しておく。
【００４４】
この設定により、ノンセキュアＯＳ部３００を実行している間にタイマ部１１Ａによる割り込みが発生した場合には、セキュアモニタ部１００のタイマハンドラ部１０１に処理が遷移する。そして、セキュアモニタ部１００のタイマハンドラ部１０１はＯＳ切替部１０２にモードとＯＳを遷移するよう指示した後、セキュアＯＳ部２００のタイマハンドラ部２０１を呼び出す。一方、ノンセキュアＯＳ部３００を実行している間にタイマ部１１Ｂによる割り込みが発生した場合には、ノンセキュアＯＳ部３００のタイマハンドラ部３０１に処理が遷移する。この場合、タイマ割り込み発生前に実行していたのはノンセキュアＯＳ部３００であるため、ＯＳ間遷移の処理は行われない。
【００４５】
図５では、タイマ部１１Ａによるタイマ割り込みが発生した場合を示す。現在、メインプロセッサ部２で実行されているのはノンセキュアＯＳ部３００である（ステップＳ１０１）。この場合に、タイマ割り込みが発生すると（ステップＳ１０２）、メインプロセッサ部２はセキュアモニタ部１００のタイマハンドラ部１０１に処理を遷移させる（ステップＳ１０３）。タイマハンドラ部１０１はＯＳ切替部１０２を利用してＯＳ間遷移処理を実行する（ステップＳ１０４）。この場合、ノンセキュアモードからセキュアモードに状態を遷移させ、ノンセキュアＯＳ部３００のコンテキストを保存してセキュアＯＳ部２００のコンテキストを復帰させ、セキュアＯＳ部２００を実行する。そして、セキュアＯＳ部２００のタイマハンドラ部２０１を実行する（ステップＳ１０５）。
【００４６】
セキュアＯＳ部２００のタイマハンドラ部２０１はデータ更新部２０２でカウンタ値（更新データ）を更新し（ステップＳ１０６）、データライト部２０４を呼び出して更新したカウンタ値をメインメモリ部５に書きませる（ステップＳ１０７）。そして、セキュアＯＳ遷移命令呼び出し部２０３でＯＳ遷移命令を呼び出す（ステップＳ１０８）。プロセッサはＯＳ遷移命令により、処理をセキュアモニタ部１００のＯＳ切替部１０２に遷移させる（ステップＳ１０９）。ＯＳ切替部１０２はセキュアＯＳ部２００のコンテキストを保存してノンセキュアＯＳ部３００のコンテキストを復帰させ、ノンセキュアＯＳ部３００を実行する。その後、ノンセキュアＯＳ部３００のタスク実行部３０３はメインメモリ部５の更新データ領域からカウンタ値を読み出す（ステップＳ１１０）。なお、更新データ領域はリードが許可されているため、ノンセキュアＯＳ部３００からでも読み出すことができる。
【００４７】
図６は、カウンタ値をメインプロセッサ部２のレジスタではなくメインメモリ部５で保持した場合のメインプロセッサ部２で動作するソフトウェアの構成の一例である。図２との違いは、セキュアＯＳ部２００ａがデータリード部２０５を新たに備えている点である。データリード部２０５は、メインメモリ部５のセキュア領域の更新データ領域からカウンタ値を読み込む処理部である。セキュア領域だが、この処理はセキュアモードで行われる事からリードアクセスは正常に行う事ができる。つまり、データ更新部２０２はメインメモリ部５の更新データ領域からカウンタ値を読み込み、カウンタ値を更新した後、メインメモリ部５の更新データ領域にその更新した値を書きこむ。
【００４８】
ここで、カウンタ値の利用方法と攻撃方法について説明する。たとえば、カウンタ値をストップウォッチのタイマとして利用し、映画などの有料コンテンツの閲覧期間を一定期間に制限するようなプリケーションを想定する。ノンセキュアＯＳ上のコンテンツ閲覧アプリが時間Ｘでカウンタ値を読み出し、コンテンツの再生を開始する。ノンセキュアＯＳ上のコンテンツ閲覧アプリは時間Ｙでカウンタ値を読み出す事で再生を開始した時点からどの程度の時間が経過したかを知る事ができる。これにより、コンテンツの再生を開始した時間からＮ分（Ｎ＝Ｙ−Ｘ）のみコンテンツの再生を許可すると言ったことが実現できる。
【００４９】
このようなシステムを不正に利用する方法としてカウンタ値を上書きすることが考えられる。たとえば、コンテンツの再生開始(その時点でのカウンタ値をＡとする)から時間Ｎだけ経過して、本来はカウンタ値がＡ＋ＮとなっているところをＡに上書きされてしまうと、コンテンツ閲覧アプリは時間が経過していないと判断し、コンテンツの再生を継続してしまう。ＯＳのファイルアクセス制御などの仕組みを用いて不正な値の上書きを防止する仕組みを利用する方法も考えられるが、ノンセキュアＯＳにバグなどの脆弱性が存在した場合、攻撃者がその脆弱性を悪用してカウンタ値をリセットしてしまうような不正な攻撃が成立してしまう。
【００５０】
しかし、上述した方法によれば、ノンセキュアモードで動作するノンセキュアＯＳ部３００は更新データ領域に対してリードアクセスは許可されるもののライトアクセスは禁止されている。従って、ノンセキュアＯＳ部３００を改変したとしても、更新データ領域に対して書きこみを行うことができず、よってカウンタ値をリセットする事もできない。
【００５１】
また、カウンタ値はタイマ割り込みの実行タイミングによって更新される。タイマの割り込み発生間隔等のタイマ部１１の設定はＯＳ切替部１０２によってなされるが、この設定のためのレジスタのアドレスをセキュア領域となるように設定する事で、タイマ部１１の設定をノンセキュアＯＳから行う事を禁止する事ができる。これにより、ノンセキュアＯＳ部３００からタイマ部１１の設定を変更することができなくなるため、ノンセキュアＯＳ部３００が不正に改変されたとしても、タイマ部１１Ａによる割り込みはセキュアモニタ部１００を経由して確実にセキュアＯＳに通知する事を実現できる。タイマ部１１ＡはＯＳ切替部１０２によって設定された周期に従って定期的に割り込みを通知し、ノンセキュアＯＳ部３００が処理中であっても、強制的にノンセキュアＯＳ部３００を一次的に停止してセキュアＯＳ部２００ａを実行させる。これにより、セキュアＯＳ部２００ａはノンセキュアＯＳ部３００の状態に限らず定期的に処理を行う事ができる。
【００５２】
なお、本実施形態では周期的にセキュアＯＳ部２００が行う処理の一例としてカウンタ値を更新する処理を示した。本実施形態のポイントはノンセキュアＯＳ部３００に依存せずセキュアＯＳ部２００が定期的な処理を行う事を実現する事であり、カウンタ値の更新に限定するものではない。また、セキュアＯＳ部２００の処理としてカウンタ値をノンセキュアＯＳ部３００からリードアクセス可能なセキュア領域に書き出す処理も記述したが、この書き出し処理は必須の構成ではない。
【００５３】
（第２の実施形態）
次に第２の実施形態について説明する。第１の実施形態では、一つのメインプロセッサ部２にセキュアモードとノンセキュアモードの二つの排他的な状態を持たせ、セキュアモードで実行されるＯＳ（セキュアＯＳ部２００）とノンセキュアモードで実行されるＯＳ（ノンセキュアＯＳ部３００）を切り替えながら実行させる構成を示した。さらに、タイマ部１１がタイマ割り込みを生成した場合、ノンセキュアＯＳ部３００の処理を一時的に停止させてセキュアＯＳ部２００の処理を実行させる事が可能な構成を示した。ところで、第１の実施形態ではセキュアＯＳ部２００が更新するカウンタ値を暗号化せずに平文でノンセキュアＯＳ部３００と共有するメインメモリ部５の領域に出力していた。第２の実施形態では、セキュアＯＳ部２００がカウンタ値を暗号化してメインメモリ部５の領域に出力するものである。
【００５４】
図７は、第２の実施形態で説明する情報処理装置のメインプロセッサ部２で動作するソフトウェアの構成の一例を示している。ハードウェア構成は第１の実施形態と同じ構成でよい。図２との違いはセキュアＯＳ部２００ｂに鍵管理部２０６、暗号処理部２０７を新たに備えている点である。
【００５５】
暗号処理部２０７は、データ更新部２０２で更新したカウンタ値を暗号アルゴリズムによって鍵管理部２０６が保持する鍵を用いて暗号化する処理部である。鍵管理部２０６が鍵をメインメモリ部５で管理する場合、セキュア領域の中でもノンセキュアモードからリードとライトのアクセスが禁止される領域に配置する。暗号アルゴリズムとして、ＡＥＳやＤＥＳ、ＲＳＡ等のよく知られたアルゴリズムを用いればよい。公開鍵アルゴリズムでもよいし、共通鍵アルゴリズムでもよい。
【００５６】
鍵管理部２０６は、暗号処理部２０７でカウンタ値を暗号化するための鍵を保持する処理部である。データ更新部２０２は、暗号処理部２０７を用いて更新したカウンタ値を暗号化する。そして、データライト部２０４に対してその暗号化したデータをメインメモリ部５に書きこむよう指示する処理を行う。さらにデータ更新部２０２はメインメモリ部５に更新した暗号化カウンタ値を書きこんだ後、セキュアＯＳ遷移命令呼び出し部２０３を実行する。
【００５７】
セキュアモニタメモリ設定部１０３がメインメモリ部５のメモリ領域を区分けする構成は図３と同様でよい。図３では、セキュアＯＳ部２００のデータライト部２０４が平文の更新データをリード許可・ライト禁止に設定したセキュア領域にライトしていたが、ここでは暗号化した更新データをリード許可・ライト禁止に設定したセキュア領域にライトする。第１の実施形態とは異なり、第２の実施形態ではカウンタ値は暗号化されている。これにより、仮にノンセキュアＯＳが改変されたり、ノンセキュアＯＳ上で動作する不正プログラムが平文のカウンタ値を取得したりする事はできない。
【００５８】
なお、メインメモリ部５のメモリ領域は図８に示すような構成になっていてもよい。図３との違いは、更新データをノンセキュア領域に配置する点である。セキュアＯＳ部２００のデータライト部２０４はメインメモリ部５のノンセキュア領域に暗号化カウンタ値を書きこむ。図４に示したように、ノンセキュア領域はノンセキュアモードからリードライトアクセスが許可されている。ノンセキュアＯＳやノンセキュアＯＳ上で動作する不正プログラムは暗号化カウンタ値の値を改変する事が可能である。ところが、第１の実施形態とは異なり、第２の実施形態ではカウンタ値は暗号化されている。これにより、仮にノンセキュアＯＳが改変されたり、ノンセキュアＯＳ上で動作する不正プログラムが暗号化カウンタ値の値を改変しようと試みたりしたとしても、更新データを破壊する事はできてもノンセキュアＯＳや不正プログラムは正しい鍵を有しないため暗号化カウンタ値を意図した値に改変することはできない。
【００５９】
図９は、第２の実施形態におけるタイマ割り込み発生時のメインプロセッサ部２の処理動作の一例をまとめたフローチャートを示している。図５との違いはカウンタ値を暗号化して（ステップＳ２０１）、暗号化したカウンタ値をメインメモリ部５に書きこむ（ステップＳ２０２）点である。第２の実施形態では、データ更新部２０２はカウンタ値を更新する。その後、暗号処理部２０７を用いてカウンタ値を暗号化する（ステップＳ２０１）。その暗号化したカウンタ値をデータライト部２０４を使ってメインメモリ部５のノンセキュア領域に出力する（ステップＳ２０２）。そして、セキュアＯＳ遷移命令呼び出し部２０３を実行してＯＳ間遷移処理を実行する。
【００６０】
なお、図７ではカウンタ値をデータ更新部２０２で保持する構成について示したが、データ更新部２０２ではなくメインメモリ部５で保持するようにしてもよい。その構成を図１０に示す。図７との違いは、第２データリード部２０８と復号処理部２０９を新たに備えている点である。第２データリード部２０８はメインメモリ部５のノンセキュア領域の更新データ領域から暗号化カウンタ値を読み込む処理部である。ノンセキュア領域であり、かつこの処理はセキュアモードで行われる事からリードアクセスは正常に行う事ができる。
【００６１】
復号処理部２０９は、第２データリード部２０８で取得した暗号化カウンタ値を暗号アルゴリズムによって鍵管理部２０６が保持する鍵を用いて復号化する処理部である。暗号アルゴリズムが共通鍵方式の場合は、カウンタ値を暗号化したのと同じ鍵を用いて復号する。一方、暗号アルゴリズムが共通鍵方式の場合は、カウンタ値は鍵管理部２０６が管理する公開鍵で暗号化されるが、復号処理部２０９はその公開鍵に対応する秘密鍵にてカウンタ値を復号する。暗号アルゴリズムとして、暗号処理部２０７で用いたものと同じアルゴリズムを用いる。上記では第２データリード部２０８は、メインメモリ部５のノンセキュア領域の更新データ領域から暗号化カウンタ値を読み込む例について示したが、カウンタ値はセキュアＯＳ用データ領域で管理してもよい。すなわち、データ更新部２０２はデータライト部２０４に対して、暗号化カウンタ値をメインメモリ部５の更新データ領域にライトするように指示すると共に、平文のカウンタ値をメインメモリ部５のセキュアＯＳ用データ領域にライトするように指示する。そして、セキュアＯＳ部２００ｃのタイマハンドラ部１０１は平文のカウンタ値をメインメモリ部５のセキュアＯＳ用データ領域からリードして、データ更新部２０２に渡す。このように、現在のカウンタ値をセキュアＯＳ用データ領域で管理するようにしてもよい。
【００６２】
図１１にタイマ割り込み発生時のメインプロセッサ部２の処理動作の一例をまとめたフローチャートを示している。セキュアＯＳ部２００ｃのタイマハンドラ部２０１に処理が遷移するまでは図９と同様の手順でよい。その後、第２データリード部２０８を用いて、ノンセキュア領域から暗号化カウンタ値を読み込む（ステップＳ２０３）。そして、復号処理部２０９を用いて暗号化カウンタ値を復号する（ステップＳ２０４）。データ更新部２０２は平文となったカウンタ値を更新する（Ｓ２０５）。その後は図９と同様の手順でよい。
【００６３】
このようにすることで、カウンタ値をデータ更新部２０２で管理する事が不要となるため、データ更新部２０２の処理を簡易化することが可能となる。
【００６４】
図１２は第２の実施形態における情報処理装置の別例である。図６との違いはデータ更新部２０２の代わりにデータ取得部２１０を備えている点である。これまで、セキュアＯＳがノンセキュアＯＳと共有するデータとしてカウンタ値を想定していた。図１２では新規に取得するデータを想定する。
【００６５】
たとえば、情報処理装置が温度や湿度、雨量、地震計などのセンサー装置である場合、データ取得部はセンサーからデータを取得する処理を行う。また、情報処理装置自体がセンサー装置ではなく、センサー装置からネットワークを介して情報を取得するような装置である場合、データ取得部はネットワーク経由でセンサー装置からデータを取得する処理を行う。そして暗号処理部２０７は、データ取得部２１０で取得したデータを暗号化してメインメモリ部５に出力する。その後の処理は図８と同様である。これにより、ノンセキュアＯＳ部３００の処理を実行していたとしてもタイマ部１１によりデータ取得部２１０が定期的に実行されるため、定期的なデータの取得が可能となる。さらにセンサー装置から取得したデータは暗号化してノンセキュアＯＳ部３００に渡されるため、ノンセキュアＯＳ上で動作する不正プログラムが平文の値を取得する事はできないし、暗号化された値を改変しようと試みたとしても、ノンセキュアＯＳや不正プログラムは正しい鍵を有しないため値を意図した値に改変することはできない。
【００６６】
なお、図７、図１０ではデータ更新部２０２が暗号処理部２０７を用いて暗号化したカウンタ値のみメインメモリ部５に出力する形態について示したが、暗号化したカウンタ値と暗号化前の平文のカウンタ値を両方メインメモリ部５に出力するようにしてもよい。この場合のセキュアモニタメモリ設定部１０３がメインメモリ部５のメモリ領域を区分けする一例を図１３に示す。
【００６７】
図１３に示すように、セキュアＯＳ部２００のデータライト部２０４はメインメモリ部５のリード許可・ライト禁止に設定されたセキュア領域に暗号化カウンタ値と平文のカウンタ値の両方を書きこむ。この用途としては、たとえば情報処理装置がカウンタ値をユーザに提示するための表示用と、情報処理装置がサーバに暗号化カウンタ値を送信し、サーバがカウンタ値を処理するための処理用の二つを提供する事が考えられる。そのシステムの全体構成を図１４に示す。
【００６８】
図７や図１０に示したノンセキュアＯＳとの違いは暗号化データリード部３０４ａ、データ送信部３０５、平文データリード部３０４ｂ、データ出力部３０６を備えている点である。また、情報処理装置はインターネットなどのネットワークを介して検証サーバ４００に接続されている。また、情報処理装置はディスプレイ部５００に接続されている。
【００６９】
ディスプレイ部５００は、情報処理装置から送信されるデータを表示させるためのモニター装置である。情報処理装置とはＤＶＩやＨＤＭＩ（登録商標）やなどのディスプレイインターフェースを介して接続されている。なお、情報処理装置にデータ表示用デバイスが内蔵されている場合には、このディスプレイ部は必須の構成要素ではない。
【００７０】
暗号化データリード部３０４ａは、メインメモリ部５から暗号化カウンタ値をリードする処理を行う。データ送信部３０５は、ＴＣＰ／ＩＰなどの通信処理を行い検証サーバ４００と接続し、暗号化カウンタ値を検証サーバ４００に送信する処理を行う。平文データリード部３０４ｂは、メインメモリ部５から平文カウンタ値をリードする処理を行う。データ出力部３０６は、ディスプレイ部５００に平文カウンタ値を出力する処理を行う。
【００７１】
検証サーバ４００は、内部にデータ受信部４０１、鍵管理部４０３、データ復号部４０２を備えている。データ受信部４０１は、ＴＣＰ／ＩＰなどの通信処理を行い情報処理装置と接続し、暗号化カウンタ値を情報処理装置から受信する処理を行う。鍵管理部４０３は、受信した暗号化カウンタ値を復号するための鍵を管理しておく処理部である。情報処理装置の鍵管理部２０６に保存されている鍵(暗号鍵)に対応する鍵(復号鍵)が保存されている。データ復号部４０３は鍵管理部４０３に保存されている鍵を用い、データ受信部４０１で受信した暗号化カウンタ値を復号する処理部である。なお、この実施形態では、情報処理装置が暗号処理部２０７を用いてカウンタ値を暗号化する例について説明してきたが、暗号処理ではなく署名処理でもよい。この場合、データ復号部４０３は署名検証処理となる。すなわち、検証サーバ４００の鍵管理部４０３は情報処理装置の鍵管理部２０６に保存された署名鍵に対応する検証鍵を管理し、カウンタ値に付与された署名を検証する処理をデータ復号部４０３が行ってもよい。
【００７２】
以上の構成は情報処理装置をスマートメータのような消費電力を計量する計量器として利用する場合に特に有用である。スマートメータの機能として、従来の計量器(電力計量器)と同様に現在の消費電力や、これまでに消費した電力量を表示する機能を持つ。これはユーザに現在の電力消費量（電力消費データ）を示すことで、節電の意識を高める事に利用される。この表示用の電力消費データはユーザの意思によって、たとえば月の初めなどに値をリセットしても構わない。一方、スマートメータはこれに加え、通信機能を用いて消費した電力量をネットワーク経由で接続されたサーバに送信する。このサーバに送信されるデータはユーザに課金するために用いられる。仮にサーバに送信されるデータが情報処理装置内でリセットなど改変されてしまうと、本来、ユーザが電力を消費しているにも関わらず、サーバには本来消費した電力量よりも少ない値が通知されるため、正しく課金する事ができない。また、電力消費量は生活スタイルを反映しているためユーザのプライバシー情報とみなすこともできる。従って、ネットワーク経由で送信する際、ユーザとサーバ以外の第３者にデータの内容を知られる事のないように保護して送信する事が望ましい。従って、このサーバに送信される電力消費量は暗号化ないし署名によって改変を防ぐ事が望ましい。
【００７３】
このように、同じデータであっても、目的によって平文で出力する場合と、暗号化する場合の二つの使い道が考えられる。これまでに示した構成によって、この目的を達成する事ができる。なお、図１３では、セキュアＯＳ部２００ｄのデータライト部２０４が暗号化更新データと平文更新データをリード許可・ライト禁止のセキュア領域に出力する例について示したが、ここでのポイントは暗号化カウンタ値と平文カウンタ値の両方をメインメモリ部５に出力する点であって、セキュアＯＳ部２００のデータライト部２０４はこれらの値のいずれかもしくは両方をノンセキュア領域に出力してもよい。
【００７４】
なお、図１２及び図１４ではノンセキュアＯＳでカウンタ値の復号を行わない構成を示したが、もちろんノンセキュアＯＳでカウンタ値の復号をしてもよい。その場合の構成を図１５に示す。図１２との違いは、鍵管理部３０７とデータ復号部３０８を備えている点である。
【００７５】
鍵管理部３０７は、メインメモリ部５からリードした暗号化カウンタ値を復号するための鍵を管理しておく処理部である。セキュアＯＳ部２００ｄの鍵管理部２０６に保存されている鍵(暗号鍵)に対応する鍵(復号鍵)が保存されている。
【００７６】
データ復号部３０８は、鍵管理部３０７に保存されている鍵を用い、データリード部３０４でリードした暗号化カウンタ値を復号する処理部である。この構成では、タスク実行部３０３にて、復号したカウンタ値を利用することができる。なお、暗号化カウンタ値を復号するための鍵や、カウンタ値を攻撃者から容易に不正取得されないように鍵管理部３０７及びデータ復号部３０８は難読化などの手段を用いて、保護する事が望ましい。
【００７７】
これまでの説明では、カウンタ値を平文で出力する(図２)か、暗号化して出力する(図７)か、平文と暗号文の両方を出力する(図１２)かを限定していたが、ノンセキュアＯＳから指定できるようになっていてもよい。図１６にその時の情報処理装置の構成を示す。図１６は、セキュアＯＳ部２００ｆに出力モード設定部２１１を新たに備えている点、ノンセキュアＯＳ部３００ｃにモード設定部３０９とノンセキュアＯＳ遷移命令呼び出し部３１０を新たに備えている点である。
【００７８】
ノンセキュアＯＳ部３００ｃのモード設定部３０９は、カウンタ値を暗号化してメインメモリ部５に出力するか、平文のまま出力するか、暗号化カウンタ値と平文カウンタ値を両方出力するかを指定する処理部である。なお、この通知はメインメモリ部５を介して行えばよい。すなわち、モード設定部３０９はどのようにカウンタ値を出力すべきかを示す情報(出力方法通知データ)をメインメモリ部５にライトする。そして、ノンセキュアＯＳ遷移命令呼び出し部３１０に、セキュアモードに遷移するよう依頼する。
【００７９】
図１７にセキュアモニタメモリ設定部１０３がメインメモリ部５のメモリ領域を区分けする一例を示す。モード設定部３０９はノンセキュアモードで動作するノンセキュアＯＳ上で実行されるが、図１７に示すように出力方法通知データ領域はノンセキュア領域として設定されているため、モード設定部３０９は正常に書きこむ事ができる。
【００８０】
ノンセキュアＯＳ遷移命令呼び出し部３１０はメインプロセッサ部２でＯＳ切り替え命令を実行する処理部である。前述のようにメインプロセッサ部２でＯＳ切り替え命令が実行されると、メインプロセッサ部２はセキュアモニタ部１００のＯＳ切替部１０２に処理を遷移させる。そして、前述のようにＯＳ切替部１０２がメインプロセッサ部２の動作状態をノンセキュアモードからセキュアモードに切り替える処理を行う。
【００８１】
出力モード設定部２１１は、メインメモリ部５の出力方法通知データに書きこまれた値から、カウンタ値を暗号処理部を用いて暗号化してデータライト部２０４に出力するか、平文のまま出力するか、暗号化カウンタ値と平文カウンタ値を両方出力するかを決定し、その決定した出力方法をデータ更新部２０２に通知する処理部である。データ更新部２０２は出力モード設定部２１１からの通知に従い、平文のカウンタ値のみデータライト部２０４に出力するか、暗号化したカウンタ値のみ出力するか、暗号化したカウンタ値と平文のカウンタ値の両方を出力するか、いずれかの処理を行う。
【００８２】
図１８はモード設定部３０９が出力方式を指定する際のメインプロセッサ部２の処理動作の一例をまとめたフローチャートを示している。まずノンセキュアＯＳ実行中に、モード設定部３０９がカウンタ値の出力方式を選択し、その結果をメインメモリ部５の出力方法通知データ領域にライトする（ステップＳ３０１）。そして、ノンセキュアＯＳ遷移命令呼び出し部３１０を使って、ＯＳ間遷移処理を実行するようメインプロセッサ部２に指示する（ステップＳ３０２）。
【００８３】
メインプロセッサ部２はセキュアモニタ部１００のＯＳ切替部１０２に処理を遷移させる。ＯＳ切替部１０２はＯＳ間遷移処理を実行する（ステップＳ３０３）。そして、呼び出し元がモード設定部３０９である事を認識し、セキュアＯＳ部２００ｆの出力モード設定部２１１を実行する（ステップＳ３０４）。出力モード設定部２１１は出力方法通知データ領域の値を読み出し、カウンタ値の出力方式を識別する（ステップＳ３０５）。そして、その出力方式をデータ更新部２０２に通知する。以後、データ更新部２０２は、この指示された出力方式を選択し、カウンタ値の値をメインメモリ部５に出力する（ステップＳ３０６）。そして出力モード設定部２１１はセキュアＯＳ部２００ｆのセキュアＯＳ遷移命令呼び出し部２０３を呼び出し、メインプロセッサ部２でＯＳ切り替え命令を実行する（ステップＳ３０７）。その後は、図１１などセキュアＯＳからノンセキュアＯＳに遷移する処理と同等の処理を行えばよい。
【００８４】
なお、ここではモード設定部３０９が３種類の出力方法の中から一つを選ぶ方法について説明したが、暗号化したカウンタ値のみ出力するか、暗号化したカウンタ値と平文のカウンタ値の両方を出力するか、の２種類の出力方法の中から一つを選び、平文のカウンタ値を出力モード設定部２１１に出力する方法が選択できないようになっていてもよい。同様に、平文のカウンタ値しか選択できないようになっていてもよい。
【００８５】
なお、ここではモード設定部がノンセキュアＯＳ部３００に存在する構成について説明したが、モード設定部はセキュアモニタ部１００に存在してもよい。その場合、ノンセキュアＯＳ遷移命令呼び出し部３１０は不要であり、モード設定部は情報処理装置の起動時の初期化処理の一手順として、どの出力方式を選ぶか出力装置設定部に通知するようになっていてもよい。
【００８６】
（第３の実施形態）
第１の実施形態及び第２の実施形態では、メインプロセッサ部２からメインメモリ部５へのアクセス制御を行うアドレス空間制御部３への設定は情報処理装置の起動時の初期化処理の一手順として行う事を想定していた。第３の実施形態では、情報処理装置の実行中にノンセキュアＯＳ部３００ｄからメインメモリ部５へのアクセス制御を設定する構成について示すものである。
【００８７】
図１９は、第３の実施形態で説明する情報処理装置のメインプロセッサ部２で動作するソフトウェアの構成の一例を示している。ハードウェア構成は第１の実施形態と同じ構成でよい。図２との違いはノンセキュアＯＳ部３００ｄに領域設定部３１１を新たに備えている点である。ノンセキュアＯＳ部３００ｄの領域設定部３１１は、どのメモリエリアをどのようなアクセス権に設定するかをアドレス空間制御部３に設定する処理部である。
【００８８】
図２０に領域設定部３１１がアドレス空間制御部３に設定した後のメインメモリ部５のメモリ領域を区分けする一例を示す。情報処理装置の起動直後、メインメモリ部５のメモリ領域は図３のように設定されている。ノンセキュアＯＳ部３００ｄの領域設定部３１１はメインメモリ部５を図２０のように設定する。すなわち、ノンセキュアＯＳ部３００ｄを配置する領域をセキュア領域として指定する。
【００８９】
さらに、図２０ではメモリエリア設定レジスタが二つの領域に分かれている。この理由を以下に示す。メモリ領域はノンセキュアＯＳから設定変更可能な領域（ノンセキュア領域）と設定変更不可能な領域（セキュア領域）の二つに分ける必要がある。たとえば、セキュアモニタ部１００やセキュアＯＳ部２００はノンセキュアＯＳ部３００ｄからの改変を防止するために、セキュアモニタ部１００やセキュアＯＳ部２００が配置される領域をセキュア領域としてノンセキュアＯＳからリード・ライト禁止になるように設定する必要がある。この領域が情報処理装置起動後にノンセキュアＯＳ部３００ｄの領域設定部３１１によってライト許可に設定されてしまうと、セキュアモニタ部１００やセキュアＯＳ部２００がノンセキュアＯＳ部３００から改変される恐れがある。このため、これらの領域はノンセキュアＯＳ部３００ｄの領域設定部３１１によって設定変更不可能な領域として設定しておく必要がある。このようにセキュアモニタ部１００やセキュアＯＳ部２００が配置される領域のアクセス権を設定するレジスタがメモリエリア設定レジスタ＃１である。すなわち、メモリエリア設定レジスタ＃１の設定を変更すると、セキュアモニタ部１００やセキュアＯＳ部２００の領域に対するアクセス権が変更されることになる。メモリエリア設定レジスタ＃１へのアクセス権の設定は、第１の実施形態及び第２の実施形態と同様、セキュアモニタメモリ設定部１０３によって情報処理装置の起動時の初期化処理の一部としてなされる。メモリエリア設定レジスタ＃１自身はセキュア領域として設定されているため、ノンセキュアＯＳから値を変更する事はできない。
【００９０】
一方、ノンセキュアＯＳ部３００ｄが配置される領域は図３に示すように、情報処理装置の起動直後はノンセキュア領域として設定されている。これを領域設定部３１１によってライト禁止のセキュア領域として設定すると、仮にノンセキュアＯＳに脆弱性となるバグが混入しており、ノンセキュアＯＳの起動後に、ノンセキュアＯＳ部３００ｄのメモリ領域を改変するようなマルウェアにノンセキュアＯＳ部３００ｄが感染したとしても、このマルウェアによるメモリ書き換えを防止することが可能となる。ノンセキュアＯＳのデータ領域はノンセキュアモードで動作するＯＳ、すなわちノンセキュアＯＳ部３００ｄからリードとライトのアクセスをする必要があるため、ライト禁止に設定する事はできない。一方、コード領域はライト禁止にしても問題ない。一般的に、メインメモリ部５のどの領域をノンセキュアＯＳ部３００ｄのコード領域として設定し、どの領域をデータ領域として設定するかはノンセキュアＯＳ部３００が管理している。よって、情報処理装置のノンセキュアＯＳ起動後に、自身の管理する情報からコード領域のみリード許可・ライト禁止となるように設定すればよい。このノンセキュアＯＳ部３００ｄの領域はノンセキュアＯＳ部３００ｄの領域設定部３１１によって設定変更可能な領域として設定しておく必要がある。このノンセキュアＯＳ部３００ｄに対するアクセス権の設定を行うためのレジスタがメモリエリア設定レジスタ＃２である。すなわち、メモリエリア設定レジスタ＃２の設定を変更すると、ノンセキュアＯＳ部３００ｄの領域に対するアクセス権が変更されることになる。なお、ノンセキュアＯＳ部３００ｄからライト禁止するようにメモリ設定レジスタ＃２を設定した後に、再びライト許可するようにメモリ設定レジスタ＃２の内容を上書きされる事を防止するために、ノンセキュアＯＳ部はメモリ設定レジスタ＃２自体をノンセキュアＯＳ部３００ｄからライト禁止するように設定してもよい。
【００９１】
図２１は、図１９の別例である。図１９との違いは、ノンセキュアＯＳ部３００ｅにノンセキュアＯＳ遷移命令呼び出し部３１０を備えている点、領域設定部３１１の代わりに領域指定部３１２を備えている点、セキュアＯＳ部２００ｇに領域設定部２１２を新たに備えている点である。
【００９２】
図１９ではノンセキュアＯＳ部３００ｅの領域設定部３１１は直接、アドレス空間制御部３に対して、ノンセキュアＯＳ部３００ｅのメモリ領域のアクセス権を設定していた。図２１では、ノンセキュアＯＳ部３００ｅからどのようなアクセス権に設定すべきかをセキュアＯＳ部２００ｇの領域設定部２１２に通知し、アドレス空間制御部３に対するアクセス権の設定はセキュアＯＳ部２００ｇの領域設定部２１２から施すものである。すなわち、ノンセキュアＯＳ部３００ｅからは直接アドレス空間制御部３に設定を施さない。
【００９３】
領域指定部３１２は、どのメモリエリアをどのようなアクセス権に設定するかを設定する処理部である。この設定はメインメモリ部５を介して行えばよい。すなわち、メモリエリアの指定とアクセス権の設定を示す情報(アクセス制御情報)をメインメモリ部５にライトする。そして、ノンセキュアＯＳ遷移命令呼び出し部３１０に、セキュアモードに遷移するよう依頼する。
【００９４】
ノンセキュアＯＳ遷移命令呼び出し部２０３はメインプロセッサ部２でＯＳ切り替え命令を実行する処理部である。前述のようにメインプロセッサ部２でＯＳ切り替え命令が実行されると、メインプロセッサ部２はセキュアモニタ部１００のＯＳ切替部１０２に処理を遷移させる。そして、前述のようにＯＳ切替部１０２がメインプロセッサ部２の動作状態をノンセキュアモードからセキュアモードに切り替える処理を行う。
【００９５】
領域設定部２１２は、メインメモリ部５にライトされたアクセス制御情報をリードし、アドレス空間制御部３に対してその設定を施す。
【００９６】
図２２に領域設定部２１２がアドレス空間制御部３に設定した後のメインメモリ部５のメモリ領域を区分けする一例を示す。情報処理装置の起動直後、メインメモリ部５のメモリ領域は図３のように設定されている。領域設定部は図２２のように設定する。すなわち、ノンセキュアＯＳ部３００ｅを配置する領域をリード許可ライト禁止のセキュア領域として指定する点は図２０と同様である。この他にアクセス権設定領域がノンセキュア領域として定義されている。セキュアＯＳ部２００の領域設定部２１２は、このアクセス権設定領域から領域指定部３１２がライトしたアクセス制御情報をリードし、メモリエリア設定レジスタを経由してアドレス空間制御部３に設定を施す。この際、領域設定部２１２は、アクセス制御情報をチェックし、アクセス権の変更対象の領域と、新たに設定しようとしているアクセス権を識別し、変更対象の領域がノンセキュアＯＳ部３００ｅの領域もしくはノンセキュア領域であれば設定変更を許可し、セキュアモニタ部１００またはセキュアＯＳ部２００の領域であれば設定変更を禁止する。また、アクセス権もチェックし、領域指定部でノンセキュアＯＳ領域をノンセキュア領域からライト禁止リード許可のセキュア領域に変更した後、ノンセキュアＯＳ上の不正なプログラムによってノンセキュア領域に解除しようとする攻撃を防ぐために、ノンセキュアＯＳ部３００ｅを格納した領域が一旦、セキュア領域に変更されたならばノンセキュア領域への変更に戻す事を禁止するようにしてもよい。
【００９７】
図２３は領域指定部がアドレス空間制御部３に設定するアクセス権を指定する際のメインプロセッサ部２の処理動作の一例をまとめたフローチャートを示している。領域指定部３１２はノンセキュアＯＳ部３００を配置する領域をリード許可ライト禁止のセキュア領域として指定するよう、領域とアクセス権を指定するデータをアクセス権設定領域にライトする（ステップＳ４０１）。アクセス権設定領域はノンセキュア領域として指定されているため、このライトは正常に実行される。そして、ノンセキュアＯＳ遷移命令呼び出し部３１０を使って、ＯＳ間遷移処理を実行するようメインプロセッサ部２に指示する（ステップＳ４０２）。
【００９８】
メインプロセッサ部２はセキュアモニタ部１００のＯＳ切替部１０２に処理を遷移させる。ＯＳ切替部１０２はＯＳ間遷移処理を実行する（ステップＳ４０３）。そして、呼び出し元が領域指定部３１２である事を認識し、セキュアＯＳ部２００ｇの領域設定部２１２を実行する。領域設定部２１２はアクセス権を設定する領域と、その領域に対するアクセス権に関する情報をアクセス権設定領域から読み出す（ステップＳ４０４）。そして、その設定が許可されたものであるかを判別する（ステップＳ４０５）。セキュアＯＳ部２００ｇに対するノンセキュア領域への設定など禁止された設定であれば、以降の処理は行わない。許可された設定であれば、アドレス空間制御部３に対して設定を施す（ステップＳ４０６）。このアクセス権の設定はメモリエリア設定レジスタを経由して行われる。領域設定部２１２はセキュアＯＳ部２００ｇのセキュアＯＳ遷移命令呼び出し部２０３を呼び出し、メインプロセッサ部２でＯＳ切り替え命令を実行する（ステップＳ４０７）。その後は、図１１などセキュアＯＳからノンセキュアＯＳに遷移する処理と同等の処理を行えばよい。
【００９９】
このように、第３の実施形態ではメインプロセッサ部２からメインメモリ部５へのアクセス制御を行うアクセス権の設定を、情報処理装置の起動後に設定する事を可能とする構成について示した。装置起動前にアクセス権を設定する構成では、メインメモリ部５のどの領域にどのようなプログラム(オペレーティングシステム、セキュアモニタ)を配置するか、あらかじめ把握しておき、その配置に従ってアクセス権を適切に設定する必要があった。特に、ノンセキュアＯＳはアップデート等によりイメージサイズが変化する可能性があり、アクセス権の領域もアップデートしたイメージサイズに合わせて適切に設定する必要がある。ノンセキュアＯＳは自身のイメージサイズを把握しており、第３の実施形態では情報処理装置の起動後にノンセキュアＯＳからアクセス権を設定する事が可能であるため、アクセス権の適切な設定がノンセキュアＯＳのアップデートにも容易に対応する事が可能となる。
【０１００】
（第４の実施形態）
従来の技術では、メインプロセッサにセキュアモードと、ノンセキュアモードの二つのモードを持たせ、さらにメモリ空間に対するハードウェアのアクセス制御機構により、ノンセキュアモードからセキュアモードの領域を読んだり、改変したりする事を防止する構成について述べられている。また、第１から第３の実施形態では、メインメモリ部５のある特定の領域を情報処理装置起動後にノンセキュアモードから書きこみ禁止に設定する方法について述べた。しかしながら、メインメモリに対するアクセス権の設定後にノンセキュアモードで動作するソフトウェア(ノンセキュアＯＳ部３００)から書きこみ禁止の領域に書き込みを行った場合や、読み込み禁止の領域に読み込みを行った場合の動作については、その詳細な実現方法が従来技術では明らかになっていない。
【０１０１】
本実施形態では、ノンセキュアモードからアクセス禁止と指定されたメモリ領域に対して、ノンセキュアモードでアクセスを行った場合のセキュアＯＳ部２００ｉの動作について述べるものである。ノンセキュアモードからアクセス禁止と指定されたメモリ領域に対してアクセスを行った際に、メインメモリ部５に対するアクセス権違反の原因を調査し、ノンセキュアモードで処理を行う前にセキュアモードでアクションを取る事ができれば、ノンセキュアＯＳ上の誤動作の原因究明に役立てたり、誤動作を引き起こす不正なアプリケーションの実行を中止したりすることが可能となるため有益である。
【０１０２】
なお、アクセス違反としては、ノンセキュアモードからリード禁止に設定されている領域にノンセキュアモードで動作するソフトウェア(ノンセキュアＯＳ)からリードした場合と、ライト禁止に設定されている領域にライトした場合の二つがあるが、ここでは説明を簡略化するためにライト禁止に指定されている領域に対し、ノンセキュアモードからメインメモリ部５に対するライトアクセスがあった場合について説明する。
【０１０３】
図２４にメインプロセッサ部２で動作するソフトウェアの構成の一例を示している。ハードウェア構成は第１の実施形態と同じ構成でよい。図２４に示されるように、ソフトウェアとしては、セキュアモニタ部１００ａ、セキュアＯＳ部２００ｉ、ノンセキュアＯＳ部３００ｆを備えている。セキュアモニタ部１００ａはアボートハンドラ部１０４、ＯＳ切替部１０２、セキュアモニタメモリ設定部１０３を備えている。ＯＳ切替部１０２、セキュアモニタメモリ設定部１０３は、図２に説明したものと同じ機能でよい。ノンセキュアＯＳの構成は図２に説明したものと同じ機能でよい。セキュアＯＳ部２００ｉはセキュアＯＳ遷移命令呼び出し部２０３、データライト部２０４、アボートハンドラ部２１３、アボート原因調査部２１４、ログ生成部２１５を備えている。セキュアＯＳ遷移命令呼び出し部２０３、データライト部２０４は、図２に説明したものと同じ機能でよい。
【０１０４】
アドレス空間制御部３は、ノンセキュアモードからアクセス禁止に指定されているメインメモリ部５の領域に対してノンセキュアモードで動作するソフトウェア(ノンセキュアＯＳ)からデータアクセスがあった場合にアボート例外を発生させる処理部である。
【０１０５】
セキュアモニタ部１００ａのアボートハンドラ部１０４は、ノンセキュアモードからライト禁止に指定されている領域に対し、ノンセキュアモードからデータのライト命令があった時、すなわちデータアボート例外が発生した時にアドレス空間制御部３から呼び出される処理部である。すなわち、メインプロセッサ部２はアドレス空間制御部３からデータアボート例外が発生したことを検出すると、セキュアモニタ部１００ａのアボートハンドラ部１０４に処理を遷移させる。
【０１０６】
ノンセキュアＯＳ部３００ｆのデータライト部３１３は、ノンセキュアモードからライト禁止に指定されているメインメモリ部５の領域にデータをライトする処理部である。セキュアＯＳ部２００ｉのアボートハンドラ部２１３は、セキュアモニタ部１００ａのアボートハンドラ部１０４から呼び出される処理部である。
【０１０７】
アボート原因調査部２１４は、データアボート例外が発生した場合、その原因を特定する処理を行い、ログ生成部２１５にその原因をログとして記録するよう指示する処理部である。ログ生成部２１５は、アボート原因調査部２１４からの指示に基づきデータアボートの原因をログとして記録するためにメインメモリ部５にログの記録を出力する処理部である。
【０１０８】
図２５はノンセキュアモードからライト禁止に指定されている領域に対し、ノンセキュアモードからデータのライト命令があった時のメインプロセッサ部２の処理動作の一例をまとめたフローチャートを示している。ノンセキュアモードで動作するノンセキュアＯＳは、ノンセキュアモードからライト禁止に指定されているメインメモリ部５の領域(たとえば図３のセキュアモニタのコードが配置されている領域(セキュアモニタ領域))にデータのライトを試みたとする（ステップＳ５０１）。このライトはノンセキュアＯＳのバグが原因である場合もあるし、ノンセキュアＯＳが攻撃者によって改変され、セキュアモニタやセキュアＯＳを改変しようとする不正なライト命令である場合もある。
【０１０９】
すると、アドレス空間制御部３がアクセス権違反を検出し、データアボート例外を発生させる。データアボート例外が発生すると、メインプロセッサ部２は処理をセキュアモニタ部１００ａのアボートハンドラ部１０４に遷移させる（ステップＳ５０２）。なお、セキュアモニタメモリ設定部１０３はアドレス空間制御部３がアクセス権違反を検出した場合に、セキュアモニタ部１００のアボートハンドラ部１０４を呼び出すように、あらかじめ設定しておく。この設定は、情報処理装置の起動時の初期化処理の一手順としてなされる。セキュアモニタ部１００ａのアボートハンドラ部１０４はＯＳ切替部１０２を呼び出し（ステップＳ５０３）、メインプロセッサ部２のモードをセキュアモードに切り替え、ノンセキュアＯＳからセキュアＯＳに遷移させ、さらにセキュアＯＳ部２００ｉのアボートハンドラ部２１３を呼び出す（ステップＳ５０４）。
【０１１０】
アボートハンドラ部２１３はアボート原因調査部２１４を呼び出す。アボート原因調査部２１４は、メインプロセッサ部２のレジスタの値と、アボートが発生した領域周辺のメモリ領域を走査し、どの領域でどのような命令によりアボートが発生したのかを調査する（ステップＳ５０５）。たとえば、メインプロセッサ部２のレジスタの値、たとえばプログラムカウンタの値(メインプロセッサ部２が実行した命令のアドレス)を読み出し、そのアドレスもしくは前後のアドレスからアボートの発生原因となった命令を特定し、命令Ａによってライト禁止のアドレスＸに対するライト命令を実行しようとしたためにアボート例外が発生した事や、命令Ａ’によってリード禁止のアドレスＹに対するリード命令を実行しようとしたためにアボート例外が発生したといった事を調査し、その原因となった命令とアクセスしようとしたアドレス、命令に付帯する属性情報に関する情報をログ生成部に送信する（ステップＳ５０６）。ログ生成部２１５はその情報をメインメモリ部５に出力する（ステップＳ５０７）。
【０１１１】
そして、データライト部２０４はセキュアＯＳ部２００ｉのセキュアＯＳ遷移命令呼び出し部２０３を呼び出し（ステップＳ５０８）、メインプロセッサ部２でＯＳ切り替え命令を実行する（ステップＳ５０９）。その後は、図１１などセキュアＯＳからノンセキュアＯＳに遷移する処理と同等の処理を行えばよい。
【０１１２】
なお、ノンセキュアモードからアクセスが禁止されている領域に対し、ノンセキュアモードからアクセスがあった時に、セキュアＯＳ部２００ｉはすべてのログ情報をメインメモリ部５に出力する必要は必ずしもない。その場合のメインメモリ部５のメモリ領域を区分けする一例を図２６に示す。
【０１１３】
この例では、ノンセキュアＯＳ部３００ｆが配置されている領域はセキュアＯＳのアボートハンドラ部２１３を呼び出す。一方、更新データ領域やセキュアモニタが格納されている領域及びセキュアＯＳが格納されている領域にノンセキュアモードからのライト命令があったとしてもセキュアＯＳのアボートハンドラ部２１３を呼び出さない。この時のアクセス権の設定を図２７に示す。
【０１１４】
ノンセキュアモードからメインメモリ部５にアクセスした領域に応じて、セキュアＯＳのアボートハンドラ部２１３を呼び出すか否かを判定する際のメインプロセッサ部２の処理動作の一例をまとめたフローチャートを図２８に示す。
【０１１５】
アドレス空間制御部３がアクセス権違反を検出し、アボート例外を発生させて、アドレス空間制御部３がセキュアモニタ部１００ａのアボートハンドラ部１０４を呼び出すまでは図２５と同一の処理でよい。セキュアモニタ部１００ａのアボートハンドラ部１０４はメインメモリ部５のどの領域でアボート例外が発生したかを調査する（ステップＳ６０１）。そして、特定した発生領域によってセキュアＯＳのアボートハンドラ部２１３を呼び出すか否かを判定する（ステップＳ６０２）。もしも更新データ領域やセキュアモニタ部１００ａが格納されている領域及びセキュアＯＳが格納されている領域だった場合には、以後の処理は行わずに、ノンセキュアＯＳ部３００ｆに処理を戻す。一方、ノンセキュアＯＳ部３００ｆが配置されている領域である場合は、ＯＳ間遷移処理を行い、図２５と同様の処理を行う。
【０１１６】
このようにノンセキュアＯＳ部３００ｆへのライトが発生した場合にのみログを生成する構成にした利点として、ノンセキュアＯＳ部３００ｆのデバッグに利用する事ができる。図２７に示したとおり、ノンセキュアモードからノンセキュアＯＳ部３００ｆへのライトを禁止しているが、攻撃者による不正なノンセキュアＯＳ部３００の改変でなくても、ノンセキュアＯＳ部３００ｆの正当な機能として、ノンセキュアＯＳ部３００ｆが自己改変型機能を備えていたり、ノンセキュアＯＳのコード領域を上書きするようなドライバのインストールを許可したりする場合などでは、ノンセキュアＯＳが自身のコード領域を上書きし、ノンセキュアＯＳの起動後に処理の内容を動的に変更する場合がある。ノンセキュアＯＳ部３００ｆがそのような構成になっている場合に、開発者が開発段階でメインメモリ部５のアクセス権を図２７の構成に設定してノンセキュアＯＳ部３００ｆを実行すると、本来、ノンセキュアＯＳは自身の管理するメモリ領域を変更(上書き)可能であると想定して処理を行う。このため、この処理に失敗した場合、ノンセキュアＯＳは予測不能の事態が発生したとして停止してしまう。一方、セキュアＯＳのログ生成部２１５により、メインメモリ部５のログデータ領域には、ノンセキュアＯＳがアクセスを試みたアドレスや命令が記録されているため、ノンセキュアＯＳの開発者はどのような原因でノンセキュアＯＳが停止したかを知る事ができる。
【０１１７】
同様の仕組みで、ノンセキュアＯＳに対する不正改変を検出し、その記録を残す事ができる。ノンセキュアＯＳ部３００ｆから自己改変型機能を削除したり、ノンセキュアＯＳのコード領域を上書きするようなドライバのインストールを禁止したりした場合、ノンセキュアＯＳ部３００ｆへの書きこみは発生せず、アボート例外も発生しない。もしくは、ノンセキュアＯＳ部３００ｆが自己改変型機能を備えていたり、ノンセキュアＯＳのコード領域を上書きするようなドライバのインストールを許可したりする場合でも、どの領域を上書きするか調査が完了していれば、あらかじめその領域をリードライト許可、すなわちノンセキュア領域に設定しておけばよい。その場合も、アボート例外は発生しない。それにも関わらず、ノンセキュアモードで動作するプログラムから、ノンセキュアモードからライトアクセス禁止に設定したノンセキュアＯＳ部３００が格納されている領域に対するライトが発生する場合は、不正なライトとみなすことができる。ノンセキュアＯＳ部３００ｆへのライトが発生した場合にのみログを生成する事で、ノンセキュアＯＳ部３００ｆで不正プログラムが実行された事の記録を残すことができる。
【０１１８】
同様に、ノンセキュアモードからライトが禁止されているノンセキュアＯＳ部３００ｆのコード領域へのライトであっても、特定の領域であればライトを許可するように構成してもよい。その際のメインプロセッサ部２の処理動作の一例をまとめたフローチャートを図２９に示す。まず、ノンセキュアＯＳ部３００のコード領域へのライトが発生した場合、どの領域へのライト命令ならデータをメインメモリ部５にライトするか、どの領域であればライトしないかをあらかじめセキュアＯＳのアボート原因調査部２１４に登録しておく。この設定処理は機器起動時の処理の一部として行う。
【０１１９】
次にノンセキュアＯＳ部３００ｆのコード領域へのライトが発生した場合、アボート原因調査部２１４で、メインプロセッサ部２のレジスタの値と、アボート例外が発生した周辺のメモリ領域を走査し、どのアドレスへのアクセスでどのような命令によりアボートが発生したのかを調査する（ステップＳ５０５）。もしもアボート原因調査部があらかじめライトを許可すると設定された領域と判断すれば、セキュアＯＳ部２００ｉのデータライト部２０４を利用してメインメモリ部５にデータをライトする（ステップＳ６０３）。すなわち、実際のデータのライト処理はノンセキュアＯＳ部３００ではなく、セキュアＯＳ部２００でなされる事になる。その後の処理は図２８と同じである。なお、この場合、必ずしもログ生成部２１５はログ情報をメインメモリ部５に書きこむ必要はない。
【０１２０】
これにより、ノンセキュアＯＳ部３００ｆからは実際にデータが書きこまれたかのように見せかける事ができるため、ノンセキュアＯＳ部３００ｆが自己改変型機能を備えていたり、ノンセキュアＯＳ部３００ｆのコード領域を上書きしたりするようなドライバのインストールを許可する事が実現可能となる。一方で、ノンセキュアＯＳ部３００ｆのコード領域所定の領域以外に対しての上書きは禁止されるため、ノンセキュアＯＳ上で動作する不正なプログラムがノンセキュアＯＳ部３００ｆのコード領域を上書きする攻撃を防止する事が可能となる。
【０１２１】
また、アボート原因調査部２１４の調査結果に応じて、ログ生成部２１５はログ情報をメインメモリ部５に出力するか否かを判定してもよい。その時のメインプロセッサ部２の処理動作の一例をまとめたフローチャートを図３０に示す。アボート原因調査部２１４はアボート例外が発生した原因を調査し、アボート例外が発生したアドレスと命令をログ生成部２１５に通知する（ステップＳ５０５）。ログ生成部２１５は通知されたアドレスからログの記憶対象領域か否かを判定し、ログをメインメモリ部５にライトするか否かを決定する（ステップＳ７０１）。すなわち、ログ生成部はすべてのアボート例外をデータライト部に送信する訳ではなく、フィルタリング処理を行う。
【０１２２】
以上のように構成することで、ノンセキュアＯＳのバグによって本来禁止されている領域にアクセスをしてしまった場合には、ログを収集せず、ノンセキュアＯＳからの攻撃によるアクセスの場合にはログを記録する事が実現できる。
【０１２３】
これまで、アボート原因調査部２１４が収集した調査結果をログ生成部２１５が記録する方法について説明してきたが、本実施形態はアボート原因調査部２１４が収集した調査結果をログとして記録するに留まらず、調査結果を元にノンセキュアＯＳの動作を変更してもよい。具体的には、アボート例外を発生させたノンセキュアＯＳのプロセス(アプリケーション)を停止させるような構成にしてもよい。
【０１２４】
図３１にアボート例外を発生させたノンセキュアＯＳのプロセスを停止させる際の、メインプロセッサ部２で動作するソフトウェアの構成の一例を示している。図２４との違いは、セキュアＯＳ部２００ｊがログ生成部の代わりにプロセス特定部２１６を備え、ノンセキュアＯＳ部３００ｆに新たにプロセス停止部３１４を備えている点である。
【０１２５】
プロセス特定部２１６は、アボート原因調査部２１４が収集したアボート例外を発生させた命令とアドレスから、ノンセキュアＯＳ部３００ｆで実行していたプロセスのうち、どのプロセスがアボート例外を発生させたのかプロセスを特定する処理部である。プロセス停止部３１４は、プロセス特定部が特定したプロセスを停止させる処理部である。
【０１２６】
図３２にノンセキュアモードからライト禁止に指定されている領域に対し、ノンセキュアモードからデータのライト命令があった時のメインプロセッサ部２の処理動作の一例をまとめたフローチャートを示す。アボート原因調査部２１４が調査結果を収集するまでは、図２５に示した処理と同一でよい。
【０１２７】
その後、プロセス特定部２１６は、アボート原因調査部が収集した情報に加え、さらにメインメモリ部５からノンセキュアＯＳ部３００ｆのどのプロセスがアボート例外を発生させたのかを調査し、プロセスＩＤなどのプロセス情報をメインメモリ部５にライトする（ステップＳ８０１）。そして、セキュアＯＳ遷移命令呼び出し部２０３を呼び出し（ステップＳ８０２）、ＯＳ間遷移処理を実行する（ステップＳ８０３）。ノンセキュアＯＳに遷移後（ステップＳ８０４）、ノンセキュアＯＳ部３００ｆのプロセス停止部３１４は、メインメモリ部５から停止すべきプロセス情報をリードし（ステップＳ８０５）、該当プロセスを停止させる（ステップＳ８０６）。
【０１２８】
なお、図３２では、セキュアＯＳ部２００ｊで動作するプロセス特定部２１６がアボート例外を引き起こしたノンセキュアＯＳ部３００ｆのプロセスを特定する処理を行ったが、この処理をノンセキュアＯＳ部３００ｆで行ってもよい。その場合の構成を図３３に示す。
【０１２９】
図３１との違いは、プロセス特定部３１５がセキュアＯＳではなくノンセキュアＯＳ部３００ｇにある点である。この構成では、セキュアＯＳ部２００ｋがプロセスの特定を行わず、アボート例外を引き起こしたアドレスの通知を行い、そのアドレスを元にノンセキュアＯＳ部３００ｇのプロセス特定部３１５が、そのアドレスを利用しているプロセスを特定し、プロセス停止部３１４で該当プロセスを停止させる。
【０１３０】
この別例として、セキュアＯＳ部２００ｋからノンセキュアＯＳ部３００にＯＳ間遷移を行わずにノンセキュアＯＳ部３００のプロセスを停止させてもよい。その場合の構成を図３４に示す。図３３との違いは、セキュアモニタ部１００ｂにプロセス特定部実行部１０５が新たに備わっている点である。
【０１３１】
また、図３３のプロセス停止部３１４がアプリケーションプロセスとして実行されていたのに対し、図３４ではプロセス停止部３１４とプロセス特定部３１５がノンセキュアＯＳ部３００ｇのカーネル内で実行される。プロセス特定部実行部１０５は、ノンセキュアＯＳ部３００ｇのプロセス特定部３１５を実行する処理部である。この際、セキュアＯＳ部２００ｋからノンセキュアＯＳ部３００ｇへのＯＳ間遷移処理は実行しない。ノンセキュアＯＳ部３００ｇのプロセス特定部とプロセス停止部は実行されるが、ノンセキュアＯＳのコンテキストは復帰しないため、ノンセキュアＯＳ自体の処理は実行されない点がポイントである。
【０１３２】
図３５にこの構成でのメインプロセッサ部２の処理動作の一例をまとめたフローチャートを示す。アボート原因調査部２１４が調査結果を収集するまでは、図２５に示した処理と同一でよい。その後、ノンセキュアＯＳ部３００ｇのアボート原因調査部２１４は、セキュアモニタ部１００のプロセス特定部実行部１０５を呼び出す（ステップＳ９０１）。
【０１３３】
プロセス特定部実行部１０５は、ＯＳ間遷移処理を行うことなく実行され（ステップＳ９０２）、ノンセキュアＯＳのプロセス特定部３１５とプロセス停止部３１４を呼び出し、対象プロセスの特定と停止を行う（ステップＳ９０３）。この際、ノンセキュアＯＳは実行されない。ノンセキュアＯＳの停止対象プロセスの特定と、停止処理が完了すると、ノンセキュアＯＳを実行する事なく、セキュアモニタ部１００ｂのプロセス特定部実行部１０５に処理を戻す。プロセス特定部実行部１０５はアボート原因調査部２１４に処理を戻す。その後、アボート原因調査部２１４はセキュアＯＳ遷移命令呼び出し部２０３を実行する（ステップＳ９０４）。その後の処理は、図２５と同様でよい。
【０１３４】
なお、図２４に示した構成では、アボート原因調査部２１４が収集した調査結果をログ生成部２１５が記録する方法について説明してきたが、ログとして記録するのではなく、調査結果を元に情報処理装置１を停止ないしは再起動させてもよい。図３８にその構成を示す。図２４との違いは、ログ生成部の代わりにリブート部２１９を備えている点である。リブート部２１９は、情報処理装置１を再起動する命令を実行する処理部である。アボート原因調査部２１４は、データアボート例外が発生した場合、その原因を特定する処理を行い、リブート部に対して情報処理装置１を再起動するよう指示する処理を行う。なお、リブート部は再起動の代わりにシステムを停止してもよい。
【０１３５】
なお、図２４に示した構成では、ログ情報を平文としてメインメモリ部５に出力していたが、暗号化して出力してもよい。その場合の構成を図３６に示す。図２４との違いは鍵管理部２１７とログ暗号化部２１８を備えている点である。鍵管理部２１７は、ログ暗号化部２１８で例外発生原因を暗号化するための鍵を保持する処理部である。ログ暗号化部２１８は、アボート原因調査部２１４で調査した例外発生原因を暗号アルゴリズムによって鍵管理部２１７が保持する鍵を用いて暗号化する処理部である。
【０１３６】
以上述べてきたように、本実施形態では、ノンセキュアモードからアクセス禁止と指定されたメモリ領域に対して、アクセスを行った場合のセキュアＯＳ部２００の動作について述べた。アボート例外が発生した場合、ノンセキュアＯＳの処理を中断し、セキュアＯＳ部２００で処理を行う点が特徴である。
【０１３７】
（第５の実施形態）
第３の実施形態では、ノンセキュアＯＳの領域指定部３１２がアドレス空間制御部３に対して、領域とアクセス権の指定をし、セキュアＯＳ部２００の領域設定部２１２がアドレス空間制御部３に対して領域とアクセス権の設定を行う方法について述べた。第３の実施形態では、また、タイマ部１１が生成するタイマ割り込みに応じてセキュアＯＳのデータ更新部２０２が管理するカウンタ値を更新する例について示したが、第４の実施形態では、ノンセキュアモードからアクセス禁止と指定されたメモリ領域に対して、アクセスを行った場合のセキュアＯＳ部２００の動作について述べた。
【０１３８】
第５の実施形態では、これら両方の要素を組み合わせた構成について述べる。図３７に第５の実施形態で説明する情報処理装置のメインプロセッサ部２で動作するソフトウェアの構成の一例を示している。ハードウェア構成は第１の実施形態と同じ構成でよい。図２４との違いは、セキュアＯＳ部２００ｍにデータ更新部２０２とタイマハンドラ部２０１が新たに備わっている点と、セキュアモニタ部１００ｃにタイマハンドラ部１０１が新たに備わっている点である。
【０１３９】
（第６の実施形態）
第１の実施形態では、ノンセキュアＯＳ部に依存せずセキュアＯＳ部が定期的な処理を行う事を実現する方法を示した。この実施形態では、ノンセキュアＯＳ部が停止していないことをセキュアＯＳ部が定期的に検査することで、情報処理装置が停止する時間を短くするものである。ンセキュアＯＳ部はＬｉｎｕｘ（登録商標）のような汎用のオペレーティングシステムを想定している。このため、ノンセキュアモードで動作するオペレーティングシステムやドライバ、アプリケーションに含まれるバグや設定ミスなどによってノンセキュアモードで動作するプログラムが停止したり、無限ループに陥って他の処理ができなくなったりする危険性がある。そこで、セキュアＯＳ部が定期的にノンセキュアＯＳ部の状態を検査する。
【０１４０】
図３９は、第６の実施形態で説明する情報処理装置のメインプロセッサ部で動作するソフトウェアの構成の一例を示している。ハードウェア構成は第１の実施形態と同じ構成でよい。図６との違いは、ノンセキュアＯＳ部３００ｇがタスク実行部の代わりに状態通知部３１５を備えている点、データリード部の代わりにデータライト部３１３を備えている点、セキュアＯＳ部２００ｋがデータ更新部の代わりに状態検査部２２０を備えている点、データライト部の代わりにデータリード部２０５を備えている点、リブート部２１９を備えている点である。
【０１４１】
ノンセキュアＯＳ部３００ｇはスケジューラ部３０２によって一定周期で状態通知部３１５を実行する。状態通知部３１５はデータライト部３１３を使い、状態通知部３１５が実行されたことを示す情報をメインメモリ部５のノンセキュア領域にライトする。この情報としては、カウンタ値でもよいし、乱数でもよい。
【０１４２】
リブート部２１９は、情報処理装置１を再起動する命令を実行する処理部である。タイマ部のタイマ割り込みにより、セキュアモニタ部１００のタイマハンドラ部１０１は周期的に実行される。すなわち、状態検査部２２０は、セキュアモニタ部１００のタイマハンドラ部１０１、セキュアＯＳ部２００ｋのタイマハンドラ部２０１を介して、定期的に実行される。これは第１の実施形態と同様、ノンセキュアＯＳが処理を行っていたとしても強制的に状態検査部２２０が定期的に実行される事を意味する。状態検査部２２０は、タイマハンドラ部２０１からタイマ割り込みの通知を受けると、データリード部２０５を使い、メインメモリ部５から状態通知部がライトした情報をリードして、その情報が更新されているか否かを検査する。この検査は、たとえばカウンタ値であればカウンタ値が更新されているか、乱数であれば前にリードした値と異なる値となっているかを検査すればよい。もし更新されていると判断した場合は、状態検査部２２０は、セキュアＯＳ遷移命令呼び出し部２０３を経由して、ノンセキュアＯＳ部３００ｇに処理を遷移させる。もし更新されていない場合は、状態検査部２２０は、ノンセキュアＯＳ部３００ｇが何らかの異常状態にあると判断し、リブート部２１９を呼び出し、情報処理装置１を再起動させる。なお、情報処理装置１を再起動させる方法として、情報処理装置１自体を再起動させる方法と、ノンセキュアＯＳ部のみ再起動させる方法がある。情報処理装置１自体を再起動させる場合は、メインプロセッサ部２でリセット命令を実行すればよい。ノンセキュアＯＳ部のみ再起動させる場合は、セキュアモニタ部で管理しているノンセキュアＯＳ部のコンテキストと、ノンセキュアＯＳ部自体が管理するコンテキストをクリアしてノンセキュアＯＳ部の起動処理を実行すればよい。
【０１４３】
なお、状態通知部３１５がメインメモリ部の情報を更新する前に、情報が更新されているかどうかの検査を状態検査部２２０が行ってしまう事を防ぐために、情報が更新されているか否かを状態検査部２２０が検査する間隔は、状態通知部３１５がメインメモリ部５の情報を更新する間隔よりも大きい事が望ましい。
【０１４４】
もし、ノンセキュアＯＳ部３００ｇ、ノンセキュアＯＳ部３００ｇにインストールされたドライバ、またはノンセキュアＯＳ部３００ｇで動作するアプリケーションに含まれるバグや設定ミスなどによって、ノンセキュアＯＳ部３００ｇが停止したり、無限ループに陥ったりした場合、スケジューラ部が３０２呼ばれず、結果として状態通知部３１５も実行されない。従って、ノンセキュアＯＳ部３００ｇが正常な状態にある場合には、定期的にスケジューラ部３０２が実行され、状態通知部３１５が情報を更新していると期待できる。本実施形態では、仮にノンセキュアＯＳ部３００ｇが停止した場合でも、セキュアＯＳ部２００ｋが定期的に実行される。このため、状態通知部３１５が更新する情報を元にノンセキュアＯＳ部３００ｇが正常な状態にあるか停止状態にあるかを判別し、停止状態の場合には情報処理装置を再起動させる事により、ノンセキュアＯＳ部３００ｇの停止時間を短くすることができる。
【０１４５】
（第７の実施形態）
第１の実施形態では、ノンセキュアＯＳ部に依存せずセキュアＯＳ部が定期的な処理を行う事を実現する方法を示した。この実施形態では、ノンセキュアＯＳ部が改ざんされていないことをセキュアＯＳ部が定期的に検査することで、不正なプログラムによるノンセキュアＯＳ部の攻撃を防止するものである。
【０１４６】
図４０は、第７の実施形態で説明する情報処理装置のメインプロセッサ部で動作するソフトウェアの構成の一例を示している。ハードウェア構成は第１の実施形態と同じ構成でよい。図６との違いは、ノンセキュアＯＳ部３００ｈがタスク実行部の代わりに改ざん検出部３１６を備えている点、期待値格納部３１７を備えている点、セキュアＯＳ部２００ｌがデータ更新部の代わりにメモリ検査部２２１を備えている点、データライト部がない点、リブート部２１９、期待値格納部２２２を備えている点である。
【０１４７】
ノンセキュアＯＳ部３００ｈの期待値格納部３１７はノンセキュアＯＳの正規の状態（改ざんされていない状態）のハッシュ値を格納する処理部である。このハッシュ値は情報処理装置の起動に先立ち、あらかじめ計算しておいた値が格納されている。ノンセキュアＯＳ部３００ｈはスケジューラ部３０２によって一定周期で改ざん検出部３１６を実行する。改ざん検出部３１６は、メインメモリ部５のノンセキュアＯＳ部３００ｈが配置された領域、すなわちノンセキュアＯＳ領域が改ざんされていないかを定期的にチェックする。このチェックは、ノンセキュアＯＳ領域のデータを読み込み、期待値格納部３１７に格納された値と一致するか検査する処理である。もちろん、ノンセキュアＯＳ領域のすべてのデータを一度に読み込んでハッシュ値を計算する必要はなく、中間データを計算してメインメモリ部５に書きこみ、スケジューラ部３０２によって別の処理を行った後に、中間データをメインメモリ部５からリードして処理を再開するようにしてもよい。この場合、中間データがノンセキュアＯＳ部３００ｈから改ざんされないようにセキュア領域に配置する。
【０１４８】
セキュアＯＳ部２００ｌの期待値格納部２２２はノンセキュアＯＳの改ざん検出部３１６の正規の状態（改ざんされていない状態）のハッシュ値を格納する処理部である。このハッシュ値は情報処理装置の起動に先立ち、あらかじめ計算しておいた値が格納されている。
【０１４９】
リブート部２１９は、情報処理装置１を再起動する命令を実行する処理部である。なお、リブート部２１９は必須の構成ではない。タイマ部１１のタイマ割り込みにより、セキュアモニタ部１００のタイマハンドラ部１０１は周期的に実行される。すなわち、メモリ検査部２２１は、セキュアモニタ部１００のタイマハンドラ部１０１、セキュアＯＳ部２００ｌのタイマハンドラ部２０１を介して、定期的に実行される。これは第１の実施形態と同様、ノンセキュアＯＳが処理を行っていたとしても強制的にメモリ検査部２２１が定期的に実行される事を意味する。メモリ検査部２２１は、タイマハンドラ部２０１からタイマ割り込みの通知を受けると、データリード部２０５を介して改ざん検出部３１６が配置されている領域を読み出し、セキュアＯＳ部２００ｌの期待値格納部２１２に格納された値と一致するか否か検査を行う。
【０１５０】
もし一致していれば、改ざん検出部３１６が改ざんされていないとみなして、セキュアＯＳ遷移命令呼び出し部２０３を呼び出し、ノンセキュアＯＳの処理を再開される。一方、もし一致していなければ、改ざん検出部３１６が改ざんされていないとみなしてリブート部２１９を呼び出し、情報処理装置を再起動させる。再起動させる他にも、ノンセキュアＯＳ部３００ｈに警告メッセージを送信する処理が考えられる。攻撃者は、改ざん検出部がノンセキュアＯＳの改ざん検出処理を行わないように処理を改ざんしたり、常に改ざんされていないと報告するように改ざん検出処理の結果を書き換えたりするかもしれない。第７の実施形態では、ノンセキュアＯＳ部３００ｈの改ざん検出部３１６が、ノンセキュアＯＳ部３００ｈが改ざんされていない事を確認し、改ざん検出部３１６が改ざんされていない事をセキュアＯＳ部２００ｌのメモリ検査部２２１が確認することによって、ノンセキュアＯＳ部３００ｈが改ざんされていない事を検証することができる。これにより、攻撃者によってノンセキュアＯＳが改ざんされた場合には改ざん検出部３１６が検出する事が可能である。さらに改ざん検出部３１６が改ざんされた場合にはメモリ検査部２２１が改ざんを検出する事ができる。
【０１５１】
すべての改ざん検出処理をセキュアＯＳ部２００ｌで行う事も可能であるが、ノンセキュアＯＳ部３００ｈのデータ構造などノンセキュアＯＳ部３００ｈに固有のデータが改ざんされていないかどうかを検出するにはノンセキュアＯＳ部３００ｈの中で行った方が効率的である。従って、本実施形態では、ノンセキュアＯＳ部の改ざん検出をノンセキュアワールドで動作するプログラム、すなわちノンセキュアＯＳ部３００ｈのドライバまたはノンセキュアＯＳ部３００ｈ上で動作するアプリケーションで行っている。
【０１５２】
なお、この発明は上記した実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を種々変形して具体化することができる。また、上記した実施の形態に開示されている複数の構成要素を適宜に組み合わせることにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素から幾つかの構成要素を削除しても良いものである。さらに、異なる実施の形態に係る構成要素を適宜組み合わせても良いものである。
【符号の説明】
【０１５３】
１  情報処理装置
２  メインプロセッサ部
３  アドレス空間制御部
４  メモリ制御部
５  メインメモリ部
６  二次記憶部制御部
７  二次記憶部
８  ブリッジ部
９  Ｉ／Ｏ処理部
１１  タイマ部
１００  セキュアモニタ部
１０１  タイマハンドラ部
１０２  ＯＳ切替部
１０３  セキュアモニタメモリ設定部
１０４  アボートハンドラ部
１０５  プロセス特定部実行部
２００  セキュアＯＳ部
２０１  タイマハンドラ部
２０２  データ更新部
２０３  セキュアＯＳ遷移命令呼び出し部部
２０４  データライト部
２０５  データリード部
２０６  鍵管理部
２０７  暗号処理部
２０８  第２データリード部
２０９  復号処理部
２１０  データ取得部
２１１  出力モード設定部
２１２  領域設定部
２１３  アボートハンドラ部
２１４  アボート原因調査部
２１５  ログ生成部
２１６  プロセス特定部
２１７  鍵管理部
２１８  ログ暗号化部
３００  ノンセキュア部
３０１  タイマハンドラ部
３０２  スケジューラ部
３０３  タスク実行部
３０４  データリード部
３０４ａ  暗号化データリード部
３０４ｂ  平文データリード部
３０５  データ送信部
３０６  データ出力部
３０７  鍵管理部
３０８  データ復号部
３０９  モード設定部
３１０  ノンセキュアＯＳ遷移命令呼び出し部
３１１  領域設定部
３１２  領域指定部
３１３  データライト部
３１４  プロセス停止部
３１５  プロセス特定部
４００  検証サーバ
４０１  データ受信部
４０２  データ復号部
４０３  鍵管理部
５００  ディスプレイ部
【図１】
2015064677.tif 000003
【図２】
2015064677.tif 000004
【図３】
2015064677.tif 000005
【図４】
2015064677.tif 000006
【図５】
2015064677.tif 000007
【図６】
2015064677.tif 000008
【図７】
2015064677.tif 000009
【図８】
2015064677.tif 000010
【図９】
2015064677.tif 000011
【図１０】
2015064677.tif 000012
【図１１】
2015064677.tif 000013
【図１２】
2015064677.tif 000014
【図１３】
2015064677.tif 000015
【図１４】
2015064677.tif 000016
【図１５】
2015064677.tif 000017
【図１６】
2015064677.tif 000018
【図１７】
2015064677.tif 000019
【図１８】
2015064677.tif 000020
【図１９】
2015064677.tif 000021
【図２０】
2015064677.tif 000022
【図２１】
2015064677.tif 000023
【図２２】
2015064677.tif 000024
【図２３】
2015064677.tif 000025
【図２４】
2015064677.tif 000026
【図２５】
2015064677.tif 000027
【図２６】
2015064677.tif 000028
【図２７】
2015064677.tif 000029
【図２８】
2015064677.tif 000030
【図２９】
2015064677.tif 000031
【図３０】
2015064677.tif 000032
【図３１】
2015064677.tif 000033
【図３２】
2015064677.tif 000034
【図３３】
2015064677.tif 000035
【図３４】
2015064677.tif 000036
【図３５】
2015064677.tif 000037
【図３６】
2015064677.tif 000038
【図３７】
2015064677.tif 000039
【図３８】
2015064677.tif 000040
【図３９】
2015064677.tif 000041
【図４０】
2015064677.tif 000042
【手続補正書】
【提出日】平成26年9月19日(2014.9.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
セキュアモードとノンセキュアモードとに選択的に切り替えられ、それぞれのモードで所定のデータ処理を行なうメインプロセッサ部と、
メインメモリ部に対して前記メインプロセッサ部のモードごとに独立してリード許可・ライト許可のアクセス権を設定するアドレス空間制御部と、
前記アドレス空間制御部に対して、両モードでデータのリードが可能であり、前記セキュアモードでのみデータのライトが可能な第１メモリ領域と、両モードでデータのリードとライトが可能な第２メモリ領域と、前記セキュアモードでのみデータのリードとライトが可能な第３メモリ領域を設定するセキュアモニタメモリ設定部と、
前記第２メモリ領域に配置され、前記ノンセキュアモードで動作するノンセキュアＯＳ部と、
前記第３メモリ領域に配置され、前記セキュアモードで動作するセキュアＯＳ部と、
所定の周期で前記メインプロセッサ部に対して割り込みをかけ、セキュアモニタ部に前記割り込みを通知するタイマ部と、
を備え、
前記セキュアモニタ部は、前記タイマ部からの前記割り込みの通知を受けた場合に所定の処理の実行を前記セキュアＯＳ部へ指示し、
前記セキュアＯＳ部は、前記セキュアモニタ部によって指示された所定の処理を実行し、処理結果のデータを前記第１メモリ領域に記憶させる
ことを特徴とする情報処理装置。
【請求項２】
所定の周期で前記メインプロセッサ部に対して割り込みをかけ、前記ノンセキュアＯＳ部に第２割り込みを通知する第２タイマ部を更に備え、
前記ノンセキュアＯＳ部は、前記第２タイマ部からの前記第２割り込みの通知を受けると、前記ノンセキュアＯＳ部上で動作するタスクの切り替え処理を実行する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記セキュアＯＳ部は、
前記タイマ部からの前記割り込みの通知を受けた前記セキュアモニタ部より、前記所定の処理の実行を指示されるごとに、所定のデータを更新するデータ更新部を
更に備えることを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記セキュアＯＳ部は、
前記データ更新部が更新したデータの値を所定の鍵を用いて暗号化する暗号処理部と、
前記暗号処理部が用いる鍵を保持する鍵管理部と、
前記データ更新部が更新した暗号化されていないデータ、及び暗号化されたデータの両方を前記第１メモリ領域にライトするデータライト部と、
を備えることを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記ノンセキュアＯＳ部は、
前記データ更新部が更新したデータの値を暗号化して出力するか、暗号化せずに出力するかを設定するモード設定部を
更に備え、
前記セキュアＯＳ部は、
前記モード設定部による設定に基づき、データを暗号化するか否かを前記データ更新部に指示する出力モード設定部を
更に備えることを特徴とする請求項３に記載の情報処理装置。
【請求項６】
前記ノンセキュアＯＳ部は、
起動後に前記ノンセキュアＯＳ部が配置された領域を前記セキュアモードでのみデータのライトが可能なようにアドレス空間制御部を設定する領域設定部と、
を更に備えることを特徴とする請求項１に記載の情報処理装置。
【請求項７】
前記ノンセキュアＯＳ部は、
起動後に前記セキュアＯＳ部に対して、前記ノンセキュアＯＳ部が配置された領域を前記セキュアモードでのみデータのライトが可能なようにアドレス空間制御部を設定する領域指定部を更に備え、
前記セキュアＯＳ部は、
前記領域指定部からの指示に基づき、前記ノンセキュアＯＳ部が配置された領域を前記セキュアモードでのみデータのライトが可能なようにアドレス空間制御部に設定する第２領域設定部と、
を更に備えることを特徴とする請求項１に記載の情報処理装置。
【請求項８】
情報処理装置と、前記情報処理装置とネットワークを通じて接続された検証サーバとを備える情報処理システムであって、
前記情報処理装置は、
セキュアモードとノンセキュアモードとに選択的に切り替えられ、それぞれのモードで所定のデータ処理を行なうメインプロセッサ部と、
メインメモリ部に対して前記メインプロセッサ部のモードごとに独立してリード許可・ライト許可のアクセス権を設定するアドレス空間制御部と、
前記アドレス空間制御部に対して、両モードでデータのリードが可能であり、前記セキュアモードでのみデータのライトが可能な第１メモリ領域と、両モードでデータのリードとライトが可能な第２メモリ領域と、前記セキュアモードでのみデータのリードとライトが可能な第３メモリ領域を設定するセキュアモニタメモリ設定部と、
前記第２メモリ領域に配置され、前記ノンセキュアモードで動作するノンセキュアＯＳ部と、
前記第３メモリ領域に配置され、前記セキュアモードで動作するセキュアＯＳ部と、
所定の周期で前記メインプロセッサ部に対して割り込みをかけ、セキュアモニタ部に前記割り込みを通知するタイマ部と、
前記セキュアモニタ部は、前記タイマ部からの前記割り込みの通知を受けた場合に所定の処理の実行を前記セキュアＯＳ部へ指示し、
前記セキュアＯＳ部は、前記セキュアモニタ部によって指示された所定の処理を実行し、処理結果のデータを前記第１メモリ領域に記憶させ、
前記セキュアＯＳ部は、前記タイマ部からの前記割り込みの通知を受けた前記セキュアモニタ部より、前記所定の処理の実行を指示されるごとに、所定のデータを更新するデータ更新部を更に有し、
前記ノンセキュアＯＳ部は、暗号化された前記データを前記第１メモリ領域からリードし、前記検証サーバに送信する暗号化データリード部を更に有し、
前記検証サーバは、
前記暗号化データリード部より受信したデータを、暗号化に用いられた鍵と対応する所定の鍵を用いて復号し、前記暗号化データリード部に返信するデータ復号部と、
を備える
ことを特徴とする情報処理システム。
【請求項９】
セキュアモードとノンセキュアモードとに選択的に切り替えられ、それぞれのモードで所定のデータ処理を行なうメインプロセッサ部と、
メインメモリ部に対して前記メインプロセッサ部のモードごとに独立してリード許可・ライト許可のアクセス権を設定するアドレス空間制御部と、
前記アドレス空間制御部に対して、前記ノンセキュアモードでのデータのリード・ライトを禁止するとともに、前記セキュアモードでのみデータのリード・ライトを許可する第４メモリ領域と、両モードでデータのリードとライトが可能な第５メモリ領域と、前記セキュアモードでのみデータのライトが可能な第６メモリ領域を設定し、更に前記ノンセキュアモードで前記第６メモリ領域へのアクセスがあった場合に、前記セキュアモードに処理を遷移させるように設定するセキュアモニタメモリ設定部と、
前記第６メモリ領域に配置され、前記ノンセキュアモードで動作するノンセキュアＯＳ部と、
前記第４メモリ領域に配置され、前記セキュアモードで動作するセキュアＯＳ部と、
を備え、
前記セキュアＯＳ部は、前記ノンセキュアモードで前記第６メモリ領域へのアクセスがあった場合に、その領域のどのアドレスへのアクセスであったかを調査する
ことを特徴とする情報処理装置。
【請求項１０】
前記セキュアＯＳ部は、前記ノンセキュアモードで前記第６メモリ領域へのアクセスがあった場合に、所定のアドレスへのアクセスであると判断した場合に、システムの停止処理を行う
ことを特徴とする請求項９に記載の情報処理装置。
【請求項１１】
セキュアモードとノンセキュアモードとに選択的に切り替えられ、それぞれのモードで所定のデータ処理を行なうメインプロセッサ部と、メインメモリ部に対して前記メインプロセッサ部のモードごとに独立してリード許可・ライト許可のアクセス権を設定するアドレス空間制御部と、を備えるコンピュータを、
前記アドレス空間制御部に対して、両モードでデータのリードが可能であり、前記セキュアモードでのみデータのライトが可能な第１メモリ領域と、両モードでデータのリードとライトが可能な第２メモリ領域と、前記セキュアモードでのみデータのリードとライトが可能な第３メモリ領域を設定するセキュアモニタメモリ設定部と、
前記第２メモリ領域に配置され、前記ノンセキュアモードで動作するノンセキュアＯＳ部と、
前記第３メモリ領域に配置され、前記セキュアモードで動作するセキュアＯＳ部と、
所定の周期で前記メインプロセッサ部に対して割り込みをかけ、セキュアモニタ部に前記割り込みを通知するタイマ部と、
として機能させるためのプログラムであって、
前記セキュアモニタ部は、前記タイマ部からの前記割り込みの通知を受けた場合に所定の処理の実行を前記セキュアＯＳ部へ指示し、
前記セキュアＯＳ部は、前記セキュアモニタ部によって指示された所定の処理を実行し、処理結果のデータを前記第１メモリ領域に記憶させる
プログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
メインプロセッサ部は、セキュアモードとノンセキュアモードとに選択的に切り替えられ、それぞれのモードで所定のデータ処理を行なう。アドレス空間制御部は、メインメモリ部に対して前記メインプロセッサ部のモードごとに独立してリード許可・ライト許可のアクセス権を設定する。セキュアモニタメモリ設定部は、前記アドレス空間制御部に対して、両モードでデータのリードが可能であり、前記セキュアモードでのみデータのライトが可能な第１メモリ領域と、両モードでデータのリードとライトが可能な第２メモリ領域と、前記セキュアモードでのみデータのリードとライトが可能な第３メモリ領域を設定する。セキュアＯＳ部は、前記第３メモリ領域に配置され、前記セキュアモードで動作する。ノンセキュアＯＳ部は、前記第２メモリ領域に配置され、前記ノンセキュアモードで動作する。タイマ部は、所定の周期で前記メインプロセッサ部に対して割り込みをかけ、セキュアモニタ部に前記割り込みを通知する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
前記セキュアモニタ部は、前記タイマ部からの前記割り込みの通知を受けた場合に所定の処理の実行を前記セキュアＯＳ部へ指示し、前記セキュアＯＳ部は、前記セキュアモニタ部によって指示された所定の処理を実行し、処理結果のデータを前記第１メモリ領域に記憶させる。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】変更
【補正の内容】
【００１４】
情報処理装置１０は、メインプロセッサ部２、アドレス空間制御部３、メモリ制御部４、メインメモリ部５、二次記憶部制御部６、二次記憶部７、ブリッジ部８、及びＩ／Ｏ処理部９を備えている。メインプロセッサ部２、アドレス空間制御部３、二次記憶部制御部６、及びブリッジ部８はバス１ａによって接続されている。また、Ｉ／Ｏ処理部９はブリッジ部８とバス１ｂによって接続されている。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１５
【補正方法】変更
【補正の内容】
【００１５】
メインプロセッサ部２は、メインメモリ部５からロードした命令やデータを逐次的に処理し、処理した結果をメインメモリ部５に記憶させる。このメインプロセッサ部２は、たとえばＡＲＭ（登録商標）Ｃｏｒｔｅｘ  Ａシリーズのような汎用のプロセッサである。このメインプロセッサ部２は、少なくともセキュアモードとノンセキュアモードの二つの排他的な状態を持ち、メインプロセッサ部２の動作状態は、ソフトウェアからの指示、たとえばレジスタの設定によってセキュアモードとノンセキュアモードとに選択的に切り替えられる。すなわち、メインプロセッサ部２の動作用ソフトウェアは、必要に応じてセキュアモードとノンセキュアモードとを交互に切り替えながらプログラムを実行する。さらに、メインプロセッサ部２は、現在どちらの状態にあるかを示す少なくとも１ビットの状態情報をバス１ａに送信している。すなわち、バス１ａに接続される各モジュールはバス１ａに送信されている状態情報を監視する事によってメインプロセッサ部２がセキュアモードとノンセキュアモードのどちらのモードにあるかを識別することができる。このモードを選択的に切り替えて実行する方法として、たとえばＡＲＭプロセッサのセキュリティ機能であるＴｒｕｓｔＺｏｎｅ（登録商標）機能を利用すればよい。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００１８
【補正方法】変更
【補正の内容】
【００１８】
アドレス空間制御部３は、メインプロセッサ部２からメインメモリ部５へのアクセスを監視し、アドレス範囲ごとにアクセス制御を行う。つまり、メインメモリ部５に対してメインプロセッサ部２のモードごとに独立してリード許可・ライト許可のアクセス権を設定する。たとえば、情報処理装置１０の起動時の初期化処理の一手順として、メインプロセッサ部２で動作させる制御用ソフトウェアが、該メインプロセッサ部２がセキュアモードの状態にある時のみメインメモリ部５の特定のアドレス領域に対してアクセスが可能であり、ノンセキュアモードの状態にある時にはその特定のアドレス領域にはアクセスを許可しないといった設定を、アドレス空間制御部３にあらかじめ施しておく。メインプロセッサ部２から特定のアドレス領域に対してアクセスがあった場合に、アドレス空間制御部３は、バス１ａに送信されている状態情報から、メインプロセッサ部２がセキュアモードにあるならばアクセスを許可し、そうでない場合はアクセスを許可せず例外信号(フォールト信号またはアボート信号)を割り込み信号としてメインプロセッサ部２に送信する。アドレス空間制御部３がメインメモリ部５の領域を設定する方法については後述する。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００２０
【補正方法】変更
【補正の内容】
【００２０】
ブリッジ部８はバス１ａとバス１ｂを接続するブリッジコントローラである。バス１ａはたとえばＡＸＩ（Ａｄｖａｎｃｅｄ  ｅＸｔｅｎｓｉｂｌｅ  Ｉｎｔｅｒｆａｃｅ)仕様を想定し、バス１ｂはたとえばＡＰＢ(Ａｄｖａｎｃｅｄ  Ｐｅｒｉｐｈｅｒａｌ  Ｂｕｓ)規格に準拠したものを想定している。Ｉ／Ｏ処理部９はマウスやキーボードなどの入出力デバイスと接続し、それらの入出力デバイスを制御する。キーボードやマウスからの入力があった場合にはブリッジ部８を介して割り込み信号としてメインプロセッサ部２に送信する。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００２５
【補正方法】変更
【補正の内容】
【００２５】
セキュアモニタ部１００は、ＯＳ切替部１０２と、セキュアモニタメモリ設定部１０３、タイマハンドラ部１０１を含んでいる。ＯＳ切替部１０２はメインプロセッサ部２の動作状態をセキュアモードとノンセキュアモードとに選択的に切り替える処理を行う。切り替えるタイミングとしては、セキュアＯＳ部２００、又はノンセキュアＯＳ部３００によって明示的な切り替え命令が実行された時、タイマ部１１や外部ハードウェアモジュールからの割り込み信号を受信した時などがある。明示的な切り替え命令とは、メインプロセッサ部２がＡＲＭ  Ｃｏｒｔｅｘ  Ａシリーズのプロセッサの場合、ＳＭＣ（Ｓｅｃｕｒｅ  Ｍｏｎｉｔｏｒ  Ｃａｌｌ）命令の事を指す。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００２６
【補正方法】変更
【補正の内容】
【００２６】
セキュアＯＳ部２００が明示的な切り替え命令を実行した場合は、メインプロセッサ部２はセキュアＯＳ部２００からセキュアモニタ部１００のＯＳ切替部１０２に処理を遷移させる。そしてＯＳ切替部１０２はメインプロセッサ部２のモードをノンセキュアモードからセキュアモードに切り替え、処理をノンセキュアＯＳ部３００に切り替える。ノンセキュアＯＳ部３００から明示的な切り替え命令を受信した場合は、メインプロセッサ部２はノンセキュアＯＳ部３００からセキュアモニタ部１００のＯＳ切替部１０２に処理を遷移させる。このとき、ＯＳ切替部１０２はメインプロセッサ部２のモードをノンセキュアモードからセキュアモードに切り替え、処理をセキュアＯＳ部２００に遷移させる。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００２７
【補正方法】変更
【補正の内容】
【００２７】
ＯＳ切替部１０２は、この切り替えの際に切り替え前のＯＳが元の状態に復帰できるように切り替え前のＯＳの状態(コンテキスト)をメインメモリ部５に保存しておく処理も行う。たとえば、ノンセキュアＯＳ部３００からセキュアＯＳ部２００に切り替える場合、ＯＳ切替部１０２はノンセキュアＯＳ部３００が利用中のレジスタの値、すなわちコンテキストを、セキュアモニタ部１００が管理する所定のメモリ領域に退避させ、処理をセキュアＯＳ部２００に遷移させる。そして、ＯＳ切替部１０２は、セキュアＯＳ部２００からノンセキュアＯＳ部３００に切り替える際には退避させておいたノンセキュアＯＳ部３００のコンテキストをレジスタに復帰させる。同様に、セキュアＯＳ部２００からノンセキュアＯＳ部３００に切り替える際もセキュアＯＳ部２００が利用中のコンテキストを退避させ、その後、ノンセキュアＯＳ部３００からセキュアＯＳ部２００に切り替える際には退避させておいたセキュアＯＳ部２００のコンテキストの復帰の処理を行う。なお、セキュアＯＳ部２００からノンセキュアＯＳ部３００に遷移させる際、ノンセキュアＯＳ部３００に遷移した後にノンセキュアＯＳ部３００からレジスタの値を見る事でセキュアＯＳ部２００で実行していた状態が読まれてしまう事を防ぐため、ＯＳ切替部１０２は、セキュアＯＳ部２００が利用していたレジスタの値をクリアすることが望ましい。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００２８
【補正方法】変更
【補正の内容】
【００２８】
なお、タイマ部１１や外部モジュールからの割り込み信号でモードを切り替える場合、セキュアモニタ部１００のＯＳ切替部１０２は、情報処理装置１０の起動時に初期化処理の一手順として、例外(割り込み)が発生した場合にどちらのモードに遷移させてどのハンドラを実行するのかをあらかじめ決定しておき、割り込み発生元に設定しておく。たとえば、アドレス空間制御部３からメインプロセッサ部２に例外信号が送信されてきた場合、メインプロセッサ部２がセキュアモードの状態にある時にはセキュアＯＳ部２００の割り込みハンドラを実行し、ノンセキュアモードの状態にある時には強制的に状態を切り替えてセキュアＯＳ部２００の割り込みハンドラを実行するといった処理を起動時に行う。同様に、タイマ割り込みが発生した場合にモードに応じてどのハンドラを呼び出すのかをＯＳ切替部１０２に設定しておく。タイマ割り込みが発生した場合の割り込みハンドラの設定については後述する。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００２９
【補正方法】変更
【補正の内容】
【００２９】
セキュアモニタメモリ設定部１０３はメインメモリ部５に対して領域を設定し、各領域に対してアクセス制御の設定を行う。領域の設定では、たとえば開始アドレスとその領域の長さを指定したり、開始アドレスと終了アドレスを指定したりするようにすればよい。タイマハンドラ部１０１は、タイマ部１１が割り込みを発生させた場合に、メインプロセッサ部２を実行させるための処理部である。タイマハンドラ部１０１はＯＳ切替部１０２に対しノンセキュアモードからセキュアモードに状態を遷移させるよう指示し、遷移後にセキュアＯＳ部２００のタイマハンドラ部２０１を呼び出す。ＯＳ切替部１０２は、タイマ部１１から割り込みが発生した場合に、セキュアモニタ部１００のタイマハンドラ部１０１を実行させる事を、情報処理装置１０の起動時の初期化処理の一手順として指定する。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００３１
【補正方法】変更
【補正の内容】
【００３１】
データ更新部２０２は、メインプロセッサ部２のレジスタなどを用いて自身でカウンタ値（更新データ）を管理しており、タイマハンドラ部２０１からタイマ割り込みの発生通知を受信すると、そのカウンタ値を更新(たとえば１ずつインクリメントする)する処理を行う。そして、データ更新部２０２はデータライト部２０４に対してメインメモリ部５にその更新した値を書きこむよう指示する処理を行う。さらにデータ更新部２０２はメインメモリ部５に更新したカウンタ値を書きこんだ後、セキュアＯＳ遷移命令呼び出し部２０３を実行させる。データライト部２０４は、データ更新部２０２からの指示に基づき、データ更新部２０２で管理しているカウンタ値をメインメモリ部５の更新データ領域に書きこむ処理を行う。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００３９
【補正方法】変更
【補正の内容】
【００３９】
図４は、メインメモリ部５の各メモリ領域に対するアクセスの可否を示している。このアクセス制御の設定は、セキュアモニタメモリ設定部１０３によって情報処理装置１０の起動時の初期化処理の一部としてなされる。すなわち、メインプロセッサ部２がセキュアモードにある場合、メインプロセッサ部２で動作するソフトウェアがメインメモリ部５のセキュア領域とノンセキュア領域両方にリードとライトのアクセスが可能である。つまり、セキュアＯＳ部２００は、メインメモリ部５のセキュア領域、及びノンセキュア領域全てにアクセスが可能である。一方、メインプロセッサ部２がノンセキュアモードにある場合、メインメモリ部５のセキュア領域のうちリード・ライト禁止と指定された領域にはリードとライト両方のアクセスが不可であり、リード許可ライト禁止と指定された領域にはリードのみ許可される。また、ノンセキュア領域にはリードとライトのアクセスが可能である。なお、ここでのアクセスとは、メインメモリ部５に対して書き込みや読み出しを行なうことである。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】００４３
【補正方法】変更
【補正の内容】
【００４３】
タイマ割り込みが発生した場合、どちらのモードに遷移させるのかあらかじめＯＳ切替部１０２に設定しておく。たとえば、タイマ割り込みが発生した場合、セキュアモニタ部１００のタイマハンドラ部１０１に処理を遷移させるようにタイマ部１１に設定しておく。なお、メインプロセッサ部２が複数のタイマ部１１を備えている場合、ＯＳ切替部１０２は二つのタイマ部１１を使い、それぞれＦＩＱ割り込みとＩＲＱ割り込みが発生するように設定しておいてもよい。たとえば、一つ目のタイマ部１１(タイマ部１１Ａ)に対しては、周期Ｍミリ秒でＦＩＱ割り込みを発生させるように設定しておき、もう一つのタイマ部１１(タイマ部１１Ｂ)には、周期Ｎミリ秒でＩＲＱ割り込みを設定しておく。さらに、ＯＳ切替部１０２はタイマ部１１のＦＩＱ割り込みが発生した場合にはセキュアモニタ部１００のタイマハンドラ部１０１に遷移するよう設定しておく。同様に、ＯＳ切替部１０２はタイマ部１１のＩＲＱ割り込みが発生した場合にはセキュアモニタ部１００のタイマハンドラ部１０１に遷移するよう設定しておく。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】００４６
【補正方法】変更
【補正の内容】
【００４６】
セキュアＯＳ部２００のタイマハンドラ部２０１はデータ更新部２０２でカウンタ値（更新データ）を更新し（ステップＳ１０６）、データライト部２０４を呼び出して更新したカウンタ値をメインメモリ部５に書き込ませる（ステップＳ１０７）。そして、セキュアＯＳ遷移命令呼び出し部２０３でＯＳ遷移命令を呼び出す（ステップＳ１０８）。メインプロセッサ部２はＯＳ遷移命令により、処理をセキュアモニタ部１００のＯＳ切替部１０２に遷移させる（ステップＳ１０９）。ＯＳ切替部１０２はセキュアＯＳ部２００のコンテキストを保存してノンセキュアＯＳ部３００のコンテキストを復帰させ、ノンセキュアＯＳ部３００を実行する。その後、ノンセキュアＯＳ部３００のタスク実行部３０３はメインメモリ部５の更新データ領域からカウンタ値を読み出す（ステップＳ１１０）。なお、更新データ領域はリードが許可されているため、ノンセキュアＯＳ部３００からでも読み出すことができる。
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】００５１
【補正方法】変更
【補正の内容】
【００５１】
また、カウンタ値はタイマ割り込みの実行タイミングによって更新される。タイマの割り込み発生間隔等のタイマ部１１の設定はＯＳ切替部１０２によってなされるが、この設定のためのレジスタのアドレスをセキュア領域となるように設定する事で、タイマ部１１の設定をノンセキュアＯＳ部３００から行う事を禁止する事ができる。これにより、ノンセキュアＯＳ部３００からタイマ部１１の設定を変更することができなくなるため、ノンセキュアＯＳ部３００が不正に改変されたとしても、タイマ部１１による割り込みはセキュアモニタ部１００を経由して確実にセキュアＯＳに通知する事を実現できる。タイマ部１１はＯＳ切替部１０２によって設定された周期に従って定期的に割り込みを通知し、ノンセキュアＯＳ部３００が処理中であっても、強制的にノンセキュアＯＳ部３００を一時的に停止してセキュアＯＳ部２００ａを実行させる。これにより、セキュアＯＳ部２００ａはノンセキュアＯＳ部３００の状態に限らず定期的に処理を行う事ができる。
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】００５８
【補正方法】変更
【補正の内容】
【００５８】
なお、メインメモリ部５のメモリ領域は図８に示すような構成になっていてもよい。図３との違いは、更新データをノンセキュア領域に配置する点である。セキュアＯＳ部２００ｂのデータライト部２０４はメインメモリ部５のノンセキュア領域に暗号化カウンタ値を書きこむ。図４に示したように、ノンセキュア領域はノンセキュアモードからリードライトアクセスが許可されている。ノンセキュアＯＳやノンセキュアＯＳ上で動作する不正プログラムは暗号化カウンタ値の値を改変する事が可能である。ところが、第１の実施形態とは異なり、第２の実施形態ではカウンタ値は暗号化されている。これにより、仮にノンセキュアＯＳが改変されたり、ノンセキュアＯＳ上で動作する不正プログラムが暗号化カウンタ値の値を改変しようと試みたりしたとしても、更新データを破壊する事はできてもノンセキュアＯＳや不正プログラムは正しい鍵を有しないため暗号化カウンタ値を意図した値に改変することはできない。
【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】００６１
【補正方法】変更
【補正の内容】
【００６１】
復号処理部２０９は、第２データリード部２０８で取得した暗号化カウンタ値を暗号アルゴリズムによって鍵管理部２０６が保持する鍵を用いて復号化する処理部である。暗号アルゴリズムが共通鍵方式の場合は、カウンタ値を暗号化したのと同じ鍵を用いて復号する。一方、暗号アルゴリズムが共通鍵方式の場合は、カウンタ値は鍵管理部２０６が管理する公開鍵で暗号化されるが、復号処理部２０９はその公開鍵に対応する秘密鍵にてカウンタ値を復号する。暗号アルゴリズムとして、暗号処理部２０７で用いたものと同じアルゴリズムを用いる。上記では第２データリード部２０８は、メインメモリ部５のノンセキュア領域の更新データ領域から暗号化カウンタ値を読み込む例について示したが、カウンタ値はセキュアＯＳ用データ領域で管理してもよい。すなわち、データ更新部２０２はデータライト部２０４に対して、暗号化カウンタ値をメインメモリ部５の更新データ領域にライトするように指示すると共に、平文のカウンタ値をメインメモリ部５のセキュアＯＳ用データ領域にライトするように指示する。そして、セキュアＯＳ部２００ｃのタイマハンドラ部２０１は平文のカウンタ値をメインメモリ部５のセキュアＯＳ用データ領域からリードして、データ更新部２０２に渡す。このように、現在のカウンタ値をセキュアＯＳ用データ領域で管理するようにしてもよい。
【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】００６４
【補正方法】変更
【補正の内容】
【００６４】
図１２は第２の実施形態における情報処理装置１０の別例である。図７との違いはデータ更新部２０２の代わりにデータ取得部２１０を備えている点である。これまで、セキュアＯＳがノンセキュアＯＳと共有するデータとしてカウンタ値を想定していた。図１２では新規に取得するデータを想定する。
【手続補正２１】
【補正対象書類名】明細書
【補正対象項目名】００６５
【補正方法】変更
【補正の内容】
【００６５】
たとえば、情報処理装置１０が温度や湿度、雨量、地震計などのセンサー装置である場合、データ取得部２１０はセンサーからデータを取得する処理を行う。また、情報処理装置１０自体がセンサー装置ではなく、センサー装置からネットワークを介して情報を取得するような装置である場合、データ取得部２１０はネットワーク経由でセンサー装置からデータを取得する処理を行う。そして暗号処理部２０７は、データ取得部２１０で取得したデータを暗号化してメインメモリ部５に出力する。その後の処理は図７と同様である。これにより、ノンセキュアＯＳ部３００の処理を実行していたとしてもタイマ部１１によりデータ取得部２１０が定期的に実行されるため、定期的なデータの取得が可能となる。さらにセンサー装置から取得したデータは暗号化してノンセキュアＯＳ部３００に渡されるため、ノンセキュアＯＳ上で動作する不正プログラムが平文の値を取得する事はできないし、暗号化された値を改変しようと試みたとしても、ノンセキュアＯＳや不正プログラムは正しい鍵を有しないため値を意図した値に改変することはできない。
【手続補正２２】
【補正対象書類名】明細書
【補正対象項目名】００６７
【補正方法】変更
【補正の内容】
【００６７】
図１３に示すように、セキュアＯＳ部２００ｄのデータライト部２０４はメインメモリ部５のリード許可・ライト禁止に設定されたセキュア領域に暗号化カウンタ値と平文のカウンタ値の両方を書きこむ。この用途としては、たとえば情報処理装置１０がカウンタ値をユーザに提示するための表示用と、情報処理装置１０がサーバに暗号化カウンタ値を送信し、サーバがカウンタ値を処理するための処理用の二つを提供する事が考えられる。そのシステムの全体構成を図１４に示す。
【手続補正２３】
【補正対象書類名】明細書
【補正対象項目名】００６８
【補正方法】変更
【補正の内容】
【００６８】
図７や図１０に示したノンセキュアＯＳ部３００との違いは暗号化データリード部３０４ａ、データ送信部３０５、平文データリード部３０４ｂ、データ出力部３０６を備えている点である。また、情報処理装置１０はインターネットなどのネットワークを介して検証サーバ４００に接続されている。また、情報処理装置１０はディスプレイ部５００に接続されている。
【手続補正２４】
【補正対象書類名】明細書
【補正対象項目名】００６９
【補正方法】変更
【補正の内容】
【００６９】
ディスプレイ部５００は、情報処理装置１０から送信されるデータを表示させるためのモニター装置である。情報処理装置１０とはＤＶＩやＨＤＭＩ（登録商標）などのディスプレイインターフェースを介して接続されている。なお、情報処理装置１０にデータ表示用デバイスが内蔵されている場合には、このディスプレイ部は必須の構成要素ではない。
【手続補正２５】
【補正対象書類名】明細書
【補正対象項目名】００７１
【補正方法】変更
【補正の内容】
【００７１】
検証サーバ４００は、内部にデータ受信部４０１、鍵管理部４０３、データ復号部４０２を備えている。データ受信部４０１は、ＴＣＰ／ＩＰなどの通信処理を行い情報処理装置１０と接続し、暗号化カウンタ値を情報処理装置１０から受信する処理を行う。鍵管理部４０３は、受信した暗号化カウンタ値を復号するための鍵を管理しておく処理部である。情報処理装置１０の鍵管理部２０６に保存されている鍵（暗号鍵）に対応する鍵（復号鍵）が保存されている。データ復号部４０２は鍵管理部４０３に保存されている鍵を用い、データ受信部４０１で受信した暗号化カウンタ値を復号する処理部である。なお、この実施形態では、情報処理装置１０が暗号処理部２０７を用いてカウンタ値を暗号化する例について説明してきたが、暗号処理ではなく署名処理でもよい。この場合、データ復号部４０２は署名検証処理となる。すなわち、検証サーバ４００の鍵管理部４０３は情報処理装置１０の鍵管理部２０６に保存された署名鍵に対応する検証鍵を管理し、カウンタ値に付与された署名を検証する処理をデータ復号部４０２が行ってもよい。
【手続補正２６】
【補正対象書類名】明細書
【補正対象項目名】００７２
【補正方法】変更
【補正の内容】
【００７２】
以上の構成は情報処理装置１０をスマートメータのような消費電力を計量する計量器として利用する場合に特に有用である。スマートメータの機能として、従来の計量器(電力計量器)と同様に現在の消費電力や、これまでに消費した電力量を表示する機能を持つ。これはユーザに現在の電力消費量（電力消費データ）を示すことで、節電の意識を高める事に利用される。この表示用の電力消費データはユーザの意思によって、たとえば月の初めなどに値をリセットしても構わない。一方、スマートメータはこれに加え、通信機能を用いて消費した電力量をネットワーク経由で接続されたサーバに送信する。このサーバに送信されるデータはユーザに課金するために用いられる。仮にサーバに送信されるデータが情報処理装置１０内でリセットなど改変されてしまうと、本来、ユーザが電力を消費しているにも関わらず、サーバには本来消費した電力量よりも少ない値が通知されるため、正しく課金する事ができない。また、電力消費量は生活スタイルを反映しているためユーザのプライバシー情報とみなすこともできる。従って、ネットワーク経由で送信する際、ユーザとサーバ以外の第３者にデータの内容を知られる事のないように保護して送信する事が望ましい。従って、このサーバに送信される電力消費量は暗号化ないし署名によって改変を防ぐ事が望ましい。
【手続補正２７】
【補正対象書類名】明細書
【補正対象項目名】００８５
【補正方法】変更
【補正の内容】
【００８５】
なお、ここではモード設定部がノンセキュアＯＳ部３００に存在する構成について説明したが、モード設定部はセキュアモニタ部１００に存在してもよい。その場合、ノンセキュアＯＳ遷移命令呼び出し部３１０は不要であり、モード設定部は情報処理装置１０の起動時の初期化処理の一手順として、どの出力方式を選ぶか出力装置設定部に通知するようになっていてもよい。
【手続補正２８】
【補正対象書類名】明細書
【補正対象項目名】００８８
【補正方法】変更
【補正の内容】
【００８８】
図２０に領域設定部３１１がアドレス空間制御部３に設定した後のメインメモリ部５のメモリ領域を区分けする一例を示す。情報処理装置１０の起動直後、メインメモリ部５のメモリ領域は図３のように設定されている。ノンセキュアＯＳ部３００ｄの領域設定部３１１はメインメモリ部５を図２０のように設定する。すなわち、ノンセキュアＯＳ部３００ｄを配置する領域をセキュア領域として指定する。
【手続補正２９】
【補正対象書類名】明細書
【補正対象項目名】００８９
【補正方法】変更
【補正の内容】
【００８９】
さらに、図２０ではメモリエリア設定レジスタが二つの領域に分かれている。この理由を以下に示す。メモリ領域はノンセキュアＯＳから設定変更可能な領域（ノンセキュア領域）と設定変更不可能な領域（セキュア領域）の二つに分ける必要がある。たとえば、セキュアモニタ部１００やセキュアＯＳ部２００はノンセキュアＯＳ部３００ｄからの改変を防止するために、セキュアモニタ部１００やセキュアＯＳ部２００が配置される領域をセキュア領域としてノンセキュアＯＳからリード・ライト禁止になるように設定する必要がある。この領域が情報処理装置１０の起動後にノンセキュアＯＳ部３００ｄの領域設定部３１１によってライト許可に設定されてしまうと、セキュアモニタ部１００やセキュアＯＳ部２００がノンセキュアＯＳ部３００から改変される恐れがある。このため、これらの領域はノンセキュアＯＳ部３００ｄの領域設定部３１１によって設定変更不可能な領域として設定しておく必要がある。このようにセキュアモニタ部１００やセキュアＯＳ部２００が配置される領域のアクセス権を設定するレジスタがメモリエリア設定レジスタ＃１である。すなわち、メモリエリア設定レジスタ＃１の設定を変更すると、セキュアモニタ部１００やセキュアＯＳ部２００の領域に対するアクセス権が変更されることになる。メモリエリア設定レジスタ＃１へのアクセス権の設定は、第１の実施形態及び第２の実施形態と同様、セキュアモニタメモリ設定部１０３によって情報処理装置１０の起動時の初期化処理の一部としてなされる。メモリエリア設定レジスタ＃１自身はセキュア領域として設定されているため、ノンセキュアＯＳから値を変更する事はできない。
【手続補正３０】
【補正対象書類名】明細書
【補正対象項目名】００９０
【補正方法】変更
【補正の内容】
【００９０】
一方、ノンセキュアＯＳ部３００ｄが配置される領域は図３に示すように、情報処理装置１０の起動直後はノンセキュア領域として設定されている。これを領域設定部３１１によってライト禁止のセキュア領域として設定すると、仮にノンセキュアＯＳに脆弱性となるバグが混入しており、ノンセキュアＯＳの起動後に、ノンセキュアＯＳ部３００ｄのメモリ領域を改変するようなマルウェアにノンセキュアＯＳ部３００ｄが感染したとしても、このマルウェアによるメモリ書き換えを防止することが可能となる。ノンセキュアＯＳのデータ領域はノンセキュアモードで動作するＯＳ、すなわちノンセキュアＯＳ部３００ｄからリードとライトのアクセスをする必要があるため、ライト禁止に設定する事はできない。一方、コード領域はライト禁止にしても問題ない。一般的に、メインメモリ部５のどの領域をノンセキュアＯＳ部３００ｄのコード領域として設定し、どの領域をデータ領域として設定するかはノンセキュアＯＳ部３００が管理している。よって、情報処理装置１０のノンセキュアＯＳ起動後に、自身の管理する情報からコード領域のみリード許可・ライト禁止となるように設定すればよい。このノンセキュアＯＳ部３００ｄの領域は、設定変更可能な領域として設定しておく必要がある。かかる設定は、ノンセキュアＯＳ部３００ｄの領域設定部３１１によって行なわれる。ノンセキュアＯＳ部３００ｄに対するアクセス権の設定を行うためのレジスタがメモリエリア設定レジスタ＃２である。すなわち、メモリエリア設定レジスタ＃２の設定を変更すると、ノンセキュアＯＳ部３００ｄの領域に対するアクセス権が変更されることになる。なお、ノンセキュアＯＳ部３００ｄからライト禁止するようにメモリエリア設定レジスタ＃２を設定した後に、再びライト許可するようにメモリエリア設定レジスタ＃２の内容を上書きされる事を防止するために、ノンセキュアＯＳ部３００ｄはメモリエリア設定レジスタ＃２自体をノンセキュアＯＳ部３００ｄからライト禁止するように設定してもよい。
【手続補正３１】
【補正対象書類名】明細書
【補正対象項目名】００９２
【補正方法】変更
【補正の内容】
【００９２】
図１９ではノンセキュアＯＳ部３００ｄの領域設定部３１１は直接、アドレス空間制御部３に対して、ノンセキュアＯＳ部３００ｄのメモリ領域のアクセス権を設定していた。図２１では、ノンセキュアＯＳ部３００ｅからどのようなアクセス権に設定すべきかをセキュアＯＳ部２００ｇの領域設定部２１２に通知し、アドレス空間制御部３に対するアクセス権の設定はセキュアＯＳ部２００ｇの領域設定部２１２から施すものである。すなわち、ノンセキュアＯＳ部３００ｅからは直接アドレス空間制御部３に設定を施さない。
【手続補正３２】
【補正対象書類名】明細書
【補正対象項目名】００９６
【補正方法】変更
【補正の内容】
【００９６】
図２２に領域設定部２１２がアドレス空間制御部３に設定した後のメインメモリ部５のメモリ領域を区分けする一例を示す。情報処理装置１０の起動直後、メインメモリ部５のメモリ領域は図３のように設定されている。領域設定部２１２は図２２のように設定する。すなわち、ノンセキュアＯＳ部３００ｅを配置する領域をリード許可ライト禁止のセキュア領域として指定する点は図２０と同様である。この他にアクセス権設定領域がノンセキュア領域として定義されている。セキュアＯＳ部２００ｇの領域設定部２１２は、このアクセス権設定領域から領域指定部３１２がライトしたアクセス制御情報をリードし、メモリエリア設定レジスタを経由してアドレス空間制御部３に設定を施す。この際、領域設定部２１２は、アクセス制御情報をチェックし、アクセス権の変更対象の領域と、新たに設定しようとしているアクセス権を識別し、変更対象の領域がノンセキュアＯＳ部３００ｅの領域もしくはノンセキュア領域であれば設定変更を許可し、セキュアモニタ部１００またはセキュアＯＳ部２００ｇの領域であれば設定変更を禁止する。また、アクセス権もチェックし、領域指定部３１２によってノンセキュアＯＳ領域がノンセキュア領域からライト禁止・リード許可のセキュア領域に変更されたならば、ノンセキュア領域への変更に戻す事を禁止するようにしてもよい。これにより、ノンセキュア領域からセキュア領域に変更された後に、ノンセキュアＯＳ上の不正なプログラムによってセキュア領域を解除してノンセキュア領域に変更しようとする攻撃を防ぐことができる。
【手続補正３３】
【補正対象書類名】明細書
【補正対象項目名】００９７
【補正方法】変更
【補正の内容】
【００９７】
図２３は領域指定部３１２がアドレス空間制御部３に設定するアクセス権を指定する際のメインプロセッサ部２の処理動作の一例をまとめたフローチャートを示している。領域指定部３１２はノンセキュアＯＳ部３００ｅを配置する領域をリード許可ライト禁止のセキュア領域として指定するよう、領域とアクセス権を指定するデータをアクセス権設定領域にライトする（ステップＳ４０１）。アクセス権設定領域はノンセキュア領域として指定されているため、このライトは正常に実行される。そして、ノンセキュアＯＳ遷移命令呼び出し部３１０を使って、ＯＳ間遷移処理を実行するようメインプロセッサ部２に指示する（ステップＳ４０２）。
【手続補正３４】
【補正対象書類名】明細書
【補正対象項目名】０１００
【補正方法】変更
【補正の内容】
【０１００】
（第４の実施形態）
従来の技術では、メインプロセッサにセキュアモードと、ノンセキュアモードの二つのモードを持たせ、さらにメモリ空間に対するハードウェアのアクセス制御機構により、ノンセキュアモードからセキュアモードの領域を読んだり、改変したりする事を防止する構成について述べられている。また、第１から第３の実施形態では、メインメモリ部５のある特定の領域を情報処理装置１０の起動後にノンセキュアモードから書きこみ禁止に設定する方法について述べた。しかしながら、メインメモリ部５に対するアクセス権の設定後にノンセキュアモードで動作するソフトウェア(ノンセキュアＯＳ部３００)から書きこみ禁止の領域に書き込みを行った場合や、読み込み禁止の領域に読み込みを行った場合の動作については、その詳細な実現方法が従来技術では明らかになっていない。
【手続補正３５】
【補正対象書類名】明細書
【補正対象項目名】０１０３
【補正方法】変更
【補正の内容】
【０１０３】
図２４にメインプロセッサ部２で動作するソフトウェアの構成の一例を示している。ハードウェア構成は第１の実施形態と同じ構成でよい。図２４に示されるように、ソフトウェアとしては、セキュアモニタ部１００ａ、セキュアＯＳ部２００ｉ、ノンセキュアＯＳ部３００ｆを備えている。セキュアモニタ部１００ａはアボートハンドラ部１０４、ＯＳ切替部１０２、セキュアモニタメモリ設定部１０３を備えている。ＯＳ切替部１０２、セキュアモニタメモリ設定部１０３は、図２に説明したものと同じ機能でよい。ノンセキュアＯＳ部３００ｆは、タイマハンドラ部３０１、スケジューラ部３０２、タスク実行部３０３、データリード部３０４、データライト部３１３を備えている。タイマハンドラ部３０１、スケジューラ部３０２、タスク実行部３０３、データリード部３０４は、図２に説明したものと同じ機能でよい。セキュアＯＳ部２００ｉはセキュアＯＳ遷移命令呼び出し部２０３、データライト部２０４、アボートハンドラ部２１３、アボート原因調査部２１４、ログ生成部２１５を備えている。セキュアＯＳ遷移命令呼び出し部２０３、データライト部２０４は、図２に説明したものと同じ機能でよい。
【手続補正３６】
【補正対象書類名】明細書
【補正対象項目名】０１０７
【補正方法】変更
【補正の内容】
【０１０７】
アボート原因調査部２１４は、データアボート例外が発生した場合、その原因を特定する処理を行い、ログ生成部２１５にその原因をログとして記録するよう指示する処理部である。ログ生成部２１５は、アボート原因調査部２１４からの指示に基づきデータアボート例外の原因をログとして記録するためにメインメモリ部５にログの記録を出力する処理部である。
【手続補正３７】
【補正対象書類名】明細書
【補正対象項目名】０１０９
【補正方法】変更
【補正の内容】
【０１０９】
すると、アドレス空間制御部３がアクセス権違反を検出し、データアボート例外を発生させる。データアボート例外が発生すると、メインプロセッサ部２は処理をセキュアモニタ部１００ａのアボートハンドラ部１０４に遷移させる（ステップＳ５０２）。なお、セキュアモニタメモリ設定部１０３はアドレス空間制御部３がアクセス権違反を検出した場合に、セキュアモニタ部１００ａのアボートハンドラ部１０４を呼び出すように、あらかじめ設定しておく。この設定は、情報処理装置１０の起動時の初期化処理の一手順としてなされる。セキュアモニタ部１００ａのアボートハンドラ部１０４はＯＳ切替部１０２を呼び出し（ステップＳ５０３）、メインプロセッサ部２のモードをセキュアモードに切り替え、ノンセキュアＯＳからセキュアＯＳに遷移させ、さらにセキュアＯＳ部２００ｉのアボートハンドラ部２１３を呼び出す（ステップＳ５０４）。
【手続補正３８】
【補正対象書類名】明細書
【補正対象項目名】０１１０
【補正方法】変更
【補正の内容】
【０１１０】
アボートハンドラ部２１３はアボート原因調査部２１４を呼び出す。アボート原因調査部２１４は、メインプロセッサ部２のレジスタの値と、アボート例外が発生した領域周辺のメモリ領域を走査し、どの領域でどのような命令によりアボート例外が発生したのかを調査する（ステップＳ５０５）。たとえば、メインプロセッサ部２のレジスタの値、たとえばプログラムカウンタの値(メインプロセッサ部２が実行した命令のアドレス)を読み出し、そのアドレスもしくは前後のアドレスからアボート例外の発生原因となった命令を特定し、命令Ａによってライト禁止のアドレスＸに対するライト命令を実行しようとしたためにアボート例外が発生した事や、命令Ａ’によってリード禁止のアドレスＹに対するリード命令を実行しようとしたためにアボート例外が発生したといった事を調査し、その原因となった命令とアクセスしようとしたアドレス、命令に付帯する属性情報に関する情報をログ生成部２１５に送信する（ステップＳ５０６）。ログ生成部２１５はその情報をメインメモリ部５に出力する（ステップＳ５０７）。
【手続補正３９】
【補正対象書類名】明細書
【補正対象項目名】０１１３
【補正方法】変更
【補正の内容】
【０１１３】
この例では、ノンセキュアＯＳ部３００ｆが配置されている領域はセキュアＯＳ部２００ｉのアボートハンドラ部２１３を呼び出す。一方、更新データ領域やセキュアモニタが格納されている領域及びセキュアＯＳが格納されている領域にノンセキュアモードからのライト命令があったとしてもセキュアＯＳ部２００ｉのアボートハンドラ部２１３を呼び出さない。この時のアクセス権の設定を図２７に示す。
【手続補正４０】
【補正対象書類名】明細書
【補正対象項目名】０１１４
【補正方法】変更
【補正の内容】
【０１１４】
ノンセキュアモードからメインメモリ部５にアクセスした領域に応じて、セキュアＯＳ部２００ｉのアボートハンドラ部２１３を呼び出すか否かを判定する際のメインプロセッサ部２の処理動作の一例をまとめたフローチャートを図２８に示す。
【手続補正４１】
【補正対象書類名】明細書
【補正対象項目名】０１１５
【補正方法】変更
【補正の内容】
【０１１５】
アドレス空間制御部３がアクセス権違反を検出し、アボート例外を発生させて、アドレス空間制御部３がセキュアモニタ部１００ａのアボートハンドラ部１０４を呼び出すまでは図２５と同一の処理でよい。セキュアモニタ部１００ａのアボートハンドラ部１０４はメインメモリ部５のどの領域でアボート例外が発生したかを調査する（ステップＳ６０１）。そして、特定した発生領域によってセキュアＯＳ部２００ｉのアボートハンドラ部２１３を呼び出すか否かを判定する（ステップＳ６０２）。もしも更新データ領域やセキュアモニタ部１００ａが格納されている領域及びセキュアＯＳが格納されている領域だった場合には、以後の処理は行わずに、ノンセキュアＯＳ部３００ｆに処理を戻す。一方、ノンセキュアＯＳ部３００ｆが配置されている領域である場合は、ＯＳ間遷移処理を行い、図２５と同様の処理を行う。
【手続補正４２】
【補正対象書類名】明細書
【補正対象項目名】０１１６
【補正方法】変更
【補正の内容】
【０１１６】
このようにノンセキュアＯＳ部３００ｆへのライトが発生した場合にのみログを生成する構成にした利点として、ノンセキュアＯＳ部３００ｆのデバッグに利用する事ができる。図２７に示したとおり、ノンセキュアモードからノンセキュアＯＳ部３００ｆへのライトを禁止しているが、攻撃者による不正なノンセキュアＯＳ部３００ｆの改変でなくても、ノンセキュアＯＳ部３００ｆの正当な機能として、ノンセキュアＯＳ部３００ｆが自己改変型機能を備えていたり、ノンセキュアＯＳのコード領域を上書きするようなドライバのインストールを許可したりする場合などでは、ノンセキュアＯＳが自身のコード領域を上書きし、ノンセキュアＯＳの起動後に処理の内容を動的に変更する場合がある。ノンセキュアＯＳ部３００ｆがそのような構成になっている場合に、開発者が開発段階でメインメモリ部５のアクセス権を図２７の構成に設定してノンセキュアＯＳ部３００ｆを実行すると、本来、ノンセキュアＯＳは自身の管理するメモリ領域を変更(上書き)可能であると想定して処理を行う。このため、この処理に失敗した場合、ノンセキュアＯＳは予測不能の事態が発生したとして停止してしまう。一方、セキュアＯＳ部２００ｉのログ生成部２１５により、メインメモリ部５のログデータ領域には、ノンセキュアＯＳがアクセスを試みたアドレスや命令が記録されているため、ノンセキュアＯＳの開発者はどのような原因でノンセキュアＯＳが停止したかを知る事ができる。
【手続補正４３】
【補正対象書類名】明細書
【補正対象項目名】０１１８
【補正方法】変更
【補正の内容】
【０１１８】
同様に、ノンセキュアモードからライトが禁止されているノンセキュアＯＳ部３００ｆのコード領域へのライトであっても、特定の領域であればライトを許可するように構成してもよい。その際のメインプロセッサ部２の処理動作の一例をまとめたフローチャートを図２９に示す。まず、ノンセキュアＯＳ部３００ｆのコード領域へのライトが発生した場合、どの領域へのライト命令ならデータをメインメモリ部５にライトするか、どの領域であればライトしないかをあらかじめセキュアＯＳ部２００ｉのアボート原因調査部２１４に登録しておく。この設定処理は機器起動時の処理の一部として行う。
【手続補正４４】
【補正対象書類名】明細書
【補正対象項目名】０１１９
【補正方法】変更
【補正の内容】
【０１１９】
次にノンセキュアＯＳ部３００ｆのコード領域へのライトが発生した場合、アボート原因調査部２１４で、メインプロセッサ部２のレジスタの値と、アボート例外が発生した周辺のメモリ領域を走査し、どのアドレスへのアクセスでどのような命令によりアボート例外が発生したのかを調査する（ステップＳ５０５）。もしもアボート原因調査部２１４があらかじめライトを許可すると設定された領域と判断すれば、セキュアＯＳ部２００ｉのデータライト部２０４を利用してメインメモリ部５にデータをライトする（ステップＳ６０３）。すなわち、実際のデータのライト処理はノンセキュアＯＳ部３００ｆではなく、セキュアＯＳ部２００ｉでなされる事になる。その後の処理は図２８と同じである。なお、この場合、必ずしもログ生成部２１５はログ情報をメインメモリ部５に書きこむ必要はない。
【手続補正４５】
【補正対象書類名】明細書
【補正対象項目名】０１２０
【補正方法】変更
【補正の内容】
【０１２０】
これにより、ノンセキュアＯＳ部３００ｆからは実際にデータが書きこまれたかのように見せかける事ができるため、ノンセキュアＯＳ部３００ｆが自己改変型機能を備えていたり、ノンセキュアＯＳ部３００ｆのコード領域を上書きしたりするようなドライバのインストールを許可する事が実現可能となる。一方で、ノンセキュアＯＳ部３００ｆのコード領域のうち所定の領域以外に対しての上書きは禁止されるため、ノンセキュアＯＳ上で動作する不正なプログラムがノンセキュアＯＳ部３００ｆのコード領域を上書きする攻撃を防止する事が可能となる。
【手続補正４６】
【補正対象書類名】明細書
【補正対象項目名】０１２１
【補正方法】変更
【補正の内容】
【０１２１】
また、アボート原因調査部２１４の調査結果に応じて、ログ生成部２１５はログ情報をメインメモリ部５に出力するか否かを判定してもよい。その時のメインプロセッサ部２の処理動作の一例をまとめたフローチャートを図３０に示す。アボート原因調査部２１４はアボート例外が発生した原因を調査し、アボート例外が発生したアドレスと命令をログ生成部２１５に通知する（ステップＳ５０５）。ログ生成部２１５は通知されたアドレスからログの記憶対象領域か否かを判定し、ログをメインメモリ部５にライトするか否かを決定する（ステップＳ７０１）。すなわち、ログ生成部２１５はすべてのアボート例外をデータライト部２０４に送信する訳ではなく、フィルタリング処理を行う。
【手続補正４７】
【補正対象書類名】明細書
【補正対象項目名】０１２４
【補正方法】変更
【補正の内容】
【０１２４】
図３１にアボート例外を発生させたノンセキュアＯＳのプロセスを停止させる際の、メインプロセッサ部２で動作するソフトウェアの構成の一例を示している。図２４との違いは、セキュアＯＳ部２００ｊがログ生成部２１５の代わりにプロセス特定部２１６を備え、ノンセキュアＯＳ部３００ｆに新たにプロセス停止部３１４を備えている点である。
【手続補正４８】
【補正対象書類名】明細書
【補正対象項目名】０１２５
【補正方法】変更
【補正の内容】
【０１２５】
プロセス特定部２１６は、アボート原因調査部２１４が収集したアボート例外を発生させた命令とアドレスから、ノンセキュアＯＳ部３００ｆで実行していたプロセスのうち、どのプロセスがアボート例外を発生させたのかプロセスを特定する処理部である。プロセス停止部３１４は、プロセス特定部２１６が特定したプロセスを停止させる処理部である。
【手続補正４９】
【補正対象書類名】明細書
【補正対象項目名】０１２７
【補正方法】変更
【補正の内容】
【０１２７】
その後、プロセス特定部２１６は、アボート原因調査部２１４が収集した情報に加え、さらにメインメモリ部５からノンセキュアＯＳ部３００ｆのどのプロセスがアボート例外を発生させたのかを調査し、プロセスＩＤなどのプロセス情報をメインメモリ部５にライトする（ステップＳ８０１）。そして、セキュアＯＳ遷移命令呼び出し部２０３を呼び出し（ステップＳ８０２）、ＯＳ間遷移処理を実行する（ステップＳ８０３）。ノンセキュアＯＳに遷移後（ステップＳ８０４）、ノンセキュアＯＳ部３００ｆのプロセス停止部３１４は、メインメモリ部５から停止すべきプロセス情報をリードし（ステップＳ８０５）、該当プロセスを停止させる（ステップＳ８０６）。
【手続補正５０】
【補正対象書類名】明細書
【補正対象項目名】０１２９
【補正方法】変更
【補正の内容】
【０１２９】
図３１との違いは、プロセス特定部３１５がセキュアＯＳ部２００ｋではなくノンセキュアＯＳ部３００ｇにある点である。この構成では、セキュアＯＳ部２００ｋがプロセスの特定を行わず、アボート例外を引き起こしたアドレスの通知を行い、そのアドレスを元にノンセキュアＯＳ部３００ｇのプロセス特定部３１５が、そのアドレスを利用しているプロセスを特定し、プロセス停止部３１４で該当プロセスを停止させる。
【手続補正５１】
【補正対象書類名】明細書
【補正対象項目名】０１３０
【補正方法】変更
【補正の内容】
【０１３０】
この別例として、セキュアＯＳ部２００ｋからノンセキュアＯＳ部３００ｇにＯＳ間遷移を行わずにノンセキュアＯＳ部３００ｇのプロセスを停止させてもよい。その場合の構成を図３４に示す。図３３との違いは、セキュアモニタ部１００ｂにプロセス特定部実行部１０５が新たに備わっている点である。
【手続補正５２】
【補正対象書類名】明細書
【補正対象項目名】０１３１
【補正方法】変更
【補正の内容】
【０１３１】
また、図３３のプロセス停止部３１４がアプリケーションプロセスとして実行されていたのに対し、図３４ではプロセス停止部３１４とプロセス特定部３１５がノンセキュアＯＳ部３００ｇのカーネル内で実行される。プロセス特定部実行部１０５は、ノンセキュアＯＳ部３００ｇのプロセス特定部３１５を実行させる処理部である。この際、セキュアＯＳ部２００ｋからノンセキュアＯＳ部３００ｇへのＯＳ間遷移処理は実行されない。ノンセキュアＯＳ部３００ｇのプロセス特定部３１５とプロセス停止部３１４は実行されるが、ノンセキュアＯＳのコンテキストは復帰しないため、ノンセキュアＯＳ自体の処理は実行されない点がポイントである。
【手続補正５３】
【補正対象書類名】明細書
【補正対象項目名】０１３２
【補正方法】変更
【補正の内容】
【０１３２】
図３５にこの構成でのメインプロセッサ部２の処理動作の一例をまとめたフローチャートを示す。アボート原因調査部２１４が調査結果を収集するまでは、図２５に示した処理と同一でよい。その後、セキュアＯＳ部２００ｋのアボート原因調査部２１４は、セキュアモニタ部１００ｂのプロセス特定部実行部１０５を呼び出す（ステップＳ９０１）。
【手続補正５４】
【補正対象書類名】明細書
【補正対象項目名】０１３３
【補正方法】変更
【補正の内容】
【０１３３】
プロセス特定部実行部１０５は、ＯＳ間遷移処理を行うことなく実行され（ステップＳ９０２）、ノンセキュアＯＳ部３００ｇのプロセス特定部３１５とプロセス停止部３１４を呼び出し、対象プロセスの特定と停止を行う（ステップＳ９０３）。この際、ノンセキュアＯＳ自体の処理は実行されない。ノンセキュアＯＳの停止対象プロセスの特定と、停止処理が完了すると、ノンセキュアＯＳを実行する事なく、セキュアモニタ部１００ｂのプロセス特定部実行部１０５に処理を戻す。プロセス特定部実行部１０５はアボート原因調査部２１４に処理を戻す。その後、アボート原因調査部２１４はセキュアＯＳ遷移命令呼び出し部２０３を実行させる（ステップＳ９０４）。その後の処理は、図２５と同様でよい。
【手続補正５５】
【補正対象書類名】明細書
【補正対象項目名】０１３４
【補正方法】変更
【補正の内容】
【０１３４】
なお、図２４に示した構成では、アボート原因調査部２１４が収集した調査結果をログ生成部２１５が記録する方法について説明してきたが、ログとして記録するのではなく、調査結果を元に情報処理装置１０を停止ないしは再起動させてもよい。図３８にその構成を示す。図２４との違いは、ログ生成部２１５の代わりにリブート部２１９を備えている点である。リブート部２１９は、情報処理装置１０を再起動する命令を実行する処理部である。アボート原因調査部２１４は、データアボート例外が発生した場合、その原因を特定する処理を行い、リブート部２１９に対して情報処理装置１０を再起動するよう指示する処理を行う。なお、リブート部２１９は再起動の代わりにシステムを停止してもよい。
【手続補正５６】
【補正対象書類名】明細書
【補正対象項目名】０１３５
【補正方法】変更
【補正の内容】
【０１３５】
なお、図２４に示した構成では、ログ情報を平文としてメインメモリ部５に出力していたが、暗号化して出力してもよい。その場合の構成を図３６に示す。図２４との違いは、セキュアＯＳ部２００ｌに鍵管理部２１７とログ暗号化部２１８を備えている点である。鍵管理部２１７は、ログ暗号化部２１８で例外発生原因を暗号化するための鍵を保持する処理部である。ログ暗号化部２１８は、アボート原因調査部２１４で調査した例外発生原因を暗号アルゴリズムによって鍵管理部２１７が保持する鍵を用いて暗号化する処理部である。
【手続補正５７】
【補正対象書類名】明細書
【補正対象項目名】０１３６
【補正方法】変更
【補正の内容】
【０１３６】
以上述べてきたように、本実施形態では、ノンセキュアモードからアクセス禁止と指定されたメモリ領域に対して、アクセスを行った場合のセキュアＯＳ部２００の動作について述べた。アボート例外が発生した場合、ノンセキュアＯＳ部３００の処理を中断し、セキュアＯＳ部２００で処理を行う点が特徴である。
【手続補正５８】
【補正対象書類名】明細書
【補正対象項目名】０１３７
【補正方法】変更
【補正の内容】
【０１３７】
（第５の実施形態）
第３の実施形態では、ノンセキュアＯＳ部３００の領域指定部３１２がアドレス空間制御部３に対して、領域とアクセス権の指定をし、セキュアＯＳ部２００の領域設定部２１２がアドレス空間制御部３に対して領域とアクセス権の設定を行う方法について述べた。第３の実施形態では、また、タイマ部１１が生成するタイマ割り込みに応じてセキュアＯＳ部２００のデータ更新部２０２が管理するカウンタ値を更新する例について示したが、第４の実施形態では、ノンセキュアモードからアクセス禁止と指定されたメモリ領域に対して、アクセスを行った場合のセキュアＯＳ部２００の動作について述べた。
【手続補正５９】
【補正対象書類名】明細書
【補正対象項目名】０１３９
【補正方法】変更
【補正の内容】
【０１３９】
（第６の実施形態）
第１の実施形態では、ノンセキュアＯＳ部に依存せずセキュアＯＳ部が定期的な処理を行う事を実現する方法を示した。この実施形態では、ノンセキュアＯＳ部が停止していないことをセキュアＯＳ部が定期的に検査することで、情報処理装置１０が停止する時間を短くするものである。ノンセキュアＯＳ部はＬｉｎｕｘ（登録商標）のような汎用のオペレーティングシステムを想定している。このため、ノンセキュアモードで動作するオペレーティングシステムやドライバ、アプリケーションに含まれるバグや設定ミスなどによってノンセキュアモードで動作するプログラムが停止したり、無限ループに陥って他の処理ができなくなったりする危険性がある。そこで、セキュアＯＳ部が定期的にノンセキュアＯＳ部の状態を検査する。
【手続補正６０】
【補正対象書類名】明細書
【補正対象項目名】０１４０
【補正方法】変更
【補正の内容】
【０１４０】
図３９は、第６の実施形態で説明する情報処理装置１０のメインプロセッサ部で動作するソフトウェアの構成の一例を示している。ハードウェア構成は第１の実施形態と同じ構成でよい。図６との違いは、ノンセキュアＯＳ部３００ｇがタスク実行部３０３の代わりに状態通知部３１８を備えている点、データリード部３０４の代わりにデータライト部３１３を備えている点、セキュアＯＳ部２００ｋがデータ更新部２０２の代わりに状態検査部２２０を備えている点、リブート部２１９を備えている点である。
【手続補正６１】
【補正対象書類名】明細書
【補正対象項目名】０１４１
【補正方法】変更
【補正の内容】
【０１４１】
ノンセキュアＯＳ部３００ｇにおいて、スケジューラ部３０２は、一定周期で状態通知部３１８を実行させる。状態通知部３１８はデータライト部３１３を使い、状態通知部３１８が実行されたことを示す情報をメインメモリ部５のノンセキュア領域にライトする。この情報としては、カウンタ値でもよいし、乱数でもよい。
【手続補正６２】
【補正対象書類名】明細書
【補正対象項目名】０１４２
【補正方法】変更
【補正の内容】
【０１４２】
リブート部２１９は、情報処理装置１０を再起動する命令を実行する処理部である。タイマ部１１のタイマ割り込みにより、セキュアモニタ部１００のタイマハンドラ部１０１は周期的に実行される。すなわち、状態検査部２２０は、セキュアモニタ部１００のタイマハンドラ部１０１、セキュアＯＳ部２００ｋのタイマハンドラ部２０１を介して、定期的に実行される。これは第１の実施形態と同様、ノンセキュアＯＳが処理を行っていたとしても強制的に状態検査部２２０が定期的に実行される事を意味する。状態検査部２２０は、タイマハンドラ部２０１からタイマ割り込みの通知を受けると、データリード部２０５を使い、メインメモリ部５から状態通知部３１８がライトした情報をリードして、その情報が更新されているか否かを検査する。この検査は、たとえばカウンタ値であればカウンタ値が更新されているか、乱数であれば前にリードした値と異なる値となっているかを検査すればよい。もし更新されていると判断した場合は、状態検査部２２０は、セキュアＯＳ遷移命令呼び出し部２０３を経由して、ノンセキュアＯＳ部３００ｇに処理を遷移させる。もし更新されていない場合は、状態検査部２２０は、ノンセキュアＯＳ部３００ｇが何らかの異常状態にあると判断し、リブート部２１９を呼び出し、情報処理装置１０を再起動させる。なお、情報処理装置１０を再起動させる方法として、情報処理装置１０自体を再起動させる方法と、ノンセキュアＯＳ部３００ｇのみ再起動させる方法がある。情報処理装置１０自体を再起動させる場合は、メインプロセッサ部２でリセット命令を実行すればよい。ノンセキュアＯＳ部３００ｇのみ再起動させる場合は、セキュアモニタ部１００で管理しているノンセキュアＯＳ部３００ｇのコンテキストと、ノンセキュアＯＳ部３００ｇ自体が管理するコンテキストをクリアしてノンセキュアＯＳ部３００ｇの起動処理を実行すればよい。
【手続補正６３】
【補正対象書類名】明細書
【補正対象項目名】０１４３
【補正方法】変更
【補正の内容】
【０１４３】
なお、状態通知部３１８がメインメモリ部５の情報を更新する前に、情報が更新されているかどうかの検査を状態検査部２２０が行ってしまう事を防ぐために、情報が更新されているか否かを状態検査部２２０が検査する間隔は、状態通知部３１８がメインメモリ部５の情報を更新する間隔よりも大きい事が望ましい。
【手続補正６４】
【補正対象書類名】明細書
【補正対象項目名】０１４４
【補正方法】変更
【補正の内容】
【０１４４】
もし、ノンセキュアＯＳ部３００ｇ、ノンセキュアＯＳ部３００ｇにインストールされたドライバ、またはノンセキュアＯＳ部３００ｇで動作するアプリケーションに含まれるバグや設定ミスなどによって、ノンセキュアＯＳ部３００ｇが停止したり、無限ループに陥ったりした場合、スケジューラ部３０２が呼ばれず、結果として状態通知部３１８も実行されない。従って、ノンセキュアＯＳ部３００ｇが正常な状態にある場合には、定期的にスケジューラ部３０２が実行され、状態通知部３１８が情報を更新していると期待できる。本実施形態では、仮にノンセキュアＯＳ部３００ｇが停止した場合でも、セキュアＯＳ部２００ｋが定期的に実行される。このため、状態通知部３１８が更新する情報を元にノンセキュアＯＳ部３００ｇが正常な状態にあるか停止状態にあるかを判別し、停止状態の場合には情報処理装置１０を再起動させる事により、ノンセキュアＯＳ部３００ｇの停止時間を短くすることができる。
【手続補正６５】
【補正対象書類名】明細書
【補正対象項目名】０１４６
【補正方法】変更
【補正の内容】
【０１４６】
図４０は、第７の実施形態で説明する情報処理装置１０のメインプロセッサ部２で動作するソフトウェアの構成の一例を示している。ハードウェア構成は第１の実施形態と同じ構成でよい。図６との違いは、ノンセキュアＯＳ部３００ｈがタスク実行部３０３の代わりに改ざん検出部３１６を備えている点、期待値格納部３１７を備えている点、セキュアＯＳ部２００ｎがデータ更新部２０２の代わりにメモリ検査部２２１を備えている点、データライト部２０４がない点、リブート部２１９、期待値格納部２２２を備えている点である。
【手続補正６６】
【補正対象書類名】明細書
【補正対象項目名】０１４８
【補正方法】変更
【補正の内容】
【０１４８】
セキュアＯＳ部２００ｎの期待値格納部２２２はノンセキュアＯＳ部３００ｈの改ざん検出部３１６の正規の状態（改ざんされていない状態）のハッシュ値を格納する処理部である。このハッシュ値は情報処理装置１０の起動に先立ち、あらかじめ計算しておいた値が格納されている。
【手続補正６７】
【補正対象書類名】明細書
【補正対象項目名】０１４９
【補正方法】変更
【補正の内容】
【０１４９】
リブート部２１９は、情報処理装置１０を再起動する命令を実行する処理部である。なお、リブート部２１９は必須の構成ではない。タイマ部１１のタイマ割り込みにより、セキュアモニタ部１００のタイマハンドラ部１０１は周期的に実行される。すなわち、メモリ検査部２２１は、セキュアモニタ部１００のタイマハンドラ部１０１、セキュアＯＳ部２００ｎのタイマハンドラ部２０１を介して、定期的に実行される。これは第１の実施形態と同様、ノンセキュアＯＳが処理を行っていたとしても強制的にメモリ検査部２２１が定期的に実行される事を意味する。メモリ検査部２２１は、タイマハンドラ部２０１からタイマ割り込みの通知を受けると、データリード部２０５を介して改ざん検出部３１６が配置されている領域を読み出し、セキュアＯＳ部２００ｎの期待値格納部２２２に格納された値と一致するか否か検査を行う。
【手続補正６８】
【補正対象書類名】明細書
【補正対象項目名】０１５０
【補正方法】変更
【補正の内容】
【０１５０】
もし一致していれば、改ざん検出部３１６が改ざんされていないとみなして、セキュアＯＳ遷移命令呼び出し部２０３が呼び出され、ノンセキュアＯＳ部３００ｈの処理が再開される。一方、もし一致していなければ、改ざん検出部３１６が改ざんされているととみなしてリブート部２１９を呼び出し、情報処理装置１０を再起動させる。再起動させる他にも、ノンセキュアＯＳ部３００ｈに警告メッセージを送信する処理が考えられる。攻撃者は、改ざん検出部３１６がノンセキュアＯＳの改ざん検出処理を行わないように処理を改ざんしたり、常に改ざんされていないと報告するように改ざん検出処理の結果を書き換えたりするかもしれない。第７の実施形態では、ノンセキュアＯＳ部３００ｈの改ざん検出部３１６が、ノンセキュアＯＳ部３００ｈが改ざんされていない事を確認し、改ざん検出部３１６が改ざんされていない事をセキュアＯＳ部２００ｎのメモリ検査部２２１が確認することによって、ノンセキュアＯＳ部３００ｈが改ざんされていない事を検証することができる。これにより、攻撃者によってノンセキュアＯＳが改ざんされた場合には改ざん検出部３１６が検出する事が可能である。さらに改ざん検出部３１６が改ざんされた場合にはメモリ検査部２２１が改ざんを検出する事ができる。
【手続補正６９】
【補正対象書類名】明細書
【補正対象項目名】０１５１
【補正方法】変更
【補正の内容】
【０１５１】
すべての改ざん検出処理をセキュアＯＳ部２００ｎで行う事も可能であるが、ノンセキュアＯＳ部３００ｈのデータ構造などノンセキュアＯＳ部３００ｈに固有のデータが改ざんされていないかどうかを検出するにはノンセキュアＯＳ部３００ｈの中で行った方が効率的である。従って、本実施形態では、ノンセキュアＯＳ部３００ｈの改ざん検出をノンセキュアＯＳ上で動作するプログラム、すなわちノンセキュアＯＳ部３００ｈのドライバまたはノンセキュアＯＳ部３００ｈ上で動作するアプリケーションで行っている。
【手続補正７０】
【補正対象書類名】明細書
【補正対象項目名】０１５３
【補正方法】変更
【補正の内容】
【０１５３】
１  情報処理装置
２  メインプロセッサ部
３  アドレス空間制御部
４  メモリ制御部
５  メインメモリ部
６  二次記憶部制御部
７  二次記憶部
８  ブリッジ部
９  Ｉ／Ｏ処理部
１１  タイマ部
１００  セキュアモニタ部
１０１  タイマハンドラ部
１０２  ＯＳ切替部
１０３  セキュアモニタメモリ設定部
１０４  アボートハンドラ部
１０５  プロセス特定部実行部
２００  セキュアＯＳ部
２０１  タイマハンドラ部
２０２  データ更新部
２０３  セキュアＯＳ遷移命令呼び出し部
２０４  データライト部
２０５  データリード部
２０６  鍵管理部
２０７  暗号処理部
２０８  第２データリード部
２０９  復号処理部
２１０  データ取得部
２１１  出力モード設定部
２１２  領域設定部
２１３  アボートハンドラ部
２１４  アボート原因調査部
２１５  ログ生成部
２１６  プロセス特定部
２１７  鍵管理部
２１８  ログ暗号化部
３００  ノンセキュアＯＳ部
３０１  タイマハンドラ部
３０２  スケジューラ部
３０３  タスク実行部
３０４  データリード部
３０４ａ  暗号化データリード部
３０４ｂ  平文データリード部
３０５  データ送信部
３０６  データ出力部
３０７  鍵管理部
３０８  データ復号部
３０９  モード設定部
３１０  ノンセキュアＯＳ遷移命令呼び出し部
３１１  領域設定部
３１２  領域指定部
３１３  データライト部
３１４  プロセス停止部
３１５  プロセス特定部
４００  検証サーバ
４０１  データ受信部
４０２  データ復号部
４０３  鍵管理部
５００  ディスプレイ部
【手続補正７１】
【補正対象書類名】図面
【補正対象項目名】図１
【補正方法】変更
【補正の内容】
【図１】
2015064677.tif 000043
【手続補正７２】
【補正対象書類名】図面
【補正対象項目名】図１４
【補正方法】変更
【補正の内容】
【図１４】
2015064677.tif 000044
【手続補正７３】
【補正対象書類名】図面
【補正対象項目名】図１５
【補正方法】変更
【補正の内容】
【図１５】
2015064677.tif 000045
【手続補正７４】
【補正対象書類名】図面
【補正対象項目名】図１６
【補正方法】変更
【補正の内容】
【図１６】
2015064677.tif 000046
【手続補正７５】
【補正対象書類名】図面
【補正対象項目名】図２４
【補正方法】変更
【補正の内容】
【図２４】
2015064677.tif 000047
【手続補正７６】
【補正対象書類名】図面
【補正対象項目名】図２８
【補正方法】変更
【補正の内容】
【図２８】
2015064677.tif 000048
【手続補正７７】
【補正対象書類名】図面
【補正対象項目名】図２９
【補正方法】変更
【補正の内容】
【図２９】
2015064677.tif 000049
【手続補正７８】
【補正対象書類名】図面
【補正対象項目名】図３０
【補正方法】変更
【補正の内容】
【図３０】
2015064677.tif 000050
【手続補正７９】
【補正対象書類名】図面
【補正対象項目名】図３１
【補正方法】変更
【補正の内容】
【図３１】
2015064677.tif 000051
【手続補正８０】
【補正対象書類名】図面
【補正対象項目名】図３３
【補正方法】変更
【補正の内容】
【図３３】
2015064677.tif 000052
【手続補正８１】
【補正対象書類名】図面
【補正対象項目名】図３４
【補正方法】変更
【補正の内容】
【図３４】
2015064677.tif 000053
【手続補正８２】
【補正対象書類名】図面
【補正対象項目名】図３６
【補正方法】変更
【補正の内容】
【図３６】
2015064677.tif 000054
【手続補正８３】
【補正対象書類名】図面
【補正対象項目名】図３７
【補正方法】変更
【補正の内容】
【図３７】
2015064677.tif 000055
【手続補正８４】
【補正対象書類名】図面
【補正対象項目名】図３８
【補正方法】変更
【補正の内容】
【図３８】
2015064677.tif 000056
【手続補正８５】
【補正対象書類名】図面
【補正対象項目名】図３９
【補正方法】変更
【補正の内容】
【図３９】
2015064677.tif 000057
【手続補正８６】
【補正対象書類名】図面
【補正対象項目名】図４０
【補正方法】変更
【補正の内容】
【図４０】
2015064677.tif 000058