(57)【要約】      （修正有）【課題】データの完全性を検証し、データの改ざんを防止するメモリ管理装置、プログラム及び方法を提供する。【解決手段】メモリ管理装置１は、第１の記憶部７に記憶されているテーブルツリー９と検証子ツリー１０とを読み込み及び書き込む。テーブルツリー９は、親テーブル１０１及び子テーブル２０１を含む。検証子ツリー１０は、親テーブル１０１に関連付けられる親検証子ｐｖ１及び子テーブル２０１に関連付けられる子検証子ｃｖ１を含む。メモリ管理装置１は、安全な第２の記憶部８に、テーブルツリー９の一部であり第１のアドレスを第２のアドレスに変換するためのセキュアテーブルツリー１２１と検証子ツリー１０の一部であるセキュア検証子ツリー１２２を記憶する。メモリ管理装置１は、第１の記憶部７の子テーブル２０１及び子検証子ｃｖ１に基づいて計算される検証情報と、セキュア検証子ツリー１２２の親検証子ｐｖ１とに基づいて、検証を行う。【選択図】図１
2016009884.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)
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本実施形態は、データの完全性を検証し、データの改ざんを防止する。
【課題を解決するための手段】
【０００９】
実施形態によれば、メモリ管理装置は、外部入出力部、アドレス変換部、検証計算部、検証部、判定部、更新部を備える。外部入出力部は、親テーブル及び子テーブルを含むテーブルツリーと、前記親テーブルに関連付けられる親検証子及び前記子テーブルに関連付けられる子検証子を含む検証子ツリーとに対して読み込み及び書き込みを行う。テーブルツリーと検証子ツリーとは、第１の記憶部に記憶されている。親検証子は子テーブル及び子検証子に対する検証に用いられる。アドレス変換部は、安全な第２の記憶部に記憶されているテーブルツリーの一部であるセキュアテーブルツリー及び検証子ツリーの一部であるセキュア検証子ツリーに基づいて、第１のアドレスを第２のアドレスに変換する。検証計算部は、テーブルツリーに含まれており第１のアドレスを第２のアドレスに変換するために必要な第１の子テーブルが、セキュアテーブルツリーに含まれていない場合に、テーブルツリーにおける第１の子テーブルと検証子ツリーに含まれており第１の子テーブルに関連付けられている第１の子検証子とに基づいて検証情報を計算する。検証部は、検証情報と、セキュア検証子ツリーに含まれており第１の子テーブルを参照する第１の親テーブルに関連付けられている第１の親検証子とに基づいて、検証を行う。判定部は、新規データの記憶領域の割り当てを要求するオペレーティングシステムの種別が安全性を必要とするか否かを判定する。更新部は、検証の結果が正当の場合、第１の子テーブル及び第１の子検証子をセキュアテーブルツリー及びセキュア検証子ツリーに組み込み、オペレーティングシステムが安全性を必要としないと判定された場合に、第２のアドレスが第１の記憶部に記憶されている新規データを示すように、セキュアテーブルツリーの第２のアドレスを設定し、第１の子テーブルのうちの新規データを参照するエントリに、有効状態であることを設定する。
【図面の簡単な説明】
【００１０】
【図１】第１の実施形態に係るメモリ管理装置の構成を例示するブロック図。
【図２】第２の実施形態に係る情報処理装置を例示するハードウェア構成図。
【図３】２ステージのアドレス変換を実行する構成を例示するブロック図。
【図４】アドレス変換とデータ参照とを実行するハードウェア構成及びセキュアページテーブルツリーのデータ構造を例示するブロック図。
【図５】第２の実施形態に係るブロックの定義を例示する概念図。
【図６】第２の実施形態に係る情報処理装置によるデータ取得及びアドレス変換の概念を例示するブロック図。
【図７】第２の実施形態に係るメモリマップを例示する図。
【図８】第２の実施形態に係るセキュアページテーブルツリー及びセキュア検証子ツリーのＭＡＣツリー構造を例示するデータ構造図。
【図９】第２の実施形態に係るセキュアページテーブルツリー及びセキュア検証子ツリーのＭＡＣ＋カウンタ構造を例示するデータ構造図。
【図１０】セキュアページテーブルツリーとページテーブルツリーとの関係の一例を示すデータ構造図。
【図１１】第２の実施形態に係るデータ参照処理を例示するフローチャート。
【図１２】第２の実施形態に係るアドレス解決処理を例示するフローチャート。
【図１３】第２の実施形態に係る情報処理装置の第１の構成を例示するブロック図。
【図１４】第２の実施形態に係るツリー検証処理を例示するフローチャート。
【図１５】第２の実施形態に係る置き換え処理を例示するフローチャート。
【図１６】第２の実施形態に係る追い出し処理を例示するフローチャート。
【図１７】第２の実施形態に係るデータ参照テーブルに含まれるテーブルエントリの参照状態を例示するデータ構造図。
【図１８】第２の実施形態に係る情報処理装置の第２の構成を例示するブロック図。
【図１９】第２の実施形態に係る情報処理装置によるブート処理を例示するフローチャート。
【図２０】第３の実施形態に係る情報処理装置によるブート処理を例示するフローチャート。
【発明を実施するための形態】
【００１１】
以下、図面を参照しながら本発明の各実施の形態について説明する。なお、以下の説明において、略又は実質的に同一の機能及び構成要素については、同一符号を付し、必要に応じて説明を行う。
【００１２】
［第１の実施形態］
本実施形態においては、安全であることを必要とするセキュアＯＳ（オペレーティングシステム：Operating System）（保護ＯＳ）と、安全であることを必要としない非セキュアＯＳ（非保護ＯＳ）とで、アドレス変換のためのページテーブルの管理を切り替える。
【００１３】
セキュアＯＳは、改ざん検証により保護される。非セキュアＯＳのデータは、検証により保護される必要がない。一方で、非セキュアＯＳの誤動作による不正改変から、同一のシステム上に共存するセキュアＯＳのイメージを守るために、非セキュアＯＳのメモリアクセス範囲を限定するためのページテーブルは、検証により保護される。
【００１４】
図１は、本実施形態に係るメモリ管理装置の構成を例示するブロック図である。
【００１５】
メモリ管理装置１は、外部入出力部２、アドレス変換部３、検証計算部４、検証部５、更新部６、置換管理部４０、判定部４１、初期化部４２を備える。
【００１６】
また、メモリ管理装置１は、第１の記憶部である外部メモリ７と、第２の記憶部である内部メモリ８と、第３の記憶部であるキャッシュメモリ４５と、に対して、読み込み及び書き込みを行う。
【００１７】
外部メモリ７は、例えば、不揮発性の記憶装置である。例えば、外部メモリ７は、ＮＡＮＤ型フラッシュメモリ、ＮＯＲ型フラッシュメモリ、ＭＲＡＭ（Magnetoresistive Random access memory：磁気抵抗メモリ）、ＰＲＡＭ（Phase change Random access memory：相変化メモリ）、ＲｅＲＡＭ（Resistive Random access memory：抵抗変化型メモリ）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）などの不揮発性半導体メモリでもよい。外部メモリ７は、主記憶装置として用いられてもよく、ハードディスク、ＳＳＤ（Solid State Drive）などのような補助記憶装置として用いられてもよい。
【００１８】
外部メモリ７は、階層構造を持つページテーブルツリー９と、階層構造を持つ検証子ツリー１０とを記憶する。本実施形態において、ページテーブルツリー９と検証子ツリー１０とは、２段の階層を持つ。しかしながら、ページテーブルツリー９と検証子ツリー１０とは当然に３段以上でもよい。
【００１９】
ページテーブルツリー９は、複数のページテーブルの階層構造で形成される。ページテーブルツリー９は、親テーブル１０１及び子テーブル２０１〜２０ｍを含む。テーブルエントリＥがアドレス情報Ｘを備えており、アドレス情報Ｘが最終のデータＤのアクセス先を決定するための中間のテーブルＴ又はデータＤを指している場合、テーブルエントリＥは、テーブルＴ又はデータＤを参照しているという。テーブルエントリＥの参照先アドレスは、アドレス情報Ｘである。テーブルＴ又はデータＤの参照元は、テーブルエントリＥである。親テーブル１０１に含まれる親エントリｐｅ１〜ｐｅｍは、子テーブル２０１〜２０ｍを参照するために用いられる。子テーブル２０１，２０ｍに含まれる子エントリｃｅ１〜ｃｅｘは、データ３０１〜３０ｘを参照するために用いられる。
【００２０】
本実施形態では、典型的な例として、ページテーブルツリー９において、親テーブル１０１の親エントリｐｅ１、子テーブル２０１の子エントリｃｅ１を経由して、データ３０１がアクセスされる場合を説明する。しかしながら、他の親テーブル、他の親エントリ、他の子テーブル、他の子エントリを経由して他のデータがアクセスされる場合も同様である。
【００２１】
検証子ツリー１０は、親検証子ｐｖ１〜ｐｖｍ及び子検証子ｃｖ１〜ｃｖｘを含む階層構造を持つ。親検証子ｐｖ１〜ｐｖｍは、親テーブル１０１に関連付けられる。子検証子ｃｖ１〜ｃｖｎは、子テーブル２０１に関連付けられる。他の子検証子と他の子テーブルとの関係についても、子検証子ｃｖ１〜ｃｖｎと子テーブル２０１との関係と同様である。
【００２２】
本実施形態において、子テーブル２０１と関連付けられている子検証子ｃｖ１〜ｃｖｎは、それぞれ、子テーブル２０１に含まれている子エントリｃｅ１〜ｃｅｎによって参照されるデータ３０１〜３０ｎに対する検証に用いられる。
【００２３】
親テーブル１０１と関連付けられている親検証子ｐｖ１は、親テーブル２０１に含まれている親エントリｐｅ１によって参照される子テーブル２０１と、子テーブル２０１と関連付けられている子検証子ｃｖ１〜ｃｖｎとに対する検証に用いられる。他の親検証子と他の子テーブル及び他の子検証子との関係についても、親検証子ｐｖ１と子テーブル２０１及び子検証子ｃｖ１〜ｃｖｎとの関係と同様である。
【００２４】
内部メモリ８は、外部から直接参照不可能な記憶装置であり、不正なアクセスから防御される。例えば、内部メモリ８は、プロセッサパッケージ内部の記憶装置である。具体的には、内部メモリ８は、例えば、下記の第２の実施形態で説明される図２で、プロセッサ５０１のパッケージと一体化したハードウェアであり、内部バス５１５ｂを経由して外部バス５０４との間でデータ転送が行われるが、データ転送はプロセッサ５０１の命令実行ユニット５０５で実行された命令に基づいて行われる。内部メモリ８の内容は、外部バス５０４を経由して直接読み出し及び書き換えることはできないことを前提とする。このような内部メモリ８と同様の特徴を持つメモリを、安全なメモリと呼ぶ。これとは逆に、外部メモリ７は、外部バス５０４を経由して任意のアドレスに対して読み出し及び書き換えが可能であり、安全なメモリとは異なる。
【００２５】
内部メモリ８は、外部メモリ７と同じ物理アドレス空間に配置される。内部メモリ８は、命令実行ユニット５０５で実行されるソフトウェアから外部メモリ７と同様にアクセス可能である。
【００２６】
内部メモリ８は、ページテーブルツリー９の一部であり、第１のアドレスを第２のアドレスに変換するためのセキュアページテーブルツリー１２１、検証子ツリー１０のうちの一部であるセキュア検証子ツリー１２２を記憶する。内部メモリ８は、親テーブル１０１と親検証子ｐｖ１〜ｐｖｍとの検証に用いられるルート検証情報１３を備える。
【００２７】
アドレス変換部３は、内部メモリ８に記憶されている親テーブル１０１の親エントリｐｅ１〜ｐｅｍ及び子テーブル２０１〜２０ｍの子エントリｃｅ１〜ｃｅｘを経由してデータ３０１〜３０ｘの物理アドレスを求める。
【００２８】
外部メモリ７から内部メモリ８へ親テーブル１０１がコピー（移動又は読み込み）される場合には、この親テーブル１０１に関連付けられている親検証子ｐｖ１〜ｐｖｍも、外部メモリ７から内部メモリ８へコピーされる。
【００２９】
本実施形態において、ページテーブル又はデータは、外部メモリ７から、改ざんに対して安全な内部メモリ８にコピーされ、検証される。内部メモリ８のページテーブル又はデータが変更され、その後内部メモリ８から削除される場合には、変更された内部メモリ８のページテーブル又はデータは、外部メモリ７に書き出される。内部メモリ８のページテーブル又はデータが変更されることなく内部メモリ８から削除される場合には、内部メモリ８のページテーブル又はデータは、書き出されてもよく又はそのまま破棄されもよい。以下において、外部メモリ７と内部メモリ８との間でのページテーブル又はデータのコピーを、ページテーブル又はデータを移動する、読み込む、又は書き出す、と表現する場合がある。例えば、ページテーブルの参照先が内部メモリ８にコピーされたページテーブル又はデータに変更されることを、ページテーブル又はデータの移動又は読み込み、と表現する場合がある。この場合に、外部メモリ７のコピー元のページテーブル又はデータは、消去されなくてもよい。
【００３０】
外部メモリ７から内部メモリ８へ子テーブル２０１がコピーされる場合には、この子テーブル２０１に関連付けられている子検証子ｃｖ１〜ｃｖｎも、外部メモリ７から内部メモリ８へコピーされる。
【００３１】
外部入出力部２は、外部メモリ７に記憶されているページテーブルツリー９と検証子ツリー１０とに対する読み込み及び書き込みを行う。
【００３２】
判定部４１は、ＯＳの種別がセキュアＯＳか又は非セキュアＯＳかを、予め判定しておく。例えば、ＯＳの種別は、ページテーブルツリー９及び検証子ツリー１０の生成とともに、予めＯＳのイメージから取得され、ルート検証情報１３に含められる。例えば、判定部４１は、新規データの割り当てを要求するＯＳの種別を、ＯＳのイメージに付されているヘッダ又はフッタに基づいて判定する。
【００３３】
初期化部４２は、ＯＳのブートイメージを分割して得られる部分ブートイメージを参照するために必要なページテーブルが、外部メモリ７におけるページテーブルツリー９に組み込まれた場合に、組み込まれたページテーブルのエントリに、初期化状態の完了を示す情報を設定する。
【００３４】
第１に、外部メモリ７から内部メモリ８へ子テーブル２０１及び子検証子ｃｖ１〜ｃｖｎがコピーされる場合の例を説明する。
【００３５】
アドレス変換部３は、内部メモリ８に記憶されているセキュアページテーブルツリー１２１に基づいて、仮想アドレスを物理アドレスに変換する。また、アドレス変換部３は、仮想アドレスを物理アドレスに変換するために必要な子テーブル２０１がセキュアページテーブルツリー１２１に含まれていない場合に、テーブル不足通知（フォールト）１４を検証計算部４に送り、更新された後のセキュアページテーブルツリー１２１に基づいて、仮想アドレスを物理アドレスに変換する。
【００３６】
検証計算部４は、テーブル不足通知１４をアドレス変換部３から受けた場合に、外部入出力部２経由で、外部メモリ７のページテーブルツリー９の子テーブル２０１と検証子ツリー１０の子検証子ｃｖ１〜ｃｖｎとを読み込み、読み込まれた子テーブル２０１と子検証子ｃｖ１〜ｃｖｎとに基づいて検証情報１５を計算し、検証情報１５を検証部５に送る。
【００３７】
検証部５は、検証計算部４によって計算された検証情報１５と、セキュアページテーブルツリー１２１において参照元エントリｐｅ１を含んでいる親テーブル１０１に関連付けられている親検証子ｐｖ１とに基づいて、検証情報１５と親検証子ｐｖ１とが整合するか否か判断し、検証を行い、検証結果１６を更新部６に送る。
【００３８】
更新部６は、検証部５から検証結果１６を受け、検証結果１６が正当の場合、内部メモリ８のセキュアページテーブルツリー１２１に子テーブル２０１を組み込み、セキュア検証子ツリー１２２に子検証子ｃｖ１〜ｃｖｎを組み込む。より具体的には、更新前に、親テーブル１０１の親エントリｐｅ１は、外部メモリ７のページテーブルツリー９に含まれている子テーブル２０１を参照しているとする。更新部６は、セキュアページテーブルツリー１２１における更新前の親テーブル１０１の親エントリｐｅ１を、内部メモリ８におけるセキュアページテーブルツリー１２１に組み込まれた子テーブル２０１を参照するように、更新する。
【００３９】
本実施形態に係るメモリ管理装置１では、例えば、検証結果１６の確認に先立って、外部入出力部２が、内部メモリ８に子テーブル２０１及び子検証子ｃｖ１〜ｃｖｎを読み込み、検証結果１６が正当な場合に、セキュアページテーブルツリー１２１及びセキュア検証子ツリー１２２に、子テーブル２０１及び子検証子ｃｖ１〜ｃｖを組み込むとしてもよい。
【００４０】
このように、本実施形態において、子テーブル２０１が内部メモリ８に記憶されておらず、外部メモリ７から内部メモリ８へ子テーブル２０１及び子検証子ｃｖ１〜ｃｖｎがコピーされる場合には、親テーブル１０１の親エントリｐｅ１は、外部メモリ７の子テーブル２０１を参照する。子テーブル２０１が内部メモリ８に記憶された場合には、内部メモリ８の親テーブル１０１の親エントリｐｅ１は、内部メモリ８の子テーブル２０１を参照するように更新される。
【００４１】
本実施形態において、親テーブル１０１が内部メモリ８に記憶されておらず、外部メモリ７から内部メモリ８へ親テーブル１０１及び親検証子ｐｖ１〜ｐｖｎがコピーされる場合には、検証計算部４は、外部メモリ７から読み込まれた親テーブル１０１、親検証子ｐｖ１〜ｐｖｎ、外部メモリ７の親テーブル１０１の記憶されている物理アドレスに基づいて検証情報を生成する。外部メモリ７における親テーブル１０１の物理アドレスを用いて検証情報を生成することにより、親テーブル１０１の入れ替え攻撃に対して防御することができる。検証部５は、ルート検証情報１３と生成された検証情報に基づいて検証を行う。更新部６は、検証結果が正当の場合に、セキュアページテーブルツリー１２１に、外部メモリ７から読み込まれた親テーブル１０１を組み込み、セキュア検証子ツリー１２２に、外部メモリ７から読み込まれた親検証子ｐｖ１〜ｐｖｎを組み込む。
【００４２】
第２に、セキュアＯＳにおいて、外部メモリ７から内部メモリ８データ３０１がコピーされる場合の例を説明する。
【００４３】
アドレス変換部３は、仮想アドレスを変換した物理アドレスが外部メモリ７を参照している場合に、データ読み込み通知１７を検証計算部４及び置換管理部４０に送る。
【００４４】
例えば、アドレス変換部３は、データ参照先が外部メモリ７か否かを判断することなく、参照データの内部メモリ８への読み込み状態を予めページテーブル内の有効／無効フラグにより管理し、データ参照先の判断を高速化してもよい。内部メモリ８に記憶されているデータを参照するセキュアページテーブルツリー１２１のテーブルエントリには、有効フラグがセットされる。セキュアＯＳにおいて、外部メモリ７に記憶されているデータを参照するセキュアページテーブルツリー１２１のテーブルエントリには、無効フラグがセットされている。アドレス変換部３は、アドレス変換のページフォールトが発生した場合に、外部メモリ７のページテーブル又はデータを、内部メモリ８にコピーする。アドレス変換部３は、参照されるデータが内部メモリ８に記憶されている場合、ページフォールトを発生することなく、高速にデータを参照することができる。
【００４５】
検証計算部４は、データ読み込み通知１７をアドレス変換部３から受けた場合、外部入出力部２経由で物理アドレスによって参照される外部メモリ７のデータ３０１を読み込み、読み込まれたデータ３０１、外部メモリ７のデータ３０１の記憶されている物理アドレスに基づいてデータ検証情報１８を計算し、データ検証情報１８を検証部５に送る。外部メモリ７におけるデータの物理アドレスを用いてデータ検証情報１８を生成することにより、データ３０１の入れ替え攻撃に対して防御することができる。
【００４６】
検証部５は、検証計算部４によって計算されたデータ検証情報１８と、セキュアページテーブルツリー１２１において参照元の子テーブル２０１に関連付けられている子検証子ｃｖ１とに基づいて、データ検証情報１８と子検証子ｃｖ１とが整合するか否か判断するデータ検証を行い、データ検証結果１９を更新部６に送る。
【００４７】
更新部６は、検証部５からデータ検証結果１９を受け、データ検証結果１９が正当の場合、内部メモリ８のセキュアページテーブルツリー１２１に、データ３０１を組み込む。より具体的には、更新前に、子テーブル２０１の子エントリｃｅ１は、外部メモリ７のページテーブルツリー９に含まれているデータ３０１を参照しているとする。更新部６は、セキュアページテーブルツリー１２１における更新前の子テーブル２０１の子エントリｃｅ１を、内部メモリ８におけるデータ３０１を参照するように更新する。
【００４８】
本実施形態に係るメモリ管理装置１では、例えば、データ検証結果１９の確認に先立って、外部入出力部２が、内部メモリ８にデータ３０１を読み込んでおき、データ検証結果１９が正当な場合に、セキュアページテーブルツリー１２１に、データ３０１を組み込むとしてもよい。
【００４９】
このように、本実施形態において、データ３０１が内部メモリ８に記憶されておらず、外部メモリ７から内部メモリ８へデータ３０１がコピーされる場合には、子テーブル２０１の子エントリｃｅ１は、外部メモリ７のデータ３０１を参照する。データ３０１が内部メモリ８に記憶された場合には、内部メモリ８の子テーブル２０１の子エントリｃｅ１は、内部メモリ８のデータ３０１を参照するように更新される。
【００５０】
仮想アドレスは、親テーブル１０１の親エントリｐｅ１、子テーブル２０１の子エントリｃｅ１を経由してデータ３０１の物理アドレスに変換される。参照されるデータ３０１は、物理アドレスの示す安全な内部メモリ８に記憶されている。このようなアドレス解決により参照される全てのテーブルとデータは、検証で正当と判断されており、安全な内部メモリ８に配置されている。
【００５１】
第３に、セキュアＯＳにおいて、内部メモリ８から外部メモリ７へデータ３０１がコピー（書き出し）される場合の例を説明する。
【００５２】
検証計算部４は、アドレス変換を要求したＯＳがセキュアＯＳであり、内部メモリ８に記憶されているデータ３０１を外部メモリ７に記憶する場合に、内部メモリ８のデータ３０１に基づいて子検証子（データ検証情報）ｃｖ１を計算する。
【００５３】
外部入出力部２は、データ３０１を外部メモリ７に記憶する。
【００５４】
更新部６は、セキュアページテーブルツリー１２１における子テーブル２０１の子エントリ（物理アドレス）ｃｅ１の参照先を、外部メモリ７におけるデータ３０１の記憶位置に更新する。さらに、更新部６は、検証計算部４によって計算された子検証子ｃｖ１を、セキュアページテーブルツリー１２１における子テーブル２０１に関連付けてセキュア検証子ツリー１２２に組み込む。例えば、更新部６は、内部メモリ８のデータ３０１がセキュアページテーブルツリー１２１から参照されていない場合に、子テーブル２０１の子エントリｃｅ１を無効状態とする。次に、データ３０１が参照されたときはページフォールトが発生し、上述の処理にしたがって外部メモリ７のデータ３０１の検証と内部メモリ８へのコピーが行われる。
【００５５】
本実施形態において、更新部６は、セキュアページテーブルツリー１２１が子テーブル２０１を含まない場合に、親テーブル１０１の親エントリｐｅ１を無効状態とし、セキュアページテーブルツリー１２１が子テーブル２０１を組み込んだ場合に、親テーブル１０１の親エントリｐｅ１を有効状態とする。
【００５６】
更新部６は、内部メモリ８がデータ３０１を記憶していない場合に、子テーブル２０１の子エントリｃｅ１を無効状態とし、内部メモリ８がデータ３０１を記憶している場合に、子テーブル２０１の子エントリｃｅ１を有効状態とする。
【００５７】
上記第１及び第２の例において、置換管理部４０は、例えばアドレス変換部３からデータ読み込み通知１７を受けた場合などのように、内部メモリ８にテーブル又はデータが記憶される場合に、内部メモリ８の空き領域の容量を確認する。置換管理部４０は、内部メモリ８の空き領域の容量が不足する場合に、メモリ解放（削除）されるために選択された内部メモリ８のテーブル又はデータに対する検証情報要求４６を検証計算部４に送る。置換管理部４０は、検証計算部４から、検証情報要求４６の応答として、内部メモリ８の選択されたテーブル又はデータに対する検証子を受ける。そして、置換管理部４０は、内部メモリ８の選択されたテーブル又はデータ及びその検証子を、外部入出力部２経由で外部メモリ７に書き出し、内部メモリ８における選択されたテーブル又はデータの領域を解放し、内部メモリ８の空き領域を増やす。
【００５８】
第４に、非セキュアＯＳにおいて、メモリ管理装置１が外部メモリ７に記憶されているデータ３０１を読み込む場合の例を説明する。
【００５９】
非セキュアＯＳのセキュアページテーブルツリー１２１において、外部メモリ７に記憶されているデータ３０１を参照するテーブルエントリには、有効状態が設定されている。
【００６０】
アドレス変換部３は、非セキュアＯＳのセキュアページテーブルツリー１２１に基づいて、仮想アドレスを外部メモリ７における物理アドレスに変換する。
【００６１】
外部入出力部２は、変換された物理アドレスに基づいて、参照対象のデータ３０１を、外部メモリ７から読み込み、例えばキャッシュメモリ４５に記憶する。
【００６２】
第５に、非セキュアＯＳにおいて、メモリ管理装置１が外部メモリ７のデータ３０１を参照する子テーブル２０１を外部メモリ７へ記憶する場合の例を説明する。
【００６３】
更新部６は、非セキュアＯＳのセキュアページテーブルツリー１２１において、子テーブル２０１を、外部入出力部２経由で、外部メモリ７のページテーブルツリー９に組み込む。ここで、組み込まれる子テーブル２０１における子エントリｃｅ１には、外部メモリ７におけるデータ３０１の物理アドレスと有効状態とが設定されている。
【００６４】
更新部６は、セキュアページテーブルツリー１２１の子テーブル２０１を参照する上位の親エントリｐｅ１に、無効状態を設定する。
【００６５】
第６に、非セキュアＯＳにおいて、メモリ管理装置１が外部メモリ７に記憶されている子テーブル２０１を読み込む場合の例を説明する。
【００６６】
メモリ管理装置１は、上記第１の例と同様の処理により、外部メモリ７に記憶されている子テーブル２０１を読み込み、セキュア検証子ツリー１２２に基づく検証処理を実行し、内部メモリ８のセキュアページテーブルツリー１２１に子テーブル２０１を組み込む。ここで、セキュアページテーブルツリー１２１に組み込まれた子テーブル２０１の子エントリｃｅ１には、有効状態と外部メモリ７のデータ３０１の物理アドレスが設定されている。
【００６７】
更新部６は、セキュアページテーブルツリー１２１の子テーブル２０１を参照する上位の親エントリｐｅ１に、有効状態を設定する。
【００６８】
第７に、ＯＳのブート処理の例を説明する。
【００６９】
本実施形態において、ＯＳのブートイメージは、このブートイメージを分割して得られる部分ブートイメージごとにメモリ管理装置１に読み込まれる。
【００７０】
ＯＳのブートイメージに付されているブートイメージヘッダは、ブートイメージの署名情報を含むとする。
【００７１】
外部入出力部２は、ＯＳのブート処理において、外部メモリ７から、選択された部分ブートイメージ（例えばデータ３０１〜３０ｘ）を逐次取得する。
【００７２】
検証計算部４は、外部入出力部２から選択された部分ブートイメージ３０１〜３０ｘを逐次受ける。検証計算部４は、選択された部分ブートイメージ３０１〜３０ｘの検証子と、選択された部分ブートイメージ３０１〜３０ｘを参照するために必要なページテーブルに対する検証のための検証子とを逐次生成する。また、検証計算部４は、部分ブートイメージ３０１〜３０ｘの署名情報を逐次生成する。
【００７３】
更新部６は、部分ブートイメージ３０１〜３０ｘの検証子とページテーブルの検証子とを、内部メモリ８に逐次記憶する。
【００７４】
更新部６は、外部入出力部２経由で、内部メモリ８における選択された部分ブートイメージ３０１〜３０ｘの検証子、選択された部分ブートイメージ３０１〜３０ｘを参照するために必要なページテーブル、このページテーブルに対する検証のための検証子を、外部メモリ７におけるページテーブルツリー９と検証子ツリー１０に組み込む。
【００７５】
初期化部４２は、選択された部分ブートイメージ３０１〜３０ｘを参照するために必要なページテーブルが外部メモリ７におけるページテーブルツリー９に組み込まれた場合に、組み込まれたページテーブルのエントリに、初期化状態の完了を示す情報を設定する。
【００７６】
検証部５は、ブートイメージの署名情報と、逐次生成された選択された部分ブートイメージ３０１〜３０ｘの署名情報とに基づいて、検証を行う。検証部５は、検証が成功の場合には、ＯＳを有効とし、ルート検証情報１３を設定する。検証部５は、検証が失敗の場合には、ページテーブルツリー９及び検証子ツリー１０を破棄し、ＯＳを無効とする。
【００７７】
以下で、本実施形態に係る効果について説明する。
【００７８】
本実施形態においては、非セキュアＯＳのデータが内部メモリ８に読み込まれることなく、外部メモリ７に配置されたままで使用される。本実施形態においては、非セキュアＯＳのデータに対して検証を省略することができ、スループットを向上させることができる。本実施形態においては、非セキュアＯＳが攻撃者に乗っ取られた場合であっても、他のセキュアＯＳ及び他のソフトウェアに被害が及ぶことを防止することができる。
【００７９】
本実施形態においては、内部メモリ８より大きなサイズのブートイメージをロードし、ページテーブルツリー９及び検証子ツリー１０を生成し、ＯＳを起動させることができる。
【００８０】
本実施形態においては、ブートイメージの署名情報に基づいて、ブートイメージに対する検証を行うことができる。
【００８１】
本実施形態においては、ページテーブルツリー９及び検証子ツリー１０のうち使用可能な部分に対して初期化が完了していることを認識することができる。このため、ブート処理中であっても、初期化の完了している部分を使ってＯＳを起動させることができ、立ち上げ処理を迅速化することができる。
【００８２】
本実施形態においては、外部メモリ７に記憶されたページテーブルツリー９、検証子ツリー１０、データ３０１〜３０ｘのうちの必要な部分を選択的に検証することができ、検証された必要な部分を外部メモリ７よりも小容量の内部メモリ８に記憶することができる。これにより、外部メモリ７に対する物理攻撃を検出することができ、データの完全性を検証し、データの改ざんを防止することができる。本実施形態においては、改ざん検証後にページテーブルツリー９、検証子ツリー１０及びデータ３０１〜３０ｘが改ざんされることを検出することができ、情報処理装置の安全性を向上させることができる。
【００８３】
本実施形態に係る検証は、仮想化技術に対して適用され、内部メモリ８に記憶されたセキュアページテーブルツリー１２１、セキュア検証子ツリー１２２を参照することにより、ゲストＯＳ及びアプリケーションを変更することなく容易に適用することができる。
【００８４】
本実施形態においては、ページテーブルと検証子との階層構造が合致しており、さらに、ページテーブルと検証子とが一体で検証される。換言すれば、ページテーブルツリー９と検証子ツリー１０とは同じグラフ構造を持つ。これにより、検証子がページング対象の場合であっても、検証子の配置先アドレスを解決する必要がない。また、ページテーブルと検証子とを階層構造で管理する。したがって、セキュアページテーブルツリー１２１、セキュア検証子ツリー１２２、ページテーブルツリー９、検証子ツリー１０をアドレス空間の不連続なメモリ領域に配置することができ、メモリを効率的に利用することができる。本実施形態においては、検証子を階層構造で管理することにより、効率的に管理することができる。
【００８５】
本実施形態においては、ページテーブル及びデータが内部メモリ８に記憶されているか否かを、上位のページテーブルのエントリが有効か無効かで管理する。これにより、汎用のハードウェアであるアドレス変換機構を利用して効率よく、ページテーブル及びデータが内部メモリ８に記憶されているか否かを判断することができる。
【００８６】
本実施形態に係るメモリ管理装置１の各種の構成要素はハードウェアで実現されてもよく、メモリ管理プログラムによって制御されるプロセッサによって実現されてもよい。プロセッサは、メモリ管理プログラムによって制御されることにより、上記のメモリ管理装置１と同様のメモリ管理方法を実施する。
【００８７】
［第２の実施形態］
本実施形態においては、上記第１の実施形態に係るメモリ管理装置１を備える情報処理装置について説明する。
【００８８】
図２は、本実施形態に係る情報処理装置を例示するハードウェア構成図である。
【００８９】
情報処理装置５００は、プロセッサ５０１、外部メモリ７、外部デバイス５０３、外部バス５０４を備える。プロセッサ５０１、外部メモリ７、外部デバイス５０３は、外部バス５０４を介して、データ、信号、命令を互いに送受信可能とする。
【００９０】
情報処理装置５００の仮想化支援機構は、例えば、２ステージのアドレス変換を実行する。
【００９１】
プロセッサ５０１は、命令実行ユニット（プロセッサコア）５０５、ＭＭＵ（Memory Management Unit）５０６、キャッシュメモリ５０７ａ〜５０７ｃ、セキュアブートローダ５０８ａを記憶するマスクＲＯＭ（Read Only Memory）５０８、アドレス変換キャッシュ（ＴＬＢ：Translation Lookaside Buffer）５０９ａ，５０９ｂ、内部メモリ８、セキュアＤＭＡ（Direct Memory Access）コントローラ５１１、入出力デバイス５１２、鍵保存ユニット５１３、内部バス５１５ａ，５１５ｂを備える。プロセッサ５０１の各種の構成要素は、内部バス５１５ａ，５１５ｂを介して、データ、信号、命令を互いに送受信可能とする。
【００９２】
外部メモリ７は、セキュアＶＭＭ（Virtual Machine Monitor）５１６、セキュアＯＳ５１７、非セキュアＯＳ５１８を記憶する。
【００９３】
本実施形態において、セキュアＯＳ５１７、非セキュアＯＳ５１８は、セキュアＶＭＭ５１６によって管理されるゲストＯＳとする。
【００９４】
外部デバイス５０３は、例えばハードディスク又はメモリカードなどのような不揮発性記憶装置である。
【００９５】
プロセッサ５０１の命令実行ユニット５０５は、階層化されたキャッシュメモリ５０７ａ〜５０７ｃを用いてデータ参照を行う。以下では、まず、アドレス変換の後に行われるデータ参照について説明し、次に、アドレス変換について説明する。
【００９６】
キャッシュメモリ５０７ａは、データ用１次キャッシュメモリである。キャッシュメモリ５０７ｂは、データ及び命令用の１次キャッシュメモリである。キャッシュメモリ５０７ｃは、データ及び命令用の２次統合キャッシュメモリである。
【００９７】
命令実行ユニット５０５は、キャッシュメモリ５０７ｃに記憶されているデータ又は命令を、内部メモリ８又は外部メモリ７に記憶されているデータ又は命令よりも高速に参照可能である。また、命令実行ユニット５０５は、キャッシュメモリ５０７ａ，５０７ｂを、キャッシュメモリ５０７ｃよりも高速にアクセス可能である。
【００９８】
命令実行ユニット５０５は、キャッシュメモリ５０７ａ〜５０７ｃ又は内部メモリ８からデータ又は命令を読み込み、処理を実行する。
【００９９】
キャッシュメモリ５０７ａ，５０７ｂが参照対象データを記憶している場合には、キャッシュメモリ５０７ｃ、及び、内部メモリ８へのデータ参照は実行されない。
【０１００】
キャッシュメモリ５０７ａ，５０７ｂが参照対象データを記憶しておらず、キャッシュメモリ５０７ｃが参照対象データを記憶している場合には、内部メモリ８へのデータ参照は実行されない。これにより、データ参照が短時間で行われる。
【０１０１】
なお、内部メモリ８から読み込まれるデータは、内部メモリ８から、キャッシュメモリ５０７ｃを経由することなく、キャッシュメモリ５０７ａ，５０７ｂに記憶されてもよい。
【０１０２】
鍵保存ユニット５１３は、ルート検証情報１３と、情報処理装置５００における暗号化又は検証に使用される鍵情報とを記憶する。
【０１０３】
セキュアＤＭＡコントローラ５１１は、各種の構成要素間のデータ転送を行う。セキュアＤＭＡコントローラ５１１は、例えば、ハードウェアによって実装され、ＭＡＣ値計算を実行する。しかしながら、ＭＡＣ値計算は、ソフトウェアで実行されてもよい。
【０１０４】
情報処理装置５００は、仮想記憶管理とメモリ検証処理とを連携して実行する。本実施形態では、主記憶装置に不揮発性半導体メモリを使用する。本実施形態では、階層構造を持つページテーブルツリー９と階層構造を持つ検証子ツリー１０とを生成する。ページテーブルツリー９と検証子ツリー１０とは、互いに階層構造が整合する。ページテーブルツリー９と検証子ツリー１０とは、不揮発性の外部メモリ７に保存され、必要に応じて一部が内部メモリ８にコピーされる。外部メモリ７は不揮発性の記憶装置であるため、電源がＯＦＦされ、その後に電源がＯＮされた場合に、電源ＯＦＦ前の記憶状態を維持する。
【０１０５】
例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro-Processing Unit）などのようなプロセッサのパッケージと主記憶装置とを一体化した一体型ハードウェアでは、上述のようなデータの窃視・改ざん、及び、物理的攻撃が困難である。しかしながら、一体型ハードウェアは一般に高価であるため、汎用プロセッサパッケージと汎用メモリとの組み合わせで、安全な処理を可能にする技術が求められる。
【０１０６】
本実施形態においては、プロセッサ５０１のパッケージ内部に設けられた内部メモリ８は、ハードウェア的な攻撃から安全であると仮定する。ただし、不正なソフトウェアを実行させることで、内部メモリ８からデータを出力させる攻撃は可能であると仮定する。情報処理装置５００への攻撃者は、任意のタイミングで外部メモリ７の任意の位置を自由に書き換えることができると仮定する。
【０１０７】
データ改ざんから保護されるメモリ領域、及び、暗号化されるメモリ領域を、保護メモリとする。
【０１０８】
情報処理装置５００の主記憶装置に対する攻撃を防ぎ、脅威を取り除くために、安全性とシステム構成との観点から、以下の第１乃至第５の条件を満たすことが要求される。
【０１０９】
第１の条件は、安全性に関する条件である。第１の条件では、リプレイ攻撃を含むデータの改ざんを厳密に検出可能であることが要求される。
【０１１０】
第２の条件は、ハードウェア構成に関する条件である。第２の条件は、専用のハードウェアが不要であることを要求する。より具体的に説明すると、第２の条件は、メモリ改ざん検証専用のハードウェアが不要であることを要求する。第２の条件は、多数のプロセッサが備えるアドレス変換機構、仮想化支援機構、プロセッサ内の汎用内部メモリ、高速化補助機構、ＤＭＡコントローラと連携した高速暗号エンジンに基づいて、攻撃を防ぎ、脅威を取り除くことを要求する。また、第２の条件は、ファームウェアなどのソフトウェアに基づく処理が可能であることを要求する。さらに、第２の条件は、仮想化技術との親和性が高いことを要求する。第２の条件は、安全な内部メモリ８のメモリサイズが１メガバイト程度のように小さくても動作可能であることを要求する。
【０１１１】
第３の条件は、メモリに関する条件である。第３の条件は、大容量のメモリ、例えば３２ビットのアドレス空間もしくはそれを越えるサイズのメモリに適用可能であることを要求する。第３の条件は、メモリの検証対象領域が選択可能なことを要求する。第３の条件は、保護対象のメモリ領域をメモリマップ上でいくつもの不連続な領域に配置可能であり、メモリの必要な部分だけを選択的に改ざん検証の対象にできることを要求する。第３の条件は、メモリのうち選択的に改ざん検証対象に定められた選択領域を定義するデータそのものも、攻撃から保護可能であることを要求する。第３の条件は、保護対象のメモリ領域の配置が不連続の場合であっても、選択領域だけを検証可能なことに加えて、選択領域を除く他の領域に対して検証子用のメモリ領域の確保を不要とし、メモリを効率的に利用可能なことを要求する。
【０１１２】
第４の条件は、ソフトウェア構成と安全性とに関する条件である。第４の条件は、ＯＳ全体を保護対象とすることができることを要求する。第４の条件は、改ざん検証が不要な外部との通信用ハードウェアなどは改ざん検証対象とせず非選択領域とすることができることを要求する。第４の条件は、透過性を有すること、換言すれば、ＯＳ及びアプリケーションを修正する必要がないことを要求する。第４の条件は、ＯＳに不具合があって不正な命令が実行された場合に、当該ＯＳ自身が破壊され誤動作することは許容してもその誤動作によってメモリ改ざん検証機能が検証の迂回又は制御情報の破壊に対して安全であり頑健であることを要求する。
【０１１３】
第５の条件は、処理の効率性に関する条件である。第５の条件は、例えばメモリアクセスごとの改ざん検証の要・不要の判定などのような頻繁に発生する処理はできる限りハードウェアにより実行することで効率化することを要求する。
【０１１４】
本実施形態においては、不揮発性の主記憶装置が適用されることを想定し、セキュア検証子ツリー１２２に基づく検証を行い、セキュアページテーブルツリー１２１に基づいて多段階のアドレス変換を行い、仮想化技術を想定し、上記の第１乃至第４の条件を満たす情報処理装置５００を実現する。
【０１１５】
本実施形態には、主要なポイントが４つある。まず、本実施形態の第１のポイントを説明する。
【０１１６】
第１のポイントは、アドレス透過性の担保、未検証データ参照の検出機能の提供に関する。具体的には、ゲストＯＳによるデータ参照が発生した場合に、まずセキュアＶＭＭ５１６がページテーブルエントリを確認し、内部メモリ８を経由した検証が必要な場合に、外部メモリ７のデータを内部メモリ８に動的に確保されているバッファメモリに記憶する。
【０１１７】
内部メモリ８を経由した検証に成功した場合に、ゲストＯＳのデータ参照先の実態である物理メモリのデータが、本来の外部メモリ７のデータから、内部メモリ８の配置先アドレスのデータに代わるように、セキュアＶＭＭ５１６が、管理されているセキュアページテーブルツリー１２１（例えば後述の図３に示すステージ２ページテーブルツリー）を書き換える。
【０１１８】
ゲストＯＳは、参照先の変更を認識する必要がない。このため、本実施形態に係る検証を導入してもゲストＯＳを変更する必要はなく、ゲストＯＳの透過性を得ることができる。
【０１１９】
なお、内部メモリ８の書き込み単位はページだが、書き込み単位を小さくしてキャッシュメモリを含むプロセッサ５０１全体のメモリ利用効率を向上させるために、外部メモリ７から、キャッシュメモリ５０７ａ，５０７ｂ，５０７ｃを経由して、命令実行ユニット５０５がデータを取得する場合には、ページテーブルエントリの参照先を変更することなく、外部メモリ７からキャッシュメモリ５０７ａ，５０７ｂ，５０７ｃへデータがコピーされる際に、検証が行われてもよい。この場合、キャッシュメモリからの読み込みと検証処理とを連動させるハードウェア機構が必要となる。
【０１２０】
改ざん防止には、外部メモリ７への参照の検出と、検証の実行と、そして検証済みデータの安全な内部メモリ８へのコピー（読み込み）と、参照先の変更とが必要である。ハードウェアキャッシュが用いられる場合には、キャッシュメモリ５０７ｃへの読み込みに対応する参照先変更がソフトウェアの介在なしに専用ハードウェア機構によって行われるため、ゲストＯＳに対するアドレス透過性が保証される。これに対して、ファームウェアによる検証では、検証済みデータの配置先は元のデータのアドレスと異なるため、ゲストＯＳから何らかの方法で参照先の変更を隠ぺいしなければ、ゲストＯＳの変更が必要となり、ゲストＯＳに対するアドレス透過性が担保されない。
【０１２１】
本実施形態は、検証済みデータを改ざんなどの攻撃から守り、かつ、内部メモリ８へのコピーをゲストＯＳから隠蔽するために、２段階のアドレス変換を行う仮想化支援機構を利用し、外部メモリ７から内部メモリ８へのデータ読み込み後にセキュアページテーブルツリー１２１のデータ参照先を変更することで、セキュアＯＳ５１７に対するアドレス透過性を実現する。
【０１２２】
本実施形態では、セキュアＯＳ５１７における未検証データの参照を検出する。このために、本実施形態では、セキュアＯＳ５１７に対して、初期状態においてセキュアページテーブルツリー１２１のエントリを「無効」としておき、ページテーブル又はデータの検証と読み込みに成功した場合にセキュアページテーブルツリー１２１のエントリを「有効」とする。これにより、セキュアＯＳ５１７における未読み込みのページテーブル又はデータの検出を、汎用のハードウェアであるアドレス変換機構を利用して効率よく行うことができる。
【０１２３】
次に、本実施形態の第２のポイントを説明する。
【０１２４】
第２のポイントは、セキュアページテーブルツリー１２１とセキュア検証子ツリー１２２の階層構造とを整合させることに関する。本実施形態では、大規模データの検証を可能にするために、外部メモリ７から内部メモリ８への読み込み状態を管理する。本実施形態では、透過的な改ざん検証をファームウェアの処理で実現するために、アドレス変換機構を活用する。もし、アドレス変換機構の動作が妨害され、例えば内部メモリ８が参照されるべきであるにもかかわらず外部メモリ７が参照された場合などのように、不正操作が行われた場合、上記の検証と読み込みデータの保護は正しく機能しない。したがって、本実施形態では、アドレス変換機構の動作を攻撃から守る。
【０１２５】
アドレス変換機構は、ページテーブルを参照し、アドレス変換を行う。ページテーブルは、内部メモリ８に配置されており、仮想アドレスを物理アドレスに変換するための定義情報である。アドレス空間が広くなると、ページテーブルを記憶するために必要なサイズも大きくなる。単純にページテーブルのアドレス空間を物理メモリに固定的に確保することは、情報処理装置にとって大きな負担となる。このため、ページテーブルのアドレス空間を小さくする２つの方法がある。第１の方法は、ページテーブルを階層化し、内部メモリ８の階層的なページテーブルを参照し、ページテーブル自体をページングの対象とする。第２の方法は、第１の方法における階層化と関連する。この第２の方法は、内部メモリ８のメモリ空間の中で参照が不要な部分のテーブル定義状態を未定義のままとし、不連続なメモリ空間定義を許可することでテーブル量を削減する。
【０１２６】
アドレス変換機構は、多くのプロセッサに備えられる汎用的な機構である。しかしながら、ページテーブルのページング又は未定義状態を無制限に許すことは、ページング時に正当なページテーブル又はデータを不当なページテーブル又はデータにすり替える、又は、定義されたページテーブル又はデータを一度未定義に書き換えた後に再度初期化する、などの攻撃を引き起こす可能性がある。特に、不揮発性メモリシステムでは、内部メモリ８ではない他の全てのメモリのデータが改ざんされる可能性がある。よって、ＭＭＵによって参照されるページテーブル又はデータは、すべて検証された後に内部メモリ８に配置される必要がある。上述のように、ページテーブルのデータサイズは大きい。したがって、ページテーブルに対する検証を伴うページング処理が必要となる。ページテーブルを階層化すると、どのレベルのテーブルまで検証と読み込みが完了しているかに関する状態管理、及び、各テーブルの参照頻度に応じた状態管理が必要となる。
【０１２７】
さらに、ページテーブル又はデータに対する検証処理も、限られた容量の内部メモリ８を作業領域として完結する必要がある。単純な検証の方法として、データに対する検証子とは別に、ページテーブル専用の検証子を設ける方法が考えられる。しかしながら、階層的なページテーブルはメモリ上の参照関係によって定義されており、必ずしも連続したアドレス領域にマップされていない。例えば、ページテーブルの第１のエントリがアドレス空間上の最下位番地に配置され、第２のエントリが最上位番地に配置され、第１のエントリと第２のエントリとが参照関係を持つことが、仕様上可能である。このような不連続なページテーブルに対して、連続したアドレス領域に記憶される検証子を適用することは、非効率的である。加えて、検証子も、ページテーブルと同様に階層的な構成を持つ場合、検証子のどの段階まで検証が完了しているか認識し、かつ、検証子の検証済みの部分を再利用するための状態管理を行う必要がある。
【０１２８】
そこで、本実施形態では、第２のポイントとして、ページテーブルの階層構造と検証子の階層構造とを整合させている。ページテーブルの階層構造と検証子の階層構造とを整合させ、ページテーブルと検証子とが他の検証子によって保護される。本実施形態では、ページテーブルと検証子とで整合した階層構造を持つことで、ページテーブルと検証子との読み込み状態及び検証状態の管理を共通化し、階層構造のデータ管理の処理負荷を軽減する。そして、情報処理装置５００は、広大かつ不連続に定義されたアドレス領域に対して、効率よく検証子を割り当て、安全に管理する。
【０１２９】
例えば、１ページテーブルに５１２個のエントリを格納する３階層のセキュアページテーブルツリー１２１は、グラフとしては、３階層の５１２分木のグラフである。このようなセキュアページテーブルツリー１２１に対するセキュア検証子ツリー１２２は、セキュアページテーブルツリー１２１と同様に、３階層の５１２分木のグラフとし、両者の構造を整合させる。これにより、セキュアページテーブルツリー１２１とセキュア検証子ツリー１２２の読み込み状態及び検証状態の管理単位が整合する。
【０１３０】
外部メモリ７から内部メモリ８へ未読み込みのページテーブル又はデータに対する参照と未読み込みの検証子に対する参照との検出がそれぞれ個別に行われた場合、ＶＭＭによる処理では、ページテーブル又はデータ、及び検証子に対する参照が発生するたびにゲストＯＳからＶＭＭへの切り替えが発生し、切り替えのオーバーヘッドが大きくなる。本実施形態では、ページテーブルと検証子との階層構造を整合させ、未読み込みのページテーブル及び未読み込みの検証子の２種類の制御データに対する参照の検出を同時に行う。これにより、ゲストＯＳからセキュアＶＭＭ５１６への切り替え回数を低減させ、さらに処理負荷を軽減させることができる。
【０１３１】
次に、本実施形態の第３のポイントを説明する。
【０１３２】
多くの機器では、全ての処理に対して完全性を検証する必要はない。オーバーヘッドが増加する完全性検証を実行することよりも、完全性検証を省略してスループットを向上させることを優先すべき場合がある。そこで、本実施形態においては、非セキュアＯＳ５１８に対しては、データの改ざん検証を省略する。
【０１３３】
しかしながら、非セキュアＯＳ５１８の脆弱性に対して攻撃された場合、又は、外部メモリ７の非セキュアＯＳ５１８の改ざんを通じて非セキュアＯＳ５１８が攻撃者に乗っ取られた場合であっても、セキュアＯＳ５１７及びセキュアＶＭＭ５１６のデータの改ざんを防止する必要がある。本実施形態においては、非セキュアＯＳ５１８が攻撃された場合であってもセキュアＯＳ５１７を安全に共存させる。
【０１３４】
このために、本実施形態では、外部メモリ７に記憶されている非セキュアＯＳ５１８用のページテーブルツリー９（例えば、ステージ２ページテーブルであり、以下、未検証ページテーブルともいう）がＮ階層の場合に、この非セキュアＯＳ５１８用のページテーブルツリー９の１階層からＮ−１階層までのページテーブルに含まれているテーブルエントリを、無効状態とする。この非セキュアＯＳ５１８用のページテーブルツリー９の１階層からＮ−１階層までのページテーブルに含まれているテーブルエントリは、外部メモリ７から内部メモリ８にコピーされる場合に、有効状態とされる。
【０１３５】
また、本実施形態では、非セキュアＯＳ５１８用のページテーブルツリー９のＮ階層のページテーブルに含まれているテーブルエントリを、有効状態に設定する。このＮ階層のページテーブルは、データを参照する。
【０１３６】
本実施形態においては、Ｎ階層のページテーブルが外部メモリ７から内部メモリ８へコピーされる場合には、このＮ階層のページテーブルは改ざんの検証が実行される。しかしながら、本実施形態では、外部メモリ８に記憶されている非セキュアＯＳ５１８のデータは、セキュアページテーブルツリー１２１のＮ階層のページテーブルに基づいて読み込まれ、内部メモリ８に記憶されることなく、検証もされず、キャッシュメモリ５０７ａ〜５０７ｃに記憶される。命令実行ユニット５０５は、キャッシュメモリ５０７ａ〜５０７ｃに記憶されている非セキュアＯＳ５１８のデータを受ける。
【０１３７】
このため、本実施形態において、非セキュアＯＳ５１８のデータに対する参照では、検証が実行されず、非セキュアＯＳ５１８によって参照されるデータが内部メモリ８を占有することもなく、情報処理装置５００の処理ペナルティを小さくすることができる。
【０１３８】
さらに、本実施形態では、非セキュアＯＳ５１８に対するデータの改ざん検証を省略するために、外部メモリ７に記憶されているページテーブルツリー９に基づいてアクセス可能なアドレス領域を、セキュアＯＳ５１７及びセキュアＶＭＭ５１６の作業領域のアドレス領域と区別する。
【０１３９】
次に、本実施形態の第４のポイントを説明する。
【０１４０】
本実施形態においては、情報処理装置５００の起動からページテーブルツリー９及び検証子ツリー１０の生成までの処理を安全に実行する。第１の機器が情報処理装置５００を備え、別の第２の機器が情報処理装置５００と同種の情報処理装置を備える場合に、この第２の機器のメモリに第１の機器の外部メモリ７の内容を複写することで行われるデータの不正利用を防止するために、情報処理装置５００に固有の秘密鍵に基づいて検証子ツリー１０が生成される。
【０１４１】
同種の情報処理装置５００においては、起動のための初期のＯＳイメージは同じ場合が多い。情報処理装置５００にこの初期のＯＳイメージが取得された後、ブート処理が実行され、ＯＳイメージが情報処理装置５００によって利用される。
【０１４２】
本実施形態では、ゲストＯＳのページテーブルツリー９及び検証子ツリー１０の生成とブート処理とを共存させる。初期状態ではページテーブルツリー９及び検証子ツリー１０が未生成である。本実施形態では、ページテーブルツリー９及び検証子ツリー１０の生成されていない非安全な状態から、ページテーブルツリー９及び検証子ツリー１０が生成された安全な状態になるまでの処理を説明する。
【０１４３】
本実施形態において、セキュアブートローダ５０８ａは、プロセッサ５０１内のマスクＲＯＭ５０８に記憶されている。セキュアブートローダ５０８ａは、プロセッサ５０１内部でセキュアブートされ、内部メモリ８に記憶される。セキュアブートローダ５０８ａは、ゲストＯＳのブートイメージの改ざん防止のために、検証を行う。
【０１４４】
典型的には、ブートイメージには署名情報が付される。この署名情報は、大きなサイズのブートイメージ全体に対して付される。例えば、ゲストＯＳのブートイメージのサイズは、安全な内部メモリ８のサイズよりも大きい場合がある。この場合、ブートイメージの全体を内部メモリ８に記憶し署名検証を実行することはできない。署名計算のために、ブートイメージが分割されて得られる部分ブートイメージが内部メモリ８に記憶される場合には、既に署名計算が終了して外部メモリ７に記憶された部分ブートイメージが、改ざんされる可能性がある。
【０１４５】
このため、本実施形態では、ゲストＯＳのブートイメージのうちの一部である部分ブートイメージを読み込み、読み込み済みの部分ブートイメージに対して検証子ツリー１０を生成し、外部メモリ７に書き出された部分ブートイメージに対する改ざんを検出する。これにより、限られたサイズの内部メモリ８を備えた情報処理装置５００において、安全にゲストＯＳのブートイメージの署名検証を実行することができ、さらに、検証後の部分ブートイメージの改ざんを防止することができる。
【０１４６】
本実施形態においては、起動時の署名検証とページテーブルツリー９及び検証子ツリー１０の生成とを並行して行うことにより、署名検証とページテーブルツリー９及び検証子ツリー１０の生成とをそれぞれ単独に行う場合よりもブート時間を短縮する。
【０１４７】
本実施形態においては、ページテーブルツリー９において未初期化の部分が残っていても処理を開始する。これにより、巨大なメモリ領域を割り当てられたゲストＯＳが起動される場合に、割り当てられたメモリ領域のうち、必要な部分の初期化とページテーブルツリー９及び検証子ツリー１０の生成とが完了した時点で、ゲストＯＳを稼働することができ、さらに起動時間を短縮することができる。
【０１４８】
本実施形態においては、メモリ領域が利用可能か否かを示す初期化状態情報を管理する。これにより、ゲストＯＳが将来利用可能なメモリ領域に対して未初期化のままであってもゲストＯＳのサービス開始が可能となり、立ち上げを高速化できる。
【０１４９】
未初期化のメモリ領域には、ページテーブル及び検証子が配置されておらず、後でページテーブル及び検証子が配置される。セキュアブートローダ５０８ａは、この未初期化のメモリ領域を参照する最上位のページテーブルエントリに、未初期化であることを示す初期化状態情報を設定する。この初期化状態情報の設定されているページエントリを含むページテーブルは、検証子ツリー１０に基づいて保護されている。このため、未初期化であることを示す初期化状態情報を含むページエントリを攻撃者が変更しても、この攻撃は検出される。よって、情報処理装置５００は、未初期化のメモリ領域に不正データを挿入する攻撃から防御される。
【０１５０】
ゲストＯＳが未初期化のメモリ領域に対応する中間物理アドレス（Intermediate Physical Address）領域を利用したい場合、ゲストＯＳからセキュアＶＭＭ５１６に対して利用したい中間物理アドレス領域の初期化要求を明示的に発行する。初期化要求を受け取ったセキュアＶＭＭ５１６は、外部メモリ７及び内部メモリ８にメモリ領域を確保し、例えばゼロなどの所定の初期値でメモリ領域を初期化する。セキュアブートローダ５０８ａは、部分ブートイメージのロードを繰り返しながら、ページテーブルツリー９と検証子ツリー１０を生成する。
【０１５１】
（２ステージのアドレス変換）
図３は、２ステージのアドレス変換を実行する構成を例示するブロック図である。
【０１５２】
セキュアＯＳ５１７上でアプリケーション５２０ａ〜５２０ｃが実行され、非セキュアＯＳ５１８上でアプリケーション５２１ａ〜５２１ｃが実行される。
【０１５３】
セキュアＯＳ５１７のゲストページテーブル５２２ａ〜５２２ｃは、アプリケーション５２０ａ〜５２０ｃの仮想アドレスから中間物理アドレスへの変換を定義する。
【０１５４】
セキュアＯＳ５１７は、ゲストページテーブル５２２ａ〜５２２ｃに基づいて、仮想アドレスを中間物理アドレスに変換する。
【０１５５】
非セキュアＯＳ５１８のゲストページテーブル５２３ａ〜５２３ｃは、アプリケーション５２１ａ〜５２１ｃの仮想アドレスから中間物理アドレスへの変換を定義する。
【０１５６】
非セキュアＯＳ５１８は、ゲストページテーブル５２３ａ〜５２３ｃに基づいて、仮想アドレスを中間物理アドレスに変換する。
【０１５７】
セキュアＶＭＭ５１６のＶＭＭページテーブル５２４は、セキュアＯＳ５１７の中間物理アドレスから物理アドレスへの変換を定義する。
【０１５８】
セキュアＶＭＭ５１６のＶＭＭページテーブル５２５は、非セキュアＯＳ５１８の中間物理アドレスから物理アドレスへの変換を定義する。
【０１５９】
セキュアＶＭＭ５１６は、ＶＭＭページテーブル５２４，５２５に基づいて、中間物理アドレスを物理アドレスに変換する。
【０１６０】
ここでは、複数のアプリケーション５２０ａ〜５２０ｃ，５２１ａ〜５２１ｃのうちのアプリケーション５２０ａに基づくアドレス変換について説明するが、他のアプリケーション５２０ｂ〜５２０ｃ，５２１ａ〜５２１ｃに基づくアドレス変換も同様である。
【０１６１】
２ステージのアドレス変換では、まずステージ１で、セキュアＯＳ５１７によるアドレス変換が実行され、次にステージ２で、セキュアＶＭＭ５１６によるアドレス変換が実行される。セキュアＯＳ５１７は、セキュアＶＭＭ５１６によって管理されるゲストＯＳである。セキュアＯＳ５１７によって制御されるアプリケーション５２０ａは、ゲストページテーブル５２２ａと対応付けられる。
【０１６２】
アプリケーション５２０ａは、命令読み込み要求及びデータアクセス要求を仮想アドレスとして発行する。セキュアＯＳ５１７は、仮想アドレスを、ゲストページテーブル５２２ａの定義に基づいて中間物理アドレスに変換する。中間物理アドレスのメモリ領域は、予めセキュアＶＭＭ５１６によって各ゲストＯＳに割り当てられている。各ゲストＯＳは、割り当てられたメモリ領域を、ゲストページテーブルの定義に基づいて、さらに稼働中のアプリケーションに割り当てる。        
セキュアＶＭＭ５１６は、中間物理アドレスを、セキュアＶＭＭ５１６によって管理されるＶＭＭページテーブル５２４の定義に基づいて、物理アドレスに変換する。仮想アドレスとして発行された要求は、この物理アドレスを用いて処理される。
【０１６３】
（セキュアページテーブルツリー１２１のデータ構造）
図４は、アドレス変換とデータ参照とを実行するハードウェア構成及びセキュアページテーブルツリー１２１のデータ構造を例示するブロック図である。
【０１６４】
この図４で示されるセキュアページテーブルツリー１２１は、例えば、４ギガバイトの仮想アドレス空間を持つ。セキュアページテーブルツリー１２１のデータ構造は、様々なアーキテクチャで適用可能である。特定のアーキテクチャでは、物理ページ拡張のため、ステージ１とステージ２でページテーブルのサイズが異なるが、本実施形態では、ステージ１とステージ２とで同一形式のページテーブルが使用される場合を例として説明する。
【０１６５】
プロセッサ５０１は、ＭＭＵ５０６を備える。ＭＭＵ５０６は、セキュアページテーブルツリー１２１の最上位を示すレジスタ５２６を備える。
【０１６６】
レジスタ５２６は、物理アドレスにより最上位のページテーブル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）における不揮発性メモリを用いてもよい。ホストのプロセッサ５０１とＴＰＭとの間で認証が行われることで、ＴＰＭの情報が確実にプロセッサ５０１と対応付けられる。
【０２０８】
（メモリマップとエンティティ）
図７は、本実施形態に係るメモリマップを例示する図である。
【０２０９】
情報処理装置５００のメモリは、例えば、内部メモリ８、マスクＲＯＭ５０８、セキュアＶＭＭ永続的（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)は、内部メモリ８の一時バッファ領域５１９ｋにおけるメモリ確保時に決められる。
【０２５６】
（検証処理発生までの流れ）
以下で、検証処理発生までの流れについて説明する。
【０２５７】
図１１は、本実施形態に係るデータ参照処理を例示するフローチャートである。
【０２５８】
この図１１は、本実施形態に係る検証処理が発生する前までの流れを表す。以下で発生するアドレス変換は、ステージ２ページテーブルを使用する処理であり、ステージ１ページテーブルを使用するゲストＯＳによるアドレス変換はすでに終了しているとする。
【０２５９】
命令実行ユニット５０５は、ステップＳ００１において、データ参照要求をＭＭＵ５０６に発行する。
【０２６０】
ＭＭＵ５０６は、ステップＳ００２において、アドレス変換キャッシュ５０９ａ，５０９ｂに、仮想アドレスと物理アドレスとのアドレス変換情報がキャッシュされているか確認する。
【０２６１】
アドレス変換情報がアドレス変換キャッシュ５０９ａ，５０９ｂにキャッシュされている場合（ＴＬＢヒットの場合）、処理はステップＳ００５に移動する。
【０２６２】
アドレス変換情報がアドレス変換キャッシュ５０９ａ，５０９ｂにキャッシュされていない場合（ＴＬＢミスの場合）、ＭＭＵ５０６は、ステップＳ００３において、アドレス解決処理を行い、ステップＳ００４において、解決されたアドレス変換情報をアドレス変換キャッシュ５０９ａ，５０９ｂにキャッシュする。
【０２６３】
ステップＳ００５において、ＭＭＵ５０５は、参照要求されたデータを、解決された物理アドレスから読み込む。
【０２６４】
図１２は、本実施形態に係るアドレス解決処理を例示するフローチャートである。
【０２６５】
この図１２で示すアドレス解決処理は、データ参照処理で発生する。
【０２６６】
ステップＳ１０１において、ＭＭＵ５０６は、アドレス解決処理を開始すると、ページウォークによるアドレス解決を行う。
【０２６７】
ステップＳ１０２において、ＭＭＵ５０６は、ページウォーク中にテーブルエントリが無効か否かチェックする。
【０２６８】
テーブルエントリが有効の場合、処理はステップＳ１０４に移動する。
【０２６９】
テーブルエントリが無効の場合、ＭＭＵ５０６は、制御をセキュアＶＭＭ５１６に移し、ステップＳ１０３において、セキュアＶＭＭ５１６は、無効のテーブルエントリによって参照されるページブロックのツリー検証処理を行う。検証処理終了後、セキュアＶＭＭ５１６は、無効であった検証されたテーブルエントリを有効にし、制御をＭＭＵ５０６に移す。ステップＳ１０４において、ＭＭＵ５０６は、データブロックまでのアドレスが解決したかチェックする。
【０２７０】
アドレスが解決していない場合には、処理はステップＳ１０１に戻る。これにより、アドレスが解決するまでページウォークが繰り返される。
【０２７１】
アドレスが解決した場合、ステップＳ１０５において、ＭＭＵ５０６は、データ参照処理を再開し、アドレス解決処理を終了する。
【０２７２】
このように、検証処理は、ステージ２ページテーブルツリーのページフォールトによるアドレス解決処理時にセキュアＶＭＭ５１６によって逐次実行される。ページウォークでは、テーブルブロックとデータブロックとのページングが一度に行われてもよい。この場合、セキュアＶＭＭ５１６とＭＭＵ５０６との間の遷移回数が削減される。
【０２７３】
（情報処理装置５００の構成）
図１３は、本実施形態に係る情報処理装置５００の第１の構成を例示するブロック図である。
【０２７４】
情報処理装置５００は、命令実行ユニット５０５、アドレス変換キャッシュ５２７、ＭＭＵ５０６、検証管理部５２９、検証情報生成部５３１、外部読込部５３２、外部書出部５３４、記憶領域管理部５３５、検証記憶部５３６、鍵保存ユニット５１３、外部メモリ７を備える。
【０２７５】
ＭＭＵ５０６は、アドレス解決部５３７を備える。
【０２７６】
検証管理部５２９は、検証情報取得部５４０、改ざん判定部５３９、検証情報計算部５４１を備える。
【０２７７】
記憶領域管理部５３５は、参照関係更新部（ページテーブル参照関係更新部）５４６、バッファ領域管理部５４７、バッファ書出管理部（検証用バッファ書出管理部）５４８を備える。
【０２７８】
ここで、アドレス変換キャッシュ５２７とＭＭＵ５０６とは、アドレス変換部３に対応する。アドレス変換キャッシュ５２７は、アドレス変換キャッシュ５０９ａ，５０９ｂに対応する。
【０２７９】
外部読込部５３２及び外部書出部５３４は、外部入出力部２に対応する。
【０２８０】
検証情報計算部５４１及び検証情報生成部５３１は、検証計算部４に対応する。
【０２８１】
改ざん判定部５３９は、検証部５に対応する。
【０２８２】
参照関係更新部５４６は、更新部６に対応する。
【０２８３】
バッファ領域管理部５４７及びバッファ書出管理部５４８は、置換管理部４０に対応する。
【０２８４】
検証記憶部５３６は、内部メモリ８に対応する。
【０２８５】
（データ参照処理と情報処理装置５００の構成との関係）
上記の図１３の各構成要素と上記図１１，１２のフローチャートとの関係を説明する。
【０２８６】
命令実行ユニット５０５は、ステップＳ００１において、データ参照要求を発行し、ステップＳ００２において、アドレス変換キャッシュ５２７に、セキュアＯＳ５１７の仮想アドレスに対応する物理アドレスがキャッシュされているか否かを問い合わせる。
【０２８７】
アドレス変換キャッシュ５２７に参照要求された仮想アドレスに対応する物理アドレスがキャッシュされていない場合、ＭＭＵ５０６のアドレス解決部５３７は、ステップＳ００３において、アドレス解決処理を実行する。
【０２８８】
アドレス解決処理において、ＭＭＵ５０６は、ステップＳ１０１でページウォークを実行し、ステップＳ１０２において検証記憶部５３６に記憶されている該当のテーブルブロックT301のテーブルエントリE301-1をチェックする。
【０２８９】
テーブルエントリが有効の場合、処理はステップＳ１０４に移動する。
【０２９０】
テーブルエントリが無効の場合、その旨を示す結果を検証管理部５２９に通知し、結果を受けた検証管理部５２９は、ステップＳ１０３において、このテーブルエントリによって参照されるページブロックに対して検証処理を行う。検証処理終了後、検証管理部５２９は、参照関係更新部５４６に通知を行い、参照関係更新部５４６は、無効であったテーブルエントリを有効化する。その後、検証管理部５２９は読み込みを完了として制御をＭＭＵ５０６に戻す。
【０２９１】
ステップＳ１０４において、ＭＭＵ５０６は、データブロックまでのアドレスが解決したかチェックし、アドレスが未解決の場合にはステップＳ１０１のページウォークに処理が戻る。
【０２９２】
アドレスが解決された場合、ステップＳ１０５において、ＭＭＵ５０６は、データ参照処理を再開し、アドレス解決処理を終了する。
【０２９３】
アドレス解決が完了した段階で、検証管理部５２９及び記憶領域管理部５３５は、検証済みの状態で、アドレス解決に必要なページテーブルを、検証記憶部５３６に動的に確保されたバッファ領域５１９ｈに記憶する。
【０２９４】
ＭＭＵ５０６は、ステップＳ００４において、アドレス解決の結果であるアドレス変換情報をアドレス変換キャッシュ５２７にキャッシュする。
【０２９５】
アドレス変換キャッシュ５２７に参照要求された仮想アドレスに対応する物理アドレスがキャッシュされている場合、又は、アドレス解決が実行された場合、ＭＭＵ５０６は、ステップＳ００５において、対応する物理アドレスを用いてデータを読み込む。
【０２９６】
アドレス変換キャッシュにアドレス変換情報が記憶されており、既にデータ参照が行われていた場合には、検証済みデータが検証記憶部５３６に記憶されている。アドレス変換キャッシュ５２７には、検証記憶部５３６のバッファのアドレスが記憶されている。アドレス変換キャッシュ５２７から変換済みの物理アドレスが検証記憶部５３６に送られ、ステップＳ００５において、検証記憶部５３６のデータが命令実行ユニット５０５に返される。
【０２９７】
（ツリー検証処理）
ツリー検証処理は、ページ単位のデータに対して実行される。セキュアＶＭＭ５１６は、ページフォールトを発生させたデータに対する外部メモリ７から内部メモリ８への読み込みとツリー検証とを実行する。ツリー検証処理では、必要に応じて、置き換え処理及び追い出し処理が発生する。ツリー検証処理は、上記図１２のアドレス解決処理で発生する場合がある。
【０２９８】
図１４は、本実施形態に係るツリー検証処理を例示するフローチャートである。
【０２９９】
ステップＳ２０１において、セキュアＶＭＭ５１６は、データのツリー検証処理を開始し、内部メモリ８の検証バッファ領域５１９ｊに空き領域が存在するか否かチェックする。検証バッファ領域５１９ｊに空き領域がない場合、セキュアＶＭＭ５１６は、ステップＳ２０２において、置き換え処理により領域の解放を行う。
【０３００】
続いて、セキュアＶＭＭ５１６は、ステップＳ２０３において、検証されるデータを外部メモリ７から内部メモリ８の検証バッファ領域５１９ｊの空き領域へコピーする。このとき、セキュアＤＭＡコントローラ５１１は、ＭＡＣツリー構造又はＭＡＣ＋カウンタ構造で定義されるＭＡＣ生成方法に基づいて、読み込まれたデータのＭＡＣ値を生成する。
【０３０１】
そして、セキュアＶＭＭ５１６は、ステップＳ２０４において、生成されたＭＡＣ値に基づいて検証対象データの改ざん検証を行う。改ざん検証において、外部メモリ７からＭＡＣ値を読み込む必要がある場合、セキュアＶＭＭ５１６は、検証対象データに対応するＭＡＣ値を外部メモリ７から読み込み、読み込まれたＭＡＣ値を内部メモリ８の一時バッファ領域５１９ｋに記憶する。内部メモリ８のＭＡＣ値が使用される場合、セキュアＶＭＭ５１６は、検証対象データに対応するＭＡＣ値を内部メモリ８から読み込み、読み込まれたＭＡＣ値を一時バッファ領域５１９ｋに記憶する。そして、セキュアＶＭＭ５１６は、一時バッファ領域５１９ｋに記憶されたＭＡＣ値と、セキュアＤＭＡコントローラ５１１で生成されたＭＡＣ値とを比較する。
【０３０２】
セキュアＶＭＭ５１６は、ステップＳ２０５において、ＭＡＣ値が整合しない場合、検証失敗と判断し、ステップＳ２０６の検証失敗後処理に制御を移す。ステップＳ２０６において、セキュアＶＭＭ５１６は、検証失敗後処理でエラー処理などを行い、その後に検証処理を終了させる。
【０３０３】
セキュアＶＭＭ５１６は、ステップＳ２０５において、ＭＡＣ値が整合した場合、検証成功と判断する。セキュアＶＭＭ５１６は、ステップＳ２０７において、無効となっていたテーブルエントリの参照先アドレスに、検証対象データの内部メモリ８のアドレスを書き込む。このとき、データの外部メモリ７のアドレスは、バッファブロック単位にバッファ管理情報領域５１９ｉに記憶される。その後、セキュアＶＭＭ５１６は、検証処理を終了する。
【０３０４】
ツリー検証は、検証対象がデータブロックの場合と、テーブルブロックの場合とで処理が異なる。
【０３０５】
（置き換え処理）
図１５は、本実施形態に係る置き換え処理を例示するフローチャートである。図１５に示す置き換え処理は、上記図１４のツリー検証処理で発生する場合がある。
【０３０６】
置き換え処理では、置き換え元と同種類のデータが、置き換え対象として、置き換えアルゴリズムにしたがって選択される。すなわち、テーブルブロックの置き換え時には、テーブルブロックが選択される。データブロックの置き換え時は、データブロックが選択される。置き換えアルゴリズムは、ＬＲＵ（Least Recently Used）を用いて説明を行うが、他の置き換えアルゴリズムを用いて置き換え対象を選択してもよい。本実施形態においては、置き換え対象としてテーブルブロックが選択された場合、この選択された置き換え対象のテーブルブロックと、この置き換え対象のテーブルブロックに従属する関連ブロックとを置き換え対象とする場合を例として説明する。
【０３０７】
セキュアＶＭＭ５１６は、置き換え処理を開始し、ステップＳ３０１において、例えばＬＲＵに基づいて内部メモリ８の置き換え対象を選択する。さらに、セキュアＶＭＭ５１６は、置き換え対象がテーブルブロックの場合に、置き換え対象のテーブルブロックと、この置き換え対象のテーブルブロックに従属する関連ブロックとを置き換え対象として決定する。
【０３０８】
セキュアＶＭＭ５１６は、ステップＳ３０２において、置き換え対象から１つの追い出し対象を選択する。セキュアＶＭＭ５１６は、追い出し対象としてテーブルブロックとデータブロックが存在する場合は、データブロックを優先的に選択する。
【０３０９】
セキュアＶＭＭ５１６は、ステップＳ３０３において、追い出し処理を実行する。
【０３１０】
追い出し処理終了後、セキュアＶＭＭ５１６は、ステップＳ３０４において、置き換え対象がまだ内部メモリ８に存在するかチェックする。
【０３１１】
置き換え対象が内部メモリ８に存在する場合、置き換え対象が内部メモリ８に存在しなくなるまでステップＳ３０２以降の処理が繰り返される。セキュアＶＭＭ５１６は、置き換え対象が内部メモリ８に存在しなくなると、置き換え処理を終了する。なお、置き換え対象が内部メモリ８に存在するか否かをチェックする理由は、バッファ管理の方針に依存して、後述のように置き換え対象がテーブルブロックの場合に参照ブロックの追い出しを必要とし、複数回の追い出しが必要となる場合があるためである。
【０３１２】
上述の置き換え処理終了後、内部メモリ８の検証バッファ領域５１９ｊには、空き領域が確保される。
【０３１３】
（追い出し処理）
図１６は、本実施形態に係る追い出し処理を例示するフローチャートである。図１６に示す追い出し処理は、上記図１５の置き換え処理で発生する。
【０３１４】
例えば、内部メモリ８のバッファ管理情報領域５１９ｉは、データ及びページテーブルごとの外部メモリ７のアドレスと内部メモリ８のアドレスとを関連付けた変換リストを記憶する。内部メモリ８のアドレスIaddrと外部メモリ７のアドレスEaddrとの変換は、変換リストを用いる方法に代えて、例えば逆ページウォークなどの他の方法が用いられてもよい。
【０３１５】
以下の図１６の説明では、上記の図１０において内部メモリ８に読み込まれたレベル２のテーブルブロックT401-0の追い出し処理を例として説明する。
【０３１６】
セキュアＶＭＭ５１６は、追い出し処理を開始し、ステップＳ４０１からステップＳ４０５までのループ処理を、追い出し対象のテーブルブロックT401-0内のすべてのテーブルエントリE401-0-0〜E401-0-511に対して実行する。
【０３１７】
以下の説明では、テーブルエントリE401-0-0〜E401-0-511のうちで有効なテーブルエントリはE401-0-0のみであり、他のテーブルエントリE401-0-1〜E401-0-511の参照先は内部メモリ８に読み込まれていない状態とする。
【０３１８】
ステップＳ４０１からステップＳ４０５までのループ内のステップＳ４０２において、セキュアＶＭＭ５１６は、有効なテーブルエントリE401-0-0を選択し、有効なテーブルエントリE401-0-0の参照ブロックT401-0-0の配置位置が外部メモリ７か内部メモリ８かを判断する。
【０３１９】
参照ブロックの配置位置が外部メモリ７の場合には、処理はステップＳ４０５に移動する。
【０３２０】
この例では、参照ブロックT401-0-0の配置位置が内部メモリ８であるため、ステップＳ４０３とＳ４０４が実行される。
【０３２１】
ステップＳ４０３において、セキュアＶＭＭ５１６は、参照ブロックT401-0-0の追い出し処理を実行する。この例では、参照ブロックT401-0-0を対象として、この図１６の追い出し処理が再帰的に行われる。
【０３２２】
ステップＳ４０４において、セキュアＶＭＭ５１６は、選択された有効なテーブルエントリE401-0-0を無効化し、選択された有効なテーブルエントリE401-0-0に格納されるアドレスを、ステップＳ４０３で内部メモリ８から外部メモリ７へ書き戻された参照ブロックT401-0-0の外部メモリ７のアドレスEaddr(T401-0-0)に書き換える。ここでは、参照ブロックT401-0-0の追い出し処理は後述し、先にステップＳ４０１からステップＳ４０５までのループより後の処理を説明する。追い出し対象のテーブルブロックT401-0の残りのテーブルエントリE401-0-1〜E401-0-511はすべて無効であるため、その後処理はステップＳ４０１からステップＳ４０５までのループ処理を脱出し、ステップＳ４０６へ移動する。
【０３２３】
ステップＳ４０６において、セキュアＶＭＭ５１６は、追い出し対象のテーブルブロックT401-0の内容に更新があるか確認する。
【０３２４】
更新がない場合、セキュアＶＭＭ５１６は、ステップＳ４１０の領域の解放へ進む。
【０３２５】
更新がある場合は、セキュアＶＭＭ５１６は、ステップＳ４０７において、追い出し対象のテーブルブロックT401-0を検証するためのＭＡＣ値を計算し、ＭＡＣ値をＭＡＣブロックT402のテーブルエントリE402-0に格納する。
【０３２６】
ステップＳ４０８において、セキュアＶＭＭ５１６は、追い出し対象のテーブルブロックT401-0の外部メモリ７の書き出し先アドレスを決定する。
【０３２７】
ステップＳ４０９において、セキュアＶＭＭ５１６は、追い出し対象のテーブルブロックT401-0及びこのテーブルブロックT401-0に関連付けられるＭＡＣブロックT402-0を外部メモリ７に書き出す。
【０３２８】
ステップＳ４１０において、セキュアＶＭＭ５１６は、内部メモリ８に対する領域の解放を実行し、追い出し処理は終了する。
【０３２９】
続いて、上記のステップＳ４０３における参照ブロックT401-0-0の追い出し処理を説明する。
【０３３０】
参照ブロックT401-0-0に含まれるテーブルエントリE401-0-0-0〜E401-0-0-511のうちで有効なテーブルエントリは、E401-0-0-0及びE401-0-0-511の２つであり、他のテーブルエントリE401-0-0-1〜E401-0-0-510は無効とする。
【０３３１】
この説明では、有効なテーブルエントリE401-0-0-0及びE401-0-0-511はそれぞれ外部メモリ７のデータブロックB401-0-0-0及びB401-0-0-511を参照しているとする。
【０３３２】
この場合、セキュアＶＭＭ５１６は、追い出し処理を開始し、ステップＳ４０１において、参照ブロックT401-0-0を追い出し対象とし、この追い出し対象のテーブルブロックT401-0-0のすべてのテーブルエントリE401-0-0-0〜E401-0-0-511に対して、ステップＳ４０１からステップＳ４０５までのループ処理を行う。
【０３３３】
まず、セキュアＶＭＭ５１６は、ステップＳ４０２で、有効なテーブルエントリE401-0-0-0を選択し、選択された有効なテーブルエントリE401-0-0-0の参照ブロックB401-0-0-0の配置位置が外部メモリ７か内部メモリ８かを判断する。ここでは上記のように参照ブロックB401-0-0-0の配置位置が外部メモリ７であると仮定しているため、ステップＳ６０３とＳ６０４は実行されることなく、セキュアＶＭＭ５１６は、次のテーブルエントリE401-0-0-1に対する処理を開始する。この次のテーブルエントリE401-0-0-1に対する処理が始まるとき、テーブルエントリE401-0-0-0は有効かつ外部メモリ７のデータブロックB401-0-0-0を参照する状態を維持している。
【０３３４】
テーブルエントリE401-0-0-1〜E401-0-0-510は無効状態であるため、ループ内の処理はスキップされる。
【０３３５】
そして、セキュアＶＭＭ５１６は、選択された有効なE401-0-0-511に対して、上記のテーブルエントリE401-0-0-0と同様の処理を実行し、テーブルエントリE401-0-0-511に対するループ内の処理が終了したとき、テーブルエントリE401-0-0-511は有効かつ外部メモリ７のデータブロックB401-0-0-511を参照する状態を維持している。
【０３３６】
ループ処理の終了後、セキュアＶＭＭ５１６は、ステップＳ４０６において、追い出し対象のテーブルブロックT401-0-0の更新の有無を判断する。
【０３３７】
追い出し対象のテーブルブロックT401-0-0に更新があった場合、セキュアＶＭＭ５１６は、ステップＳ４０７において、追い出し対象のテーブルブロックT401-0-0の検証に用いられるＭＡＣ値を計算し、ＭＡＣ値をＭＡＣブロックT402-0のテーブルエントリE402-0-0に格納する。
【０３３８】
ステップＳ４０８において、セキュアＶＭＭ５１６は、追い出し対象のテーブルブロックT401-0-0の外部メモリ７の書き出し先アドレスを決定する。
【０３３９】
ステップＳ４０９において、セキュアＶＭＭ５１６は、追い出し対象のテーブルブロックT401-0-0及びこのテーブルブロックT401-0-0に関連付けられるＭＡＣブロックT402-0-0を外部メモリ７に書き出す。
【０３４０】
ステップＳ４１０において、セキュアＶＭＭ５１６は、内部メモリ８の領域を解放し、追い出し処理が終了される。
【０３４１】
もし、追い出し対象のテーブルブロックT401-0-0に更新がない場合、セキュアＶＭＭ５１６は、ステップＳ４０６の判断の後、追い出し対象のテーブルブロックT401-0-0に関連付けられるＭＡＣブロックT402-0-0の書き出しを行うことなく、ステップＳ４１０で内部メモリ８の領域の解放を行い、追い出し処理が終了され、外部メモリ７のテーブルブロックT401-0-0及びＭＡＣブロックT402-0-0がそのまま維持される。
【０３４２】
したがって、テーブルブロックT401-0-0の追い出し処理が完了したとき、テーブルエントリE401-0-0-0及びE401-0-0-511は、それぞれ外部メモリ７のデータブロックB401-0-0-0及びB401-0-0-511を参照しかつ有効状態がそのまま維持される。これはステップＳ４０１からＳ４０５の有効なテーブルエントリに対するループ処理で、以下の処理が行われることによる。ステップＳ４０２において、有効なテーブルエントリの参照先が内部メモリ８の参照ブロックの場合、ステップＳ４０３の参照ブロックの追い出し処理とステップＳ４０４のテーブルエントリの無効化処理が行われる。有効なテーブルエントリの参照ブロックが外部メモリ７に存在する場合、すなわち上記の例で非セキュアＯＳ５１８のデータブロックの場合、ステップＳ４０３の参照ブロックの追い出し処理とステップＳ４０４のテーブルエントリの無効化処理は行われず、テーブルエントリが外部メモリ７のデータブロックを参照しかつ有効状態で維持される。このため、非セキュアＯＳ５１８のデータに対しては、外部メモリ７を直接参照するように設定されたテーブルブロックの初期状態がそのまま維持される。
【０３４３】
なお、この効果はセキュアＯＳ５１７のデータブロックの一部が、非セキュアＯＳ５１８の場合と同様に外部メモリ７のデータブロックを参照するように設定された場合にも成立する。例えば、セキュアＯＳ５１７が、非セキュアＯＳ５１８又は他のセキュアＯＳとのデータ交換用に割り当てられた仮想物理アドレス空間の一部を、非セキュアなメモリ領域として用いる場合であっても、上記の効果を得ることができる。
【０３４４】
（情報処理装置５００の構成とツリー検証処理との関係）
上記のようなツリー検証処理と、上記図１３に示す情報処理装置５００との構成とを関連付けて説明する。
【０３４５】
検証管理部５２９は、ステップＳ２０１において、記憶領域管理部５３５のバッファ領域管理部５４７に、検証記憶部５３６の空き領域の有無を照会する。空き領域がない場合、検証管理部５２９は、ステップＳ２０２において、記憶領域管理部５３５に読み込み済みバッファ領域解放を要求する。
【０３４６】
要求を受けたバッファ領域管理部５４７は、ステップＳ３０１において、置き換えアルゴリズムにしたがって検証記憶部５３６から置き換え対象を選択する。このとき、バッファ領域管理部５４７は、置き換え対象がテーブルブロックの場合は、このテーブルブロックとこのテーブルブロックの関連ブロックを追い出し対象として選択する。バッファ領域管理部５４７は、ステップＳ３０２において、追い出し対象の中から１つを選択し、バッファ書出管理部５４８に追い出し処理を要求する。
【０３４７】
要求を受けたバッファ書出管理部５４８は、ステップＳ４０１からステップＳ４０５のループ処理を実行し、ステップＳ４０６において、選択された追い出し対象の内容に更新があるか確認し、更新がない場合はステップＳ４１０に移動する。
【０３４８】
更新がある場合、バッファ書出管理部５４８は、ステップＳ４０７において、ＭＡＣツリー構造又はＭＡＣ＋カウンタ構造で定義されるＭＡＣ値生成方法に基づいて、追い出し対象の新しいＭＡＣ値の生成を依頼する。検証情報生成部５３１は、新しいＭＡＣ値を生成する。
【０３４９】
参照関係更新部５４６は、ステップＳ４０８において、検証記憶部５３６の変換リストから書き出し先のアドレスを決定し、書き出し先のアドレスを検証情報生成部５３１に通知する。
【０３５０】
検証情報生成部５３１は、追い出し対象、書き出しが必要なデータ、書き出し先アドレスを、外部書出部５３４に送る。外部書出部５３４は、ステップＳ４０９において、追い出し対象、書き出し先のアドレスに基づいて外部メモリ７への書き出しを行う。その後、ステップＳ４１０において、参照関係更新部５４６は、検証記憶部５３６の該当テーブルエントリの参照先アドレスを外部メモリ７のアドレスに書き換え、エントリを無効化する。そして、バッファ領域管理部５４７は、検証記憶部５３６に記憶されていた追い出し対象に関する制御情報を削除し、検証記憶部５３６の追い出し対象が記憶されていた領域を解放する。
【０３５１】
バッファ領域管理部５４７は、ステップＳ３０４において、選択された全ての書き換え対象が検証記憶部５３６から追い出されるまで、ステップＳ３０２の追い出し対象の選択と、ステップＳ３０３の追い出し処理とを繰り返す。
【０３５２】
全ての書き換え対象が追い出されると、検証記憶部５３６には、追い出されたデータ分の空き領域が生じる。
【０３５３】
検証管理部５２９の検証情報取得部５４０は、ステップＳ２０３において、検証に使用されるデータの読み込みを外部読込部５３２に要求する。外部読込部５３２は、要求されたデータを外部メモリ７から読み込み、読み込まれたデータのうち検証対象データを検証情報計算部５４１に送る。
【０３５４】
検証情報計算部５４１は、ステップＳ２０４において、検証対象データに基づいて、ＭＡＣツリー構造又はＭＡＣ＋カウンタ構造で定義されるＭＡＣ生成方法により、読み込まれたデータのＭＡＣ値を生成する。改ざん判定部５３９は、予め生成されたＭＡＣ値と検証情報計算部５４１で計算されたＭＡＣ値を照合する。
【０３５５】
検証管理部５２９は、ステップＳ２０５においてＭＡＣ値が整合せず検証が失敗した場合、ステップＳ２０６において、命令実行ユニット５０５に検証失敗を通知して以後の処理を中止する。
【０３５６】
検証管理部５２９は、ステップＳ２０５においてＭＡＣ値が整合し、検証が成功した場合、参照関係更新部５４６に読み込み成功を通知する。参照関係更新部５４６は、ステップＳ３０７において、無効のテーブルエントリの参照先アドレスに、検証記憶部５３６における検証対象データのアドレスを書き込む。このとき、参照関係更新部５４６は、検証対象データの外部メモリ７のアドレスをバッファブロック単位に検証記憶部５３６に記憶する。
【０３５７】
（テーブル参照テーブルとデータ参照テーブル）
本実施形態の非セキュアＯＳ５１８におけるデータ検証処理に関して説明する。
【０３５８】
例えば、外部メモリ７のページテーブルツリー９では、レベルＮ（Ｎ階層目）のテーブルエントリがデータを参照する。外部メモリ７のデータを参照するレベルＮのテーブルエントリは、予め有効状態であると設定される。非セキュアＯＳ５１８によって参照されるデータは、非セキュアＯＳ５１８に割り当てられているアドレス領域に配置される。
【０３５９】
本実施形態において、ページテーブルＰに含まれる複数のテーブルエントリＥ０〜Ｅｎは、複数のテーブルＴ０〜Ｔｎ又はデータＤ０〜Ｄｎを参照する。テーブルエントリＥ０〜Ｅｎの参照先がページテーブルＴ０〜Ｔｎの場合、ページテーブルＰをテーブル参照テーブルと呼ぶ。テーブルエントリＥ０〜Ｅｎの参照先がデータＤ０〜Ｄｎの場合、ページテーブルＰをデータ参照テーブルと呼ぶ。
【０３６０】
図１７は、本実施形態に係るデータ参照テーブルに含まれるテーブルエントリの参照状態を例示するデータ構造図である。この図１７を用いて、非セキュアＯＳ５１８のデータは、フォールト及び内部メモリ８へのコピーの双方が発生することなく、外部メモリ７からキャッシュメモリ５０７ａ〜５０７ｃ経由で命令実行ユニット５０５に送られ、内部メモリ８のメモリ領域に配置されないことを説明する。
【０３６１】
テーブル参照テーブルT401，T401-0は、内部メモリ８に記憶されている。データ参照テーブルT401-0-0及びデータB401-0-0-0は、内部メモリ８にまだ記憶されていない。この状況で、非セキュアＯＳ５１８のデータB401-0-0-0が参照される場合を例として説明する。
【０３６２】
テーブル参照テーブルT401，T401-0が外部メモリ７に記憶されている未検証ページテーブルの状態の場合には、テーブル参照テーブルT401，T401-0の各テーブルエントリは、無効状態である。
【０３６３】
しかしながら、非セキュアＯＳ５１８のデータB401-0-0-0を参照するデータ参照テーブルT401-0-0が外部メモリ７に記憶されている未検証ページテーブルの状態の場合、データ参照テーブルT401-0-0に含まれている例えばテーブルエントリE401-0-0-0などのテーブルエントリは、メモリ領域が割り当てられていれば、既に有効状態とされる。
【０３６４】
データ参照テーブルT401-0-0が検証されて内部メモリ８にコピーされると、データ参照テーブルT401-0-0を参照するテーブル参照テーブルT401-0のテーブルエントリE401-0-0が、内部メモリ８のデータ参照テーブルT401-0-0を参照するように更新され、さらに、有効状態とされる。
【０３６５】
テーブル参照テーブルT401-0のテーブルエントリE401-0-0の更新が完了すると、ＭＭＵ５０６は、即座にデータB401-0-0-0のアドレスを解決することができる。このデータB401-0-0-0のアドレス解決では、データ参照テーブルT401-0-0のテーブルエントリE401-0-0-0は、コピーされた時点で、有効状態であり、ページフォールトは発生しない。
【０３６６】
データB401-0-0-0の参照において、テーブルエントリE401-0-0-0は、読み込み時点で外部メモリ７のアドレスEaddr(E401-0-0-0)を参照している。このため、アドレス解決に続いて、フォールトなしにデータB401-0-0-0を参照することができる。
【０３６７】
この非セキュアＯＳ５１８のデータB401-0-0-0の参照は、通常のデータ参照である。データB401-0-0-0は、内部メモリ８に記憶されることなく、直接キャッシュメモリ５０７ａ〜５０７ｃに記憶され、内部メモリ８のメモリ領域に配置されない。
【０３６８】
キャッシュメモリ５０７ａ〜５０７ｃの読み込み単位はキャッシュライン単位であり、ページよりも小さい。このため、キャッシュライン単位での読み込みは、ページ単位での読み込みよりも、読み込み時間を抑制して遅延を防止することができ、メモリ利用効率を向上させることができる。
【０３６９】
（非セキュアＯＳ５１８におけるレベルＮのテーブルエントリの有効状態）
非セキュアＯＳ５１８においては、外部メモリ７に記憶されるデータ参照テーブルのテーブルエントリに有効状態が設定されている。
【０３７０】
本実施形態において、データ参照テーブルのテーブルエントリの有効状態は、データ参照テーブルが内部メモリ８から外部メモリ７へ書き戻された場合でも維持される。
【０３７１】
非セキュアＯＳ５１８のデータ参照テーブルは、参照先のデータの検証子と関連付けされない。具体例を挙げると、ページ参照テーブルT401-0は、検証子ブロックT402-0と関連付けられている。しかしながら、非セキュアＯＳ５１８用のデータ参照テーブルT401-0-0は、データB401-0-0-0の検証子と関連付けされない。
【０３７２】
（非セキュアＯＳ５１８用のセキュアブートローダ５０８ａの構成）
上記の特徴を持つページテーブル９を生成する一例として、セキュアブートローダ５０８ａによるＯＳイメージの初期化を説明する。
【０３７３】
セキュアブートローダ５０８ａは、非セキュアＯＳ５１８のブートイメージを外部メモリ７の所定のメモリ領域にロードする。また、セキュアブートローダ５０８ａは、非セキュアＯＳ５１８の実行時に、セキュアＶＭＭ５１６により参照されるページテーブルツリー（ステージ２ページテーブル）９と検証子ツリー１０とを生成し、ページテーブルツリー９と検証子ツリー１０とを外部メモリ７に記憶し、処理を終了する。
【０３７４】
セキュアブートローダ５０８ａは、セキュアページテーブルツリー１２１のルート検証情報１３を、安全なレジスタ５２６に記憶する。
【０３７５】
本実施形態では、非セキュアＯＳ５１８は改ざんされることを許容しているため、非セキュアＯＳ５１８のブートイメージ全体の改ざん検証は行われなくてもよい。非セキュアＯＳ５１８のブートイメージ全体に対する改ざん検証は、ページテーブルツリー９と検証子ツリー１０との生成と独立に行われてもよい。
【０３７６】
図１８は、本実施形態に係る情報処理装置５００の第２の構成を例示するブロック図である。
【０３７７】
情報処理装置５００は、部分読込部５５２、ブートローダ制御部５５３、検証情報生成部５３１、外部読込部５３２、外部書出部５３４、記憶領域管理部５３５、検証記憶部５３６、鍵保存ユニット５１３、外部メモリ７を備える。
【０３７８】
記憶領域管理部５３５は、参照関係更新部５４６、バッファ領域管理部５４７、バッファ書出管理部５４８を備える。
【０３７９】
部分読込部５５２は、ヘッダ取得部５５４、署名情報計算部５５５を備える。
【０３８０】
ブートローダ制御部５５３は、メモリ領域制御部５５６、参照先判定部５５７を含むページテーブル初期化部５５８、署名検証部５５９を備える。
【０３８１】
例えば、部分読込部５５２のうちのヘッダ取得部５５４、外部読込部５３２、外部書出部５３４は、上記図１の外部入出力部２に対応する。
【０３８２】
例えば、署名情報計算部５５５及び検証情報生成部５３１は、上記図１の検証計算部４に対応する。
【０３８３】
例えば、署名検証部５５９は、上記図１の検証部５に対応する。
【０３８４】
例えば、メモリ領域制御部５５６及び記憶領域管理部５３５は、上記図１の更新部６及び置換管理部４０に対応する。
【０３８５】
例えば、ページテーブル初期化部５５８は、上記図１の初期化部４２に対応する。
【０３８６】
検証記憶部５３６は、内部メモリ８に対応する。
【０３８７】
図１９は、本実施形態に係る情報処理装置５００によるブート処理を例示するフローチャートである。
【０３８８】
ステップＺ１０１において、ヘッダ取得部５５４は、外部メモリ７から外部読込部５３２経由で、ブートイメージのヘッダを取得し、このヘッダに基づいて、ゲストＯＳが非セキュアＯＳ５１８であること、非セキュアＯＳ５１８のメモリ領域のサイズ、を取得する。メモリ領域制御部５５６は、外部メモリ７におけるステージ２アドレス変換に必要な非セキュアＯＳ５１８のページテーブルツリー９及び検証子ツリー１０のメモリ領域を計算する。
【０３８９】
ステップＺ１０２において、メモリ領域制御部５５６は、セキュアＶＭＭ５１６によって管理される外部メモリ７に、計算によって得られたサイズのメモリ領域を確保する。
【０３９０】
次に、ページテーブル初期化部５５８は、非セキュアＯＳ５１８によって要求される中間物理アドレス領域と物理アドレスとの対応関係を定義するページテーブルツリー９及び検証子ツリー１０の生成を開始する。
【０３９１】
ステップＺ１０３において、ページテーブル初期化部５５８は、バッファ領域管理部５４７経由で、最上位のページブロックT401と、このテーブルブロックT401に関連付けられている検証ブロックT402とのメモリ領域を検証記憶部５３６に確保する。検証ブロックT402には、テーブルブロックT401に含まれている各テーブルエントリE401-0〜E401-3によって参照されるテーブルブロックT401-0〜T401-3及び検証ブロックT402-0〜T402-3の検証子が配置される。
【０３９２】
ステップＺ１０４において、ページテーブル初期化部５５８は、バッファ領域管理部５４７経由で、検証記憶部５３６に配置可能なサイズのテーブルブロックT401-0〜T401-3と、このテーブルブロックT401-0〜T401-3に関連付けられる検証ブロックT402-0〜T402-3とを選択する。
【０３９３】
ステップＺ１０５において、ページテーブル初期化部５５８は、バッファ領域管理部５４７経由で、選択されたテーブルブロックT401-0〜T401-3と検証ブロックT402-0〜T402-3とのメモリ領域を、検証記憶部５３６に確保する。ページテーブル初期化部５５８は、参照関係更新部５４６経由で、テーブルブロックT401-0〜T401-3の外部メモリ７のアドレスEaddr(T401-0)〜Eaddr(T401-3)と、その他のフィールド情報を、テーブルブロックT401のテーブルエントリE401-0〜E401-3に書き込む。
【０３９４】
これにより、レベル２のテーブルブロックT401-0〜T401-3及び検証ブロックT402-0〜T402-3のメモリ領域の確保、及び、レベル１のテーブルブロックT401及び検証ブロックT402のメモリ領域の確保及びテーブルエントリE401-0〜E401-3の初期化が完了する。
【０３９５】
ページテーブル初期化部５５８は、同様の処理により、レベル３のテーブルブロックT401-0-0〜T401-3-511のメモリ領域の確保、及び、レベル２のテーブルブロックT401-0〜T401-3に含まれているテーブルエントリE401-0-0〜E401-3-511の初期化を行う。
【０３９６】
例えば、レベル３のテーブルブロックはT401-0-0〜T401-3-511まで存在するとすると、レベル３のテーブルブロックT401-0-0〜T401-3-511全体では、計２０４８ブロック、８１９２キロバイトのサイズとなる。例えば、検証記憶部５３６のサイズが全体で１メガバイトの場合には、レベル３のテーブルブロックT401-0-0〜T401-3-511を検証記憶部５３６に記憶することはできない。
【０３９７】
そこで、本実施形態では、レベル３のテーブルブロックT401-0-0〜T401-3-511を例えば３２個ごとのグループに分割し、順次、検証記憶部５３６及び外部メモリ７にメモリ領域を確保し、初期化を行い、検証記憶部５３６から外部メモリ７へ書き出しを行う。
【０３９８】
例えば、バッファ領域管理部５４７及びメモリ領域制御部５５６は、テーブルブロックT401-0によって参照されるテーブルブロックT401-0-0〜T401-0-511のうち、第１のグループに所属するテーブルブロックT401-0-0〜T401-0-127の１２８個、５１２キロバイトのメモリ領域を、検証記憶部５３６及び外部メモリ７に確保する。
【０３９９】
さらに、メモリ領域制御部５５６は、第１のグループに所属するテーブルブロックT401-0-0〜T401-0-511によって参照されるデータのメモリ領域を外部メモリ７に確保する。
【０４００】
非セキュアＯＳ５１８のデータは検証対象外のため、非セキュアＯＳ５１８のデータのメモリ領域は、検証記憶部５３６には確保されない。非セキュアＯＳ５１８に対する３階層のテーブルブロックT401-0-0〜T401-3-511によって参照されるデータの検証子は不要である。
【０４０１】
次に、ページテーブル初期化部５５７は、第１のグループに所属するテーブルブロックT401-0-0〜T401-0-127によって参照されるデータの外部メモリ７におけるアドレスEaddr(B401-0-0-0)〜Eaddr(B401-0-127-511)を、対応するページエントリE401-0-0-0〜E401-0-127-511に書き込み、その他のフィールド情報を書き込み、初期化を行う。
【０４０２】
ステップＺ１０６において、参照先判定部５５７は、第１のグループに所属するテーブルブロックT401-0-0〜T401-0-127がデータ参照テーブルであると判定し、ページテーブル初期化部５５８は、参照関係更新部５４６経由で、上述のように、データB401-0-0-0〜B401-0-127-511を参照するレベル３のテーブルブロックT401-0-0〜T401-0-127のテーブルエントリE401-0-0-0〜E401-0-127-511の有効／無効フラグを、有効状態に設定する。
【０４０３】
この段階で、第１のグループに所属するテーブルブロックT401-0-0〜T401-0-127のうち、テーブルエントリT401-0-0〜T401-0-127の初期化が完了する。
【０４０４】
ステップＺ１０７において、参照先判定部５５７が、レベル２のテーブルブロックT401-0がテーブル参照テーブルであると判定する。この場合、ページテーブル初期化部５５７は、レベル３のテーブルブロックT401-0-0〜T401-0-127のテーブルエントリT401-0-0〜T401-0-127とは異なり、テーブルブロックT401-0のテーブルエントリE401-0-0〜E401-0-127の有効/無効フラグを無効状態に設定する。
【０４０５】
ステップＺ１０８において、記憶領域管理部５３５の検証用バッファ書出部５４８は、レベル３のテーブルブロックT401-0-0〜T401-3-511のうち、上記の初期化が完了した第１のグループに所属するテーブルブロックT401-0-0〜T401-0-127に対する検証子計算を検証情報生成部５３１に要求する。検証情報生成部５３１は、第１のグループに所属するテーブルブロックT401-0-0〜T401-0-127に対する検証子を計算する。そして、外部書出部５３４は、第１のグループに所属するテーブルブロックT401-0-0〜T401-0-127を外部メモリ７に書き出す。バッファ領域管理部５４７は、書き出されたテーブルブロックT401-0-0〜T401-0-127が記憶されていた検証記憶部５３６のバッファ領域を空き領域とする。参照関係更新部５４６は、第１のグループに所属するテーブルブロックT401-0-0〜T401-0-127の外部メモリ７におけるアドレスEaddr(T401-0-0)〜Eaddr(T401-0-127)を、レベル２のテーブルブロックT401-0のテーブルエントリE401-0-0〜E401-0-127に書き込み、テーブルエントリE401-0-0〜E401-0-127にその他のフィールド情報を設定する。
【０４０６】
バッファ領域管理部５４７及びメモリ領域制御部５５６は、テーブルブロックT401-0によって参照されるレベル３のテーブルブロックT401-0-0〜T401-0-511のうち、第２のグループに所属するテーブルブロックT401-0-128〜T401-0-255のメモリ領域を、検証記憶部５３６及び外部メモリ７に確保する。ページテーブル初期化部５５８は、上記と同様の処理により第２のグループに所属するテーブルブロックT401-0-128〜T401-0-255を初期化する。
【０４０７】
バッファ領域管理部５４７、メモリ領域制御部５５６、ページテーブル初期化部５５７は、同様の処理を、第３のグループに所属するテーブルブロックT401-0-256〜T401-0-383及び第４のグループに所属するテーブルブロックT401-0-384〜T401-0-511に対して繰り返す。
【０４０８】
この結果、レベル２のテーブルブロックT401-0によって参照されるレベル３のテーブルブロックT401-0-0〜T401-0-511が全て初期化された状態になる。
【０４０９】
レベル３のテーブルブロックT401-0-0〜T401-0-511が全て初期化されると、選択されたテーブルブロックT401-0は書き出し可能となる。
【０４１０】
バッファ書出管理部５４８は、初期化が完了したテーブルブロックT401-0に対する検証子計算を検証情報生成部５３１に要求する。検証情報生成部５３１は、テーブルブロックT401-0に対する検証ブロックT402-0を計算する。そして、外部書出部５３４は、テーブルブロックT401-0及び検証ブロックT402-0を外部メモリ７に書き出す。バッファ領域管理部５４７は、書き出されたテーブルブロックT401-0が記憶されていた検証記憶部５３６のバッファ領域を空き領域とする。参照関係更新部５４６は、テーブルブロックT401-0の外部メモリ７におけるアドレスEaddr(T401-0)を、レベル１のテーブルブロックT401のテーブルエントリE401-0に書き込み、テーブルエントリE401-0にその他のフィールド情報を設定する。
【０４１１】
選択されたテーブルブロックT401-1，T401-2に対しても同様の処理が繰り返され、外部メモリ７に書き出される。
【０４１２】
ステップＺ１０９において、メモリ領域制御部５５６は、選択されたテーブルブロックT401-0〜T401-2を経由して参照される外部メモリ７のメモリ領域に、非セキュアＯＳ５１８のブートイメージを配置する。
【０４１３】
ステップＺ１１０において、ページテーブル初期化部５５８は、非セキュアＯＳ５１８のブートイメージに対する全てのテーブルブロックが選択され、外部メモリ７のメモリ領域に配置されたか否かを判断し、未選択のテーブルブロックがある場合に、処理はステップＺ１０４に戻る。上記の処理を全てのテーブルブロックが選択されるまで繰り返されると、全てのテーブルブロックの初期化及び外部メモリ８への配置が完了する。
【０４１４】
上記の処理において、テーブルブロックが検証記憶部５３６から外部メモリ７へ書き出される場合には、そのテーブルブロックと関連付けられている検証ブロックも、同期して書き出されるとしてもよい。
【０４１５】
本実施形態において、部分読込部５５２は、外部メモリ７のセキュアＯＳ５１７のブートイメージを分割して得られる部分ブートイメージを読み込むとしてもよい。この場合、署名情報計算部５５５は、部分ブートイメージの署名情報を生成する。署名検証部５５９は、セキュアＯＳ５１７のブートイメージのヘッダに含まれている署名情報と部分ブートイメージに基づいて計算された署名情報とに基づいて、署名検証を行う。これら部分読込部５５２、署名情報計算部５５５、署名検証部５５９の詳細な説明は、後述する。
【０４１６】
以上説明した本実施形態においては、非セキュアＯＳ５１８のブート時に、ブートイメージなどのようなデータに対しては、外部メモリ７におけるメモリ領域の確保と書き出しとが行われるが、外部メモリ７から内部メモリ８へデータの読み込みは行われない。したがって、外部メモリ７に対するデータの改ざんの影響を受けることなく、非セキュアＯＳ５１８を起動することができる。
【０４１７】
本実施形態においては、安全に非セキュアＯＳ５１８用のセキュアページテーブルツリー１２１及びセキュア検証子ツリー１２２を生成することができる。
【０４１８】
本実施形態においては、書き出し済みのテーブルブロックが外部メモリ７から内部メモリ８への読み込まれる場合に、セキュア検証子ツリー１２２に基づく検証によって改ざんを検出することができる。
【０４１９】
本実施形態においては、非セキュアＯＳ５１８に対するセキュアページテーブルツリー１２１をセキュア検証子ツリー１２２による改ざん検証の対象とし、データをセキュア検証子ツリー１２２による検証の対象外とする。これにより、セキュアＶＭＭ５１６及び改ざん検証されるべきセキュアＯＳ５１７のデータを、非セキュアＯＳ５１８に対する書き換えから防御することができる。
【０４２０】
あるデータブロックに対して検証を行わない上記ページテーブルの設定は、セキュアＯＳ５１７の仮想物理アドレス空間に配置された一部のデータメモリについても適用することが可能である。例えばセキュアＯＳ５１７と非セキュアＯＳ５１８が相互に読み書き可能な共有データ領域をもつとき、セキュアＯＳ５１７が読み込み時にすべてのデータを検証対象とすると、非セキュアＯＳ５１８によるデータ書き込みではそもそも検証子が書き込まれないのでセキュアＯＳ５１７による当該データの読込みは必ず検証に失敗する。この問題を回避するため、セキュアＯＳ５１７は後述の第３の実施形態におけるセキュアブートによるブートイメージのロード後、新規データを確保するとき、内部メモリ８の検証読込みを行うように、内部メモリ８上にデータ領域を確保してセキュアページテーブルツリー１２１に組み込むセキュアメモリと、外部メモリ７に確保したデータを直接参照するようセキュアページテーブルツリー１２１を設定する非セキュアメモリを選択可能とするが可能である。
【０４２１】
本実施形態においては、非セキュアＯＳ５１８に対するセキュアページテーブルツリー１２１をセキュア検証子ツリー１２２による改ざん検証の対象とし、データをセキュア検証子ツリー１２２による検証の対象外とする。これにより、セキュアＶＭＭ５１６及び改ざん検証されるべきセキュアＯＳ５１７のデータを、非セキュアＯＳ５１８に対する書き換えから防御することができる。
【０４２２】
この防御の効果は、ゲストＯＳが非セキュアＯＳ５１８のみであり、セキュアＯＳ５１７を含まない場合であっても有効である。
【０４２３】
例えば、情報処理装置５００で、異なるユーザ企業が共通のセキュアＶＭＭ５１６により複数のゲストＯＳを運用する場合、セキュアページテーブルツリー１２１の不正な書き換えが発生するとユーザ企業間で情報が漏れる可能性がある。情報処理装置５００が厳重に管理されており、物理メモリに対して悪意の攻撃が発生しないとしても、自然現象によるメモリエラーで情報漏れが発生する可能性もある。自然現象によるメモリエラーは、例えばＥＣＣ（Error Correcting Code）などの訂正機能付きメモリを導入することで情報漏れの発生確率を低減できる。しかしながら、訂正機能付きメモリは高価である。また、不正な書き換え及び情報漏れを厳密に防止するためには、メインメモリ全体を訂正機能付きとすることが必要である。
【０４２４】
これに対して、本実施形態に係るセキュア検証子ツリー１２２による検証は、高価な訂正機能付きメモリを導入することなく、安価に、メモリエラーに対してゲストＯＳ及びセキュアＶＭＭ５１６を防御することができる。
【０４２５】
本実施形態においては、非セキュアＯＳ５１８のデータが参照される場合には、検証が実行されない。検証されないデータは、内部メモリ８に読み込まれない。したがって、検証されないデータのサイズは、内部メモリ８のサイズより大きくてもよい。例えば、ゲストＯＳのメモリサイズが同じ場合、データのサイズを大きくすれば、ページテーブルツリー９及びセキュアページテーブルツリー１２１のサイズが小さくなり、内部メモリ８の利用効率を向上させることができ、情報処理装置５００の性能を向上させることができる。
【０４２６】
なお、上記の第４の条件で説明したように、セキュアＯＳ５１７に割り当てられたメモリであっても、外部との通信に用いられるハードウェアにマッピングされた領域からの入力、又は、他のＯＳとメモリ経由で行われる通信においては、外部から書き換えられたメモリ内容を読み込む必要がある。このような場合、検証は失敗してしまうため、検証を無視する設定を行う必要がある。つまり、セキュアＯＳ５１７においても、入出力処理に限定して当該ＯＳが正しく使うことを前提に、一部のメモリ領域を、上記の非セキュアＯＳ５１８の場合と同様の設定としてもよい。
【０４２７】
［第３の実施形態］
本実施形態においては、上記第２の実施形態に係るブート処理の変形例について説明する。
【０４２８】
情報処理装置５００の初回起動又は再インストール時に、セキュアブートローダ５０８ａは、ゲストＯＳのブートイメージを読み込み、外部メモリ７に互いに整合したデータ構造を持つページテーブルツリー９と検証子ツリー１０とを記憶し、内部メモリ８に互いに整合したデータ構造を持つセキュアページテーブルツリー１２１とセキュア検証子ツリー１２２とを記憶する。
【０４２９】
セキュアブートローダ５０８ａは、ゲストＯＳの実行は行わず、ページテーブルツリー９と検証子ツリー１０と、セキュアページテーブルツリー１２１とセキュア検証子ツリー１２２との生成が完了した時点で、処理を終了する。
【０４３０】
その後は、通常運用のセキュアＶＭＭ５１６が、ページテーブルツリー９と検証子ツリー１０と、セキュアページテーブルツリー１２１とセキュア検証子ツリー１２２と、ゲストＯＳイメージとを引き継いで、ゲストＯＳを制御する。
【０４３１】
ゲストＯＳブートイメージは、起動用のイメージであり、例えば、外部メモリ７に記憶されている。ゲストＯＳブートイメージは起動時にのみアクセスされ、ワード単位でアクセスされることがない。ゲストＯＳブートイメージは、外部デバイス５０３に記憶されていてもよい。
【０４３２】
（ページテーブルの初期化状態の管理）
本実施形態では、セキュアブートローダ５０８ａは、起動時のページテーブルツリー９及び検証子ツリー１０の生成状態を示す初期化状態情報（フラグ）を管理する。初期化状態情報は、例えば、ページテーブルに含まれるテーブルエントリの空き領域で管理されることが望ましい。
【０４３３】
セキュアブートローダ５０８ａ及びセキュアＶＭＭ５１６は、フラグを扱うことができる。したがって、既存のハードウェアであるＭＭＵ５０６は初期化状態情報を認識できなくてもよい。
【０４３４】
初期化状態情報は、利用可能又は利用不可のいずれかを示す。
【０４３５】
以下では、データB401-0-0-0〜B401-0-0-511，B401-0-1-0〜B401-0-1-511がゲストＯＳのブートイメージであるとして説明する。
【０４３６】
本実施形態では、ゲストＯＳごとに、ページテーブルツリー９及び検証子ツリー１０が生成されてもよい。
【０４３７】
セキュアブートローダ５０８ａは、ゲストＯＳのページテーブルツリー９及び検証子ツリー１０の記憶されている物理アドレスと、ゲストＯＳのアドレス領域とを取得する。また、セキュアブートローダ５０８ａは、ゲストＯＳの中間物理アドレスを取得する。
【０４３８】
セキュアブートローダ５０８ａは、ゲストＯＳのブートイメージをロードするために、最初のブートイメージB401-0-0-0を選択し、内部メモリ８に、ブートイメージB401-0-0-0のアドレス変換に必要なページテーブル及び検証子のメモリ領域を確保し、外部メモリ７のメモリ領域も確保する。セキュアブートローダ５０８ａは、子テーブルのテーブルエントリが生成された時点で、親テーブルのテーブルエントリに含まれる初期化状態情報に利用可能を設定する。
【０４３９】
図２０は、本実施形態に係る情報処理装置によるブート処理を例示するフローチャートである。以下で、この図２０の処理を、上記図１８の情報処理装置５００の構成を用いて説明する。
【０４４０】
ステップＺ２０１において、ヘッダ取得部５５４は、外部メモリ７から外部読込部５３２経由で、ブートイメージのヘッダを取得し、ブートイメージのヘッダに基づいて、ゲストＯＳのメモリ領域のサイズ及びブートイメージ署名情報を取得する。メモリ領域制御部５５６は、外部メモリ７におけるステージ２アドレス変換に必要なゲストＯＳのページテーブルツリー９及び検証子ツリー１０のメモリ領域を計算する。
【０４４１】
ステップＺ２０２において、メモリ領域制御部５５６は、セキュアＶＭＭ５１６によって管理される外部メモリ７に、計算によって得られたサイズのメモリ領域を確保する。
【０４４２】
ステップＺ２０３において、ページテーブル初期化部５５８は、部分読込部５５２及び外部読込部５３２経由で、外部メモリ７におけるアドレスEaddr(T401)に、最上位のテーブルブロックT401及び検証ブロックT402のメモリ領域を確保し、検証記憶部５３６におけるアドレスIaddr(T401)に、最上位のテーブルブロックT401及び検証ブロックT402のメモリ領域を確保し、検証記憶部５３６におけるメモリ領域のアドレスIaddr(T401)と外部メモリ７における未検証ページテーブルのアドレスEaddr(T401)との対応関係をセキュアＶＭＭ５１６の作業領域に記憶する。
【０４４３】
ステップＺ２０４において、ページテーブル初期化部５５８は、バッファ領域管理部５４７経由で、検証記憶部５３６に配置可能なサイズのテーブルブロックT401-0〜T401-3を選択し、選択されたテーブルブロックT401-0〜T401-3と、選択されたテーブルブロックT401-0〜T401-3に関連付けられる検証ブロックT402-0〜T402-3と、選択されたテーブルブロックT401-0〜T401-3を経由して参照される部分ブートイメージを選択する。
【０４４４】
ステップＳ２０５において、ページテーブル初期化部５５８は、バッファ領域管理部５４７経由で、選択されたテーブルブロックT401-0〜T401-3と、選択された検証ブロックT402-0〜T402-3と、選択された部分ブートイメージのメモリ領域を検証記憶部５３６に確保する。ページテーブル初期化部５５８は、参照関係更新部５４６経由で、検証記憶部５３６において、選択されたテーブルブロックT401-0〜T401-3を参照するテーブルブロックT401の各テーブルエントリE401-0〜E401-3を初期化する。
【０４４５】
ステップＳ２０６において、ページテーブル初期化部５５８は、参照関係更新部５４６経由で、各テーブルエントリE401-0〜E401-3の初期化状態情報に、利用不可を設定する。
【０４４６】
ブートローダ制御部５５３及び記憶領域管理部５３５は、部分ブートイメージB401-0-0-0のアドレス変換に必要なレベル２のページテーブルT401-0、レベル３のページテーブルT401-0-0を順次同様に外部メモリ７及び内部メモリ８で初期化する。
【０４４７】
ブートローダ制御部５５３及び記憶領域管理部５３５は、レベル２のページテーブルT401-0の初期化が完了すると、外部メモリ７において、このレベル２のページテーブルT401-0を参照するレベル１のページテーブルT401のテーブルエントリE401-0に、アドレスEaddr(T401-0)を書き込み、内部メモリ８において、アドレスIaddr(T401-0)を書き込む。レベル３のページテーブルT401-0-0とレベル２のページテーブルT401-0のテーブルエントリE401-0-0についても同様である。
【０４４８】
ページテーブル初期化部５５８は、これらの設定が完了すると、レジスタ５２６にアドレスIaddr(T401)を設定する。
【０４４９】
ステップＺ２０７において、部分読込部５５２の署名情報計算部５５５は、外部読込部５３２経由で、検証記憶部５３６のブートイメージ用バッファに、最初に検証する部分ブートイメージB401-0-0-0をロードし、ブートイメージのヘッダに含まれているブートイメージ署名情報に基づいて検証を行うためのハッシュ値（署名情報）を計算する。例えば、ハッシュ値は、セキュアＤＭＡコントローラ５１１によるデータ転送時と並行して、セキュアＤＭＡコントローラ５１１内蔵の暗号ハードウェアによって計算される。ハッシュ計算の中間データは、セキュアＤＭＡコントローラ５１１のレジスタに記憶される。このレジスタは、セキュアＶＭＭ５１６からのアクセスは許可されるが、他の構成要素からのアクセスは禁止される。例えば、署名情報計算部５５５は、検証記憶部５３６に、５１２キロバイト、１２８ページ分の部分ブートイメージ用のメモリ領域を用意し、署名計算用のハッシュ計算が完了した部分ブートイメージB401-0-0-0〜B401-0-0-127を記憶する。
【０４５０】
ステップＺ２０８において、検証用バッファ書出部５４８は、次の部分ブートイメージB401-0-0-128〜B401-0-0-255のハッシュ計算を行うため、部分ブートイメージB401-0-0-0〜B401-0-0-127を検証情報生成部５３１に送る。検証情報生成部５３１は、この部分ブートイメージB401-0-0-0〜B401-0-0-127を検証するための検証子M402-0-0-0〜M402-0-0-127を計算する。外部書出部５３４は、外部メモリ７の対応するメモリ領域に、部分ブートイメージB401-0-0-0〜B401-0-0-127を書き出す。バッファ領域管理部５４７は、検証記憶部５３６における部分ブートイメージB401-0-0-0〜B401-0-0-127のメモリ領域を解放する。これら部分ブートイメージB401-0-0-0〜B401-0-0-127の検証子M402-0-0-0〜M402-0-0-127の計算にも、セキュアＤＭＡコントローラ５１１が用いられる。
【０４５１】
ページテーブル初期化部５５８は、参照関係更新部５４６経由で、解放されたメモリ領域を参照するテーブルエントリの初期化状態情報に、利用可を設定する。
【０４５２】
セキュアブートローダ５０８ａは、部分ブートイメージB401-0-0-128〜B401-0-0-255のハッシュ計算、検証子の計算、書き出し、部分ブートイメージB401-0-0-256〜B401-0-0-383のハッシュ計算、検証子の計算、書き出し、部分ブートイメージB401-0-0-384〜B401-0-0-511のハッシュ計算、検証子の計算、書き出し、を繰り返し、テーブルブロックT401-0-0のテーブルエントリの全ての初期化状態情報に利用可を設定し、テーブルブロックT401-0-0の初期化が完了する。
【０４５３】
これにより、セキュアブートローダ５０８ａは、テーブルブロックT401-0-0の書き出し、検証ブロックT402-0-0の計算及び書き出しが可能である。セキュアブートローダ５０８ａは、テーブルブロックT401-0-0と検証ブロックT402-0-0とを書き出し、書き出し対象テーブルブロックT401-0-0の参照元であるテーブルブロックT401-0のテーブルエントリE401-0-0の初期化状態情報を利用可に設定する。
【０４５４】
上記の部分ブートイメージB401-0-0-0〜B401-0-0-511と同様の処理が、次の部分ブートイメージB401-0-1-0〜B401-0-1-511に対して実行される。具体的には、セキュアブートローダ５０８ａは、部分ブートイメージB401-0-1-0〜B401-0-1-511を参照するテーブルブロックT401-0-1、検証ブロックT402-0-1、部分ブートイメージB401-0-1-0〜B401-0-1-511のメモリ領域を確保し、上記と同様の処理として、部分ブートイメージB401-0-1-0〜B401-0-1-511の読み込み、ハッシュ計算、検証子計算、部分ブートイメージB401-0-1-0〜B401-0-1-511の書き出し、対応するテーブルエントリE401-0-1の初期化状態情報の設定を行う。
【０４５５】
上記の処理が終了すると、セキュアブートローダ５０８ａは、テーブルブロックT401-0-1の書き出し、検証ブロックT402-0-1の計算及び書き出しが可能である。
【０４５６】
ステップＺ２０９において、セキュアブートローダ５０８ａは、全ての部分ブートイメージに対して上記のステップＺ２０４〜Ｚ２０８の処理が実行されたか否か判断する。
【０４５７】
全ての部分ブートイメージに対して上記のステップＺ２０４〜Ｚ２０８が実行されていない場合には、処理はステップＺ２０４に移動する。このように、上記の処理を繰り返すことにより、セキュアブートローダ５０８ａは、全ての部分ブートイメージに対して、逐次的にハッシュ値の計算を行い、ブートイメージ全体に対する検証子の中間データを逐次的に更新し、最終的に上記のファイルヘッダの署名検証に必要なハッシュ値を生成する。多くの場合、単一のブートイメージ検証に用いられるハッシュ値は単一であり、ブートイメージに対するハッシュ値の計算は逐次的に行われる。もしブートイメージの署名のハッシュ値が予め部分ごとに分割して与えられている場合には、その分割にしたがって複数のハッシュ値を計算する。
【０４５８】
ステップＺ２１０において、署名検証部５５９は、ヘッダ取得部５５４から取得したブートイメージ署名情報と、計算された部分ブートイメージのハッシュ値とに基づいて署名検証を行う。
【０４５９】
署名検証の結果が成功を示す場合、ステップＺ２１１において、署名検証部５５９は、ルート検証情報を例えば鍵保存ユニット５１３などの安全な記憶装置に記憶し、ゲストＯＳが有効か否かを示す情報に、有効であることを設定する。外部メモリ７は、最上位までの全てのページテーブル及び検証子テーブルを記憶する。その後、セキュアブートローダ５０８ａは、終了する。
【０４６０】
署名検証の結果が失敗を示す場合、Ｚ２１２において、署名検証部５５９は、ルート検証情報１３を破棄し、ゲストＯＳが有効か否かを示す情報に無効であることを設定し、生成されたページテーブルツリー９及び検証子ツリー１０を無効とする。その後、セキュアブートローダ５０８ａは、処理を終了する。
【０４６１】
以上の処理によって外部メモリ８にロードされたブートイメージと、このブートイメージに対するアドレス変換に用いられるページテーブルツリー９と、ブートイメージ及びページテーブルツリーの検証のための検証子ツリー１０とは、外部メモリ７から読み込まれ、セキュアＶＭＭ５１６によって検証され、内部メモリ８に記憶される。これにより、ブートイメージを安全に実行し、ゲストＯＳのサービスを提供することができる。
【０４６２】
本実施形態においては、初期化状態情報を管理することにより、ゲストＯＳが将来利用可能なメモリ領域に対して未初期化の部分があっても、ゲストＯＳのサービスを開始することができ、情報処理装置５００の立ち上げを高速化できる。
【０４６３】
本実施形態において、セキュアブートローダ５０８ａは、プロセッサ５０１内のマスクＲＯＭ５０８に記憶されており、セキュアブートされ、内部メモリ８に記憶される。セキュアブートローダ５０８ａは、ゲストＯＳのブートイメージの改ざん防止のために、検証を行う。例えば、ブートイメージの署名情報は、ブートイメージ全体などのように大きなサイズに対して付されている。ゲストＯＳブートイメージのサイズは、一般に安全な内部メモリ８のサイズよりもはるかに大きい。このため、ゲストＯＳのブートイメージ全体を内部メモリ８に読み込み、ゲストＯＳのブートイメージの署名検証を行うことは物理的にできない。ゲストＯＳのブートイメージの署名計算のために、ゲストＯＳのブートイメージを分割して読み込む場合、既に署名計算を終えて外部メモリ７に記憶されている部分ブートイメージが改ざんされる場合がある。しかしながら、本実施形態においては、ゲストＯＳのブートイメージを部分的に読み込み、読み込み済みの部分ブートイメージに対してセキュアページテーブルツリー１２１及びセキュア検証子ツリー１２２を生成し、外部メモリ７のゲストＯＳのブートイメージのうち、読み込み済みの部分ブートイメージに対する改ざんを検出可能とする。これにより、内部メモリ８のサイズが限られている場合であっても、安全にゲストＯＳのブートイメージの署名検証を行うことができ、署名検証後のゲストＯＳのブートイメージの改ざんを防止することができる。さらに、ブート時の署名検証と、ページテーブルツリー９及び検証子ツリー１０の生成とを並行して行うことで、それぞれを単独に行う場合よりブート時間を短縮する。
【０４６４】
本実施形態においては、ページテーブルツリー９及び検証子ツリー１０のうちの一部が未初期化であっても、ゲストＯＳの処理を開始できる。すなわち、本実施形態においては、巨大なメモリ領域を割り当てられるゲストＯＳの起動において、割り当てられたメモリ領域のうち必要な部分の初期化とページテーブルツリー９及び検証子ツリー１０のうちの必要な部分の生成が完了していれば、ゲストＯＳを稼働することができ、さらに起動時間を短縮することができる。
【０４６５】
未初期化の部分は、ページテーブルが生成されていないが、この未初期化のページテーブルに対して最上位のテーブルエントリは利用不可を示す。この未初期化のページテーブルに対して最上位のテーブルエントリを含むページテーブル及びこのページテーブルより上位のページテーブルは、検証子によって保護可能である。このため、未初期化のページテーブルに対して最上位のテーブルエントリの状態を攻撃者が変更することはできない。したがって、本実施形態においては、未初期化のメモリ領域に不正データを挿入する攻撃を防御することができる。
【０４６６】
例えば、ゲストＯＳが、利用不可を示す初期化状態情報の設定されている中間物理アドレス領域を利用したい場合、ゲストＯＳは、セキュアＶＭＭ５１６に対して当該中間物理アドレス領域の初期化要求を明示的に発行するとしてもよい。この場合、初期化要求を受けたセキュアＶＭＭ５１６は、外部メモリ７及び内部メモリ８にメモリ領域を確保し、所定の初期値ゼロでデータを記憶するためのメモリ領域を初期化し、セキュアブートローダ５０８ａのブートイメージのロードと同様の処理により、ページテーブルツリー９及び検証子ツリー１０とを生成する。
【０４６７】
上記の本実施形態においては、外部メモリ７又は外部デバイス５０３に記憶されたブートイメージが、別のメモリ領域にコピーされる。しかしながら、外部メモリ７又は外部デバイス５０３に記憶されているブートイメージは、別のメモリ領域にコピーされることなく、そのままページ単位にゲストＯＳに割り当てられた中間物理アドレスにマッピングされてもよい。これにより、データコピーの処理を減らすことができる。この場合、データ参照処理は上記の処理と同様であるが、書き出し処理は、ページテーブルの書き出しを行わず、検証子のみを書き出せばよい。このデータコピーの省略により、ブート時間を短縮させることができる。
【０４６８】
本実施形態において、初期化状態情報を用いることにより、未初期化のメモリ領域に対する改ざんを防止することに加えて、ゲストＯＳ自身の不具合によって未初期化のメモリ領域からページテーブル又はデータが読み込まれることを防止することができる。例えば、ゲストＯＳ自身の不具合によって、初期化状態情報が利用不可を示すページテーブルに対して読み込みが行われた場合、セキュアＶＭＭ５１６がゲストＯＳにその旨を通知することで、不具合を検出することができる。
【０４６９】
情報処理装置５００は、ゲストＯＳのブートに先立ってメモリテストを実行してもよい。ゲストＯＳのブートに先立って、メモリテスト時に、ページテーブルツリー９及び検証子ツリー１０が生成されると、上記の不具合検出の効果は得られない。したがって、本実施形態において、メモリテスト時に、ページテーブルツリー９及び検証子ツリー１０の生成は実行されないとしてもよい。また、メモリテストが実行される場合においては、初期化状態情報に、メモリテスト完了かつゲストＯＳイメージのロードが未完了であることを示す情報を付加し、未初期化状態のページテーブル又はデータに対するアクセスを検出してもよい。
【０４７０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０４７１】
１…メモリ管理装置、２…外部入出力部、３…アドレス変換部、４…検証計算部、５…検証部、６…更新部、７…外部メモリ、８…内部メモリ、９…ページテーブルツリー、１０…検証子ツリー、１０１…親テーブル、２０１〜２０ｍ…子テーブル、３０１〜３０ｘ…データ、ｐｅ１〜ｐｅｍ…親エントリ、ｐｖ１〜ｐｖｍ…親検証子、ｃｅ１〜ｃｅｘ…子エントリ、ｃｖ１〜ｃｖｘ…子検証子、４０…置換管理部、４１…判定部、４２…初期化部、５０９ａ，５０９ｂ…アドレス変換キャッシュ、４５，５０７ａ〜５０７ｃ…キャッシュメモリ、４７…リプレイ攻撃防止情報、４８…キャッシュラインＭＡＣ値、１２１…セキュアページテーブルツリー、１２２…セキュア検証子ツリー、５０５…命令実行ユニット、５０６…ＭＭＵ、５１１…セキュアＤＭＡコントローラ、５１４…キャッシュ検証部、５１６…セキュアＶＭＭ、５１７…セキュアＯＳ、５１８…非セキュアＯＳ、５１３…鍵保存ユニット
【図１】
2016009884.tif 000003
【図２】
2016009884.tif 000004
【図３】
2016009884.tif 000005
【図４】
2016009884.tif 000006
【図５】
2016009884.tif 000007
【図６】
2016009884.tif 000008
【図７】
2016009884.tif 000009
【図８】
2016009884.tif 000010
【図９】
2016009884.tif 000011
【図１０】
2016009884.tif 000012
【図１１】
2016009884.tif 000013
【図１２】
2016009884.tif 000014
【図１３】
2016009884.tif 000015
【図１４】
2016009884.tif 000016
【図１５】
2016009884.tif 000017
【図１６】
2016009884.tif 000018
【図１７】
2016009884.tif 000019
【図１８】
2016009884.tif 000020
【図１９】
2016009884.tif 000021
【図２０】
2016009884.tif 000022