(57)【要約】      （修正有）【課題】データの完全性を検証し、データの改ざんを防止する。【解決手段】テーブルツリーと検証子ツリーとを記憶する第１の記憶部に読み込み及び書き込みを行う。テーブルツリーは、親テーブル及び子テーブルを含む。検証子ツリーは、親検証子及び子検証子を含む。親検証子は、子テーブル及び子検証子に対する検証に用いられる。メモリ管理装置は、安全な第２の記憶部に、セキュアテーブルツリーと検証子ツリーの一部であるセキュア検証子ツリーを記憶する。メモリ管理装置は、第１の記憶部の子テーブル及び子検証子に基づいて計算される第１の検証情報と、セキュア検証子ツリーの親検証子とに基づいて、検証を行う。メモリ管理装置は、参照対象のデータがリードオンリー属性を持つ場合に、第２の検証情報を計算し、データに対応する検証子と第２の検証情報とに基づいて検証を行い、検証成功の場合に、データを第３の記憶部に記憶する。【選択図】図１
2016009882.tif 000002
【特許請求の範囲】
【請求項１】
親テーブル及び子テーブルを含むテーブルツリーと、前記親テーブルに関連付けられる親検証子及び前記子テーブルに関連付けられる子検証子を含む検証子ツリーであって、前記親検証子は前記子テーブル及び前記子検証子に対する検証に用いられる前記検証子ツリーと、を記憶する第１の記憶部に対して読み込み及び書き込みを行う外部入出力部と、
安全な第２の記憶部に記憶されている前記テーブルツリーの一部であるセキュアテーブルツリー及び前記検証子ツリーのうちの一部であるセキュア検証子ツリーに基づいて、第１のアドレスを第２のアドレスに変換するアドレス変換部と、
前記テーブルツリーに含まれており前記第１のアドレスを前記第２のアドレスに変換するために必要な第１の子テーブルが、前記セキュアテーブルツリーに含まれていない場合に、前記テーブルツリーにおける前記第１の子テーブルと前記検証子ツリーに含まれており前記第１の子テーブルに関連付けられている第１の子検証子とに基づいて第１の検証情報を計算する第１の検証計算部と、
前記第１の検証情報と、前記セキュア検証子ツリーに含まれており前記第１の子テーブルを参照する第１の親テーブルに関連付けられている第１の親検証子とに基づいて、検証を行う第１の検証部と、
前記検証の結果が正当の場合、前記第１の子テーブル及び前記第１の子検証子を前記セキュアテーブルツリー及び前記セキュア検証子ツリーに組み込む更新部と、
参照対象のデータがリードオンリー属性を持つ第１のデータか、前記データがリードライト属性を持つ第２のデータか、を判定する判定部と、
前記データが前記第１のデータと判定された場合に、前記第１の記憶部から読み込まれた前記第１のデータと、前記第１のデータの更新に応じて変化する安全な値とに基づいて、第２の検証情報を計算する第２の検証計算部と、
前記第１及び前記第２の記憶部の少なくとも一方に記憶されており前記第１のデータに対応する検証子と、前記第２の検証情報とに基づいて、検証を行い、検証成功の場合に、前記第１のデータを第３の記憶部に記憶する第２の検証部と、
を具備するメモリ管理装置。
【請求項２】
前記第２の検証計算部は、前記アドレス変換部によって前記第１のデータに対する前記検証子が無効状態であると判断された場合、前記第１のデータと前記安全な値とに基づいて、前記第１のデータに対する前記検証子を計算し、前記第１のデータに対する前記検証子を、前記外部入出力部を経由して、前記第１の記憶部及び前記第２の記憶部のうちの少なくとも一方に記憶し、
前記更新部は、前記セキュアテーブルツリーにおいて前記第１のデータを参照するテーブルに含まれるエントリを前記リードオンリー属性に変更する、
請求項１のメモリ管理装置。
【請求項３】
前記判定部は、前記データが前記第１のデータと判定された場合に検証必要を示し、前記データが前記第２のデータと判定された場合に検証不要を示す検証要否情報と、前記安全な値とを含む比較検証情報を安全な第４の記憶部に記憶し、
前記第２の検証計算部は、前記第１のデータと前記比較検証情報とに基づいて、前記第２の検証情報を計算する、
請求項１又は請求項２のメモリ管理装置。
【請求項４】
前記検証子は、前記第１のデータを参照するテーブルに関連付けられる、請求項１乃至請求項３のいずれか１項に記載のメモリ管理装置。
【請求項５】
前記検証子を示すアドレスは、前記第１のデータを参照するテーブルに関連付けられる、請求項１乃至請求項３のいずれか１項に記載のメモリ管理装置。
【請求項６】
第１の記憶部及び安全な第２の記憶部に対する書き込み及び読み出しを行うプロセッサを、
親テーブル及び子テーブルを含むテーブルツリーと、前記親テーブルに関連付けられる親検証子及び前記子テーブルに関連付けられる子検証子を含む検証子ツリーであって、前記親検証子は前記子テーブル及び前記子検証子に対する検証に用いられる前記検証子ツリーと、を記憶する第１の記憶部に対して読み込み及び書き込みを行う外部入出力部、
前記第２の記憶部に記憶されている前記テーブルツリーの一部であるセキュアテーブルツリー及び前記検証子ツリーのうちの一部であるセキュア検証子ツリーに基づいて、第１のアドレスを第２のアドレスに変換するアドレス変換部、
前記テーブルツリーに含まれており前記第１のアドレスを前記第２のアドレスに変換するために必要な第１の子テーブルが、前記セキュアテーブルツリーに含まれていない場合に、前記テーブルツリーにおける前記第１の子テーブルと前記検証子ツリーに含まれており前記第１の子テーブルに関連付けられている第１の子検証子とに基づいて第１の検証情報を計算する第１の検証計算部、
前記第１の検証情報と、前記セキュア検証子ツリーに含まれており前記第１の子テーブルを参照する第１の親テーブルに関連付けられている第１の親検証子とに基づいて、検証を行う第１の検証部、
前記検証の結果が正当の場合、前記第１の子テーブル及び前記第１の子検証子を前記セキュアテーブルツリー及び前記セキュア検証子ツリーに組み込む更新部、
参照対象のデータがリードオンリー属性を持つ第１のデータか、前記データがリードライト属性を持つ第２のデータか、を判定する判定部、
前記データが前記第１のデータと判定された場合に、前記第１の記憶部から読み込まれた前記第１のデータと、前記第１のデータの更新に応じて変化する安全な値とに基づいて、第２の検証情報を計算する第２の検証計算部、
前記第１及び前記第２の記憶部の少なくとも一方に記憶されており前記第１のデータに対応する検証子と、前記第２の検証情報とに基づいて、検証を行い、検証成功の場合に、前記第１のデータを第３の記憶部に記憶する第２の検証部、
として機能させるためのメモリ管理プログラム。
【請求項７】
不正なアクセスから防御される安全な記憶部に記憶されているアドレス変換用のセキュアテーブルツリーに、第１のアドレスを第２のアドレスに変換するために必要なテーブルが含まれていないことを検出し、
前記セキュアテーブルツリーに前記テーブルが含まれていない場合に、他の記憶部に記憶されているテーブルツリーの前記テーブルと、前記他の記憶部に記憶されており前記テーブルツリーと同一のグラフ構造を持つ検証子ツリーの第１の検証子であって前記テーブルと関連付けられている前記第１の検証子と、を読み出し、
前記テーブル及び前記第１の検証子に基づいて第１の検証情報を計算し、
前記安全な記憶部に記憶されており前記セキュアテーブルツリーと同一のグラフ構造を持つセキュア検証子ツリーに含まれており前記テーブル及び前記第１の検証子に対する検証に用いられる第２の検証子と、前記第１の検証情報とに基づいて、検証を行い、
前記検証の結果が正当の場合、前記テーブル及び前記第１の検証子を前記セキュアテーブルツリー及び前記セキュア検証子ツリーに組み込み、
前記セキュアテーブルツリーに基づいて、前記第１のアドレスを前記第２のアドレスに変換し、
参照対象のデータがリードオンリー属性を持つ第１のデータか、前記データがリードライト属性を持つ第２のデータか、を判定し、
前記データが前記第１のデータと判定された場合に、前記第１の記憶部から読み込まれた前記第１のデータと、前記第１のデータの更新に応じて変化する安全な値とに基づいて、第２の検証情報を計算し、
前記第１及び前記第２の記憶部の少なくとも一方に記憶されており前記第１のデータに対応する第３の検証子と、前記第２の検証情報とに基づいて、検証を行い、検証成功の場合に、前記第１のデータを第３の記憶部に記憶する、
メモリ管理方法。
【請求項８】
データと、第１のアドレスから前記データまでの参照関係を示すテーブルツリーと、データ単位及び前記テーブルツリーのテーブル単位に対する検証子を含み前記テーブルツリーと同一のグラフ構造を持つ検証子ツリーと、を記憶する不揮発性の第１の記憶部と、
前記第１の記憶部から、前記データに対するアドレス変換に必要な第１のテーブル及び前記第１のテーブルに関連する第１の検証子、を読み出す読み出し部と、
前記第１の記憶部から読み出された前記第１のテーブル及び前記第１の検証子に対して検証を行う検証部と、
前記検証の結果が正当を示す場合に、前記第１のテーブル及び前記第１の検証子を記憶する揮発性の第２の記憶部と、
前記データの参照要求を受けた場合に、前記第２の記憶部に記憶されている検証済みテーブルツリーに基づいて、前記第１のアドレスを、前記データを示す第２のアドレスに変換するアドレス変換部と、
前記検証子を記憶せず前記データを記憶する第３の記憶部と
を具備し、
前記検証部は、
前記データがリードライト属性を持つ場合に、前記第２の記憶部に記憶されている前記検証済み検証子ツリーの第１の検証情報に基づく検証を行い、前記検証済み検証子ツリーに基づく検証の結果が正当を示す場合に、前記第２の記憶部に前記データを記憶し、
前記データがリードオンリー属性を持つ場合に、前記第２の記憶部に記憶されている前記検証済み検証子ツリーに基づく検証を行うことなく、前記データと、前記データの更新に応じて変化する安全な値とに基づいて予め計算され前記第１の記憶部に記憶された第２の検証情報と、前記第２の記憶部に記憶された前記安全な値とに基づいて検証を行い、検証成功の場合に、前記第３の記憶部に前記データを記憶する、
メモリ管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリ管理装置、プログラム、及び方法に関する。
【背景技術】
【０００２】
不揮発性メモリは、情報処理装置の起動の高速化、及び、いわゆるノーマリーオフによる低消費電力化に寄与する。しかしながら、情報セキュリティの観点において、不揮発性メモリは、揮発性メモリとは異なるメモリ攻撃を受ける可能性がある。
【０００３】
例えば、揮発性メモリでは、稼動中の情報処理装置の電源が切られた場合に、揮発性メモリのデータは消える。このため、電源が切られた後に、物理的に情報処理装置内の揮発性メモリがアクセスされても、電源切断前の揮発性メモリのデータを窃視・改ざんすることは不可能である。
【０００４】
しかしながら、不揮発性メモリは、停止中であってもデータを記憶している。このため、停止中に情報処理装置から不揮発性メモリを取り出し、外部装置で不揮発性メモリのデータを窃視・改ざんし、その後不揮発性メモリを元の情報処理装置に搭載し、情報処理装置を再稼動することで、情報処理装置の動作を不正に変更することができる。このようなメモリ攻撃は、特に、野外で使用される情報処理装置、又は、不正なユーザがアクセス可能な場所に設置されている情報処理装置にとって大きな脅威となる。
【０００５】
データ改ざんの対策として、例えばハッシュ又はメッセージ認証コード（ＭＡＣ：Massage Authentication Code）などのような、様々な検証技術が存在する。一般的に、検証対象データに対するハッシュ値及びＭＡＣ値を、検証子と呼ぶ。データ改ざん検証では、検証対象データに基づいて第１のタイミングで計算された第１の検証子と、検証対象データに基づいて第２のタイミングで計算された第２の検証子とが整合するか否かで、検証対象データの改ざんが判断される。検証対象データに対する検証子が計算され、この検証子に基づいて検証が実行される場合、検証対象データ自体は改ざんされる可能性のある場所に記憶されてもよい。しかしながら、検証子及び秘密鍵は、改ざん及び参照不可能な状態で安全な場所に記憶される必要がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１２−６８９５９号公報
【特許文献２】特許第５２６００８１号公報
【特許文献３】特許第４０７４６２０号公報
【特許文献４】米国特許第４３０９５６９号明細書
【非特許文献】
【０００７】
【非特許文献１】“The AEGIS Processor Architecture for Tamper-Evident and Tamper-Resistant Processing“, G. Edward Suh, Blaise Gassend, Dwaine Clarke, Marten van Dijk, and Srinivas Devadas, Proceedings of the 17th International Conference on Supercomputing (ICS'03), pages 160-171, San Francisco, CA, June 2003
【非特許文献２】Overshadow: “A Virtualization-Based Approach to Retrofitting Protection in Commodity Operating Systems“, Xiaoxin Chen, Tal Garfinkel, E. Christopher Lewis, Pratap Subrahmanyam, Carl A. Waldspurger, Dan Boneh, Jeffrey Dwoskin, and Dan R.K. Ports, In Architectural Support for Programming Languages and Operating Systems (ASPLOS 2008)
【非特許文献３】“Accelerating Two-Dimensional PageWalks for Virtualized Systems”, Bhargava R. et. al, In Architectural Support for Programming Languages and Operating Systems (ASPLOS 2008)
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本実施形態は、データの完全性を検証し、データの改ざんを防止する。
【課題を解決するための手段】
【０００９】
実施形態によれば、メモリ管理装置は、外部入出力部、アドレス変換部、第１の検証計算部、第１の検証部、更新部、判定部、第２の検証計算部、第２の検証部、を備える。外部入出力部は、親テーブル及び子テーブルを含むテーブルツリーと、親テーブルに関連付けられる親検証子及び子テーブルに関連付けられる子検証子を含む検証子ツリーとに対して読み込み及び書き込みを行う。親検証子は、子テーブル及び子検証子に対する検証に用いられる。テーブルツリーと検証子ツリーとは、第１の記憶部に記憶されている。アドレス変換部は、安全な第２の記憶部に記憶されているテーブルツリーの一部であるセキュアテーブルツリー及び検証子ツリーのうちの一部であるセキュア検証子ツリーに基づいて、第１のアドレスを第２のアドレスに変換する。第１の検証計算部は、テーブルツリーに含まれており第１のアドレスを第２のアドレスに変換するために必要な第１の子テーブルが、セキュアテーブルツリーに含まれていない場合に、テーブルツリーにおける第１の子テーブルと検証子ツリーに含まれており第１の子テーブルに関連付けられている第１の子検証子とに基づいて第１の検証情報を計算する。第１の検証部は、第１の検証情報と、セキュア検証子ツリーに含まれており第１の子テーブルを参照する第１の親テーブルに関連付けられている第１の親検証子とに基づいて、検証を行う。更新部は、検証の結果が正当の場合、第１の子テーブル及び第１の子検証子をセキュアテーブルツリー及びセキュア検証子ツリーに組み込む。判定部は、参照対象のデータがリードオンリー属性を持つ第１のデータか、データがリードライト属性を持つ第２のデータか、を判定する。第２の検証計算部は、データが第１のデータと判定された場合に、第１の記憶部から読み込まれた第１のデータと、第１のデータの更新に応じて変化する安全な値とに基づいて、第２の検証情報を計算する。第２の検証部は、第１及び第２の記憶部の少なくとも一方に記憶されており第１のデータに対応する検証子と、第２の検証情報とに基づいて、検証を行い、検証成功の場合に、第１のデータを第３の記憶部に記憶する。
【図面の簡単な説明】
【００１０】
【図１】第１の実施形態に係るメモリ管理装置の構成を例示するブロック図。
【図２】第２の実施形態に係る情報処理装置を例示するハードウェア構成図。
【図３】２ステージのアドレス変換を実行する構成を例示するブロック図。
【図４】アドレス変換とデータ参照とを実行するハードウェア構成及びセキュアページテーブルツリーのデータ構造を例示するブロック図。
【図５】第２の実施形態に係るブロックの定義を例示する概念図。
【図６】第２の実施形態に係る情報処理装置によるデータ取得及びアドレス変換の概念を例示するブロック図。
【図７】第２の実施形態に係るメモリマップを例示する図。
【図８】第２の実施形態に係るセキュアページテーブルツリー及びセキュア検証子ツリーのＭＡＣツリー構造を例示するデータ構造図。
【図９】第２の実施形態に係るセキュアページテーブルツリー及びセキュア検証子ツリーのＭＡＣ＋カウンタ構造を例示するデータ構造図。
【図１０】セキュアページテーブルツリーとページテーブルツリーとの関係の一例を示すデータ構造図。
【図１１】第２の実施形態に係るデータ参照処理を例示するフローチャート。
【図１２】第２の実施形態に係るアドレス解決処理を例示するフローチャート。
【図１３】第２の実施形態に係るデータ取得処理を例示するフローチャート。
【図１４】第２の実施形態に係る情報処理装置の構成を例示するブロック図。
【図１５】第２の実施形態に係るツリー検証処理を例示するフローチャート。
【図１６】第２の実施形態に係る置き換え処理を例示するフローチャート。
【図１７】第２の実施形態に係る追い出し処理を例示するフローチャート。
【図１８】第２の実施形態に係るＭＡＣ比較検証処理を例示するフローチャート。
【図１９】第２の実施形態に係るＭＡＣ＋カウンタ構造とキャッシュラインＭＡＣ値との関係を例示するデータ構造図。
【図２０】第２の実施形態に係るキャッシュラインＭＡＣ値の生成処理を例示するフローチャート。
【図２１】第３の実施形態に係る情報処理装置の構成を例示するブロック図。
【図２２】第４の実施形態に係るセキュア検証子ツリーを例示するデータ構造図。
【図２３】第５の実施形態に係るセキュア検証子ツリーを例示するデータ構造図。
【図２４】第５の実施形態に係るキャッシュラインＭＡＣブロックと、このキャッシュラインＭＡＣブロックの上位のページテーブルと関連付けられているカウンタブロックとの関係を例示するブロック図。
【図２５】第６の実施形態に係るセキュア検証子ツリーを例示するデータ構造図。
【発明を実施するための形態】
【００１１】
以下、図面を参照しながら本発明の各実施の形態について説明する。なお、以下の説明において、略又は実質的に同一の機能及び構成要素については、同一符号を付し、必要に応じて説明を行う。
【００１２】
［第１の実施形態］
情報処理装置で利用されるデータには、リードオンリー（ＲＯ）データと、リード／ライト（ＲＷ）データがある。
【００１３】
ＲＯデータは、ＲＯ属性を持ち、読み込みは許可されているが書き込みは許可されていないデータである。なお、ＲＯデータは、原則書き込みが許可されないが、例外的に書き込みが許可されるデータでもよい。
【００１４】
ＲＷデータは、ＲＷ属性を持ち、読み込みと書き込みの双方が許可されているデータである。
【００１５】
ＲＯデータはＲＷデータに変化してもよく、ＲＷデータはＲＯデータに変化してもよい。
【００１６】
本実施形態においては、ＲＯデータを検出し、ＲＯデータをキャッシュメモリに記憶する。キャッシュメモリに記憶されるＲＯデータの検証では、リプレイ攻撃に対する防止を含まない検証を行う。ＲＷデータは、内部メモリに記憶される。ＲＷデータに対しては、リプレイ攻撃に対する防止を含む検証を行う。ＲＯデータに対しては空間的な完全性が保証され、ＲＷデータに対しては空間的な完全性に加えて時間的な完全性が保証される。
【００１７】
図１は、本実施形態に係るメモリ管理装置の構成を例示するブロック図である。メモリ管理装置１の各種の構成要素はハードウェアで実現されてもよく、プログラムによって制御されるプロセッサによって実現されてもよい。
【００１８】
メモリ管理装置１は、外部入出力部２、アドレス変換部３、検証計算部４、検証部５、更新部６、置換管理部４０、判定部４１、検証計算部４２、検証部４３を備える。
【００１９】
また、メモリ管理装置１は、第１の記憶部である外部メモリ７と、第２の記憶部である内部メモリ８と、第３の記憶部であるアドレス変換バッファ４４と、キャッシュメモリ４５と、に対して、読み込み及び書き込みを行う。
【００２０】
外部メモリ７は、例えば、不揮発性の記憶装置である。例えば、外部メモリ７は、ＮＡＮＤ型フラッシュメモリ、ＮＯＲ型フラッシュメモリ、ＭＲＡＭ（Magnetoresistive Random access memory：磁気抵抗メモリ）、ＰＲＡＭ（Phase change Random access memory：相変化メモリ）、ＲｅＲＡＭ（Resistive Random access memory：抵抗変化型メモリ）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）などの不揮発性半導体メモリでもよい。外部メモリ７は、主記憶装置として用いられてもよく、ハードディスク、ＳＳＤ（Solid State Drive）などのような補助記憶装置として用いられてもよい。
【００２１】
外部メモリ７は、階層構造を持つページテーブルツリー９と、階層構造を持つ検証子ツリー１０とを記憶する。本実施形態において、ページテーブルツリー９と検証子ツリー１０とは、２段の階層を持つ。しかしながら、ページテーブルツリー９と検証子ツリー１０とは当然に３段以上でもよい。
【００２２】
ページテーブルツリー９は、複数のページテーブルの階層構造で形成される。ページテーブルツリー９は、親テーブル１０１及び子テーブル２０１〜２０ｍを含む。テーブルエントリＥがアドレス情報Ｘを備えており、アドレス情報Ｘが最終のデータＤのアクセス先を決定するための中間のテーブルＴ又はデータＤを指している場合、テーブルエントリＥは、テーブルＴ又はデータＤを参照しているという。テーブルエントリＥの参照先アドレスは、アドレス情報Ｘである。テーブルＴ又はデータＤの参照元は、テーブルエントリＥである。親テーブル１０１に含まれる親エントリｐｅ１〜ｐｅｍは、子テーブル２０１〜２０ｍを参照するために用いられる。子テーブル２０１，２０ｍに含まれる子エントリｃｅ１〜ｃｅｘは、データ３０１〜３０ｘを参照するために用いられる。
【００２３】
本実施形態では、典型的な例として、ページテーブルツリー９において、親テーブル１０１の親エントリｐｅ１、子テーブル２０１の子エントリｃｅ１を経由して、データ３０１がアクセスされる場合を説明する。しかしながら、他の親テーブル、他の親エントリ、他の子テーブル、他の子エントリを経由して他のデータがアクセスされる場合も同様である。
【００２４】
検証子ツリー１０は、親検証子ｐｖ１〜ｐｖｍ及び子検証子ｃｖ１〜ｃｖｘを含む階層構造を持つ。親検証子ｐｖ１〜ｐｖｍは、親テーブル１０１に関連付けられる。子検証子ｃｖ１〜ｃｖｎは、子テーブル２０１に関連付けられる。他の子検証子と他の子テーブルとの関係についても、子検証子ｃｖ１〜ｃｖｎと子テーブル２０１との関係と同様である。
【００２５】
本実施形態において、子テーブル２０１と関連付けられている子検証子ｃｖ１〜ｃｖｎは、それぞれ、子テーブル２０１に含まれている子エントリｃｅ１〜ｃｅｎによって参照されるデータ３０１〜３０ｎに対する検証に用いられる。
【００２６】
親テーブル１０１と関連付けられている親検証子ｐｖ１は、親テーブル２０１に含まれている親エントリｐｅ１によって参照される子テーブル２０１と、子テーブル２０１と関連付けられている子検証子ｃｖ１〜ｃｖｎとに対する検証に用いられる。他の親検証子と他の子テーブル及び他の子検証子との関係についても、親検証子ｐｖ１と子テーブル２０１及び子検証子ｃｖ１〜ｃｖｎとの関係と同様である。
【００２７】
内部メモリ８は、外部から直接参照不可能な記憶装置であり、不正なアクセスから防御される。例えば、内部メモリ８は、プロセッサパッケージ内部の記憶装置である。具体的には、内部メモリ８は、例えば、下記の第２の実施形態で説明される図２で、プロセッサ５０１のパッケージと一体化したハードウェアであり、内部バス５１５ｂを経由して外部バス５０４との間でデータ転送が行われるが、データ転送はプロセッサ５０１の命令実行ユニット５０５で実行された命令に基づいて行われる。内部メモリ８の内容は、外部バス５０４を経由して直接読み出し及び書き換えることはできないことを前提とする。このような内部メモリ８と同様の特徴を持つメモリを、安全なメモリと呼ぶ。これとは逆に、外部メモリ７は、外部バス５０４を経由して任意のアドレスに対して読み出し及び書き換えが可能であり、安全なメモリとは異なる。
【００２８】
内部メモリ８は、外部メモリ７と同じ物理アドレス空間に配置される。内部メモリ８は、命令実行ユニット５０５で実行されるソフトウェアから外部メモリ７と同様にアクセス可能である。
【００２９】
内部メモリ８は、ページテーブルツリー９の一部であり、第１のアドレスを第２のアドレスに変換するためのセキュアページテーブルツリー１２１、検証子ツリー１０のうちの一部であるセキュア検証子ツリー１２２を記憶する。本実施形態では、第１のアドレスを仮想アドレスとし、第２のアドレスを物理アドレスとするが、例えば第１のアドレスは中間物理アドレス（Intermediate Physical Address）などでもよい。内部メモリ８は、親テーブル１０１と親検証子ｐｖ１〜ｐｖｍとの検証に用いられるルート検証情報１３を備える。
【００３０】
アドレス変換部３は、参照対象のデータがＲＷデータの場合に、内部メモリ８に記憶されている親テーブル１０１の親エントリｐｅ１〜ｐｅｍ及び子テーブル２０１〜２０ｍの子エントリｃｅ１〜ｃｅｘを経由してデータ３０１〜３０ｘの物理アドレスを求める。
【００３１】
外部メモリ７から内部メモリ８へ親テーブル１０１がコピー（移動又は読み込み）される場合には、この親テーブル１０１に関連付けられている親検証子ｐｖ１〜ｐｖｍも、外部メモリ７から内部メモリ８へコピーされる。
【００３２】
本実施形態において、ページテーブル又はデータは、外部メモリ７から、改ざんに対して安全な内部メモリ８にコピーされ、検証される。内部メモリ８のページテーブル又はデータが変更され、その後内部メモリ８から削除される場合には、変更された内部メモリ８のページテーブル又はデータは、外部メモリ７に書き出される。内部メモリ８のページテーブル又はデータが変更されることなく内部メモリ８から削除される場合には、内部メモリ８のページテーブル又はデータは、書き出されてもよく又はそのまま破棄されもよい。以下において、外部メモリ７と内部メモリ８との間でのページテーブル又はデータのコピーを、ページテーブル又はデータを移動する、読み込む、又は書き出す、と表現する場合がある。例えば、ページテーブルの参照先が内部メモリ８にコピーされたページテーブル又はデータに変更されることを、ページテーブル又はデータの移動又は読み込み、と表現する場合がある。この場合に、外部メモリ７のコピー元のページテーブル又はデータは、消去されなくてもよい。
【００３３】
外部メモリ７から内部メモリ８へ子テーブル２０１がコピーされる場合には、この子テーブル２０１に関連付けられている子検証子ｃｖ１〜ｃｖｎも、外部メモリ７から内部メモリ８へコピーされる。
【００３４】
外部入出力部２は、外部メモリ７に記憶されているページテーブルツリー９と検証子ツリー１０とに対する読み込み及び書き込みを行う。
【００３５】
第１に、外部メモリ７から内部メモリ８へ子テーブル２０１及び子検証子ｃｖ１〜ｃｖｎがコピーされる場合の例を説明する。
【００３６】
アドレス変換部３は、内部メモリ８に記憶されているセキュアページテーブルツリー１２１に基づいて、仮想アドレスを物理アドレスに変換する。また、アドレス変換部３は、仮想アドレスを物理アドレスに変換するために必要な子テーブル２０１がセキュアページテーブルツリー１２１に含まれていない場合に、テーブル不足通知（フォールト）１４を検証計算部４に送り、更新された後のセキュアページテーブルツリー１２１に基づいて、仮想アドレスを物理アドレスに変換する。
【００３７】
検証計算部４は、テーブル不足通知１４をアドレス変換部３から受けた場合に、外部入出力部２経由で、外部メモリ７のページテーブルツリー９の子テーブル２０１と検証子ツリー１０の子検証子ｃｖ１〜ｃｖｎとを読み込み、読み込まれた子テーブル２０１と子検証子ｃｖ１〜ｃｖｎとに基づいて検証情報１５を計算し、検証情報１５を検証部５に送る。
【００３８】
検証部５は、検証計算部４によって計算された検証情報１５と、セキュアページテーブルツリー１２１において参照元エントリｐｅ１を含んでいる親テーブル１０１に関連付けられている親検証子ｐｖ１とに基づいて、検証情報１５と親検証子ｐｖ１とが整合するか否か判断し、検証を行い、検証結果１６を更新部６に送る。
【００３９】
更新部６は、検証部５から検証結果１６を受け、検証結果１６が正当の場合、内部メモリ８のセキュアページテーブルツリー１２１に子テーブル２０１を組み込み、セキュア検証子ツリー１２２に子検証子ｃｖ１〜ｃｖｎを組み込む。より具体的には、更新前に、親テーブル１０１の親エントリｐｅ１は、外部メモリ７のページテーブルツリー９に含まれている子テーブル２０１を参照しているとする。更新部６は、セキュアページテーブルツリー１２１における更新前の親テーブル１０１の親エントリｐｅ１を、内部メモリ８におけるセキュアページテーブルツリー１２１に組み込まれた子テーブル２０１を参照するように、更新する。
【００４０】
本実施形態に係るメモリ管理装置１では、例えば、検証結果１６の確認に先立って、外部入出力部２が、内部メモリ８に子テーブル２０１及び子検証子ｃｖ１〜ｃｖｎを読み込み、検証結果１６が正当な場合に、セキュアページテーブルツリー１２１及びセキュア検証子ツリー１２２に、子テーブル２０１及び子検証子ｃｖ１〜ｃｖを組み込むとしてもよい。
【００４１】
このように、本実施形態において、子テーブル２０１が内部メモリ８に記憶されておらず、外部メモリ７から内部メモリ８へ子テーブル２０１及び子検証子ｃｖ１〜ｃｖｎがコピーされる場合には、親テーブル１０１の親エントリｐｅ１は、外部メモリ７の子テーブル２０１を参照する。子テーブル２０１が内部メモリ８に記憶された場合には、内部メモリ８の親テーブル１０１の親エントリｐｅ１は、内部メモリ８の子テーブル２０１を参照するように更新される。
【００４２】
本実施形態において、親テーブル１０１が内部メモリ８に記憶されておらず、外部メモリ７から内部メモリ８へ親テーブル１０１及び親検証子ｐｖ１〜ｐｖｎがコピーされる場合には、検証計算部４は、外部メモリ７から読み込まれた親テーブル１０１、親検証子ｐｖ１〜ｐｖｎ、外部メモリ７の親テーブル１０１の記憶されている物理アドレスに基づいて検証情報を生成する。外部メモリ７における親テーブル１０１の物理アドレスを用いて検証情報を生成することにより、親テーブル１０１の入れ替え攻撃に対して防御することができる。検証部５は、ルート検証情報１３と生成された検証情報に基づいて検証を行う。更新部６は、検証結果が正当の場合に、セキュアページテーブルツリー１２１に、外部メモリ７から読み込まれた親テーブル１０１を組み込み、セキュア検証子ツリー１２２に、外部メモリ７から読み込まれた親検証子ｐｖ１〜ｐｖｎを組み込む。
【００４３】
第２に、外部メモリ７から内部メモリ８へデータ３０１がコピーされる場合の例を説明する。
【００４４】
アドレス変換部３は、仮想アドレスを変換した物理アドレスが外部メモリ７を参照している場合に、データ読み込み通知１７を検証計算部４及び置換管理部４０に送る。
【００４５】
検証計算部４は、データ読み込み通知１７をアドレス変換部３から受けた場合に、外部入出力部２経由で物理アドレスによって参照される外部メモリ７のデータ３０１を読み込み、読み込まれたデータ３０１、外部メモリ７のデータ３０１の記憶されている物理アドレスに基づいてデータ検証情報１８を計算し、データ検証情報１８を検証部５に送る。外部メモリ７におけるデータの物理アドレスを用いてデータ検証情報１８を生成することにより、データ３０１の入れ替え攻撃に対して防御することができる。
【００４６】
検証部５は、検証計算部４によって計算されたデータ検証情報１８と、セキュアページテーブルツリー１２１において参照元の子テーブル２０１に関連付けられている子検証子ｃｖ１とに基づいて、データ検証情報１８と子検証子ｃｖ１とが整合するか否か判断するデータ検証を行い、データ検証結果１９を更新部６に送る。
【００４７】
更新部６は、検証部５からデータ検証結果１９を受け、データ検証結果１９が正当の場合、内部メモリ８のセキュアページテーブルツリー１２１に、データ３０１を組み込む。より具体的には、更新前に、子テーブル２０１の子エントリｃｅ１は、外部メモリ７のページテーブルツリー９に含まれているデータ３０１を参照しているとする。更新部６は、セキュアページテーブルツリー１２１における更新前の子テーブル２０１の子エントリｃｅ１を、内部メモリ８におけるデータ３０１を参照するように更新する。
【００４８】
本実施形態に係るメモリ管理装置１では、例えば、データ検証結果１９の確認に先立って、外部入出力部２が、内部メモリ８にデータ３０１を読み込んでおき、データ検証結果１９が正当な場合に、セキュアページテーブルツリー１２１に、データ３０１を組み込むとしてもよい。
【００４９】
このように、本実施形態において、データ３０１が内部メモリ８に記憶されておらず、外部メモリ７から内部メモリ８へデータ３０１がコピーされる場合には、子テーブル２０１の子エントリｃｅ１は、外部メモリ７のデータ３０１を参照する。データ３０１が内部メモリ８に記憶された場合には、内部メモリ８の子テーブル２０１の子エントリｃｅ１は、内部メモリ８のデータ３０１を参照するように更新される。
【００５０】
仮想アドレスは、親テーブル１０１の親エントリｐｅ１、子テーブル２０１の子エントリｃｅ１を経由してデータ３０１の物理アドレスに変換される。参照されるデータ３０１は、物理アドレスの示す安全な内部メモリ８に記憶されている。このようなアドレス解決により参照される全てのテーブルとデータは、検証で正当と判断されており、安全な内部メモリ８に配置されている。
【００５１】
第３に、内部メモリ８から外部メモリ７へデータ３０１がコピー（書き出し）される場合の例を説明する。
【００５２】
検証計算部４は、内部メモリ８に記憶されているデータ３０１を外部メモリ７に記憶する場合に、内部メモリ８のデータ３０１に基づいて子検証子（データ検証子）ｃｖ１を計算する。
【００５３】
外部入出力部２は、データ３０１を外部メモリ７に記憶する。
【００５４】
更新部６は、セキュアページテーブルツリー１２１における子テーブル２０１の子エントリ（物理アドレス）ｃｅ１の参照先を、外部メモリ７におけるデータ３０１の記憶位置に更新する。さらに、更新部６は、検証計算部４によって計算された子検証子ｃｖ１を、セキュアページテーブルツリー１２１における子テーブル２０１に関連付けてセキュア検証子ツリー１２２に組み込む。
【００５５】
本実施形態において、更新部６は、セキュアページテーブルツリー１２１が子テーブル２０１を含まない場合に、親テーブル１０１の親エントリｐｅ１を無効状態とし、セキュアページテーブルツリー１２１が子テーブル２０１を組み込んだ場合に、親テーブル１０１の親エントリｐｅ１を有効状態とする。
【００５６】
更新部６は、内部メモリ８がデータ３０１を記憶していない場合に、子テーブル２０１の子エントリｃｅ１を無効状態とし、内部メモリ８がデータ３０１を記憶している場合に、子テーブル２０１の子エントリｃｅ１を有効状態とする。
【００５７】
上記第１及び第２の例において、置換管理部４０は、例えばアドレス変換部３からデータ読み込み通知１７を受けた場合などのように、内部メモリ８にテーブル又はデータが記憶される場合に、内部メモリ８の空き領域の容量を確認する。置換管理部４０は、内部メモリ８の空き領域の容量が不足する場合に、削除するために選択された内部メモリ８のテーブル又はデータに対する検証情報要求４６を検証計算部４に送る。置換管理部４０は、検証計算部４から、検証情報要求４６の応答として、内部メモリ８の選択されたテーブル又はデータに対する検証子を受ける。そして、置換管理部４０は、内部メモリ８の選択されたテーブル又はデータ及びその検証子を、外部入出力部２経由で外部メモリ７に書き出し、内部メモリ８における選択されたテーブル又はデータの領域を解放し、内部メモリ８の空き領域を増やす。
【００５８】
アドレス変換バッファ４４は、仮想アドレスと物理アドレスとを関連付けたアドレス変換情報を記憶する。さらに、アドレス変換バッファ４４は、リプレイ攻撃防止情報４７を記憶する。なお、リプレイ攻撃防止情報４７は、アドレス変換バッファ４４ではない他の記憶装置に記憶されてもよい。
【００５９】
リプレイ攻撃防止情報４７は、データの更新に応じて変化する安全な値である。リプレイ攻撃防止情報４７としては、例えば、データが更新されるごとにインクリメントされるカウンタ値が用いられる。
【００６０】
キャッシュラインＭＡＣ値４８は、キャッシュライン単位の検証子である。本実施形態において、キャッシュラインＭＡＣ値は、外部メモリ７に記憶されているが、内部メモリ８などの他の記憶装置に記憶されてもよい。
【００６１】
判定部４１は、参照対象のデータ３０１がＲＯデータか、ＲＷデータか、を判定する。
【００６２】
データ３０１がＲＷデータの場合には、上述したように、セキュアページテーブルツリー１２１及びセキュア検証子ツリー１２２に基づく第１乃至第３の処理などが実行される。
【００６３】
データ３０１がＲＯデータと判定された場合、検証計算部４２は、ＲＯデータと、このＲＯデータに対応するリプレイ攻撃防止情報４７とに基づいて、検証情報４９を計算する。そして、検証計算部４２は、検証情報４９を検証部４３に送る。
【００６４】
検証部４３は、ＲＯデータに対応するキャッシュライン単位のキャッシュラインＭＡＣ値４８と、検証情報４９とに基づいて、検証を行い、検証成功の場合に、ＲＯデータをキャッシュメモリ４５に記憶する。検証部４３は、検証失敗の場合に、検証失敗処理を実行する。
【００６５】
このように、本実施形態において、検証部４３は、参照対象のデータ３０１がＲＯデータの場合に、内部メモリ８に記憶されておいるセキュア検証子ツリー１２２に基づく検証を行うことなく、キャッシュメモリ４５にデータ３０１を記憶する。
【００６６】
検証部５は、参照対象のデータ３０１がＲＷデータの場合に、内部メモリ８に記憶されているセキュア検証子ツリー１２２に基づく検証を行い、当該検証の結果が正当を示す場合に、内部メモリ８にデータ３０１を記憶する。
【００６７】
以上説明した本実施形態においては、ＲＷデータに対してセキュア検証子ツリー１２２に基づく検証が実行され、ＲＯデータに対してキャッシュラインＭＡＣ値４８に基づく検証が実行され、ＲＯデータとＲＷデータとの間でリプレイ攻撃に対する強度を調整し、効率的な検証を行うことができる。
【００６８】
以下では、セキュア検証子ツリー１２２に基づく検証をツリー検証と、キャッシュラインＭＡＣ値４８に基づく検証をＭＡＣ比較検証と呼ぶ。つまり、ＲＷデータに対してはツリー検証が実行され、ＲＯデータに対してはＭＡＣ比較検証が実行される。
【００６９】
本実施形態においては、外部メモリ７に記憶されたページテーブルツリー９、検証子ツリー１０、データ３０１〜３０ｘのうちの必要な部分を選択的に検証することができ、検証された必要な部分を外部メモリ７よりも小容量の内部メモリ８に記憶することができる。これにより、外部メモリ７に対する物理攻撃を検出することができ、データの完全性を検証し、データの改ざんを防止することができる。本実施形態においては、改ざん検証後にページテーブルツリー９、検証子ツリー１０及びデータ３０１〜３０ｘが改ざんされることを検出することができ、情報処理装置の安全性を向上させることができる。
【００７０】
本実施形態に係る検証は、仮想化技術に対して適用され、内部メモリ８に記憶されたセキュアページテーブルツリー１２１、セキュア検証子ツリー１２２を参照することにより、ゲストＯＳ（Operating System）及びアプリケーションを変更することなく容易に適用することができる。
【００７１】
本実施形態においては、ページテーブルと検証子との階層構造が合致しており、さらに、ページテーブルと検証子とが一体で検証される。換言すれば、ページテーブルツリー９と検証子ツリー１０とは同じグラフ構造を持つ。これにより、検証子がページング対象の場合であっても、検証子の配置先アドレスを解決する必要がない。また、ページテーブルと検証子とを階層構造で管理する。したがって、セキュアページテーブルツリー１２１、セキュア検証子ツリー１２２、ページテーブルツリー９、検証子ツリー１０をアドレス空間の不連続なメモリ領域に配置することができ、メモリを効率的に利用することができる。本実施形態においては、検証子を階層構造で管理することにより、効率的に管理することができる。
【００７２】
本実施形態においては、未検証のページテーブル及びデータが、既存のアドレス変換機構のページフォールトにより検出される。このため、ＲＷデータの検証において新たなハードウェアを加える必要がない。さらに、本実施形態においては、外部メモリ７と内部メモリ８との間で、ページテーブルと検証子とが個別ではなく一体でコピーされる。したがって、ページフォールトが発生した場合であってもオーバーヘッドが増加することを抑制することができる。
【００７３】
本実施形態においては、ページテーブル及びデータが内部メモリ８に記憶されているか否かを、上位のページテーブルのエントリが有効か無効かで管理する。これにより、汎用のハードウェアであるアドレス変換機構を利用して効率よく、ページテーブル及びデータが内部メモリ８に記憶されているか否かを判断することができる。
【００７４】
［第２の実施形態］
本実施形態においては、上記第１の実施形態に係るメモリ管理装置１を備える情報処理装置について説明する。情報処理装置は、コンピュータシステムでもよい。
【００７５】
図２は、本実施形態に係る情報処理装置を例示するハードウェア構成図である。
【００７６】
情報処理装置５００は、プロセッサ５０１、外部メモリ７、外部デバイス５０３、外部バス５０４を備える。プロセッサ５０１、外部メモリ７、外部デバイス５０３は、外部バス５０４を介して、データ、信号、命令を互いに送受信可能とする。
【００７７】
情報処理装置５００の仮想化支援機構は、例えば、２ステージのアドレス変換を実行する。
【００７８】
プロセッサ５０１は、命令実行ユニット（プロセッサコア）５０５、ＭＭＵ（Memory Management Unit）５０６、キャッシュメモリ５０７ａ，５０７ｂ，５０８、アドレス変換キャッシュ（ＴＬＢ：Translation Lookaside Buffer）５０９，５１０、内部メモリ８、セキュアＤＭＡ（Direct Memory Access）コントローラ５１１、入出力デバイス５１２、鍵保存ユニット５１３、キャッシュ検証部５１４、内部バス５１５ａ，５１５ｂを備える。プロセッサ５０１の各種の構成要素８，５０５〜５１４は、内部バス５１５ａ，５１５ｂを介して、データ、信号、命令を互いに送受信可能とする。
【００７９】
外部メモリ７は、セキュアＶＭＭ（Virtual Machine Monitor）５１６、セキュアＯＳ５１７、非セキュアＯＳ５１８を記憶する。
【００８０】
本実施形態において、セキュアＯＳ５１７、非セキュアＯＳ５１８は、セキュアＶＭＭ５１６によって管理されるゲストＯＳとする。
【００８１】
外部デバイス５０３は、例えばハードディスクなどのような不揮発性記憶装置である。
【００８２】
プロセッサ５０１の命令実行ユニット５０５は、階層化されたキャッシュメモリ５０７ａ，５０７ｂ、キャッシュメモリ５０８を用いてデータ参照を行う。以下では、まず、アドレス変換の後に行われるデータ参照について説明し、次に、アドレス変換について説明する。
【００８３】
キャッシュメモリ５０７ａは、データ用１次キャッシュメモリである。キャッシュメモリ５０７ｂは、データ及び命令用の１次キャッシュメモリである。キャッシュメモリ５０８は、データ及び命令用の２次統合キャッシュメモリである。
【００８４】
命令実行ユニット５０５は、キャッシュメモリ５０８に記憶されているデータ又は命令を、内部メモリ８又は外部メモリ７に記憶されているデータ又は命令よりも高速に参照可能である。また、命令実行ユニット５０５は、キャッシュメモリ５０７ａ，５０７ｂを、キャッシュメモリ５０８よりも高速にアクセス可能である。
【００８５】
命令実行ユニット５０５は、キャッシュメモリ５０７ａ，５０７ｂ，５０８又は内部メモリ８からデータ又は命令を読み込み、処理を実行する。
【００８６】
キャッシュメモリ５０７ａ，５０７ｂが参照対象データを記憶している場合には、キャッシュメモリ５０８、及び、内部メモリ８へのデータ参照は実行されない。
【００８７】
キャッシュメモリ５０７ａ，５０７ｂが参照対象データを記憶しておらず、キャッシュメモリ５０８が参照対象データを記憶している場合には、内部メモリ８へのデータ参照は実行されない。これにより、データ参照が短時間で行われる。
【００８８】
なお、内部メモリ８から読み込まれるデータは、内部メモリ８から、キャッシュメモリ５０８を経由することなく、キャッシュメモリ５０７ａ，５０７ｂに記憶されてもよい。
【００８９】
鍵保存ユニット５１３は、ルート検証情報１３と、情報処理装置５００における暗号化又は検証に使用される鍵情報とを記憶する。
【００９０】
セキュアＤＭＡコントローラ５１１は、各種の構成要素間のデータ転送を行う。セキュアＤＭＡコントローラ５１１は、例えば、ハードウェアによって実装され、ＭＡＣ値計算を実行する。しかしながら、ＭＡＣ値計算は、ソフトウェアで実行されてもよい。
【００９１】
プロセッサ５０１に備えられるキャッシュ検証部（ハードウェア検証機構）５１４は、検証要求されたＲＯデータに対して、キャッシュライン単位でＭＡＣ値を生成し、生成されたＭＡＣ値の比較により検証を行う。キャッシュ検証部５１４は、検証の結果が正当なＲＯデータをキャッシュメモリ５０８に記憶する。
【００９２】
情報処理装置５００は、仮想記憶管理とメモリ検証処理とを連携させる。本実施形態では、主記憶装置に不揮発性半導体メモリを使用する。本実施形態では、階層構造を持つページテーブルツリー９と階層構造を持つ検証子ツリー１０とを生成する。ページテーブルツリー９と検証子ツリー１０とは、互いに階層構造が整合する。ページテーブルツリー９と検証子ツリー１０とは、不揮発性の外部メモリ７に保存され、必要に応じて一部が内部メモリ８にコピーされる。外部メモリ７は不揮発性の記憶装置であるため、電源がＯＦＦされ、その後に電源がＯＮされた場合に、電源ＯＦＦ前の記憶状態を維持する。
【００９３】
例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro-Processing Unit）などのようなプロセッサのパッケージと主記憶装置とを一体化した一体型ハードウェアでは、上述のようなデータの窃視・改ざん、及び、物理的攻撃が困難である。しかしながら、一体型ハードウェアは一般に高価であるため、汎用プロセッサパッケージと汎用メモリとの組み合わせで、安全な処理を可能にする技術が求められる。
【００９４】
本実施形態においては、プロセッサ５０１のパッケージ内部に設けられた内部メモリ８は、ハードウェア的な攻撃から安全であると仮定する。ただし、不正なソフトウェアを実行させることで、内部メモリ８からデータを出力させる攻撃は可能であると仮定する。情報処理装置５００への攻撃者は、任意のタイミングで外部メモリ７の任意の位置を自由に書き換えることができると仮定する。
【００９５】
本実施形態において、データ改ざんから保護されるメモリ領域、及び、暗号化されるメモリ領域を、保護メモリと呼ぶ。
【００９６】
情報処理装置５００の主記憶装置に対する攻撃を防ぎ、脅威を取り除くために、安全性とシステム構成との観点から、以下の第１乃至第５の条件を満たすことが要求される。
【００９７】
第１の条件は、安全性に関する条件である。第１の条件では、リプレイ攻撃を含むデータの改ざんを厳密に検出可能であることが要求される。
【００９８】
第２の条件は、ハードウェア構成に関する条件である。第２の条件は、ＲＷデータの検証に関して専用のハードウェアが不要であることを要求する。より具体的に説明すると、第２の条件は、メモリ改ざん検証専用のハードウェアが不要であることを要求する。第２の条件は、多数のプロセッサが備えるアドレス変換機構、仮想化支援機構、プロセッサ内の汎用内部メモリ、高速化補助機構、ＤＭＡコントローラと連携した高速暗号エンジンに基づいて、攻撃を防ぎ、脅威を取り除くことを要求する。また、第２の条件は、ファームウェアなどのソフトウェアに基づく処理が可能であることを要求する。さらに、第２の条件は、仮想化技術との親和性が高いことを要求する。第２の条件は、安全な内部メモリ８のメモリサイズが１メガバイト程度のように小さくても動作可能であることを要求する。
【００９９】
第３の条件は、メモリに関する条件である。第３の条件は、大容量のメモリ、例えば３２ビットのアドレス空間もしくはそれを越えるサイズのメモリに適用可能であることを要求する。第３の条件は、メモリの検証対象領域が選択可能なことを要求する。第３の条件は、保護対象のメモリ領域をメモリマップ上でいくつもの不連続な領域に配置可能であり、メモリの必要な部分だけを選択的に改ざん検証の対象にできることを要求する。第３の条件は、メモリのうち選択的に改ざん検証対象に定められた選択領域を定義するデータそのものも、攻撃から保護可能であることを要求する。第３の条件は、保護対象のメモリ領域の配置が不連続の場合であっても、選択領域だけを検証可能なことに加えて、選択領域を除く他の領域に対して検証子用のメモリ領域の確保を不要とし、メモリを効率的に利用可能なことを要求する。
【０１００】
第４の条件は、ソフトウェア構成と安全性とに関する条件である。第４の条件は、ＯＳ全体を保護対象とすることができることを要求する。第４の条件は、改ざん検証が不要な外部との通信用ハードウェアなどは改ざん検証対象とせず非選択領域とすることができることを要求する。第４の条件は、透過性を有すること、換言すれば、ＯＳ及びアプリケーションを修正する必要がないことを要求する。第４の条件は、ＯＳに不具合があって不正な命令が実行された場合に、当該ＯＳ自身が破壊され誤動作することは許容してもその誤動作によってメモリ改ざん検証機能が検証の迂回又は制御情報の破壊に対して安全であり頑健であることを要求する。
【０１０１】
第５の条件は、処理の効率性に関する条件である。第５の条件は、例えばメモリアクセスごとの改ざん検証の要・不要の判定などのような頻繁に発生する処理はできる限りハードウェアにより実行することで効率化することを要求する。
【０１０２】
本実施形態においては、不揮発性の主記憶装置が適用されることを想定し、セキュア検証子ツリー１２２に基づく検証を行い、セキュアページテーブルツリー１２１に基づいて多段階のアドレス変換を行い、仮想化技術を想定し、上記の第１乃至第５の条件を満たす情報処理装置５００を実現する。
【０１０３】
本実施形態には、主要なポイントが３つある。まず、本実施形態の第１のポイントを説明する。
【０１０４】
第１のポイントは、アドレス透過性の担保、未検証データ参照の検出機能の提供に関する。具体的には、ゲストＯＳによるデータ参照が発生した場合に、まずセキュアＶＭＭ５１６がページテーブルエントリを確認し、内部メモリ８を経由した検証が必要な場合に、外部メモリ７のデータを内部メモリ８に動的に確保されているバッファメモリに記憶する。
【０１０５】
内部メモリ８を経由した検証に成功した場合に、ゲストＯＳのデータ参照先の実態である物理メモリのデータが、本来の外部メモリ７のデータから、内部メモリ８の配置先アドレスのデータに代わるように、セキュアＶＭＭ５１６が、管理されているセキュアページテーブルツリー１２１（例えばステージ２ページテーブルツリー）を書き換える。
【０１０６】
一方で、外部メモリ７から、キャッシュメモリ５０７ａ，５０７ｂ，５０８経由で、命令実行ユニット５０５がデータを取得する場合には、ページテーブルエントリの参照先を変更することなく、外部メモリ７からキャッシュメモリ５０７ａ，５０７ｂ，５０８へデータがコピーされる際に検証が行われる。
【０１０７】
ゲストＯＳは、参照先の変更を認識する必要がない。このため、本実施形態に係る検証を導入してもゲストＯＳを変更する必要はなく、ゲストＯＳの透過性を得ることができる。
【０１０８】
改ざん防止には、外部メモリ７への参照の検出と、検証の実行と、そして検証済みデータの安全な内部メモリ８へのコピー（読み込み）と、参照先の変更とが必要である。ハードウェアキャッシュが用いられる場合には、キャッシュメモリ５０８への読み込みに対応する参照先変更がソフトウェアの介在なしに専用ハードウェア機構によって行われるため、ゲストＯＳに対するアドレス透過性が保証される。これに対して、ファームウェアによる検証では、検証済みデータの配置先は元のデータのアドレスと異なるため、ゲストＯＳから何らかの方法で参照先の変更を隠ぺいしなければ、ゲストＯＳの変更が必要となり、ゲストＯＳに対するアドレス透過性が担保されない。
【０１０９】
本実施形態は、検証済みデータを改ざんなどの攻撃から守り、かつ、内部メモリ８へのコピーをゲストＯＳから隠蔽するために、２段階のアドレス変換を行う仮想化支援機構を利用し、外部メモリ７から内部メモリ８へのデータ読み込み後にセキュアページテーブルツリー１２１のデータ参照先を変更することで、ゲストＯＳに対するアドレス透過性を実現する。
【０１１０】
さらに、本実施形態では、未検証データの参照を検出する。このために、本実施形態では、初期状態においてセキュアページテーブルツリー１２１のエントリを「無効」としておき、ページテーブル又はデータの検証と読み込みに成功した場合にセキュアページテーブルツリー１２１のエントリを「有効」とする。これにより、未読み込みのページテーブル又はデータの検出を、汎用のハードウェアであるアドレス変換機構を利用して効率よく行うことができる。
【０１１１】
次に、本実施形態の第２のポイントを説明する。
【０１１２】
第２のポイントは、セキュアページテーブルツリー１２１とセキュア検証子ツリー１２２の階層構造とを整合させることに関する。本実施形態では、大規模データの検証を可能にするために、外部メモリ７から内部メモリ８への読み込み状態を管理する。本実施形態では、透過的な改ざん検証をファームウェアの処理で実現するために、アドレス変換機構を活用する。もし、アドレス変換機構の動作が妨害され、例えば内部メモリ８が参照されるべきであるにもかかわらず外部メモリ７が参照された場合などのように、不正操作が行われた場合、上記の検証と読み込みデータの保護は正しく機能しない。したがって、本実施形態では、アドレス変換機構の動作を攻撃から守る。
【０１１３】
アドレス変換機構は、ページテーブルを参照し、アドレス変換を行う。ページテーブルは、内部メモリ８に配置されており、仮想アドレスを物理アドレスに変換するための定義情報である。アドレス空間が広くなると、ページテーブルを記憶するために必要なサイズも大きくなる。例えば、１つのページテーブルの全アドレス空間を単純に記憶するには、１テラバイトのメモリを保護することを前提とすると、２ギガバイトのサイズが必要になる。このように単純にページテーブルのアドレス空間を物理メモリに固定的に確保することは、情報処理装置にとって大きな負担となる。このため、ページテーブルのアドレス空間を小さくする２つの方法がある。第１の方法は、ページテーブルを階層化し、内部メモリ８の階層的なページテーブルを参照し、ページテーブル自体をページングの対象とする。第２の方法は、第１の方法における階層化と関連する。この第２の方法は、内部メモリ８のメモリ空間の中で参照が不要な部分のテーブル定義状態を未定義のままとし、不連続なメモリ空間定義を許可することでテーブル量を削減する。
【０１１４】
アドレス変換機構は、多くのプロセッサに備えられる汎用的な機構である。しかしながら、ページテーブルのページング又は未定義状態を無制限に許すことは、ページング時に正当なページテーブル又はデータを不当なページテーブル又はデータにすり替える、又は、定義されたページテーブル又はデータを一度未定義に書き換えた後に再度初期化する、などの攻撃を引き起こす可能性がある。特に、不揮発性メモリシステムでは、内部メモリ８ではない他の全てのメモリのデータが改ざんされる可能性がある。よって、ＭＭＵによって参照されるページテーブル又はデータは、すべて検証された後に内部メモリ８に配置される必要がある。上述のように、ページテーブルのデータサイズは大きい。プロセッサの内部メモリ８は、例えば、数百キロバイト〜数十メガバイト程度である。したがって、ページテーブルに対する検証を伴うページング処理が必要となる。ページテーブルを階層化すると、どのレベルのテーブルまで検証と読み込みが完了しているかに関する状態管理、及び、各テーブルの参照頻度に応じた状態管理が必要となる。
【０１１５】
さらに、ページテーブル又はデータに対する検証処理も、限られた容量の内部メモリ８を作業領域として完結する必要がある。単純な検証の方法として、データに対する検証子とは別に、ページテーブル専用の検証子を設ける方法が考えられる。しかしながら、階層的なページテーブルはメモリ上の参照関係によって定義されており、必ずしも連続したアドレス領域にマップされていない。例えば、ページテーブルの第１のエントリがアドレス空間上の最下位番地に配置され、第２のエントリが最上位番地に配置され、第１のエントリと第２のエントリとが参照関係を持つことが、仕様上可能である。このような不連続なページテーブルに対して、連続したアドレス領域に記憶される検証子を適用することは、非効率的である。加えて、検証子も、ページテーブルと同様に階層的な構成を持つ場合、検証子のどの段階まで検証が完了しているか認識し、かつ、検証子の検証済みの部分を再利用するための状態管理を行う必要がある。
【０１１６】
そこで、本実施形態では、第２のポイントとして、ページテーブルの階層構造と検証子の階層構造とを整合させている。ページテーブルの階層構造と検証子の階層構造とを整合させ、ページテーブルと検証子とが他の検証子によって保護される。本実施形態では、ページテーブルと検証子とで整合した階層構造を持つことで、ページテーブルと検証子との読み込み状態及び検証状態の管理を共通化し、階層構造のデータ管理の処理負荷を軽減する。そして、情報処理装置５００は、広大かつ不連続に定義されたアドレス領域に対して、効率よく検証子を割り当て、安全に管理する。
【０１１７】
例えば、１ページテーブルに５１２個のエントリを格納する３階層のセキュアページテーブルツリー１２１は、グラフとしては、３階層の５１２分木のグラフである。このようなセキュアページテーブルツリー１２１に対するセキュア検証子ツリー１２２は、セキュアページテーブルツリー１２１と同様に、３階層の５１２分木のグラフとし、両者の構造を整合させる。これにより、セキュアページテーブルツリー１２１とセキュア検証子ツリー１２２の読み込み状態及び検証状態の管理単位が整合する。
【０１１８】
外部メモリ７から内部メモリ８へ未読み込みのページテーブル又はデータに対する参照と未読み込みの検証子に対する参照との検出がそれぞれ個別に行われた場合、ＶＭＭによる処理では、ページテーブル又はデータ、及び検証子に対する参照が発生するたびにゲストＯＳからＶＭＭへの切り替えが発生し、切り替えのオーバーヘッドが大きくなる。本実施形態では、ページテーブルと検証子との階層構造を整合させ、未読み込みのページテーブル及び未読み込みの検証子の２種類の制御データに対する参照の検出を同時に行う。これにより、ゲストＯＳからセキュアＶＭＭ５１６への切り替え回数を低減させ、さらに処理負荷を軽減させることができる。
【０１１９】
次に、本実施形態の第３のポイントを説明する。
【０１２０】
過剰な検証は検証によるオーバーヘッドを増大させることから、本実施形態ではこの削減を図る。
【０１２１】
ページ単位のツリー検証が全保護データに対して行われる場合、アクセスするデータ領域の増加に依存して内部メモリ８へのページング回数が増加し、検証回数も増加する。ここで、ツリー検証とは、セキュア検証子ツリー１２２に基づく検証である。本実施形態では、ページテーブルツリー９及び検証子ツリー１０の階層構造を整合させること、及び、セキュアページテーブルツリー１２１及びセキュア検証子ツリー１２２の階層構造を整合させることで、検証処理の負荷を軽減する。さらに、本実施形態では、１命令当たりの検証によるオーバーヘッド（以下、検証オーバーヘッドという）を削減する。情報処理装置５００の規模が大きい場合、データアクセス領域の増加は避けられないため、ツリー検証の検証回数の増加を抑制する。
【０１２２】
ツリー検証の検証回数の増加を抑制するために、例えば、単純に、データの一部をツリー検証から除外し、別の手法で検証する。外部メモリ７上のデータの中にはＲＯデータとＲＷデータが存在する。本実施形態では、データ更新があるＲＷデータに対してはリプレイ攻撃対策のため、ツリー検証を行う。一方、更新のないＲＯデータに対しては単純な検証でも十分な保護強度を保つことができるため、ツリー検証から除外する。命令実行ユニット５０５は、ツリー検証から除外されたＲＯデータをキャッシュメモリ５０７ａ，５０７ｂ，５０８経由で利用する。これにより、ＯＳデータの多くを占めるＲＯデータが内部メモリ８から除外され、ツリー検証の検証回数を大幅に削減可能である。ＯＳデータは時刻によってＲＯデータとＲＷデータとで性質が切り替わる場合があり、ＲＯデータに対してもリプレイ攻撃対策が必要である。一般的に、リプレイ攻撃を排除するには、データ更新の度に変化する攻撃者が知りえない値（リプレイ攻撃防止情報）を用いて、検証子を生成する必要がある。本実施形態のツリー検証では、このリプレイ攻撃防止情報に基づいて生成される検証子をページテーブル単位に付与し、ページテーブルと検証子との階層構造を整合させることで、検証に必要なデータ量を圧縮し、検証オーバーヘッドの効率化を図る。しかし、キャッシュメモリ５０７ａ，５０７ｂ，５０８経由の単純な検証のためにリプレイ攻撃防止情報が付与される場合、検証子の記憶場所、管理方法が問題となり、全データに対するツリー検証以上の検証オーバーヘッドが生じる場合があり得る。これに対して、本実施形態では、ツリー検証を前提とし、ＲＯデータに限りキャッシュメモリ５０７ａ，５０７ｂ，５０８経由で、ツリー検証と連携した単純な検証を行い、外部メモリ７のデータの完全性保護を実現する。換言すれば、本実施形態では、全データに対する検証子ツリー１０は、ページテーブルツリー９と整合した形で存在する。ＲＷデータは、ツリー検証により内部メモリ８経由で検証される。ＲＯデータは、ＲＯデータに対してのみ有効な検証子によりキャッシュメモリ５０７ａ，５０７ｂ，５０８経由で検証される。
【０１２３】
本実施形態において、ＲＯデータ及びＲＷデータは、共に、ツリー検証によって保護されたページ単位に付与されるリプレイ攻撃防止情報に基づいて検証子が生成される。ＲＷデータの検証子はページ単位に存在する。ＲＯデータの検証子は、キャッシュライン単位に存在する。更新されないＲＯデータは、キャッシュライン単位で検証される。換言すれば、本実施形態では、あるデータに対して、ＲＯアクセス時にはキャッシュライン単位で検証が行われ、ＲＷアクセス時にはページ単位で検証とデータ更新が行われる。
【０１２４】
ここで、ＲＷデータとＲＯデータとの２種類の併用が情報処理装置５００の性能向上に貢献する理由を説明する。ＲＯデータのキャッシュライン検証では、多数のキャッシュライン単位の検証子を計算する初期コストが必要となる。しかしながら、この初期コストと引き換えに、ＲＯデータに対する読み込みと書き込みが繰り返し発生する場合には、キャッシュライン検証は、ページ単位の検証と比較して高速化することができる。ただし、ページ単位のＲＯデータに対する書き換えが頻繁に発生する場合、ページに含まれるキャッシュライン単位の検証子を再計算する初期コストが必要である。このため、ページ単位で１つの検証子を用いる検証の方が、キャッシュメモリ単位の検証よりも、有利な場合がある。典型的な情報処理装置において、命令データは、ほどんど書き換えられることはなく、参照回数は多くなる。そこで、命令データに対しては、初期コストが必要となるが、ＲＯデータとして扱い、頻繁に発生するＲＯデータへの参照のオーバーヘッドを低減する。
【０１２５】
さらに、本実施形態では、ＲＯデータのアクセス単位が小さくなったことにより１検証当たりのデータ利用効率の向上が見込める。一般的にアクセス単位は小さいほうが無駄な読み込みが発生しにくいため、１アクセス当たりのデータ利用効率は高くなる。完全性検証処理においても同様であり、小さい単位のデータのみを検証することで無駄な検証による検証オーバーヘッドの発生を抑制することが可能である。
【０１２６】
（２ステージのアドレス変換）
図３は、２ステージのアドレス変換を実行する構成を例示するブロック図である。
【０１２７】
セキュアＯＳ５１７上でアプリケーション５２０ａ〜５２０ｃが実行され、非セキュアＯＳ５１８上でアプリケーション５２１ａ〜５２１ｃが実行される。
【０１２８】
セキュアＯＳ５１７のゲストページテーブル５２２ａ〜５２２ｃは、アプリケーション５２０ａ〜５２０ｃの仮想アドレスから中間物理アドレスへの変換を定義する。
【０１２９】
セキュアＯＳ５１７は、ゲストページテーブル５２２ａ〜５２２ｃに基づいて、仮想アドレスを中間物理アドレスに変換する。
【０１３０】
非セキュアＯＳ５１８のゲストページテーブル５２３ａ〜５２３ｃは、アプリケーション５２１ａ〜５２１ｃの仮想アドレスから中間物理アドレスへの変換を定義する。
【０１３１】
非セキュアＯＳ５１８は、ゲストページテーブル５２３ａ〜５２３ｃに基づいて、仮想アドレスを中間物理アドレスに変換する。
【０１３２】
セキュアＶＭＭ５１６のＶＭＭページテーブル５２４は、セキュアＯＳ５１７の中間物理アドレスから物理アドレスへの変換を定義する。
【０１３３】
セキュアＶＭＭ５１６のＶＭＭページテーブル５２５は、非セキュアＯＳ５１８の中間物理アドレスから物理アドレスへの変換を定義する。
【０１３４】
セキュアＶＭＭ５１６は、ＶＭＭページテーブル５２４，５２５に基づいて、中間物理アドレスを物理アドレスに変換する。
【０１３５】
ここでは、複数のアプリケーション５２０ａ〜５２０ｃ，５２１ａ〜５２１ｃのうちのアプリケーション５２０ａに基づくアドレス変換について説明するが、他のアプリケーション５２０ｂ〜５２０ｃ，５２１ａ〜５２１ｃに基づくアドレス変換も同様である。
【０１３６】
２ステージのアドレス変換では、まずステージ１で、セキュアＯＳ５１７によるアドレス変換が実行され、次にステージ２で、セキュアＶＭＭ５１６によるアドレス変換が実行される。セキュアＯＳ５１７は、セキュアＶＭＭ５１６によって管理されるゲストＯＳである。セキュアＯＳ５１７によって制御されるアプリケーション５２０ａは、ゲストページテーブル５２２ａと対応付けられる。
【０１３７】
アプリケーション５２０ａは、命令読み込み要求及びデータアクセス要求を仮想アドレスとして発行する。セキュアＯＳ５１７は、仮想アドレスを、ゲストページテーブル５２２ａの定義に基づいて中間物理アドレスに変換する。中間物理アドレスのメモリ領域は、予めセキュアＶＭＭ５１６によって各ゲストＯＳに割り当てられている。各ゲストＯＳは、割り当てられたメモリ領域を、ゲストページテーブルの定義に基づいて、さらに稼働中のアプリケーションに割り当てる。
【０１３８】
セキュアＶＭＭ５１６は、中間物理アドレスを、セキュアＶＭＭ５１６によって管理されるＶＭＭページテーブル５２４の定義に基づいて、物理アドレスに変換する。仮想アドレスとして発行された要求は、この物理アドレスを用いて処理される。
【０１３９】
（セキュアページテーブルツリー１２１のデータ構造）
図４は、アドレス変換とデータ参照とを実行するハードウェア構成及びセキュアページテーブルツリー１２１のデータ構造を例示するブロック図である。
【０１４０】
この図４で示されるセキュアページテーブルツリー１２１は、例えば、４ギガバイトの仮想アドレス空間を持つ。セキュアページテーブルツリー１２１のデータ構造は、様々なアーキテクチャで適用可能である。特定のアーキテクチャでは、物理ページ拡張のため、ステージ１とステージ２でページテーブルのサイズが異なるが、本実施形態では、ステージ１とステージ２とで同一形式のページテーブルが使用される場合を例として説明する。
【０１４１】
プロセッサ５０１は、ＭＭＵ５０６を備える。ＭＭＵ５０６は、セキュアページテーブルツリー１２１の最上位を示すレジスタ５２６を備える。
【０１４２】
レジスタ５２６は、物理アドレスにより最上位のページテーブルT101の上位２０ビットを示す。４キロバイト単位で構成されるページテーブルの下位１２ビットは省略される。レジスタ５２６によってインデックスされる最上位のページテーブルT101は、テーブルエントリE101-0〜E101-3を含む。各テーブルエントリは、８バイトであり、次のレベルのページテーブルへのインデックスと、次のレベルのページテーブルが有効か無効かを示す有効／無効ビットを持つ。
【０１４３】
各テーブルエントリから次レベルのページテーブルへの参照は、ポインタにより行われる。ゆえに、各ページテーブルT101，T101-1，T101-1-0は、メモリでどのような順序で配置されてもよい。同じレベルのページテーブル、例えばレベル２のページテーブルT101-1〜ページテーブルT101-n（ｎは２以上の自然数）についても、メモリにおいてどのような順序で配置されてもよい。
【０１４４】
ページテーブルT101-1-0のテーブルエントリE101-1-0〜E101-1-511は、それぞれ、データB101-0-0〜B101-511-511を参照する。
【０１４５】
図５は、本実施形態に係るブロックの定義を例示する概念図である。
【０１４６】
本実施形態では、ページテーブルツリー９、検証子ツリー１０、セキュアページテーブルツリー１２１、セキュア検証子ツリー１２２を構成するページ単位のブロックを、ページブロックと呼ぶ。ページブロックは、テーブルブロック又はデータブロックである。
【０１４７】
アドレス解決に使用されるページテーブルを、テーブルブロックと呼ぶ。
【０１４８】
実際に読み込み又は書き込みされるデータを、データブロックと呼ぶ。
【０１４９】
あるテーブルブロックから参照可能な１つのページブロックを、参照ブロックと呼ぶ。
【０１５０】
あるテーブルブロックから参照可能な全てのページブロックを、関連ブロックと呼ぶ。
【０１５１】
あるページブロックの参照元となるテーブルブロックを、参照元ブロックと呼ぶ。
【０１５２】
検証に使用されるＭＡＣ値とカウンタ値とは、それぞれ対応するテーブルブロックごとに集約され、管理される。
【０１５３】
ＭＡＣ値を集約して形成されるブロックを、ＭＡＣブロックと呼ぶ。
【０１５４】
カウンタ値を集約して形成されるブロックを、カウンタブロックと呼ぶ。
【０１５５】
あるページブロックに対応するＭＡＣブロックとカウンタブロックとの組合せを、検証ブロックと呼ぶ。なお、カウンタブロックが存在しない場合には、ページブロックに対応するＭＡＣブロックを検証ブロックとする。
【０１５６】
あるページブロックの検証ブロックは、このページブロックの参照元ブロックに付けられる形式を持つ。
【０１５７】
（アドレス変換の詳細）
上記図４を用いて、仮想アドレスMA01=0x40000000が発行された場合を例として、アドレス変換を詳細に説明する。
【０１５８】
仮想アドレスMA01=0x40000000の上位２ビットは01#bである。ページテーブルT101から仮想アドレスの上位２ビット01#bによってインデックスされるテーブルエントリE101-1が参照される。
【０１５９】
次に、テーブルエントリE101-1が持つ次のページテーブルポインタによってアドレス変換が進む。仮想アドレスMA01が0x40000000の場合には、レベル１で選択されるテーブルエントリはE101-1であり、テーブルエントリE101-1によって参照されるレベル２のページテーブルはT101-1である。
【０１６０】
続いて、レベル２で選択されたページテーブルT101-1に対して、仮想アドレスMA01のビット[29:21]によってインデックスされるテーブルエントリが選択される。なお、仮想アドレスのビット[A:B]という表記は、仮想アドレスのAビット目からBビット目までの範囲を表すとする。仮想アドレスMA01のビット[29:21]は全てゼロなので、ページテーブルT101-1のうちのテーブルエントリE101-1-0が選択される。テーブルエントリE101-1-0によって参照されるレベル３のページテーブルはT101-1-0である。
【０１６１】
レベル３で選択されたページテーブルT101-1-0に対して、仮想アドレスMA01のビット[20:12]によってインデックスされるテーブルエントリが選択される。レベル３で選択されるテーブルエントリはE101-1-0-0である。
【０１６２】
このようなアドレス変換により、最終的にデータB101-1-0-0の上位アドレスが決定される。
【０１６３】
（ページテーブルの仮想化）
以下においては、ページテーブルの仮想化について詳細に説明する。
【０１６４】
まず、メモリ空間とページテーブルサイズについて説明する。４ギガバイトの仮想アドレス空間をすべて定義するページテーブルのサイズは、８メガバイト以上になり、物理メモリに固定的にページテーブルを割り当てることはメモリサイズを圧迫する。このため、セキュアＯＳ５１７及びセキュアＶＭＭ５１６は、ページテーブルを仮想化する。
【０１６５】
ページテーブルの仮想化は、テーブルエントリの有効／無効ビットを用いて行う。テーブルエントリE101-1の場合を例にとって説明する。テーブルエントリE101-1の有効／無効ビットが無効状態を示す場合、当該テーブルエントリE101-1の参照先テーブルT101-1は、物理メモリに存在しない。よって、この参照先ページに対するアクセスが発生した場合、ＭＭＵ５０６は、プロセッサ例外(フォールト)を発生させ、参照先ページを物理メモリへ読み込む処理を実行する。フォールトを受けたセキュアＯＳ５１７及びセキュアＶＭＭ５１６は、例えばハードディスクなどの外部デバイス５０３から、参照先テーブルに対応するデータを物理メモリの空きページに記憶し、テーブルエントリE101-1の有効／無効ビットを有効状態に更新し、中断した処理を再開する。
【０１６６】
上記のような制御を行うことで、セキュアＯＳ５１７及びセキュアＶＭＭ５１６は、巨大な仮想アドレス空間を物理メモリに動的に割り当てることが可能となり、限られたメモリを有効に活用することができる。
【０１６７】
上記図４に示すセキュアページテーブルツリー１２１の構造及び機能は、各種の仮想化アドレス変換機構に適用可能である。後述するように、本実施形態においては、メモリ完全性検証に必要なデータ構造を適用し、ゲストＯＳに対して透過的なメモリ完全性検証機構を実現する。
【０１６８】
（仮想化による複数回ページテーブル参照とアドレス変換キャッシュ５０９，５１０）
以下で、仮想化による複数回ページテーブル参照とアドレス変換キャッシュ５０９，５１０について説明する。
【０１６９】
多くのアーキテクチャでは、上記のページテーブルの参照は、ＭＭＵによりハードウェアによる処理で実行される。２階層で仮想化されている場合、上記のアドレス変換が２回行われ、ゲストＯＳのページテーブルへのアクセスも、アドレス変換の対象になる。例えば、２ステージのアドレス変換を行うと、最悪の場合には４×３個のページテーブルへの参照が必要になる。
【０１７０】
データ参照ごとにこのようなページテーブル参照が実行され、オーバーヘッドが増加することを避けるため、アドレス変換の結果をキャッシュするアドレス変換キャッシュ５０９，５１０が用いられる。
【０１７１】
本実施形態では、アドレス変換キャッシュ５０９，５１０による２階層の仮想化状態が適用されるとする。
【０１７２】
２ステージのアドレス変換を行う場合、ＭＭＵ５０６は、アドレス変換キャッシュ５０９，５１０に、ゲストＯＳの仮想アドレスと、仮想アドレスを２回アドレス変換した後に得られる物理アドレスとを対応付けて記憶する。この場合のタグには仮想アドレスが用いられる。次のデータ参照時に、仮想アドレスとアドレス変換キャッシュ５０９，５１０のタグとが一致すれば、ＭＭＵ５０６は、セキュアページテーブルツリー１２１によるアドレス変換を行うことなく、物理アドレスを得ること（アドレス解決）ができる。セキュアページテーブルツリー１２１が複数存在する場合、アドレス変換キャッシュ５０９，５１０は、セキュアページテーブルツリー１２１を識別する識別子とアドレス変換情報とを関連付けて記憶する。識別子としては、例えばセキュアページテーブルツリー１２１の最上位のアドレスを用いてもよい。これにより、同じ仮想アドレスが複数発生しても、正しい物理アドレスを得ることができる。
【０１７３】
アドレス変換はページごとに行われるため、仮想アドレスと物理アドレスとはそれぞれページ内(１２ビット)よりも上位のビットを保持しておくだけでよい。
【０１７４】
アドレス変換キャッシュ５１０は、アドレス変換キャッシュ５０９と機能的に同じであるが、アドレス変換キャッシュ５０９より大容量であり低速である。
【０１７５】
（階層化の概念）
以下に、階層化の概念について説明する。
【０１７６】
例えば、データ参照を高速化するためにキャッシュメモリは２レベルに階層化される。例えば、アドレス変換のためのページテーブルツリーは３レベルに階層化される。例えば、仮想化の制御は２レベルの階層を持っており、３階層のページテーブルによって制御されるアドレス変換が２回適用される。このようなキャッシュメモリのレベル、ページテーブルツリーの階層、仮想化における複数回のアドレス変換の回数（ステージ数）は直交した概念であり、論理的には任意の組み合わせが可能である。例えばキャッシュメモリは３レベルに階層化され、アドレス変換のためのページテーブルツリーは３レベルに階層化され、仮想化によるアドレス変換は２ステージとしてもよい。
【０１７７】
図６は、本実施形態に係る情報処理装置５００によるデータ取得及びアドレス変換の概念を例示するブロック図である。
【０１７８】
命令実行ユニット５０５は、キャッシュメモリ５０７ａ又はキャッシュメモリ５０７ｂ、キャッシュメモリ５０８にデータが存在しない場合に、内部メモリ８からデータを取得する。
【０１７９】
命令実行ユニット５０５は、アドレス変換が必要な場合に、ＭＭＵ５０６に仮想アドレスを送る。
【０１８０】
ＭＭＵ５０６は、アドレス変換キャッシュ５０９，５１０に記憶されているアドレス変換情報に基づいて、仮想アドレスを物理アドレスに変換することができない場合に、セキュアページテーブルツリー１２１に基づく２ステージのアドレス変換を実行する。
【０１８１】
このアドレス変換において、ページテーブル又はデータにページフォールトが発生すると、ページフォールトの発生したページテーブル又はデータが、ページングに基づいて、外部メモリ７から内部メモリ８にコピーされる。
【０１８２】
（情報処理装置５００の初期状態）
上述のアドレス変換および仮想化機構を前提として、以下本実施形態に係る情報処理装置５００の初期状態を概説する。
【０１８３】
初期状態において、セキュアＶＭＭ５１６、及び、セキュアＶＭＭ５１６によって管理されるセキュアＯＳ５１７と非セキュアＯＳ５１８は、休眠状態である。セキュアＯＳ５１７と非セキュアＯＳ５１８とは、ゲストＯＳである。セキュアＶＭＭ５１６、セキュアＯＳ５１７、非セキュアＯＳ５１８は、不揮発性の外部メモリ７に退避されている。
【０１８４】
本実施形態において、セキュアＶＭＭ５１６及びセキュアＯＳ５１７の完全性及び秘匿性の信頼の基盤（Root of Trust）となる鍵情報とＭＡＣ値は、プロセッサ５０１の内部に記憶される。より具体的に説明すると、プロセッサ５０１は、鍵保存ユニット５１３を備える。鍵保存ユニット５１３は、秘密鍵とルート検証情報１３とを記憶する。プロセッサ５０１が書き換え可能な記憶領域を備えていない場合、プロセッサ５０１は、安全なメモリとして、鍵保存ユニット５１３に記憶されている固定鍵に基づいてバインドされる外部のＴＰＭ（Trusted Platform Module）における不揮発性メモリを用いてもよい。ホストのプロセッサ５０１とＴＰＭとの間で認証が行われることで、ＴＰＭの情報が確実にプロセッサ５０１と対応付けられる。
【０１８５】
（メモリマップとエンティティ）
図７は、本実施形態に係るメモリマップを例示する図である。
【０１８６】
情報処理装置５００のメモリは、例えば、内部メモリ８、マスクＲＯＭ（Read Only Memory）５１９ａ、セキュアＶＭＭ永続的（Persistent）領域５１９ｂ、非セキュアＯＳ領域５１９ｃ、予備領域５１９ｄ、セキュアＯＳ領域５１９ｅを含む。内部メモリ８は、割込ベクタ格納領域５１９ｆ、セキュアＶＭＭプログラム領域５１９ｇ、バッファ領域５１９ｈを含む。バッファ領域５１９ｈは、バッファ管理情報領域５１９ｉ、検証バッファ領域５１９ｊ、一時バッファ領域５１９ｋを含む。セキュアＶＭＭ永続的領域５１９ｂ、非セキュアＯＳ領域５１９ｃ、予備領域５１９ｄ、セキュアＯＳ領域５１９ｅは外部メモリ７に配置される。
【０１８７】
セキュアＶＭＭ永続的領域５１９ｂは、セキュアＶＭＭプログラム領域５１９ｌ、物理アドレス領域５１９ｍ，５１９ｎ、セキュアＯＳページテーブル領域５１９ｏ、セキュアＶＭＭ作業領域５１９ｐ、セキュアＶＭＭ ＭＡＣ領域５１９ｑ、予備領域５１９ｒを含む。物理アドレス領域５１９ｍは、レベル１，２のページテーブル、カウンタ値、ＭＡＣ値を記憶する。物理アドレス領域５１９ｎは、レベル３のページテーブル、ページテーブルのカウンタ値及びＭＡＣ値、及び、データ、データのカウンタ値及びＭＡＣ値を記憶する。レベル３の物理アドレス領域５１９ｎは、セキュアＶＭＭ５１６に対するレベル３エントリ領域５１９ｓ、セキュアＯＳ５１７に対するレベル３エントリ領域５１９ｔ、非セキュアＯＳ５１８に対するレベル３エントリ領域５１９ｕを含む。
【０１８８】
セキュアＶＭＭ５１６は、セキュアブートされる。セキュアＶＭＭ５１６のうちの検証を行うカーネル部分は、外部メモリ７に対する改ざん攻撃から防御するために、安全なメモリに常駐される。本実施形態においては、安全なメモリの一例として、プロセッサ５０１のチップ内の内部メモリ８が適用される。本実施形態では、セキュアＶＭＭ５１６によるメモリ検証機能は、内部メモリ８に常駐されるメモリ検証プログラムによって実現される。セキュアＶＭＭ５１６のうち、メモリ検証プログラムではない他のプログラム、例えば、デバイス仮想化機能のためのプログラムなどは、ページング及び検証により、オンデマンドで内部メモリ８に記憶され、実行されてもよい。
【０１８９】
外部メモリ７に記憶されているセキュアＶＭＭ５１６は、マスクＲＯＭ５１９ａに記憶されているプログラムに基づいて例えば起動時に検証され、その後、内部メモリ８のセキュアＶＭＭ５１６のプログラム領域５１９ｇに記憶される。
【０１９０】
検証子ツリー１０は、外部メモリ７のセキュアＶＭＭ永続的領域５１９ｂに記憶される。検証子ツリー１０のうちのセキュアＶＭＭ５１６によって検証された部分が、内部メモリ８のバッファ領域５１９ｈ内の検証バッファ領域５１９ｊに記憶される。
【０１９１】
バッファ領域５１９ｈは、セキュアＶＭＭ５１６によって用いられるデータ領域である。バッファ管理情報領域５１９ｉは、バッファ管理情報、セキュアＶＭＭ５１６で使用される変換リストを記憶する。検証バッファ領域５１９ｊは、検証対象データを記憶する。検証バッファ領域５１９ｊのうちの未使用の領域を、検証バッファ空き領域と呼ぶ。一時バッファ領域５１９ｋは、セキュアＶＭＭ５１６の検証時に、一時的に利用されるデータを記憶する。バッファ領域５１９ｈのバッファ管理情報とは、バッファ領域５１９ｈの使用状況を表す情報であり、例えば、記憶されている又は記憶されていないデータの種別、量、使用頻度などを含む。
【０１９２】
メモリマップは、さらに、非セキュアＯＳ５１８の記憶領域５１９ｄ、セキュアＯＳ５１７の記憶領域５１９ｅを含む。
【０１９３】
（検証計算の方法）
以下に、本実施形態に係る検証計算の方法について説明する。
【０１９４】
１ページのサイズは４０９６バイト、アドレスサイズは８バイト（６４ビット）、カウンタサイズは１６バイト（１２８ビット）として説明する。しかしながら、各サイズはこれに限定されず、他のサイズを用いてもよい。
【０１９５】
検証計算で用いられるパラメータを以下で説明する。
【０１９６】
Addrは、検証対象ページテーブルの先頭アドレスである。
【０１９７】
D[Addr]は、Addrで始まるiページ分のデータであり、iは任意の自然数である。
【０１９８】
Ctr[Addr]はAddrで始まるページに紐付けられたカウンタ値である。
【０１９９】
Kはメモリ領域全体で共通に使われる機密値である。Kは、常にプロセッサ５０１の内部に記憶される。例えば、Kは、鍵保存ユニット５１３に記憶される。
【０２００】
Ekは秘密鍵Kによるj-bitブロック暗号である。本実施形態において、暗号化アルゴリズムは、j=128であるAES128であるとする。例えば、ブロック長は１６バイト（１２８ビット）とする。しかしながら、AES128ではない他の暗号アルゴリズムを用いてもよい。
【０２０１】
Paddingはバディングである。
【０２０２】
暗号演算については、Y=MAC[Ek](X)という標記を用いる。ＭＡＣ値Yは、入力Xを共通鍵ブロックサイズに分割した[X0,X1,…,Xn]に対し、秘密鍵Kに基づく共通鍵ブロックベースの固定長ＣＭＡＣアルゴリズムを適用し、計算される。ＭＡＣ値Y、秘密鍵kのデータサイズは、共通鍵ブロックサイズと一致する。入力Xを共通鍵ブロックサイズに分割できない場合は、パディングPaddingが用いられる。
【０２０３】
アドレスAddrから始まるiページ分のデータD[Addr]のＭＡＣ値Yは、D[Addr]を共通鍵ブロックサイズに分割した[D0,D1,D2…D255i]と、Dに紐付けられたカウンタ値Ctr[Addr]、アドレスAddr、パディングPaddingに基づいて、次式で計算される。
【０２０４】
Y=MAC[Ek]([D0,D1,…,D255i] || Ctr[Addr] || Addr || Padding)
D[Addr]、Ctr[Addr]、Addrは、いずれの順番で入力されてもよい。Paddingは、ＭＡＣ関数への入力が共通鍵ブロックサイズに分割できる場合は利用しなくてもよい。アドレスAddrから始まるデータD[Addr]のサイズは、検証子ツリーの構成にしたがって同一の検証ツリー内でも異なる場合がある。
【０２０５】
Ctr[Addr]は、検証対象データのバージョン管理に用いられる。よって、データの読み込み時にはCtr[Addr]はそのまま使用される。データの書き戻し時には、Ctr[Addr]はインクリメントしてから使用される。
【０２０６】
本実施形態において、アドレスAddrは、外部メモリ７のアドレスとして説明する。しかしながら、アドレスAddrは、中間物理アドレスでもよい。
【０２０７】
（セキュア検証子ツリー１２２の構造）
以下に、本実施形態に係るセキュア検証子ツリー１２２のデータ構造について説明する。
【０２０８】
本実施形態では、セキュアページテーブルツリー１２１のデータ構造とセキュア検証子ツリー１２２のデータ構造とを整合させることにより、アドレス解決とデータ検証とを同時に行う。
【０２０９】
セキュアページテーブルツリー１２１とセキュア検証子ツリー１２２との第１のデータ構造として、ページテーブルとＭＡＣ値とで形成されるツリー構造（ＭＡＣツリー構造）を説明する。セキュアページテーブルツリー１２１とセキュア検証子ツリー１２２との第２のデータ構造として、ページテーブルとＭＡＣ値とバージョンを管理するためのカウンタ値とで形成されるツリー構造（ＭＡＣ＋カウンタ構造）を説明する。
【０２１０】
本実施形態では、１ページが４キロバイト、カウンタ値が８バイト、ＭＡＣ値が８バイトの場合を例として説明する。本実施形態においては、テーブルブロックとカウンタブロックとが連続したアドレスに存在するとして説明するが、テーブルブロックとカウンタブロックとでアドレス空間を分けてもよい。
【０２１１】
（ＭＡＣツリー構造）
図８は、本実施形態に係るセキュアページテーブルツリー１２１及びセキュア検証子ツリー１２２のＭＡＣツリー構造を例示するデータ構造図である。
【０２１２】
各データブロックのＭＡＣ値は、データブロックの内容とその配置アドレスとに基づいて生成され、生成されたデータブロックのＭＡＣ値は、そのデータブロックを参照する参照元ブロックに付されるＭＡＣブロックで管理される。上述したように、ＭＡＣブロックは検証ブロックに相当する。
【０２１３】
その一方で、テーブルブロックの検証に用いられるＭＡＣ値は、このテーブルブロックの内容、このテーブルブロックに付されるＭＡＣブロックの内容、そのテーブルブロックの配置アドレスに基づいて、生成される。生成されたテーブルブロックの検証に用いられるＭＡＣ値は、上記のデータブロックのＭＡＣ値と同様に、このテーブルブロックの参照元ブロックに付されるＭＡＣブロックで管理される。この操作を続けていくと、最終的に１つのＭＡＣブロックを頂点とする大規模なツリー構造が形成される。
【０２１４】
例えば、データブロックB201-1-0-511のＭＡＣ値M201-1-0-511は、データブロックB201-1-0-511とアドレスaddr(B201-1-0-511)とに基づいて生成される。
【０２１５】
例えば、テーブルブロックT201-1-0の検証に用いられるＭＡＣ値M201-1-0は、テーブルブロックT201-1-0、このテーブルブロックT201-1-0に付されるＭＡＣブロックT202-1-0、テーブルブロックT201-1-0のアドレスaddr(T201-1-0)に基づいて生成される。データブロックB201-1-0-511のＭＡＣ値M201-1-0-511は参照元ブロックT201-1-0に付随するＭＡＣブロックT202-1-0に、テーブルブロックT201-1-0のＭＡＣ値M201-1-0は参照元ブロックT201-1に付随するＭＡＣブロックT202-1に含まれる。
【０２１６】
ＭＡＣツリー構造において正当性を保証するために、テーブルブロックとこのテーブルブロックに付されるＭＡＣブロックとが同時に読み込まれ、検証される。例えば、テーブルブロックT201-1-0が読み込まれる場合には、このテーブルブロックT201-1-0と合わせてＭＡＣブロックT202-1-0が読み込まれ、テーブルブロックT201-1-0とＭＡＣブロックT202-1-0とを用いて検証が実行される。ＭＡＣツリー構造においては、下位ブロック（子ブロック）の正当性が上位ブロック（親ブロック）に付されているＭＡＣブロックによって保証される。したがって、下位ブロックの検証時には上位ブロックに付されているＭＡＣブロックが検証済みであることが必要である。
【０２１７】
（ＭＡＣ＋カウンタ構造）
図９は、本実施形態に係るセキュアページテーブルツリー１２１及びセキュア検証子ツリー１２２のＭＡＣ＋カウンタ構造を例示するデータ構造図である。
【０２１８】
カウンタ値は、テーブルエントリ単位に設定され、参照ブロックのバージョン管理に使用される。カウンタ値は、値の重複を回避できる条件を満たし、データ又はページテーブルが更新される度に変化する値であればよく、カウントアップ又はカウントダウンされる値でなくてもよい。
【０２１９】
各データブロックのＭＡＣ値は、データブロックの内容と配置アドレスとカウンタ値とに基づいて生成され、使用されたカウンタ値と生成されたデータブロックのＭＡＣ値とはその参照元ブロックに付されたカウンタブロックとＭＡＣブロックとで管理される。一方、テーブルブロックのＭＡＣ値は、テーブルブロック、テーブルブロックに付されているカウンタブロック、テーブルブロックの配置アドレス、テーブルブロックのカウンタ値に基づいて生成される。使用されたカウンタ値と生成されたテーブルブロックのＭＡＣ値は、その参照元ブロックに付されたカウンタブロック、ＭＡＣブロックで管理される。このような操作を続けていくと、一段上位のテーブルブロックに付される検証ブロックに含まれるカウンタブロックでバージョン管理を行い、ＭＡＣブロックで改ざん検証を行う小規模なツリー型データを構成することができる。
【０２２０】
例えば、データブロックB301-1-0-511のＭＡＣ値M301-1-0-511は、データブロックB301-1-0-511、アドレスaddr(B301-1-0-511)、カウンタ値C301-1-0-511に基づいて生成される。
【０２２１】
一方、テーブルブロックT301-1-0のＭＡＣ値M301-1-0は、テーブルブロックT301-1-0、カウンタブロックT302-1-0、アドレスaddr(T301-1-0)、テーブルブロックT301-1-0のカウンタ値C301-1-0に基づいて生成される。
【０２２２】
データブロックB301-1-0-511のカウンタ値C301-1-0-511、ＭＡＣ値M301-1-0-511は、参照元ブロックT301-1-0に付されているカウンタブロックT302-1-0、ＭＡＣブロックT303-1-0に含まれる。
【０２２３】
テーブルブロックT301-1-0のカウンタ値C301-1-0、ＭＡＣ値M301-1-0は、参照元ブロックT301-1に付されているカウンタブロックT302-1、ＭＡＣブロックT303-1に含まれる。
【０２２４】
ＭＡＣ＋カウンタ構造では、テーブルブロックの読み込み時に、テーブルブロックとこのテーブルブロックに付されているカウンタブロックとを共に読み込み、検証する必要がある。しかしながら、テーブルブロックとこのテーブルブロックに付されているＭＡＣブロックとを共に読み込み、検証する必要はない。この理由は、あるページブロックの正しいＭＡＣ値を生成するためには、その上位ブロックに付されているカウンタ値が必要であり、ＭＡＣブロック自体はＭＡＣ値生成に関係しないためである。
【０２２５】
（セキュアページテーブルツリー１２１とページテーブルツリー９）
図１０は、セキュアページテーブルツリー１２１とページテーブルツリー９との関係の一例を示すデータ構造図である。
【０２２６】
内部メモリ８は、アドレス変換に用いられるセキュアページテーブルツリー１２１を記憶する。レジスタ５２６は、内部メモリ８のセキュアページテーブルツリー１２１の最上位テーブルＴ４０１を参照する。レジスタ５２６によって参照されるセキュアページテーブルツリー１２１の定義に基づいて、物理アドレスへの変換が実行され、命令実行ユニット５０５によってメモリ参照が実行される。
【０２２７】
内部メモリ８のセキュアページテーブルツリー１２１を生成するための元データとなるページテーブルツリー９の全体は、外部メモリ７に記憶されている。本実施形態においては、外部メモリ７に記憶されているページテーブル９は、アドレス変換テーブルとして直接参照されることはなく、セキュアページテーブルツリー１２１の元データであることを除いて、特別な機能を持たない。外部メモリ７のページテーブルツリー９は改ざんの危険があるため、本実施形態においては、外部メモリ７のページテーブルツリー９が、検証なしに直接アドレス変換に利用されることを避ける。アドレス変換に用いられるのは、内部メモリ８に記憶されているセキュアページテーブルツリー１２１である。セキュアページテーブルツリー１２１は、ページテーブルツリー９のサブセットである。
【０２２８】
本実施形態に係る情報処理装置５００は、外部メモリ７に記憶されているページテーブルツリー９及びデータの必要部分に対して、内部メモリ８へのコピーとセキュア検証子ツリー１２２に基づく検証を行い、既に内部メモリ８に記憶済みのセキュアページテーブルツリー１２１及びデータに追加する。情報処理装置５００は、内部メモリ８に記憶されていないページテーブル又はデータが参照され参照データがＲＷデータの場合に、ページフォールトを発生させ、セキュアＶＭＭ５１６がページテーブルツリー９又はデータの必要部分を検証し、検証結果が正当であれば内部メモリ８に記憶する。
【０２２９】
（データブロックの記憶先とアドレス、外部メモリ７のページテーブルツリー９の構成）
以下で、データブロックの記憶先とアドレス、及び、外部メモリ７のページテーブルツリー９の構成について説明する。
【０２３０】
本実施形態においては、ＲＷデータが参照される場合に、外部メモリ７に記憶されたページブロックを、物理改ざんに対して安全な内部メモリ８に一時的にコピーし、処理を実行し、処理後の結果を元の外部メモリ７に書き戻す。
【０２３１】
したがって、同一のページブロックが外部メモリ７のアドレスと内部メモリ８のアドレスとに記憶される場合がある。説明を簡略化するために、データブロックB401-0-0-511が記憶されている外部メモリ７のアドレスをEaddr(B401-0-0-511)と表記する。データブロックB401-0-0-511が記憶されている内部メモリ８のアドレスをIaddr(B401-0-0-511)と表記する。厳密に言えば内部メモリ８のアドレスは、検証バッファ領域５１９ｊに動的に確保される。このため、Iaddr(B401-0-0-511)の値は、同一のデータブロックB401-0-0-511についても読み込みの度に変化する。しかしながら、以下の読み込みと書き戻しの一連の動作の説明では、この変化を考慮する必要がないため、単純にIaddr(B401-0-0-511)と表記する。
【０２３２】
外部メモリ７に記憶されているページテーブルの各エントリには、Eaddr(B401-0-0-511)のように参照ブロックの外部メモリ７のアドレスが記憶される。ただし、ＭＭＵ５０６が認識するページテーブルの実体は、外部メモリ７に記憶されたページテーブルではなく、内部メモリ８に記憶されるとともに検証されたページテーブルである。ＭＭＵ５０６は、内部メモリ８に記憶されるとともに検証されたページテーブルを参照する。例えば、上記の図１０において、レジスタ５２６によって参照される実体のアドレスは、Iaddr(T401)である。ページテーブルT401-0-0の外部メモリ７のアドレスEaddr(T401-0-0)は、ページテーブル構築時に与えられており、最上位のページテーブルT401から順番に検証読み込みを行うことでアドレス解決を実行することができる。一方、ページテーブルT401-0-0の内部メモリ８上のアドレスIaddr(T401-0-0)は、内部メモリ８の一時バッファ領域５１９ｋにおけるメモリ確保時に決められる。
【０２３３】
（ＲＯデータ及びＲＷデータの検証単位）
本実施形態では、ＲＯデータとＲＷデータとは異なる検証粒度と検証方法により検証される。したがって、ＲＯデータに使用されるＭＡＣ計算と、ＲＷデータに使用されるＭＡＣ計算とは、異なる。ＲＯデータは、キャッシュライン単位で検証される。このため、ＲＯデータには、キャッシュライン単位でＭＡＣ値が生成される。キャッシュライン単位に生成されたＭＡＣ値をキャッシュラインＭＡＣ値という。ＲＷデータは、ページ単位で検証される。ページ単位で生成されたＭＡＣ値をブロックＭＡＣ値という。例えば、あるページブロックに対するキャッシュラインＭＡＣ値の数は、このページブロックに対して割り当てられるキャッシュライン数となる。あるページブロックに対するブロックＭＡＣ値の数は、１つである。データに対してブロックＭＡＣ値は必ず存在するが、キャッシュラインＭＡＣ値は一度もＲＯデータとしてアクセスされなければ必ずしも必要ない。
【０２３４】
（ツリー検証）
以下では、ＲＷデータに対するツリー検証について説明する。
【０２３５】
本実施形態のツリー検証は、外部メモリ７に記憶されているＲＷデータのページブロックを読み込み、物理改ざんに対して安全な内部メモリ８に一時的にコピーし、処理を行い、処理後のページブロックを内部メモリ８から元の外部メモリ７に書き戻す処理と併せて、実行される。ツリー検証は、セキュアＶＭＭ５１６により外部メモリ７から内部メモリ８へのコピー、又は、内部メモリ８から外部メモリ７への書き戻しの際に、セキュア検証子ツリー１２２によって一括管理されているセキュアページテーブルツリー１２１とその参照先のリプレイ攻撃防止情報とに基づいて実行される。リプレイ攻撃防止情報は、攻撃者によって改ざんできず、データの更新のたびに更新される情報であればどのような値でもよい。セキュア検証子ツリー１２２において、例えば、リプレイ攻撃防止情報は、ＭＡＣツリー構造におけるページブロック全体のＭＡＣ値としてもよく、ＭＡＣ＋ツリー構造におけるカウンタ値としてもよい。上述したように、セキュアページテーブルツリー１２１をセキュア検証子ツリー１２２のＭＡＣ値を用いて検証するデータ構造を、ＭＡＣツリー構造という。セキュアページテーブルツリー１２１をセキュア検証子ツリー１２２のＭＡＣ値及びカウンタ値を用いて検証するデータ構造を、ＭＡＣ＋カウンタ構造という。
【０２３６】
ツリー検証は、アドレス解決時に内部メモリ８に存在しないデータに対してページフォールトを発生させることにより検証を行う。ページフォールトはテーブルエントリを予め無効と設定しておくことで実現し、ブロックＭＡＣ値を使用して、ページ単位で検証を行う。
【０２３７】
（ＭＡＣ比較検証の説明）
以下では、単純な検証であるＲＯデータに対するＭＡＣ比較検証について説明する。単純な検証とは、例えば、データ読み込み時に生成されたＭＡＣ値と予め生成されたＭＡＣ値との比較を行うことでデータの改ざんを検出する方法とし、予め生成されるＭＡＣに対して特別な保護を行わない。
【０２３８】
ＭＡＣ比較検証で使用されるキャッシュラインＭＡＣ値は、アドレス解決に用いられる最下位ページテーブルに付随するセキュア検証子ツリー１２２のリプレイ攻撃防止情報を使って生成し、外部メモリ７に記憶する。ＲＯデータに対応するリプレイ攻撃防止情報は、ＲＯデータに対するアドレス解決処理時点で、すでに検証済みとして内部メモリ８に記憶されており、攻撃者は改ざんすることができない。
【０２３９】
ＭＡＣ比較検証は、キャッシュミスによる外部メモリ７からのデータ読み込み時に、ＭＡＣ比較検証が必要と設定されているデータに対して行う。ＭＡＣ比較検証の要否はアドレス解決時に設定し、検証は専用ハードウェアによって行う。
【０２４０】
（ＭＭＵ５０６による検証状態の管理）
本実施形態においては、アクセス権限、すなわち、ＲＯアクセス／ＲＷアクセスで、検証のタイミングが異なるため、重複検証を避けるために、検証状態を管理する必要がある。本実施形態では、例えば、この検証状態の管理をＭＭＵ５０６で実行する。
【０２４１】
アドレス解決時、ＭＭＵ５０６は、無効であるテーブルエントリにアクセスすると、この無効のテーブルエントリのアクセス権限をチェックする。ＭＭＵ５０６は、チェックの結果、アクセス権限がＲＷアクセスの場合は、そのままページフォールトを発生させてツリー検証を行い、ＲＯアクセスの場合は、ページフォールトをスキップすることでツリー検証を回避する。
【０２４２】
ＭＭＵ５０６は、ツリー検証が回避されたＲＯデータに対して、外部メモリ７からキャッシュメモリ５０８にキャッシュフィルされる場合に、ＭＡＣ比較検証を行う。一方、ＭＭＵ５０６は、ツリー検証により内部メモリ８に記憶されたデータを、キャッシュメモリ５０８を経由することなく、命令実行ユニット５０５に送る。このため、ツリー検証が回避されなかった場合には、ＭＡＣ比較検証は発生しない。
【０２４３】
上記のような制御をＭＭＵ５０６が行うことにより、２種類の検証が重複して発生することを防止する。
【０２４４】
（キャッシュラインＭＡＣ値の管理機構）
本実施形態においては、検証のために、セキュア検証子ツリー１２２の管理に加えて、ＲＯデータを検証するためのキャッシュラインＭＡＣ値の管理も必要である。本実施形態において、このようにキャッシュラインＭＡＣ値を管理するための機構を、キャッシュラインＭＡＣ管理機構とする。一般的に、キャッシュラインサイズのデータはページサイズにまとめて管理されることから、キャッシュラインＭＡＣ値もページサイズ単位で管理される。キャッシュラインＭＡＣ値をページサイズに集約したブロックを、キャッシュラインＭＡＣブロックという。
【０２４５】
キャッシュラインＭＡＣブロックの管理方法の第１の例として、キャッシュラインＭＡＣブロックに対応するページブロックの参照元ページテーブルと共に管理するページテーブル型があり、第２の例として、データブロックと同様な動的管理を行う独立型がある。ページテーブル型と独立型とでは、メモリ配置方法とアドレス管理方法とが異なる。
【０２４６】
ページテーブル型では、キャッシュラインＭＡＣブロックを最下位テーブルブロックと同じメモリ空間で管理する。そのため、ページテーブル型では、全メモリ空間における固定割り当て領域は増加するが、各キャッシュラインＭＡＣ値のアドレスは、テーブルブロックからのオフセットを用いて解決することができる。
【０２４７】
例えば、ページテーブル型では、キャッシュラインＭＡＣブロックが、レベル３ページテーブルとそのページテーブルに付随する検証ブロックとが配置される物理アドレス領域５１９ｎに配置される。
【０２４８】
一方、独立型では、キャッシュラインＭＡＣブロックをデータブロックと同じメモリ空間で管理する。そのため、独立型では、キャッシュラインＭＡＣブロックの動的メモリ割り当てが可能となるが、各キャッシュラインＭＡＣブロックのアドレスを解決するためには、別途アドレスを解決する手段（アドレス変換テーブルなど）を備える必要がある。
【０２４９】
例えば、独立型では、キャッシュラインＭＡＣブロックが、ゲストＯＳデータが配置されるセキュアＯＳ領域５１９ｅに配置される。
【０２５０】
いずれの管理方法であっても、キャッシュラインＭＡＣ値自体の生成方法は同じであり、キャッシュラインの内容とそのアドレス、そのキャッシュラインのデータを含むページブロックに対応するリプレイ攻撃防止情報に基づいて、生成される。また、キャッシュラインＭＡＣ値のアドレスは、配置アドレスを偽造するような攻撃を防止するため、その正当性が保証されている必要がある。通常、この保証はツリー検証により行う。
【０２５１】
本実施形態は、ページテーブル型及び独立型ではない他の管理方法であっても、ＲＯデータの検証時に、キャッシュ検証部５１４がキャッシュラインＭＡＣ値を取得することで、実施可能である。
【０２５２】
（検証処理発生までの処理）
以下で、図１１乃至図１３を用いて、本実施形態によるＲＯデータ及びＲＷデータに対する検証処理発生までの処理を説明する。以下で発生するアドレス変換は、ステージ２ページテーブルを使用する処理であり、ステージ１ページテーブルを使用するアドレス変換はすでに終了しているとする。
【０２５３】
データブロックは、ＲＯデータの場合もあり、ＲＷデータの場合もある。テーブルブロックは、ＲＷデータとするが、ＲＯデータであっても正しく処理可能である。
【０２５４】
ＲＯデータの参照要求が発行されると、内部メモリ８のツリー検証されたテーブルブロックが参照され、外部メモリ７のＲＯデータのデータブロックがキャッシュメモリ５０８を経由して参照される。
【０２５５】
図１１は、本実施形態に係るデータ参照処理を例示するフローチャートである。
【０２５６】
命令実行ユニット５０５は、ステップＳ００１において、データ参照要求をＭＭＵ５０６に発行する。
【０２５７】
ＭＭＵ５０６は、ステップＳ００２において、アドレス変換キャッシュ５０９，５１０に、仮想アドレスと物理アドレスとのアドレス変換情報がキャッシュされているか確認する。
【０２５８】
アドレス変換情報がアドレス変換キャッシュ５０９，５１０にキャッシュされている場合（ＴＬＢヒットの場合）、処理はステップＳ００６に移動する。
【０２５９】
アドレス変換情報がアドレス変換キャッシュ５０９，５１０にキャッシュされていない場合（ＴＬＢミスの場合）、ＭＭＵ５０６は、ステップＳ００３において、アドレス解決処理を実行し、ステップＳ００４において、解決されたアドレス変換情報をアドレス変換キャッシュ５０９，５１０にキャッシュする。
【０２６０】
ステップＳ００５において、ＭＭＵ５０５は、アドレス解決処理で取得されたＭＡＣ比較検証情報を、アドレス変換キャッシュ５０９，５１０にキャッシュする。ＭＡＣ比較検証情報は、ＭＡＣ比較検証の検証要否情報及びリプレイ攻撃防止情報などを含む。
【０２６１】
ステップＳ００６において、ＭＭＵ５０６は、参照要求されたデータを、解決されたア物理アドレスから取得するデータ取得処理を実行する。
【０２６２】
図１２は、本実施形態に係るアドレス解決処理を例示するフローチャートである。
【０２６３】
この図１２で示すアドレス解決処理は、データ参照処理で発生する。
【０２６４】
ステップＳ１０１において、ＭＭＵ５０６は、アドレス解決処理を開始すると、ページウォークによるアドレス解決を行う。
【０２６５】
ステップＳ１０２において、ＭＭＵ５０６は、ページウォーク中にテーブルエントリが無効か否かチェックする。
【０２６６】
テーブルエントリが有効の場合、処理はステップＳ１０９に移動する。
【０２６７】
テーブルエントリが無効の場合、ＭＭＵ５０６は、ステップＳ１０３において、テーブルエントリのアクセス権限をチェックする。
【０２６８】
テーブルエントリがＲＷアクセスを示す場合、制御はＭＭＵ５０６からセキュアＶＭＭ５１６に移り、セキュアＶＭＭ５１６はステップＳ１０４においてツリー検証処理を実行する。ツリー検証処理終了後、セキュアＶＭＭ５１６は、無効であった検証されたテーブルエントリを有効にし、制御をセキュアＶＭＭ５１６からＭＭＵ５０６に移す。
【０２６９】
ＭＭＵ５０６は、ステップＳ１０５において、ツリー検証後設定処理を実行し、ＭＡＣ比較検証情報に含まれている検証要否情報を検証不要とする。
【０２７０】
上記のステップＳ１０３においてテーブルエントリがＲＯアクセスを示す場合、ＭＭＵ５０６は、ステップＳ１０６において、キャッシュラインＭＡＣ値の有効／無効をチェックする。
【０２７１】
キャッシュラインＭＡＣ値が有効の場合、処理は、ステップＳ１０８に移動する。
【０２７２】
キャッシュラインＭＡＣ値が無効の場合、ステップＳ１０７において、セキュアＶＭＭ５１６及びセキュアＤＭＡコントローラ５１１は、キャッシュラインＭＡＣ値の生成処理を実行する。
【０２７３】
ステップＳ１０８において、ＭＭＵ５０６は、ＭＡＣ比較検証設定処理を実行する。ＭＡＣ比較検証処理では、ＭＭＵ５０６は、テーブルエントリを有効にし、ＭＡＣ比較検証情報に、リプレイ攻撃防止情報を設定し、検証要否情報を検証必要とする。
【０２７４】
ステップＳ１０９において、ＭＭＵ５０６は、データブロックまでのアドレスが解決したかチェックする。
【０２７５】
アドレスが解決していない場合には、処理はステップＳ１０１に戻る。これにより、アドレスが解決するまでページウォークが繰り返される。
【０２７６】
アドレスが解決した後、ステップＳ１１０において、ＭＭＵ５０６は、データ参照処理を再開し、アドレス解決処理を終了する。
【０２７７】
このように、ツリー検証処理は、ステージ２ページテーブルツリーのページフォールトによるアドレス解決処理時にセキュアＶＭＭ５１６によって逐次実行される。
【０２７８】
図１３は、本実施形態に係るデータ取得処理を例示するフローチャートである。この図１３で示すデータ取得処理は、データ参照処理で発生する。
【０２７９】
データ取得処理は、命令実行ユニット５０５がデータを取得するための処理である。命令実行ユニット５０５は、データがキャッシュメモリ５０７ａ，５０７ｂにキャッシュされている場合、キャッシュメモリ５０７ａ，５０７ｂからデータを取得する。命令実行ユニット５０５は、データがキャッシュメモリ５０７ａ，５０７ｂにキャッシュされていない場合、データがキャッシュメモリ５０８にキャッシュされているか否かチェックする。命令実行ユニット５０５は、データがキャッシュメモリ５０８にキャッシュされていない場合、ＲＷデータを内部メモリ８から取得し、ＲＯデータを外部メモリ７からキャッシュメモリ５０８経由で取得する。
【０２８０】
なお、本実施形態においては、データがキャッシュメモリ５０７ａ，５０７ｂにキャッシュされいない場合に、命令実行ユニット５０５は、ＲＷデータを内部メモリ８から取得し、ＲＯデータをキャッシュメモリ５０８から取得してもよい。
【０２８１】
命令実行ユニット５０５は、データ取得処理を開始し、ステップＳ２０１において、アドレス変換キャッシュ５０９，５１０に基づいて、データ取得先の物理アドレスと仮想アドレスとのアドレス変換情報を取得する。
【０２８２】
命令実行ユニット５０５は、ステップＳ２０２において、取得先アドレスのデータがキャッシュメモリ５０７ａ，５０７ｂ，５０８にキャッシュされているか否か確認する。
【０２８３】
取得先アドレスのデータがキャッシュメモリ５０７ａ，５０７ｂ，５０８にキャッシュされている場合（キャッシュヒットの場合）、処理はステップＳ２０７へ移動する。
【０２８４】
取得先アドレスのデータがキャッシュメモリ５０７ａ，５０７ｂ，５０８にキャッシュされていない場合（キャッシュミスの場合）、キャッシュ検証部５１４は、ステップＳ２０３において、ＭＡＣ比較検証情報を取得する。
【０２８５】
ステップＳ２０４において、キャッシュ検証部５１４は、ＭＡＣ比較検証情報の検証要否情報に基づいて検証要否をチェックする。
【０２８６】
検証が不要の場合、処理はステップＳ２０６に移動する。
【０２８７】
検証が必要な場合、キャッシュ検証部５１４は、ステップＳ２０５において、ＭＡＣ比較検証処理を実行する。ＭＡＣ比較検証の詳細については後述する。
【０２８８】
検証が不要の場合又はＭＡＣ比較検証処理が正常に終了した場合、キャッシュ検証部５１４は、ステップＳ２０６において、キャッシュフィルを実行し、取得先アドレスからキャッシュメモリ５０７ａ，５０７ｂ，５０８にデータを読み込む。
【０２８９】
上記ステップＳ２０２において取得先アドレスのデータがキャッシュメモリ５０７ａ，５０７ｂ，５０８にキャッシュされている場合（キャッシュヒットの場合）、又は、上記ステップＳ２０６のキャッシュフィル実行後、ステップＳ２０７において、命令実行ユニット５０５は、キャッシュメモリ５０７ａ，５０７ｂ，５０８からデータを取得し、データ取得処理を終了する。
【０２９０】
ＭＭＵ５０６によってＲＯデータとＲＷデータとが適切に管理されることで、ＲＯデータとＲＷデータとに対して異なる検証方法を適用できる。テーブルブロックとデータブロックとのページングは一度に行われるページウォークの実装が用いられてもよく、この場合にはセキュアＶＭＭ５１６とＭＭＵ５０６との間の遷移回数が削減される。
【０２９１】
（情報処理装置５００の構成）
図１４は、本実施形態に係る情報処理装置５００の構成を例示するブロック図である。
【０２９２】
情報処理装置５００は、命令実行ユニット５０５、アドレス変換キャッシュ５２７、ＭＭＵ５０６、キャッシュメモリ５２８、検証管理部５２９，５３０、検証情報生成部５３１、外部読込部５３２，５３３、外部書出部５３４、記憶領域管理部５３５、検証記憶部５３６、鍵保存ユニット５１３、外部メモリ７を備える。
【０２９３】
ＭＭＵ５０６は、アドレス解決部５３７、ＭＡＣ生成バッファ（ＭＡＣ比較検証情報生成バッファ）５３８を備える。ＭＭＵ５０６は、上記図１のアドレス変換部３に相当する。
【０２９４】
検証管理部５２９は、改ざん判定部５３９、検証情報取得部５４０、検証情報計算部５４１を備える。検証情報計算部５４１は、上記図１の検証計算部４に相当する。改ざん判定部５３９は、上記図１の検証部５に相当する。
【０２９５】
検証管理部５３０は、改ざん判定部５４２、検証情報取得部５４３、検証情報計算部５４４、ＭＡＣ情報バッファ（ＭＡＣ比較検証情報バッファ）５４５を備える。検証情報計算部５４４は、上記図１の検証計算部４２に相当する。改ざん判定部５４２は、上記図１の検証部４３に相当する。
【０２９６】
記憶領域管理部５３５は、参照関係更新部（ページテーブル参照関係更新部）５４６、バッファ領域管理部５４７、バッファ書出管理部（検証用バッファ書出管理部）５４８を備える。参照関係更新部５４６は、上記図１の更新部６に相当する。バッファ領域管理部５４７及びバッファ書出管理部５４８は、上記図１の置換管理部４０に相当する。
【０２９７】
アドレス変換キャッシュ５２７は、上記のアドレス変換キャッシュ４４，５０９，５１０に相当する。
【０２９８】
キャッシュメモリ５２８は、キャッシュメモリ４５，５０７ａ，５０７ｂ，５０８に相当する。
【０２９９】
検証情報生成部５３１は、上記図１の検証計算部４，４２に相当する。
【０３００】
検証記憶部５３６は、内部メモリ８に相当する。
【０３０１】
外部読込部５３２，５３３及び外部書出部５３４は、上記図１の外部入出力部２に相当する。
【０３０２】
（データ参照処理と情報処理装置５００の構成との関係）
上記の図１４の各構成要素と上記図１１乃至図１３のフローチャートとの関係を説明する。
【０３０３】
命令実行ユニット５０５は、ステップＳ００１において、データ参照要求を発行し、ステップＳ００２において、アドレス変換キャッシュ５２７に、ゲストＯＳの仮想アドレスに対応する物理アドレスがキャッシュされているか問い合わせる。
【０３０４】
アドレス変換キャッシュ５２７に参照要求された仮想アドレスに対応する物理アドレスがキャッシュされていない場合、ＭＭＵ５０６のアドレス解決部５３７は、ステップＳ００３において、アドレス解決処理を実行する。
【０３０５】
アドレス解決処理において、ＭＭＵ５０６は、ステップＳ１０１でページウォークを実行し、ステップＳ１０２において検証記憶部５３６に記憶されている該当のテーブルエントリをチェックする。
【０３０６】
テーブルエントリが有効の場合、処理はステップＳ１０９に移動する。テーブルエントリが無効の場合、ＭＭＵ５０６は、ステップＳ１０３においてテーブルエントリのアクセス権を確認する。
【０３０７】
テーブルエントリがＲＷアクセスを示す場合、ステップＳ１０４において、ＭＭＵ５０６は、ＲＷアクセスを示す結果を検証管理部５２９に通知し、結果を受けた検証管理部５２９は、このテーブルエントリによって参照されるページブロックに対してツリー検証処理とデータの読み込みを行う。ツリー検証処理終了後、検証管理部５２９は、参照関係更新部５４６に通知を行い、参照関係更新部５４６が無効のテーブルエントリを有効化する。その後、検証管理部５２９は読み込みを完了として制御をＭＭＵ５０６に戻す。
【０３０８】
読み込み完了を受けたＭＭＵ５０６は、ステップＳ１０５において、ツリー検証後設定処理に基づいて、ＭＡＣ生成バッファ５３８におけるＭＡＣ比較検証情報の検証要否情報に検証不要を設定する。
【０３０９】
テーブルエントリがＲＯアクセスを示す場合、ステップＳ１０６において、ＭＭＵ５０６は、キャッシュラインＭＡＣ値の有効／無効をチェックする。
【０３１０】
キャッシュラインＭＡＣ値が有効の場合、処理は、ステップＳ１０８に移動する。
【０３１１】
キャッシュラインＭＡＣ値が無効の場合、ステップＳ１０７において、ＭＭＵ５０６は、上記図２のセキュアＶＭＭ５１６及びセキュアＤＭＡコントローラ５１１を用いて、キャッシュラインＭＡＣ値の生成処理を実行する。
【０３１２】
ステップＳ１０８において、ＭＭＵ５０６は、テーブルエントリを有効化し、ＭＡＣ生成バッファ５３８におけるＭＡＣ比較検証情報に、検証記憶部５３６から取得されたリプレイ攻撃防止情報を含め、検証要否情報に検証必要を設定するＭＡＣ比較検証設定処理を実行する。
【０３１３】
ステップＳ１０９において、ＭＭＵ５０６は、データブロックまでのアドレスが解決したかチェックし、アドレスが解決するまでステップＳ１０１のページウォークを繰り返す。
【０３１４】
アドレスが解決された後、ステップＳ１１０において、ＭＭＵ５０６は、データ参照処理を再開し、アドレス解決処理を終了する。
【０３１５】
テーブルエントリがＲＯアクセスを示す場合において、アドレス解決が完了した段階で、検証管理部５２９及び記憶領域管理部５３５は、検証済みの状態で、アドレス解決に必要なページテーブルを、検証記憶部５３６に動的に確保されたバッファ領域５１９ｈに記憶する。しかしながら、この段階で、参照先のデータは検証記憶部５３６に記憶されていない。
【０３１６】
そして、ＭＭＵ５０６は、ステップＳ００４において、アドレス解決の結果であるアドレス変換情報をアドレス変換キャッシュ５２７にキャッシュする。
【０３１７】
ＭＭＵ５０６は、ステップＳ００５において、アドレス解決処理で取得されたＭＡＣ比較検証情報を、アドレス変換キャッシュ５２７にキャッシュする。
【０３１８】
参照要求された仮想アドレスに対応する物理アドレスがアドレス変換キャッシュ５２７に記憶されている場合、又は、アドレス解決処理によってアドレス解決が行われた場合、ステップＳ００６において、命令実行ユニット５０５は、参照要求されたデータを取得する。
【０３１９】
命令実行ユニット５０５は、ステップＳ２０１において、アドレス変換キャッシュ５２７から、データ取得先のアドレスを取得する。
【０３２０】
命令実行ユニット５０５は、データ取得先のアドレスに対するデータがキャッシュメモリ５２８にキャッシュされているかチェックする。
【０３２１】
データがキャッシュメモリ５２８にキャッシュされている場合、処理はステップＳ２０７へ移動する。
【０３２２】
データがキャッシュメモリ５２８にキャッシュされていない場合、キャッシュメモリ５２８は、検証管理部５３０にその旨を通知する。通知を受けた検証管理部５３０は、ステップＳ２０３において、アドレス変換キャッシュ５２７からＭＡＣ比較検証情報を取得し、ＭＡＣ情報バッファ５４５に記憶し、ステップＳ２０４において、ＭＡＣ比較検証情報に含まれる検証要否情報をチェックする。
【０３２３】
検証要否情報が不要を示す場合、検証管理部５３０は、外部メモリ７から、外部読込部５３３経由で、データを取得し、ステップＳＳ２０６においてキャッシュフィルを実行する。
【０３２４】
検証要否情報が必要を示す場合、検証管理部５３０は、ステップＳ２０５において、ＭＡＣ比較検証処理を実行し、ステップＳＳ２０６において、検証されたデータに対してキャッシュフィルを実行する。
【０３２５】
キャッシュフィル終了後、ステップＳ２０７において、命令実行ユニット５０５は、データを取得する。
【０３２６】
（ツリー検証処理）
ツリー検証処理は、ページ単位のデータに対して実行される。セキュアＶＭＭ５１６は、ページフォールトを発生させたデータがＲＷデータである場合に、ＲＷデータに対する外部メモリ７から内部メモリ８への読み込みとツリー検証とを実行する。ツリー検証処理では、必要に応じて、置き換え処理及び追い出し処理が発生する。ツリー検証処理は、上記図１２のアドレス解決処理で発生する場合がある。
【０３２７】
図１５は、本実施形態に係るツリー検証処理を例示するフローチャートである。
【０３２８】
ステップＳ３０１において、セキュアＶＭＭ５１６は、ＲＷデータの検証処理を開始し、内部メモリ８の検証バッファ領域５１９ｊに空き領域が存在するか否かチェックし、検証バッファ領域５１９ｊに空き領域がない場合、セキュアＶＭＭ５１６は、ステップＳ３０２において、置き換え処理により領域の解放を行う。
【０３２９】
続いて、セキュアＶＭＭ５１６は、ステップＳ３０３において、検証されるデータを外部メモリ７から内部メモリ８の検証バッファ領域５１９ｊの空き領域へコピーする。このとき、セキュアＤＭＡコントローラ５１１は、ＭＡＣツリー構造又はＭＡＣ＋カウンタ構造で定義されるＭＡＣ生成方法に基づいて、読み込まれたデータのＭＡＣ値を生成する。
【０３３０】
そして、セキュアＶＭＭ５１６は、ステップＳ３０４において、生成されたＭＡＣ値と、対応する外部メモリ７のＭＡＣ値とを比較し、改ざん検証を行う。改ざん検証において、外部メモリ７からＭＡＣ値を読み込む必要がある場合、セキュアＶＭＭ５１６は、検証対象データに対応するＭＡＣ値を外部メモリ７から読み込み、読み込まれたＭＡＣ値を内部メモリ８の一時バッファ領域５１９ｋに記憶する。内部メモリ８のＭＡＣ値が使用される場合、セキュアＶＭＭ５１６は、検証対象データに対応するＭＡＣ値を内部メモリ８から読み込み、読み込まれたＭＡＣ値を一時バッファ領域５１９ｋに記憶する。そして、セキュアＶＭＭ５１６は、一時バッファ領域５１９ｋに記憶されたＭＡＣ値と、セキュアＤＭＡコントローラ５１１で生成されたＭＡＣ値とを比較する。ここで、外部メモリ７から読み込まれたＭＡＣ値は、上位の検証ブロックのリプレイ攻撃防止情報によって正当性が担保されているため、新たに検証を行う必要はない。
【０３３１】
セキュアＶＭＭ５１６は、ステップＳ３０５において、ＭＡＣ値が整合しない場合、検証失敗と判断し、ステップＳ３０６の検証失敗後処理に制御を移す。ステップＳ３０６において、セキュアＶＭＭ５１６は、検証失敗後処理でエラー処理などを行い、その後に検証処理を終了させる。
【０３３２】
セキュアＶＭＭ５１６は、ステップＳ３０５において、ＭＡＣ値が整合した場合、検証成功と判断する。セキュアＶＭＭ５１６は、ステップＳ３０７において、無効となっていたテーブルエントリの参照先アドレスに、検証対象データの内部メモリ８のアドレスを書き込む。このとき、データの外部メモリ７のアドレスは、バッファブロック単位にバッファ管理情報領域５１９ｉに記憶される。その後、セキュアＶＭＭ５１６は、検証処理を終了する。
【０３３３】
ツリー検証は、検証対象がデータブロックの場合と、テーブルブロックの場合とで処理が異なる。
【０３３４】
（置き換え処理）
図１６は、本実施形態に係る置き換え処理を例示するフローチャートである。図１６に示す置き換え処理は、上記図１５のツリー検証処理で発生する場合がある。
【０３３５】
置き換え処理では、置き換え元と同種類のデータが、置き換え対象として、置き換えアルゴリズムにしたがって選択される。すなわち、テーブルブロックの置き換え時には、テーブルブロックが選択される。データブロックの置き換え時は、データブロックが選択される。置き換えアルゴリズムは、ＬＲＵ（Least Recently Used）を用いて説明を行うが、他の置き換えアルゴリズムを用いて置き換え対象を選択してもよい。本実施形態においては、置き換え対象としてテーブルブロックが選択された場合、この選択された置き換え対象のテーブルブロックと、この置き換え対象のテーブルブロックに従属する関連ブロックとを追い出し対象とする場合を例として説明する。
【０３３６】
セキュアＶＭＭ５１６は、置き換え処理を開始し、ステップＳ４０１において、例えばＬＲＵに基づいて内部メモリ８の置き換え対象を選択する。さらに、セキュアＶＭＭ５１６は、置き換え対象がテーブルブロックの場合に、置き換え対象のテーブルブロックと、この置き換え対象のテーブルブロックに従属する関連ブロックとを追い出し対象として決定する。
【０３３７】
セキュアＶＭＭ５１６は、ステップＳ４０２において、追い出し対象から１つの追い出し対象を選択する。セキュアＶＭＭ５１６は、追い出し対象としてテーブルブロックとデータブロックが存在する場合は、データブロックを優先的に選択する。
【０３３８】
セキュアＶＭＭ５１６は、ステップＳ４０３において、追い出し処理を実行する。
【０３３９】
追い出し処理終了後、セキュアＶＭＭ５１６は、ステップＳ４０４において、追い出し対象がまだ内部メモリ８に存在するかチェックする。
【０３４０】
追い出し対象が内部メモリ８に存在する場合、追い出し対象が内部メモリ４０４に存在しなくなるまでステップＳ４０２以降の処理が繰り返される。セキュアＶＭＭ５１６は、追い出し対象が内部メモリ８に存在しなくなると、置き換え処理を終了する。
【０３４１】
上述の置き換え処理終了後、内部メモリ８の検証バッファ領域５１９ｊには、追い出し処理されたデータ分の空き領域が確保される。
【０３４２】
（追い出し処理）
図１７は、本実施形態に係る追い出し処理を例示するフローチャートである。図１７に示す追い出し処理は、上記図１６の置き換え処理で発生する。
【０３４３】
例えば、内部メモリ８のバッファ管理情報領域５１９ｉは、データ及びページテーブルごとの外部メモリ７のアドレスと内部メモリ８のアドレスとを関連付けた変換リストを記憶する。内部メモリ８のアドレスIaddrと外部メモリ７のアドレスEaddrとの変換は、変換リストを用いる方法に代えて、例えば逆ページウォークなどの他の方法が用いられてもよい。
【０３４４】
セキュアＶＭＭ５１６は、追い出し処理を開始し、ステップＳ５０１において、追い出し対象の内容に更新があるか確認する。更新がない場合はステップＳ５０５に移動する。
【０３４５】
更新がある場合は、ステップＳ５０２において、セキュアＶＭＭ５１６は、追い出し対象のＭＡＣ更新処理を行う。セキュアＤＭＡコントローラ５１１は、ＭＡＣツリー構造又はＭＡＣ＋カウンタ構造で定義されるＭＡＣ生成方法に基づいて、追い出し対象の新しいＭＡＣ値を生成する。
【０３４６】
その後、セキュアＶＭＭ５１６は、ステップ５０３において、内部メモリ８の変換リストを用いて追い出し対象の書き出し先となる外部メモリ７のアドレスを決定する。
【０３４７】
セキュアＤＭＡコントローラ５１１は、ステップＳ５０４において、追い出し対象とこの追い出し対象に対して生成されたＭＡＣ値を、外部メモリ７へ書き出す。
【０３４８】
内部メモリ８で書き換え対象が更新されていない場合、又は、追い出し対象の書き出しが実行された場合、ステップＳ５０５において、セキュアＶＭＭ５１６は、追い出し対象を指すテーブルエントリの参照先アドレスを外部メモリ７のアドレスに書き換え、テーブルエントリを無効にする。そして、セキュアＶＭＭ５１６は、バッファ管理情報領域５１９ｉに記憶された追い出し対象に関する制御情報を削除し、検証バッファ領域５１９ｊの追い出し対象が記憶されていた領域を解放する。この処理によって、検証バッファ領域５１９ｊに追い出し処理を行ったデータ分の空き領域が生まれる。そして、セキュアＶＭＭ５１６は追い出し処理を終了する。
【０３４９】
（情報処理装置５００の機能構成とツリー検証処理との関係）
上記のようなツリー検証処理と、上記図１４に示す情報処理装置５００との構成とを関連付けて説明する。
【０３５０】
検証管理部５２９は、ステップＳ３０１において、記憶領域管理部５３５のバッファ領域管理部５４７に、検証記憶部５３６の空き領域の有無を照会する。空き領域がない場合、検証管理部５２９は、ステップＳ３０２において、記憶領域管理部５３５に読み込み済みバッファ領域解放を要求する。
【０３５１】
要求を受けたバッファ領域管理部５４７は、ステップＳ４０１において、置き換えアルゴリズムにしたがって検証記憶部５３６から置き換え対象を選択する。このとき、バッファ領域管理部５４７は、置き換え対象がテーブルブロックの場合は、このテーブルブロックとこのテーブルブロックの関連ブロックを追い出し対象として選択する。バッファ領域管理部５４７は、ステップＳ４０２において、追い出し対象の中から１つを選択し、バッファ書出管理部５４８に追い出し処理を要求する。
【０３５２】
要求を受けたバッファ書出管理部５４８は、ステップＳ５０１において、選択された追い出し対象の内容に更新があるか確認し、更新がない場合はステップＳ５０５に移動する。
【０３５３】
更新がある場合、バッファ書出管理部５４８は、ステップＳ５０２において、ＭＡＣツリー構造又はＭＡＣ＋カウンタ構造で定義されるＭＡＣ値生成方法に基づいて、追い出し対象の新しいＭＡＣ値の生成を依頼する。検証情報生成部５３１は、新しいＭＡＣ値を生成する。
【０３５４】
参照関係更新部５４６は、ステップＳ５０３において、検証記憶部５３６の変換リストから書き出し先のアドレスを決定し、書き出し先のアドレスを検証情報生成部５３１に通知する。
【０３５５】
検証情報生成部５３１は、追い出し対象、書き出しが必要なデータ、書き出し先アドレスを、外部書出部５３４に送る。外部書出部５３４は、ステップＳ５０４において、追い出し対象、書き出し先のアドレスに基づいて外部メモリ７への書き出しを行う。その後、ステップＳ５０５において、参照関係更新部５４６は、検証記憶部５３６の該当テーブルエントリの参照先アドレスを外部メモリ７のアドレスに書き換え、エントリを無効化する。そして、バッファ領域管理部５４７は、検証記憶部５３６に記憶されていた追い出し対象に関する制御情報を削除し、検証記憶部の追い出し対象が記憶されていた領域を解放する。
【０３５６】
バッファ領域管理部５４７は、ステップＳ４０４において、選択された全ての追い出し対象が検証記憶部５３６から追い出されるまで、ステップＳ４０２の追い出し対象の選択と、ステップＳ４０３の追い出し処理とを繰り返す。
【０３５７】
全ての追い出し対象が追い出されると、検証記憶部５３６は、追い出されたデータ分の空き領域が生じる。
【０３５８】
検証管理部５２９の検証情報取得部５４０は、ステップＳ３０３において、検証記憶部５３６に記憶されている検証対象データのリプレイ攻撃防止情報を取得し、その他の検証に使用されるデータの読み込みを外部読込部５３２に要求する。外部読込部５３２は、要求されたデータを外部メモリ７から読み込み、読み込まれたデータのうち検証対象データを検証情報計算部５４１に送る。
【０３５９】
検証情報計算部５４１は、ステップＳ３０４において、検証対象データからＭＡＣツリー構造又はＭＡＣ＋カウンタ構造で定義されるＭＡＣ生成方法により、読み込まれたデータのＭＡＣ値を生成する。改ざん判定部５３９は、予め生成されたＭＡＣ値と検証情報計算部５４１で計算されたＭＡＣ値を照合する。
【０３６０】
検証管理部５２９は、ステップＳ３０５においてＭＡＣ値が整合せず検証が失敗した場合、ステップＳ３０６において、命令実行ユニット５０５に検証失敗を通知して以後の処理を中止する。
【０３６１】
検証管理部５２９は、ステップＳ３０５においてＭＡＣ値が整合し、検証が成功した場合、参照関係更新部５４６に読み込み成功を通知する。参照関係更新部５４６は、ステップＳ３０７において、無効のテーブルエントリの参照先アドレスに、検証記憶部５３６における検証対象データのアドレスを書き込む。このとき、参照関係更新部５４６は、検証対象データの外部メモリ７のアドレスをバッファブロック単位に検証記憶部５３６に記憶する。
【０３６２】
（ＭＡＣ比較検証設定処理とＭＡＣ比較検証処理）
ＭＡＣ比較検証処理は、キャッシュライン単位のデータに対して検証処理を行う。ＭＡＣ比較検証処理は、アドレス解決処理におけるＭＡＣ比較検証設定処理によって設定されたデータに基づいて実行される。
【０３６３】
まず、ＭＡＣ比較検証設定処理について説明する。
【０３６４】
上記図１２のアドレス解決処理で説明したように、ＭＭＵ５０６は、キャッシュラインＭＡＣ値の有効／無効をチェックする。キャッシュラインＭＡＣ値が無効の場合には、セキュアＶＭＭ５１６はキャッシュラインＭＡＣ値を生成する。その後、ＭＭＵ５０６は、ＭＡＣ比較検証設定処理で、ＭＡＣ比較検証情報を設定し、テーブルエントリを有効化する。
【０３６５】
ＭＭＵ５０６は、内部メモリ８から検証対象データに対応するリプレイ攻撃防止情報を読み込み、ＭＭＵ５０６が持つＭＡＣ比較検証情報に、リプレイ攻撃防止情報を追加するとともにＭＡＣ比較検証が必要であることを示す検証要否情報を設定する。そして、ＭＭＵ５０６は、テーブルエントリを有効化し、ページフォールトの発生を抑制する。
【０３６６】
次に、ＭＡＣ比較検証処理について説明する。
【０３６７】
図１８は、本実施形態に係るＭＡＣ比較検証処理を例示するフローチャートである。このＭＡＣ比較検証処理は、上記図１３のデータ取得処理で発生する場合がある。
【０３６８】
キャッシュ検証部５１４は、キャッシュメモリ５０８から、ＭＡＣ比較検証要求を受け、ＭＡＣ比較検証処理を開始し、ステップＳ６０１において、所定の方法でアドレス解決を行い、検証対象のキャッシュラインＭＡＣ値を取得する。
【０３６９】
キャッシュ検証部５１４は、ステップＳ６０２において、外部メモリ７から、検証対象データを読み込み、検証対象データと、データ取得処理によって取得されたリプレイ攻撃防止情報とに基づいて、ＭＡＣ値を生成する
キャッシュ検証部５１４は、ステップＳ６０３において、生成されたＭＡＣ値と、外部メモリ７から取得されたキャッシュラインＭＡＣ値とを比較する。
【０３７０】
比較の結果が整合する場合には、キャッシュ検証部５１４は、検証成功とし、正常終了する。
【０３７１】
比較の結果が不整合の場合には、キャッシュ検証部５１４は、検証失敗とし、ステップＳ６０５において、エラー処理などの検証失敗後処理を実行し、処理を異常終了させる。
【０３７２】
上記のＭＡＣ比較検証処理と、上記図１４の情報処理装置５００の構成とを関連付けて説明する。
【０３７３】
検証管理部５３０は、キャッシュメモリ５２８からＭＡＣ比較検証要求を受け、ＭＡＣ比較検証処理を開始する。
【０３７４】
ステップＳ６０１において、検証管理部５３０は、検証情報取得部５４３に、検証に使用されるデータの取得を要求し、検証情報取得部５４３は、外部読込部５３３にキャッシュラインＭＡＣ値の取得と検証対象データの取得を依頼する。外部読込部５３３は、外部メモリ７から読み込まれたキャッシュラインＭＡＣ値を改ざん判定部５４２に送り、検証対象データを検証情報計算部５４４に送る。
【０３７５】
ステップＳ６０２において、検証情報計算部５４４は、外部読込部５３３から検証対象データを取得し、検証対象データと、ＭＡＣ情報バッファ５４５に記憶されているリプレイ攻撃防止情報とに基づいて、ＭＡＣ値を生成する。
【０３７６】
ステップＳ６０３において、改ざん判定部５４２は、生成されたＭＡＣ値と、取得されたキャッシュラインＭＡＣ値とを比較する。
【０３７７】
改ざん判定部５４２は、比較結果が整合する場合は、検証成功とし、正常終了する。
【０３７８】
一方、比較結果が整合しない場合、検証管理部５３０は、ステップＳ６０５において、命令実行ユニット５０５に検証失敗を通知し、その後の処理を中止する。
【０３７９】
（ＭＡＣ＋カウンタ構造とキャッシュラインとの関係）
図１９は、本実施形態に係るＭＡＣ＋カウンタ構造とキャッシュラインＭＡＣ値との関係を例示するデータ構造図である。
【０３８０】
この図１９では、データブロックB301-1-0-511をキャッシュラインサイズに分割して得られるデータCL301-1-0-511-1は、キャッシュラインに記憶されている。このキャッシュラインに記憶されているデータのキャッシュラインＭＡＣ値は、CM301-1-0-511-1である。キャッシュラインＭＡＣブロックBM301-1-0-511-1は、キャッシュラインサイズのデータCL301-1-0-511-1のキャッシュラインＭＡＣ値CM301-1-0-511-1を含む。キャッシュラインＭＡＣブロックBM301-1-0-511-1は、複数のキャッシュラインＭＡＣ値をページサイズまで集約したブロックである。
【０３８１】
（ＲＯデータの検証）
ＲＯデータに対する検証は、キャッシュフィル前に発生する。しかし、アドレス解決処理はそれ以前に実行される。このため、ＲＯデータに対するデータ参照要求の発生時には、ツリー検証を行わずにアドレス解決のみを行う必要がある。また、アドレス解決後には、アドレス解決情報とともにＲＯデータの検証に必要な情報がアドレス変換キャッシュ５０９，５１０に記憶されているされている必要がある。
【０３８２】
以下で、上記の図１１のデータ参照処理、図１２のアドレス解決処理、図１３のデータ取得処理、図１８のＭＡＣ比較検証処理を用いて、ＲＯデータの検証を説明する。
【０３８３】
以下で上記図９を用いて説明される各種の処理では、初期的に、データブロックB301-1-0-511に関する情報が、プロセッサ５０１に存在しないとして説明する。換言すれば、初期的状態において、アドレス変換キャッシュ５０９，５１０、キャッシュメモリ５０７ａ，５０７ｂ、キャッシュメモリ５０８は、データブロックB301-1-0-511、データブロックB301-1-0-511のアドレス変換情報などを記憶していないとする。
【０３８４】
また、上記図９を用いて説明される各種の処理では、セキュアページテーブルツリー１２１とセキュア検証子ツリー１２２のうちレベル２までのテーブルブロックとカウンタブロックとは、内部メモリ８に記憶されているとする。例えば、保護される外部メモリ７のサイズが４ギガバイトであり、内部メモリ８に記憶されるデータのサイズが５２キロバイトであり、内部メモリ８のサイズが１メガバイトの場合、内部メモリ８は、検証子ツリーのうちレベル２までのテーブルブロックとカウンタブロックとをキャッシュすることが十分な容量を持つ。
【０３８５】
上記図９を用いて説明される各種の処理では、内部メモリ８のバッファ管理情報領域５１９ｉに、外部メモリ７のアドレスと内部メモリ８のアドレスとの変換リストが記憶されるとする。すなわち、セキュアＶＭＭ５１６は、データブロックB301-1-0-511の内部メモリ８のアドレスIaddr(B301-1-0-511)と外部メモリ７のアドレスEaddr(B301-1-0-511)との対応関係を認識する。内部メモリ８のアドレスIaddrと外部メモリ７のアドレスEaddrとの変換は、変換リストを用いる方法ではなく、逆ページウォークなどの方法を用いてもよい。
【０３８６】
置き換え処理では、置き換え元と同種類のデータが、置き換え対象として、置き換えアルゴリズムにしたがって選択されるとする。
【０３８７】
命令実行ユニット５０５は、ステップＳ００１において、データ参照要求を発生させ、データ参照要求を受けたＭＭＵ５０６は、ステップＳ００２において、アドレス変換キャッシュ５０９，５１０に、データブロックB301-1-0-511の仮想アドレスと物理アドレスとを含むアドレス変換情報がキャッシュされているか確認を行う。
【０３８８】
アドレス変換情報がキャッシュされていないため、ＭＭＵ５０６は、ステップＳ００３において、アドレス解決処理を行う。
【０３８９】
ＭＭＵ５０６は、ステップＳ１０１において、ページウォークによるアドレス解決を行う。
【０３９０】
ＭＭＵ５０６は、ステップＳ１０２において、テーブルブロックT301のテーブルエントリE301-1をチェックし、有効であることからテーブルエントリE301-1を参照する。
【０３９１】
ＭＭＵ５０６は、ステップＳ１０９において、データブロックB301-1-0-511のアドレスが解決したかチェックし、未解決であるためステップＳ１０１のページウォークを繰り返す。
【０３９２】
ＭＭＵ５０６は、ステップＳ１０２において、テーブルブロックT301-1-0のテーブルエントリE301-1-0-511が無効であることを検出すると、ステップＳ１０３においてテーブルエントリE301-1-0-511のアクセス権限をチェックする。テーブルエントリE301-1-0-511ではＲＯアクセスが設定されているため、ＭＭＵ５０６は、ステップＳ１０６において、キャッシュラインＭＡＣ値の有効／無効をチェックする。キャッシュラインＭＡＣ値が無効であった場合に、ステップＳ１０７において、ＭＭＵ５０６は、上記図２のセキュアＶＭＭ５１６及びセキュアＤＭＡコントローラ５１１を用いて、キャッシュラインＭＡＣ値を生成する。その後ステップＳ１０８において、ＭＭＵ５０６は、ＭＡＣＭＡＣ比較検証設定処理により、テーブルエントリE301-1-0-511を有効化し、ＭＡＣ比較検証情報に対して、リプレイ攻撃防止情報として用いられるカウンタ値C301-1-0-511と検証要否情報とを設定する。
【０３９３】
ＭＭＵ５０６は、ステップＳ１０９において、データブロックB301-1-0-511までのアドレスが解決したかチェックし、アドレスが解決したため、ステップＳ１１０において、データ参照処理を再開し、アドレス解決処理を終了する。
【０３９４】
ＭＭＵ５０６は、ステップＳ００４において、解決された仮想アドレスと物理アドレスとを関連付けたアドレス変換情報を、アドレス変換キャッシュ５０９，５１０にキャッシュする。
【０３９５】
このとき、ＭＭＵ５０６は、ステップＳ００５において、アドレス解決処理で取得されたデータブロックB301-1-0-511に対するＭＡＣ比較検証情報を、アドレス変換キャッシュ５０９，５１０にキャッシュする。
【０３９６】
アドレス解決処理によってアドレス解決が実行された後、ＭＭＵ５０６は、参照要求されたデータブロックB301-1-0-511のうちキャッシュラインに記憶さるデータCL301-1-0-511-1を、解決されたアドレスを用いて取得する。
【０３９７】
命令実行ユニット５０５は、ステップＳ２０１において、アドレス変換キャッシュ５０９，５１０に基づいて、キャッシュラインのデータCL301-1-0-511-1の仮想アドレスと物理アドレスとを変換し、取得先アドレスを決定する。
【０３９８】
データブロックB301-1-0-511はＲＯデータであるため、取得先アドレスは、外部メモリ７のアドレスEaddr(CL301-1-0-511-1)となる。
【０３９９】
命令実行ユニット５０５は、ステップＳ２０２において、取得先アドレスEaddr(CL301-1-0-511-1)のデータがキャッシュメモリ５０７ａ，５０７ｂ、キャッシュメモリ５０８にキャッシュされているか確認する。
【０４００】
取得先アドレスEaddr(CL301-1-0-511-1)のデータはキャッシュメモリ５０７ａ，５０７ｂ，５０８にキャッシュされていないため、キャッシュ検証部５１４は、Ｓ２０４において、アドレス変換キャッシュ５０９，５１０からＭＡＣ比較検証情報を取得し、ＭＡＣ比較検証情報に含まれる検証要否情報をチェックする。
【０４０１】
ＭＡＣ比較検証は必要であるため、キャッシュ検証部５１４は、ステップＳ２０５において、ＭＡＣ比較検証処理を実行する。
【０４０２】
キャッシュ検証部５１４は、ステップＳ６０１において、所定の方法でアドレス解決を行い、検証対象のキャッシュラインＭＡＣ値CM301-1-0-511を取得する
キャッシュ検証部５１４は、ステップＳ６０２において、外部メモリ７から、検証対象のキャッシュラインのデータCL301-1-0-511-1を読み込み、読み込まれたデータとデータ取得処理によって取得されたリプレイ攻撃防止情報C301-1-0-511とに基づいて、ＭＡＣ値を生成する。
【０４０３】
キャッシュ検証部５１４は、ステップＳ６０３において、生成されたＭＡＣ値と、取得されたキャッシュラインＭＡＣ値CM301-1-0-511との比較を行う。
【０４０４】
キャッシュ検証部５１４は、ステップＳ６０４において、生成されたＭＡＣ値と外部メモリ７から取得されたキャッシュラインＭＡＣ値が整合する場合に、検証成功とし、正常終了し、整合しない場合に、ステップＳ６０５において検証失敗後処理を実行する。
【０４０５】
ＭＡＣ比較検証の正常終了後、キャッシュ検証部５１４は、ステップＳ２０６において、キャッシュフィルを実行し、取得先アドレスEaddr(CL301-1-0-511-1)からキャッシュメモリ５０７ａ，５０７ｂ，５０８にデータを読み込む。
【０４０６】
キャッシュフィル終了後、命令実行ユニット５０５は、ステップＳ２０７において、キャッシュメモリ５０７ａ，５０７ｂ，５０８からデータを取得し、データ取得処理を終了する。
【０４０７】
（キャッシュラインＭＡＣ値の生成処理）
上記図１２で説明したように、キャッシュラインＭＡＣ値が無効の場合、セキュアＶＭＭ５１６及びセキュアＤＭＡコントローラ５１１は、キャッシュラインＭＡＣ値を生成する。キャッシュラインＭＡＣ値は、対応するデータブロックごとにキャッシュラインＭＡＣブロックとして一括管理されるため、セキュアＶＭＭ５１６及びセキュアＤＭＡコントローラ５１１は、キャッシュラインＭＡＣ値の生成も一括して行う。つまり、あるページに属するキャッシュライン単位のデータに対するアクセスが発生し、対応するキャッシュラインＭＡＣ値が無効の場合、セキュアＶＭＭ５１６及びセキュアＤＭＡコントローラ５１１は、そのページに含まれる全てのキャッシュライン単位のデータに対するキャッシュラインＭＡＣ値を生成する。例えば、あるキャッシュライン単位のデータがアクセスされ、対応するキャッシュラインＭＡＣ値を含むキャッシュラインＭＡＣブロックが無効の場合、セキュアＶＭＭ５１６及びセキュアＤＭＡコントローラ５１１は、そのページに含まれる全てのキャッシュライン単位のデータに対するキャッシュラインＭＡＣ値を生成する。そして、セキュアＶＭＭ５１６は、キャッシュラインＭＡＣブロックを有効にする。
【０４０８】
例えば、内部メモリ８に更新済みのデータブロックが存在し、当該データブロックに対する参照元のページテーブルがＲＷ属性であり、当該データブロックがＲＯ属性へ変更される場合、セキュアＶＭＭ５１６は、当該データブロックの外部メモリ７への書き戻しとキャッシュラインＭＡＣ値の生成とを実行し、データブロックの属性をＲＯ属性に変更してもよい。書き戻しが完了し、ページ属性がＲＯ属性に変更されたページデータへのアクセスが発生した場合、キャッシュメモリ５０７ａ，５０７ｂ，５０８経由でページデータに対する読み込みと検証とが行われる。
【０４０９】
セキュアＶＭＭ５１６はセキュアＤＭＡコントローラ５１１に対して指示を与え、指示を受けたセキュアＤＭＡコントローラ５１１はキャッシュラインＭＡＣ値の生成と書き出しとを行う。セキュアＶＭＭ５１６とセキュアＤＭＡコントローラ５１１とは同じ処理を同時に行う必要はなく、セキュアＶＭＭ５１６の処理の一部をセキュアＤＭＡコントローラ５１１に委託することも可能である。
【０４１０】
キャッシュラインＭＡＣ値の有効／無効の管理は、キャッシュラインＭＡＣ値単位で行われてもよく、キャッシュラインＭＡＣブロック単位で行われてもよい。以下では、キャッシュラインＭＡＣブロック単位で有効／無効が管理される場合を例として説明する。
【０４１１】
キャッシュラインＭＡＣブロックが無効となるのは、対応するデータブロックに対して一度もＲＯアクセスが発生していない、又は、対応するデータブロックが更新された場合である。どちらの場合であっても以下に示す生成処理の手順に差異はない。
【０４１２】
図２０は、キャッシュラインＭＡＣ値の生成処理を例示するフローチャートである。上記図１２で説明したように、キャッシュラインＭＡＣ値の生成処理の要否は、ステップＳ１０６で決定される。このステップＳ１０６において、ＭＭＵ５０６は、キャッシュラインＭＡＣ値の有効／無効をチェックし、キャッシュラインＭＡＣ値が有効であった場合は、ステップＳ１０８でＭＡＣ比較検証設定処理を実行する。一方、キャッシュラインＭＡＣ値が無効であった場合には、セキュアＶＭＭ５１６及びセキュアＤＭＡコントローラ５１１が図２０に示すキャッシュラインＭＡＣ生成処理を実行する。
【０４１３】
キャッシュラインＭＡＣ値の生成が必要な場合、まず、ステップＳ７０１において、セキュアＶＭＭ５１６は、キャッシュラインＭＡＣ値の生成対象のデータブロックに対するツリー検証を行う。このツリー検証により、外部メモリ７に存在していた生成対象のデータブロックは検証され、内部メモリ８へ読み込まれる。そして、セキュアＶＭＭ５１６は、セキュアＤＭＡコントローラ５１１に対してキャッシュラインＭＡＣ値の生成を依頼する。
【０４１４】
ステップＳ７０２において、セキュアＤＭＡコントローラ５１１は、ツリー検証を行った生成対象のデータブロックとそのキャッシュラインＭＡＣ値の生成に必要なリプレイ攻撃防止情報を取得する。
【０４１５】
ステップＳ７０３において、セキュアＤＭＡコントローラ５１１は、生成対象のデータブロックに含まれるキャッシュライン単位のデータに対するキャッシュラインＭＡＣ値を生成する。
【０４１６】
ステップＳ７０４において、セキュアＤＭＡコントローラ５１１は、生成されたキャッシュラインＭＡＣ値を、所定の方法により定められた外部メモリ７のアドレスへ書き出す。
【０４１７】
ステップＳ７０６において、セキュアＤＭＡコントローラ５１１は、全てのキャッシュライン単位のデータに対するキャッシュラインＭＡＣ値が生成されたか判断し、全てのキャッシュラインＭＡＣ値が生成されるまで、ステップＳ７０３及びステップＳ７０４を繰り返す。
【０４１８】
全キャッシュライン分のキャッシュラインＭＡＣ値が生成されることにより、データブロックに対するキャッシュラインＭＡＣ値の集合体であるキャッシュラインＭＡＣブロックが生成される。
【０４１９】
生成対象のページブロックに対する全てのキャッシュラインＭＡＣ値の生成が終了すると、セキュアＤＭＡコントローラ５１１は、生成終了をセキュアＶＭＭ５１６に通知する。
【０４２０】
ステップＳ７０６において、通知を受けたセキュアＶＭＭ５１６は、キャッシュラインＭＡＣブロックを有効にする。
【０４２１】
その後、ステップＳ７０７において、セキュアＶＭＭ５１６は、生成対象のデータブロックを無効化し、生成対象のデータブロックの属性をＲＯとする。
【０４２２】
このように、キャッシュラインＭＡＣブロックの生成及び書き出しは、セキュアＶＭＭ５１６によって生成対象のデータブロックに対して完全性検証を実行し、セキュアＤＭＡコントローラ５１１によってキャッシュラインＭＡＣ値を生成し、キャッシュラインＭＡＣブロック単位でキャッシュラインＭＡＣ値を所定の場所に書き出すことで、実現される。キャッシュラインＭＡＣ値の書き出し先アドレスは、キャッシュラインＭＡＣ値の管理方法によって異なる。
【０４２３】
（ＲＷデータ及びテーブルブロックの検証）
以下では、上記の図９に示すＭＡＣ＋カウンタ構造のセキュアページテーブルツリー１２１及びセキュア検証子ツリー１２２を用いて、ＲＷデータであるデータブロックB301-1-0-511に対するデータ参照要求が発生した場合の動作例を説明する。
【０４２４】
レベル３以降のテーブルブロックに対して、内部メモリ８でページングが実行される。このため、データブロックB301-1-0-511のアドレス解決に必要な全てのテーブルブロックが内部メモリ８に存在する場合と、存在しない場合とを説明する。データブロックとテーブルブロックではデータ構造及び検証処理が異なるため、以下ではデータブロックとテーブルブロックとのそれぞれについて説明を行う。
【０４２５】
<階層的なツリー検証処理>
以下、階層的な検証処理の概要を説明する。
【０４２６】
データ参照要求から検証を行い、データを取得するまでの一連を動作は、データ参照処理、アドレス解決処理、検証処理、置き換え処理、追い出し処理に分割することができる。それぞれの処理は入れ子的な関係であり、データ参照処理以外は必要がなければ発生しない。
【０４２７】
本実施形態では、アドレス解決時に、解決されたデータの検証処理を行う。このため、階層的に検証処理が発生する。例えば、あるデータに対してデータ参照要求が発生した場合、ページウォークによるアドレス解決処理が発生する。ここでアドレス解決に必要な上位テーブルブロック（親テーブルブロック）が未検証であった場合、まずこの上位テーブルブロックに対する検証処理が実行される。そして、検証されたテーブルブロックが安全な内部メモリ８に読み込まれた後に、下位テーブルブロック（子テーブルブロック）に対する検証処理が実行される。このように、最上位から順に最下位であるデータブロックまで、順次検証が実行される。
【０４２８】
<ツリー検証処理の発生とツリー検証処理の詳細>
以下で、ツリー検証処理の発生とツリー検証処理の詳細とについて説明する。
【０４２９】
ここでは、上記の図９に示すＭＡＣ＋カウンタ構造の検証子ツリーを用いて、ＲＷデータであるデータブロックB301-1-0-511に対するデータ参照要求が発生した場合の動作例を説明する。
【０４３０】
レベル３以降のテーブルブロックに対して、内部メモリ８でページングが実行される。このため、データブロックB301-1-0-511のアドレス解決に必要な全てのテーブルブロックが内部メモリ８に存在する場合と、存在しない場合とを説明する。データブロックとテーブルブロックではデータ構造及び検証処理が異なるため、以下ではデータブロックとテーブルブロックとのそれぞれについて説明を行う。
【０４３１】
<データブロックの検証処理>
まず、データブロックB301-1-0-511のアドレス解決に必要なページテーブルが全て内部メモリ８に記憶されている場合、すなわちデータブロックB301-1-0-511のみの検証が発生する場合について説明する。テーブルブロックT301，T301-1，T301-1-0とそれらに付随するカウンタブロックT302，T302-1，T302-1-0は全て内部メモリ８の検証バッファ領域５１９ｊに記憶されているとする。
【０４３２】
<ＲＷデータに関するアドレス解決処理の詳細>
まず、上記図１２に基づいてアドレス解決処理を説明する。図１２のアドレス解決処理は、図１１のデータ参照処理で発生する。
【０４３３】
ＭＭＵ５０６は、データブロックB301-1-0-511のアドレス解決処理を開始し、ステップ１０１において、ページウォークによるアドレス解決を行う。
【０４３４】
ＭＭＵ５０６は、ステップＳ１０２において、テーブルブロックT301のテーブルエントリE301-1をチェックし、有効であることからテーブルエントリE301-1を参照する。
【０４３５】
ＭＭＵ５０６は、ステップＳ１０４において、データブロックB301-1-0-511のアドレスが解決されたかチェックし、未解決であるため、ステップＳ１０１において、ページウォークを繰り返す。
【０４３６】
ＭＭＵ５０６は、ステップＳ１０２においてテーブルブロックT301-1-0のテーブルエントリE301-1-0-511が無効であることを検出すると、ＭＭＵ５０６は、ステップＳ１０３において、テーブルエントリE301-1-0-511のアクセス権限をチェックする。
【０４３７】
テーブルエントリE301-1-0-511がＲＷアクセスを示すため、制御はＭＭＵ５０６からセキュアＶＭＭ５１６に移り、セキュアＶＭＭ５１６は、ステップＳ１０４においてテーブルエントリE301-1-0-511によって参照されるデータブロックB301-1-0-511のツリー検証処理を行い、検証処理終了後、無効であったテーブルエントリE301-1-0-511は有効になり、セキュアＶＭＭ５１６は制御をＭＭＵ５０６に戻す。ＭＭＵ５０６は、ステップＳ１０５において、ツリー検証後設定処理を実行し、ＭＡＣ比較検証情報に検証不要を設定する。
【０４３８】
ＭＭＵ５０６は、ステップＳ１０９において、データブロックB301-1-0-511までのアドレスが解決したかチェックする。ＭＭＵ５０６は、アドレスが解決したため、ステップＳ１１０において、データ参照処理を再開し、アドレス解決処理を終了する。
【０４３９】
次に、上記図１１に基づいてデータ参照処理を説明するとともに、上記図１２に基づいてこのデータ参照処理で発生するアドレス解決処理を説明する。
【０４４０】
命令実行ユニット５０５は、ステップＳ００１において、ＭＭＵ５０６にデータ参照要求を発行する。ＭＭＵ５０６は、ステップＳ００２において、アドレス変換キャッシュ５２７に対して、ゲストＯＳの仮想アドレスに対応する物理アドレスがキャッシュされているか否かを問い合わせる。アドレス変換キャッシュ５２７に対応する物理アドレスが記憶されている場合、ＭＭＵ５０６は、ステップＳ００６において、対応する物理アドレスを用いてデータを読み込む。
【０４４１】
アドレス変換キャッシュ５２７にアドレス変換情報が記憶されており、既にデータ参照が行われている場合には、検証済みデータが検証記憶部５３６に記憶されており、アドレス変換キャッシュ５２７には、検証記憶部５３６のバッファのアドレスが記憶されている。アドレス変換キャッシュ５２７から変換済みの物理アドレスが検証記憶部５３６に送られ、ステップＳ００６において、検証記憶部５３６のデータが命令実行ユニット５０５に返される。
【０４４２】
ＴＬＢミスの場合、ＭＭＵ５０６のアドレス解決部５３７は、ステップＳ００３において、アドレス解決を実行する。アドレス解決において、ＭＭＵ５０６は、上記図１２のステップＳ１０１に示すように、ページウォークを行う。
【０４４３】
ＭＭＵ５０６は、ステップＳ１０２において、検証記憶部５３６に記憶されているテーブルブロックT301のテーブルエントリE301-1をチェックし、有効であることからテーブルエントリE301-1を参照する。ＭＭＵ５０６は、ステップＳ１０９において、データブロックB301-1-0-511のアドレスが解決したかチェックし、未解決であるためステップＳ１０１のページウォークを繰り返す。
【０４４４】
ＭＭＵ５０６は、ステップＳ１０２において、テーブルブロックT301-1-0のテーブルエントリE301-1-0-511が無効であることを検出すると、ステップＳ１０３において、テーブルエントリE301-1-0-511のアクセス権限をチェックする。
【０４４５】
ＭＭＵ５０６は、テーブルエントリがＲＷアクセスを示すため、その旨を検証管理部５２９に通知する。
【０４４６】
検証管理部５２９は、ステップＳ１０４において、テーブルエントリE301-1-0-511によって参照されるデータブロックB301-1-0-511のツリー検証処理を行う。検証処理終了後、検証管理部５２９は、参照関係更新部５４６に通知を行い、参照関係更新部５４６は、無効であったテーブルエントリE301-1-0-511を有効化する。検証管理部５２９は、ＭＭＵ５０６に読み込み完了を通知する。これにより、セキュアＶＭＭ５１６は制御をＭＭＵ５０６に戻す。
【０４４７】
ＭＭＵ５０６は、ステップＳ１０５において、ツリー検証後設定処理を実行し、ＭＡＣ比較検証情報に検証不要を設定する。
【０４４８】
ＭＭＵ５０６は、ステップＳ１０９において、データブロックB301-1-0-511までのアドレスが解決したかチェックする。ＭＭＵ５０６は、アドレスが解決したため、ステップＳ１１０において、データ参照処理を再開し、アドレス解決処理を終了する。
【０４４９】
アドレス解決が完了した段階では、実行されたアドレス解決処理で必要とされたページテーブル及び参照先データの全てが、検証管理部５２９及び記憶領域管理部５３５によって内部メモリ８に動的に確保されたバッファ領域に、検証済みの状態で記憶されている。そして、ＭＭＵ５０６は、アドレス解決結果であるアドレス変換情報をアドレス変換キャッシュ５２７にキャッシュし、ステップＳ００６において、データ取得を実行する。
【０４５０】
<ＲＷデータに関する検証処理の詳細>
上記の図１５を用いてＲＷデータであるデータブロックB301-1-0-511のツリー検証処理について説明する。
【０４５１】
セキュアＶＭＭ５１６は、データブロックB301-1-0-511の検証処理を開始し、ステップＳ３０１において、内部メモリ８の検証バッファ領域５１９ｊに空き領域が存在するか否かチェックする。検証バッファ領域５１９ｊに空き領域がない場合、セキュアＶＭＭ５１６は、ステップＳ３０２において、置き換え処理により領域の解放を行う。
【０４５２】
続いて、セキュアＶＭＭ５１６は、ステップＳ３０３において、検証に使用されるデータを外部メモリ７から内部メモリ８の検証バッファ領域５１９ｊの空き領域へコピーする。このとき、セキュアＤＭＡコントローラ５１１は、ＭＡＣツリー構造又はＭＡＣ＋カウンタ構造で定義されるＭＡＣ生成方法に基づいて、読み込まれたデータのＭＡＣ値を生成する。
【０４５３】
そして、セキュアＶＭＭ５１６は、ステップＳ３０４において、生成されたＭＡＣ値と、対応する外部メモリ７のＭＡＣ値とを比較し、検証対象データブロックB301-1-0-511の改ざん検証を行う。この改ざん検証の際に、セキュアＶＭＭ５１６は、検証対象データブロックB301-1-0-511に対応するＭＡＣ値M301-1-0-511を外部メモリ７から読み込み、内部メモリ８の一時バッファ領域５１９ｋに記憶し、この読み込まれたＭＡＣ値M301-1-0-511とセキュアＤＭＡコントローラ５１１で生成されたＭＡＣ値とを比較する。ＭＡＣ値M301-1-0-511は、外部メモリ７のＭＡＣブロックT303-1-0内に含まれている。正しい上位カウンタ値に対応するＭＡＣ値は、秘密鍵がなければ計算できない。上位カウンタ値は、上位テーブルとともに検証されている。このため、読み込まれたＭＡＣ値M301-1-0-511に対する検証は実行される必要がない。
【０４５４】
セキュアＶＭＭ５１６は、ステップＳ３０５において、ＭＡＣ値が不整合の場合、検証失敗と判断し、ステップＳ３０６の検証失敗後処理に制御を移す。ステップＳ３０６において、セキュアＶＭＭ５１６は、検証失敗後処理でエラー処理などを行い、その後に検証処理を異常終了させる。
【０４５５】
セキュアＶＭＭ５１６は、ステップＳ３０５において、ＭＡＣ値が整合した場合、検証成功と判断する。セキュアＶＭＭ５１６は、ステップＳ３０７において、無効となっていたテーブルエントリE301-1-0-511の参照先アドレスに、検証対象データブロックB301-1-0-511の内部メモリ８のアドレスIaddr(B301-1-0-511)を書き込む。このとき、データブロックB301-1-0-511の外部メモリ７のアドレスEaddr(B301-1-0-511)は、バッファブロック単位にバッファ管理情報領域５１９ｉに記憶される。その後、セキュアＶＭＭ５１６は、検証処理を終了する。
【０４５６】
上記図１５の検証処理と、上記図１４の情報処理装置５００の構成とを関連付けて説明する。
【０４５７】
検証管理部５２９は、ステップＳ３０１において、記憶領域管理部５３５のバッファ領域管理部５１９ｉに、検証記憶部５３６の空きバッファ領域の有無を照会する。空き領域がない場合、検証管理部５２９は、ステップＳ３０２において、記憶領域管理部５３５に読み込み済みバッファ領域解放を要求し、空き領域のアドレスを取得する。
【０４５８】
ステップＳ３０３において、検証管理部５２９の検証情報取得部５４０は、外部読込部５３２を通じて検証に使用されるデータを外部メモリ７から取得し、検証記憶部５３６の検証バッファ領域５１９ｊの空き領域へコピーする。
【０４５９】
ステップＳ３０４において、検証情報計算部５４１は、検証対象データブロックB301-1-0-511及びカウンタ値C301-1-0-511と鍵保存ユニット５１３の秘密鍵とに基づいて、ＭＡＣ値を計算する。改ざん判定部５３９は、計算されたＭＡＣ値を取得済みのＭＡＣ値M301-1-0-511と照合する。
【０４６０】
ＭＡＣ値が整合せず検証に失敗した場合、ステップＳ３０６において、検証管理部５２９は、命令実行ユニット５０５に検証失敗を通知し、以後の処理を中止する。
【０４６１】
ＭＡＣ値が整合して検証に成功した場合、ステップＳ３０７において、検証管理部５２９は、参照関係更新部５４６に読み込み成功を通知する。参照関係更新部５４６は、無効となっていたテーブルエントリE301-1-0-511の参照先アドレスに、検証対象データブロックB301-1-0-511の内部メモリ８のアドレスIaddr(B301-1-0-511)を記憶する。さらに、参照関係更新部５４６は、データブロックB301-1-0-511の外部メモリ７のアドレスEaddr(B301-1-0-511)を、バッファブロック単位にバッファ管理情報領域５１９ｉに記憶し、検証処理を終了する。
【０４６２】
<ＲＷデータに関する置き換え処理の詳細>
上記の図１６を用いてＲＷデータの置き換え処理について説明する。
【０４６３】
置き換え処理を発生させたデータブロックをB301-1-0-511、最も使用されていないデータブロックをB301-1-0-1として説明する。
【０４６４】
セキュアＶＭＭ５１６は、置き換え処理を開始し、ステップＳ４０１において、内部メモリ８の置き換え対象データを選択する。セキュアＶＭＭ５１６は、ＬＲＵなどのような置き換えアルゴリズムに基づいて、データブロックB301-1-0-511の置き換え対象としてデータブロックB301-1-0-1を選択する。
【０４６５】
セキュアＶＭＭ５１６は、ステップＳ４０２において、データブロックB301-1-0-1を内部メモリ８から追い出す追い出し対象として選択する。
【０４６６】
セキュアＶＭＭ５１６は、ステップＳ４０３において、追い出し処理を実行する。
【０４６７】
追い出し処理終了後、ステップＳ４０４において、セキュアＶＭＭ５１６は、置き換え対象データブロックB301-1-0-1が内部メモリ８に存在するかチェックし、置き換え対象データブロックB301-1-0-1は内部メモリ８に存在しないので、置き換え処理を終了する。なお、置き換え対象が内部メモリ８に存在するか否かをチェックする理由は、バッファ管理の方針に依存して、後述のように置き換え対象がテーブルブロックの場合に参照先ブロックの追い出しを必要とし、複数回の追い出しが必要となる場合があるためである。上記の例では、１回の追い出し処理で追い出しは完了する。
【０４６８】
上述の置き換え処理終了後、内部メモリ８の検証バッファ領域５１９ｊには、空き領域が確保される。
【０４６９】
上記図１６の置き換え処理と、上記図１４の情報処理装置５００の構成とを関連付けて説明する。
【０４７０】
ステップＳ４０１において、検証管理部５２９から要求を受けたバッファ領域管理部５４７は、最も使用されていないデータブロックB301-1-0-1を置き換え対象として選択する。置き換え対象がページテーブルの場合、置き換え対象のページテーブルとその配下にある関連ブロックとが置き換え対象として選択される。このため、バッファ領域管理部５４７は、ステップＳ４０２において、置き換え対象データブロックB301-1-0-1と関連ブロックから追い出し対象を選択し、ステップＳ３０３において、追い出し処理を実行する。
【０４７１】
追い出し処理終了後、セキュアＶＭＭ５１６は、ステップＳ４０４において、置き換え対象がまだ検証記憶部５３６に存在するかチェックする。
【０４７２】
追い出し対象が検証記憶部５３６に存在する場合、置き換え対象が検証記憶部５３６に存在しなくなるまでステップＳ４０２以降の処理が繰り返される。セキュアＶＭＭ５１６は、置き換え対象が検証記憶部５３６に存在しなくなると、置き換え処理を終了する。
【０４７３】
＜ＲＷデータに関する追い出し処理の詳細＞
上記の図１７を用いてＲＷデータの追い出し処理について説明する。
【０４７４】
追い出し対象となるデータブロックをデータブロックB301-1-0-1とする。このデータブロックB301-1-0-1のカウンタ値C301-1-0-1は、内部メモリ８に記憶されている。データブロックB301-1-0-1のＭＡＣ値M301-1-0-1は、外部メモリ７に記憶されている。外部メモリ７のＭＡＣ値M301-1-0-1は、外部メモリ７に記憶されているデータブロックB301-1-0-1のＭＡＣ値である。よって、内部メモリ８で更新されたデータブロックB301-1-0-1が外部メモリ７へ書き戻される場合には、ＭＡＣ値M301-1-0-1の更新処理が必要となる。一方、内部メモリ８のデータブロックB301-1-0-1が更新されなかった場合、外部メモリ７と内部メモリ８でデータブロックB301-1-0-1の内容に差がないことから、ＭＡＣ値M301-1-0-1の更新処理は必要ない。
【０４７５】
セキュアＶＭＭ５１６は、データブロックB301-1-0-1の追い出し処理を開始し、ステップＳ５０１において、追い出し対象となったデータブロックB301-1-0-1の内容に更新があるか確認する。更新がない場合はステップＳ５０５へ進む。
【０４７６】
更新がある場合は、ステップＳ５０２において、セキュアＶＭＭ５１６は、追い出し対象データブロックB301-1-0-1のＭＡＣ更新処理を行う。セキュアＶＭＭ５１６は、追い出し対象データブロックB301-1-0-1の上位の検証ブロックのカウンタブロックT302-1-0に含まれるカウンタ値C301-1-0-1をインクリメントし、セキュアＤＭＡコントローラ５１１は、追い出し対象データブロックB301-1-0-1、変換リストを用いて変換された外部メモリ７のアドレスEaddr(B301-1-0-1)、インクリメントされたカウンタ値C301-1-0-1に基づいて、追い出し対象データブロックB301-1-0-1の新しいＭＡＣ値M301-1-0-1を生成する。
【０４７７】
その後、セキュアＶＭＭ５１６は、ステップＳ５０３において、内部メモリ８の変換リストを用いて追い出し対象データブロックB301-1-0-1の書き出し先となる外部メモリ７のアドレスEaddr(B301-1-0-1)を決定する。
【０４７８】
セキュアＤＭＡコントローラ５１１は、ステップＳ５０４において、追い出し対象データブロックB301-1-0-1を外部メモリ７のアドレスEaddr(B301-1-0-1)に、生成されたＭＡＣ値M301-1-0-1を外部メモリ７のＭＡＣブロックT303-1-0の所定の場所に、書き出す。
【０４７９】
内部メモリ８で追い出し対象データブロックB301-1-0-1が更新されていない場合、又は、ＭＡＣ更新と追い出し対象の書き出しが実行された場合、ステップＳ５０５において、セキュアＶＭＭ５１６は、追い出し対象データブロックB301-1-0-1を指すテーブルエントリE301-1-0-1の参照先アドレスを外部メモリ７のアドレスEaddr(B301-1-0-1)に書き換え、追い出し対象テーブルエントリE301-1-0-1を無効にする。そして、セキュアＶＭＭ５１６は、内部メモリ８のバッファ管理情報領域５１９ｉに記憶された追い出し対象データブロックB301-1-0-1に関する制御情報を削除し、検証バッファ領域５１９ｊのデータブロックB301-1-0-1が記憶されていた領域を解放する。この処理によって、検証バッファ領域５１９ｊにデータブロックサイズの空き領域が生まれる。そして、セキュアＶＭＭ５１６は、追い出し処理を終了する。
【０４８０】
上記図１７の追い出し処理と、上記図１４の情報処理装置５００の構成とを関連付けて説明する。
【０４８１】
バッファ書出管理部５４８は、追い出し対象データブロックB301-1-0-1の追い出し処理を開始する。バッファ書出管理部５４８は、ステップＳ５０１において、追い出し対象となったデータブロックB301-1-0-1の内容に更新があるか否かを確認する。
【０４８２】
更新がない場合、バッファ書出管理部５４８は、ステップＳ５０５において、データを破棄して内部メモリ８のバッファ領域を解放し、参照関係更新部５４６は、テーブルエントリの書き換え処理を行う。
【０４８３】
更新がある場合、バッファ書出管理部５４８は、ステップＳ５０２において、検証情報生成部５３１に追い出し対象データブロックB301-1-0-1のＭＡＣ更新処理を依頼する。検証情報生成部５３１は、追い出し対象データブロックB301-1-0-1の上位検証ブロックのカウンタブロックT302-1-0に含まれるカウンタ値C301-1-0-1をインクリメントし、追い出し対象データブロックB301-1-0-1、変換リストを用いて変換された外部メモリ７のアドレスEaddr(B301-1-0-1)、インクリメントされたカウンタ値C301-1-0-1に基づいて、追い出し対象データブロックB301-1-0-1の新しいＭＡＣ値M201-1-0-1を生成する。
【０４８４】
その後、バッファ書出管理部５４８は、ステップＳ５０３において、内部メモリ８の変換リストを用いて、追い出し対象データブロックB301-1-0-1の書き出し先となる外部メモリ７のアドレスEaddr(B301-1-0-1)を決定し、ステップＳ５０４において、外部書出部５３４に、追い出し対象データブロックB301-1-0-1を外部メモリ７のアドレスEaddr(B301-1-0-1)に書き込む依頼をし、生成されたＭＡＣ値M301-1-0-1を外部メモリ７のＭＡＣブロックT303-1-0の所定のアドレスへ書き込む依頼をする。
【０４８５】
ＭＡＣ更新とデータの書き出しが実行された場合、ステップＳ５０５において、参照関係更新部５４６は、追い出し対象データブロックB301-1-0-1を指すテーブルエントリE301-1-0-001の参照先アドレスを外部メモリ７のアドレスEaddr(B301-1-0-1)に書き換え、エントリを無効にする。そして、バッファ領域管理部５４７は、内部メモリ８のバッファ管理情報領域５１９ｉに記憶された追い出し対象データブロックB301-1-0-1に関する制御情報を削除し、検証バッファ領域５１９ｊの追い出し対象データブロックB301-1-0-1が記憶されていた領域を解放する。この処理によって、検証バッファ領域５１９ｊにデータブロックサイズの空き領域が確保される。そして、バッファ書出管理部５４８は、追い出し処理を終了する。
【０４８６】
以上が、アドレス解決、検証、置き換え、追い出しの各処理に必要な上位のテーブルブロックが全て内部メモリ８に記憶済みの場合のデータブロックに対する各処理である。
【０４８７】
<テーブルブロックの検証処理>
以下では、データブロックB301-1-0-511のアドレス解決に必要なテーブルブロックの一部が内部メモリ８に存在しない場合、換言すれば、テーブルブロックが検証される場合の処理について説明する。
【０４８８】
テーブルブロックT301，T301-1とそれらに付されるカウンタブロックT302，T302-1は内部メモリ８の検証バッファ領域５１９ｊに記憶されるとする。検証バッファ領域５１９ｊは検証記憶部５３６に含まれる。テーブルブロックT301-1-0とそれに付随するカウンタブロックT302-1-0は内部メモリ８に記憶されていないとする。
【０４８９】
<ページテーブルに関するアドレス解決処理>
ページテーブルに関するアドレス解決処理は、先で説明した図１２のフローチャートを流用して説明する。
【０４９０】
ＭＭＵ５０６は、データブロックB301-1-0-511のアドレス解決処理を開始し、ステップＳ１０１において、ページウォークによるアドレス解決を行う。
【０４９１】
ＭＭＵ５０６は、ステップＳ１０２において、テーブルブロックT301のテーブルエントリE301-1をチェックする。
【０４９２】
ＭＭＵ５０６は、テーブルエントリE301-1が有効の場合に、テーブルエントリE301-1を参照する。
【０４９３】
ＭＭＵ５０６は、ステップＳ１０９において、データブロックB301-1-0-511のアドレスが解決したかチェックし、未解決の場合には、ステップＳ１０１のページウォークを繰り返す。
【０４９４】
ＭＭＵ５０６は、ステップＳ１０２において、テーブルブロックT301-1のテーブルエントリE301-1-0が無効であることを検出すると、ステップＳ１０３においてテーブルエントリE301-1-0のアクセス権限をチェックする。
【０４９５】
テーブルエントリE301-1-0がＲＷアクセス（テーブルブロックへのアクセス）を示すため、制御はＭＭＵ５０６からセキュアＶＭＭ５１６に移り、セキュアＶＭＭ５１６は、ステップＳ１０４においてテーブルエントリE301-1-0によって参照されるテーブルブロックT301-1-0のツリー検証処理を行い、検証処理終了後、無効であったテーブルエントリE301-1-0は有効になり、セキュアＶＭＭ５１６は制御をＭＭ５０６Ｕに戻す。ＭＭＵ５０６は、ステップＳ１０５において、ツリー検証後設定処理を実行し、ＭＡＣ比較検証情報に含まれている検証要否情報に検証不要を設定する。
【０４９６】
ＭＭＵ５０６は、ステップＳ１０９において、データブロックB301-1-0-511までのアドレスが解決したかチェックし、未解決の場合には、再度、ステップＳ１０１のページウォークを行い、同様の処理が繰り返される。
【０４９７】
データブロックB301-1-0-511までのアドレスが解決された場合、ステップＳ１１０において、ＭＭＵ５０６は、データ参照処理を再開し、アドレス解決処理を終了する。
【０４９８】
上記のようなページテーブルのアドレス解決処理と、上記図１４に示す情報処理装置５００の構成とを関連付けて説明する。
【０４９９】
命令実行ユニット５０５は、データ参照要求を発行する。ＭＭＵ５０６は、テーブルブロックT301-1-0が未読み込みであるため、アドレス変換キャッシュ５２７のキャッシュミスと判断し、ＭＭＵ５０６のアドレス解決部５３７は、アドレス解決を実行する。ＭＭＵ５０６のアドレス解決部５３７は、ステップ１０１において、ページウォークを実行する。
【０５００】
ＭＭＵ５０６は、ステップＳ１０２において、検証記憶部５３６に記憶されたテーブルブロックT301のテーブルエントリE301-1をチェックし、有効であることからテーブルエントリE301-1を参照する。
【０５０１】
ＭＭＵ５０６は、ステップＳ１０９において、データブロックB301-1-0-511のアドレスが解決されたかチェックし、未解決であるためステップＳ１０１のページウォークを繰り返す。
【０５０２】
ＭＭＵ５０６は、ステップＳ１０２において、テーブルブロックT301-1のテーブルエントリE301-1-0が無効であることを検出すると、ＭＭＵ５０６は、ステップＳ１０３において、テーブルエントリE301-1-0のアクセス権限をチェックする。
【０５０３】
ＭＭＵ５０６は、テーブルエントリE301-1-0がＲＷアクセス（テーブルブロックへのアクセス）を示すため、その旨を検証管理部５２９に通知する。
【０５０４】
検証管理部５２９は、ステップＳ１０４においてテーブルエントリE301-1-0によって参照されるテーブルブロックT301-1-0のツリー検証処理を実行する。検証処理終了後、検証管理部５２９は、参照関係更新部５４６に通知を行い、参照関係更新部５４６は、無効であったテーブルエントリE301-1-0を有効化する。検証管理部５２９は、ＭＭＵ５０６に読み込み完了を通知する。
【０５０５】
ＭＭＵ５０６は、ステップＳ１０５において、ツリー検証後設定処理を実行し、ＭＡＣ比較検証情報に含まれている検証要否情報に検証不要を設定する。
【０５０６】
ＭＭＵ５０６は、ステップＳ１０９において、データブロックB301-1-0-511までのアドレスが解決したかチェックし、未解決の場合には、再度、ステップＳ１０１のページウォークを行い、同様の処理が繰り返される。
【０５０７】
ＭＭＵ５０６は、ステップＳ１０４において、データブロックB301-1-0-511までのアドレスが解決するとステップＳ１１０においてデータ参照処理を再開し、アドレス解決処理を終了する。
【０５０８】
アドレス解決が完了した段階では、アドレス解決に必要なページテーブルは、検証管理部５２９によって検証され、記憶領域管理部５３５により検証記憶部５３６に動的に確保されたバッファに、検証済みの状態で記憶される。そして、ＭＭＵ５０６は、アドレス解決結果をアドレス変換キャッシュ５２７にキャッシュする。
【０５０９】
<ページテーブルに関するツリー検証処理の詳細>
ページテーブルに関するツリー検証処理は、先で説明した図１５のツリー検証処理を流用して説明する。ここでは、テーブルブロックT301-1-0の検証処理を説明する。
【０５１０】
セキュアＶＭＭ５１６は、テーブルブロックT301-1-0の検証処理を開始し、ステップＳ３０１において、内部メモリ８の検証バッファ領域５１９ｊに空き領域が存在するか否かチェックする。
【０５１１】
空き領域がない場合、セキュアＶＭＭ５１６は、ステップＳ３０２において、置き換え処理により領域の解放を行う。
【０５１２】
続いて、セキュアＶＭＭ５１６は、ステップＳ３０３において、検証されるデータを外部メモリ７から内部メモリ８の検証バッファ領域５１９ｊの空き領域へコピーする。このとき、セキュアＤＭＡコントローラ５１１は、ＭＡＣツリー構造又はＭＡＣ＋カウンタ構造で定義されるＭＡＣ生成方法に基づいて、読み込まれたデータのＭＡＣ値を生成する。
【０５１３】
そして、セキュアＶＭＭ５１６は、ステップＳ３０４において、生成されたＭＡＣ値を使って検証対象テーブルブロックT301-1-0の改ざん検証を行う。セキュアＶＭＭ５１６は、検証対象テーブルブロックT301-1-0に対応するＭＡＣ値M301-1-0を外部メモリ７から読み込み、内部メモリ８の一時バッファ領域５１９ｋに記憶し、このＭＡＣ値M301-1-0とセキュアＤＭＡコントローラ５１１で生成されたＭＡＣ値とを比較する。ＭＡＣ値M301-1-0は、外部メモリ７のＭＡＣブロックT303-1に含まれている。正しい上位カウンタ値に対応するＭＡＣ値は、秘密鍵がなければ計算できない。上位カウンタ値は、上位テーブルとともに検証されている。このため、読み込まれたＭＡＣ値M301-1-0に対する検証は実行される必要がない。
【０５１４】
セキュアＶＭＭ５１６は、ステップＳ３０５において、ＭＡＣ値が不整合の場合、検証失敗と判断し、ステップＳ３０６の検証失敗後処理に制御を移す。ステップＳ３０６において、セキュアＶＭＭ５１６は、検証失敗後処理でエラー処理などを行い、その後に検証処理を異常終了させる。
【０５１５】
セキュアＶＭＭ５１６は、ステップＳ３０５において、ＭＡＣ値が整合した場合、検証成功と判断する。セキュアＶＭＭ５１６は、ステップＳ３０７において、無効となっていたテーブルエントリE201-1-0の参照先アドレスに、検証対象テーブルブロックT301-1-0の内部メモリ８のアドレスIaddr(T301-1-0)を書き込む。このとき、テーブルブロックT301-1-0の外部メモリ７のアドレスEaddr(T301-1-0)は、バッファブロック単位にバッファ管理情報領域５１９ｉに記憶される。その後、セキュアＶＭＭ５１６は、検証処理を終了する。
【０５１６】
上記のようなページテーブルのツリー検証処理を、上記図１２のアドレス解決処理のフローチャートと上記図１４に示す情報処理装置５００の構成とを関連付けて説明する。
【０５１７】
ＭＭＵ５０６のアドレス解決部５３７は、データブロックB301-1-0-511のアドレス解決処理を開始し、ステップＳ１０１において、ページウォークによるアドレス解決を行う。
【０５１８】
アドレス解決部５３７は、ステップＳ１０２において、検証記憶部５３６を参照し、テーブルブロックT301のテーブルエントリE301-1をチェックし、テーブルエントリE301-1が有効であるため、テーブルエントリE301-1を参照する。
【０５１９】
ＭＭＵ５０６は、ステップＳ１０９において、データブロックB301-1-0-511のアドレスが解決したか否かチェックし、未解決であるため、ステップＳ１０１のページウォークを繰り返す。
【０５２０】
ＭＭＵ５０６は、ステップＳ１０２において、テーブルブロックT301-1のテーブルエントリE301-1-0が無効であることを検出すると、ステップＳ１０３においてテーブルエントリE301-1-0のアクセス権限をチェックする。
【０５２１】
テーブルエントリE301-1-0がＲＷアクセス（テーブルブロックへのアクセス）を示すため、その旨を検証管理部５２９に通知する。
【０５２２】
検証情報取得部５２９は、記憶領域管理部５３５へ空き領域の確保を依頼する。記憶領域管理部５３５のバッファ領域管理部５４７は、ステップＳ３０１において検証記憶部５３６に空き領域が存在するか否か判断し、空き領域がない場合に、ステップＳ３０２の置き換え処理を実行する。
【０５２３】
検証情報取得部５４０は、ステップＳ３０３において、検証記憶部５３６に記憶されている検証対象データのリプレイ攻撃防止情報を取得し、その他の検証に使用されるデータの読み込みを外部読込部５３２に要求する。外部読込部５３２は、要求されたデータを外部メモリ７から読み込み、読み込まれたデータのうち検証対象データを検証情報計算部５４１に送る。
【０５２４】
検証情報計算部５４１は、ステップＳ３０４において、検証対象データからＭＡＣツリー構造又はＭＡＣ＋カウンタ構造で定義されるＭＡＣ生成方法により、読み込まれたデータのＭＡＣ値を生成する。改ざん判定部５３９は、予め生成されたＭＡＣ値と検証情報計算部５４１で計算されたＭＡＣ値を照合する。
【０５２５】
ＭＡＣ値が整合せず検証に失敗した場合、ステップＳ３０６において、検証管理部５２９は、命令実行ユニット５０５に検証失敗を通知し、その後の処理を中止する。
【０５２６】
ＭＡＣ値が整合して検証に成功した場合、ステップＳ３０７において、検証管理部５２９は、参照関係更新部５４６に読み込み成功を通知する。参照関係更新部５４６は、無効となっていたテーブルエントリE301-1-0の参照先アドレスに検証対象ページブロックT301-1-0の検証記憶部５３６のアドレスIaddr(T301-1-0)を書き込む。さらに、参照関係更新部５４６は、テーブルエントリE301-1-0に記憶されている検証対象ページブロックT301-1-0の外部メモリ７のアドレスEaddr(T301-1-0)を、バッファブロック単位にバッファ領域管理部５４７に記憶し、検証処理を終了する。
【０５２７】
<ページテーブルに関する置き換え処理の詳細>
ページテーブルに関する置き換え処理は、先で説明した図１６の置き換え処理を流用して説明する。ここでは、置き換え処理を発生させたテーブルブロックをT301-1-0とし、最も使用されていないテーブルブロックをT301-1-511として説明する。テーブルブロックの置き換えを行う場合には、そのテーブルブロックの関連ブロックも共に内部メモリ８から外部メモリ７へ追い出される。すなわち、テーブルブロックT301-1-511が置き換え対象となる場合、テーブルブロックT301-1-511から参照可能であり内部メモリ８に存在するデータブロックB301-1-511-0〜B301-1-511-511も、テーブルブロックT301-1-511と共に、追い出し対象として選択される。この場合には、セキュアＶＭＭ５１６は、テーブルブロックT301-1-511の上位のテーブルブロックT301-1に含まれるテーブルエントリE301-1-511を無効にする。ただし、本実施形態において必ずしも全ての関連ブロックを追い出し対象とする必要はない。例えば、適切なバッファ管理が実行された場合には、データブロックB301-1-511-0〜B301-1-511-511は、テーブルブロックT301-1-511の追い出し処理後であっても内部メモリ８に存在し続けていてもよい。このように、関連ブロックの一部がキャッシュされているようなデータ管理方法としては、ファイルシステムのディレクトリキャッシュなどで用いられる手法を適用することができる。
【０５２８】
セキュアＶＭＭ５１６は、置き換え処理を開始し、ステップＳ４０１において、内部メモリ８の置き換え対象テーブルブロックを選択する。セキュアＶＭＭ５１６は、置き換えアルゴリズムに基づいて、テーブルブロックT301-1-0の置き換え対象としてテーブルブロックT301-1-511を選択する。
【０５２９】
セキュアＶＭＭ５１６は、ステップＳ４０２において、置き換え対象テーブルブロックT301-1-511、関連ブロックであるデータブロックB301-1-511-0〜B301-1-511-511のうち内部メモリ８に存在するデータブロックを内部メモリ８から追い出す対象として選択し、ステップＳ４０３において追い出し処理を実行する。
【０５３０】
追い出し処理終了後、セキュアＶＭＭ５１６は、ステップＳ４０４において、置き換え対象が内部メモリ８に存在するか否かチェックする。置き換え対象の置き換え処理が全て終了し、置き換え対象の全てが内部メモリ８に存在しなくなるまで、ステップＳ４０２以降の処理が繰り返される。セキュアＶＭＭ５１６は、置き換え対象が内部メモリ８に存在しなくなると、置き換え処理を終了する。
【０５３１】
上述の置き換え処理終了後、内部メモリ８の検証バッファ領域５１９ｉには、テーブルブロックT301-1-511とカウンタブロック、及び、内部メモリ８に存在した関連ブロックに応じた空き領域が確保される。
【０５３２】
上記のようなページテーブルに関する置き換え処理と、上記図１４に示す情報処理装置５００の構成とを関連付けて説明する。
【０５３３】
バッファ領域管理部５４７は、検証管理部５２９から要求を受け、ステップＳ４０１において、最も使用されていないテーブルブロックT301-1-511を置き換え対象として選択する。
【０５３４】
バッファ領域管理部５４７は、ステップＳ４０２において、置き換え対象のテーブルブロックT301-1-511及び置き換え対象のテーブルブロックT301-1-511の配下にある関連ブロックのいずれかを、追い出し対象として選択し、ステップＳ４０３において、追い出し処理を実行する。
【０５３５】
バッファ領域管理部５４７は、ステップＳ４０４において、置き換え対象の全てが内部メモリ８から追い出されるまで追い出し処理を繰り返す。
【０５３６】
<ページテーブルに関する追い出し処理の詳細>
ページテーブルに関する追い出し処理は、先で説明した図１７の追い出し処理を流用して説明する。ここでは、追い出し対象がテーブルブロックT301-1-511の場合を例として説明する。このテーブルブロックT301-1-511のカウンタ値C301-1-511は、内部メモリ８に記憶されている。テーブルブロックT301-1-511のＭＡＣ値M301-1-511は、外部メモリ７に記憶されている。外部メモリ７のＭＡＣ値M301-1-511は、外部メモリ７に記憶されているテーブルブロックT301-1-511のＭＡＣ値である。よって、内部メモリ８で更新されたテーブルブロックT301-1-511が外部メモリ７へ書き戻される場合には、ＭＡＣ値M301-1-511の更新処理が必要となる。一方、内部メモリ８のテーブルブロックT301-1-511が更新されなかった場合、外部メモリ７と内部メモリ８でテーブルブロックT301-1-511の内容に差がないことから、ＭＡＣ値M301-1-511の更新処理は必要ない。
【０５３７】
セキュアＶＭＭ５１６は、テーブルブロックT301-1-511の追い出し処理を開始し、ステップＳ５０１において、追い出し対象のテーブルブロックT301-1-511の内容に更新があるか確認する。
【０５３８】
更新がない場合、セキュアＶＭＭ５１６は、ステップＳ５０５の内部メモリ８の領域の解放へ進む。
【０５３９】
更新がある場合は、セキュアＶＭＭ５１６は、ステップＳ５０２において、テーブルブロックT301-1-511のＭＡＣ更新処理を行う。セキュアＶＭＭ５１６は、テーブルブロックT301-1-511の上位の検証ブロックのカウンタブロックT302-1に含まれるカウンタ値C301-1-511をインクリメントし、セキュアＤＭＡコントローラ５１１は、テーブルブロックT301-1-511、変換リストを用いて変換された外部メモリ７のアドレスEaddr(T301-1-511)、インクリメントされたカウンタ値C301-1-511に基づいて、テーブルブロックT301-1-511の新しいＭＡＣ値M301-1-511を生成する。
【０５４０】
その後、セキュアＶＭＭ５１６は、ステップＳ５０３において、内部メモリ８の変換リストを用いてテーブルブロックT301-1-511の書き出し先となる外部メモリ７のアドレスEaddr(T301-1-511)を決定する。
【０５４１】
セキュアＤＭＡコントローラ５１１は、ステップＳ５０４において、テーブルブロックT301-1-511を外部メモリ７のアドレスEaddr(T301-1-511)に、生成されたＭＡＣ値M301-1-511を外部メモリ７のＭＡＣブロックT303-1の所定の場所に、書き出す。
【０５４２】
テーブルブロックT301-1-511に内容の更新がない場合、又は、ＭＡＣ更新とデータの書き出しが実行された場合、セキュアＶＭＭ５１６は、ステップＳ５０５において、テーブルブロックT301-1-511を指すテーブルエントリE301-1-511の参照先アドレスを外部メモリ７のアドレスEaddr(T301-1-511)に書き換え、テーブルエントリE301-1-511を無効にする。そして、セキュアＶＭＭ５１６は、バッファ管理情報領域５１９ｉに記憶されているテーブルブロックT301-1-511に関する制御情報を削除し、検証バッファ領域５１９ｊにおいてテーブルブロックT301-1-511の記憶領域を解放する。
【０５４３】
この処理によって、検証バッファ領域５１９ｊにテーブルブロックとカウンタブロックサイズの空き領域が生まれる。最後に、セキュアＶＭＭ５１６は、追い出し処理を終了する。
【０５４４】
上記のようなページテーブルに関する追い出し処理と、上記図１４に示す情報処理装置５００の構成とを関連付けて説明する。
【０５４５】
バッファ領域管理部５４７は、テーブルブロックT301-1-511の追い出し処理を開始し、ステップＳ５０１において、追い出し対象のテーブルブロックT301-1-511の内容に更新があるか判断する。更新がない場合、処理はステップＳ５０５の内部メモリ８の領域の解放へ進む。
【０５４６】
更新がある場合、検証情報生成部５３１は、ステップＳ５０２において、テーブルブロックT301-1-511のＭＡＣ更新処理を行う。検証情報生成部５３１は、テーブルブロックT301-1-511の上位検証ブロックのカウンタブロックT302-1に含まれるカウンタ値C301-1-511をインクリメントする。検証情報生成部５３１は、テーブルブロックT301-1-511、変換リストを用いて変換された外部メモリ７のアドレスEaddr(T301-1-511)、インクリメントされたカウンタ値C301-1-511に基づいて、テーブルブロックT301-1-511の新しいＭＡＣ値M201-1-511を生成する。
【０５４７】
その後、参照関係更新部５４６は、ステップＳ５０３において、検証記憶部５３６の変換リストを用いてテーブルブロックT301-1-511の書き出し先となる外部メモリ７のアドレスEaddr(T301-1-511)を決定する。外部書出部５３４は、ステップＳ５０４において、テーブルブロックT301-1-511を外部メモリ７のアドレスEaddr(T301-1-511)に書き出し、生成されたＭＡＣ値M301-1-511を外部メモリ７のＭＡＣブロックT303-1の所定の場所に書き出す。
【０５４８】
テーブルブロックT301-1-511が更新されていない場合、又は、ＭＡＣ更新と書き出しが完了済みの場合、ステップＳ５０５において、参照関係更新部５４６は、テーブルブロックT301-1-511を指すテーブルエントリE301-1-511の参照先アドレスを外部メモリ７のアドレスEaddr(T301-1-511)に書き換え、テーブルエントリE301-1-511を無効にする。そして、バッファ領域管理部５４７は、バッファ管理情報領域５１９ｉに記憶されたテーブルブロックT301-1-511に関する制御情報を削除し、検証バッファ領域５１９ｊにおいてテーブルブロックT301-1-511が記憶されていた領域を解放する。この処理によって、検証バッファ領域５１９ｊにテーブルブロックサイズの空き領域が確保される。最後に、バッファ領域管理部５４７は、追い出し処理を終了する。
【０５４９】
上記のようなテーブルブロックに対する各種処理は、例えば、データブロックのアドレス解決、検証、置き換え、追い出しの各処理において、必要なテーブルブロックが内部メモリ８に記憶されていない場合に実行される。
【０５５０】
以上説明したように、本実施形態においては、セキュアページテーブルツリー１２１と改ざん検証用のセキュア検証子ツリー１２２のグラフ構造を整合させ、内部メモリ８の記憶状態を安全に管理し、効率よく検証処理を実行することができ、外部メモリ７への改ざん攻撃から厳密に情報処理装置５００を保護することができる。
【０５５１】
本実施形態においては、外部メモリ７から内部メモリ８へテーブルブロックと検証ブロックとが同時に読み込まれ、同時に検証される。これにより、情報処理装置５００は、改ざん可能な外部メモリ７のページテーブルツリー９、検証子ツリー１０及びデータを、完全性を保証した状態で、効率よく、安全に、内部メモリ８に記憶し、使用することができる。
【０５５２】
本実施形態においては、更新された内部メモリ８のセキュアページテーブルツリー１２１又はデータが外部メモリ７へ書き戻される場合に、この書き戻されるページテーブル又はデータから検証子が計算され、検証子に基づいて内部メモリ８に記憶されているセキュア検証子ツリー１２２が更新される。これにより、更新後に、ページテーブル又はデータが内部メモリ８に読み込まれる場合に、読み込まれるページテーブル又はデータの改ざんを検知することができる。
【０５５３】
本実施形態においては、ページテーブルが内部メモリ８から外部メモリ７へ書き出され、その後、当該ページテーブルが外部メモリ７から内部メモリ８へ読み込まれ、当該ページテーブルのテーブルエントリによって参照されるページテーブル又はデータが未だ内部メモリ８に記憶されていない場合に、当該テーブルエントリが無効を示すように管理される。これにより、下層のページテーブル又はデータに対する参照処理及び検証処理を正しく実行することができる。
【０５５４】
情報処理装置５００は、ゲストＯＳに対するアドレス透過性を持ち、未検証のデータに対する読み出しを検出する。情報処理装置５００は、大規模なデータに対する検証を可能にする。情報処理装置５００は、適度な保護レベルを持ち、検証オーバーヘッドが増加することを抑制する。
【０５５５】
本実施形態においては、内部メモリ８に記憶されたセキュアページテーブルツリー１２１を用いてアドレス変換を行い、セキュア検証子ツリー１２２を用いて全てのページテーブル、検証子、データを保証する。このツリー検証は、プロセッサ５０１によってアクセスされるデータが多くなるほど、ページング回数も増え、検証回数も増加する。具体的には、例えば、全保護データに対して、ページ単位のツリー検証を実行する場合、アクセスされるデータ領域の増加に伴って内部メモリ８へのページング回数が増加し、検証回数も増加する。ツリー検証では、セキュアページテーブルツリー１２１とセキュア検証子ツリー１２２との階層構造を整合させ、検証処理の負荷を軽減している。本実施形態では、さらに、１命令当たりの検証によるオーバーヘッド（以下、検証オーバーヘッドという）を削減する。これにより、本実施形態では、大規模なシステムへ適用され、データアクセス領域が増加した場合であっても、ツリー検証の検証回数の増加を抑制することができる。
【０５５６】
ツリー検証の検証回数の増加を抑制するために、本実施形態では、単純にデータの一部をツリー検証から除外し、この除去された一部のデータに対して別の検証を行う。
【０５５７】
外部メモリ７に記憶されているデータの中には、読み込みしか行われないＲＯデータと読み込み及び書き出しが行われるＲＷデータが存在する。本実施形態においては、データ更新があるＲＷデータに対してリプレイ攻撃対策のためツリー検証を行う。しかしながら、本実施形態においては、更新のないＲＯデータに対してはツリー検証よりも単純な検証であっても十分な保護強度を保つことができるため、ツリー検証から除外する。ツリー検証から除外されたＲＯデータはキャッシュメモリ４５，５０７ａ，５０７ｂ，５０８，５２８経由で読み出されることにより、ＯＳデータの多くを占めるＲＯデータを内部メモリ８から除外することができ、ツリー検証の検証回数を大幅に削減することができるできる。
【０５５８】
例えば、ＯＳデータの中には、時刻によってＲＯデータとＲＷデータとの間で性質が切り替わるデータが存在する。したがって、本実施形態においては、ＲＯデータに対してもリプレイ攻撃に対する防御を実現してもよい。
【０５５９】
本実施形態では、リプレイ攻撃を排除するために、データ更新の度に変化する攻撃者が知りえない値であるリプレイ攻撃防止情報を用いて、検証子を生成する。ツリー検証では、このリプレイ攻撃防止情報をページ単位に付与し、ページテーブルの階層構造と一致させ、検証に必要なデータ量を圧縮し、検証オーバーヘッドを効率化する。キャッシュメモリ４５，５０７ａ，５０７ｂ，５０８，５２８経由の単純な検証にリプレイ攻撃防止情報を付与した場合、リプレイ攻撃防止情報の記憶場所、管理方法によっては、全データに対するツリー検証よりも検証オーバーヘッドが増すことが予想される。そこで、本実施形態では、ツリー検証を前提とし、ＲＯデータに限りキャッシュメモリ４５，５０７ａ，５０７ｂ，５０８，５２８経由でツリー検証と連携した単純な検証を実行し、外部メモリ７のデータに対して完全性保護を実現する。すなわち、全データに対する検証子ツリー１０は、ページテーブルツリー９と整合した構造であり、ＲＷデータはツリー検証により内部メモリ８経由で検証を行い、ＲＯデータはＲＯデータに対してのみ有効な検証子によりキャッシュメモリ４５，５０７ａ，５０７ｂ，５０８，５２８経由で検証を行う。
【０５６０】
ＲＯデータとＲＷデータとの双方は、ツリー検証によって保護されたページ単位に付与されるリプレイ攻撃防止情報を用いて検証子が生成される。ＲＷデータの検証子は、ページ単位に存在し、ＲＯデータの検証子はキャッシュライン単位に存在する。キャッシュライン単位で検証が行われる対象は、ＲＯデータとなる。換言すれば、あるデータに対して、ＲＯアクセス時にはキャッシュライン単位で検証を行い、ＲＷアクセス時にはページ単位で検証とデータ更新を行う。
【０５６１】
本実施形態においては、ＲＯデータのアクセス単位が小さくなったことにより１検証当たりのデータ利用効率を向上させることができる。アクセス単位が小さいほど無駄な読み込みは発生しにくい。このため、本実施形態では、１アクセス当たりのデータ利用効率を高くすることができる。完全性検証処理において、データ検証を制限することにより、検証オーバーヘッドの発生を抑制することができる。
【０５６２】
［第３の実施形態］
本実施形態は、上記第２の実施形態の変形例であり、検証管理をセキュアＶＭＭ５１６で実行する。
【０５６３】
上記第２の実施形態は、データのアクセス権限ごとに異なる検証を行い、内部メモリ８の利用効率を向上させ、外部メモリ７の改ざん検証を高速に実現する。さらに、第２の実施形態では、ＭＭＵ５０６がハードウェア制御で検証管理を実行し、ページフォールトによるセキュアＶＭＭ５１６の遷移回数を削減し、検証オーバーヘッドを削減している。しかしながら、一般的な組み込み機器向けのＭＭＵにはこのような制御機構が実装されていない。このため、第２の実施形態を実現するためには、ＭＭＵをカスタマイズする必要がある。ＭＭＵは、メモリ管理に密接に関わっていることから、ＭＭＵのカスタマイズはキャッシュ検証部５１４の追加と比較してコストが高くなる場合がある。
【０５６４】
そこで、本実施形態では、ＭＭＵを変更することなくソフトウェアの制御により検証管理を行う構成を説明する。本実施形態では、例えばセキュアＶＭＭ５１６によるソフトウェア制御で検証管理を行う場合について説明するが、他のソフトウェアによって同様の検証管理が実現されてもよい。
【０５６５】
図２１は、本実施形態に係る情報処理装置の構成を例示するブロック図である。
【０５６６】
情報処理装置５４９は、典型的なＭＭＵ５５０と検証制御部５５１とを備えることを除き、上記図１４の情報処理装置５００とほぼ同様である。
【０５６７】
本実施形態においては、検証の制御をＭＭＵ５５０ではなく、セキュアＶＭＭ５１６に相当する検証制御部５５１で実行する。本実施形態では、検証制御部５５１がＭＡＣ生成バッファ５３８を含むとする。
【０５６８】
セキュアＶＭＭ５１６は、重複検証を避けるために、検証状態の管理を行う。そのため、アドレス解決時、ＭＭＵ５５０は、無効であるテーブルエントリにアクセスすると、この無効のテーブルエントリのアクセス権限に関わらず、常にページフォールトを発生させる。
【０５６９】
これにより制御はＭＭＵ５５０からセキュアＶＭＭ５１６に移り、セキュアＶＭＭ５１６は、テーブルエントリのアクセス権限の確認を行う。
【０５７０】
テーブルエントリのアクセス権限がＲＷアクセスの場合は、セキュアＶＭＭ５１６は、ツリー検証を行い、ツリー検証の終了後、ＲＷデータ用のＭＡＣ比較検証情報を生成し、生成されたＭＡＣ比較検証情報をＭＡＣ生成バッファ５３８に記憶し、セキュアＶＭＭ５１６は制御をＭＭＵ５５０に戻す。
【０５７１】
テーブルエントリのアクセス権限がＲＯアクセスの場合は、ＲＯデータ用のＭＡＣ比較検証情報を生成し、生成されたＭＡＣ比較検証情報をＭＡＣ生成バッファ５３８に記憶し、セキュアＶＭＭ５１６は制御をＭＭＵ５５０に戻す。
【０５７２】
このようにセキュアＶＭＭ５１６を動作させることで、上記第２の実施形態と同様の検証をセキュアＶＭＭ５１６で実現できる。
【０５７３】
上記の図１２に示すアドレス解決処理を用いて、本実施形態に係るＲＯデータ及びＲＷデータに対するアドレス解決処理を説明する。以下の本実施形態に係るアドレス解決処理の前提は、上記第２の実施形態での説明と同様である。本実施形態で説明しない各種の処理は、上記第２の実施形態の場合とほぼ同じである。アドレス解決処理は、データ参照処理において発生する場合がある。
【０５７４】
ＭＭＵ５５０は、アドレス解決処理を開始し、ステップＳ１０１において、ページウォークによるアドレス解決を実行する。
【０５７５】
ＭＭＵ５５０は、ステップＳ１０２において、テーブルエントリをチェックする。
【０５７６】
テーブルエントリが有効の場合、処理はステップＳ１０９に移動する。
【０５７７】
テーブルエントリが無効の場合、ＭＭＵ５５０は、ページフォールトを発生し、制御はＭＭＵ５５０からセキュアＶＭＭ５１６に移る。
【０５７８】
セキュアＶＭＭ５１６は、ステップＳ１０３において、テーブルエントリのアクセス権限をチェックする。
【０５７９】
テーブルエントリがＲＷデータの場合、セキュアＶＭＭ５１６は、ステップＳ１０４において、ツリー検証処理を実行する。
【０５８０】
ツリー検証処理終了後、セキュアＶＭＭ５１６は、検証対象のテーブルエントリを有効化し、ステップＳ１０５において、ツリー検証後設定処理としてＭＡＣ比較検証情報に含まれている検証要否情報に検証不要を設定する。ツリー検証後設定処理後、セキュアＶＭＭ５１６は制御をＭＭＵ５５０に戻す。
【０５８１】
テーブルエントリがＲＯデータの場合、セキュアＶＭＭ５１６は、ステップＳ１０６において、キャッシュラインＭＡＣ値の有効／無効をチェックする。
【０５８２】
キャッシュラインＭＡＣ値が有効の場合、処理は、ステップＳ１０８に移動する。
【０５８３】
キャッシュラインＭＡＣ値が無効の場合、ステップＳ１０７において、セキュアＶＭＭ５１６及びセキュアＤＭＡコントローラ５１１は、キャッシュラインＭＡＣ値の生成処理を実行する。
【０５８４】
ステップＳ１０８において、セキュアＶＭＭ５１６は、ＭＡＣ比較検証設定処理を実行する。ＭＡＣ比較検証設定処理では、セキュアＶＭＭ５１６は、テーブルエントリを有効にし、ＭＡＣ比較検証情報に含まれている検証要否情報に検証必要を設定する。ＭＡＣ比較検証設定処理後、セキュアＶＭＭ５１６は制御をＭＭＵ５５０に戻す。
【０５８５】
ステップＳ１０９において、ＭＭＵ５５０は、データブロックまでのアドレスが解決したかチェックし、アドレスが解決するまでページウォークを繰り返す。
【０５８６】
アドレス解決後、ＭＭＵ５５０は、ステップＳ１１０において、データ参照処理を再開し、アドレス解決処理を終了する。
【０５８７】
上記図２１の情報処理装置５４９の構成と上記図１２のアドレス解決処理との関係を説明する。
【０５８８】
ＭＭＵ５５０のアドレス解決部５３７は、アドレス変換キャッシュ５２７からアドレス解決要求を受けると、アドレス解決処理を開始する。
【０５８９】
ＭＭＵ５５０は、ステップＳ１０１において、ページウォークを実行する。
【０５９０】
ＭＭＵ５５０は、ステップＳ１０２において、検証記憶部５３６に記憶されている該当するテーブルエントリをチェックする。
【０５９１】
テーブルエントリが有効の場合、処理はステップＳ１０９に移動する。
【０５９２】
テーブルエントリが無効の場合、ＭＭＵ５５０は、ページフォールトを発生させ、検証制御部５５１に通知する。通知を受けた検証制御部５５１は、ステップＳ１０３において、テーブルエントリのアクセス権を確認する。
【０５９３】
テーブルエントリのアクセス権限がＲＷアクセスの場合、検証制御部５５１は、その結果を検証管理部５２９に通知し、通知を受けた検証管理部５２９は、ステップＳ１０４において、テーブルエントリによって参照されるページブロックに対してツリー検証処理及びデータの読み込みを行う。検証処理終了後、検証管理部５２９は、参照関係更新部５４９に通知を行い、参照関係更新部５４９が無効であったテーブルエントリを有効化する。
【０５９４】
その後、検証管理部５２９は、読み込み完了として制御を検証制御部５５１に戻す。
【０５９５】
読み込み完了を受けた検証制御部５５１は、ステップＳ１０５において、ツリー検証後設定処理としてＭＡＣ生成バッファ５３８のＭＡＣ比較検証情報の検証要否情報に検証不要を設定する。ツリー検証後設定処理後、検証制御部５５１は、制御をＭＭＵ５５０に戻す。
【０５９６】
テーブルエントリのアクセス権限がＲＯアクセスの場合、ステップＳ１０６において、検証制御部５５１は、キャッシュラインＭＡＣ値の有効／無効をチェックする。
【０５９７】
キャッシュラインＭＡＣ値が有効の場合、処理は、ステップＳ１０８に移動する。
【０５９８】
キャッシュラインＭＡＣ値が無効の場合、ステップＳ１０７において、検証制御部５５１は、キャッシュラインＭＡＣ値の生成処理を実行する。
【０５９９】
ステップＳ１０８において、検証制御部５５１は、テーブルエントリを有効化し、ＭＡＣ生成バッファ５３８のＭＡＣ比較検証情報に、検証記憶部５３６から取得されたリプレイ攻撃防止情報を設定し、検証要否情報に検証必要を設定するＭＡＣ比較検証設定処理を実行する。ＭＡＣ比較検証設定処理後、検証制御部５５１は制御をＭＭＵ５５０に戻す。
【０６００】
ＭＭＵ５５０は、ステップＳ１０９において、データブロックまでのアドレスが解決したかチェックし、アドレスが解決するまでページウォークを繰り返す。
【０６０１】
アドレス解決後、ＭＭＵ５５０は、ステップＳ１１０において、データ参照処理を再開し、アドレス解決処理を終了する。
【０６０２】
以上説明した本実施形態においては、ＭＭＵ５５０をカスタマイズすることなく、低コストで、上記第２の実施形態と同様の効果を得ることができる。
【０６０３】
［第４の実施形態］
上記第２及び第３の実施形態では、ハードウェア又はソフトウェアで、アクセス権限に基づいて異なる検証処理を管理する。
【０６０４】
本実施形態は、上記第２及び第３の実施形態の変形例であり、ＭＡＣツリー構造に、キャッシュラインＭＡＣ値を管理するページテーブル型のデータ構造を備える。
【０６０５】
図２２は、本実施形態に係るセキュア検証子ツリーを例示するデータ構造図である。
【０６０６】
セキュア検証子ツリーは、ページテーブル型ＭＡＣツリー構造を持つ。ページテーブル型ＭＡＣツリー構造は、ＭＡＣツリー構造に、キャッシュラインＭＡＣ値を管理するためのページテーブル型のデータ構造を加えたデータ構造である。
【０６０７】
本実施形態においては、１ページを４キロバイトとし、ＭＡＣ値を８バイト、キャッシュラインを３２バイトとする。本実施形態では、キャッシュラインＭＡＣブロックは各データブロックに対して１つずつ割り当てられるとする。しかしながら、複数のデータブロックに対して１つのキャッシュラインＭＡＣブロックが割り当てられてもよい。あるページテーブルの関連ブロックにはＲＯデータ、ＲＷデータが混在してもよい。
【０６０８】
この図２２に示すペーテーブル型ＭＡＣツリー構造では、キャッシュラインＭＡＣブロックは、対応するデータブロックの参照元テーブルブロックに付随して配置される。
【０６０９】
ページテーブル型ＭＡＣツリー構造における各キャッシュラインＭＡＣ値は、キャッシュラインのデータ、キャッシュラインアドレス、キャッシュラインのデータを含むページブロックのＭＡＣ値（リプレイ攻撃防止情報）に基づいて、生成される。キャッシュラインのデータを含むページブロックのＭＡＣ値は、セキュア検証ツリー１２２におけるリプレイ攻撃防止情報であり、その完全性はツリー検証によって保証される。
【０６１０】
例えば、データブロックB201-1-0-511に含まれるキャッシュラインのデータCL201-1-0-511-1のＭＡＣ値は、キャッシュラインのデータCL201-1-0-511-1とそのアドレスaddr(CL201-1-0-511-1)、キャッシュラインのデータCL201-1-0-511-1を含むデータブロックB201-1-0-511のＭＡＣ値M201-1-0-511に基づいて生成される。ＭＡＣ値M201-1-0-511はセキュア検証ツリー１２２におけるリプレイ攻撃防止情報であり、データブロックB201-1-0-511の参照元テーブルブロックT201-1-0に付随するＭＡＣブロックT202-1-0に含まれる。生成されたＭＡＣ値と比較されるキャッシュラインＭＡＣ値CM201-1-0-511-1は、キャッシュラインのデータCL201-1-0-511-1を含むデータブロックB201-1-0-511の参照元テーブルブロックT201-1-0に付随するキャッシュラインＭＡＣブロックT203-1-0に存在する。
【０６１１】
ペーテーブル型ＭＡＣツリー構造では、キャッシュラインＭＡＣ値に対して、特別なアドレス解決処理を用いる必要はない。ペーテーブル型ＭＡＣツリー構造においては、各キャッシュラインＭＡＣ値は、対応するキャッシュラインの参照元ページブロックに付随して管理される。したがって、各キャッシュラインＭＡＣ値のアドレスは、その参照元ページテーブルのオフセットに基づいて取得される。
【０６１２】
本実施形態に係るペーテーブル型ＭＡＣツリー構造を用いて、データブロックB201-1-0-511に含まれるキャッシュラインのデータCL201-1-0-511-1に対してデータ参照要求が発生した場合の動作例を説明する。アクセス権限ごとの検証管理はＭＭＵ５０６が実行するとする。
【０６１３】
ＲＷデータに対するツリー検証は、レベル３のページテーブルにキャッシュラインＭＡＣブロックが付随される特徴を持つが、基本的な動作は上記第２及び第３の実施形態の場合と同様である。具体的に説明すると、テーブルブロックT201-1-0に対するツリー検証が発生した場合、テーブルブロックT201-1-0とその外部メモリ７のアドレスEaddr(T201-1-0)、付随するＭＡＣブロックT202-1-0に基づいて、ＭＡＣ値が生成される。生成されたＭＡＣ値は、一段上位の検証ブロックに含まれるＭＡＣ値M201-1-0と比較検証される。この場合に、ページテーブルT201-1-0に付随するキャッシュラインＭＡＣブロックT203-1-0はツリー検証の対象とはならない。キャッシュラインＭＡＣブロックT203-1-0の配置アドレスは検証済みのページテーブルによって正当性を保証される。
【０６１４】
ＲＯデータに対する検証は、該当キャッシュラインのデータCL201-1-0-511-1を含むデータブロックB201-1-0-511のＭＡＣ値をリプレイ攻撃防止情報とし、リプレイ攻撃防止情報を含むＭＡＣ比較検証情報をアドレス変換キャッシュ５０９，５１０にキャッシュする。他の処理は、上記第２の実施形態と同様である。
【０６１５】
以上説明した本実施形態においては、ページテーブル型ＭＡＣツリー構造のセキュア検証子ツリーを用いて、上記各実施形態と同様の効果を得ることができる。
【０６１６】
［第５の実施形態］
本実施形態は、上記第２及び第３の実施形態の変形例であり、ＭＡＣ＋カウンタ構造に、キャッシュラインＭＡＣ値を管理する独立型のデータ構造を備える。
【０６１７】
図２３は、本実施形態に係るセキュア検証子ツリーを例示するデータ構造図である。
【０６１８】
図２４は、本実施形態に係るキャッシュラインＭＡＣブロックと、このキャッシュラインＭＡＣブロックの上位のページテーブルと関連付けられているカウンタブロックとの関係を例示するブロック図である。
【０６１９】
本実施形態に係るセキュア検証子ツリーは、ＭＡＣ＋カウンタ構造に、キャッシュラインＭＡＣ値を管理するための独立型のデータ構造を加えたデータ構造である。
【０６２０】
本実施形態においては、１ページを４キロバイトとし、カウンタ値を８バイト、ＭＡＣ値を８バイト、キャッシュラインを３２バイトとする。本実施形態では、キャッシュラインＭＡＣブロックは各データブロックに対して１つずつ割り当てられるとする。しかしながら、複数のデータブロックで１つのキャッシュラインＭＡＣブロックが割り当てられてもよい。あるページテーブルの関連ブロックにはＲＯデータ、ＲＷデータが混在してもよい。
【０６２１】
キャッシュラインＭＡＣブロックは、対応するデータブロックと同階層に配置される。キャッシュラインＭＡＣブロックのアドレスは、参照元テーブルブロックに付随するカウンタブロックのデータフィールド内に記憶される。
【０６２２】
あるページブロックに対応するカウンタブロックのエントリは、予備領域、カウンタ値領域、キャッシュラインＭＡＣ値のアドレス領域を含む。
【０６２３】
本実施形態において、カウンタブロックT302-1-0のエントリE301-1-0-511は、カウンタ値C301-1-0-511-ctr、キャッシュラインＭＡＣ値のアドレスC301-1-0-511-addrを含む。エントリE301-1-0-511は、キャッシュラインＭＡＣ値のアドレスC301-1-0-511-addrを記憶するアドレス領域を含む。このため、カウンタ値C301-1-0-511-ctrを記憶するカウンタ値領域は短くなる。しかし、例えばカウンタサイズを１２８ビットとすると、たとえエントリE301-1-0-511のうちのカウンタ領域が６４ビットになったとしても、情報処理装置５００，５４９は１ページに対して2^64-1、すなわち２の（６４−１）乗回更新可能である。内部メモリ８が不揮発性メモリであり、再起動に伴うカウンタ値のクリアが発生しにくい情報処理装置５００，５４９の場合であっても、2^64-1回程度の更新回数が保証されていれば、通常利用には十分対応可能である。また、カウンタ値がオーバーフローした場合はカウンタ値をリセットし、セキュア検証子ツリーを再構成すればよい。
【０６２４】
本実施形態に係る独立型ＭＡＣ＋カウンタ構造における各キャッシュラインＭＡＣ値は、キャッシュラインのデータ、そのキャッシュラインのアドレス、キャッシュラインのデータを含むデータブロックのカウンタ値（リプレイ攻撃防止情報）に基づいて、生成される。キャッシュラインのデータを含むページブロックのカウンタ値は、セキュア検証ツリーにおけるリプレイ攻撃防止情報であり、このカウンタ値の完全性はツリー検証によって保証されている。
【０６２５】
より具体的に説明すると、例えば、データブロックB301-1-0-511のデータCL301-1-0-511-1を含むキャッシュラインＭＡＣ値は、キャッシュラインのデータCL301-1-0-511-1とそのアドレスaddr(CL301-1-0-511-1)、キャッシュラインのデータCL301-1-0-511-1を含むデータブロックB301-1-0-511のカウンタ値C301-1-0-511-ctrに基づいて、生成される。カウンタ値C301-1-0-511-ctrは、このセキュア検証ツリーにおけるリプレイ攻撃防止情報であり、データブロックB301-1-0-511の参照元テーブルブロックT301-1-0に付随するカウンタブロックT302-1-0に含まれる。生成されたＭＡＣ値と比較されるキャッシュラインＭＡＣ値CM301-1-0-511-1は、外部メモリ７のキャッシュラインＭＡＣブロックBM301-1-0-511に存在する。
【０６２６】
本実施形態において、キャッシュラインＭＡＣ値のアドレス解決処理では、キャッシュラインＭＡＣ値をアクセスするために、別途キャッシュラインＭＡＣ値のアドレスを管理する必要がある。キャッシュラインＭＡＣ値のアドレス管理は、様々な手法を用いて実現可能であるが、本実施形態では、ＭＡＣ＋カウンタ構造のカウンタブロックのデータ領域を用いる。
【０６２７】
あるデータブロックに対応するキャッシュラインＭＡＣブロックのアドレスは、データブロックの参照元テーブルエントリに対応するカウンタブロックのデータ領域内に記憶される。例えば、キャッシュラインのデータCL301-1-0-511-1のキャッシュラインＭＡＣ値CM301-1-0-511-1のアドレスは、カウンタ値C301-1-0-511に含まれるアドレスC301-1-0-511-addrである。このアドレスC301-1-0-511-addrは、キャッシュラインのデータCL301-1-0-511-1のアドレス解決処理時に、カウンタ値C301-1-0-511-ctrと共に取得可能である。キャッシュ検証部５１４は、ＭＡＣ比較検証情報として、キャッシュラインＭＡＣ値のアドレスアドレスC301-1-0-511-addrとカウンタ値C301-1-0-511-ctrとを取得することができる。
【０６２８】
独立型ＭＡＣ＋カウンタ構造を用いて、データブロックB301-1-0-511の一部でありキャッシュラインに含まれるデータCL301-1-0-511-1に対して、データ参照要求が発生した場合の動作例を説明する。本実施形態において、ＭＭＵ５０６は、アクセス権限ごとの検証管理を行う。
【０６２９】
本実施形態のように、カウンタブロックのデータ領域が変更され、データブロックと同じ階層にキャッシュラインＭＡＣブロックが配置されたとしても、ＲＷデータに対するツリー検証は、上記第２の実施形態と同様である。すなわち、テーブルブロックT301-1-0に対するツリー検証が発生した場合、テーブルブロックT301-1-0とその外部メモリ７のアドレスEaddr(T301-1-0)、付随するカウンタブロックT302-1-0に基づいて、ＭＡＣ値が生成され、一段上位の検証ブロックに含まれるＭＡＣ値M301-1-0と比較検証が実行される。このとき、キャッシュラインＭＡＣブロックのアドレスも検証されるため、キャッシュラインＭＡＣブロックの配置アドレスの偽造を防止することができる。
【０６３０】
独立型ＭＡＣ＋カウンタ構造を用いたＲＯデータに対する検証は、該当キャッシュラインのデータを含むデータブロックのカウンタ値をリプレイ攻撃防止情報とし、リプレイ攻撃防止情報とキャッシュラインＭＡＣ値のアドレスとを含むＭＡＣ比較検証情報を、アドレス変換バッファ５０９，５１０にキャッシュする。他の処理は、上記第２の実施形態と同様である。
【０６３１】
以上説明した本実施形態においては、独立型ＭＡＣ＋カウンタ構造のセキュア検証子ツリーを用いて、上記各実施形態と同様の効果を得ることができる。
【０６３２】
［第６の実施形態］
本実施形態においては、上記第４及び第５の実施形態の変形例であり、ＭＡＣツリー構造に、キャッシュラインＭＡＣ値を管理する独立型のデータ構造を備える。
【０６３３】
図２５は、本実施形態に係るセキュア検証子ツリーを例示するデータ構造図である。
【０６３４】
本実施形態に係るセキュア検証子ツリーは、ＭＡＣツリー構造を含み、さらに、キャッシュラインＭＡＣ値を管理するための独立型のデータ構造を含む。
【０６３５】
本実施形態においては、１ページを４キロバイトとし、ＭＡＣ値を８バイト、キャッシュラインを３２バイトとする。本実施形態では、キャッシュラインＭＡＣブロックは各データブロックに対して１つずつ割り当てられるとする。しかしながら、複数のデータブロックで１つのキャッシュラインＭＡＣブロックが割り当てられてもよい。あるページテーブルの関連ブロックにはＲＯデータ、ＲＷデータが混在してもよい。
【０６３６】
キャッシュラインＭＡＣブロックは、対応するデータブロックと同階層に配置される。キャッシュラインＭＡＣブロックのアドレスは、キャッシュラインＭＡＣアドレスを管理するためのページテーブル（以下、キャッシュラインＭＡＣテーブルブロックという）に記憶される。
【０６３７】
キャッシュラインＭＡＣテーブルブロックは、データブロックを参照するテーブルブロックに１つ関連付けられる。キャッシュラインＭＡＣテーブルブロックは、関連付けられているテーブルブロックの参照先データブロックのキャッシュラインＭＡＣ値のアドレスを管理する。
【０６３８】
テーブルブロックの参照先のデータブロックと、このテーブルブロックに関連付けられているキャッシュラインＭＡＣテーブルブロックの参照先のキャッシュラインＭＡＣブロックとは、対応関係にある。
【０６３９】
独立型ＭＡＣツリー構造における各キャッシュラインＭＡＣ値は、キャッシュラインのデータと、そのキャッシュラインのアドレスと、キャッシュラインのデータを含むデータブロックのＭＡＣ値（リプレイ攻撃防止情報）に基づいて、生成される。キャッシュラインのデータを含むデータブロックのＭＡＣ値は、セキュア検証ツリーにおけるリプレイ攻撃防止情報であり、その完全性はツリー検証によって保証される。
【０６４０】
より具体的な例で説明すると、データブロックB201-1-0-511の一部であるキャッシュラインのデータCL201-1-0-511-1のＭＡＣ値は、キャッシュラインのデータCL201-1-0-511-1、そのアドレスaddr(CL401-1-0-511-1)、キャッシュラインのデータCL201-1-0-511-1を含むデータブロックB201-1-0-511のＭＡＣ値M201-1-0-511に基づいて、生成される。ＭＡＣ値M201-1-0-511はセキュア検証ツリーにおけるリプレイ攻撃防止情報であり、データブロックB201-1-0-511の参照元テーブルブロックT201-1-0に付随するＭＡＣブロックT202-1-0に含まれる。生成されたＭＡＣ値と比較されるキャッシュラインＭＡＣ値CM201-1-0-511-1は、キャッシュラインＭＡＣテーブルブロックT203-1-0のテーブルエントリCE201-1-0-511が指すキャッシュラインＭＡＣブロックBM201-1-0-511に存在する。
【０６４１】
キャッシュラインＭＡＣ値CM201-1-0-511-1は、生成されたＭＡＣ値と比較される。キャッシュラインのデータCL201-1-0-511-1は、データブロックB201-1-0-511に含まれている。参照元テーブルブロックT201-1-0は、データブロックB201-1-0-511を参照する。キャッシュラインＭＡＣテーブルブロックT203-1-0は、参照元テーブルブロックT201-1-0に付随する。キャッシュラインＭＡＣテーブルブロックT203-1-0のエントリCE201-1-0-511は、キャッシュラインＭＡＣブロックBM201-1-0-511を示すアドレスを含む。
【０６４２】
本実施形態においては、キャッシュラインＭＡＣ値のアドレス解決のためにアドレス管理用のページテーブルが用いられる。あるデータブロックに対応するキャッシュラインＭＡＣブロックのアドレスは、データブロックの参照元ページテーブルに関連付けられているキャッシュラインＭＡＣページテーブルに記憶されている。
【０６４３】
例えば、キャッシュラインのデータCL201-1-0-511-1のキャッシュラインＭＡＣ値CM201-1-0-511-1のアドレスは、キャッシュラインＭＡＣテーブルブロックT203-1-0のエントリCE201-1-0-511に記憶されている。キャッシュラインＭＡＣテーブルブロックT203-1-0は、キャッシュラインのデータCL201-1-0-511-1を含むデータブロックB201-1-0-511の参照元テーブルブロックT201-1-0に付随する。キャッシュラインＭＡＣテーブルブロックT203-1-0は、テーブルブロックT201-1-0、ＭＡＣブロックT202-1-0と共にツリー検証により内部メモリ８に読み込まれる。このため、キャッシュラインＭＡＣブロックBM201-1-0-511のアドレスは、キャッシュラインのデータCL301-1-0-511-1のアドレス解決処理時に、ＭＡＣ値M201-1-0-511と共に取得可能である。
【０６４４】
本実施形態に係る独立型ＭＡＣツリー構造を用いて、データブロックB201-1-0-511に含まれるキャッシュラインのデータCL201-1-0-511-1に対してデータ参照要求が発生した場合の動作例を説明する。アクセス権限ごとの検証管理はＭＭＵ５０６が実行するとする。
【０６４５】
ＲＷデータに対するツリー検証は、レベル３のページテーブルにキャッシュラインＭＡＣページテーブルが付随することから、このキャッシュラインＭＡＣページテーブルを含めてＭＡＣ値の計算と検証を行う。具体的に説明すると、テーブルブロックT201-1-0に対するツリー検証が発生した場合、テーブルブロックT201-1-0とその外部メモリ７のアドレスEaddr(T201-1-0)、付随するＭＡＣブロックT202-1-0、付随するキャッシュラインＭＡＣテーブルブロックT203-1-0に基づいて、ＭＡＣ値が生成される。生成されたＭＡＣ値は、一段上位の検証ブロックに含まれるＭＡＣ値M201-1-0と比較検証される。このようにＭＡＣ値が生成されることにより、キャッシュラインＭＡＣブロックBM201-1-0-511のアドレスも検証されるため、攻撃者によるキャッシュラインＭＡＣブロックBM201-1-0-511の配置アドレスの偽造を防止することができる。その他の動作については、基本的に第２の実施形態と同様である。
【０６４６】
独立型ＭＡＣツリー構造を用いたＲＯデータに対する検証は、該当キャッシュラインのデータCL201-1-0-511-1を含むデータブロックB201-1-0-511のＭＡＣ値M201-1-0-511をリプレイ攻撃防止情報とし、このリプレイ攻撃防止情報をＭＡＣ比較検証情報に設定し、アドレス変換バッファ５０９，５１０にキャッシュする。他の処理は、上記第２の実施形態と同様である。
【０６４７】
以上説明した本実施形態においては、独立型ＭＡＣツリー構造のセキュア検証子ツリーを用いて、上記各実施形態と同様の効果を得ることができる。
【０６４８】
［第７の実施形態］
本実施形態は、上記第３乃至第５の実施形態の変形例であり、ＭＡＣ＋カウンタ構造に、キャッシュラインＭＡＣ値を管理するページテーブル型のデータ構造を備える。
【０６４９】
本実施形態では、ＭＡＣ＋カウンタ構造のテーブルブロックに、対応するページテーブル型のキャッシュメモリＭＡＣブロックを関連付けたデータ構造を適用する。これにより、上記各実施形態と同様の効果を得ることができる。
【０６５０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０６５１】
１…メモリ管理装置、２…外部入出力部、３…アドレス変換部、４，４２…検証計算部、５，４３…検証部、６…更新部、７…外部メモリ、８…内部メモリ、９…ページテーブルツリー、１０…検証子ツリー、１０１…親テーブル、２０１〜２０ｍ…子テーブル、３０１〜３０ｘ…データ、ｐｅ１〜ｐｅｍ…親エントリ、ｐｖ１〜ｐｖｍ…親検証子、ｃｅ１〜ｃｅｘ…子エントリ、ｃｖ１〜ｃｖｘ…子検証子、４０…置換管理部、４１…判定部、４４，５０９，５１０…アドレス変換バッファ、４５，５０７ａ，５０７ｂ，５０８…キャッシュメモリ、４７…リプレイ攻撃防止情報、４８…キャッシュラインＭＡＣ値、１２１…セキュアページテーブルツリー、１２２…セキュア検証子ツリー、５０５…命令実行ユニット、５０６…ＭＭＵ、５１１…セキュアＤＭＡコントローラ、５１４…キャッシュ検証部、５１６…セキュアＶＭＭ、５１７…セキュアＯＳ、５１８…非セキュアＯＳ、５１３…鍵保存ユニット。
【図１】
2016009882.tif 000003
【図２】
2016009882.tif 000004
【図３】
2016009882.tif 000005
【図４】
2016009882.tif 000006
【図５】
2016009882.tif 000007
【図６】
2016009882.tif 000008
【図７】
2016009882.tif 000009
【図８】
2016009882.tif 000010
【図９】
2016009882.tif 000011
【図１０】
2016009882.tif 000012
【図１１】
2016009882.tif 000013
【図１２】
2016009882.tif 000014
【図１３】
2016009882.tif 000015
【図１４】
2016009882.tif 000016
【図１５】
2016009882.tif 000017
【図１６】
2016009882.tif 000018
【図１７】
2016009882.tif 000019
【図１８】
2016009882.tif 000020
【図１９】
2016009882.tif 000021
【図２０】
2016009882.tif 000022
【図２１】
2016009882.tif 000023
【図２２】
2016009882.tif 000024
【図２３】
2016009882.tif 000025
【図２４】
2016009882.tif 000026
【図２５】
2016009882.tif 000027