(57)【要約】【課題】ローエンド情報機器であっても適切な分割検証を実現できる情報処理装置およびプログラムを提供する。【解決手段】実施形態の情報処理装置は、ファームウェアが格納された第１メモリを備える情報処理装置であって、シグナル生成部と、改ざん検証部と、アクセス権更新部と、を備える。シグナル生成部は、前記第１メモリに対しアクセス権に違反するアクセスがあった場合に、シグナルを生成する。改ざん検証部は、前記アクセス権に違反するアクセスが、予め定めた検証対象領域に対する検証要求である場合に、前記シグナルに応じて、前記検証対象領域に対する改ざん検証を行う。アクセス権更新部は、改ざん検証を行った前記検証対象領域に対応するアクセス権を更新する。【選択図】図２
2018081577.tif 000002
【特許請求の範囲】
【請求項１】
ファームウェアが格納された第１メモリを備える情報処理装置であって、
前記第１メモリに対しアクセス権に違反するアクセスがあった場合に、シグナルを生成するシグナル生成部と、
前記アクセス権に違反するアクセスが、予め定めた検証対象領域に対する検証要求である場合に、前記シグナルに応じて、前記検証対象領域に対する改ざん検証を行う改ざん検証部と、
改ざん検証を行った前記検証対象領域に対応するアクセス権を更新するアクセス権更新部と、
を備える情報処理装置。
【請求項２】
前記シグナルが生成された場合に、少なくとも前記メモリ上の前記検証対象領域の範囲を示す情報を含むセキュリティ処理情報と、前記アクセス権に違反するアクセスに関する情報とに基づいて、前記アクセス権に違反するアクセスが前記検証対象領域に対する検証要求であるか否かを判定し、前記アクセス権に違反するアクセスが前記検証対象領域に対する検証要求であると判定した場合に、前記改ざん検証部に対して前記検証対象領域に対する改ざん検証を依頼するセキュリティ処理管理部をさらに備え、
前記改ざん検証部は、前記セキュリティ処理管理部の依頼に応じて、前記検証対象領域に対する改ざん検証を行う、
請求項１に記載の情報処理装置。
【請求項３】
前記情報処理装置の起動時に、複数の前記検証対象領域を含む領域全体に対して共通のアクセス権が設定され、
前記アクセス権更新部は、複数の前記検証対象領域を含む領域のうち、改ざん検証を行った前記検証対象領域に対応するアクセス権のみを更新する、
請求項１または２に記載の情報処理装置。
【請求項４】
前記アクセス権更新部は、改ざん検証を行った前記検証対象領域に対応する新たなアクセス権を持つ領域を追加することで、当該検証対象領域に対応するアクセス権を更新する、
請求項３に記載の情報処理装置。
【請求項５】
前記アクセス権更新部は、改ざん検証を行った前記検証対象領域に対して事前に設定したアクセス権を無効から有効に切り替えることで、当該検証対象領域に対応するアクセス権を更新する、
請求項３に記載の情報処理装置。
【請求項６】
前記情報処理装置の起動時に最初に実行される初期実行プログラムが格納された、更新不可能な第２メモリを備え、
前記改ざん検証部は、前記ファームウェアに含まれるセキュアプログラムにより実現され、
前記セキュアプログラムは、当該セキュアプログラムの実行に先立ち、前記初期実行プログラムにより改ざん検証が行われる、
請求項１乃至５のいずれか一項に記載の情報処理装置。
【請求項７】
前記改ざん検証部は、前記第１メモリの前記ファームウェアを格納するメモリ空間上で前記検証対象領域に対する改ざん検証を行う、
請求項１乃至６のいずれか一項に記載の情報処理装置。
【請求項８】
前記第１メモリは、前記ファームウェアを格納する第１メモリ空間と、前記ファームウェアの少なくとも一部のデータがロードされる第２メモリ空間とを含み、
前記検証要求された前記検証対象領域のデータを、前記第１メモリ空間から前記第２メモリ空間にロードするロード部をさらに備え、
前記改ざん検証部は、前記第２メモリ空間上で前記検証対象領域に対する改ざん検証を行う、
請求項１乃至６のいずれか一項に記載の情報処理装置。
【請求項９】
前記アクセス権に違反するアクセスが、予め定めた対象領域に対する暗号処理要求である場合に、前記シグナルに応じて、前記対象領域に対する暗号処理を行う暗号処理部をさらに備え、
前記アクセス権更新部は、暗号処理を行った前記対象領域に対応するアクセス権をさらに更新する、
請求項１乃至８のいずれか一項に記載の情報処理装置。
【請求項１０】
前記ファームウェアによる通常処理を実行する第１プロセッサコアと、前記改ざん検証部の処理を実行する第２プロセッサコアと、を含む複数のプロセッサコアを備える、
請求項１乃至９のいずれか一項に記載の情報処理装置。
【請求項１１】
前記検証対象領域に対する予約検証生成ルールを設定する予約検証部をさらに備え、
前記改ざん検証部は、前記シグナルが生成されない場合であっても、前記予約検証生成ルールに適合する場合に、前記検証対象領域に対する改ざん検証を行う、
請求項１乃至１０のいずれか一項に記載の情報処理装置。
【請求項１２】
前記予約検証部は、前記予約検証生成ルールに応じた前記検証対象領域の改ざん検証に失敗した場合に、当該検証対象領域へのアクセスを回避するための操作を行う、
請求項１１に記載の情報処理装置。
【請求項１３】
アクセス権が設定された領域を再設定して、新たにアクセス権を設定可能な領域の確保を行う領域再設定部をさらに備える、
請求項１乃至１２のいずれか一項に記載の情報処理装置。
【請求項１４】
インターフェースを介してホストと通信し、前記ホストからの要求に応じて前記第１メモリにアクセスする、
請求項１乃至１３のいずれか一項に記載の情報処理装置。
【請求項１５】
ファームウェアが格納された第１メモリを備える情報処理装置であって、
前記第１メモリに対しアクセス権に違反するアクセスがあった場合に、シグナルを生成するシグナル生成部と、
前記アクセス権に違反するアクセスが、予め定めた対象領域に対する暗号処理要求である場合に、前記シグナルに応じて、前記対象領域に対する暗号処理を行う暗号処理部と、
暗号処理を行った前記対象領域に対応するアクセス権を更新するアクセス権更新部と、
を備える情報処理装置。
【請求項１６】
ファームウェアが格納された第１メモリを備える情報処理装置に、
前記第１メモリに対しアクセス権に違反するアクセスがあった場合に、シグナルを生成する機能と、
前記アクセス権に違反するアクセスが、予め定めた検証対象領域に対する検証要求である場合に、前記シグナルに応じて、前記検証対象領域に対する改ざん検証を行う機能と、
改ざん検証を行った前記検証対象領域に対応するアクセス権を更新する機能と、
を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置およびプログラムに関する。
【背景技術】
【０００２】
近年、パーソナルコンピュータやサーバなどのハイエンド情報機器に対しては、多くのセキュリティ技術が提案されている。特に、機器の起動時にプログラムに対して改ざん検証を行うセキュアブートは、意図しないプログラムの実行防止機構として、様々な機器に導入されている。しかし、セキュアブートは、起動時にプログラム全体の改ざん検証を行うことから、起動にかかる時間が増加してしまう。そのため、起動時に起動に必要な部分のみの改ざん検証を行い、その他の部分は後で改ざん検証を行う分割検証技術が提案されている。
【０００３】
しかし、従来の分割検証技術はハイエンド情報機器での実施を想定しており、高性能なハードウェア資源を持たないローエンド情報機器に対しては、従来の分割検証技術をそのまま適用できない。このため、ローエンド情報機器であっても適切な分割検証を実現できる仕組みの構築が求められている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−３９８８８号公報
【特許文献２】特開２０１６−９８８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、ローエンド情報機器であっても適切な分割検証を実現できる情報処理装置およびプログラムを提供することである。
【課題を解決するための手段】
【０００６】
実施形態の情報処理装置は、ファームウェアが格納された第１メモリを備える情報処理装置であって、シグナル生成部と、改ざん検証部と、アクセス権更新部と、を備える。シグナル生成部は、前記第１メモリに対しアクセス権に違反するアクセスがあった場合に、シグナルを生成する。改ざん検証部は、前記アクセス権に違反するアクセスが、予め定めた検証対象領域に対する検証要求である場合に、前記シグナルに応じて、前記検証対象領域に対する改ざん検証を行う。アクセス権更新部は、改ざん検証を行った前記検証対象領域に対応するアクセス権を更新する。
【図面の簡単な説明】
【０００７】
【図１】情報処理装置の概略構成を例示するブロック図。
【図２】情報処理装置の機能的な構成例を示すブロック図。
【図３】アクセス権情報の一例を示す図。
【図４】セキュリティ処理情報の一例を示す図。
【図５】情報処理装置のハードウェア構成例を示すブロック図。
【図６】メモリマップの一例を示す図。
【図７】アクセス権の設定方法の概要を説明する図。
【図８】ＦＷの領域設定の一例を示す図。
【図９】起動時の処理フローを示すフローチャート。
【図１０】データアクセス時の処理フローを示すフローチャート。
【図１１】シグナル発生時の処理フローを示すフローチャート。
【図１２】セキュリティ処理の処理フローを示すフローチャート。
【図１３】ホスト要求発生時の処理フローを示すフローチャート。
【図１４】アクセス権情報の一例を示す図。
【図１５】セキュリティ処理情報の一例を示す図。
【図１６】ＦＷの領域設定の一例を示す図。
【図１７】情報処理装置の概略構成を例示するブロック図。
【図１８】情報処理装置の機能的な構成例を示すブロック図。
【図１９】情報処理装置のハードウェア構成例を示すブロック図。
【図２０】メモリマップの一例を示す図。
【図２１】起動時の処理フローを示すフローチャート。
【図２２】データアクセス時の処理フローを示すフローチャート。
【図２３】情報処理装置の機能的な構成例を示すブロック図。
【図２４】セキュリティ処理情報の一例を示す図。
【図２５】メモリマップの一例を示す図。
【図２６】ＦＷの領域設定の一例を示す図。
【図２７】セキュリティ処理の処理フローを示すフローチャート。
【図２８】情報処理装置の機能的な構成例を示すブロック図。
【図２９】セキュリティ処理情報の一例を示す図。
【図３０】セキュリティ処理の処理フローを示すフローチャート。
【図３１】情報処理装置の機能的な構成例を示すブロック図。
【図３２】情報処理装置のハードウェア構成例を示すブロック図。
【図３３】メモリマップの一例を示す図。
【図３４】起動時の処理フローを示すフローチャート。
【図３５】データアクセス時の処理フローを示すフローチャート。
【図３６】予約検証時の処理フローを示すフローチャート。
【図３７】情報処理装置の機能的な構成例を示すブロック図。
【図３８】情報処理装置のハードウェア構成例を示すブロック図。
【図３９】起動時の処理フローを示すフローチャート。
【図４０】データアクセス時の処理フローを示すフローチャート。
【図４１】予約検証シグナル発生時の処理フローを示すフローチャート。
【図４２】シグナル発生時の処理フローを示すフローチャート。
【図４３】情報処理装置の機能的な構成例を示すブロック図。
【図４４】領域の再設定方法を説明する図。
【図４５】セキュリティ処理の処理フローを示すフローチャート。
【図４６】領域の再設定の処理フローを示すフローチャート。
【発明を実施するための形態】
【０００８】
以下、実施形態の情報処理装置およびプログラムについて説明する。実施形態の情報処理装置およびプログラムは、ファームウェアの分割検証を行うものであり、特に、ローエンド情報機器であっても、機器単体で適切な分割検証を実現可能とするものである。
【０００９】
ファームウェアの分割検証に関わる従来技術としては、例えば、ネットワークブート環境においてブート用プログラム（ブートイメージ）の分割検証を実現する技術がある。この従来技術では、予めブート用プログラム（ブートイメージ）を断片化して、断片化した各ブートイメージに電子署名と優先度を付与しておく。そして、その優先度に従って集中管理サーバから各計算機リソースに断片化したブートイメージをロードして署名検証することで、ブートイメージの分割検証を可能とする。しかし、この従来技術は、集中管理サーバから計算機リソースに断片化したブートイメージをロードする構成であり、例えばストレージドライブや家電などのローエンド情報機器では集中管理サーバの実現が困難であることから、この従来技術を適用してもローエンド情報機器単体での分割検証を実現することができない。また、この従来技術では、断片化されたブートイメージのロード順序は固定となるため、処理内容によって計算機リソースが柔軟にロード順序の変更を行うことが容易ではない。
【００１０】
また、仮想化環境においてページング技術を利用した分割検証を実現する技術がある。この従来技術は、ブートイメージが展開されているメモリをページング技術によってページ単位に分割し、データの実行時に強制的にページフォルトを発生させることで、ブートイメージの分割検証を可能とする。しかし、この従来技術は、仮想化環境とページング技術を前提としていることから、ページングの実現に必要なＭＭＵ（Memory  Management  Unit）を持たないローエンド情報機器では、この技術をそのまま適用することはできない。ＭＭＵはページング方式によるメモリ保護機構であり、ページ単位でのメモリ保護と仮想メモリ機構を提供する。
【００１１】
一方、ローエンド情報機器ではメモリ保護機構としてＭＰＵ（Memory  Protection  Unit）を持つ。ＭＰＵは、ページング方式のＭＭＵとは根本的に異なり、セグメント方式によるメモリ保護機構である。実施形態の情報処理装置およびプログラムは、例えば、このＭＰＵの技術を利用して任意のタイミングで未検証領域を検出できるようにすることで、ローエンド情報機器単体での適切な分割検証を実現可能とする。また、実施形態の情報処理装置およびプログラムによれば、セグメントの上限数に依存せず、検証順序も柔軟に変更可能となる。
【００１２】
以下では、実施形態の情報処理装置およびプログラムの具体的な適用例について、図面を参照しながら詳しく説明する。なお、以下で示す各実施形態では、ＳＳＤ（Solid  State  Drive）などのストレージドライブとして構成された情報処理装置への適用例を想定するが、適用可能な情報処理装置はこれに限らない。実施形態の情報処理装置およびプログラムは、例えば家電などの様々なローエンド情報機器に対して広く適用できる。
【００１３】
［第１実施形態］
まず、第１実施形態について説明する。以下の説明において「データ」との表記は、プログラムが参照するデータのほか、プログラム自体を構成するデータも含むものとする。本実施形態に係る情報処理装置は、データの利用時に任意サイズのブロック単位で改ざん検証を行うことで、意図しないデータの利用を防止する機構を持つ。
【００１４】
図１は、本実施形態に係る情報処理装置１００Ａの概略構成を例示するブロック図である。情報処理装置１００Ａは、図１に示すように、プロセッサコア１０１と、メモリ１０２と、鍵管理ユニット１１０とを備える。プロセッサコア１０１には、アクセス権管理装置１２０とメモリアクセス装置１３０が設けられている。メモリ１０２には、ファームウェア（以下、ＦＷと表記する）が格納されている。ＦＷは、通常処理プログラム、異常処理プログラム、ＦＷ管理プログラム、セキュアプログラムを含む。図１に示す情報処理装置１００Ａの各種構成要素は、ハードウェア、ソフトウェア、または、ハードウェアとソフトウェアとの組み合わせで構成される。
【００１５】
情報処理装置１００Ａは、インターフェース１０３を介してホスト２００に接続され、ホスト２００との間で通信を行う。ここで、インターフェース１０３には、例えば、パラレルＡＴＡ、シリアルＡＴＡ、ＳＣＳＩ（Small  Computer  System  Interface）、ＳＡＳ（Serial  Attached  SCSI）などのストレージドライブ向けインターフェースを用いることができる。また、インターフェース１０３として、Ｅｔｈｅｒｎｅｔ（登録商標）やＵＳＢ（Universal  Serial  Bus）など、他のインターフェースを用いてもよい。また、ホスト２００とは、情報処理装置１００Ａを操作する機器であり、例えば、パーソナルコンピュータ、サーバ、テレビ、スマートフォンなど、情報処理装置１００Ａを利用する各種の機器を想定する。また、ホスト２００は、ＲＡＩＤ（Redundant  Arrays  of  Inexpensive  Disks）コントローラなどの情報処理装置１００Ａを束ねて運用、管理を行う装置やその他の装置であってもよい。
【００１６】
情報処理装置１００Ａのプロセッサコア１０１、メモリ１０２、鍵管理ユニット１１０、インターフェース１０３は、それぞれ外部バス１０４に接続されている。
【００１７】
図２は、本実施形態に係る情報処理装置１００Ａの機能的な構成例を示すブロック図である。情報処理装置１００Ａは、図２に示すように、メモリアクセス装置１３０と、アクセス権管理装置１２０と、鍵管理ユニット１１０とに加え、通常処理部１４０と、異常処理部１５０と、ＦＷ管理部１６０と、セキュア処理部１７０とを機能的な構成要素として備える。
【００１８】
メモリアクセス装置１３０は、メモリ１０２へのアクセスを行うメモリアクセス部１３１を備える。
【００１９】
アクセス権管理装置１２０は、メモリ１０２のアクセス権管理を行うアクセス権管理部１２１と、アクセス権に違反するアクセスが発生した場合にシグナルを生成するシグナル生成部１２２とを備える。また、アクセス権管理装置１２０は、メモリ１０２に設定された領域ごとのアクセス権に関する情報であるアクセス権情報１２３を保持する。なお、アクセス権の設定については、図７を用いて詳細を後述する。
【００２０】
鍵管理ユニット１１０は、鍵情報を保存する鍵保存部１１１を備える。
【００２１】
通常処理部１４０は、ＦＷの通常の処理を行う機能モジュールである。
【００２２】
異常処理部１５０は、ＦＷが異常終了した場合に実行される機能モジュールである。
【００２３】
ＦＷ管理部１６０は、ＦＷの管理を行う機能モジュールであり、シグナルを解析するシグナル解析部１６１と、プログラムの切り替えを行うプログラム切替部１６２とを備える。
【００２４】
セキュア処理部１７０は、セキュリティ処理を行う機能モジュールであり、セキュリティ処理の管理などを行うセキュリティ処理管理部１７１と、メモリ１０２上のデータに対して改ざん検証を行う改ざん検証部１７２と、メモリ１０２のメモリ空間に対するアクセス権の更新を行うアクセス権更新部１７３とを備える。また、セキュア処理部１７０は、セキュリティ処理に必要な情報であるセキュリティ処理情報１７４を保持する。
【００２５】
ここで、本実施形態では、通常処理部１４０、異常処理部１５０、ＦＷ管理部１６０、セキュア処理部１７０が、それぞれＦＷに含まれるプログラムにより実現される例を用いて説明する。すなわち、通常処理部１４０を通常処理プログラム、異常処理部１５０を異常処理プログラム、ＦＷ管理部１６０をＦＷ管理プログラム、セキュア処理部１７０をセキュアプログラムとする１つのＦＷとして実現した例を用いて説明を行う。ただし、これらの各構成要素はＦＷから独立したハードウェアとして実現されてもよい。また、ＦＷを構成するプログラムは、それぞれ個別の実行ファイルとして実現してもよく、複数のプログラムを含む実行ファイルの一部として実現してもよい。
【００２６】
以下、上述の各部の詳細な機能について説明する。
【００２７】
メモリアクセス部１３１は、メモリ１０２に対してアクセス（Ｒｅａｄ、Ｗｒｉｔｅ、命令実行）を行う。ここでメモリ１０２とは、ＭａｓｋＲＯＭ（Mask  Read  Only  Memory）、ＰＲＯＭ（Programmable  Read  Only  Memory）、ＥＰＲＯＭ（Erasable  Programmable  Read  Only  Memory）、ＥＥＰＲＯＭ（Electrically  Erasable  Programmable  Read  Only  Memory）、ＮＡＮＤ型フラッシュメモリ、ＮＯＲ型フラッシュメモリ、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory：磁気抵抗メモリ）、ＰＲＡＭ（Phase  change  Random  Access  Memory：相変化メモリ）、ＲｅＲＡＭ（Resistive  Random  Access  Memory：抵抗変化型メモリ）、ＦｅＲＡＭ（Ferroelectric  Random  Access  Memory：強誘電体メモリ）、ＳＲＡＭ（Static  Random  Access  Memory）、ＤＲＡＭ（Dynamic  Random  Access  Memory）を含み、またその他の半導体メモリでもよい。
【００２８】
アクセス権情報１２３は、任意サイズのメモリ空間に対するアクセス権を示す情報である。アクセス権が設定されたメモリ空間は「領域」と呼ばれる。つまり、メモリ１０２のメモリ空間に対する領域設定とアクセス権の設定は同等の意味を持つ。アクセス権情報１２３は、領域単位で保存される。
【００２９】
図３は、アクセス権情報１２３の一例を示す図である。アクセス権情報１２３は、例えば図３に示すように、領域を識別する領域番号、領域の開始アドレス、領域のサイズ、領域に対して設定されたアクセス権の種類を表すフラグ（Ｒｅａｄ権の有無、Ｗｒｉｔｅ権の有無、実行禁止の有無など）を含む。アクセス権情報１２３は、この他に領域の有効フラグやモード権（特権モード／ユーザモード）などの情報を含んでいてもよい。また、図３に例示するアクセス権情報１２３は、領域の範囲を開始アドレスとサイズにより表しているが、サイズの代わりとして領域の終了アドレスを用い、開始アドレスと終了アドレスにより領域の範囲を表してもよい。
【００３０】
アクセス権管理部１２１は、アクセス権情報１２３の管理とメモリアクセス部１３１のメモリアクセス違反の検出を行う。アクセス権管理部１２１が行うアクセス権情報１２３の管理とは、アクセス権情報１２３に対して、参照、登録、追加、削除などを行うことである。アクセス権管理部１２１は、その他の操作、例えばアクセス権情報１２３へのアクセス管理なども行ってもよい。アクセス権管理部１２１は、メモリアクセス部１３１のメモリアクセスを監視し、アクセス権情報１２３によって示されるアクセス権に違反するアクセスが発生した場合に、シグナル生成部１２２に対してシグナル生成を依頼する。
【００３１】
シグナル生成部１２２は、アクセス権管理部１２１からのシグナル生成依頼を受けてシグナルを生成する。ここではシグナルを割り込み（または例外、ｆａｕｌｔ）として説明を行うが、他の方法でもよい。
【００３２】
シグナル解析部１６１は、シグナル生成部１２２が生成したシグナルを受け取り、その原因を解析する。割り込みの場合、同一の割り込みでも原因が異なるものが存在するため、プロセッサコア１０１に搭載されている割り込み原因解析レジスタなどを用いて割り込み原因を解析してもよい。同一の割り込みでも原因が異なるものとは、例えばアライメントフォルトとパーミッションフォルトであり、双方ともプロセッサコア１０１はメモリフォルトとして割り込みを受け取るが、アライメントフォルトの原因はメモリアライメント違反であり、パーミッションフォルトの原因はアクセス権違反であることから、同一の割り込みでも割り込み原因は異なる。シグナル解析部１６１によるシグナル解析の結果は、プログラム切替部１６２に通知される。
【００３３】
プログラム切替部１６２は、通知された内容を受けてプロセッサコア１０１で実行するプログラムの切り替えを行う。プログラム切替部１６２は、シグナル解析部１６１からシグナル解析の結果が通知された場合は、シグナル解析の結果に応じて、プロセッサコア１０１で実行するプログラムを切り替える。一方、セキュアプログラムの実行中にセキュリティ処理管理部１７１から遷移先を通知された場合は、プログラム切替部１６２は、プロセッサコア１０１で実行するプログラムを、セキュアプログラムから、通知された遷移先のプログラムに切り替える。
【００３４】
セキュリティ処理情報１７４は、セキュア処理部１７０によるセキュリティ処理に必要な情報であり、特に、検証対象領域に関する各種情報を含む。検証対象領域は、分割検証の対象として予め定めたメモリ空間であり、アクセス権が設定されたメモリ空間（領域）だけでなく、アクセス権が設定されていないメモリ空間も含む。改ざん検証部１７２による改ざん検証が行われた検証対象領域を検証済み領域と呼び、改ざん検証部１７２による改ざん検証が行われていない検証対象領域を未検証領域と呼ぶ。
【００３５】
図４は、セキュリティ処理情報１７４の一例を示す図である。セキュリティ処理情報１７４は、例えば図４に示すように、検証対象領域の開始アドレス、検証対象領域のサイズ、改ざん検証に用いる検証用データ、改ざん検証に成功した場合に検証対象領域に対して付与するアクセス権、検証対象領域が検証済み領域であるか未検証領域であるかを示す検証状態を含む。
【００３６】
本実施形態では、便宜上、ＦＷの通常処理プログラムがブロックＡ，Ｂ，Ｃの３つのＦＷブロックを含み、これら３つのＦＷブロックに対応するメモリ空間がそれぞれ検証対象領域として定められているものとして説明する。この場合、セキュリティ処理情報１７４は、図４に例示するように、それぞれの検証対象領域に対応するＦＷブロックを識別するブロック番号や、検証対象領域に対して付与するアクセス権で示されるアクセス権を設定したときの当該領域を識別する領域番号を含んでもよい。また、図４に例示するセキュリティ処理情報１７４は、検証対象領域の範囲を開始アドレスとサイズにより表しているが、サイズの代わりとして検証対象領域の終了アドレスを用い、開始アドレスと終了アドレスにより検証対象領域の範囲を表してもよい。
【００３７】
検証用データとしては、例えば、データの改ざん対策であるハッシュやメッセージ認証コード（ＭＡＣ：Message  Authentication  Code）などのような検証技術で生成されるハッシュ値またはＭＡＣ値を用いてもよく、電子署名、チェックサム、ＣＲＣ（Cyclic  Redundancy  Check）、特定アドレスのデータ比較など、データ破損の有無を確認する方法やその他の方法を用いてもよい。代表的なものとして、ハッシュではＭＤ５（Message  Digest  Algorithm5）、ＳＨＡ（Secure  Hash  Algorithm）などがあり、ＭＡＣではＨＭＡＣ（Hash-based  MAC）やＣＭＡＣ（Cipher-based  MAC）などがある。この他にも電子署名ではＲＳＡ署名など多数のアルゴリズムがあり、本実施形態ではいずれのアルゴリズムを用いてもよい。
【００３８】
なお、改ざん検証に成功した検証対象領域に設定するアクセス権は、セキュリティ処理情報１７４の付与するアクセス権により示される権限のうち、アクセス権違反を発生させたアクセスと同一のものを設定してもよい。例えば、未検証領域に対してＲｅａｄアクセス時に改ざん検証を行った場合、セキュリティ処理情報１７４の付与するアクセス権がＲｅａｄ権とＷｒｉｔｅ権とを含んでいたとしても、Ｒｅａｄ権のみを付与するようにしてもよい。この場合、この検証対象領域に対してＷｒｉｔｅアクセスが発生した場合にもう一度シグナルが発生するが、このシグナルに応じて改ざん検証を再度行ってもよく、一度検証済みであるため改ざん検証をスキップしてもよい。このようなアクセス権付与を行うことで、本当にＷｒｉｔｅアクセスが必要な領域にのみＷｒｉｔｅ権を付与することができることから、領域に付与するアクセス権を最小化することができ、セキュリティが向上する。
【００３９】
セキュリティ処理管理部１７１は、アクセス権違反が発生したメモリ空間に対するセキュリティ処理の管理、セキュリティ処理情報１７４の管理、起動処理を行う。セキュリティ処理管理部１７１は、セキュリティ処理情報１７４とアクセス権違反が発生したアドレスと違反情報を照合し、アクセス権違反が検証要求であると判断した場合に、改ざん検証部１７２に対して検証を依頼する。また、セキュリティ処理管理部１７１は、改ざん検証部１７２から検証成功の通知があった場合に、検証に成功したメモリ空間に対するアクセス権の更新をアクセス権更新部１７３に依頼し、このメモリ空間が検証済みであることをセキュリティ処理情報１７４に記録する。
【００４０】
ここで、セキュリティ処理管理部１７１が検証要求を判断するために使用する違反情報とは、アクセス権違反が発生した際に取得可能な情報であり、例えば、アクセス権違反は命令実行とデータアクセスのどちらで発生したのかという情報を用いてもよく、アクセス権違反を発生させたアクセスの情報（Ｒｅａｄアクセス実行時にアクセス権違反を発生させたなど）を用いてもよい。さらに、セキュリティ処理管理部１７１は、後述する起動時の処理を行う。
【００４１】
改ざん検証部１７２は、セキュリティ処理管理部１７１から指定されたメモリ空間に対する改ざん検証を行い、改ざんの有無を検出する。改ざん検証部１７２は、セキュリティ処理情報１７４に含まれる検証用データをセキュリティ処理管理部１７１から受け取り、鍵保存部１１１に保存された鍵情報を鍵管理ユニット１１０から受け取って、所定のアルゴリズムに従って改ざん検証を行い、結果をセキュリティ処理管理部１７１に通知する。ここで、改ざん検証部１７２は、メモリ１０２のアクセス権に関係なくメモリ１０２へのアクセスが可能であるとする。これは、例えば、改ざん検証部１７２からのアクセス時はアクセス権管理装置１２０の一部または全部の機能を無効化することで実現してもよく、また、改ざん検証部１７２のメモリアクセスはアクセス権管理装置１２０が関与するメモリアクセスとは異なる別の手段、例えば専用メモリバスなどを用いることで実現してもよい。
【００４２】
アクセス権更新部１７３は、セキュリティ処理管理部１７１から指定されたメモリ空間に対するアクセス権の更新を、アクセス権管理部１２１に依頼する。この依頼を受けて、アクセス権管理部１２１がアクセス権情報１２３の登録、追加、削除などを行うことで、指定されたメモリ空間に対するアクセス権が更新される。
【００４３】
通常処理部１４０は、ＦＷの通常処理プログラムにより実現される。通常処理プログラムは、１つ以上のＦＷブロックから構成されるプログラムであり、メモリアクセス部１３１を経由してメモリ１０２の読み書き（Ｒｅａｄ、Ｗｒｉｔｅ）とメモリ１０２上のプログラムの実行を行う。ＦＷブロックは通常処理プログラムを所定の方法により分割したものとし、個々のＦＷブロックは同一サイズである必要はない。本実施形態では、上述のように、通常処理プログラムがブロックＡ，Ｂ，Ｃの３つのＦＷブロックから構成され、これらのＦＷブロックに対応するメモリ空間が検証対象領域に定められているものとする。
【００４４】
異常処理部１５０は、ＦＷの異常処理プログラムにより実現される。異常処理プログラムは、ＦＷの実行中に異常状態に陥った場合に実行されるプログラムである。なお、異常処理プログラムは、通常処理プログラムに含まれるＦＷブロックとして実現してもよく、ＦＷ管理プログラムの一部、あるいはセキュアプログラムの一部として実現してもよい。
【００４５】
図５は、本実施形態に係る情報処理装置１００Ａのハードウェア構成例を示すブロック図である。情報処理装置１００Ａは、例えば図５に示すように、プロセッサコア（ＣＰＵ０）１０１と、鍵管理ユニット（ＫＳＵ）１１０と、ＲＯＭ（Read  Only  Memory）１０２ａと、ＲＡＭ（Random  Access  Memory）１０２ｂと、外部バス１０４とを備える。ＲＯＭ１０２ａおよびＲＡＭ１０２ｂは、図１および図２に示したメモリ１０２に相当する。プロセッサコア（ＣＰＵ０）１０１、ＲＯＭ１０２ａ、ＲＡＭ１０２ｂは、外部バス１０４を介して、データ、信号、命令を互いに送受信可能とする。鍵管理ユニット（ＫＳＵ）１１０は、アクセスが許可されたデバイスとのみデータ、信号、命令を互いに送受信可能とする。
【００４６】
プロセッサコア（ＣＰＵ０）１０１は、命令を実行する命令実行ユニット（ＥＸＵ）１０１ａと、メモリ１０２を保護するメモリ保護ユニット（ＭＰＵ）１０１ｂと、メモリ１０２へのアクセスを行うメモリコントローラ１０１ｃと、内部バス１０１ｄとを備える。命令実行ユニット（ＥＸＵ）１０１ａ、メモリ保護ユニット（ＭＰＵ）１０１ｂ、メモリコントローラ１０１ｃは、内部バス１０１ｄを介して、データ、信号、命令を互いに送受信可能とする。本実施形態では、メモリコントローラ１０１ｃを図１および図２に示したメモリアクセス装置１３０として用い、メモリ保護ユニット（ＭＰＵ）１０１ｂを図１および図２に示したアクセス権管理装置１２０として用いるものとする。
【００４７】
プロセッサコア（ＣＰＵ０）１０１は、メモリコントローラ１０１ｃを用いてデータアクセスを行う。このとき、メモリ保護ユニット（ＭＰＵ）１０１ｂは、命令実行ユニット（ＥＸＵ）１０１ａがアクセスするデータのアクセス権を確認し、予め設定されたアクセス権に違反するアクセスの場合、命令実行ユニット（ＥＸＵ）１０１ａに対して割り込みを生成する。アクセス権に違反しない場合は、メモリコントローラ１０１ｃがデータアクセスを行う。
【００４８】
鍵管理ユニット（ＫＳＵ）１１０は、セキュリティ処理に使用される鍵情報を記憶する。鍵管理ユニット（ＫＳＵ）１１０にはアクセス制限を設けることができ、特定のデバイスからのみアクセス可能とすることもできる。例えば、外部バス１０４上に別のプロセッサコア（ＣＰＵｘ）が存在する場合、鍵管理ユニット（ＫＳＵ）１１０はプロセッサコア（ＣＰＵ０）１０１からはアクセス可能だが、別のプロセッサコア（ＣＰＵｘ）からはアクセス不可能とすることもできる。本実施形態では、鍵管理ユニット（ＫＳＵ）１１０にアクセスできるのはプロセッサコア（ＣＰＵ０）１０１のみとする。また、ハードウェアを用いて暗号化、改ざん検証を行う場合、鍵管理ユニット（ＫＳＵ）１１０は暗号化ハードウェア、改ざん検証ハードウェアを含んでもよい。さらに、鍵管理ユニット（ＫＳＵ）１１０はプロセッサコア（ＣＰＵ０）１０１内部に実現されていてもよい。その場合は、命令実行ユニット（ＥＸＵ）１０１ａ、メモリ保護ユニット（ＭＰＵ）１０１ｂ、メモリコントローラ１０１ｃ、鍵管理ユニット（ＫＳＵ）１１０は、内部バス１０１ｄを介して、データ、信号、命令を互いに送受信可能とする。
【００４９】
次に、本実施形態で想定するメモリマップについて説明する。図６は、本実施形態におけるメモリマップの一例を示す図である。本実施形態では、ＲＯＭ１０２ａおよびＲＡＭ１０２ｂは全て同一メモリ空間にマップされており、プロセッサコア１０１からのバイトアクセスが可能である例を用いて説明を行う。また、本実施形態では、全てのデータはＲＯＭ１０２ａに格納されているものとして説明を行うが、ＲＡＭ１０２ｂに格納されていてもよく、またＲＯＭ１０２ａとＲＡＭ１０２ｂに分散して格納されていてもよい。ここで、ＲＯＭ１０２ａとは、ＭａｓｋＲＯＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭだけでなく、ＮＡＮＤ型フラッシュメモリ、ＮＯＲ型フラッシュメモリも含み、その他の不揮発性メモリを用いてもよい。一方、ＲＡＭ１０２ｂとは、ＳＲＡＭ、ＤＲＡＭを含み、その他の揮発性メモリを用いてもよい。さらに、ＭＲＡＭ、ＰＲＡＭ、ＲｅＲＡＭ、ＦｅＲＡＭは不揮発性ＲＡＭであり、本実施形態ではＲＡＭ１０２ｂに含めて説明を行うが、ＲＯＭ１０２ａとして扱ってもよい。
【００５０】
ＲＯＭ１０２ａ上には、通常処理プログラム、異常処理プログラム、ＦＷ管理プログラム、セキュアプログラムから構成されるＦＷと、そのＭＡＣが格納されている。通常処理プログラムは、１つ以上のＦＷブロックから構成される。各ＦＷブロックのサイズは同一である必要はなく、オブジェクト単位やサイズ単位など、所定の方法に従って分割される。ここでは、通常処理プログラムは３つのＦＷブロック（ブロックＡ、ブロックＢ、ブロックＣ）に分割されており、各ブロックサイズは均一ではないものとして説明を行う。セキュアプログラムは、セキュア処理を行うセキュリティ処理プログラムとセキュリティ処理情報１７４とから構成される。ＭＡＣは、通常処理プログラムＭＡＣ、異常処理プログラムＭＡＣ、ＦＷ管理プログラムＭＡＣ、セキュアプログラムＭＡＣから構成され、通常処理プログラムＭＡＣはさらに、ＦＷブロックごとのＭＡＣ（ブロックＡ  ＭＡＣ、ブロックＢ  ＭＡＣ、ブロックＣ  ＭＡＣ）から構成される。ここで、ＲＯＭ１０２ａ上のＭＡＣはＭＡＣ値が格納されている必要はなく、ＭＡＣ値へのポインタが保存されていてもよい。この場合、ＭＡＣ値はＲＯＭ１０２ａやＲＡＭ１０２ｂ上の所定のメモリ空間やその他のメモリ、例えばＭＡＣ値の保存専用メモリなどに保存される。
【００５１】
ここで、任意のメモリ空間に対するアクセス権の設定方法について説明する。図７は、アクセス権の設定方法の概要を説明する図であり、あるメモリ１０２に対して３つの領域を設定した例を示している。
【００５２】
図７において、領域ｋはメモリ１０２上の任意サイズの領域であり、領域ｋ＋１は領域ｋ内の領域、領域ｋ＋２は領域ｋの一部と隣接するメモリを含む領域である。さらに、各領域は任意の数の補助領域に分割できる。１つの領域における補助領域サイズは同一であり、補助領域への分割数もシステムを通して固定とする。つまり、８Ｂｙｔｅの領域を８つの補助領域に分割するシステムの場合、１つの補助領域は１Ｂｙｔｅとなり、別の１６Ｂｙｔｅの領域が存在する場合は８つの補助領域にしか分割できず、１つの補助領域は２Ｂｙｔｅとなる。領域ｋ〜ｋ＋２はオーバーラップが可能であり、オーバーラップした場合は所定の規則に従って設定の優先度が決定する。ここでは、上位番号（昇順）の領域設定を優先する場合を用いて説明するが、下位番号（降順）の領域設定に従う、または優先領域を設定するなど、他の方法を用いてもよい。
【００５３】
各領域に対してはＲｅａｄ権、Ｗｒｉｔｅ権、実行権を設定することができ、各補助領域は有効フラグを設定することができる。以下では、Ｒｅａｄ権ありＷｒｉｔｅ権ありの設定を「ＲＷ」、Ｒｅａｄ権ありＷｒｉｔｅ権なしの設定を「ＲＯ」、Ｒｅａｄ権なしＷｒｉｔｅ権ありの設定を「ＷＯ」、Ｒｅａｄ権なしＷｒｉｔｅ権なしの設定を「ＮＡ」（Non-Access）、実行権なしの設定を「ＸＮ」（execution  never）と表記し、有効フラグが設定された補助領域を「ｓｕｂ＝１」、有効フラグが設定されていない無効の補助領域を「ｓｕｂ＝０」と表記して説明する。
【００５４】
図７に示す例の場合、領域のオーバーラップが発生していない領域ｋの一部と領域ｋ＋２は、それぞれの設定が使用される（ア）。また、領域ｋ＋２にオーバーラップされている領域ｋの一部は、領域ｋ＋２の設定が使用される（イ）。また、領域ｋ＋１にオーバーラップされている領域ｋの一部は、領域ｋ＋１の設定が使用されるが（ウ）、領域ｋ＋１の補助領域が無効化されている場合は、領域ｋの設定が使用される（エ）。
【００５５】
本実施形態では、アクセス権を設定した領域とＦＷを分割したブロック（ＦＷブロック）を一致させることで、未検証のＦＷブロックを検出し、検証処理を行う。以下では、領域の設定と未検証ＦＷブロックの検出について説明する。
【００５６】
図８は、本実施形態におけるＦＷの領域設定の一例を示す図である。図８に示す例は、ＦＷの通常処理プログラムがブロックＡ，Ｂ，Ｃの３つのＦＷブロックから構成される例である。アクセス権を設定可能な領域の数には上限がある。ここでは、アクセス権を設定可能な領域の数の上限をＮとする。すなわち、アクセス権管理装置１２０は、Ｎ個の領域にアクセス権を設定可能であるものとする。
【００５７】
まず、ＲＯＭ１０２ａのメモリ空間は、Ｗｒｉｔｅできず実行可能なプログラムが配置されるため、領域１でＲＯに設定される。そして、分割検証の対象である通常処理プログラムが配置されているメモリ空間は、領域２でＮＡ,  ＸＮに設定される。この状態でＦＷを実行すると、未検証であるブロックＡ，Ｂ，Ｃのいずれかに属するデータに対してアクセスが発生した場合に、領域２の設定によるアクセス権違反が発生する。このアクセス権違反を受けて、セキュアプログラム（セキュア処理部１７０）はアクセス権違反を発生させたＦＷブロックを検証し、検証が成功した場合に検証したＦＷブロックのメモリ空間に対して新しい領域（領域３，４，５）を追加し、アクセスを可能とする。
【００５８】
ここで、異常処理プログラム、ＦＷ管理プログラム、セキュアプログラムは、領域１で実行が可能となるため、追加の領域を設ける必要はない。しかし、本実施形態は実行中に領域を追加していくことから、バグなどにより、意図せず異常処理プログラム、ＦＷ管理プログラム、セキュアプログラムのメモリ空間に対して意図しないアクセス権の新規領域を追加してしまう可能性がある。そのため、最も優先度が高い領域Ｎにセキュアプログラムを割り当て、領域Ｎ−１に異常処理プログラムとＦＷ管理プログラムを割り当てることで、この問題を回避することができる。
【００５９】
また、図８ではセキュアプログラムを個別の領域に配置し、異常処理プログラムとＦＷ管理プログラムを同一の領域に配置しているが、それぞれ別の領域に配置してもよいし、全てを同じ領域に配置してもよい。さらに、図８では未検証状態の領域２にＮＡ，ＸＮを設定しているが、ＲＯ，ＸＮと設定してもよく、当該メモリ空間に対するアクセス時にアクセス権違反が発生すればどんな設定を用いてもよい。
【００６０】
さらに、検証により追加する領域番号は事前に決定されていてもよく、また動的に決定してもよい。例えば、ブロックＣ、ブロックＡ、ブロックＢの順でアクセスが発生した場合、事前に領域番号がブロックＡは領域３、ブロックＢは領域４、ブロックＣは領域５と決定している場合は領域５、領域３、領域４の順で領域が追加される。一方、動的に決定する場合は、アクセスが発生した順序に応じて、ブロックＣに対して領域３、ブロックＡに対して領域４、ブロックＢに対して領域５の順で領域が追加される。
【００６１】
次に、本実施形態に係る情報処理装置１００Ａの処理フローを説明する。本実施形態では、全ての改ざん検証処理をソフトウェアＨＭＡＣ（Hash-based  Message  Authentication  Code）を使って行うものとするが、その他のアルゴリズムを用いてもよく、ハードウェアを用いてもよい。ＨＭＡＣ鍵は鍵管理ユニット１１０が保持しているものとし、全ての改ざん検証において同じ鍵を使用するものとして説明を行うが、それぞれ個別の鍵を用いてもよく、異なるアルゴリズムを用いてもよい。また、ＦＷはセキュアプログラムから起動し、通常処理プログラムのうち最初に実行されるＦＷブロックをブロックＡとして説明を行うが、ＦＷはＦＷ管理プログラムや他のプログラムから起動されてもよい。ここでは、セキュリティ処理情報１７４は図４、ＦＷのメモリマップは図６、ＦＷの領域設定は図８と同様とし、ＲＡＭ１０２ｂについても適切に領域設定が行われているものとする。
【００６２】
図９は、本実施形態に係る情報処理装置１００Ａの起動時の処理フローを示すフローチャートである。電源が投入されると、情報処理装置１００Ａは、プロセッサコア（ＣＰＵ０）１０１でＦＷのセキュアプログラムの実行を開始する。
【００６３】
セキュアプログラム（セキュア処理部１７０）は、まず自身の改ざん検証を行うため、鍵管理ユニット１１０から鍵情報を取得し、ＲＯＭ１０２ａからセキュアプログラムＭＡＣを取得して、改ざん検証部１７２で自己検証を行う（ステップＳ１０１）。ここで、自己検証に失敗した場合（ステップＳ１０２：Ｎｏ）、セキュアプログラムは、検証失敗に伴う事後処理を行い（ステップＳ１０３）、異常終了する。
【００６４】
一方、自己検証に成功した場合（ステップＳ１０２：Ｙｅｓ）、セキュアプログラムは、ペリフェラルなどの初期化処理を行い（ステップＳ１０４）、アクセス権の初期設定を行う（ステップＳ１０５）。本実施形態におけるアクセス権の初期設定は、ＲＯＭ１０２ａの全メモリ空間を領域１（ＲＯ）、検証対象である通常処理プログラム（ブロックＡ，Ｂ，Ｃ）のメモリ空間を領域２（ＮＡ，ＸＮ）、検証を行ったセキュアプログラムのメモリ空間を領域Ｎ（ＲＯ）に設定することである。セキュアプログラムは、この初期設定をアクセス権更新部１７３に依頼する。アクセス権更新部１７３は、アクセス権管理部１２１にアクセス権の更新を依頼し、アクセス権管理部１２１は、依頼を受けたアクセス権を設定し、設定したアクセス権をアクセス権情報１２３に登録する。
【００６５】
次に、セキュアプログラムは、改ざん検証部１７２でＲＯＭ１０２ａ上のＦＷ管理プログラム、異常処理プログラム、最初に実行するＦＷブロック（ブロックＡ）の改ざん検証を行う（ステップＳ１０６）。そして、これらの検証のいずれかに失敗した場合（ステップＳ１０７：Ｎｏ）、セキュアプログラムは、ＦＷの検証失敗に伴う事後処理を行い（ステップＳ１０８）、異常終了する。
【００６６】
一方、検証に成功した場合（ステップＳ１０７：Ｙｅｓ）、セキュアプログラムは、検証状態に基づき、メモリ空間に対するアクセス権の設定を行う（ステップＳ１０９）。すなわち、セキュアプログラムは、検証状態に基づくアクセス権の設定をアクセス権更新部１７３に依頼する。アクセス権更新部１７３は、アクセス権管理部１２１にアクセス権の更新を依頼し、アクセス権管理部１２１は依頼を受けたアクセス権を更新して、更新したアクセス権をアクセス権情報１２３に登録する。本実施形態の場合、検証を行ったＦＷ管理プログラムと異常処理プログラムのメモリ空間を領域Ｎ−１（ＲＯ）に設定し、最初に実行するＦＷブロック（ブロックＡ）のメモリ空間を領域３（ＲＯ）に設定する。
【００６７】
そして、セキュアプログラムは、遷移先を検証したＦＷブロック（ブロックＡ）に設定する（ステップＳ１１０）。これにより、プロセッサコア（ＣＰＵ０）１０１が実行するＦＷのプログラムがセキュアプログラムから通常処理プログラムのＦＷブロック（ブロックＡ）に遷移し（ステップＳ１１１）、起動処理が終了する。
【００６８】
ここで、異常処理プログラムと最初に実行されるＦＷブロックは、必ずしも起動時に検証される必要はなく、後述するデータアクセス時の処理フローにより、当該プログラムへのアクセス時に検証を行ってもよい。この場合、ＦＷ管理プログラムは、検証していないＦＷブロックを遷移先に指定し、このＦＷブロックに遷移すると同時にこのＦＷブロックに対するデータアクセス時の処理フローが発生する。また、それに伴い領域の設定は、ＲＯＭ１０２ａの全メモリ空間を領域１（ＲＯ）、検証対象である通常処理プログラム（ブロックＡ，Ｂ，Ｃ）のメモリ空間を領域２（ＮＡ，ＸＮ）としている状態で、検証を行ったセキュアプログラムのメモリ空間を領域Ｎ（ＲＯ）、ＦＷ管理プログラムのメモリ空間を領域Ｎ−１（ＲＯ）に変更し、異常処理プログラムが検証された場合はそのメモリ空間を領域Ｎ−２（ＲＯ）に設定し、ＦＷブロック（ブロックＡ）が検証された場合はそのメモリ空間を領域３（ＲＯ）に設定する。
【００６９】
また、アクセス権の初期設定は必ずしもＦＷ管理プログラムや異常処理プログラムの検証前に行う必要はなく、検証したＦＷ管理プログラムや異常処理プログラムのアクセス権設定時に行ってもよく、セキュアプログラムからＦＷブロックへの遷移前ならば任意のタイミングで行うことができる。
【００７０】
なお、各プログラムの検証失敗に伴う事後処理とは、一般的な機器の停止だけではなく、例えばホストに対して自身の状態を示すエラーコードやエラーステータスを送信してもよく、また、異常発生原因の除去と異常状態からの回復を行ってもよい。その他にも、外部インターフェース（インターフェース１０３）からの遮断や、情報処理装置１００Ａ内の特定データの削除、全データの削除などを行ってもよい。
【００７１】
図１０は、本実施形態に係る情報処理装置１００Ａのデータアクセス時の処理フローを示すフローチャートである。ここでは、プロセッサコア（ＣＰＵ０）１０１で動作する通常処理プログラムのブロックＡからブロックＢに対してデータアクセスが発生した場合を想定して説明を行う。
【００７２】
メモリ１０２に対するデータアクセスが発生すると、メモリアクセス部１３１は、メモリ１０２上のデータにアクセスを行う。アクセス権管理部１２１は、メモリアクセス部１３１のデータアクセスを検出すると、アクセス権情報１２３を参照して、メモリアクセス部１３１のデータアクセスがアクセス権に違反するアクセスか確認する（ステップＳ２０１）。ここで、アクセス権に違反するアクセスではなかった場合（ステップＳ２０２：Ｎｏ）、メモリアクセス部１３１は、メモリ１０２上のブロックＢに対してデータアクセスを行う（ステップＳ２０３）。
【００７３】
一方、アクセス権に違反するアクセスだった場合（ステップＳ２０２：Ｙｅｓ）、シグナル生成部１２２が、アクセス権違反のシグナルを生成する（ステップＳ２０４）。シグナルが生成されると、プロセッサコア（ＣＰＵ０）１０１では、通常処理プログラムの実行が中断される。そして、シグナル解析部１６１が、シグナルの発生原因を解析する（ステップＳ２０５）。この場合、シグナルの発生原因はアクセス権違反であるため、次のステップに進む。
【００７４】
次に、プログラム切替部１６２は、プロセッサコア（ＣＰＵ０）１０１が実行するプログラムをセキュアプログラムに切り替え、セキュアプログラムで後述するセキュリティ処理を行う（ステップＳ２０６）。ここで、セキュアプログラムによるセキュリティ処理が成功しなかった場合（ステップＳ２０７：Ｎｏ）、プログラム切替部１６２は、プロセッサコア（ＣＰＵ０）１０１で実行するプログラムを異常処理プログラムに切り替える（ステップＳ２０８）。これにより、プロセッサコア（ＣＰＵ０）１０１により異常処理プログラムが実行される。
【００７５】
一方、セキュアプログラムによるセキュリティ処理が成功した場合（ステップＳ２０７：Ｙｅｓ）、プログラム切替部１６２は、プロセッサコア（ＣＰＵ０）１０１で実行するプログラムを中断していた通常処理プログラムに切り替え、メモリアクセス部１３１は、ブロックＢに対してデータアクセスを行う（ステップＳ２０３）。
【００７６】
ここで、異常処理プログラムは、異常発生時に所定の処理を行う。所定の処理とは、一般的な情報処理装置１００Ａの停止だけではなく、例えば、ホスト２００に対して自身の状態を示すエラーコードやエラーステータスなどを送信してもよく、異常発生原因の除去と異常状態からの回復を行ってもよい。その他にも、インターフェース１０３からの遮断や、情報処理装置１００Ａ内の特定データの削除、全データの削除などを行ってもよい。
【００７７】
図１１は、本実施形態に係る情報処理装置１００Ａのシグナル発生時の処理フローを示すフローチャートである。図１０では、シグナルの発生原因はアクセス権違反であるものとして説明したが、シグナル解析部１６１は、情報処理装置１００Ａで発生するその他のシグナルの解析機能を持つ。
【００７８】
まず、シグナルが検出されると（ステップＳ３０１）、プロセッサコア（ＣＰＵ０）１０１では、通常処理プログラムの実行が中断され、シグナル解析部１６１が、シグナルの発生原因を解析する（ステップＳ３０２）。ここで、シグナルの発生原因がアクセス権違反でない場合（ステップＳ３０３：Ｎｏ）、シグナル解析部１６１は、シグナルに基づく所定の処理を行う（ステップＳ３０４）。一方、シグナルの発生原因がアクセス権違反である場合（ステップＳ３０３：Ｙｅｓ）、プログラム切替部１６２は、プロセッサコア（ＣＰＵ０）１０１で実行するプログラムをセキュアプログラムに切り替え、セキュアプログラムでセキュリティ処理を行う（ステップＳ３０５）。
【００７９】
図１２は、本実施形態におけるセキュリティ処理の処理フローを示すフローチャートである。セキュアプログラムによるセキュリティ処理が開始されると、セキュリティ処理管理部１７１は、シグナルを発生させたアドレスが未検証領域か確認する（ステップＳ４０１）。例えばセキュリティ処理管理部１７１は、セキュリティ処理情報１７４に登録されている検証対象領域の開始アドレスとサイズを参照し、シグナルを発生させたアドレスが検証対象領域か確認する。そして、シグナルを発生させたアドレスが検証対象領域であれば、さらにその検証対象領域の検証状態を参照し、その検証対象領域が未検証領域であるかを確認する。
【００８０】
ここで、シグナルを発生させたアドレスが検証対象領域でない、または検証対象領域だが検証済み領域である場合（ステップＳ４０２：Ｎｏ）、セキュリティ処理は失敗として（ステップＳ４０３）、処理を終了する。一方、シグナルを発生させたアドレスが未検証領域の場合（ステップＳ４０２：Ｙｅｓ）、セキュリティ処理管理部１７１は、シグナルを発生させた未検証領域に対する検証を改ざん検証部１７２に依頼する。改ざん検証部１７２は、セキュリティ処理管理部１７１がセキュリティ処理情報１７４から取得した未検証領域の開始アドレス、サイズ、ＭＡＣ値を受け取り、鍵管理ユニット１１０から鍵情報を取得して、未検証領域に対する改ざん検証を行う（ステップＳ４０４）。
【００８１】
ここで、改ざん検証部１７２が検証に失敗した場合（ステップＳ４０５：Ｎｏ）、セキュリティ処理は失敗として（ステップＳ４０３）、処理を終了する。一方、改ざん検証部１７２が検証に成功した場合（ステップＳ４０５：Ｙｅｓ）、検証を行った検証対象領域に対するアクセス権の更新が行われる（ステップＳ４０６）。すなわち、アクセス権更新部１７３は、セキュリティ処理管理部１７１がセキュリティ処理情報１７４から取得した検証対象領域の開始アドレス、サイズ、付与するアクセス権、領域番号を受け取り、アクセス権管理部１２１にアクセス権の変更を依頼する。この依頼を受けたアクセス権管理部１２１は、検証対象領域に対して付与するアクセス権で示されるアクセス権を設定し、設定したアクセス権に応じてアクセス権情報１２３を更新することにより、検証対象領域に対するアクセス権の更新を行う。
【００８２】
検証対象領域に対するアクセス権の更新が完了すると、セキュリティ処理管理部１７１は、検証を行った検証対象領域に対応するセキュリティ処理情報１７４の検証状態を検証済みに更新し（ステップＳ４０７）、セキュリティ処理は成功として（ステップＳ４０８）、処理を終了する。
【００８３】
図１３は、本実施形態に係る情報処理装置１００Ａのホスト要求発生時の処理フローを示すフローチャートである。ここでは、ホスト２００からの要求に対してインターフェース１０３を介して情報処理装置１００Ａが応答する場合を想定して説明を行う。
【００８４】
ホスト２００からの要求が発生すると、インターフェース１０３は、ホスト２００からの要求をホスト要求として受け取る（ステップＳ５０１）。そして、情報処理装置１００Ａは、インターフェース１０３からホスト要求を受け取り（ステップＳ５０２）、このホスト要求を実行する（ステップＳ５０３）。
【００８５】
ここで、ホスト要求実行時にデータアクセスが発生し、アクセスが発生した領域が未検証領域であった場合に、情報処理装置１００Ａは、上述のセキュリティ処理を行う。そして、情報処理装置１００Ａがホスト要求を正常に終了した場合（ステップＳ５０４：Ｙｅｓ）、情報処理装置１００Ａは、インターフェース１０３にホスト要求への応答を通知する（ステップＳ５０５）。さらに、インターフェース１０３は、ホスト２００に要求への応答を通知して（ステップＳ５０６）、処理を終了する。
【００８６】
一方、情報処理装置１００Ａがホスト要求を正常に終了しなかった場合（ステップＳ５０４：Ｎｏ）、情報処理装置１００Ａとインターフェース１０３は、所定の処理を実行する（ステップＳ５０７）。
【００８７】
ここで、ホスト要求の正常終了とは、情報処理装置１００Ａがホスト要求に対して異常終了または異常処理プログラムによる応答を行わなかった場合とする。また、異常処理プログラムによる応答を行った場合でも、異常処理プログラム内で異常状態からの回復が行われた場合は正常終了したものとする。
【００８８】
また、ホスト要求が正常に終了しなかった場合の情報処理装置１００Ａとインターフェース１０３の所定の処理とは、情報処理装置１００Ａのみで動作してもよく、情報処理装置１００Ａとインターフェース１０３が連携して動作してもよい。情報処理装置１００Ａのみで動作する場合は、例えば、情報処理装置１００Ａがインターフェース１０３からの送受信を一切受け付けない状態になってもよく、情報処理装置１００Ａが攻撃を受けたものとして重要データを削除したり、縮退運転を行ったりしてもよい。一方、情報処理装置１００Ａとインターフェース１０３が連携して動作する場合は、先に述べた情報処理装置１００Ａのみで動作する場合に加えて、例えば、情報処理装置１００Ａがエラーコードを生成してインターフェース１０３に通知し、インターフェース１０３はエラーコードに伴う応答をホスト２００に返答してもよい。また、インターフェース１０３は、情報処理装置１００Ａからエラーコードの通知を一度受けると、それ以降のホスト要求に対して情報処理装置１００Ａに通知せずに、インターフェース１０３が独自に応答してもよい。
【００８９】
以上説明したように、本実施形態では、アクセス権を設定した領域と分割検証の対象となるＦＷブロック（検証対象領域）を一致させることで、未検証のＦＷブロックである未検証領域を検出して改ざん検証を行うようにしている。したがって本実施形態によれば、ＦＷの分割検証に高性能なハードウェア資源は要求されず、ローエンド情報機器であっても適切なＦＷの分割検証を実現できる。また、本実施形態によれば、動的に検証順序が変更可能なＦＷの分割検証を実現することができる。
【００９０】
（第１実施形態の変形例）
本変形例は、補助領域を利用してＦＷの分割検証を行う例である。上述の第１実施形態では、検証済みの検証対象領域に対して新たにアクセス権を付与した領域を設定していたが、本変形例では、分割検証の対象となる検証対象領域に対して事前に領域を割り当てておき、その領域内の補助領域の有効、無効を切り替えることでＦＷの分割検証を実現する。ここで、本変形例では、検証対象の通常処理プログラムがブロックＡ，Ｂ，Ｃの３つのＦＷブロックから構成され、１つの領域は３つの補助領域に分割できるものとして説明を行うが、１つの領域はいくつの補助領域に分割できてもよい。
【００９１】
図１４は、本変形例におけるアクセス権情報１２３の一例を示す図である。本変形例におけるアクセス権情報１２３は、図３に示したアクセス権情報１２３と比較して、補助領域の有効または無効の情報を持つ。
【００９２】
図１５は、本変形例におけるセキュリティ処理情報１７４の一例を示す図である。本変形例におけるセキュリティ処理情報１７４は、図４に示したセキュリティ処理情報１７４と比較して、補助領域番号が追加され、検証成功時に付与するアクセス権は保持する必要はないため削除されている。また、本変形例では３つのＦＷブロックを３つの補助領域で分割する例を用いているため、１つの補助領域サイズは固定値となり、サイズ情報を保持する必要はない。ただし、例えば２つのＦＷブロックを３つの補助領域で検証する場合では、１つのＦＷブロックに複数の補助領域を割り当てることも可能であるため、サイズ情報は保持していてもよい。２つのＦＷブロックを３つの補助領域で検証する場合とは、例えば、ブロックＡが２ＫＢｙｔｅでブロックＢが１ＫＢｙｔｅのとき、ブロックＡは補助領域１と補助領域２で検証され、ブロックＢは補助領域３で検証されるといった場合を指す。また、本変形例のように１つの領域の補助領域のみを用いて検証を行う場合、領域番号を保持する必要はないが、複数の領域の補助領域を用いて検証を行う場合、例えば、領域３の３つの補助領域と領域４の３つの補助領域との合計６つの補助領域を用いる場合などにおいては、領域番号は必要となる。
【００９３】
図１６は、本変形例におけるＦＷの領域設定の一例を示す図である。図１６に示す例は、ＦＷの通常処理プログラムが３つのＦＷブロック（ブロックＡ，Ｂ，Ｃ）から構成される例である。アクセス権管理装置１２０は、Ｎ個の領域にアクセス権を設定可能であり、１つの領域は３つの補助領域に分割できるものとする。また、通常処理プログラムのブロックＡ，Ｂ，Ｃが分割検証の対象であり、異常処理プログラム、ＦＷ管理プログラム、セキュアプログラムはすでに検証されているものとする。なお、本変形例では、分割検証の対象であるブロックＡ，Ｂ，Ｃは補助領域を利用した改ざん検証を行い、異常処理プログラム、ＦＷ管理プログラム、セキュアプログラムは第１実施形態と同様に領域を利用した改ざん検証を行うものとして説明するが、異常処理プログラム、ＦＷ管理プログラム、セキュアプログラムについても、補助領域を利用した改ざん検証を行う構成としてもよい。
【００９４】
図１６に示す本変形例におけるＦＷの領域設定では、図８に示した例と比較して、ブロックＡ，Ｂ，Ｃのメモリ空間に対し、領域２（ＮＡ，ＸＮ）に加えて、検証後に付与されるアクセス権（ＲＯ）を持つ領域３が設定される。ただし、ブロックＡ，Ｂ，Ｃの各々に対応する領域３の３つの補助領域（ｓｕｂ１，ｓｕｂ２，ｓｕｂ３）はいずれも無効（ｓｕｂ＝０）とされており、領域２の設定が使用されることになる。そのため、未検証であるブロックＡ，Ｂ，Ｃのいずれかに属するデータに対してアクセスが発生した場合に、アクセス権違反が発生する。このアクセス権違反を受けて、セキュアプログラムは、アクセス権違反を発生させたＦＷブロックを検証し、検証が成功したＦＷブロックのメモリ空間の補助領域（ｓｕｂ１，ｓｕｂ２，ｓｕｂ３）をそれぞれ有効（ｓｕｂ＝１）にして、アクセスを可能とする。
【００９５】
本変形例の処理フローは、上述した第１実施形態の処理フローと同様であるが、アクセス権更新部１７３によって更新されるアクセス権が領域の追加ではなく、補助領域の有効化となる。
【００９６】
以上説明したように、本変形例によれば、検証後に付与するアクセス権を持つ領域内の補助領域を無効化しておくことで、未検証のＦＷブロックをアクセス権違反により検出、検証し、動的に検証順序が変更可能なＦＷ改ざん検証機構を実現することができる。特に本変形例では、補助領域を利用することで、第１実施形態よりも少ない領域数での分割検証が可能となる。また、補助領域は領域が均等サイズに分割されたものであるため、通常処理プログラムと同じサイズの領域を設定するだけで、自動的に均等サイズに分割された補助領域による分割検証を実現することができ、通常処理プログラムを複数のＦＷブロックに分割する必要がなくなることから、開発コストを削減できる。
【００９７】
［第２実施形態］
上述の第１実施形態では、情報処理装置１００Ａの起動時に最初に実行されるセキュアプログラムは自己検証による改ざん検出を行っており、セキュアプログラムが改ざんされることにより各プログラムの改ざん検証が回避されることは想定していなかった。しかし、ＦＷが格納されるＲＯＭ１０２ａには、例えばＭａｓｋＲＯＭなどのように出荷時から更新不可能なＲＯＭと、例えばＮＯＲ型フラッシュメモリなどのように所定の手順により更新可能なＲＯＭがあり、セキュアプログラムの改ざんを防止しつつ第１実施形態によるＦＷの分割検証を実現するには、ＦＷは出荷時から更新不可能なＲＯＭに配置する必要があった。
【００９８】
本実施形態では、出荷時から更新不可能なＭａｓｋＲＯＭからのトラストチェーンを実現することで、所定の手順により更新可能なＲＯＭ上にＦＷを配置しつつ、回避不可能なＦＷの分割検証を実現する。
【００９９】
図１７は、本実施形態に係る情報処理装置１００Ｂの概略構成を例示するブロック図である。情報処理装置１００Ｂは、図１に示した第１実施形態に係る情報処理装置１００Ａと同様の概略構成であるが、プロセッサコア１０１内にシグナル検出装置１９０がさらに設けられ、メモリ１０２には、ＦＷに加えてＩＰＬ（Initial  Program  Loader）が保持されている。ＩＰＬは、情報処理装置１００Ｂの電源投入後に最初に実行されるプログラムである。図１７に示す情報処理装置１００Ｂの各種構成要素は、ハードウェア、ソフトウェア、または、ハードウェアとソフトウェアとの組み合わせで構成される。
【０１００】
図１８は、本実施形態に係る情報処理装置１００Ｂの機能的な構成例を示すブロック図である。本実施形態に係る情報処理装置１００Ｂは、図２に示した第１実施形態に係る情報処理装置１００Ａの機能的な構成に対し、シグナル検出装置１９０と、初期実行部１８０とが追加されている。
【０１０１】
シグナル検出装置１９０は、シグナル検出部１９１と、ＦＷ管理部呼出部１９２とを備える。
【０１０２】
シグナル検出部１９１は、シグナル生成部１２２が生成したシグナルを検出し、シグナルがＦＷ管理部１６０の呼び出しを必要とする場合に、ＦＷ管理部呼出部１９２に通知を送る。この通知はシグナルの情報を含み、シグナルが割り込みの場合は、例えば割り込み原因などの情報を含む。
【０１０３】
ＦＷ管理部呼出部１９２は、シグナル検出部１９１からの通知を受けて、この通知に含まれるシグナルの情報に基づいてＦＷ管理部１６０を呼び出す。例えば、異なるシグナルＡ，Ｂそれぞれに対応するＦＷ管理部Ａ，Ｂが存在する場合、シグナル検出部１９１でシグナルＡが検出されて通知を受けると、ＦＷ管理部呼出部１９２はシグナルＡに対応するＦＷ管理部Ａを呼び出し、シグナル検出部１９１でシグナルＢが検出されて通知を受けると、ＦＷ管理部呼出部１９２はシグナルＢに対応するＦＷ管理部Ｂを呼び出す。また、ＦＷ管理部呼出部１９２は、シグナル検出部１９１でシグナルＡとシグナルＢのいずれが検出された場合でも、シグナルＡに対応するＦＷ管理部Ａを呼び出すようにしてもよい。
【０１０４】
初期実行部１８０は、自己検証部１８１と、初期化部１８２と、ＦＷ検証部１８３と、初期異常処理部１８４と、アクセス権設定部１８５と、ＦＷ起動部１８６とを備える。
【０１０５】
自己検証部１８１は、初期実行部１８０の自己検証を行う。初期化部１８２は、情報処理装置１００Ｂの初期化処理を行う。
【０１０６】
ＦＷ検証部１８３は、指定されたＦＷの一部または全部の検証を行う。初期異常処理部１８４は、ＦＷの検証に失敗した場合の異常処理を行う。初期異常処理部１８４は異常処理部１５０と同様の機能を有し、初期異常処理部１８４と異常処理部１５０は同じ異常処理を行ってもよく、それぞれ異なる処理を行ってもよい。
【０１０７】
アクセス権設定部１８５は、アクセス権管理部１２１に対してアクセス権の設定を要求する。ＦＷ起動部１８６は、ＦＷの起動を行う。本実施形態では、初期実行部１８０をＩＰＬにより実現した例を用いて説明を行うが、初期実行部１８０はハードウェアとして実現されてもよい。
【０１０８】
本実施形態におけるセキュリティ処理管理部１７１は、アクセス権違反が発生したメモリ空間に対するセキュリティ処理の管理とセキュリティ処理情報１７４の管理を行い、起動処理は行わない。
【０１０９】
図１９は、本実施形態に係る情報処理装置１００Ｂのハードウェア構成例を示すブロック図である。本実施形態に係る情報処理装置１００Ｂは、図５に示した第１実施形態に係る情報処理装置１００Ａのハードウェア構成に対し、ＭａｓｋＲＯＭ１０２ｃが追加されているとともに、プロセッサコア（ＣＰＵ０）１０１内に割り込みコントローラ（ＧＩＣ）１０１ｅが設けられている。本実施形態では、ＲＯＭ１０２ａおよびＲＡＭ１０２ｂに加えてＭａｓｋＲＯＭ１０２ｃが、図１７および図１８に示したメモリ１０２に相当する。
【０１１０】
プロセッサコア（ＣＰＵ０）１０１、ＲＯＭ１０２ａ、ＲＡＭ１０２ｂ、ＭａｓｋＲＯＭ１０２ｃは、外部バス１０４を介して、データ、信号、命令を互いに送受信可能とする。鍵管理ユニット（ＫＳＵ）１１０は、アクセスが許可されたデバイスとのみデータ、信号、命令を互いに送受信可能とする。また、プロセッサコア（ＣＰＵ０）１０１内の命令実行ユニット（ＥＸＵ）１０１ａ、メモリ保護ユニット（ＭＰＵ）１０１ｂ、メモリコントローラ１０１ｃ、割り込みコントローラ（ＧＩＣ）１０１ｅは、内部バス１０１ｄを介して、データ、信号、命令を互いに送受信可能とする。本実施形態では、割り込みコントローラ（ＧＩＣ）１０１ｅを、図１７および図１８に示したシグナル検出装置１９０として用いるものとする。また、ＩＰＬはＭａｓｋＲＯＭ１０２ｃ上のプログラムとし、プロセッサコア（ＣＰＵ０）１０１が最初に実行するプログラムとする。
【０１１１】
次に、本実施形態で想定するメモリマップについて説明する。図２０は、本実施形態におけるメモリマップの一例を示す図である。本実施形態では、図６に示したメモリマップと比較して、メモリ空間上にＭａｓｋＲＯＭ１０２ｃが存在する。ＭａｓｋＲＯＭ１０２ｃには、ＩＰＬとＩＰＬ  ＭＡＣが格納されている。ＩＰＬ  ＭＡＣはＩＰＬのＭＡＣであり、ＩＰＬの起動時の自己検証で使用する。本実施形態では、ＭａｓｋＲＯＭ１０２ｃは図２０に示すようにメモリマップされているものとして説明を行う。
【０１１２】
次に、本実施形態に係る情報処理装置１００Ｂの処理フローを説明する。本実施形態では、上述の第１実施形態と比較して、データアクセス時の処理フローにシグナル検出装置１９０による処理が追加され、起動時の処理フローがセキュア処理部１７０（セキュリティ処理プログラム）による処理から初期実行部１８０（ＩＰＬ）による処理に変更される。ここでは、セキュリティ処理情報１７４は図４、ＦＷのメモリマップは図２０、ＦＷの領域設定は図８と同様とし、ＲＡＭ１０２ｂについても適切に領域設定が行われているものとして、上述の第１実施形態との差分を説明する。
【０１１３】
図２１は、本実施形態に係る情報処理装置１００Ｂの起動時の処理フローを示すフローチャートである。電源が投入されると、情報処理装置１００Ｂは、プロセッサコア（ＣＰＵ０）１０１でＩＰＬの実行を開始する。
【０１１４】
ＩＰＬは、まず自身の改ざん検証を行うため、鍵管理ユニット１１０から鍵情報を取得し、ＭａｓｋＲＯＭ１０２ｃからＩＰＬ  ＭＡＣを取得して、自己検証部１８１で自己検証を行う（ステップＳ６０１）。ここで、自己検証に失敗した場合（ステップＳ６０２：Ｎｏ）、ＩＰＬは検証失敗に伴う事後処理を行い（ステップＳ６０３）、異常終了する。
【０１１５】
一方、自己検証に成功した場合（ステップＳ６０２：Ｙｅｓ）、ＩＰＬは初期化部１８２でペリフェラルなどの初期化処理を行い（ステップＳ６０４）、アクセス権の初期設定を行う（ステップＳ６０５）。本実施形態におけるアクセス権の初期設定は、ＲＯＭ１０２ａの全メモリ空間を領域１（ＲＯ）、検証対象である通常処理プログラム（ブロックＡ，Ｂ，Ｃ）のメモリ空間を領域２（ＮＡ，ＸＮ）に設定することであり、ＩＰＬはこの初期設定をアクセス権設定部１８５に依頼する。アクセス権設定部１８５は、アクセス権管理部１２１にアクセス権の設定を依頼し、アクセス権管理部１２１は依頼を受けたアクセス権を設定し、設定したアクセス権をアクセス権情報１２３に登録する。
【０１１６】
次に、ＩＰＬは、ＦＷ検証部１８３でＲＯＭ１０２ａ上のセキュアプログラム、ＦＷ管理プログラム、異常処理プログラム、最初に実行するＦＷブロック（ブロックＡ）の改ざん検証を行う（ステップＳ６０６）。そして、これらの検証のいずれかに失敗した場合（ステップＳ６０７：Ｎｏ）、ＩＰＬは初期異常処理部１８４でＦＷの検証失敗に伴う事後処理を行い（ステップＳ６０８）、異常終了する。
【０１１７】
一方、検証に成功した場合（ステップＳ６０７：Ｙｅｓ）、ＩＰＬはアクセス権設定部１８５で、検証状態に基づき、メモリ空間に対するアクセス権の設定を行う（ステップＳ６０９）。すなわち、アクセス権設定部１８５は、検証状態に基づくアクセス権の設定をアクセス権管理部１２１に依頼し、アクセス権管理部１２１は依頼を受けたアクセス権を設定して、設定したアクセス権をアクセス権情報１２３に登録する。本実施形態の場合、検証を行ったセキュアプログラムのメモリ空間を領域Ｎ（ＲＯ）、ＦＷ管理プログラムと異常処理プログラムのメモリ空間を領域Ｎ−１（ＲＯ）、最初に実行するＦＷブロック（ブロックＡ）のメモリ空間を領域３（ＲＯ）にそれぞれ設定する。
【０１１８】
そして、ＩＰＬは遷移先を検証したＦＷブロック（ブロックＡ）に設定し（ステップＳ６１０）、ＦＷ起動部１８６でＦＷを起動する。これにより、プロセッサコア（ＣＰＵ０）１０１が実行するプログラムがＩＰＬからＦＷブロック（ブロックＡ）に遷移し（ステップＳ６１１）、起動処理が終了する。
【０１１９】
ここで、アクセス権の初期設定は、必ずしもＦＷ検証部１８３の検証前に行う必要はなく、検証したＦＷ管理プログラムや異常処理プログラムのアクセス権設定時に行ってもよく、ＩＰＬからＦＷブロックへの遷移前ならば任意のタイミングで行うことができる。
【０１２０】
図２２は、本実施形態に係る情報処理装置１００Ｂのデータアクセス時の処理フローを示すフローチャートである。ここでは、プロセッサコア（ＣＰＵ０）１０１で動作する通常処理プログラムのブロックＡからブロックＢに対してデータアクセスが発生した場合を想定して説明を行う。
【０１２１】
メモリ１０２に対するデータアクセスが発生すると、メモリアクセス部１３１はメモリ１０２上のデータにアクセスを行う。アクセス権管理部１２１は、メモリアクセス部１３１のデータアクセスを検出すると、アクセス権情報１２３を参照して、メモリアクセス部１３１のデータアクセスがアクセス権に違反するアクセスか確認する（ステップＳ７０１）。ここで、アクセス権に違反するアクセスではなかった場合（ステップＳ７０２：Ｎｏ）、メモリアクセス部１３１はメモリ１０２上のブロックＢに対してデータアクセスを行う（ステップＳ７０３）。
【０１２２】
一方、アクセス権に違反するアクセスだった場合（ステップＳ７０２：Ｙｅｓ）、シグナル生成部１２２がアクセス権違反のシグナルを生成する（ステップＳ７０４）。シグナル検出装置１９０は、シグナル検出部１９１でこのシグナルを検出して、プロセッサコア（ＣＰＵ０）１０１で実行中の通常処理プログラムのブロックＡの実行を中断し、ＦＷ管理部呼出部１９２でＦＷ管理プログラムを呼び出す（ステップＳ７０５）。これにより、プロセッサコア（ＣＰＵ０）１０１でＦＷ管理プログラムが実行される。ＦＷ管理プログラムは、シグナル解析部１６１でシグナルの発生原因を解析する（ステップＳ７０６）。以降の処理フローは図１０に示した処理フローと同様であるため、説明を省略する。
【０１２３】
以上説明したように、本実施形態によれば、出荷時から更新不可能なＭａｓｋＲＯＭ１０２ｃ上のＩＰＬを起点としたトラストチェーンにより、セキュリティ処理に関わるＦＷ管理プログラム、セキュアプログラムの完全性を担保することができ、改ざん検証の回避を有効に防止することができる。
【０１２４】
（第２実施形態の変形例１）
本変形例は、ＲＯＭ１０２ａに格納されたＦＷの一部のデータをＲＡＭ１０２ｂにロードしてから検証する例である。上述の第２実施形態では、ＲＯＭ１０２ａに格納されているデータをそのまま検証し、検証した場所のデータにアクセスしていたが、本変形例では、ＲＯＭ１０２ａ上のデータをＲＡＭ１０２ｂ上にロードしてから検証し、アクセスを行う。ここで、不揮発性主記憶メモリを用いる場合は、不揮発性主記憶メモリをＲＯＭ１０２ａとみなして、ＦＷはＲＡＭ１０２ｂ上の別のメモリ空間にロードされて検証されてもよく、不揮発性主記憶メモリの特定のメモリ空間をＲＡＭ１０２ｂとみなしてロードされ検証されてもよい。また、本変形例では、ＲＯＭ１０２ａ上のデータはＲＡＭ１０２ｂにロードして使用するものと、ＲＯＭ１０２ａ上のデータをそのまま使用するものが存在するものとして説明を行う。ＲＯＭ１０２ａ上のデータをそのまま使用する場合、ＲＡＭ１０２ｂへのロードは発生せず、ロード無しとなる。
【０１２５】
図２３は、本変形例に係る情報処理装置１００Ｂ−１の機能的な構成例を示すブロック図である。情報処理装置１００Ｂ−１は、図１８に示した第２実施形態に係る情報処理装置１００Ｂの機能的な構成に対し、セキュア処理部１７０内にロード部１７５が追加されている。ロード部１７５は、ＲＯＭ１０２ａ上のデータをＲＡＭ１０２ｂ上にロードするための機能モジュールである。
【０１２６】
本変形例では、プロセッサコア１０１がアクセスするアドレスを参照アドレス、ロードが必要なデータが保持されているアドレスをロード元アドレスとし、セキュリティ処理管理部１７１は、セキュリティ処理情報１７４に含まれるロード元アドレスと参照アドレスを使用するものとして説明を行う。ＲＯＭ１０２ａからＲＡＭ１０２ｂへロードする場合は、ＲＡＭ１０２ｂのメモリ空間のアドレスが参照アドレス、ＲＯＭ１０２ａのメモリ空間のアドレスがロード元アドレスとなり、ＲＯＭ１０２ａからＲＡＭ１０２ｂへのロードがない場合（ＲＯＭ１０２ａ上のデータをそのまま参照する場合）は、ＲＯＭ１０２ａのメモリ空間のアドレスが参照アドレスとなる。ここで、ロード元アドレスと参照アドレスはＦＷ管理部１６０が管理し、セキュリティ処理管理部１７１はＦＷ管理部１６０から取得してもよく、他の手段により取得してもよい。
【０１２７】
図２４は、本変形例におけるセキュリティ処理情報１７４の一例を示す図である。本変形例におけるセキュリティ処理情報１７４は、図４に示したセキュリティ処理情報１７４と比較して、ロード元アドレスとロードの有無が追加され、開始アドレスが参照アドレスに変更されている。ここで、開始アドレスと参照アドレスは基本的に同じ情報であり、検証要求が発生する領域アドレスを指す。ロードの有無は、ロード部１７５がロードを行うか否かを示す情報であり、ロード有りの場合はロード部１７５がロードを行い、ロード無しの場合はロードを行わない。
【０１２８】
本変形例におけるセキュリティ処理管理部１７１は、アクセス権違反が発生したメモリ空間に対するデータの改ざん検証処理の管理とセキュリティ処理情報１７４の管理に加えて、アクセス権違反が発生したメモリ空間に対するデータロードの管理を行う。セキュリティ処理管理部１７１は、セキュリティ処理情報１７４の参照アドレスと、アクセス権違反が発生したアドレスおよびサイズ、検証状態から、発生したアクセス権違反が検証要求であると判断した場合に、ロードの有無を確認し、ロードが必要だった場合にロード部１７５に対してロードを依頼する。また、セキュリティ処理管理部１７１は、改ざん検証部１７２に対して検証要求のあった検証対象領域に対する改ざん検証を依頼する。そして、セキュリティ処理管理部１７１は、改ざん検証部１７２から検証成功の通知があった場合に、検証に成功したメモリ空間に対するアクセス権の更新をアクセス権更新部１７３に依頼し、このメモリ空間が検証済みであることをセキュリティ処理情報１７４に記録する。
【０１２９】
ロード部１７５は、セキュリティ処理管理部１７１から指定されたサイズのデータをロード元アドレスから参照アドレスにロードする。ロードはソフトウェアで行ってもよく、ＤＭＡＣ（Direct  Memory  Access  Controller）などを用いてハードウェアで行ってもよい。
【０１３０】
改ざん検証部１７２は、セキュリティ処理管理部１７１から指定されたメモリ空間に対する改ざん検証を行い、改ざんの有無を検出する。改ざん検証部１７２は、セキュリティ処理情報１７４の検証用データをセキュリティ処理管理部１７１から受け取り、所定のアルゴリズムに従って改ざん検証を行い、結果をセキュリティ処理管理部１７１に通知する。本変形例の場合、セキュリティ処理管理部１７１は参照アドレスとサイズを改ざん検証部１７２に指定し、改ざん検証部１７２は参照アドレスとサイズで示される範囲のメモリ空間（検証対象領域に相当）に対して改ざん検証を行う。
【０１３１】
アクセス権更新部１７３は、セキュリティ処理管理部１７１から指定されたメモリ空間に対するアクセス権の更新をアクセス権管理部１２１に通知する。本変形例の場合、セキュリティ処理管理部１７１は参照アドレスとサイズをアクセス権更新部１７３に指定し、アクセス権更新部１７３は参照アドレスとサイズで示される範囲のメモリ空間（検証対象領域に相当）に対してアクセス権の更新を行う。
【０１３２】
次に、本変形例で想定するメモリマップについて説明する。図２５は、本変形例におけるメモリマップの一例を示す図である。本変形例では、ＦＷとＭＡＣはＲＯＭ１０２ａに格納されおり、ＦＷはＲＯＭ１０２ａを参照するものとＲＯＭ１０２ａからＲＡＭ１０２ｂにロードされるものが存在し、ＭＡＣはＲＯＭ１０２ａを参照するものとして説明を行う。ただし、ＭＡＣはＲＡＭ１０２ｂにロードされてもよく、またＦＷも全てＲＯＭ１０２ａからＲＡＭ１０２ｂにロードされる構成をとってもよい。ここでは、ＦＷのうち、異常処理プログラム、ＦＷ管理プログラム、セキュアプログラムはＲＯＭ１０２ａを参照し、通常処理プログラムのうちブロックＡはＲＯＭ１０２ａから実行され、それ以外のブロックはＲＯＭ１０２ａからＲＡＭ１０２ｂにロードされるものとする。
【０１３３】
図２５に示す本変形例のメモリマップは、図２０に示したメモリマップと比較して、ＲＡＭ１０２ｂ上にＦＷロード空間が存在する。ＦＷロード空間は通常処理プログラムロード空間を持ち、さらに通常処理プログラムロード空間は１つ以上のＦＷブロックのロード空間（ブロックＢロード空間、ブロックＣロード空間）を持つ。ここで、ロードする必要のないブロックＡについては特にＲＡＭ１０２ｂ上にロード空間を設ける必要はないが、通常処理プログラムのロード空間として一律に確保されていてもよい。
【０１３４】
図２６は、本変形例におけるＦＷの領域設定の一例を示す図である。図２６に示す本変形例におけるＦＷの領域設定では、図８に示した例と比較して、ＲＯＭ１０２ａのメモリ空間は実行するプログラムが配置されるため領域１でＲＯに設定し、分割検証の対象である通常処理プログラムが配置されているメモリ空間を、領域３でＮＡ，ＸＮに設定する。一方、ＲＡＭ１０２ｂのメモリ空間は読み書き可能であり、プログラム以外のデータも配置される可能性があることから領域２でＲＷ，ＸＮに設定する。そして、分割検証の対象である通常処理プログラムがロードされるメモリ空間を、領域４でＮＡ，ＸＮに設定する。この状態でＦＷを実行すると、未検証であるブロックＡ，Ｂ，Ｃのいずれかに属するプログラムが呼び出された場合に、領域３または領域４によるアクセス権違反が発生する。このアクセス権違反を受けて、セキュアプログラムはアクセス権違反を発生させたＦＷブロックに対してロードが必要な場合はロードを行い、検証し、検証したＦＷブロックのメモリ空間に対して新しい領域（領域５，６，７）を追加し、アクセスを可能とする。
【０１３５】
次に、本変形例の処理フローを説明する。本変形例では、上述の第２実施形態と比較して、セキュリティ処理の処理フローに通常処理プログラムのロードが追加される。ここでは、セキュリティ処理情報１７４は図２４、ＦＷのメモリマップは図２５、ＦＷの領域設定は図２６と同様とし、ＲＡＭ１０２ｂについても適切に領域設定が行われているものとして、上述の第２実施形態との差分を説明する。
【０１３６】
図２７は、本変形例におけるセキュリティ処理の処理フローを示すフローチャートである。セキュアプログラムによるセキュリティ処理が開始されると、セキュリティ処理管理部１７１は、シグナルを発生させたアドレスが未検証領域か確認する（ステップＳ８０１）。そして、シグナルを発生させたアドレスが未検証領域の場合（ステップＳ８０２：Ｙｅｓ）、セキュリティ処理管理部１７１は、セキュリティ処理情報１７４を参照して、シグナルを発生させた未検証領域のロードの有無を確認する（ステップＳ８０４）。
【０１３７】
ここで、シグナルを発生させた未検証領域のロードが必要な場合（ステップＳ８０５：Ｙｅｓ）、セキュリティ処理管理部１７１は、未検証領域のロードと改ざん検証をロード部１７５と改ざん検証部１７２に依頼する。ロード部１７５は、セキュリティ処理管理部１７１からロード元アドレスと参照アドレスとサイズを取得し、ロード元アドレスから参照アドレスに対して指定サイズ分のデータをロードする（ステップＳ８０６）。そして、ロード部１７５によるロード終了後、改ざん検証部１７２は、ロードしたデータ（未検証領域）に対して改ざん検証を行う（ステップＳ８０７）。一方、シグナルを発生させた未検証領域のロードが不要な場合（ステップＳ８０５：Ｎｏ）、未検証領域のロードは行われずに、改ざん検証が行われる（ステップＳ８０７）。
【０１３８】
その他の処理フローは図１２に示した処理フローと同様であるため、説明を省略する。なお、ロードした未検証領域の改ざん検証に失敗した場合、セキュリティ処理管理部１７１は、ロードしたデータを削除してもよく、そのままにしてもよい。
【０１３９】
以上説明したように、本変形例によれば、データ移動と検証を同時に行うことができるため、メモリマップされていないメモリ１０２上のデータに対しても分割検証を行うことができ、図１９に例示した第２実施形態の情報処理装置１００Ｂのハードウェア構成に限らず、より多くの環境に適用することができる。ここで、メモリマップされていないメモリ１０２とは、例えば、ＳＰＩ（Serial  Peripheral  Interface）接続されたＮＯＲ型フラッシュメモリやＮＡＮＤ型フラッシュメモリなどがある。
【０１４０】
なお、本変形例では、ＩＰＬはロードを行わないものとして説明したが、ＩＰＬがロードを行ってもよい。その場合は、図２１に示した処理フローにおいて、改ざん検証前にＩＰＬが検証対象のプログラムのロードの有無を確認し、ロードが必要な場合はロードを行う。
【０１４１】
（第２実施形態の変形例２）
本変形例は、アクセス権違反で検出した領域に対して暗号処理を行う例である。上述の第２実施形態の変形例１では、ＲＯＭ１０２ａ上のデータをＲＡＭ１０２ｂ上にロードしてから検証しアクセスを行っていたが、本変形例では、ＲＯＭ１０２ａ上のデータをＲＡＭ１０２ｂ上にロードしてから暗号処理してアクセスを行う。本変形例における暗号処理とは、データの秘匿を目的とした処理であり、ＡＥＳ（Advanced  Encryption  Standard）やＤＥＳ（Data  Encryption  Standard）などの暗号アルゴリズムを用いてもよく、データのマスク処理やデータ配置の変更によるデータスクランブルなどの暗号アルゴリズムに基づかない処理を用いてもよい。
【０１４２】
図２８は、本変形例に係る情報処理装置１００Ｂ−２の機能的な構成例を示すブロック図である。情報処理装置１００Ｂ−２は、図２３に示した第２実施形態の変形例１に係る情報処理装置１００Ｂ−１と比較して、改ざん検証部１７２が暗号処理部１７６に置き換えられている。暗号処理部１７６は、アクセス権違反で検出した領域に対して暗号処理を行う機能モジュールである。
【０１４３】
本変形例では、暗号処理部１７６による暗号処理が、暗号化されたデータの復号であるものとして説明を行う。本変形例において、ＦＷが配置されているＲＯＭ１０２ａ上のデータの一部は暗号化されていることを前提とし、暗号化されているＲＯＭ１０２ａ上のデータはＲＡＭ１０２ｂ上にロードし、復号してからアクセスを行う。ロードは暗号処理の有無に依存せず、例えば暗号化されていないＲＯＭ１０２ａ上のデータをＲＡＭ１０２ｂ上にロードしてそのままアクセスしてもよい。ここで、不揮発性主記憶メモリを用いる場合は、不揮発性主記憶メモリをＲＯＭ１０２ａとみなして、ＦＷはＲＡＭ１０２ｂ上の別のメモリ空間にロードされ復号されてもよく、不揮発性主記憶メモリの特定のメモリ空間をＲＡＭ１０２ｂとみなしてロードされ復号されてもよい。
【０１４４】
図２９は、本変形例におけるセキュリティ処理情報１７４の一例を示す図である。本変形例におけるセキュリティ処理情報１７４は、図２４に示したセキュリティ処理情報１７４と比較して、暗号処理の有無が追加され、検証用データが削除され、検証状態はアクセス状態に変更されている。なお、本変形例では改ざん検証ではなく暗号処理を行うため、セキュリティ処理情報１７４は検証対象領域に関する情報はなく、セキュリティ処理の対象となるメモリ空間（以下、対象領域と呼ぶ）に関する情報となる。
【０１４５】
暗号処理の有無は、暗号処理部１７６が暗号処理を行うか否かを示す情報であり、暗号処理有りの場合は暗号処理部１７６が暗号処理を行い、暗号処理無しの場合は暗号処理を行わない。暗号処理有りの領域のデータは暗号化されており、暗号処理部１７６が暗号処理を行うことで、その領域のデータが復号される。アクセス状態は、その領域に対してアクセスが発生したか否かを示す情報である。
【０１４６】
なお、ロードの有無と暗号処理の有無は必ずしも一致させる必要はなく、ロード有りで暗号処理無しの組み合わせが存在してもよい。また、ＦＷが不揮発性主記憶メモリとして動作するＲＡＭ１０２ｂ上に配置されている場合は、ロード無しで暗号処理有りの組み合わせが存在してもよい。ただし、ＦＷがＮＯＲ型フラッシュメモリやＮＡＮＤ型フラッシュメモリなどの所定の手順でのみ更新が可能なＲＯＭ１０２ａに配置されている場合は、暗号処理有りの場合は必ずロード有りとなる。
【０１４７】
本変形例におけるセキュリティ処理管理部１７１は、アクセス権違反が発生したメモリ空間に対するデータロードの管理とセキュリティ処理情報１７４の管理に加えて、アクセス権違反が発生したメモリ空間に対する暗号処理の管理を行う。セキュリティ処理管理部１７１は、セキュリティ処理情報１７４の参照アドレスとアクセス権違反が発生したアドレスおよびサイズ、アクセス状態から、発生したアクセス権違反が対象領域のロードまたは暗号処理要求であると判断した場合に、対象領域のロードの有無を確認し、ロードが必要だった場合にロード部１７５に対してロードを依頼する。また、セキュリティ処理管理部１７１は、対象領域の暗号処理の有無を確認し、暗号処理有りの場合に、暗号処理部１７６に対して対象領域の暗号処理を依頼する。そして、セキュリティ処理管理部１７１は、暗号処理部１７６から暗号処理成功の通知があった場合または暗号処理を行わなかった場合に、対象領域に対するアクセス権の更新をアクセス権更新部１７３に依頼し、この対象領域がアクセス済みであることをセキュリティ処理情報１７４に記録する。
【０１４８】
暗号処理部１７６は、セキュリティ処理管理部１７１から指定されたメモリ空間（対象領域）に対する暗号処理を行う。暗号処理部１７６が暗号アルゴリズムによる暗号処理を行う場合、暗号鍵は鍵管理ユニット１１０に保存してもよく、セキュリティ処理情報１７４に含まれる情報として保存してもよい。また、暗号処理は領域ごとに異なる暗号鍵を用いてもよく、領域ごとに異なるアルゴリズムを用いてもよい。本変形例では、暗号処理部１７６はソフトウェアで実現されているものとして説明を行うが、ハードウェアで実現されてもよく、暗号処理部１７６がハードウェアで実現された場合は、暗号鍵を暗号処理部１７６が保持してもよい。
【０１４９】
次に、本変形例の処理フローを説明する。本変形例では、上述の第２実施形態の変形例１と比較して、セキュリティ処理の処理フローの改ざん検証が暗号処理に変更される。ここでは、セキュリティ処理情報１７４は図２９、ＦＷのメモリマップは図２５、ＦＷの領域設定は図２６と同様とし、ＲＡＭ１０２ｂについても適切に領域設定が行われているものとして、上述の第２実施形態の変形例１との差分を説明する。
【０１５０】
図３０は、本変形例におけるセキュリティ処理の処理フローを示すフローチャートである。セキュアプログラムによるセキュリティ処理が開始されると、セキュリティ処理管理部１７１は、シグナルを発生させたアドレスが対象領域か確認する（ステップＳ９０１）。ここで、シグナルを発生させたアドレスが対象領域でない、または対象領域だがアクセス済みの場合（ステップＳ９０２：Ｎｏ）、セキュリティ処理は失敗として（ステップＳ９０３）、処理を終了する。一方、シグナルを発生させたアドレスが対象領域かつ未アクセスの場合（ステップＳ９０２：Ｙｅｓ）、セキュリティ処理管理部１７１は、セキュリティ処理情報１７４を参照して、シグナルを発生させた対象領域のロードの有無を確認する（ステップＳ９０４）。
【０１５１】
ここで、シグナルを発生させた対象領域のロードが必要な場合（ステップＳ９０５：Ｙｅｓ）、セキュリティ処理管理部１７１は、対象領域のロードをロード部１７５に依頼する。ロード部１７５は、セキュリティ処理管理部１７１からロード元アドレスと参照アドレスとサイズを取得し、ロード元アドレスから参照アドレスに対して指定サイズ分のデータをロードする（ステップＳ９０６）。一方、シグナルを発生させた対象領域のロードが不要な場合（ステップＳ９０５：Ｎｏ）、対象領域のロードは行われない。
【０１５２】
次に、セキュリティ処理管理部１７１は、セキュリティ処理情報１７４を参照して、シグナルを発生させた対象領域の暗号処理の有無を確認する。そして、暗号処理が必要な場合（ステップＳ９０８：Ｙｅｓ）、セキュリティ処理管理部１７１は、対象領域の暗号処理を暗号処理部１７６に依頼する。暗号処理部１７６は、セキュリティ処理管理部１７１から参照アドレスとサイズを取得し、鍵管理ユニット１１９から暗号鍵を取得して、参照アドレスから指定サイズ分のデータを暗号処理する（ステップＳ９０９）。
【０１５３】
ここで、暗号処理部１７６が暗号処理に失敗した場合（ステップＳ９１０：Ｎｏ）、セキュリティ処理は失敗として（ステップＳ９０３）、処理を終了する。一方、暗号処理部１７６が暗号処理に成功した場合は（ステップＳ９１０：Ｙｅｓ）、その後、暗号処理を行った対象領域に対するアクセス権の更新が行われ（ステップＳ９１１）、セキュリティ処理情報１７４のアクセス状態がアクセス済みに更新され（ステップＳ９１２）、セキュリティ処理は成功として（ステップＳ９１３）、処理を終了する。また、シグナルを発生させた対象領域の暗号処理が不要な場合は（ステップＳ９０８：Ｎｏ）、対象領域の暗号処理は行われず、アクセス権の更新（ステップＳ９１１）およびセキュリティ処理情報１７４のアクセス状態の更新（ステップＳ９１２）が行われ、セキュリティ処理は成功として（ステップＳ９１３）、処理を終了する。
【０１５４】
以上説明したように、本変形例によれば、データの利用時に任意サイズのブロック単位でＦＷに対して暗号処理を行うことができるので、メモリ１０２上のデータを秘匿することができ、ＦＷに対して改ざん検証を行う場合と同様に、意図しないデータの利用を有効に防止することができる。また、本変形例によれば、データ移動と暗号処理を同時に行うことができるため、メモリマップされていないメモリ１０２上のデータに対しても分割検証を行うことができ、図１９に例示した第２実施形態の情報処理装置１００Ｂのハードウェア構成に限らず、より多くの環境に適用することができる。
【０１５５】
なお、本変形例では、ＩＰＬはロードと暗号処理を行わないものとして説明したが、ＩＰＬがロードと暗号処理を行ってもよい。その場合は、図２１に示した処理フローにおいて、改ざん検証が暗号処理となり、ＩＰＬが検証対象のプログラムのロードの有無を確認してロードが必要な場合はロードを行い、暗号処理の有無を確認して暗号処理有りの場合は暗号処理を行う。
【０１５６】
（第２実施形態の変形例３）
本変形例は、上述の第２実施形態の変形例１と変形例２とを組み合わせ、セキュア処理部１７０がロード部１７５と改ざん検証部１７２と暗号処理部１７６とを同時に持つ構成としたものである。この場合、セキュリティ処理情報１７４は、図２４に示したセキュリティ処理情報１７４と、図２９に示したセキュリティ処理情報１７４とをマージした構成となる。すなわち、本変形例におけるセキュリティ処理情報１７４は、参照アドレス、サイズ、検証用データ、付与するアクセス権、アクセス状態、ロード元アドレス、ロードの有無、改ざん検証の有無、暗号処理の有無、領域番号を持つ。また、セキュリティ処理管理部１７１は、セキュリティ処理情報１７４に基づいて、アクセス権違反が発生したメモリ空間に対してロード、改ざん検証、暗号処理の要否を判断して、これらの処理の実行を管理する。
【０１５７】
また、ロード部１７５、改ざん検証部１７２、暗号処理部１７６以外にも、その他の処理部が組み合わされてもよい。その他の処理部とは、例えばデータの削除を行うデータ削除部など、どのような処理であってもよい。さらに、組み合わせた全ての処理が同時に実行される必要はなく、例えば、改ざん検証部１７２と暗号処理部１７６のみ動作する場合や、ロード部１７５のみが動作する場合があってもよい。この場合、情報処理装置１００Ｂとして不要と判断された場合は、必要のない処理部を削除してもよい。
【０１５８】
なお、上述の第２実施形態およびその変形例では、上述の第１実施形態と同様に、検証済みの検証対象領域または暗号処理を行った対象領域に対して新たにアクセス権を付与した領域を設定することを想定して説明したが、上述の第１実施形態の変形例と同様に、事前に割り当てられた領域内の補助領域を用いる構成としてもよい。
【０１５９】
［第３実施形態］
上述の第１実施形態および第２実施形態ではシングルコアでの動作を想定しており、マルチコアでの動作を想定していなかった。本実施形態では、マルチコアでの動作を前提として、通常処理部１４０とセキュア処理部１７０を異なるプロセッサで実行することで、データ分離によるセキュリティ向上を実現するとともに、検証と実行を同時に実現し、検証発生による通常処理の中断を緩和する。ここで、本実施形態では２つのプロセッサコアによるマルチコア構成例を用いて説明を行うが、いくつのプロセッサコアを用いてもよい。また、マルチコア構成はホモジニアスなプロセッサコアを用いてもよく、ヘテロジニアスなプロセッサコアを用いてもよい。
【０１６０】
図３１は、本実施形態に係る情報処理装置１００Ｃの機能的な構成例を示すブロック図である。情報処理装置１００Ｃは、図２に示した第１実施形態に係る情報処理装置１００Ａの機能的な構成に対し、ＦＷ管理部１６０内にコア通知部１６３が追加されているとともに、セキュア処理部１７０内に予約検証部１７７が追加されている。
【０１６１】
コア通知部１６３は、プロセッサコア１０１間の通知を管理する。プロセッサコア１０１間の通知とは、例えばプロセッサコアＡとプロセッサコアＢの２つのプロセッサコア１０１でプログラムを実行しているとき、プロセッサコアＡのプログラムからプロセッサコアＢのプログラムに対して行う通知を指す。コア通知部１６３は、別のコアで動作する指定されたプログラムに対して、プログラム切り替えの通知を行う。プログラム切り替えの通知には、プログラム切替部１６２から受け取った通知内容を含めることができる。なお、本実施形態では、コア通知部１６３はＦＷ管理部１６０の一部として説明しているが、ＦＷから独立したソフトウェアまたはハードウェアとして実現してもよい。
【０１６２】
本実施形態におけるプログラム切替部１６２は、コア通知部１６３からプログラムの切り替え先を通知された場合は、その通知に応じて通常処理プログラムの所定のＦＷブロック、または異常処理プログラムに切り替える。また、切り替え先のプログラムが現在のプロセッサコア１０１が実行するプログラムではない場合、プログラム切替部１６２は、コア通知部１６３にプログラム切り替えを通知する。プログラム切替部１６２がコア通知部１６３と送受信する通知には、切り替え先のプログラムで必要な情報を含むことができる。切り替え先のプログラムで必要な情報とは、例えば、シグナルを発生させたアドレスやシグナルの発生原因、処理の成功、失敗などが挙げられる。
【０１６３】
予約検証部１７７は、セキュリティ処理管理部１７１に対してアクセス権違反が発生していない検証対象領域に対する改ざん検証（以下、これを予約検証と呼ぶ）の管理を行う。予約検証部１７７は、セキュリティ処理管理部１７１がアクセス権違反によるセキュリティ処理を行っていないとき、セキュリティ処理管理部１７１に対して予約検証を依頼する。セキュリティ処理管理部１７１は、予約検証部１７７から指定された領域に対する改ざん検証を改ざん検証部１７２に依頼し、改ざん検証部１７２を用いて予約検証を行う。予約検証を行う領域は、所定の方法によって決定される。所定の方法とは、どのような方法を用いてもよい。例えば、予約検証部１７７が検証順序の記載されたリストを保持していてもよく、アクセス権違反による検証が発生した領域の前後の領域を検証するアルゴリズムを用いてもよい。
【０１６４】
本実施形態におけるセキュリティ処理管理部１７１は、アクセス権違反が発生したメモリ空間に対するセキュリティ処理の管理とセキュリティ処理情報１７４の管理に加えて、予約検証部１７７からの依頼を受けて予約検証を行う。
【０１６５】
図３２は、本実施形態に係る情報処理装置１００Ｃのハードウェア構成例を示すブロック図である。本実施形態に係る情報処理装置１００Ｃは、図５に示した第１実施形態に係る情報処理装置１００Ａのハードウェア構成と比較して、プロセッサコア（ＣＰＵ０）１０１−１とプロセッサコア（ＣＰＵ１）１０１−２の２つのプロセッサコア１０１を備える。プロセッサコア（ＣＰＵ０）１０１−１とプロセッサコア（ＣＰＵ１）１０１−２は、それぞれ、命令実行ユニット（ＥＸＵ）１０１−１ａ，１０１−２ａ、メモリ保護ユニット（ＭＰＵ）１０１−１ｂ，１０１−２ｂ、メモリコントローラ１０１−１ｃ，１０１−２ｃに加え、内部ＲＡＭ（ＩＲＡＭ）１０１−１ｆ，１０１−２ｆを持つ。
【０１６６】
プロセッサコア（ＣＰＵ０）１０１−１、プロセッサコア（ＣＰＵ１）１０１−２、ＲＯＭ１０２ａ、ＲＡＭ１０２ｂは、外部バス１０４を介して、データ、信号、命令を互いに送受信可能とする。鍵管理ユニット（ＫＳＵ）１１０は、アクセスが許可されたデバイスとのみデータ、信号、命令を互いに送受信可能とする。また、プロセッサコア（ＣＰＵ０）１０１−１内の命令実行ユニット（ＥＸＵ）１０１−１ａ、メモリ保護ユニット（ＭＰＵ）１０１−１ｂ、メモリコントローラ１０１−１ｃ、内部ＲＡＭ（ＩＲＡＭ）１０１−１ｆは、内部バス１０１−１ｄを介して、データ、信号、命令を互いに送受信可能とする。また、プロセッサコア（ＣＰＵ１）１０１−２内の命令実行ユニット（ＥＸＵ）１０１−２ａ、メモリ保護ユニット（ＭＰＵ）１０１−２ｂ、メモリコントローラ１０１−２ｃ、内部ＲＡＭ（ＩＲＡＭ）１０１−２ｆは、内部バス１０１−２ｄを介して、データ、信号、命令を互いに送受信可能とする。ここで、本実施形態では内部ＲＡＭ（ＩＲＡＭ）１０１−１ｆ，１０１−２ｆを用いた説明を行うが、必ずしも内部ＲＡＭ（ＩＲＡＭ）１０１−１ｆ，１０１−２ｆを用いる必要はない。
【０１６７】
次に、本実施形態で想定するメモリマップについて説明する。図３３は、本実施形態におけるメモリマップの一例を示す図である。本実施形態では、図６に示したメモリマップと比較して、メモリ空間上にＣＰＵ０  ＩＲＡＭとＣＰＵ１  ＩＲＡＭが存在する。ＣＰＵ０  ＩＲＡＭはプロセッサコア（ＣＰＵ０）１０１−１の内部ＲＡＭ（ＩＲＡＭ）１０１−１ｆであり、ＣＰＵ１  ＩＲＡＭはプロセッサコア（ＣＰＵ１）１０１−２の内部ＲＡＭ（ＩＲＡＭ）１０１−２ｆである。プロセッサコア（ＣＰＵ０）１０１−１からはＣＰＵ１  ＩＲＡＭにアクセスできず、プロセッサコア（ＣＰＵ１）１０１−２からはＣＰＵ０  ＩＲＡＭにアクセスできないため、プロセッサコア（ＣＰＵ０）１０１−１で動作するプログラムはＣＰＵ０  ＩＲＡＭにデータを配置すれば、プロセッサコア（ＣＰＵ１）で動作するプログラムからはこのデータにアクセスすることができず、データ分離を実現することができる。また、ＲＡＭ１０２ｂとＲＯＭ１０２ａは、プロセッサコア（ＣＰＵ０）１０１−１とプロセッサコア（ＣＰＵ１）１０１−２の双方からアクセスが可能である。本実施形態では、各プロセッサコア１０１−１，１０１−２の内部ＲＡＭ（ＩＲＡＭ）１０１−１ｆ，１０１−２ｆは、各プロセッサコア１０１−１，１０１−２で動作するプログラムのデータの保存に使用する。
【０１６８】
本実施形態の予約検証は、セキュアプログラムがアクセス違反によるセキュリティ処理を行っていない場合にセキュアプログラムが行う。予約検証は、所定の方法により自動的に実行される。所定の方法とは、例えば、情報処理装置１００Ｃの起動後に一度もアクセス権違反による検証が発生していない状態で実行してもよく、アクセス権違反による検証後に続けて実行してもよい。セキュアプログラムによる予約検証中にアクセス権違反によるセキュリティ処理が発生した場合、セキュアプログラムは予約検証を中止、中断してアクセス権違反によるセキュリティ処理を行ってもよく、予約検証を終了してからアクセス権違反によるセキュリティ処理を行ってもよい。実行中の予約検証が中止された場合、その予約検証は実行されなかったものとして扱う。一方、実行中の予約検証が中断された場合、予約検証部１７７は中断時の情報を保存しておき、アクセス権違反によるセキュリティ処理終了後に中断していた予約検証を再開する。
【０１６９】
次に、本実施形態に係る情報処理装置１００Ｃの処理フローを説明する。本実施形態では、上述の第１実施形態と比較して、起動時の処理フローとデータアクセス時の処理フローが異なり、予約検証時の処理フローが加わる。本実施形態では、情報処理装置１００Ｃはプロセッサコア（ＣＰＵ０）１０１−１から起動し、プロセッサコア（ＣＰＵ０）１０１−１でセキュアプログラムを動作させ、プロセッサコア（ＣＰＵ１）１０１−２で通常処理プログラム、ＦＷ管理プログラム、異常処理プログラムを動作させるものとして説明を行うが、各プログラムの動作するプロセッサコア１０１は入れ替わってもよい。また、プロセッサコア（ＣＰＵ０）１０１−１でセキュアプログラムと異常処理プログラムが動作し、プロセッサコア（ＣＰＵ１）１０１−２で通常処理プログラムとＦＷ管理プログラムが動作するなど、各プロセッサコア１０１で動作するプログラムが変わってもよい。ここでは、セキュリティ処理情報１７４は図４、ＦＷのメモリマップは図３３、ＦＷの領域設定は図８と同様とし、ＲＡＭ１０２ｂについても適切に領域設定が行われているものとして、上述の第１実施形態との差分を説明する。
【０１７０】
図３４は、本実施形態に係る情報処理装置１００Ｃの起動時の処理フローを示すフローチャートである。電源が投入されると、情報処理装置１００Ｃは、プロセッサコア（ＣＰＵ０）１０１−１でＦＷのセキュアプログラムの実行を開始する。
【０１７１】
セキュアプログラムは、まず自己検証を行い（ステップＳ１００１）、自己検証に成功した場合（ステップＳ１００２：Ｙｅｓ）、プロセッサコア（ＣＰＵ０）１０１−１とプロセッサコア（ＣＰＵ１）１０１−２の初期化処理を行う（ステップＳ１００４）。プロセッサコア（ＣＰＵ０）１０１−１とプロセッサコア（ＣＰＵ１）１０１−２の初期化処理では、例えば、ペリフェラルなどの初期化やプロセッサコア（ＣＰＵ１）１０１−２へのクロックの供給など、所定の初期化処理が行われる。
【０１７２】
次に、セキュアプログラムは、アクセス権の初期設定を行う（ステップＳ１００５）。そして、セキュアプログラムは改ざん検証部１７２でＲＯＭ１０２ａ上のＦＷ管理プログラム、異常処理プログラム、最初に実行するＦＷブロック（ブロックＡ）の改ざん検証を行う（ステップＳ１００６）。そして、これらの検証に成功した場合（ステップＳ１００７：Ｙｅｓ）、セキュアプログラムは検証状態に基づき、メモリ空間に対するアクセス権の設定を行う（ステップＳ１００９）。ここで、アクセス権の初期設定および検証状態に基づくアクセス権の設定は、プロセッサコア（ＣＰＵ０）１０１−１とプロセッサコア（ＣＰＵ１）１０１−２で共に行う必要がある。プロセッサコア（ＣＰＵ０）１０１−１とプロセッサコア（ＣＰＵ１）１０１−２のうちの一方の設定が他方に反映される場合は、プロセッサコア（ＣＰＵ０）１０１−１とプロセッサコア（ＣＰＵ１）１０１−２のうちの一方にのみ、アクセス権の初期設定および検証状態に基づくアクセス権の設定を行うようにしてもよい。
【０１７３】
その後、セキュアプログラムは、プロセッサコア（ＣＰＵ１）１０１−２が実行するプログラムを検証したＦＷブロック（ブロックＡ）に設定する（ステップＳ１０１０）。これにより、プロセッサコア（ＣＰＵ１）１０１−２が、通常処理プログラムのＦＷブロック（ブロックＡ）の実行を開始し（ステップＳ１０１１）、起動処理が終了する。その他の処理フローは図９に示した処理フローと同様であるため、説明を省略する。
【０１７４】
図３５は、本実施形態に係る情報処理装置１００Ｃのデータアクセス時の処理フローを示すフローチャートである。ここでは、プロセッサコア（ＣＰＵ１）１０１−２で動作する通常処理プログラムのブロックＡからブロックＢに対してデータアクセスが発生した場合を想定して説明を行う。なお、以下では図１０に示した処理フローと共通の処理については説明を省略し、図１０に示した処理フローとは異なる部分のみを説明する。
【０１７５】
メモリアクセスに対してアクセス権違反のシグナルが生成されると（ステップＳ１１０４）、プロセッサコア（ＣＰＵ１）１０１−２では通常処理プログラムの実行が中断され、ＦＷ管理プログラムのシグナル解析部１６１がシグナルの発生原因を解析する（Ｓ１１０５）。そして、シグナルの発生原因がアクセス権違反である場合、プログラム切替部１６２はセキュアプログラムへの切り替えを行うため、コア通知部１６３にセキュリティ処理依頼を通知し、コア通知部１６３はセキュリティ処理依頼をセキュアプログラムに通知する（ステップＳ１１０６）。
【０１７６】
次に、セキュアプログラムは予約検証中か確認し（ステップＳ１１０７）、予約検証中の場合（ステップＳ１１０８：Ｙｅｓ）、現在実行中の予約検証を中止する（ステップＳ１１０９）。予約検証の中止後、または予約検証中でない場合（ステップＳ１１０８：Ｎｏ）、セキュアプログラムはアクセス権違反によるセキュリティ処理を行う（ステップＳ１１１０）。そして、セキュリティ処理終了後、セキュリティ処理管理部１７１はコア通知部１６３に対してセキュリティ処理の成功または失敗を通知する。セキュリティ処理管理部１７１から通知を受けたコア通知部１６３は、プログラム切替部１６２にセキュリティ処理管理部１７１からの通知を伝える。その他の処理フローは図１０に示した処理フローと同様であるため、説明を省略する。
【０１７７】
図３６は、本実施形態に係る情報処理装置１００Ｃの予約検証時の処理フローを示すフローチャートである。本実施形態では、予約検証はセキュリティ処理が実行されていない状態で発生するものとし、予約検証中にセキュリティ処理が発生した場合は予約検証を中止してセキュリティ処理を行うものとして説明する。
【０１７８】
予約検証の実行が開始されると、まず予約検証部１７７は、予約検証を行う領域を選定する（ステップＳ１２０１）。ここで、予約検証を行う領域がない場合（ステップＳ１２０２：Ｎｏ）、予約検証部１７７は予約検証成功として（ステップＳ１２０３）、処理を終了する。このとき、予約検証部１７７は次の予約検証を設定しないため、これ以降の予約検証は発生しない。
【０１７９】
一方、予約検証を行う領域がある場合（ステップＳ１２０２：Ｙｅｓ）、予約検証部１７７は予約検証をセキュリティ処理管理部１７１に依頼する（ステップＳ１２０４）。予約検証はセキュリティ処理と同様の処理であり、セキュリティ処理管理部１７１はセキュリティ処理依頼として予約検証依頼を受け取る。そして、セキュリティ処理管理部１７１は予約検証を実行し、予約検証に失敗した場合（ステップＳ１２０５：Ｎｏ）、予約検証部１７７は予約検証の失敗に伴う事後処理を行い（ステップＳ１２０６）、処理を終了する。一方、予約検証に成功した場合（ステップＳ１２０５：Ｙｅｓ）、予約検証部１７７は次の予約検証を行うため、予約検証を行う領域の選定（ステップＳ１２０１）に戻る。
【０１８０】
ここで、予約検証失敗に伴う事後処理では、セキュリティ処理における検証失敗処理と同様の操作を行ってもよく、また、フェールソフトを実現する操作を行ってもよい。フェールソフトを実現する操作とは、例えば、予約検証に失敗した領域を通常処理部１４０に通知することで、通常処理部１４０が予約検証に失敗した領域のデータへのアクセスを避けることを可能とする操作でもよい。この場合、情報処理装置１００Ｃの機能としては制限を受けるが、情報処理装置１００Ｃ自体は停止することなく、動作を継続することが可能となる。
【０１８１】
また、セキュリティ処理管理部１７１は、検証に失敗した領域に対してアクセス禁止や実行禁止の領域設定を追加してもよい。この場合、予約検証失敗に伴う事後処理において、アクセス権更新部１７３が所定のアクセス権を設定する。
【０１８２】
以上説明したように、本実施形態によれば、セキュリティ処理を専門に行うコアを設けることで通常処理とセキュリティ処理のデータ分離を実現し、予約検証により投機的に検証対象領域の検証を行うことで未検証領域の検証による通常処理の中断を緩和することができる。さらに、改ざんされている領域を使用前に検出できることから、情報処理装置１００Ｃの機能としては制限を受けるが、情報処理装置１００Ｃ自体は停止することなく動作を継続するフェールソフトを実現することができる。
【０１８３】
なお、本実施形態では、上述の第１実施形態と同様にセキュアプログラムから起動する例を用いて説明を行ったが、上述の第２実施形態のようにＩＰＬから起動する構成としてもよい。また、検証対象領域のアクセス権を更新する方法として、上述の第１実施形態の変形例と同様に補助領域を用いてもよく、また、上述の第２実施形態の変形例１、変形例２、変形例３のように、セキュリティ処理はロード、改ざん検証、暗号処理、その他の処理を組み合わせて用いる構成であってもよい。
【０１８４】
［第４実施形態］
上述の第１実施形態および第２実施形態では、検証対象領域に対するデータアクセスが発生しない限り検証対象領域は検証されないことから、情報処理装置１００Ａ，１００Ｂを長期間動作させたとしても検証対象領域の全てにアクセスが発生するとは限らないため、検証対象領域の全てが必ず検証されることを保証できなかった。また、上述の第３実施形態は、マルチコアによって予約検証部１７７によりデータアクセスが発生しなくても検証対象領域の検証が可能であるが、シングルコアは想定していなかった。本実施形態では、シングルコアであっても予約検証開始のシグナルを受けて予約検証を行うことで、検証対象領域の全てが必ず検証されることを保証できる構成とする。
【０１８５】
図３７は、本実施形態に係る情報処理装置１００Ｄの機能的な構成例を示すブロック図である。情報処理装置１００Ｄは、図２に示した第１実施形態に係る情報処理装置１００Ａの機能的な構成に対し、予約検証シグナル生成部３０１を持つ予約検証シグナル生成装置３００が追加されているとともに、セキュア処理部１７０内に予約検証部１７７が追加されている。
【０１８６】
予約検証シグナル生成部３０１は、セキュアプログラムで予約検証を開始するための予約検証シグナルを生成する。予約検証シグナルの生成は、所定の予約検証生成ルールに従う。本実施形態では、予約検証生成ルールを予約検証部１７７が設定するものとして説明を行うが、セキュリティ処理管理部１７１が設定してもよく、またその他の方法によって設定されてもよい。加えて、予約検証シグナル生成部３０１はソフトウェアで実現されてもよく、ハードウェアで実現されてもよい。さらに予約検証シグナル生成部３０１がソフトウェアで実現されている場合、ＦＷの一部として実現されてもよく、ＦＷとは独立した別のプログラムとして実現されていてもよい。
【０１８７】
予約検証部１７７は、上述の第３実施形態における予約検証部１７７と同様の機能を持つ。
【０１８８】
本実施形態におけるシグナル解析部１６１は、アクセス権管理装置１２０のシグナル生成部１２２が生成したシグナルに加えて、予約検証シグナル生成装置３００の予約検証シグナル生成部３０１が生成したシグナルを受け取り、その原因を解析する。シグナル解析の結果は、プログラム切替部１６２に通知される。
【０１８９】
図３８は、本実施形態に係る情報処理装置１００Ｄのハードウェア構成例を示すブロック図である。本実施形態に係る情報処理装置１００Ｄは、図５に示した第１実施形態に係る情報処理装置１００Ａのハードウェア構成と比較して、タイマ１０５が追加されている。プロセッサコア（ＣＰＵ０）１０１、ＲＯＭ１０２ａ、ＲＡＭ１０２ｂ、タイマ１０５は、外部バス１０４を介して、データ、信号、命令を互いに送受信可能とする。鍵管理ユニット（ＫＳＵ）１１０は、アクセスが許可されたデバイスとのみデータ、信号、命令を互いに送受信可能とする。本実施形態では、タイマ１０５を図３７に示した予約検証シグナル生成装置３００として用いるものとする。そのため、予約検証シグナルはタイマ割り込みによって発生する。
【０１９０】
次に、本実施形態に係る情報処理装置１００Ｄの処理フローを説明する。本実施形態では、上述の第１実施形態と比較して、起動時の処理フローとデータアクセス時の処理フローとシグナル発生時の処理フローが異なり、予約検証シグナル発生時の処理フローと予約検証時の処理フローが加わる。なお、予約検証時の処理フローは上述の第３実施形態（図３６）と同様であるため、説明を省略する。ここでは、セキュリティ処理情報１７４は図４、ＦＷのメモリマップは図６、ＦＷの領域設定は図８と同様とし、ＲＡＭ１０２ｂについても適切に領域設定が行われているものとして、第１実施形態との差分を説明する。
【０１９１】
図３９は、本実施形態に係る情報処理装置１００Ｄの起動時の処理フローを示すフローチャートである。なお、以下では図９に示した処理フローと共通の処理については説明を省略し、図９に示した処理フローとは異なる部分のみを説明する。
【０１９２】
ＲＯＭ１０２ａ上のＦＷ管理プログラム、異常処理プログラム、最初に実行するＦＷブロック（ブロックＡ）の改ざん検証に成功し（ステップＳ１３０７：Ｙｅｓ）、検証状態に基づくアクセス権の設定後（ステップＳ１３０９）、セキュアプログラムの予約検証部１７７は、予約検証シグナル生成部３０１に予約検証生成ルールを設定する（ステップＳ１３１０）。本実施形態の場合、予約検証シグナル生成装置３００はタイマ１０５であることから、所定の時間後に予約検証を開始するタイマ割り込みを発生させるようタイマ１０５を設定する。ここで、予約検証生成ルールの設定は、検証状態に基づくアクセス権情報の設定前でもよく、また遷移先を検証したＦＷブロック（ブロックＡ）に設定した後でもよい。その他の処理フローは図９に示した処理フローと同様であるため、説明を省略する。
【０１９３】
図４０は、本実施形態に係る情報処理装置１００Ｄのデータアクセス時の処理フローを示すフローチャートである。なお、以下では図１０に示した処理フローと共通の処理については説明を省略し、図１０に示した処理フローとは異なる部分のみを説明する。
【０１９４】
シグナルの発生原因がアクセス権違反である場合、プログラム切替部１６２は、プロセッサコア（ＣＰＵ０）１０１が実行するプログラムをセキュアプログラムに切り替える（ステップＳ１４０６）。そして、セキュアプログラムのセキュリティ処理管理部１７１は、セキュアプログラムが予約検証中か確認する（ステップＳ１４０７）。ここで、セキュアプログラムが予約検証中であった場合（ステップＳ１４０８：Ｙｅｓ）、セキュリティ処理管理部１７１は実行中の予約検証を中止し（ステップＳ１４０９）、予約検証部１７７に対して実行中の予約検証の中止を通知する。
【０１９５】
予約検証部１７７は、予約検証の中止の通知を受けると、予約検証シグナル生成部３０１に対して予約検証生成ルールを再設定する（ステップＳ１４１０）。そして、予約検証生成ルールの再設定後、またはセキュアプログラムが予約検証中でなかった場合（ステップＳ１４０８：Ｎｏ）、セキュアプログラムはセキュリティ処理を実行する（ステップＳ１４１１）。その他の処理フローは図１０に示した処理フローと同様であるため、説明を省略する。
【０１９６】
図４１は、本実施形態に係る情報処理装置１００Ｄの予約検証シグナル発生時の処理フローを示すフローチャートである。まず、予約検証シグナル生成部３０１は、所定の方法に従って予約検証シグナルを生成する（ステップＳ１５０１）。所定の方法とは、例えば予約検証シグナル生成装置３００がタイマ１０５であった場合、タイムアウトによるタイマ割り込みであり、その他の方法を用いてもよい。
【０１９７】
予約検証シグナルが生成されると、プロセッサコア（ＣＰＵ０）１０１では、通常処理プログラムの実行が中断され、ＦＷ管理プログラムのシグナル解析部１６１がシグナルの発生原因を解析する（ステップＳ１５０２）。そして、シグナルの発生原因が予約検証である場合、プログラム切替部１６２は、プロセッサコア（ＣＰＵ０）１０１が実行するプログラムをセキュアプログラムに切り替えて、予約検証開始をセキュアプログラムへ通知する（ステップＳ１５０３）。
【０１９８】
セキュアプログラムのセキュリティ処理管理部１７１は、セキュアプログラムがアクセス権違反によるセキュリティ処理中か確認する（ステップＳ１５０４）。そして、セキュアプログラムがアクセス権違反によるセキュリティ処理中であった場合（ステップＳ１５０５：Ｙｅｓ）、セキュリティ処理管理部１７１は予約検証を中止して（ステップＳ１５０６）、予約検証部１７７に対して予約検証の中止を通知する。そして、予約検証部１７７は、予約検証シグナル生成部３０１に対して予約検証生成ルールを再設定する（ステップＳ１５０７）。
【０１９９】
一方、セキュアプログラムがアクセス権違反によるセキュリティ処理中でなかった場合（ステップＳ１５０５：Ｎｏ）、セキュアプログラムは予約検証を実行する（ステップＳ１５０８）。そして、セキュアプログラムによる予約検証が成功しなかった場合（ステップＳ１５０９：Ｎｏ）、プログラム切替部１６２はプロセッサコア（ＣＰＵ０）１０１で実行するプログラムを異常処理プログラムに切り替え（ステップＳ１５１０）、異常処理プログラムを実行する。一方、セキュアプログラムによる予約検証が成功した場合（ステップＳ１５０９：Ｙｅｓ）、プログラム切替部１６２はプロセッサコア（ＣＰＵ０）１０１で実行するプログラムを中断していた通常処理プログラムに切り替え、処理を終了する。
【０２００】
なお、予約検証が成功しなかった場合に実行される異常処理プログラムは、第１実施形態、第２実施形態、第３実施形態に示すものと同様とし、第３実施形態に例示したようにフェールソフトを実現するようなプログラムであってもよい。フェールソフトを実現するプログラムを用いる場合、セキュアプログラムは通常処理プログラムに対して予約検証に失敗した領域を通知し、プログラム切替部１６２はプロセッサコア（ＣＰＵ０）１０１で実行するプログラムを中断していた通常処理プログラムに切り替える。
【０２０１】
図４２は、本実施形態に係る情報処理装置１００Ｄのシグナル発生時の処理フローを示すフローチャートである。図４０および図４１では、シグナルの発生原因は予約検証であるものとして説明したが、シグナル解析部１６１は情報処理装置１００Ｄで発生するその他のシグナルの解析機能を持つ。
【０２０２】
まず、シグナルが検出されると（ステップＳ１６０１）、プロセッサコア（ＣＰＵ０）１０１では通常処理プログラムの実行が中断され、ＦＷ管理プログラムのシグナル解析部１６１がシグナルの発生原因を解析する（ステップＳ１６０２）。ここで、シグナルの発生原因がアクセス権違反である場合（ステップＳ１６０３：Ｙｅｓ）、プログラム切替部１６２はプロセッサコア（ＣＰＵ０）１０１で実行するプログラムをセキュアプログラムに切り替え、セキュアプログラムでセキュリティ処理を行う（ステップＳ１６０４）。
【０２０３】
一方、シグナルの発生原因がアクセス権違反でない場合（ステップＳ１６０３：Ｎｏ）、さらにシグナルの発生原因が予約検証か確認し、シグナルの発生原因が予約検証である場合（ステップＳ１６０５：Ｙｅｓ）、プログラム切替部１６２が予約検証開始をセキュアプログラムへ通知し（ステップＳ１６０６）、セキュアプログラムで予約検証を行う。一方、シグナルの発生原因が予約検証でない場合（ステップＳ１６０５：Ｎｏ）、シグナル解析部１６１はシグナルに基づく所定の処理を行う（ステップＳ１６０７）。
【０２０４】
以上説明したように、本実施形態によれば、任意のタイミングでアクセスの発生していない領域に対する検証を発生させることで、シングルコアにおいても全ての検証対象領域に対する検証を保証することができる。さらに、上述の第３実施形態と同様に、改ざんされている領域を使用前に検出できることから、情報処理装置１００Ｄの機能としては制限を受けるが、情報処理装置１００Ｄ自体は停止することなく動作を継続するフェールソフトを実現することができる。
【０２０５】
なお、本実施形態では、上述の第１実施形態と同様にセキュアプログラムから起動する例を用いて説明を行ったが、上述の第２実施形態のようにＩＰＬから起動する構成としてもよい。また、検証対象領域のアクセス権を更新する方法として、上述の第１実施形態の変形例と同様に補助領域を用いてもよく、また、上述の第２実施形態の変形例１、変形例２、変形例３のように、セキュリティ処理はロード、改ざん検証、暗号処理、その他の処理を組み合わせて用いる構成であってもよい。
【０２０６】
［第５実施形態］
上述の各実施形態では、情報処理装置に設定可能な領域の上限を考慮していなかった。そのため、ＦＷの分割数は、設定可能な領域数に制限を受けてしまう。本実施形態では、領域追加時にアクセス権が設定可能な空き領域が存在しなかった場合に、領域の再設定を行うことで空き領域を確保する構成とする。
【０２０７】
図４３は、本実施形態に係る情報処理装置１００Ｅの機能的な構成例を示すブロック図である。情報処理装置１００Ｅは、図２に示した第１実施形態に係る情報処理装置１００Ａの機能的な構成に対し、領域再設定部１７８が追加されている。領域再設定部１７８は、領域設定の見直しと再設定を行う機能モジュールである。
【０２０８】
本実施形態におけるセキュリティ処理管理部１７１は、アクセス権違反が発生したメモリ空間に対するセキュリティ処理の管理とセキュリティ処理情報１７４の管理に加えて、領域再設定部１７８に空き領域の確保を依頼する。本実施形態では、アクセス権が設定可能な空き領域が存在しなかった場合に空き領域の確保依頼を行う例を用いて説明するが、いつ依頼を行ってもよく、例えば、空き領域が指定された個数以下になった場合に行ってもよい。また、上述の第３実施形態や第４実施形態のように予約検証を行う構成であれば、予約検証時に空き領域の確保依頼を行ってもよい。
【０２０９】
領域再設定部１７８は、領域設定の見直しと再設定を行い、アクセス権が設定可能な領域を確保する。領域再設定部１７８は、セキュリティ処理管理部１７１から空き領域の確保依頼を受けると、セキュリティ処理情報１７４を取得して、所定の方法により領域の再設定を行い、アクセス権管理部１２１に新しい領域設定を通知する。
【０２１０】
ここで、図４４を参照してアクセス権が設定可能な領域を確保するための領域の再設定方法について例示する。図４４は、領域の再設定方法を説明する図であり、（ａ）は領域設定の例、（ｂ）は見直し前の領域設定に対応するセキュリティ処理情報の例を示している。ここでは、通常処理プログラムはブロックＡ，Ｂ，Ｃ，Ｄの４つのＦＷブロックに分割されており、ブロックＡ，Ｂ，Ｄはすでに検証されているものとする。ブロックＡ，Ｂ，Ｄの領域は動的に割り当てられ（領域３、領域４、領域５）、未検証のブロックＣには領域が割り当てられていない。
【０２１１】
アクセス権が設定可能な領域を確保するには、現在設定されている領域をまとめる方法と、現在設定されている領域を全て無効にする方法とが考えられる。
【０２１２】
現在設定されている領域をまとめる方法としては、付与するアクセス権が同じ連続する検証済み領域を１つの領域にまとめる方法と、未検証領域を強制的に検証することで付与するアクセス権が同じ連続する領域を作り出す方法がある。付与するアクセス権が同じ連続する検証済み領域を１つの領域にまとめる方法とは、図４４（ａ）の見直し後の領域設定１に示すように、領域３と領域４をまとめて領域３とすることである。一方、未検証領域を強制的に検証することで付与するアクセス権が同じ連続する領域を作り出す方法とは、図４４（ａ）の見直し後の領域設定２に示すように、未検証であるブロックＣを検証することで、付与するアクセス権が同じ連続する領域ブロックＡ，Ｂ，Ｃ，Ｄを作り出し、これらのメモリ空間を領域３とすることである。見直し後の領域設定１では領域４がアクセス権の設定が可能な領域となり、見直し後の設定２では領域４と領域５がアクセス権の設定が可能な領域となる。
【０２１３】
現在設定されている領域を全て無効にする方法としては、任意のタイミングでセキュリティ処理情報１７４の検証状態をリセットし、領域の再割り当てを行う方法がある。図４４の例では、検証状態のリセットが発生すると、図４４（ｂ）に示すセキュリティ処理情報１７４のブロックＡ，Ｂ，Ｄの検証状態が未に更新される。ここで、例えばブロックＢに対するアクセスが発生するとブロックＢは再検証され、図４４（ａ）の見直し後の領域設定３のように、ブロックＢに対して領域３が割り当てられる。このとき、見直し後の領域設定３では領域４と領域５がアクセス権の設定が可能な領域となる。
【０２１４】
ここで、現在設定されている領域をまとめる方法は、一度検証したブロックに対する再検証が発生しないので、領域の再設定による性能ペナルティは低い。しかし、付与するアクセス権が同じ連続する領域が必ず存在するとは限らないため、アクセス権が設定可能な領域が確保できない可能性がある。一方、現在設定されている領域を全て無効にする方法は、一度検証したブロックに対する再検証が発生するため、領域の再設定による性能ペナルティが大きい。しかし、アクセス権が設定可能な領域が必ず確保できる。現在設定されている領域を全て無効にする方法の性能ペナルティ削減方法としては、検証状態はリセットせず領域番号のみをリセットし、検証済みだが再検証が発生したブロックに対しては検証を省略して領域を割り当てる方法がある。
【０２１５】
また、領域の再設定方法は複数の方法を用いてもよく、例えば、現在設定されている領域をまとめる方法を行い、アクセス権が設定可能な領域が確保できなかった場合に、現在設定されている領域を全て無効にする方法を用いてもよい。この他にも、例えば、アクセス頻度の低い領域を無効化する方法や、予め領域に優先度を設定しておき、優先度の低い領域を優先的に無効化する方法などがあり、領域の再設定方法は例示する方法と異なるどのような方法を用いてもよい。
【０２１６】
次に、本実施形態に係る情報処理装置１００Ｅの処理フローを説明する。本実施形態では、上述の第１実施形態と比較して、セキュリティ処理の処理フローが異なり、領域の再設定の処理フローが追加される。ここでは、セキュリティ処理情報１７４は図４、ＦＷのメモリマップは図６、ＦＷの領域設定は図８と同様とし、ＲＡＭ１０２ｂについても適切に領域設定が行われているものとして、第１実施形態との差分を説明する。また、アクセス権を設定する領域は動的に決定されるものとして説明を行う。
【０２１７】
図４５は、本実施形態におけるセキュリティ処理の処理フローを示すフローチャートである。なお、以下では図１２に示した処理フローと共通の処理については説明を省略し、図１２に示した処理フローとは異なる部分のみを説明する。
【０２１８】
改ざん検証部１７２が改ざん検証に成功した場合（ステップＳ１７０５：Ｙｅｓ）、セキュリティ処理管理部１７１は、アクセス権が設定可能な領域の有無を確認する（ステップＳ１７０６）。ここで、アクセス権が設定可能な領域がない場合（ステップＳ１７０７：Ｎｏ）、セキュリティ処理管理部１７１は領域再設定部１７８に対して、空き領域を確保するための領域の再設定を依頼する。領域再設定部１７８は、セキュリティ処理管理部１７１からの依頼を受けて、所定のアルゴリズムに基づく領域の再設定を行う（ステップＳ１７０８）。
【０２１９】
ここで、領域再設定部１７８による領域の再設定に失敗した場合（ステップＳ１７０９：Ｎｏ）、セキュリティ処理は失敗として（ステップＳ１７０３）、処理を終了する。一方、領域の再設定に成功（ステップＳ１７０９：Ｙｅｓ）またはアクセス権が設定可能な領域がある場合（ステップＳ１７０７：Ｙｅｓ）、セキュリティ処理管理部１７１は、検証対象領域に対するアクセス権の更新を行う（ステップＳ１７１０）。その他の処理フローは図１２に示した処理フローと同様であるため、説明を省略する。なお、本実施形態で追加された空き領域の確保に関する一連の処理は、改ざん検証部１７２による未検証領域に対する改ざん検証の前に行ってもよい。
【０２２０】
図４６は、本実施形態における領域の再設定の処理フローを示すフローチャートである。領域再設定部１７８は、セキュリティ処理管理部１７１から領域の再設定の依頼を受けて、領域の再設定を開始する。
【０２２１】
領域再設定部１７８は、まず、所定の再設定方法に従って領域の再設定を実行し（ステップＳ１８０１）、アクセス権が設定可能な領域の有無を確認する（ステップＳ１８０２）。そして、アクセス権が設定可能な領域がない場合（ステップＳ１８０２：Ｎｏ）、再設定は失敗として（ステップＳ１８０４）、処理を終了する。
【０２２２】
一方、アクセス権が設定可能な領域がある場合（ステップＳ１８０２：Ｙｅｓ）、領域再設定部１７８は、再設定結果に基づきアクセス権管理部１２１に対して各領域のアクセス権の設定を依頼する。アクセス権管理部１２１は、依頼されたアクセス権を設定する（ステップＳ１８０５）。そして、領域再設定部１７８は、セキュリティ処理情報１７４に再設定結果を反映させ（ステップＳ１８０６）、再設定は成功として（ステップＳ１８０７）、処理を終了する。
【０２２３】
以上説明したように、本実施形態によれば、アクセス権が設定可能な空き領域が存在しない場合でも、領域の再設定を行うことで空き領域を確保することができる。さらに、情報処理装置１００Ｅに設定可能な領域数以上にＦＷを分割した場合でも、動的に領域設定が変更可能であるため、柔軟な分割検証を実現することができる。
【０２２４】
なお、本実施形態では、上述の第１実施形態と同様にセキュアプログラムから起動する例を用いて説明を行ったが、上述の第２実施形態のようにＩＰＬから起動する構成としてもよい。また、検証対象領域のアクセス権を更新する方法として、上述の第１実施形態の変形例と同様に補助領域を用いてもよく、また、上述の第２実施形態の変形例１、変形例２、変形例３のように、セキュリティ処理はロード、改ざん検証、暗号処理、その他の処理を組み合わせて用いる構成であってもよい。
【０２２５】
さらに、本実施形態を上述の第３実施形態や第４実施形態の予約検証と組み合わせ、アクセス権が設定可能な空き領域がなくなる前に領域の再設定を行うことで、アクセス権違反による検証発生時の性能ペナルティを削減することができる。
【０２２６】
以上述べた少なくとも一つの実施形態によれば、ローエンド情報機器であっても適切な分割検証を実現できる。
【０２２７】
以上、本発明の実施形態を説明したが、ここで説明した実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。ここで説明した新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。ここで説明した実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２２８】
１００Ａ，１００Ｂ，１００Ｃ，１００Ｄ，１００Ｅ  情報処理装置
１０１（１０１−１，１０１−２）  プロセッサコア
１０２  メモリ
１０２ａ  ＲＯＭ
１０２ｂ  ＲＡＭ
１０２ｃ  ＭａｓｋＲＯＭ
１０３  インターフェース
１１０  鍵管理ユニット
１２０  アクセス権管理装置
１２２  シグナル生成部
１７０  セキュア処理部
１７１  セキュリティ処理管理部
１７２  改ざん検証部
１７３  アクセス権更新部
１７４  セキュリティ処理情報
１７５  ロード部
１７６  暗号処理部
１７７  予約検証部
１７８  領域再設定部
１８０  初期実行部
２００  ホスト
【図１】
2018081577.tif 000003
【図２】
2018081577.tif 000004
【図３】
2018081577.tif 000005
【図４】
2018081577.tif 000006
【図５】
2018081577.tif 000007
【図６】
2018081577.tif 000008
【図７】
2018081577.tif 000009
【図８】
2018081577.tif 000010
【図９】
2018081577.tif 000011
【図１０】
2018081577.tif 000012
【図１１】
2018081577.tif 000013
【図１２】
2018081577.tif 000014
【図１３】
2018081577.tif 000015
【図１４】
2018081577.tif 000016
【図１５】
2018081577.tif 000017
【図１６】
2018081577.tif 000018
【図１７】
2018081577.tif 000019
【図１８】
2018081577.tif 000020
【図１９】
2018081577.tif 000021
【図２０】
2018081577.tif 000022
【図２１】
2018081577.tif 000023
【図２２】
2018081577.tif 000024
【図２３】
2018081577.tif 000025
【図２４】
2018081577.tif 000026
【図２５】
2018081577.tif 000027
【図２６】
2018081577.tif 000028
【図２７】
2018081577.tif 000029
【図２８】
2018081577.tif 000030
【図２９】
2018081577.tif 000031
【図３０】
2018081577.tif 000032
【図３１】
2018081577.tif 000033
【図３２】
2018081577.tif 000034
【図３３】
2018081577.tif 000035
【図３４】
2018081577.tif 000036
【図３５】
2018081577.tif 000037
【図３６】
2018081577.tif 000038
【図３７】
2018081577.tif 000039
【図３８】
2018081577.tif 000040
【図３９】
2018081577.tif 000041
【図４０】
2018081577.tif 000042
【図４１】
2018081577.tif 000043
【図４２】
2018081577.tif 000044
【図４３】
2018081577.tif 000045
【図４４】
2018081577.tif 000046
【図４５】
2018081577.tif 000047
【図４６】
2018081577.tif 000048