以下、図面を参照しながら本発明の各実施の形態について説明する。なお、以下の説明において、略又は実質的に同一の機能及び構成要素については、同一符号を付し、必要に応じて説明を行う。
[第1の実施形態]
本実施形態は、データの完全性を検証し、データの改ざんを防止するメモリ管理装置について説明する。
図1は、本実施形態に係るメモリ管理装置の構成を例示するブロック図である。メモリ管理装置1の各種の構成要素は、ハードウェアで実現されてもよく、プログラムによって制御されるプロセッサによって実現されてもよい。
メモリ管理装置1は、外部入出力部2、アドレス変換部3、検証計算部4、検証部5、更新部6、置換管理部20を備える。
また、メモリ管理装置1は、第1の記憶部である外部メモリ7と、第2の記憶部である内部メモリ8とに対して、読み込み及び書き込みを行う。
外部メモリ7は、例えば、不揮発性の記憶装置である。例えば、外部メモリ7は、NAND型フラッシュメモリ、NOR型フラッシュメモリ、MRAM(Magnetoresistive Random access memory:磁気抵抗メモリ)、PRAM(Phase change Random access memory:相変化メモリ)、ReRAM(Resistive Random access memory:抵抗変化型メモリ)、FeRAM(Ferroelectric Random Access Memory)などの不揮発性半導体メモリでもよい。外部メモリ7は、主記憶装置として用いられてもよく、ハードディスク、SSD(Solid State Drive)などのような補助記憶装置として用いられてもよい。
外部メモリ7は、階層構造を持つページテーブルツリー9と、階層構造を持つ検証子ツリー10とを記憶する。本実施形態において、ページテーブルツリー9と検証子ツリー10とは、2段の階層を持つ。しかしながら、ページテーブルツリー9と検証子ツリー10とは当然に3段以上でもよい。
ページテーブルツリー9は、複数のページテーブルの階層構成で形成される。ページテーブルツリー9は、仮想アドレスを物理アドレスに変換するための親テーブル101及び子テーブル201〜20mを含む。テーブルエントリEがアドレス情報Xを備えており、アドレス情報Xが最終のデータDのアクセス先を決定するための中間のテーブルT又はデータDを指している場合、テーブルエントリEは、テーブルT又はデータDを参照しているという。テーブルエントリEの参照先アドレスは、アドレス情報Xである。テーブルT又はデータDの参照元は、テーブルエントリEである。親テーブル101に含まれる親エントリpe1〜pemは、子テーブル201〜20mを参照するために用いられる。子テーブル201〜20mに含まれる子エントリce1〜cexは、データ301〜30xを参照するために用いられる。
本実施形態では、典型的な例として、ページテーブルツリー9において、親テーブル101の親エントリpe1、子テーブル201の子エントリce1を経由して、データ301がアクセスされる場合を説明する。しかしながら、他の親テーブル、他の親エントリ、他の子テーブル、他の子エントリを経由して他のデータがアクセスされる場合も同様である。
検証子ツリー10は、親検証子pv1〜pvm及び子検証子cv1〜cvxを含む階層構造を持つ。親検証子pv1〜pvmは、親テーブル101に関連付けられる。子検証子cv1〜cvnは、子テーブル201に関連付けられる。他の子検証子と他の子テーブルとの関係についても、子検証子cv1〜cvnと子テーブル201との関係と同様である。
本実施形態において、子テーブル201と関連付けられている子検証子cv1〜cvnは、それぞれ、子テーブル201に含まれている子エントリce1〜cenによって参照されるデータ301〜30nに対する検証に用いられる。
親テーブル101と関連付けられている親検証子pv1は、親テーブル201に含まれている親エントリpe1によって参照される子テーブル201と、子テーブル201と関連付けられている子検証子cv1〜cvnとに対する検証に用いられる。他の親検証子と他の子テーブル及び他の子検証子との関係についても、親検証子pv1と子テーブル201及び子検証子cv1〜cvnとの関係と同様である。
内部メモリ8は、外部から直接参照不可能な記憶装置であり、不正なアクセスから防御される。例えば、内部メモリ8は、プロセッサパッケージ内部の記憶装置である。具体的には、内部メモリ8は、例えば、下記の第2の実施形態で説明される図2で、プロセッサ66のパッケージと一体化したハードウェアであり、内部バス54bを経由して外部バス44との間でデータ転送が行われるが、データ転送はプロセッサ66の命令実行ユニット45で実行された命令に基づいて行われる。内部メモリ8の内容は、外部バス44を経由して直接読み出し及び書き換えることはできないことを前提とする。このような内部メモリ8と同様の特徴を持つメモリを、安全なメモリと呼ぶ。これとは逆に、外部メモリ7は、外部バス44を経由して任意のアドレスに対して読み出し及び書き換えが可能であり、安全なメモリとは異なる。
内部メモリ8は、外部メモリ7と同じ物理アドレス空間に配置される。内部メモリ8は、命令実行ユニット45で実行されるソフトウェアから外部メモリ7と同様にアクセス可能である。
内部メモリ8は、ページテーブルツリー9の一部であるセキュアページテーブルツリー121、検証子ツリー10のうちの一部であるセキュア検証子ツリー122を記憶する。内部メモリ8は、親テーブル101と親検証子pv1〜pvmとの検証に用いられるルート検証情報13を備える。
アドレス変換部3は、内部メモリ8に記憶されている親テーブル101の親エントリpe1〜pem及び子テーブル201〜20mの子エントリce1〜cexを経由してデータ301〜30xの物理アドレスを求める。
外部メモリ7から内部メモリ8へ親テーブル101がコピー(移動又は読み込み)される場合には、この親テーブル101に関連付けられている親検証子pv1〜pvmも、外部メモリ7から内部メモリ8へコピーされる。
本実施形態において、ページテーブル又はデータは、外部メモリ7から、改ざんに対して安全な内部メモリ8にコピーされ、検証される。内部メモリ8のページテーブル又はデータが変更され、その後内部メモリ8から削除される場合には、変更された内部メモリ8のページテーブル又はデータは、外部メモリ7に書き出される。内部メモリ8のページテーブル又はデータが変更されることなく内部メモリ8から削除される場合には、内部メモリ8のページテーブル又はデータは、書き出されてもよく又はそのまま破棄されもよい。以下において、外部メモリ7と内部メモリ8との間でのページテーブル又はデータのコピーを、ページテーブル又はデータを移動する、読み込む、又は書き出す、と表現する場合がある。例えば、ページテーブルの参照先が内部メモリ8にコピーされたページテーブル又はデータに変更されることを、ページテーブル又はデータの移動又は読み込み、と表現する場合がある。この場合に、外部メモリ7のコピー元のページテーブル又はデータは、消去されなくてもよい。
外部メモリ7から内部メモリ8へ子テーブル201がコピーされる場合には、この子テーブル201に関連付けられている子検証子cv1〜cvnも、外部メモリ7から内部メモリ8へコピーされる。
外部入出力部2は、外部メモリ7に記憶されているページテーブルツリー9と検証子ツリー10とに対する読み込み及び書き込みを行う。
第1に、外部メモリ7から内部メモリ8へ子テーブル201及び子検証子cv1〜cvnがコピーされる場合の例を説明する。
アドレス変換部3は、内部メモリ8に記憶されているセキュアページテーブルツリー121に基づいて、仮想アドレスを物理アドレスに変換する。また、アドレス変換部3は、仮想アドレスを物理アドレスに変換するために必要な子テーブル201がセキュアページテーブルツリー121に含まれていない場合に、テーブル不足通知(フォールト)14を検証計算部4に送り、更新された後のセキュアページテーブルツリー121に基づいて、仮想アドレスを物理アドレスに変換する。
検証計算部4は、テーブル不足通知14をアドレス変換部3から受けた場合に、外部入出力部2経由で、外部メモリ7のページテーブルツリー9の子テーブル201と検証子ツリー10の子検証子cv1〜cvnとを読み込み、読み込まれた子テーブル201と子検証子cv1〜cvnとに基づいて検証情報15を計算し、検証情報15を検証部5に送る。
検証部5は、検証計算部4によって計算された検証情報15と、セキュアページテーブルツリー121において参照元エントリpe1を含んでいる親テーブル101に関連付けられている親検証子pv1とに基づいて、検証情報15と親検証子pv1とが整合するか否か判断し、検証を行い、検証結果16を更新部6に送る。
更新部6は、検証部5から検証結果16を受け、検証結果16が正当の場合、内部メモリ8のセキュアページテーブルツリー121に子テーブル201を組み込み、セキュア検証子ツリー122に子検証子cv1〜cvnを組み込む。より具体的には、更新前に、親テーブル101の親エントリpe1は、外部メモリ7のページテーブルツリー9に含まれている子テーブル201を参照しているとする。更新部6は、セキュアページテーブルツリー121における更新前の親テーブル101の親エントリpe1を、内部メモリ8におけるセキュアページテーブルツリー121に組み込まれた子テーブル201を参照するように、更新する。
本実施形態に係るメモリ管理装置1では、例えば、検証結果16の確認に先立って、外部入出力部2が、内部メモリ8に子テーブル201及び子検証子cv1〜cvnを読み込み、検証結果16が正当な場合に、セキュアページテーブルツリー121及びセキュア検証子ツリー122に、子テーブル201及び子検証子cv1〜cvを組み込むとしてもよい。
このように、本実施形態において、子テーブル201が内部メモリ8に記憶されておらず、外部メモリ7から内部メモリ8へ子テーブル201及び子検証子cv1〜cvnがコピーされる場合には、親テーブル101の親エントリpe1は、外部メモリ7の子テーブル201を参照する。子テーブル201が内部メモリ8に記憶された場合には、内部メモリ8の親テーブル101の親エントリpe1は、内部メモリ8の子テーブル201を参照するように更新される。
本実施形態において、親テーブル101が内部メモリ8に記憶されておらず、外部メモリ7から内部メモリ8へ親テーブル101及び親検証子pv1〜pvnがコピーされる場合には、検証計算部4は、外部メモリ7から読み込まれた親テーブル101、親検証子pv1〜pvn、外部メモリ7の親テーブル101の記憶されている物理アドレスに基づいて検証情報を生成する。外部メモリ7における親テーブル101の物理アドレスを用いて検証情報を生成することにより、親テーブル101の入れ替え攻撃に対して防御することができる。検証部5は、ルート検証情報13と生成された検証情報に基づいて検証を行う。更新部6は、検証結果が正当の場合に、セキュアページテーブルツリー121に、外部メモリ7から読み込まれた親テーブル101を組み込み、セキュア検証子ツリー122に、外部メモリ7から読み込まれた親検証子pv1〜pvnを組み込む。
第2に、外部メモリ7から内部メモリ8へデータ301がコピーされる場合の例を説明する。
アドレス変換部3は、仮想アドレスを変換した物理アドレスが外部メモリ7を参照している場合に、データ読み込み通知17を検証計算部4及び置換管理部20に送る。
例えば、アドレス変換部3は、データ参照先が外部メモリ7か否かを判断することなく、参照データの内部メモリ8への読み込み状態を予めページテーブル内の有効/無効フラグにより管理し、データ参照先の判断を高速化してもよい。内部メモリ8に記憶されているデータを参照するセキュアページテーブルツリー121のテーブルエントリには、有効フラグがセットされる。外部メモリ7に記憶されているデータを参照するセキュアページテーブルツリー121のテーブルエントリには、無効フラグがセットされる。アドレス変換部3は、アドレス変換のページフォールトが発生した場合に、外部メモリ7のページテーブル又はデータを、内部メモリ8にコピーする。アドレス変換部3は、参照されるデータが内部メモリ8に記憶されている場合、ページフォールトを発生することなく、高速にデータを参照することができる。
検証計算部4は、データ読み込み通知17をアドレス変換部3から受けた場合に、外部入出力部2経由で物理アドレスによって参照される外部メモリ7のデータ301を読み込み、読み込まれたデータ301、外部メモリ7のデータ301の記憶されている物理アドレスに基づいてデータ検証情報18を計算し、データ検証情報18を検証部5に送る。外部メモリ7におけるデータの物理アドレスを用いてデータ検証情報18を生成することにより、データ301の入れ替え攻撃に対して防御することができる。
検証部5は、検証計算部4によって計算されたデータ検証情報18と、セキュアページテーブルツリー121において参照元の子テーブル201に関連付けられている子検証子cv1とに基づいて、データ検証情報18と子検証子cv1とが整合するか否か判断するデータ検証を行い、データ検証結果19を更新部6に送る。
更新部6は、検証部5からデータ検証結果19を受け、データ検証結果19が正当の場合、内部メモリ8のセキュアページテーブルツリー121に、データ301を組み込む。より具体的には、更新前に、子テーブル201の子エントリce1は、外部メモリ7のページテーブルツリー9に含まれているデータ301を参照しているとする。更新部6は、セキュアページテーブルツリー121における更新前の子テーブル201の子エントリce1を、内部メモリ8におけるデータ301を参照するように更新する。
本実施形態に係るメモリ管理装置1では、例えば、データ検証結果19の確認に先立って、外部入出力部2が、内部メモリ8にデータ301を読み込んでおき、データ検証結果19が正当な場合に、セキュアページテーブルツリー121に、データ301を組み込むとしてもよい。
このように、本実施形態において、データ301が内部メモリ8に記憶されておらず、外部メモリ7から内部メモリ8へデータ301がコピーされる場合には、子テーブル201の子エントリce1は、外部メモリ7のデータ301を参照する。データ301が内部メモリ8に記憶された場合には、内部メモリ8の子テーブル201の子エントリce1は、内部メモリ8のデータ301を参照するように更新される。
仮想アドレスは、親テーブル101の親エントリpe1、子テーブル201の子エントリce1を経由してデータ301の物理アドレスに変換される。参照されるデータ301は、物理アドレスの示す安全な内部メモリ8に記憶されている。このようなアドレス解決により参照される全てのテーブルとデータは、検証で正当と判断されており、安全な内部メモリ8に配置されている。
第3に、内部メモリ8から外部メモリ7へデータ301がコピー(書き出し)される場合の例を説明する。
検証計算部4は、内部メモリ8に記憶されているデータ301を外部メモリ7に記憶する場合に、内部メモリ8のデータ301に基づいて子検証子(データ検証情報)cv1を計算する。
外部入出力部2は、データ301を外部メモリ7に記憶する。
更新部6は、セキュアページテーブルツリー121における子テーブル201の子エントリ(物理アドレス)ce1の参照先を、外部メモリ7におけるデータ301の記憶位置に更新する。さらに、更新部6は、検証計算部4によって計算された子検証子cv1を、セキュアページテーブルツリー121における子テーブル201に関連付けてセキュア検証子ツリー122に組み込む。例えば、更新部6は、内部メモリ8のデータ301がセキュアページテーブルツリー121から参照されていない場合に、子テーブル201の子エントリce1を無効状態とする。次に、データ301が参照されたときはページフォールトが発生し、上記の処理にしたがって外部メモリ7のデータ301の検証と内部メモリ8へのコピーが行われる。
本実施形態において、更新部6は、セキュアページテーブルツリー121が子テーブル201を含まない場合に、親テーブル101の親エントリpe1を無効状態とし、セキュアページテーブルツリー121が子テーブル201を組み込んだ場合に、親テーブル101の親エントリpe1を有効状態とする。
更新部6は、内部メモリ8がデータ301を記憶していない場合に、子テーブル201の子エントリce1を無効状態とし、内部メモリ8がデータ301を記憶している場合に、子テーブル201の子エントリce1を有効状態とする。
上記第1及び第2の例において、置換管理部20は、例えばアドレス変換部3からデータ読み込み通知17を受けた場合などのように、内部メモリ8にテーブル又はデータが記憶される場合に、内部メモリ8の空き領域の容量を確認する。置換管理部20は、内部メモリ8の空き領域の容量が不足する場合に、削除するために選択された内部メモリ8のテーブル又はデータに対する検証情報要求21を検証計算部4に送る。置換管理部20は、検証計算部4から、検証情報要求21の応答として、内部メモリ8の選択されたテーブル又はデータに対する検証子を受ける。そして、置換管理部20は、内部メモリ8の選択されたテーブル又はデータ及びその検証子を、外部入出力部2経由で外部メモリ7に書き出し、内部メモリ8における選択されたテーブル又はデータの領域を解放し、内部メモリ8の空き領域を増やす。
以上説明した本実施形態においては、外部メモリ7に記憶されたページテーブルツリー9、検証子ツリー10、データ301〜30xのうちの必要な部分を選択的に検証することができ、検証された必要な部分を外部メモリ7よりも小容量の内部メモリ8に記憶することができる。これにより、外部メモリ7に対する物理攻撃を検出することができ、データの完全性を検証し、データの改ざんを防止することができる。本実施形態においては、改ざん検証後にページテーブルツリー9、検証子ツリー10及びデータ301〜30xが改ざんされたことを検出することができ、情報処理装置の安全性を向上させることができる。
本実施形態に係る検証は、仮想化技術に対して適用され、内部メモリ8に記憶されたセキュアページテーブルツリー121、セキュア検証子ツリー122を参照することにより、ゲストOS(Operating System)及びアプリケーションを変更することなく容易に適用することができる。
本実施形態においては、ページテーブルと検証子との階層構造が合致しており、さらに、ページテーブルと検証子とが一体で検証される。換言すれば、ページテーブルツリー9と検証子ツリー10とは同じグラフ構造を持つ。これにより、検証子がページング対象の場合であっても、検証子の配置先アドレスを解決する必要がない。また、ページテーブルと検証子とを階層構造で管理する。したがって、セキュアページテーブルツリー121、セキュア検証子ツリー122、ページテーブルツリー9、検証子ツリー10をアドレス空間の不連続なメモリ領域に配置することができ、メモリを効率的に利用することができる。本実施形態においては、検証子を階層構造で管理することにより、効率的に管理することができる。
本実施形態においては、未検証のページテーブル及びデータが、既存のアドレス変換機構のページフォールトにより検出される。このため、新たなハードウェアを加える必要がない。さらに、本実施形態においては、外部メモリ7と内部メモリ8との間で、ページテーブルと検証子とが個別ではなく一体でコピーされる。したがって、ページフォールトが発生した場合であってもオーバーヘッドが増加することを抑制することができる。
本実施形態においては、ページテーブル及びデータが内部メモリ8に記憶されているか否かを、上位のページテーブルのエントリが有効か無効かで管理する。これにより、汎用のハードウェアであるアドレス変換機構を利用して効率よく、ページテーブル及びデータが内部メモリ8に記憶されているか否かを判断することができる。
[第2の実施形態]
本実施形態においては、上記第1の実施形態で説明したメモリ管理装置1を備える情報処理装置を詳細に説明する。情報処理装置は、コンピュータシステムでもよい。
図2は、本実施形態に係る情報処理装置を例示するハードウェア構成図である。
情報処理装置65は、プロセッサ66、外部メモリ7、外部デバイス43、外部バス44を備える。プロセッサ66、外部メモリ7、外部デバイス43は、外部バス44を介して、データ、信号、命令を互いに送受信可能とする。
情報処理装置65の仮想化支援機構は、例えば、2ステージのアドレス変換を実行する。
プロセッサ66は、命令実行ユニット(プロセッサコア)45、MMU(Memory Management Unit)46、1次キャッシュメモリ47a,47b、2次キャッシュメモリ48、1次アドレス変換キャッシュ(TLB:Translation Lookaside Buffer)49、2次アドレス変換キャッシュ50、内部メモリ8、セキュアDMA(Direct Memory Access)コントローラ52、入出力デバイス53、鍵保存ユニット67、内部バス54a,54bを備える。プロセッサ66の各種の構成要素8,45〜53,67は、内部バス54a,54bを介して、データ、信号、命令を互いに送受信可能とする。
外部メモリ7は、セキュアVMM(Virtual Machine Monitor)68、セキュアOS56、非セキュアOS57を記憶する。
本実施形態において、セキュアOS56、非セキュアOS57は、セキュアVMM68によって管理されるゲストOSとする。
外部デバイス43は、例えばハードディスクなどのような不揮発性記憶装置である。
プロセッサ66の命令実行ユニット45は、階層化された1次キャッシュメモリ47a,47b、2次キャッシュメモリ48を用いてデータ参照を行う。以下では、まず、アドレス変換の後に行われるデータ参照について説明し、次に、アドレス変換について説明する。
1次キャッシュメモリ47aは、データ用の1次キャッシュメモリである。1次キャッシュメモリ47bは、データ及び命令用の1次キャッシュメモリである。2次キャッシュメモリ48は、データ及び命令用の2次統合キャッシュメモリである。
命令実行ユニット45は、2次キャッシュメモリ48に記憶されているデータ又は命令を、内部メモリ8又は外部メモリ7に記憶されているデータ又は命令よりも高速に参照可能である。また、命令実行ユニット45は、1次キャッシュメモリ47a,47bを、2次キャッシュメモリ48よりも高速にアクセス可能である。
命令実行ユニット45は、1次キャッシュメモリ47a,47b、2次キャッシュメモリ48又は内部メモリ8からデータ又は命令を読み込み、処理を実行する。
1次キャッシュメモリ47a,47bが参照対象データを記憶している場合には、2次キャッシュメモリ48、及び、内部メモリ8へのデータ参照は実行されない。
キャッシュメモリ47a,47bが参照対象データを記憶しておらず、2次キャッシュメモリ48が参照対象データを記憶している場合には、内部メモリ8へのデータ参照は実行されない。これにより、データ参照が短時間で行われる。
なお、内部メモリ8から読み込まれるデータは、内部メモリ8から、2次キャッシュメモリ48を経由することなく、1次キャッシュメモリ47a,47bに記憶されてもよい。
鍵保存ユニット67は、ルート検証情報13と、情報処理装置65における暗号化又は検証に使用される鍵情報とを記憶する。
セキュアDMAコントローラ52は、各種の構成要素間のデータ転送を行う。セキュアDMAコントローラ52は、例えば、ハードウェアによって実装され、MAC値計算を実行する。しかしながら、MAC値計算は、ソフトウェアで実行されてもよい。
情報処理装置65は、仮想記憶管理とメモリ検証処理とを連携させる。本実施形態では、主記憶装置に不揮発性半導体メモリを使用する。本実施形態では、階層構造を持つページテーブルツリー9と階層構造を持つ検証子ツリー10とを生成する。ページテーブルツリー9と検証子ツリー10とは、互いに階層構造が整合する。ページテーブルツリー9と検証子ツリー10とは、不揮発性の外部メモリ7に保存され、必要に応じて一部が内部メモリ8に記憶される。外部メモリ7は不揮発性の記憶装置であるため、電源がOFFされ、その後に電源がONされた場合に、電源OFF前の記憶状態を維持する。
例えば、CPU(Central Processing Unit)、MPU(Micro-Processing Unit)などのようなプロセッサのパッケージと主記憶装置とを一体化した一体型ハードウェアでは、上述したようなデータの窃視・改ざん、及び、物理的攻撃が困難である。しかしながら、一体型ハードウェアは一般に高価であるため、汎用プロセッサパッケージと汎用メモリとの組み合わせで、安全な処理を可能にする技術が求められる。
本実施形態においては、プロセッサ66のパッケージ内部に設けられた内部メモリ8は、ハードウェア的な攻撃から安全であると仮定する。ただし、不正なソフトウェアを実行させることで、内部メモリ8からデータを出力させる攻撃は可能であると仮定する。情報処理装置65への攻撃者は、任意のタイミングで外部メモリ7の任意の位置を自由に書き換えることができると仮定する。
本実施形態において、データ改ざんから保護されるメモリ領域、及び、暗号化されるメモリ領域を、保護メモリと呼ぶ。
情報処理装置65の主記憶装置に対する攻撃を防ぎ、脅威を取り除くために、安全性とシステム構成との観点から、以下の第1乃至第5の条件を満たすことが要求される。
第1の条件は、安全性に関する条件である。第1の条件では、リプレイ攻撃を含むデータの改ざんを厳密に検出可能であることが要求される。
第2の条件は、ハードウェア構成に関する条件である。第2の条件は、専用のハードウェアが不要であることを要求する。より具体的に説明すると、第2の条件は、メモリ改ざん検証専用のハードウェアが不要であることを要求する。第2の条件は、多数のプロセッサが備えるアドレス変換機構、仮想化支援機構、プロセッサ内の汎用内部メモリ、高速化補助機構、DMAコントローラと連携した高速暗号エンジンに基づいて、攻撃を防ぎ、脅威を取り除くことを要求する。また、第2の条件は、ファームウェアなどのソフトウェアに基づく処理が可能であることを要求する。さらに、第2の条件は、仮想化技術との親和性が高いことを要求する。第2の条件は、安全な内部メモリ8のメモリサイズが1メガバイト程度のように小さくても動作可能であることを要求する。
第3の条件は、メモリに関する条件である。第3の条件は、大容量のメモリ、例えば32ビットのアドレス空間もしくはそれを越えるサイズのメモリに適用可能であることを要求する。第3の条件は、メモリの検証対象領域が選択可能なことを要求する。第3の条件は、保護対象のメモリ領域をメモリマップ上でいくつもの不連続な領域に配置可能であり、メモリの必要な部分だけを選択的に改ざん検証の対象にできることを要求する。第3の条件は、メモリのうち選択的に改ざん検証対象に定められた選択領域を定義するデータそのものも、攻撃から保護可能であることを要求する。第3の条件は、保護対象のメモリ領域の配置が不連続の場合であっても、選択領域だけを検証可能なことに加えて、選択領域を除く他の領域に対して検証子用のメモリ領域の確保を不要とし、メモリを効率的に利用可能なことを要求する。
第4の条件は、ソフトウェア構成と安全性とに関する条件である。第4の条件は、OS全体を保護対象とすることができることを要求する。第4の条件は、改ざん検証が不要な外部との通信用ハードウェアなどは改ざん検証対象とせず非選択領域とすることができることを要求する。第4の条件は、透過性を有すること、換言すれば、OS及びアプリケーションを修正する必要がないことを要求する。第4の条件は、OSに不具合があって不正な命令が実行された場合に、当該OS自身が破壊され誤動作することは許容してもその誤動作によってメモリ改ざん検証機能が検証の迂回又は制御情報の破壊に対して安全であり頑健であることを要求する。
第5の条件は、処理の効率性に関する条件である。第5の条件は、例えばメモリアクセスごとの改ざん検証の要・不要の判定などのような頻繁に発生する処理はできる限りハードウェアにより実行することで効率化することを要求する。
本実施形態においては、不揮発性の主記憶装置が適用されることを想定し、セキュア検証子ツリー122に基づく検証を行い、セキュアページテーブルツリー121に基づいて多段階のアドレス変換を行い、仮想化技術を想定し、上記の第1乃至第5の条件を満たす情報処理装置65を実現する。
本実施形態には、主要なポイントが2つある。まず、本実施形態の第1のポイントを説明する。
第1のポイントは、アドレス透過性の担保、未検証データ参照の検出機能の提供に関する。具体的には、ゲストOSによるデータ参照が発生した場合に、まずセキュアVMM68がページテーブルエントリを確認し、内部メモリ8を経由した検証が必要な場合に、外部メモリ7のデータを内部メモリ8に動的に確保されているバッファメモリに記憶する。
内部メモリ8を経由した検証に成功した場合に、ゲストOSのデータ参照先の実態である物理メモリのデータが、本来の外部メモリ7のデータから、内部メモリ8の配置先アドレスのデータに代わるように、セキュアVMM68が、管理されているセキュアページテーブルツリー121(例えばステージ2ページテーブルツリー)を書き換える。
ゲストOSは、参照先の変更を認識する必要がない。このため、本実施形態に係る検証を導入してもゲストOSを変更する必要はなく、ゲストOSの透過性を得ることができる。
なお、内部メモリ8の書き込み単位はページだが、書き込み単位を小さくしてキャッシュメモリを含むプロセッサ66全体のメモリ利用効率を向上させるために、外部メモリ7から、1次キャッシュメモリ47a,47b、2次キャッシュメモリ48を経由して、命令実行ユニット45がデータを取得する場合には、ページテーブルエントリの参照先を変更することなく、外部メモリ7から1次キャッシュメモリ47a,47b、2次キャッシュメモリ48へデータがコピーされる際に、検証が行われてもよい。この場合、キャッシュメモリからの読み込みと検証処理とを連動させるハードウェア機構が必要となる。
改ざん防止には、外部メモリ7への参照の検出と、検証の実行と、そして検証済みデータの安全な内部メモリ8へのコピー(読み込み)と、参照先の変更とが必要である。ハードウェアキャッシュが用いられる場合には、2次キャッシュメモリ48への読み込みに対応する参照先変更がソフトウェアの介在なしに専用ハードウェア機構によって行われるため、ゲストOSに対するアドレス透過性が保証される。これに対して、ファームウェアによる検証では、検証済みデータの配置先は元のデータのアドレスと異なるため、ゲストOSから何らかの方法で参照先の変更を隠ぺいしなければ、ゲストOSの変更が必要となり、ゲストOSに対するアドレス透過性が担保されない。
本実施形態は、検証済みデータを改ざんなどの攻撃から守り、かつ、内部メモリ8へのコピーをゲストOSから隠蔽するために、2段階のアドレス変換を行う仮想化支援機構を利用し、外部メモリ7から内部メモリ8へのデータ読み込み後にセキュアページテーブルツリー121のデータ参照先を変更することで、ゲストOSに対するアドレス透過性を実現する。
さらに、本実施形態では、未検証データの参照を検出する。このために、本実施形態では、初期状態においてセキュアページテーブルツリー121のエントリを「無効」としておき、ページテーブル又はデータの検証と読み込みに成功した場合にセキュアページテーブルツリー121のエントリを「有効」とする。これにより、未読み込みのページテーブル又はデータの検出を、汎用のハードウェアであるアドレス変換機構を利用して効率よく行うことができる。
次に、本実施形態の第2のポイントを説明する。
第2のポイントは、セキュアページテーブルツリー121とセキュア検証子ツリー122の階層構成とを整合させることに関する。本実施形態では、大規模データの検証を可能にするために、外部メモリ7から内部メモリ8への読み込み状態を管理する。本実施形態では、透過的な改ざん検証をファームウェアの処理で実現するために、アドレス変換機構を活用する。もし、アドレス変換機構の動作が妨害され、例えば内部メモリ8が参照されるべきであるにもかかわらず外部メモリ7が参照された場合などのように、不正操作が行われた場合、上記の検証と読み込みデータの保護は正しく機能しない。したがって、本実施形態では、アドレス変換機構の動作を攻撃から守る。
アドレス変換機構は、ページテーブルを参照し、アドレス変換を行う。ページテーブルは、内部メモリ8に配置されており、仮想アドレスを物理アドレスに変換するための定義情報である。アドレス空間が広くなると、ページテーブルを記憶するために必要なサイズも大きくなる。例えば、1つのページテーブルの全アドレス空間を単純に記憶するには、1テラバイトのメモリを保護することを前提とすると、2ギガバイトのサイズが必要になる。このように単純にページテーブルのアドレス空間を物理メモリに固定的に確保することは、情報処理装置にとって大きな負担となる。このため、ページテーブルのアドレス空間を小さくする2つの方法がある。第1の方法は、ページテーブルを階層化し、内部メモリ8の階層的なページテーブルを参照し、ページテーブル自体をページングの対象とする。第2の方法は、第1の方法における階層化と関連する。この第2の方法は、内部メモリ8のメモリ空間の中で参照が不要な部分のテーブル定義状態を未定義のままとし、不連続なメモリ空間定義を許可することでテーブル量を削減する。
アドレス変換機構は、多くのプロセッサに備えられる汎用的な機構である。しかしながら、ページテーブルのページング又は未定義状態を無制限に許すことは、ページング時に正当なページテーブル又はデータを不当なページテーブル又はデータにすり替える、又は、定義されたページテーブル又はデータを一度未定義に書き換えた後に再度初期化する、などの攻撃を引き起こす可能性がある。特に、不揮発性メモリシステムでは、内部メモリ8ではない他の全てのメモリのデータが改ざんされる可能性がある。よって、MMUによって参照されるページテーブル又はデータは、すべて検証された後に内部メモリ8に配置される必要がある。上述のように、ページテーブルのデータサイズは大きい。プロセッサの内部メモリ8は、例えば、数百キロバイト〜数十メガバイト程度である。したがって、ページテーブルに対する検証を伴うページング処理が必要となる。ページテーブルを階層化すると、どのレベルのテーブルまで検証と読み込みが完了しているかに関する状態管理、及び、各テーブルの参照頻度に応じた状態管理が必要となる。
さらに、ページテーブル又はデータに対する検証処理も、限られた容量の内部メモリ8を作業領域として完結する必要がある。単純な検証の方法として、データに対する検証子とは別に、ページテーブル専用の検証子を設ける方法が考えられる。しかしながら、階層的なページテーブルはメモリ上の参照関係によって定義されており、必ずしも連続したアドレス領域にマップされていない。例えば、ページテーブルの第1のエントリがアドレス空間上の最下位番地に配置され、第2のエントリが最上位番地に配置され、第1のエントリと第2のエントリとが参照関係を持つことが、仕様上可能である。このような不連続なページテーブルに対して、連続したアドレス領域に記憶される検証子を適用することは、非効率的である。加えて、検証子も、ページテーブルと同様に階層的な構成を持つ場合、検証子のどの段階まで検証が完了しているか認識し、かつ、検証子の検証済みの部分を再利用するための状態管理を行う必要がある。
そこで、本実施形態では、第2のポイントとして、ページテーブルの階層構成と検証子の階層構成とを整合させている。ページテーブルの階層構成と検証子の階層構成とを整合させ、ページテーブルと検証子とが他の検証子によって保護される。本実施形態では、ページテーブルと検証子とで整合した階層構成を持つことで、ページテーブルと検証子との読み込み状態及び検証状態の管理を共通化し、階層構造のデータ管理の処理負荷を軽減する。そして、情報処理装置65は、広大かつ不連続に定義されたアドレス領域に対して、効率よく検証子を割り当て、安全に管理する。
例えば、1ページテーブルに512個のエントリを格納する3階層のセキュアページテーブルツリー121は、グラフとしては、3階層の512分木のグラフである。このようなセキュアページテーブルツリー121に対するセキュア検証子ツリー122は、セキュアページテーブルツリー121と同様に、3階層の512分木のグラフとし、両者の構造を整合させる。これにより、セキュアページテーブルツリー121とセキュア検証子ツリー122の読み込み状態及び検証状態の管理単位が整合する。
外部メモリ7から内部メモリ8へ未読み込みのページテーブル又はデータに対する参照と未読み込みの検証子に対する参照との検出がそれぞれ個別に行われた場合、VMMによる処理では、ページテーブル又はデータ、及び検証子に対する参照が発生するたびにゲストOSからVMMへの切り替えが発生し、切り替えのオーバーヘッドが大きくなる。本実施形態では、ページテーブルと検証子との階層構成を一致させ、未読み込みのページテーブル及び未読み込みの検証子の2種類の制御データに対する参照の検出を同時に行う。これにより、ゲストOSからセキュアVMM68への切り替え回数を低減させ、さらに処理負荷を軽減させることができる。
(2ステージのアドレス変換)
図3は、2ステージのアドレス変換を実行する構成を例示するブロック図である。
セキュアOS56上でアプリケーション581〜583が実行され、非セキュアOS57上でアプリケーション591〜593が実行される。
セキュアOS56のゲストページテーブル601〜603は、アプリケーション581〜583の仮想アドレスから中間物理アドレス(Intermediate Physical Address)への変換を定義する。
セキュアOS56は、ゲストページテーブル601〜603に基づいて、仮想アドレスを中間物理アドレスに変換する。
非セキュアOS57のゲストページテーブル611〜613は、アプリケーション591〜593の仮想アドレスから中間物理アドレスへの変換を定義する。
非セキュアOS57は、ゲストページテーブル611〜613に基づいて、仮想アドレスを中間物理アドレスに変換する。
セキュアVMM68のVMMページテーブル621は、セキュアOS56の中間物理アドレスから物理アドレスへの変換を定義する。
セキュアVMM68のVMMページテーブル622は、非セキュアOS57の中間物理アドレスから物理アドレスへの変換を定義する。
セキュアVMM68は、VMMページテーブル621,622に基づいて、中間物理アドレスを物理アドレスに変換する。
ここでは、複数のアプリケーション581〜583,591〜593のうちのアプリケーション581に基づくアドレス変換について説明するが、他のアプリケーション582〜583,591〜593に基づくアドレス変換も同様である。
2ステージのアドレス変換では、まずステージ1で、セキュアOS56によるアドレス変換が実行され、次にステージ2で、セキュアVMM68によるアドレス変換が実行される。セキュアOS56は、セキュアVMM68によって管理されるゲストOSである。セキュアOS56によって制御されるアプリケーション581は、ゲストページテーブル601と対応付けられる。
アプリケーション581は、命令読み込み要求及びデータアクセス要求を仮想アドレスとして発行する。セキュアOS56は、仮想アドレスを、ゲストページテーブル601の定義に基づいて中間物理アドレスに変換する。中間物理アドレスのメモリ領域は、予めセキュアVMM68によって各ゲストOSに割り当てられている。各ゲストOSは、割り当てられたメモリ領域をゲストページテーブルの定義に基づいて、さらに稼働中のアプリケーションに割り当てる。
セキュアVMM68は、中間物理アドレスを、セキュアVMM68によって管理されるVMMページテーブル621の定義に基づいて、物理アドレスに変換する。仮想アドレスとして発行された要求は、この物理アドレスを用いて処理される。
(セキュアページテーブルツリー121のデータ構造)
図4は、アドレス変換とデータ参照とを実行するハードウェア構成及びセキュアページテーブルツリー121のデータ構造を例示するブロック図である。
この図4で示されるセキュアページテーブルツリー121は、例えば、4ギガバイトの仮想アドレス空間を持つ。セキュアページテーブルツリー121のデータ構造は、様々なアーキテクチャで適用可能である。特定のアーキテクチャでは、物理ページ拡張のため、ステージ1とステージ2でページテーブルのサイズが異なるが、本実施形態では、ステージ1とステージ2とで同一形式のページテーブルが使用される場合を例として説明する。
プロセッサ66は、MMU46を備える。MMU46は、セキュアページテーブルツリー121の最上位を示すレジスタ64を備える。
レジスタ64は、物理アドレスにより最上位のページテーブルT101の上位20ビットを示す。4キロバイト単位で構成されるページテーブルの下位12ビットは省略される。レジスタ64によってインデックスされる最上位のページテーブルT101は、テーブルエントリE101-0〜E101-3を含む。各テーブルエントリは、8バイトであり、次のレベルのページテーブルへのインデックスと、次のレベルのページテーブルが有効か無効かを示す有効/無効ビットを持つ。
各テーブルエントリから次レベルのページテーブルへの参照は、ポインタにより行われる。ゆえに、各ページテーブルT101,T101-1,T101-1-0は、メモリでどのような順序で配置されてもよい。同じレベルのページテーブル、例えばレベル2のテーブルT101-1〜テーブルT101-n(nは2以上の自然数)についても、メモリにおいてどのような順序で配置されてもよい。
ページテーブルT101-1-0のテーブルエントリE101-1-0〜E101-1-511は、それぞれ、データB101-0-0〜B101-511-511を参照する。
図5は、本実施形態に係るブロックの定義を例示する概念図である。
本実施形態では、ページテーブルツリー9、検証子ツリー10、セキュアページテーブルツリー121、セキュア検証子ツリー122を構成するページ単位のブロックを、ページブロックと呼ぶ。ページブロックは、テーブルブロック又はデータブロックである。
アドレス解決に使用されるページテーブルを、テーブルブロックと呼ぶ。
実際に読み込み又は書き込みされるデータを、データブロックと呼ぶ。
あるテーブルブロックから参照可能な1つのページブロックを、参照ブロックと呼ぶ。
あるテーブルブロックから参照可能な全てのページブロックを、関連ブロックと呼ぶ。
あるページブロックの参照元となるテーブルブロックを、参照元ブロックと呼ぶ。
検証に使用されるMAC値とカウンタ値とは、それぞれ対応するテーブルブロックごとに集約され、管理される。
MAC値を集約して形成されるブロックを、MACブロックと呼ぶ。
カウンタ値を集約して形成されるブロックを、カウンタブロックと呼ぶ。
あるページブロックに対応するMACブロックとカウンタブロックとの組合せを、検証ブロックと呼ぶ。なお、カウンタブロックが存在しない場合には、ページブロックに対応するMACブロックを検証ブロックとする。
あるページブロックの検証ブロックは、このページブロックの参照元ブロックに付けられる形式を持つ。
(アドレス変換の詳細)
上記図4を用いて、仮想アドレスMA01=0x40000000が発行された場合を例として、アドレス変換を詳細に説明する。
仮想アドレスMA01=0x40000000の上位2ビットは01#bである。ページテーブルT101から仮想アドレスの上位2ビット01#bによってインデックスされるテーブルエントリE101-1が参照される。
次に、テーブルエントリE101-1が持つ次のページテーブルポインタによってアドレス変換が進む。仮想アドレスMA01が0x40000000の場合には、レベル1で選択されるテーブルエントリはE101-1であり、テーブルエントリE101-1によって参照されるレベル2のページテーブルはT101-1である。
続いて、レベル2で選択されたページテーブルT101-1に対して、仮想アドレスMA01のビット[29:21]によってインデックスされるテーブルエントリが選択される。なお、仮想アドレスのビット[A:B]という表記は、仮想アドレスのAビット目からBビット目までの範囲を表すとする。仮想アドレスMA01のビット[29:21]は全てゼロなので、ページテーブルT101-1のうちのテーブルエントリE101-1-0が選択される。テーブルエントリE101-1-0によって参照されるレベル3のページテーブルはT101-1-0である。
レベル3で選択されたページテーブルT101-1-0に対して、仮想アドレスMA01のビット[20:12]によってインデックスされるテーブルエントリが選択される。レベル3で選択されるテーブルエントリはE101-1-0-0である。
このようなアドレス変換により、最終的にデータB101-1-0-0の上位アドレスが決定される。
(ページテーブルの仮想化)
以下においては、ページテーブルの仮想化について詳細に説明する。
まず、メモリ空間とページテーブルサイズについて説明する。4ギガバイトの仮想アドレス空間をすべて定義するページテーブルのサイズは、8メガバイト以上になり、物理メモリに固定的にページテーブルを割り当てることはメモリサイズを圧迫する。このため、セキュアOS56及びセキュアVMM68は、ページテーブルを仮想化する。
ページテーブルの仮想化は、テーブルエントリの有効/無効ビットを用いて行う。テーブルエントリE101-1の場合を例にとって説明する。テーブルエントリE101-1の有効/無効ビットが無効状態を示す場合、当該テーブルエントリE101-1の参照先テーブルT101-1は、物理メモリに存在しない。よって、この参照先ページに対するアクセスが発生した場合、MMU46は、プロセッサ例外(フォールト)を発生させ、参照先ページを物理メモリへ読み込む処理を実行する。フォールトを受けたセキュアOS56及びセキュアVMM68は、例えばハードディスクなどの外部デバイス43から、参照先テーブルに対応するデータを物理メモリの空きページに記憶し、テーブルエントリE101-1の有効/無効ビットを有効状態に更新し、中断した処理を再開する。
上記のような制御を行うことで、セキュアOS56及びセキュアVMM68は、巨大な仮想アドレス空間を物理メモリに動的に割り当てることが可能となり、限られたメモリを有効に活用することができる。
上記図4に示すセキュアページテーブルツリー121の構造及び機能は、各種の仮想化アドレス変換機構に適用可能である。後述するように、本実施形態においては、メモリ完全性検証に必要なデータ構造を適用し、ゲストOSに対して透過的なメモリ完全性検証機構を実現する。
(仮想化による複数回ページテーブル参照と1次及び2次アドレス変換キャッシュ49,50)
以下で、仮想化による複数回ページテーブル参照と1次及び2次アドレス変換キャッシュ49,50について説明する。
多くのアーキテクチャでは、上記のページテーブル参照は、MMUによりハードウェアによる処理で実行される。2階層で仮想化されている場合、上記のアドレス変換が2回行われ、ゲストOSのページテーブルへのアクセスも、アドレス変換の対象になる。例えば、2ステージのアドレス変換を行うと、最悪の場合には4×3個のページテーブルへの参照が必要になる。
データ参照ごとにこのようなページテーブル参照が実行され、オーバーヘッドが増加することを避けるため、アドレス変換の結果をキャッシュする1次及び2次アドレス変換キャッシュ49,50が用いられる。
本実施形態では、1次アドレス変換キャッシュ49と2次アドレス変換キャッシュ50とによる2階層の仮想化状態が適用されるとする。
2ステージのアドレス変換を行う場合、MMU46は、1次アドレス変換キャッシュ49に、ゲストOSの仮想アドレスと、仮想アドレスを2回アドレス変換した後に得られる物理アドレスとを対応付けて記憶する。この場合のタグには仮想アドレスが用いられる。次のデータ参照時に、仮想アドレスと1次アドレス変換キャッシュ49又は2次アドレス変換キャッシュ50のタグとが一致すれば、MMU46は、セキュアページテーブルツリー121によるアドレス変換を行うことなく、物理アドレスを得ること(アドレス解決)ができる。セキュアページテーブルツリー121が複数存在する場合、1次アドレス変換キャッシュ49及び2次アドレス変換キャッシュ50は、セキュアページテーブルツリー121を識別する識別子とアドレス変換情報とを関連付けて記憶する。識別子としては、例えばセキュアページテーブルツリー121の最上位のアドレスを用いてもよい。これにより、同じ仮想アドレスが複数発生しても、正しい物理アドレスを得ることができる。
アドレス変換はページごとに行われるため、仮想アドレスと物理アドレスとはそれぞれページ内(12ビット)よりも上位のビットを保持しておくだけでよい。
2次アドレス変換キャッシュ50は、1次アドレス変換キャッシュ49と機能的に同じであるが、1次アドレス変換キャッシュ49より大容量であり低速である。
(階層化の概念)
以下に、階層化の概念について説明する。
例えば、データ参照を高速化するためにキャッシュメモリは2レベルに階層化される。例えば、アドレス変換のためのページテーブルツリーは3レベルに階層化される。例えば、仮想化の制御は2レベルの階層を持っており、3階層のページテーブルによって制御されるアドレス変換が2回適用される。このようなキャッシュメモリのレベル、ページテーブルツリーの階層、仮想化における複数回のアドレス変換の回数(ステージ数)は直交した概念であり、論理的には任意の組み合わせが可能である。例えばキャッシュメモリは3レベルに階層化され、アドレス変換のためのページテーブルツリーは3レベルに階層化され、仮想化によるアドレス変換は2ステージとしてもよい。
図6は、本実施形態に係る情報処理装置65によるデータ取得及びアドレス変換の概念を例示するブロック図である。
命令実行ユニット45は、1次キャッシュメモリ47a,47b、2次キャッシュメモリ48にデータが存在しない場合に、内部メモリ8からデータを取得する。
命令実行ユニット45は、アドレス変換が必要な場合に、MMU46に仮想アドレスを送る。
MMU46は、1次アドレス変換キャッシュ49又は2次アドレス変換キャッシュ50に記憶されているアドレス変換情報に基づいて、仮想アドレスを物理アドレスに変換することができない場合に、セキュアページテーブルツリー121に基づく2ステージのアドレス変換を実行する。
このアドレス変換において、ページテーブル又はデータにページフォールトが発生すると、ページフォールトの発生したページテーブル又はデータが、ページングに基づいて、外部メモリ7から内部メモリ8にコピーされる。
(情報処理装置65の初期状態)
上述のアドレス変換及び仮想化機構を前提とし、以下で本実施形態に係る情報処理装置65の初期状態を概説する。
初期状態において、セキュアVMM68、及び、セキュアVMM68によって管理されるセキュアOS56と非セキュアOS57は、休眠状態である。セキュアVMM68、セキュアOS56、非セキュアOS57は、不揮発性の外部メモリ7に退避されている。
本実施形態において、セキュアVMM68及びセキュアOS56の完全性及び秘匿性の信頼の基盤(Root of Trust)となる鍵情報とMAC値は、プロセッサ66の内部に記憶される。より具体的に説明すると、プロセッサ66は、鍵保存ユニット67を備える。鍵保存ユニット67は、秘密鍵とルート検証情報13とを記憶する。プロセッサ66が書き換え可能な記憶領域を備えていない場合、プロセッサ66は、安全なメモリとして、鍵保存ユニット67に記憶されている固定鍵に基づいてバインドされる外部のTPM(Trusted Platform Module)における不揮発性メモリを用いてもよい。ホストのプロセッサ66とTPMとの間で認証が行われることで、TPMの情報が確実に特定のプロセッサと対応付けられる。
(メモリマップとエンティティ)
以下で、本実施形態に係るメモリマップとエンティティについて説明する。
図7は、本実施形態に係るメモリマップを例示する図である。
情報処理装置65のメモリは、例えば、内部メモリ8、マスクROM(Read Only Memory)69、セキュア永続的領域70、非セキュアOS領域75、予備領域711、セキュアOS領域76を含む。内部メモリ8は、割込ベクタ格納領域8a、セキュアVMMプログラム領域77、バッファ領域71を含む。バッファ領域71は、バッファ管理情報領域73、検証バッファ領域72、一時バッファ領域74を含む。セキュアVMM永続的領域70、非セキュアOS領域75、予備領域711、セキュアOS領域76は、外部メモリ7に配置される。
セキュアVMM永続的(Persistent)領域70は、セキュアVMMプログラム領域701、物理アドレス領域702,703、セキュアOSページテーブル領域704、セキュアVMM作業領域705、セキュアVMM MAC領域706、予備領域710を含む。物理アドレス領域702は、レベル1,2のページテーブル、カウンタ値、MAC値を記憶する。物理アドレス領域703は、レベル3のページテーブル、ページテーブルのカウンタ値及びMAC値、及び、データ、データのカウンタ値及びMAC値を記憶する。レベル3の物理アドレス領域703は、レベル3のセキュアVMM68に対するレベル3エントリ領域707、セキュアOS56に対するレベル3エントリ領域708、非セキュアOS57に対するレベル3エントリ領域709を含む。
セキュアVMM68は、セキュアブートされる。セキュアVMM68のうちの検証を行うカーネル部分は、外部メモリ7に対する改ざん攻撃から防御するために、安全なメモリに常駐される。本実施形態においては、安全なメモリの一例として、プロセッサ66のチップ内の内部メモリ8が適用される。本実施形態では、セキュアVMM68によるメモリ検証機能は、内部メモリ8に常駐されるメモリ検証プログラムによって実現される。セキュアVMM68のうち、メモリ検証プログラムではない他のプログラム、例えば、デバイス仮想化機能のためのプログラムなどは、後述のページング及び検証により、オンデマンドで内部メモリ8に記憶され、実行されてもよい。
外部メモリ7に記憶されているセキュアVMM68は、マスクROM69に記憶されているプログラムに基づいて例えば起動時に検証され、その後、内部メモリ8のセキュアVMM68のプログラム領域77に記憶される。
検証子ツリー10は、外部メモリ7のセキュアVMM永続的領域70に記憶される。検証子ツリー10のうちのセキュアVMM68によって検証された部分が、内部メモリ8のバッファ領域71内の検証バッファ領域72に記憶される。
バッファ領域71は、セキュアVMM68によって用いられるデータ領域である。バッファ管理情報領域73は、バッファ管理情報、セキュアVMM68で使用される変換リストを記憶する。検証バッファ領域72は、検証対象データを記憶する。検証バッファ領域72のうちの未使用の領域を、検証バッファ空き領域と呼ぶ。一時バッファ領域74は、セキュアVMM68の検証時に、一時的に利用されるデータを記憶する。バッファ領域71のバッファ管理情報とは、バッファ領域71の使用状況を表す情報であり、例えば、記憶されている又は記憶されていないデータの種別、量、使用頻度などを含む。
メモリマップは、さらに、非セキュアOS57の記憶領域75、セキュアOS56の記憶領域76を含む。
(検証計算の方法)
以下に、本実施形態に係る検証計算の方法について説明する。
1ページのサイズは4096バイト、アドレスサイズは8バイト(64ビット)、カウンタサイズは16バイト(128ビット)として説明する。しかしながら、各サイズはこれに限定されず、他のサイズを用いてもよい。
検証計算で用いられるパラメータを以下で説明する。
Addrは、検証対象ページテーブルの先頭アドレスである。
D[Addr]は、Addrで始まるiページ分のデータであり、iは任意の自然数である。
Ctr[Addr]はAddrで始まるページに紐付けられたカウンタ値である。
Kはメモリ領域全体で共通に使われる機密値である。Kは、常にプロセッサ66の内部に記憶される。
Ekは秘密鍵Kによるj-bitブロック暗号である。本実施形態において、暗号化アルゴリズムは、j=128であるAES128であるとする。例えば、ブロック長は16バイト(128ビット)とする。しかしながら、AES128ではない他の暗号アルゴリズムを用いてもよい。
Paddingはバディングである。
暗号演算については、Y=MAC[Ek](X)という標記を用いる。MAC値Yは、入力Xを共通鍵ブロックサイズに分割した[X0,X1,…,Xn]に対し、秘密鍵Kに基づく共通鍵ブロックベースの固定長CMACアルゴリズムを適用し、計算される。MAC値Y、秘密鍵kのデータサイズは、共通鍵ブロックサイズと一致する。入力Xを共通鍵ブロックサイズに分割できない場合は、パディングPaddingが用いられる。
アドレスAddrから始まるiページ分のデータD[Addr]のMAC値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は、MAC関数への入力が共通鍵ブロックサイズに分割できる場合は利用しなくてもよい。アドレスAddrから始まるデータD[Addr]のサイズは、検証子ツリーの構成にしたがって同一の検証ツリー内でも異なる場合がある。
Ctr[Addr]は、検証対象データのバージョン管理に用いられる。よって、データの読み込み時にはCtr[Addr]はそのまま使用される。データの書き戻し時には、Ctr[Addr]はインクリメントしてから使用される。
本実施形態において、アドレスAddrは、外部メモリ7のアドレスとして説明する。しかしながら、アドレスAddrは、中間物理アドレスでもよい。
(セキュア検証子ツリー122の構造)
以下に、本実施形態に係るセキュア検証子ツリー122のデータ構造について説明する。
本実施形態では、セキュアページテーブルツリー121のデータ構造とセキュア検証子ツリー122のデータ構造とを整合させることにより、アドレス解決とデータ検証とを同時に行う。
セキュアページテーブルツリー121とセキュア検証子ツリー122との第1のデータ構造として、ページテーブルとMAC値とで形成されるツリー構造(MACツリー構造)を説明する。セキュアページテーブルツリー121とセキュア検証子ツリー122との第2のデータ構造として、ページテーブルとMAC値とバージョンを管理するためのカウンタ値とで形成されるツリー構造(MAC+カウンタ構造)を説明する。
本実施形態では、1ページが4キロバイト、カウンタ値が8バイト、MAC値が8バイトの場合を例として説明する。本実施形態においては、テーブルブロックとカウンタブロックとが連続したアドレスに存在するとして説明するが、テーブルブロックとカウンタブロックとでアドレス空間を分けてもよい。
(MACツリー構造)
図8は、本実施形態に係るセキュアページテーブルツリー121及びセキュア検証子ツリー122のMACツリー構造を例示するデータ構造図である。
各データブロックのMAC値は、データブロックの内容とその配置アドレスとに基づいて生成され、生成されたデータブロックのMAC値は、そのデータブロックを参照する参照元ブロックに付されるMACブロックで管理される。上述したように、MACブロックは検証ブロックに相当する。
その一方で、テーブルブロックの検証に用いられるMAC値は、このテーブルブロックの内容、このテーブルブロックに付されるMACブロックの内容、そのテーブルブロックの配置アドレスに基づいて、生成される。生成されたテーブルブロックの検証に用いられるMAC値は、上記のデータブロックのMAC値と同様に、このテーブルブロックの参照元ブロックに付されるMACブロックで管理される。この操作を続けていくと、最終的に1つのMACブロックを頂点とする大規模なツリー構造が形成される。
例えば、データブロックB201-1-0-511のMAC値M201-1-0-511は、データブロックB201-1-0-511とアドレスaddr(B201-1-0-511)とに基づいて生成される。
例えば、テーブルブロックT201-1-0の検証に用いられるMAC値M201-1-0は、テーブルブロックT201-1-0、このテーブルブロックT201-1-0に付されるMACブロックT202-1-0、テーブルブロックT201-1-0のアドレスaddr(T201-1-0)に基づいて生成される。データブロックB201-1-0-511のMAC値M201-1-0-511は参照元ブロックT201-1-0に付随するMACブロックT202-1-0に、テーブルブロックT201-1-0のMAC値M201-1-0は参照元ブロックT201-1に付随するMACブロックT202-1に含まれる。
MACツリー構造において正当性を保証するために、テーブルブロックとこのテーブルブロックに付されるMACブロックとが同時に読み込まれ、検証される。例えば、テーブルブロックT201-1-0が読み込まれる場合には、このテーブルブロックT201-1-0と合わせてMACブロックT202-1-0が読み込まれ、テーブルブロックT201-1-0とMACブロックT202-1-0とを用いて検証が実行される。MACツリー構造においては、下位ブロック(子ブロック)の正当性が上位ブロック(親ブロック)に付されているMACブロックによって保証される。したがって、下位ブロックの検証時には上位ブロックに付されているMACブロックが検証済みであることが必要である。
(MAC+カウンタ構造)
図9は、本実施形態に係るセキュアページテーブルツリー121及びセキュア検証子ツリー122のMAC+カウンタ構造を例示するデータ構造図である。
カウンタ値は、テーブルエントリ単位に設定され、参照ブロックのバージョン管理に使用される。カウンタ値は、値の重複を回避できる条件を満たし、データ又はページテーブルが更新される度に変化する値であればよく、カウントアップ又はカウントダウンされる値でなくてもよい。
各データブロックのMAC値は、データブロックの内容と配置アドレスとカウンタ値とに基づいて生成され、使用されたカウンタ値と生成されたデータブロックのMAC値とはその参照元ブロックに付されたカウンタブロックとMACブロックとで管理される。一方、テーブルブロックのMAC値は、テーブルブロック、テーブルブロックに付されているカウンタブロック、テーブルブロックの配置アドレス、テーブルブロックのカウンタ値に基づいて生成される。使用されたカウンタ値と生成されたテーブルブロックのMAC値は、その参照元ブロックに付されたカウンタブロック、MACブロックで管理される。このような操作を続けていくと、一段上位のテーブルブロックに付される検証ブロックに含まれるカウンタブロックでバージョン管理を行い、MACブロックで改ざん検証を行う小規模なツリー型データを構成することができる。
例えば、データブロックB301-1-0-511のMAC値M301-1-0-511は、データブロックB301-1-0-511、アドレスaddr(B301-1-0-511)、カウンタ値C301-1-0-511に基づいて生成される。
一方、テーブルブロックT301-1-0のMAC値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、MAC値M301-1-0-511は、参照元ブロックT301-1-0に付されているカウンタブロックT302-1-0、MACブロックT303-1-0に含まれる。
テーブルブロックT301-1-0のカウンタ値C301-1-0、MAC値M301-1-0は、参照元ブロックT301-1に付されているカウンタブロックT302-1、MACブロックT303-1に含まれる。
MAC+カウンタ構造では、テーブルブロックの読み込み時に、テーブルブロックとこのテーブルブロックに付されているカウンタブロックとを共に読み込み、検証する必要がある。しかしながら、テーブルブロックとこのテーブルブロックに付されているMACブロックとを共に読み込み、検証する必要はない。この理由は、あるページブロックの正しいMAC値を生成するためには、その上位ブロックに付されているカウンタ値が必要であり、MACブロック自体はMAC値生成に関係しないためである。
(セキュアページテーブルツリー121とページテーブルツリー9)
図10は、セキュアページテーブルツリー121とページテーブルツリー9との関係の一例を示すデータ構造図である。
内部メモリ8は、アドレス変換に用いられるセキュアページテーブルツリー121を記憶する。レジスタ64は、内部メモリ8のセキュアページテーブルツリー121の最上位テーブルT401を参照する。レジスタ64によって参照されるセキュアページテーブルツリー121の定義に基づいて、物理アドレスへの変換が実行され、命令実行ユニット45によってメモリ参照が実行される。
内部メモリ8のセキュアページテーブルツリー121を生成するための元データとなるページテーブルツリー9の全体は、外部メモリ7に記憶されている。本実施形態においては、外部メモリ7に記憶されているページテーブルツリー9は、アドレス変換テーブルとして直接参照されることはなく、セキュアページテーブルツリー121の元データであることを除いて、特別な機能を持たない。外部メモリ7のページテーブルツリー9は改ざんの危険があるため、本実施形態においては、外部メモリ7のページテーブルツリー9が、検証なしに直接アドレス変換に利用されることを避ける。アドレス変換に用いられるのは、内部メモリ8に記憶されているセキュアページテーブルツリー121である。セキュアページテーブルツリー121は、ページテーブルツリー9のサブセットである。
本実施形態に係る情報処理装置65は、外部メモリ7に記憶されているページテーブルツリー9及びデータの必要部分に対して、内部メモリ8へのコピーとセキュア検証子ツリー122に基づく検証を行い、既に内部メモリ8に記憶済みのセキュアページテーブルツリー121及びデータに追加する。情報処理装置65は、内部メモリ8に記憶されていないページテーブル又はデータが参照されると、ページフォールトを発生させ、セキュアVMM68がページテーブルツリー9又はデータの必要部分を検証し、検証結果が正当であれば内部メモリ8に記憶する。
(データブロックの記憶先とアドレス、外部メモリ7のページテーブルツリー9の構成)
以下で、データブロックの記憶先とアドレス、及び、外部メモリ7のページテーブルツリー9の構成について説明する。
本実施形態においては、外部メモリ7に記憶されたページブロックを、物理改ざんに対して安全な内部メモリ8に一時的にコピーし、処理を実行し、処理後の結果を元の外部メモリ7に書き戻す。
したがって、同一のページブロックが外部メモリ7のアドレスと内部メモリ8のアドレスとに記憶される場合がある。説明を簡略化するために、データブロックB401-0-0-511が記憶されている外部メモリ7のアドレスをEaddr(B401-0-0-511)と表記する。データブロックB401-0-0-511が記憶されている内部メモリ8のアドレスをIaddr(B401-0-0-511)と表記する。厳密に言えば内部メモリ8のアドレスは、検証バッファ領域72に動的に確保される。このため、Iaddr(B401-0-0-511)の値は、同一のデータブロックB401-0-0-511についても読み込みの度に変化する。しかしながら、以下の読み込みと書き戻しの一連の動作の説明では、この変化を考慮する必要がないため、単純にIaddr(B401-0-0-511)と表記する。
外部メモリ7に記憶されているページテーブルの各エントリには、Eaddr(B401-0-0-511)のように参照ブロックの外部メモリ7のアドレスが記憶される。ただし、MMU46が認識するページテーブルの実体は、外部メモリ7に記憶されたページテーブルではなく、内部メモリ8に記憶されるとともに検証されたページテーブルである。MMU46は、内部メモリ8に記憶されるとともに検証されたページテーブルを参照する。例えば、上記の図10において、レジスタ64によって参照される実体のアドレスは、Iaddr(T401)である。ページテーブルT401-0-0の外部メモリ7のアドレスEaddr(T401-0-0)は、ページテーブル構築時に与えられており、最上位のページテーブルT401から順番に検証読み込みを行うことでアドレス解決を実行することができる。一方、ページテーブルT401-0-0の内部メモリ8上のアドレスIaddr(T401-0-0)は、内部メモリ8の一時バッファ領域74におけるメモリ確保時に決められる。
(階層的な検証処理の概要)
以下、階層的な検証処理の概要を説明する。
データ参照要求から検証を行い、データを取得するまでの一連を動作は、データ参照処理、アドレス解決処理、検証処理、置き換え処理、追い出し処理に分割することができる。それぞれの処理は入れ子的な関係であり、データ参照処理以外は必要がなければ発生しない。
本実施形態では、アドレス解決時に、解決されたデータの検証処理を行う。このため、階層的に検証処理が発生する。例えば、あるデータに対してデータ参照要求が発生した場合、ページウォークによるアドレス解決処理が発生する。ここでアドレス解決に必要な上位テーブルブロック(親テーブルブロック)が未検証であった場合、まずこの上位テーブルブロックに対する検証処理が実行される。そして、検証されたテーブルブロックが安全な内部メモリ8に読み込まれた後に、下位テーブルブロック(子テーブルブロック)に対する検証処理が実行される。このように、最上位から順に最下位であるデータブロックまで、順次検証が実行される。
(検証処理発生までの流れ)
以下で、検証処理発生までの流れについて説明する。
図11は、本実施形態に係るデータ参照処理を例示するフローチャートである。
この図11は、本実施形態に係る検証処理が発生する前までの流れを表す。以下で発生するアドレス変換は、ステージ2ページテーブルを使用する処理であり、ステージ1ページテーブルを使用するゲストOSによるアドレス変換はすでに終了しているとする。
命令実行ユニット45は、ステップS001において、データ参照要求をMMU46に発行する。
MMU46は、ステップS002において、1次アドレス変換キャッシュ49又は2次アドレス変換キャッシュ50に、仮想アドレスと物理アドレスとのアドレス変換情報がキャッシュされているか確認する。
アドレス変換情報が1次アドレス変換キャッシュ49又は2次アドレス変換キャッシュ50にキャッシュされている場合(TLBヒットの場合)、処理はステップS005に移動する。
アドレス変換情報が1次アドレス変換キャッシュ49又は2次アドレス変換キャッシュ50にキャッシュされていない場合(TLBミスの場合)、MMU46は、ステップS003において、アドレス解決処理を行い、ステップS004において、解決された仮想アドレスと物理アドレスとのアドレス変換情報を1次アドレス変換キャッシュ49又は2次アドレス変換キャッシュ50にキャッシュする。
ステップS005において、MMU46は、参照要求されたデータを、解決された物理アドレスから読み込む。
図12は、本実施形態に係るアドレス解決処理を例示するフローチャートである。
この図12で示すアドレス解決処理は、データ参照処理で発生する。
ステップS101において、MMU46は、アドレス解決処理を開始すると、ページウォークによるアドレス解決を行う。
ステップS102において、MMU46は、ページウォーク中にテーブルエントリが無効か否かチェックする。
テーブルエントリが有効の場合、処理はステップS104に移動する。
テーブルエントリが無効の場合、制御はMMU46からセキュアVMM68に移り、ステップS103において、セキュアVMM68は、無効のテーブルエントリによって参照されるページブロックの検証処理を行う。検証処理終了後、セキュアVMM516は、無効であった検証されたテーブルエントリを有効にし、制御をセキュアVMM68からMMU46に移す。ステップS104において、MMU46は、データブロックまでのアドレスが解決したかチェックする。
アドレスが解決していない場合には、処理はステップS101に戻る。これにより、アドレスが解決するまでページウォークが繰り返される。
アドレスが解決した場合、ステップS105において、MMU46は、データ参照処理を再開し、アドレス解決処理を終了する。
このように、検証処理は、ステージ2ページテーブルツリーのページフォールトによるアドレス解決処理時にセキュアVMM68によって逐次実行される。ページウォークでは、テーブルブロックとデータブロックとのページングが一度に行われてもよい。この場合、セキュアVMM68とMMU46との間の遷移回数が削減される。
(検証処理の発生と検証処理の詳細)
以下で、検証処理の発生と検証処理の詳細とについて説明する。
ここでは、上記の図9に示すMAC+カウンタ構造の検証子ツリーを用いて、データブロックB301-1-0-511に対するデータ参照要求が発生した場合の動作例を説明する。
まず、説明を簡略化するための前提を記載する。
検証子ツリーのうちレベル2までのテーブルブロックとカウンタブロックとは、常に内部メモリ8にキャッシュされているとする。例えば、保護される外部メモリ7のサイズが4ギガバイトであり、内部メモリ8にキャッシュされるデータのサイズが52キロバイトであり、内部メモリ8のサイズが1メガバイトの場合、内部メモリ8は、検証子ツリーのうちレベル2までのテーブルブロックとカウンタブロックとをキャッシュすることが十分な容量を持つ。
置き換え処理では、置き換え元と同種類のデータが、置き換え対象として、置き換えアルゴリズムにしたがって選択される。すなわち、テーブルブロックの置き換え時には、テーブルブロックが選択される。データブロックの置き換え時は、データブロックが選択される。置き換えアルゴリズムは、LRU(Least Recently Used)を用いて説明を行うが、他の置き換えアルゴリズムを用いて置き換え対象を選択してもよい。
本実施形態においては、内部メモリ8のバッファ管理情報領域73に、外部メモリ7のアドレスと内部メモリ8のアドレスとの変換リストが記憶されるとする。すなわち、セキュアVMM68は、データブロックB301-1-0-511の内部メモリ8のアドレスIaddr(B301-1-0-511)と外部メモリ7のアドレスEaddr(B301-1-0-511)との対応関係を認識する。内部メモリ8のアドレスIaddrと外部メモリ7のアドレスEaddrとの変換は、変換リストを用いる方法ではなく、逆ページウォークなどの方法を用いてもよい。
MAC値計算は、例えば、セキュアDMAコントローラ52で実行されるが、ソフトウェアで実行されてもよい。
レベル3以降のテーブルブロックに対して、内部メモリ8でページングが実行される。このため、データブロックB301-1-0-511のアドレス解決に必要な全てのテーブルブロックが内部メモリ8に存在する場合と、存在しない場合とを説明する。データブロックとテーブルブロックではデータ構造及び検証処理が異なるため、以下ではデータブロックとテーブルブロックとのそれぞれについて説明を行う。
(データブロックの検証処理)
まず、データブロックB301-1-0-511のアドレス解決に必要なページテーブルが全て内部メモリ8に記憶されている場合、すなわちデータブロックB301-1-0-511のみの検証が発生する場合について説明する。テーブルブロックT301,T301-1,T301-1-0とそれらに付随するカウンタブロックT302,T302-1,T302-1-0は全て内部メモリ8の検証バッファ領域72に記憶されているとする。
<データブロックに関するアドレス解決処理の詳細>
上記の図11及び図12を用いて、データ参照処理と、このデータ参照処理で発生するアドレス解決処理とを説明する。
MMU46は、データブロックB301-1-0-511のアドレス解決処理を開始し、ステップS101において、ページウォークによるアドレス解決を行う。
MMU46は、ステップS102において、テーブルブロックT301のテーブルエントリE301-1をチェックし、有効であることからテーブルエントリE301-1を参照する。
MMU46は、ステップS104において、データブロックB301-1-0-511のアドレスが解決されたかチェックし、未解決であるため、ステップS101において、ページウォークを繰り返す。
MMU46は、ステップS102においてテーブルブロックT301-1-0のテーブルエントリE301-1-0-511が無効であることを検出すると、制御をMMU46からセキュアVMM68に移す。セキュアVMM68は、ステップS103において、テーブルエントリE301-1-0-511によって参照されるデータブロックB301-1-0-511の検証処理を行う。検証処理終了後、無効であったテーブルエントリE301-1-0-511は有効になり、セキュアVMM68は制御をMMU46に戻す。MMU46は、ステップS104において、データブロックB301-1-0-511までのアドレスが解決したかチェックする。MMU46は、アドレスが解決したため、ステップS105において、データ参照処理を再開し、アドレス解決処理を終了する。
<情報処理装置65の構成>
図13は、本実施形態に係る情報処理装置65の構成を例示するブロック図である。
情報処理装置65は、命令実行ユニット45、アドレス変換キャッシュ78、MMU46、検証管理部79、検証情報生成部80、外部読込部81、外部書出部82、記憶領域管理部83、検証記憶部84、鍵保存ユニット67、外部メモリ7を備える。
MMU46は、アドレス解決部46aを備える。
検証管理部79は、検証情報取得部79a、改ざん判定部79b、検証情報計算部79cを備える。
記憶領域管理部83は、参照関係更新部(ページテーブル参照関係更新部)83a、バッファ領域管理部83b、バッファ書出管理部(検証用バッファ書出管理部)83cを備える。
ここで、アドレス変換キャッシュ78とMMU46とは、アドレス変換部3に対応する。アドレス変換キャッシュ78は、1次アドレス変換キャッシュ49及び2次アドレス変換キャッシュ50に対応する。
外部読込部81及び外部書出部82は、外部入出力部2に対応する。
検証情報計算部79c及び検証情報生成部80は、検証計算部4に対応する。
改ざん判定部79aは、検証部5に対応する。
参照関係更新部83aは、上記図1の更新部6に対応する。
バッファ領域管理部83b及びバッファ書出管理部(検証用バッファ書出管理部)83cは、上記図1の置換管理部20に対応する。
検証記憶部84は、内部メモリ8に対応する。
<データ参照処理と情報処理装置65の構成との関係>
上記の図13の各構成要素と上記図11,12のフローチャートとの関係を説明する。
命令実行ユニット45は、ステップS001において、データ参照要求を発行し、ステップS002において、アドレス変換キャッシュ78に、ゲストOSの仮想アドレスに対応する物理アドレスがキャッシュされているか否かを問い合わせる。
アドレス変換キャッシュ78に参照要求された仮想アドレスに対応する物理アドレスがキャッシュされていない場合、MMU46のアドレス解決部46aは、ステップS003において、アドレス解決処理を実行する。
アドレス解決処理において、MMU46は、ステップS101でページウォークを実行し、ステップS102において検証記憶部84に記憶されている該当のテーブルブロックT301のテーブルエントリE301-1をチェックする。
テーブルエントリが有効の場合、処理はステップS104に移動する。
テーブルエントリが無効の場合、その旨を示す結果を検証管理部79に通知し、結果を受けた検証管理部79は、ステップS103において、このテーブルエントリによって参照されるページブロックに対して検証処理を行う。検証処理終了後、検証管理部79は、参照関係更新部83aに通知を行い、参照関係更新部83aは、無効であったテーブルエントリを有効化する。その後、検証管理部79は読み込みを完了として制御をMMU46に戻す。
ステップS104において、MMU46は、データブロックまでのアドレスが解決したかチェックし、アドレスが未解決の場合にはステップS101のページウォークに処理が戻る。
アドレスが解決された場合、ステップS105において、MMU46は、データ参照処理を再開し、アドレス解決処理を終了する。
アドレス解決が完了した段階で、検証管理部79及び記憶領域管理部83は、検証済みの状態で、アドレス解決に必要なページテーブルを、検証記憶部84に動的に確保されたバッファ領域71に記憶する。
MMU46は、ステップS004において、アドレス解決の結果であるアドレス変換情報をアドレス変換キャッシュ78にキャッシュする。
アドレス変換キャッシュ78に参照要求された仮想アドレスに対応する物理アドレスがキャッシュされている場合、又は、アドレス解決が実行された場合、MMU46は、ステップS005において、対応する物理アドレスを用いてデータを読み込む。
アドレス変換キャッシュにアドレス変換情報が記憶されており、既にデータ参照が行われていた場合には、検証済みデータが検証記憶部84に記憶されている。アドレス変換キャッシュ78には、検証記憶部84のバッファのアドレスが記憶されている。アドレス変換キャッシュ78から変換済みの物理アドレスが検証記憶部84に送られ、ステップS005において、検証記憶部84のデータが命令実行ユニット45に返される。
<データブロックに関する検証処理の詳細>
図14は、本実施形態に係る検証処理を例示するフローチャートである。図14に示す検証処理は、上記図12のアドレス解決処理で発生する。ここでは、上記図9のデータブロックB301-1-0-511の検証処理について説明する。
ステップS201において、セキュアVMM68は、データブロックB301-1-0-511の検証処理を開始し、内部メモリ8の検証バッファ領域72に空き領域が存在するか否かチェックする。検証バッファ領域72に空き領域がない場合、セキュアVMM68は、ステップS202において、置き換え処理により領域の解放を行う。
続いて、セキュアVMM68は、ステップS203において、検証されるデータブロックB301-1-0-511を、外部メモリ7のアドレスEaddr(B301-1-0-511)から、内部メモリ8の検証バッファ領域72の空き領域へコピーする。このとき、セキュアDMAコントローラ52は、データブロックB301-1-0-511、データブロックB301-1-0-511の外部メモリ7のアドレスEaddr(B301-1-0-511)、内部メモリ8に存在する上位の検証ブロックのカウンタブロックT302-1-0のカウンタ値C301-1-0-511に基づいて、MAC値を生成する。
そして、セキュアVMM68は、ステップS204において、生成されたMAC値に基づいて検証対象データブロックB301-1-0-511の改ざん検証を行う。改ざん検証において、外部メモリ7からMAC値を読み込む必要がある場合、セキュアVMM68は、検証対象データブロックB301-1-0-511に対応するMAC値を外部メモリ7から読み込み、読み込まれたMAC値M301-1-0-511を内部メモリ8の一時バッファ領域74に記憶する。内部メモリ8のMAC値M301-1-0-511が使用される場合、セキュアVMM68は、検証対象データブロックB301-1-0-511に対応するMAC値M301-1-0-511を内部メモリ8から読み込み、読み込まれたMAC値を一時バッファ領域74に記憶する。そして、セキュアVMM68は、一時バッファ領域74に記憶されたMAC値M301-1-0-511と、セキュアDMAコントローラ52で生成されたMAC値とを比較する。
セキュアVMM68は、ステップS205において、MAC値が整合しない場合、検証失敗と判断し、ステップS206の検証失敗後処理に制御を移す。ステップS206において、セキュアVMM68は、検証失敗後処理でエラー処理などを行い、その後に検証処理を終了させる。
セキュアVMM68は、ステップS205において、MAC値が整合した場合、検証成功と判断する。セキュアVMM68は、ステップS207において、無効となっていたテーブルエントリE301-1-0-511の参照先アドレスに、検証対象データブロックB301-1-0-511の内部メモリ8のアドレスIaddr(B301-1-0-511)を書き込む。このとき、データブロックB301-1-0-511の外部メモリ7のアドレスEaddr(B301-1-0-511)は、バッファブロック単位にバッファ管理情報領域73に記憶される。その後、セキュアVMM68は、検証処理を終了する。
上記図14の検証処理と、上記図13の情報処理装置65の構成とを関連付けて説明する。
検証管理部79は、ステップS201において、記憶領域管理部83のバッファ領域管理部83bに、検証記憶部84の空き領域の有無を照会する。空き領域がない場合、検証管理部79は、ステップS202において、記憶領域管理部83に読み込み済みバッファ領域解放を要求し、空き領域のアドレスを取得する。
ステップS203において、検証管理部79の検証情報取得部79aは、検証記憶部84に存在する上位の検証ブロックのMACブロックT303-1-0のMAC値M303-1-0-511を取得し、検証記憶部84に存在する上位の検証ブロックのカウンタブロックT302-1-0のカウンタ値C301-1-0-511を取得する。また、検証情報取得部79aは、外部読込部81を通じて、検証対象データブロックB301-1-0-511、検証対象データブロックB301-1-0-511に対応するMAC値M301-1-0-511を、外部メモリ7から取得し、取得した検証対象データブロックB301-1-0-511及びMAC値M301-1-0-511を、検証記憶部84の空き領域に記憶する。
ステップS204において、検証情報計算部79cは、検証対象データブロックB301-1-0-511及びカウンタ値C301-1-0-511と秘密鍵とに基づいて、MAC値を計算する。改ざん判定部79bは、計算されたMAC値を取得済みのMAC値M301-1-0-511と照合する。
MAC値が整合せず検証に失敗した場合、ステップS206において、検証管理部79は、命令実行ユニット45に検証失敗を通知し、その後の処理を中止する。
MAC値が整合して検証に成功した場合、ステップS207において、検証管理部 79は、参照関係更新部83aに読み込み成功を通知する。参照関係更新部83aは、無効となっていたテーブルエントリE301-1-0-511の参照先アドレスに、検証対象データブロックB301-1-0-511の内部メモリ8のアドレスIaddr(B301-1-0-511)を記憶する。さらに、参照関係更新部83aは、データブロックB301-1-0-511の外部メモリ7のアドレスEaddr(B301-1-0-511)を、バッファブロック単位にバッファ管理情報領域73に記憶し、検証処理を終了する。
<データブロックに関する置き換え処理の詳細>
図15は、本実施形態に係る置き換え処理を例示するフローチャートである。図15に示す置き換え処理は、上記図14の検証処理で発生する。置き換え処理を発生させたデータブロックをB301-1-0-511、最も使用されていないデータブロックをB301-1-0-1として説明する。
セキュアVMM68は、置き換え処理を開始し、ステップS301において、内部メモリ8の置き換え対象を選択する。セキュアVMM68は、LRUなどのような置き換えアルゴリズムに基づいて、データブロックB301-1-0-511の置き換え対象としてデータブロックB301-1-0-1を選択する。
セキュアVMM68は、ステップS302において、データブロックB301-1-0-1を内部メモリ8から追い出す追い出し対象として選択する。
セキュアVMM68は、ステップS303において、追い出し処理を実行する。
追い出し処理終了後、ステップS304において、セキュアVMM68は、置き換え対象データブロックB301-1-0-1が内部メモリ8に存在するかチェックし、置き換え対象データブロックB301-1-0-1は内部メモリ8に存在しないので、置き換え処理を終了する。なお、置き換え対象が内部メモリ8に存在するか否かをチェックする理由は、バッファ管理の方針に依存して、後述のように置き換え対象がテーブルブロックの場合に参照ブロックの追い出しを必要とし、複数回の追い出しが必要となる場合があるためである。上記の例では、1回の追い出し処理で追い出しは完了する。
上述の置き換え処理終了後、内部メモリ8の検証バッファ領域72には、空き領域が確保される。
上記図15の置き換え処理と、上記図13の情報処理装置65の構成とを関連付けて説明する。
ステップS301において、検証管理部79から要求を受けたバッファ領域管理部83bは、最も使用されていないデータブロックB301-1-0-1を置き換え対象として選択する。
ステップS302において、バッファ領域管理部83bは、置き換え対象データブロックB301-1-0-1を追い出し対象として選択し、ステップS303において、追い出し処理を実行する。
追い出し処理終了後、セキュアVMM68は、ステップS304において、置き換え対象がまだ検証記憶部84に存在するかチェックする。
置き換え対象が検証記憶部84に存在する場合、置き換え対象が検証記憶部84に存在しなくなるまでステップS302以降の処理が繰り返される。セキュアVMM68は、置き換え対象が検証記憶部84に存在しなくなると、置き換え処理を終了する。
<データブロックに関する追い出し処理の詳細>
図16は、本実施形態に係る追い出し処理を例示するフローチャートである。図16に示す追い出し処理は、上記図15の置き換え処理で発生する。追い出し対象となるデータブロックをデータブロックB301-1-0-1とする。このデータブロックB301-1-0-1のカウンタ値C301-1-0-1は、内部メモリ8に記憶されている。データブロックB301-1-0-1のMAC値M301-1-0-1は、外部メモリ7に記憶されている。外部メモリ7のMAC値M301-1-0-1は、外部メモリ7に記憶されているデータブロックB301-1-0-1のMAC値である。よって、内部メモリ8で更新されたデータブロックB301-1-0-1が外部メモリ7へ書き戻される場合には、MAC値M301-1-0-1の更新処理が必要となる。一方、内部メモリ8のデータブロックB301-1-0-1が更新されなかった場合、外部メモリ7と内部メモリ8でデータブロックB301-1-0-1の内容に差がないことから、MAC値M301-1-0-1の更新処理は必要ない。
セキュアVMM68は、データブロックB301-1-0-1の追い出し処理を開始し、ステップS401において、追い出し対象となったデータブロックB301-1-0-1の内容に更新があるか確認する。更新がない場合はステップS405へ進む。
更新がある場合は、ステップS402において、セキュアVMM68は、追い出し対象データブロックB301-1-0-1のMAC更新処理を行う。セキュアVMM68は、追い出し対象データブロックB301-1-0-1の上位の検証ブロックのカウンタブロックT302-1-0に含まれるカウンタ値C301-1-0-1をインクリメントし、セキュアDMAコントローラ52は、追い出し対象データブロックB301-1-0-1、変換リストを用いて変換された外部メモリ7のアドレスEaddr(B301-1-0-1)、インクリメントされたカウンタ値C301-1-0-1に基づいて、追い出し対象データブロックB301-1-0-1の新しいMAC値M301-1-0-1を生成する。
その後、セキュアVMM68は、ステップS403において、内部メモリ8の変換リストを用いてデータブロックB301-1-0-1の書き出し先となる外部メモリ7のアドレスEaddr(B301-1-0-1)を決定する。
セキュアDMAコントローラ52は、ステップS404において、追い出し対象データブロックB301-1-0-1を外部メモリ7のアドレスEaddr(B301-1-0-1)に、生成されたMAC値M301-1-0-1を外部メモリ7のMACブロックT303-1-0の所定の場所に、書き出す。
内部メモリ8で追い出し対象データブロックB301-1-0-1が更新されていない場合、又は、MAC更新と追い出し対象の書き出しが実行された場合、ステップS405において、セキュアVMM68は、追い出し対象データブロックB301-1-0-1を指すテーブルエントリE301-1-0-1の参照先アドレスを外部メモリ7のアドレスEaddr(B301-1-0-1)に書き換え、追い出し対象テーブルエントリE301-1-0-1を無効にする。そして、セキュアVMM68は、内部メモリ8のバッファ管理情報領域73に記憶された追い出し対象データブロックB301-1-0-1に関する制御情報を削除し、検証バッファ領域72のデータブロックB301-1-0-1が記憶されていた領域を解放する。この処理によって、検証バッファ領域72にデータブロックサイズの空き領域が生まれる。そして、セキュアVMM68は、追い出し処理を終了する。
上記図16の追い出し処理と、上記図13の情報処理装置65の構成とを関連付けて説明する。
バッファ書出管理部83cは、追い出し対象データブロックB301-1-0-1の追い出し処理を開始する。バッファ書出管理部83cは、ステップS401において、追い出し対象となったデータブロックB301-1-0-1の内容に更新があるか否かを確認する。
更新がない場合、バッファ書出管理部83cは、ステップS405において、データを破棄して内部メモリ8のバッファ領域を解放し、参照関係更新部83aは、テーブルエントリの書き換え処理を行う。
更新がある場合、バッファ書出管理部83cは、ステップS402において、検証情報生成部80に追い出し対象データブロックB301-1-0-1のMAC更新処理を依頼する。検証情報生成部80は、追い出し対象データブロックB301-1-0-1の上位検証ブロックのカウンタブロックT302-1-0に含まれるカウンタ値C301-1-0-1をインクリメントし、追い出し対象データブロックB301-1-0-1、変換リストを用いて変換された外部メモリ7のアドレスEaddr(B301-1-0-1)、インクリメントされたカウンタ値C301-1-0-1に基づいて、追い出し対象データブロックB301-1-0-1の新しいMAC値M201-1-0-1を生成する。
その後、バッファ書出管理部83cは、ステップS403において、内部メモリ8の変換リストを用いて、追い出し対象データブロックB301-1-0-1の書き出し先となる外部メモリ7のアドレスEaddr(B301-1-0-1)を決定し、ステップS404において、外部書出部82に、追い出し対象データブロックB301-1-0-1を外部メモリ7のアドレスEaddr(B301-1-0-1)に書き込む依頼をし、生成されたMAC値M301-1-0-1を外部メモリ7のMACブロックT303-1-0の所定のアドレスへ書き込む依頼をする。
MAC更新とデータの書き出しが実行された場合、ステップS405において、参照関係更新部83aは、追い出し対象データブロックB301-1-0-1を指すテーブルエントリE301-1-0-001の参照先アドレスを外部メモリ7のアドレスEaddr(B301-1-0-1)に書き換え、エントリを無効にする。そして、バッファ領域管理部83bは、内部メモリ8のバッファ管理情報領域73に記憶された追い出し対象データブロックB301-1-0-1に関する制御情報を削除し、検証バッファ領域72の追い出し対象データブロックB301-1-0-1が記憶されていた領域を解放する。この処理によって、検証バッファ領域72にデータブロックサイズの空き領域が確保される。そして、バッファ書出管理部83cは、追い出し処理を終了する。
以上が、アドレス解決、検証、置き換え、追い出しの各処理に必要な上位のテーブルブロックが全て内部メモリ8に記憶済みの場合のデータブロックに対する各処理である。
(テーブルブロックの検証処理)
以下では、データブロックB301-1-0-511のアドレス解決に必要なテーブルブロックの一部が内部メモリ8に存在しない場合、換言すれば、テーブルブロックが検証される場合の処理について説明する。
テーブルブロックT301,T301-1とそれらに付されるカウンタブロックT302,T302-1は内部メモリ8の検証バッファ領域72に記憶されるとする。検証バッファ領域72は検証記憶部84に含まれる。テーブルブロックT301-1-0とそれに付随するカウンタブロックT302-1-0は内部メモリ8に記憶されていないとする。
<テーブルブロックに関するアドレス解決処理>
テーブルブロックに関するアドレス解決処理は、先で説明した図12のフローチャートを流用して説明する。
MMU46は、データブロックB301-1-0-511のアドレス解決処理を開始し、ステップS101において、ページウォークによるアドレス解決を行う。
MMU46は、ステップS102において、テーブルブロックT301のテーブルエントリE301-1をチェックする。
MMU46は、テーブルエントリE301-1が有効の場合に、テーブルエントリE301-1を参照する。
MMU46は、ステップS104において、データブロックB301-1-0-511のアドレスが解決したかチェックし、未解決の場合には、ステップS101のページウォークを繰り返す。
MMU46は、テーブルブロックT301-1のテーブルエントリE301-1-0が無効であることを検出すると制御をセキュアVMM68に移す。セキュアVMM68は、ステップS103において、テーブルエントリE301-1-0によって参照されるテーブルブロックT301-1-0の検証処理を行う。検証処理終了後、セキュアVMM68は、無効であったテーブルエントリE301-1-0を有効とし、制御はセキュアVMM68からMMU46に戻る。
MMU46は、ステップS104において、データブロックB301-1-0-511までのアドレスが解決したかチェックし、未解決の場合には、再度、ステップS101のページウォークを行い、同様の処理が繰り返される。
データブロックB301-1-0-511までのアドレスが解決された場合、ステップS105において、MMU46は、データ参照処理を再開し、アドレス解決処理を終了する。
上記のようなページテーブルのアドレス解決処理と、上記図13に示す情報処理装置65の構成とを関連付けて説明する。
命令実行ユニット45は、データ参照要求を発行する。MMU46は、テーブルブロックT301-1-0が未読み込みであるため、アドレス変換キャッシュ78のキャッシュミスと判断し、MMU46のアドレス解決部46aは、アドレス解決を実行する。MMU46のアドレス解決部46aは、ステップS101において、ページウォークを実行する。
MMU46は、ステップS102において、検証記憶部84に記憶されたテーブルブロックT301のテーブルエントリE301-1をチェックし、有効であることからテーブルエントリE301-1を参照する。
MMU46は、ステップS104において、データブロックB301-1-0-511のアドレスが解決されたかチェックし、未解決であるためステップS101のページウォークを繰り返す。
MMU46は、ステップS102において、テーブルブロックT301-1のテーブルエントリE301-1-0が無効であることを検出すると、その旨を検証管理部79に通知する。
検証管理部79は、ステップS103において、テーブルエントリE301-1-0-511によって参照されるデータブロックB301-1-0-511の検証処理を実行する。検証処理終了後、検証管理部79は、参照関係更新部83aに通知を行い、参照関係更新部83aは、無効であったテーブルエントリE301-1-0を有効化する。検証管理部79は、MMU46に読み込み完了を通知する。
MMU46は、ステップS104において、データブロックB301-1-0-511までのアドレスが解決したかチェックし、未解決の場合には、再度、ステップS101のページウォークを行い、同様の処理が繰り返される。
アドレスが解決すると、MMU46は、ステップS105において、データ参照処理を再開し、アドレス解決処理を終了する。
アドレス解決が完了した段階では、アドレス解決に必要なページテーブルは、検証管理部79によって検証され、記憶領域管理部83により検証記憶部84に動的に確保されたバッファに、検証済みの状態で記憶される。そして、MMU46は、アドレス解決結果をアドレス変換キャッシュ78にキャッシュする。
<テーブルブロックに関する検証処理の詳細>
ページテーブルに関する検証処理は、先で説明した図14の検証処理を流用して説明する。ここでは、テーブルブロックT301-1-0の検証処理を説明する。
セキュアVMM68は、テーブルブロックT301-1-0の検証処理を開始し、ステップS201において、内部メモリ8の検証バッファ領域72に空き領域が存在するか否かチェックする。
空き領域がない場合、セキュアVMM68は、ステップS202において、置き換え処理により領域の解放を行う。
続いて、セキュアVMM68は、ステップS203において、検証されるテーブルブロックT301-1-0を、外部メモリ7のアドレスEaddr(T301-1-0)から内部メモリ8の検証バッファ領域72の空き領域へコピーする。このとき、セキュアDMAコントローラ52は、MACツリー構造又はMAC+カウンタ構造で定義されるMAC生成方法に基づいて、読み込まれたデータのMAC値を生成する。
そして、セキュアVMM68は、ステップS204において、生成されたMAC値を使って検証対象テーブルブロックT301-1-0の改ざん検証を行う。セキュアVMM68は、検証対象テーブルブロックT301-1-0に対応するMAC値M301-1-0を外部メモリ7から読み込み、内部メモリ8の一時バッファ領域74に記憶し、このMAC値M301-1-0とセキュアDMAコントローラ52で生成されたMAC値とを比較する。MAC値M301-1-0は、外部メモリ7のMACブロックT303-1に含まれている。正しい上位カウンタ値に対応するMAC値は、秘密鍵がなければ計算できない。上位カウンタ値は、上位テーブルとともに検証されている。このため、読み込まれたMAC値M301-1-0に対する検証は実行される必要がない。
セキュアVMM68は、ステップS205において、MAC値が不整合の場合、検証失敗と判断し、ステップS206の検証失敗後処理に制御を移す。ステップS206において、セキュアVMM68は、検証失敗後処理でエラー処理などを行い、その後に検証処理を異常終了させる。
セキュアVMM68は、ステップS205において、MAC値が整合した場合、検証成功と判断する。セキュアVMM68は、ステップS207において、無効となっていたテーブルエントリE201-1-0の参照先アドレスに、検証対象テーブルブロックT301-1-0の内部メモリ8のアドレスIaddr(T301-1-0)を書き込む。このとき、テーブルブロックT301-1-0の外部メモリ7のアドレスEaddr(T301-1-0)は、バッファブロック単位にバッファ管理情報領域73に記憶される。その後、セキュアVMM68は、検証処理を終了する。
上記のようなテーブルブロックの検証処理を、上記図12のアドレス解決処理のフローチャートと上記図13に示す情報処理装置65の構成とを関連付けて説明する。
MMU46のアドレス解決部46aは、データブロックB301-1-0-511のアドレス解決処理を開始し、ステップS101において、ページウォークによるアドレス解決を行う。
アドレス解決部46aは、ステップS102において、検証記憶部84を参照し、テーブルブロックT301のテーブルエントリE301-1をチェックし、テーブルエントリE301-1が有効であるため、テーブルエントリE301-1を参照する。
MMU46は、ステップS104において、データブロックB301-1-0-511のアドレスが解決したか否かチェックし、未解決であるため、ステップS101のページウォークを繰り返す。
MMU46は、ステップS102において、テーブルブロックT301-1のテーブルエントリE301-1-0が無効であることを検出すると、その旨を検証管理部79に通知する。
検証情報取得部79aは、記憶領域管理部83へ空き領域の確保を依頼する。記憶領域管理部83のバッファ領域管理部83bは、ステップS201において検証記憶部84に空き領域が存在するか否か判断し、空き領域がない場合に、ステップS202の置き換え処理を実行する。
検証情報取得部79aは、ステップS203において、検証記憶部84に存在する上位検証ブロックのカウンタブロックT302-1のカウンタ値C301-1-0を取得する。検証情報取得部79aは、外部読込部81を経由して検証対象ページブロックT301-1-0及び検証対象ページブロックT301-1-0に対応するMAC値M301-1-0を外部メモリ7から検証記憶部84の空き領域に読み込む。
ステップS204において、検証情報計算部79cは、検証対象ページブロックT301-1-0、カウンタ値C301-1-0、秘密鍵に基づいて、MAC値を計算する。
改ざん判定部79bは、ステップS205において、計算されたMAC値を取得済みのMAC値M301-1-0と照合する。
MAC値が整合せず検証に失敗した場合、ステップS206において、検証管理部79は、命令実行ユニット45に検証失敗を通知し、その後の処理を中止する。
MAC値が整合して検証に成功した場合、ステップS207において、検証管理部79は、参照関係更新部83aに読み込み成功を通知する。参照関係更新部83aは、無効となっていたテーブルエントリE301-1-0の参照先アドレスに検証対象ページブロックT301-1-0の検証記憶部84のアドレスIaddr(T301-1-0)を書き込む。さらに、参照関係更新部83aは、テーブルエントリE301-1-0に記憶されている検証対象ページブロックT301-1-0の外部メモリ7のアドレスEaddr(T301-1-0)を、バッファブロック単位にバッファ領域管理部83bに記憶し、検証処理を終了する。
<テーブルブロックに関する置き換え処理の詳細>
テーブルブロックに関する置き換え処理は、先で説明した図15の置き換え処理を流用して説明する。ここでは、置き換え処理を発生させたテーブルブロックをT301-1-0とし、最も使用されていないテーブルブロックをT301-1-511として説明する。テーブルブロックの置き換えを行う場合には、そのテーブルブロックの関連ブロックも共に内部メモリ8から外部メモリ7へ追い出される。すなわち、テーブルブロックT301-1-511が置き換え対象となる場合、テーブルブロックT301-1-511から参照可能であり内部メモリ8に存在するデータブロックB301-1-511-0〜B301-1-511-511も、テーブルブロックT301-1-511と共に、置き換え対象として選択される。この場合には、セキュアVMM68は、テーブルブロックT301-1-511の上位のテーブルブロックT301-1に含まれるテーブルエントリE301-1-511を無効にする。ただし、本実施形態において必ずしも全ての関連ブロックを置き換え対象とする必要はない。例えば、適切なバッファ管理が実行された場合には、データブロックB301-1-511-0〜B301-1-511-511は、テーブルブロックT301-1-511の追い出し処理後であっても内部メモリ8に存在し続けていてもよい。関連ブロックの一部がキャッシュされているようなデータ管理方法としては、ファイルシステムのディレクトリキャッシュなどで用いられる手法を適用することができる。
セキュアVMM68は、置き換え処理を開始し、ステップS301において、内部メモリ8の置き換え対象テーブルブロックを選択する。セキュアVMM68は、置き換えアルゴリズムに基づいて、テーブルブロックT301-1-0の置き換え対象としてテーブルブロックT301-1-511を選択する。
セキュアVMM68は、ステップS302において、置き換え対象テーブルブロックT301-1-511、関連ブロックであるデータブロックB301-1-511-0〜B301-1-511-511のうち内部メモリ8に存在するデータブロックを内部メモリ8から追い出す追い出し対象として選択し、ステップS303において追い出し処理を実行する。このように、置き換え対象がテーブルブロックの場合、置き換え対象テーブルブロックとその配下にある関連ブロックとが置き換え対象として選択される。
追い出し処理終了後、セキュアVMM68は、ステップS304において、置き換え対象が内部メモリ8に存在するか否かチェックする。置き換え対象の置き換え処理が全て終了し、置き換え対象の全てが内部メモリ8に存在しなくなるまで、ステップS302以降の処理が繰り返される。セキュアVMM68は、置き換え対象が内部メモリ8に存在しなくなると、置き換え処理を終了する。
上述の置き換え処理終了後、内部メモリ8の検証バッファ領域72には、テーブルブロックT301-1-511とカウンタブロック、及び、内部メモリ8に存在した関連ブロックに応じた空き領域が確保される。
上記のようなテーブルブロックに関する置き換え処理と、上記図13に示す情報処理装置65の構成とを関連付けて説明する。
バッファ領域管理部83bは、検証管理部79から要求を受け、ステップS301において、最も使用されていないテーブルブロックT301-1-511と、このテーブルブロックT301-1-511の配下にある関連ブロックとを置き換え対象として選択する。
バッファ領域管理部83bは、ステップS302において、置き換え対象のテーブルブロックT301-1-511及び関連ブロックのいずれかを、追い出し対象として選択し、ステップS303において、追い出し処理を実行する。
バッファ領域管理部83bは、ステップS304において、置き換え対象の全てが内部メモリ8から追い出されるまで追い出し処理を繰り返す。
<テーブルブロックに関する追い出し処理の詳細>
テーブルブロックに関する追い出し処理は、先で説明した図16のフローチャートを流用して説明する。ここでは、追い出し対象がテーブルブロックT301-1-511の場合を例として説明する。このテーブルブロックT301-1-511のカウンタ値C301-1-511は、内部メモリ8に記憶されている。テーブルブロックT301-1-511のMAC値M301-1-511は、外部メモリ7に記憶されている。外部メモリ7のMAC値M301-1-511は、外部メモリ7に記憶されているテーブルブロックT301-1-511のMAC値である。よって、内部メモリ8で更新されたテーブルブロックT301-1-511が外部メモリ7へ書き戻される場合には、MAC値M301-1-511の更新処理が必要となる。一方、内部メモリ8のテーブルブロックT301-1-511が更新されなかった場合、外部メモリ7と内部メモリ8でテーブルブロックT301-1-511の内容に差がないことから、MAC値M301-1-511の更新処理は必要ない。
セキュアVMM68は、テーブルブロックT301-1-511の追い出し処理を開始し、ステップS401において、追い出し対象のテーブルブロックT301-1-511の内容に更新があるか確認する。
更新がない場合、セキュアVMM68は、ステップS405の内部メモリ8の領域の解放へ進む。
更新がある場合は、セキュアVMM68は、ステップS402において、テーブルブロックT301-1-511のMAC更新処理を行う。セキュアVMM68は、テーブルブロックT301-1-511の上位の検証ブロックのカウンタブロックT302-1に含まれるカウンタ値C301-1-511をインクリメントし、セキュアDMAコントローラ52は、テーブルブロックT301-1-511、変換リストを用いて変換された外部メモリ7のアドレスEaddr(T301-1-511)、インクリメントされたカウンタ値C301-1-511に基づいて、テーブルブロックT301-1-511の新しいMAC値M301-1-511を生成する。
その後、セキュアVMM68は、ステップS403において、内部メモリ8の変換リストを用いてテーブルブロックT301-1-511の書き出し先となる外部メモリ7のアドレスEaddr(T301-1-511)を決定する。
セキュアDMAコントローラ52は、ステップS404において、テーブルブロックT301-1-511を外部メモリ7のアドレスEaddr(T301-1-511)に書き出し、生成されたMAC値M301-1-511を外部メモリ7のMACブロックT303-1の所定の場所に書き出す。
テーブルブロックT301-1-511に内容の更新がない場合、又は、MAC更新とデータの書き出しが実行された場合、セキュアVMM68は、ステップS405において、テーブルブロックT301-1-511を指すテーブルエントリE301-1-511の参照先アドレスを外部メモリ7のアドレスEaddr(T301-1-511)に書き換え、テーブルエントリE301-1-511を無効にする。そして、セキュアVMM68は、バッファ管理情報領域73に記憶されているテーブルブロックT301-1-511に関する制御情報を削除し、検証バッファ領域72においてテーブルブロックT301-1-511の記憶領域を解放する。
この処理によって、検証バッファ領域72にテーブルブロックとカウンタブロックサイズの空き領域が生まれる。最後に、セキュアVMM68は、追い出し処理を終了する。
上記のようなテーブルブロックに関する追い出し処理と、上記図13に示す情報処理装置65の構成とを関連付けて説明する。
バッファ領域管理部83bは、テーブルブロックT301-1-511の追い出し処理を開始し、ステップS401において、追い出し対象のテーブルブロックT301-1-511の内容に更新があるか判断する。更新がない場合、処理はステップS405の検証記憶部84の領域の解放へ進む。
更新がある場合、検証情報生成部80は、ステップS402において、テーブルブロックT301-1-511のMAC更新処理を行う。検証情報生成部80は、テーブルブロックT301-1-511の上位検証ブロックのカウンタブロックT302-1に含まれるカウンタ値C301-1-511をインクリメントする。検証情報生成部80は、テーブルブロックT301-1-511、変換リストを用いて変換された外部メモリ7のアドレスEaddr(T301-1-511)、インクリメントされたカウンタ値C301-1-511に基づいて、テーブルブロックT301-1-511の新しいMAC値M201-1-511を生成する。
その後、参照関係更新部83aは、ステップS403において、検証記憶部84の変換リストを用いてテーブルブロックT301-1-511の書き出し先となる外部メモリ7のアドレスEaddr(T301-1-511)を決定する。外部書出部82は、ステップS404において、テーブルブロックT301-1-511を外部メモリ7のアドレスEaddr(T301-1-511)に書き出し、生成されたMAC値M301-1-511を外部メモリ7のMACブロックT303-1の所定の場所に書き出す。
テーブルブロックT301-1-511が更新されていない場合、又は、MAC更新と書き出しが完了済みの場合、ステップS405において、参照関係更新部83aは、テーブルロックT301-1-511を指すテーブルエントリE301-1-511の参照先アドレスを外部メモリ7のアドレスEaddr(T301-1-511)に書き換え、テーブルエントリE301-1-511を無効にする。そして、バッファ領域管理部83bは、バッファ管理情報領域72に記憶されたテーブルブロックT301-1-511に関する制御情報を削除し、検証バッファ領域72においてテーブルブロックT301-1-511が記憶されていた領域を解放する。この処理によって、検証バッファ領域72にテーブルブロックサイズの空き領域が確保される。最後に、バッファ領域管理部83bは、追い出し処理を終了する。
上記のようなテーブルブロックに対する各種処理は、例えば、データブロックのアドレス解決、検証、置き換え、追い出しの各処理において、必要なテーブルブロックが内部メモリ8に記憶されていない場合に実行される。
以下で、本実施形態に係る情報処理装置65が特定のアーキテクチャを持つ場合について説明する。
X[A:B]は、値XのAビット目からBビット目までの範囲を表すとする。例えば、X[63:6]は、値Xの63ビットから6ビット目までの範囲を表す。
図17は、特定のアーキテクチャのテーブルエントリ構造を例示するデータ構造図である。
テーブルエントリTE1は、データブロックを参照するレベル3のテーブルエントリとする。
テーブルエントリTE2は、データブロックを参照するレベル1又はレベル2のテーブルエントリとする。
テーブルエントリTE3は、テーブルブロックを参照するテーブルエントリとする。
ソフトウェア使用予備フィールド85は、TE1[58:55]又はTE2[58:55]とする。ソフトウェア使用予備フィールド85は、テーブルエントリTE1又はTE2の上位ブロック属性フィールド86内に配置されている。ソフトウェア使用予備フィールド85は、特に使用用途が定義されていないデータフィールドである。ソフトウェア使用予備フィールド85は、ハードウェアレベルで未定義とする。
HAPフィールド87は、TE1[7:6]又はTE2[7:6]とする。HAPフィールド87は、テーブルエントリTE1又はTE2の下位ブロック属性フィールド88内に配置されている。HAPフィールド87は、アクセス制御を行うための情報を格納する。
図18は、HAPフィールド87の仕様を例示するテーブルである。
HAPフィールド87は、アクセス制御を行うための情報を格納する。
HAP[1:0]が00の場合、アクセス権限は無効を示す「No Access」とする。
HAP[1:0]が01の場合、アクセス権限は読み込みを示す「Read-only」であるとする。
HAP[1:0]が10の場合、アクセス権限は書き込みを示す「Write-only」であるとする。
HAP[1:0]が11の場合、アクセス権限は読み出し及び書き込みを示す「Read/Write」であるとする。
テーブルエントリTE1及びテーブルエントリTE2は、上位ブロック属性フィールド86内のソフトウェア使用予備フィールド85、下位ブロック属性フィールド88を備える。これに対して、テーブルエントリTE3は、テーブルエントリTE1及びテーブルエントリTE2とは異なるデータフィールドを定義している。しかしながら、TE3[58:52]とTE3[11:2]は未定義である。テーブルエントリTE2の未定義フィールドは、テーブルエントリTE1及びTE2の対応するデータフィールドと同様の定義により利用可能である。以下では、TE1[58:55]、TE2[58:55]、TE3[58:55]のデータフィールドを、Entry[58:55]と表す。TE1[7:6]、TE2[7:6]、TE3[7:6]のデータフィールドを、Entry[7:6]と表す。
MMU46は、ステージ2のアドレス変換時に、HAP[1:0]=No Accessであることを検出した場合、フォールトを発生し、セキュアVMMモードとなる。本実施形態においては、MMU46がHAPに基づいてフォールトを発生する仕組みを利用して検証を行う。
ソフトウェア使用予備フィールド85のEntry[58:55]は4ビットである。ソフトウェア使用予備フィールド85のEntry[58:55]は、2ビットの予備フラグA、1ビットの予備フラグV、1ビットの予備フラグIを含む。
予備フラグAは、本来のHAPデータの保存に用いられる。
予備フラグVは、検証の有無を示すために用いられる。
予備フラグIは、未定義とする。
HAPが格納されるEntry[7:6]は、検証の実施/未実施を管理する。無効であるテーブルエントリ(未検証ブロックを指すテーブルエントリ)では、HAP=No Accessとする。本来のHAPは、予備フラグAに保存する。有効であるテーブルエントリでは、HAPに、No Accessではない他の値が格納される。
特定のアーキテクチャ環境では、アドレス解決を行う際に、HAPを利用して意図的にMMU46にフォールトを発生させる。これにより、セキュアVMM68に制御を移すことが可能となり、検証処理を実行することができる。検証処理終了後は、予備フラグAに保存していた本来のHAPデータをHAPフィールド87に書き込む。
図19は、特定のアーキテクチャにおいてデータ参照要求が発生した場合のアドレス解決処理を例示するフローチャートである。ソフトウェアであるセキュアVMM68によって実現される処理は、先で述べた処理と同様である。この図19の説明では、セキュア検証子ツリー122はMAC+カウンタ構造を持つとする。データブロックB301-1-0-511に対して、データ参照要求が発生した場合を例として説明する。
HAPに基づくアクセス制御は、検証実行時に、所定機能を実現する。具体的には、例えば、HAP=Read-onlyであるテーブルエントリに対して、Read/Writeアクセスを行った場合には、ページ保護エラーが発生する。
MMU46は、データブロックB301-1-0-511のアドレス解決処理を開始し、ステップS501において、ページウォークによるアドレス解決を行う。
MMU46は、ステップS502において、テーブルブロックT301のテーブルエントリE301-1をチェックする。MMU46は、テーブルエントリE301-1が有効(HAP=Other)であることから、テーブルエントリE301-1を参照する。
MMU46は、ステップS503において、データブロックB301-1-0-511までのアドレスが解決したかチェックする。
アドレスは未解決であるため、MMU46は、ステップS501のページウォークを繰り返す。
MMU46は、ステップS502において、テーブルブロックT301-1-0のテーブルエントリE301-1-0-511をチェックする。
テーブルエントリE301-1-0-511が無効(HAP=No Access)の場合、MMU46は、フォールトを発生させ、制御をセキュアVMM68に移す。
セキュアVMM68は、ステップS504において、テーブルエントリE301-1-0-511の予備フラグAをチェックする。
セキュアVMM68は、テーブルエントリE301-1-0-511が無効である場合(予備フラグA=No Access)、ステップS505において、ページ保護エラーハンドラに制御を移し、処理を終了する。
予備フラグAがNo Accessではない場合(予備フラグA=Other)、セキュアVMM68は、ステップS506において、テーブルエントリE301-1-0-511の予備フラグVをチェックする。
セキュアVMM68は、参照ブロックが検証対象外の場合(予備フラグV=NV)、ステップS507において、内部エラーハンドラに制御を移し、処理を終了する。
セキュアVMM68は、参照ブロックが検証対象の場合(予備フラグV=V)、ステップS508において、データブロックB301-1-0-511の検証処理を行う。セキュアVMM68は、検証処理終了後、無効であったテーブルエントリE301-1-0-511を有効にする。
これにより、データブロックB301-1-0-511の参照が可能となる。セキュアVMM68は、予備フラグAの値をHAPに書き込み、制御をMMU46に戻す。
MMU46は、ステップS503において、データブロックB301-1-0-511までのアドレスが解決したかチェックする。
データブロックB301-1-0-511までアドレスが解決した場合には、MMU46は、ステップS509において、データ参照処理を再開し、アドレス解決処理を終了する。
以上説明したように、本実施形態においては、セキュアページテーブルツリー121と改ざん検証用のセキュア検証子ツリー122のグラフ構造を整合させ、内部メモリ8の記憶状態を安全に管理し、効率よく検証処理を実行することができ、外部メモリ7への改ざん攻撃から厳密に情報処理装置65を保護することができる。
本実施形態においては、外部メモリ7から内部メモリ8へテーブルブロックと検証ブロックとが同時に読み込まれ、同時に検証される。これにより、情報処理装置65は、改ざん可能な外部メモリ7のページテーブルツリー9、検証子ツリー10及びデータを、完全性を保証した状態で、効率よく、安全に、内部メモリ8に記憶し、使用することができる。
本実施形態においては、更新された内部メモリ8のセキュアページテーブルツリー121又はデータが外部メモリ7へ書き戻される場合に、この書き戻されるページテーブル又はデータから検証子が計算され、検証子に基づいて内部メモリ8に記憶されているセキュア検証子ツリー122が更新される。これにより、更新後に、ページテーブル又はデータが内部メモリ8に読み込まれる場合に、読み込まれるページテーブル又はデータの改ざんを検知することができる。
本実施形態においては、ページテーブルが内部メモリ8から外部メモリ7へ書き出され、その後、当該ページテーブルが外部メモリ7から内部メモリ8へ読み込まれ、当該ページテーブルのテーブルエントリによって参照されるページテーブル又はデータが未だ内部メモリ8に記憶されていない場合に、当該テーブルエントリが無効を示すように管理される。これにより、下層のページテーブル又はデータに対する参照処理及び検証処理を正しく実行することができる。
[第3の実施形態]
本実施形態は、上記第2の実施形態の変形例である。本実施形態においては、ゲストOSの不具合、誤動作によってセキュアVMM68の情報が破壊されることを防止するために、セキュアVMM68の情報がゲストOSのアクセス領域から分離される。
(中間物理アドレスレベルの制限)
まず、ゲストOSのアクセス可能なアドレス領域の制限について説明する。ゲストOSに対するアドレス領域の制限には2種類の制限形態がある。
第1の制限形態は、ゲストOSのアクセス可能な中間物理アドレス領域を制限する。
図20は、本実施形態に係るセキュアページテーブルツリー121及びセキュア検証子ツリー122に関する仮想アドレス領域の第1の制限形態を例示するブロック図である。
この図20では、ステージ2ページテーブルツリーの基本構造を例示している。ステージ2ページテーブルツリーは、中間物理アドレスから物理アドレスへの変換を定義する。
ステージ2ページテーブルツリー全体をT400と表記し、データ全体をB400と表記する。
セキュアVMM68は、MMU46のアドレス変換機能を用いてメモリにアクセスする仮想アドレスモードと、MMU46を利用しない実アドレスモードとの双方で、メモリにアクセス可能である。
セキュアVMM68は、実アドレスモードにおいて無条件で全てのメモリ空間にアクセス可能である。セキュアVMM68は、実アドレスモードを、割込ベクタを設定する際及び最初にページテーブルを設定する際に用いる。
セキュアVMM68は、仮想アドレスモードにおいて、ステージ2ページテーブルツリーT400による変換対象となっている全ての領域にアクセス可能である。
上記の図7に示す物理アドレス領域702,703に配置されたページテーブルは、階層構造に一致した検証子を持つ。内部メモリ8を除く全てのメモリ領域が検証子のツリーにより検証可能である。
誤動作による破壊防止のために、一般的に、ゲストOSに対しては、ゲストOS自身に割り当てられたステージ2ページテーブルへの参照ができないように、アクセス制御がなされる。本実施形態では、このようなゲストOSに対するアドレス領域の制限を例として説明する。
中間物理アドレス空間89は、中間物理アドレス空間全体を表す。
中間物理アドレス空間89のうちのアドレス領域89aは、セキュアVMM68がアクセス可能であり、ゲストOSがアクセス不可である。
中間物理アドレス空間89のうちのアドレス領域89bは、ゲストOSとセキュアVMM68とが共通にアクセス可能な領域である。
セキュアVMM68は、アドレス領域制限レジスタ90に、アドレス領域89bをセットする。換言すれば、アドレス領域制限レジスタ90には、ゲストOSがアクセス可能なアドレス領域が設定される。アドレス領域制限レジスタ90によるアドレス領域の制限は、ゲストOSの実行中に適用される。
ゲストOSは、トップレベルのページテーブルT401からアドレス解決を開始する場合には、潜在的にはページテーブルT401にマッピングされた全ての物理アドレス領域にアクセス可能である。
しかし、上記の中間物理アドレスレベルのアドレス領域の制限を行うことにより、変換された物理アドレスレベルでアクセス可能なアドレス領域が、物理アドレス空間91のうちのアドレス領域91aに制限される。したがって、ゲストOSから、外部メモリ7に記憶されているセキュアVMM68のイメージがアクセスされることを禁止することができる。また、内部メモリ8のセキュアVMMプログラム領域77がゲストOSからアクセスされることを禁止することができる。
このような中間物理アドレスレベルでのアクセス領域の制限は、MMU46によるアドレス変換時に、中間物理アドレス空間89をチェックすることで実現可能である。
第2の制限形態では、最上位のページテーブルを指定するレジスタ64により、ゲストOSのアドレス領域が制限される。
特定のアーキテクチャでは、制御レジスタ設定により、セキュアページテーブルツリー121のアドレスを示すレジスタ64のポイント先を、レベル2以降のページテーブルに設定可能である。
図21は、本実施形態に係るセキュアページテーブルツリー121及びセキュア検証子ツリー122に関する仮想アドレス領域の第2の制限形態を例示するブロック図である。
例えば、レジスタ64は、レベル2のページテーブルT401-3を指すポインタを設定する。このように、最上位のページテーブルを適宜設定可能とすることにより、アクセス可能なアドレス領域を、上記図20の場合と同じ物理アドレス領域91aに制限することができる。この図21の例では、中間物理アドレス領域89cが物理アドレス領域91aにマップされる。
(セキュア検証子ツリー122とアクセス制御との関係)
レジスタ64による制限を用いる場合、ゲストOS実行時に使用されるレジスタ64は、セキュアページテーブルツリー121の一部であるレベル2のページテーブルT401-3を指す。当然、このページテーブルT401-3を最上位とするセキュア検証子ツリーは、レベル1のページテーブルを最上位とする全セキュア検証子ツリー122の一部であり、この一部のみではツリー検証を行うことができない。しかし、検証の実行はレベル1のページテーブルにアクセス可能なセキュアVMM68が行うため、ゲストOSデータの検証発生時でも、上位の検証子へのアクセスが可能であり、ツリー検証を行うことができる。
具体的には、ゲストOSの実行中にページテーブルT401-3が不在だった場合、ページフォールトが発生する。フォールトが発生するとセキュアVMM68に制御が移り、レジスタ64はレベル1のテーブルブロックT401を参照するよう設定される。この後に、セキュアVMM68は、フォールトが発生したレベル2のページテーブルT401-3を、上位のレベル1のMACブロックT402を用いて、上記第2の実施形態で説明した検証処理に基づいて検証を行う。
図22は、アドレスマップと物理アドレス領域との関係を例示するブロック図である。この図22では、上記図7で示される内部メモリ8、マスクROM69、セキュアVMMプログラム領域701、物理アドレス領域702からセキュアOSページテーブル領域704、セキュアVMM作業領域705及びセキュアVMM MAC領域706、予備領域710、非セキュアOS領域75、予備領域711、セキュアOS領域76ごとに、上記図7の符号、物理アドレス領域、ブート時検証の有無、検証の有無、未検証状態ブロックの符号、サイズを示している。
以上説明した本実施形態においては、ゲストOSとセキュアVMM68とでアクセス可能なアドレス領域を変えることができる。これにより、例えば、ゲストOSとセキュアVMM68とがセキュアページテーブルツリー121を共有しつつ、セキュア検証子ツリー122を用いた検証に関連するデータを誤動作から保護することができる。
より具体的に説明すると、多機能のゲストOSは、潜在的な脆弱性を持つ場合がある。本実施形態では、ゲストOSのアクセス領域を限定し、これによりゲストOSの脆弱性に基づく誤動作からセキュアVMM68を保護することができる。本実施形態において、セキュアVMM68は、自身の作業領域をゲストOSから保護することができ、セキュア検証子ツリー122に基づく改ざん検証によってセキュアページテーブルツリー121を保護することができる。
本実施形態においては、ゲストOSが誤動作した場合であっても、セキュアVMM68の作業領域を保護し、セキュアVMM68の健全性を保証することができる。本実施形態においては、ゲストOSとセキュアVMM68とがセキュアページテーブルツリー121を共有することで、効率的な保証を実現することができる。
本実施形態においては、セキュアVMM68がゲストOSのアクセス可能なアドレス領域をレジスタ90にセットすること、又は、レジスタ64で示されるトップのページテーブルを任意に設定することにより、ゲストOSによってアクセス可能なアドレス領域を制限することができる。これにより、ゲストOSの不具合、誤動作によるセキュアVMM68の情報の破壊を防止することができる。
[第4の実施形態]
本実施形態においては、上記第2及び第3の実施形態の変形例について説明する。上記第3の実施形態では、ゲストOSとセキュアVMM68とがセキュアページテーブルツリー121を共有した構成で、ゲストOSがアクセス可能なアドレス領域を制限する例について説明した。
これに対して、本実施形態では、ゲストOSとセキュアVMM68が別々のセキュアページテーブルツリーを持つ場合について説明する。本実施形態では、例えば、ゲストOSとセキュアVMM68とが、個別のステージ2ページテーブルを持つことにより、ゲストOSがアクセス可能なアドレス領域を制限する例を説明する。
上記第3の実施形態において説明した上記図20及び図21は、セキュア検証子ツリーと一体化した状態でセキュアVMM68によって管理されるセキュアページテーブルツリーT400を例示している。
図23は、ゲストOSのステージ2ページテーブルツリーを例示するデータ構造図である。
ステージ2ページテーブルツリー全体をT500と表記する。
この図23のステージ2ページテーブルツリーT500は、ページテーブルT501〜T501-0-511を含む。ページテーブルT501-0-0〜T501-0-511は、データB401-3-0-0〜B401-3-0-511を参照する。データB401-3-0-0〜B401-3-0-511は、上記第3の実施形態においてゲストOSが参照可能なデータ領域91aに配置される。
例えば、初期状態では、上記図20及び図21に示すセキュアVMM68のレベル1のテーブルブロックT401及び検証ブロックT402だけが内部メモリ8に記憶されている。セキュアVMM68のレジスタ64は、テーブルブロックT401の内部メモリ8の記憶先であるIaddr(T401)に設定される。
ゲストOSの実行に先立って、セキュアVMM68は、ゲストOSのステージ2ページテーブルT501を検証し、その後内部メモリ8に記憶する。ここでページテーブルT501はゲストOS自身が管理して変更することが許されたステージ1ページテーブル(物理アドレス領域91a内に配置)ではなく、ゲストOS自身は操作できないことを前提としたステージ2ページテーブル(セキュアOSページテーブル領域704に配置)である。
ゲストOSのステージ2ページテーブルツリーT500には、検証子ツリーが付随していない。ステージ2ページテーブルツリーT500の検証と読み込みでは、セキュアVMM68がステージ2ページテーブルツリーT500を構成するテーブルブロックを、セキュアVMM68のステージ2ページテーブルツリーT400に付随するセキュア検証子ツリーに基づいて検証し、内部メモリ8に記憶する。
図24は、本実施形態に係るデータの検証、読み込み、アクセス制御を例示するフローチャートである。
ゲストOSの実行中は、レジスタ64にIaddr(T501)が設定されており、MMU46は、ステージ2ページテーブルツリーT500によるステージ2アドレス変換を実行する。MMU46は、ステップS601において、データ参照のフォールトが発生すると、ステップS602において、制御をMMU46からセキュアVMM68へ移行する。
セキュアVMM68は、ステップS603において、レジスタ64の値を、Iaddr(T401)に変更する。このとき、セキュアVMM68は、中間物理アドレスが0番地だったとすると、データブロックB401-3-0-0のデータを内部メモリ8に記憶する。
データブロックB401-3-0-0の検証を行うための検証子は、セキュアVMM68で管理されているステージ2ページテーブルツリーT400においてデータブロックB401-3-0-0を参照するテーブルブロックT401-3-0に付されている。そこで、ステップS604において、セキュアVMM68は、ステージ2ページテーブルツリーT400により、データブロックB401-3-0-0を参照するテーブルエントリE401-3-0-0を含むテーブルブロックT401-3-0のアドレスを逆解決する。このようなアドレス逆解決の方法は当業者にはよく知られている。本実施形態においては、管理用のステージ2ページテーブルツリーT400は、アドレス変換を行わない。管理用のステージ2ページテーブルツリーT400を用いるることで、データブロックB401-3-0-0を参照するテーブルエントリE401-3-0-0を特定することができる。
セキュアVMM68は、ステップS605において、上記第2の実施形態の同様の処理で、ステージ2ページテーブルツリーT400に付されるセキュア検証子ツリーによる検証処理を実行する。
その後、セキュアVMM68は、ステップS606において、2つのステージ2ページテーブルT400,T500について、それぞれデータブロックB401-3-0-0を参照するテーブルエントリE401-3-0-0及びE501-1-0-0の参照先を、データブロックB401-3-0-0の内部メモリ8の記憶先であるIaddr(B401-3-0-0)に変更する。
次に、セキュアVMM68は、ステップS607において、ゲストOS用のレジスタ64にIaddr(T501)を設定し、ゲストOSへの実行切り替えを行い、ステップS608において、ゲストOSの実行を再開する。
以上説明した本実施形態においては、データブロックの読み込みについて説明したが、ゲストOSのステージ2ページテーブルツリーT500のテーブルブロックが未読み込みの場合も同様の処理により内部メモリ8への読み込みが実行される。
本実施形態においては、ゲストOSのステージ2ページテーブルツリーT500とセキュアVMM68のステージ2ページテーブルツリーT400とが完全に独立している。これにより、ゲストOSから参照可能な中間物理アドレスのメモリ配置とアクセス制御の自由度を高くすることが可能である。さらに、セキュアVMM68のステージ2ページテーブルツリーT400に付属するセキュア検証子ツリーによりメモリ検証を行うことができる。
本実施形態においては、ゲストOSのメモリ配置の自由度を高くすることによって、データの内部読み込み時に2つのセキュアページテーブルツリーT400,T500に対してデータブロック参照先を変更する書き換え処理が必要となる。この負荷を軽減する方法として、ゲストOSとセキュアVMM68は、ステージ2ページテーブルツリーT400,T500におけるレベル1及びレベル2を個別に持ち、レベル3のページテーブルをゲストOSとセキュアVMM68で共有してもよい。この場合、ゲストOSのメモリマップの自由度は、レベル3のページテーブル1個単位、この場合には2メガバイト単位と粒度が大きくなるが、頻度の高いデータブロックの読み込み処理によってステージ2ページテーブルツリーT400,T500の書き換え負荷が大きくなることを防止することができる。
システムアーキテクチャによっては通信入出力などの特殊バッファメモリに、特定の物理アドレス領域(仮想化されている場合は中間物理アドレス領域)を割り当てることがある。複数のOSでページテーブルが共有され、1つの物理アドレス領域に1つの物理アドレスイメージしか割り当てられない場合には、複数のゲストOSを並列動作させることが困難である。ゲストOS間だけでなく、ゲストOSとセキュアVMM68との間でも、同様の衝突が発生する場合がある。しかしながら、本実施形態においては、ゲストOSごとに、個別の2ページテーブルツリーT400,T500を持つことができ、これにより、ゲストOSごとに、個別の中間物理アドレス領域を割り当てることができる。
[第5の実施形態]
本実施形態においては、上記第2乃至第4の実施形態の変形例について説明する。本実施形態においては、読み込みに伴う検証とともに復号を行う。また、本実施形態においては、書き出し時に暗号化を行う。例えば、単純なMACの代わりに、認証付き暗号利用モードであるCCM(Counter with CBC-MAC)モードを利用する。これにより、検証子の計算と同時に効率的に暗号化を行うことができる。暗号化及び復号は、MACの計算及び検証に併せて実行されてもよいが、他の様々な実装により暗号化及び復号が実行されてもよい。
本実施形態のように、内部メモリ8から外部メモリ7へ移動されるページテーブル又はデータを暗号化し、外部メモリ7から内部メモリ8へ移動されるページテーブル又はデータを復号することにより、完全性に加えて、機密性を保証することができる。
[第6の実施形態]
本実施形態においては、上記第2乃至第5の実施形態の変形例について説明する。
本実施形態では、データブロックの改ざん検証の計算に中間物理アドレスを用い、ゲストOSごとのセキュアページテーブルツリー及びセキュア検証子ツリーを備える場合を説明する。
本実施形態においては、ゲストOSごとのセキュアページテーブルツリーが、それぞれ独立にセキュア検証子ツリーと対応付けられる。本実施形態においては、上記第4の実施形態のように、ページテーブル又はデータの読み込みに基づいて、影響を受けるゲストOSに対するセキュアページテーブルツリーとセキュアVMM68に対する共通のセキュアページテーブルとを更新する必要はなく、影響を受けるゲストOSに対するセキュアページテーブルツリーだけを更新すればよい。
図25は、本実施形態に係るゲストOSごとのセキュアページテーブルツリーを例示するデータ構造図である。
第1のゲストOSのセキュアページテーブルツリーT600は、データB600を参照する。セキュアページテーブルツリーT600には、第1のゲストOSのセキュア検証子ツリー921が付されている。図25において、第1のゲストOSは、実行中であり、レジスタ64には、セキュアページテーブルツリーT600の最上位テーブルT601のアドレスが格納される。
第2のゲストOSのセキュアページテーブルツリーT700は、データB700を参照する。ページテーブルツリーT700には、第2のゲストOSのセキュア検証子ツリー922が付されている。図25において、第2のゲストOSは、待機状態とする。
レジスタ64には、第1のゲストOSの実行中に、第1のゲストOSに対応するセキュアページテーブルツリーT600のアドレスが設定される。レジスタ64には、第2のゲストOSの実行中に、第2のゲストOSに対応するページテーブルツリーT700のアドレスが設定される。図25では、第1のゲストOSが実行中であるため、レジスタ64に、第1のゲストOSに対応するセキュアページテーブルツリーT600のアドレスが設定されている。本実施形態では、内部メモリ8に読み込まれた状態のページテーブルによって形成されるツリー及び検証子によって形成されるツリーは、その時点で、レジスタ64から参照されアドレス変換に使われているか否かに関わらず、セキュアページテーブルツリー及びセキュア検証子ツリーと呼ぶ。
上記第3及び第4の実施形態と比較して、本実施形態は、以下の第1乃至第3の特徴を持つ。
本実施形態の第1の特徴は、ゲストOSのセキュアページテーブルツリーT600,T700ごとにセキュア検証子ツリー921,922を備えることである。
第2の特徴は、データとページテーブルとで検証子の計算に用いられるアドレスが異なることである。データブロックB601-0-0-0〜B601-0-0-511の検証子の計算に使うアドレス値としては、図3のような物理アドレスではなく中間物理アドレスを使うとする。
第3の特徴は、セキュア検証子ツリー921,922のルート検証情報131,132をゲストOSごとに個別に保持することである。ルート検証情報131,132は、秘密鍵と最上位の検証子との組み合わせとする。
図26は、本実施形態に係る情報処理装置の構成を例示するブロック図である。
情報処理装置93のMMU46は、レジスタ64を備える。検証管理部79は、ルート検証切替部(ルート検証情報切替部)79dを備える。記憶領域管理部83は、ルート検証特定部(ルート検証情報特定部)83dを備える。
本実施形態に係る情報処理装置93の動作において、上記第3及び第4の実施形態と異なるのは、検証の実行及び置き換えであり、他の動作は共通である。
本実施形態では、2つのゲストOSのそれぞれに個別のセキュア検証子ツリー921,922が用いられる場合を例として説明するが、さらに、セキュアVMM68のプログラムイメージおよびデータについて、独自のセキュア検証子ツリーが用いられてもよい。
ゲストOSのステージ2ページテーブルツリー及び検証子ツリーは、かなり大きなサイズとなる場合がある。ゲストOSのステージ2ページテーブルツリーはセキュアVMM68が管理するデータであり、当然改ざん防止が必要となる。セキュアVMM68で管理されるデータを独立のセキュア検証子ツリーで検証する場合の動作の説明は、ゲストOSのデータ検証とセキュアVMM68のデータ検証とが並行して行われるため煩雑となる。本実施形態では、説明を単純にするため、2つのゲストOSが独立のセキュア検証子ツリー921,922を持つ例を説明する。しかしながら、セキュアVMM68で管理されるデータを独立のセキュア検証子ツリーにより検証することも可能である。
(検証処理の詳細)
図27は、本実施形態に係る情報処理装置93の検証処理を例示するフローチャートである。この検証処理は、テーブルブロックT601-0-0の検証処理を例として説明する。
セキュアVMM68は、テーブルブロックT601-0-0の検証処理を開始し、ステップS701において、内部メモリ8の検証バッファ領域72に空き領域が存在しているかチェックする。
セキュアVMM68は、空き領域がない場合に、ステップS702の置き換え処理により領域の解放を行う。
続いて、セキュアVMM68はステップS703において、以下で行う検証処理のルート検証情報として、フォールト発生時に実行していた第1のゲストOSのルート検証情報131を選択する。
セキュアVMM68は、ステップS704において、検証対象テーブルブロックT601-0-0、この検証対象テーブルブロックT601-0-0に関連付けられている検証ブロックT602-0-0,T603-0-0を外部メモリ7のアドレスEaddr(T601-0-0)から内部メモリ8の検証バッファ領域72の空き領域へコピーする。
ステップS705において、セキュアDMAコントローラ52は、検証対象テーブルブロックT601-0-0及び検証ブロックT602-0-0,T603-0-0の検証処理を実行する。セキュアVMM68は、読み込まれた検証対象テーブルブロックT601-0-0及び検証ブロックT602-0-0,T603-0-0を記憶するバッファ領域ごとに、対応するゲストOSIDを記憶する。
その後の検証処理のステップS706〜S708は、上記第2の実施形態の図14のステップS205〜S207と同様である。
本実施形態に係るデータの検証処理と上記図26に示す情報処理装置93の構成との関係を、上記図27を流用して説明する。この説明では、上記図25のデータブロックB601-0-0-0に対して検証処理が実行される場合を例として説明する。
検証管理部79は、ステップS701において、記憶領域管理部83のバッファ管理部83bに、検証記憶部84の空きバッファ領域の有無を照会する。
空き領域がない場合、検証管理部79は、ステップS702において、記憶領域管理部83に読み込み済みバッファ領域の解放を要求し、空き領域のアドレスを取得する。
検証管理部79の検証情報取得部79aは、検証記憶部84に存在する上位検証ブロックのMACブロックT602-0-0及びカウンタブロックT603-0-0に含まれるMAC値M601-0-0-0及びカウンタ値C601-0-0-0を取得する。
本実施形態は、ルート検証切替部79dが、ステップS703において、鍵保存ユニット67に記憶されている現在実行中のゲストOSの秘密鍵、及び、必要であればルート検証情報131を取得し、検証情報取得部79aに引き渡す特徴を持つ。
検証情報取得部79aは、ステップS704において、外部読込部81を通じて、検証対象データブロックB601-0-0-0を外部メモリ7から検証記憶部84の空き領域に移動する。
検証情報計算部79cは、S705において、検証対象データブロックB601-0-0-0、上位のカウンタブロックT603-0-0に含まれているカウンタ値C601-0-0-0、秘密鍵に基づいて、MAC値を計算する。本実施形態は、記憶領域管理部83が、ルート検証特定部83dにゲストOSIDを通知し、ルート検証特定部83dがバッファ領域ごとにゲストOSIDを記憶する特徴を持つ。改ざん判定部79bは、計算されたMAC値を取得済みのMAC値M601-0-0-0と照合する。
ステップS706においてMAC値が整合せず検証に失敗した場合、検証管理部79は、ステップS707において、命令実行ユニット45に検証失敗を通知し、その後の処理を中止する。
ステップS706においてMAC値が整合して検証に成功した場合、検証管理部79は、参照関係更新部83aに読み込み成功を通知する。ステップS708において、参照関係更新部83aは、無効となっていたテーブルエントリの参照先アドレスとして、検証対象データブロックB601-0-0-0の検証記憶部84のアドレスIaddr(B601-0-0-0)を書き込む。
さらに、参照関係更新部83aは、データブロックB601-0-0-0の外部メモリ7のアドレスEaddr(B601-0-0-0)を、バッファブロック単位にバッファ管理情報領域73に記憶し、検証処理を終了する。
(検証子計算に用いるブロックアドレス)
本実施形態では、データブロックとテーブルブロックで検証子の計算に用いられるアドレスが異なる。
データブロックB601-0-0〜B601-0-511及びデータブロックB701-0-0〜B701-0-511の検証子の計算に使用されるアドレスは、物理アドレスではなく中間物理アドレスでもよい。本実施形態では、それぞれのセキュア検証子ツリー921,922に個別のルート検証情報131,132が割り当てられるため、複数のゲストOSがデータブロックの検証子の計算に中間物理アドレスを使ったとしても検証子の衝突は起きない。他方、検証子の計算に中間物理アドレスを使うことにより、ある中間物理アドレスに対応するデータが配置される物理アドレスは、自由に変更されてもよく、実装の自由度を上げることができる。
しかしながら、ステージ2セキュアページテーブルツリーT600,T700に含まれるテーブルブロックの検証子は、物理アドレスに基づいて計算される。テーブルブロックは、ゲストOSのコンテキストであり、テーブルブロックには中間物理アドレスが割り当てられていないためである。テーブルブロックの再配置ができなくても、テーブルブロックの参照関係を明示的に変更することで、同様の効果を得ることができる。
(追い出し処理の詳細)
図28は、本実施形態に係る情報処理装置93の追い出し処理を例示するフローチャートである。この図28に示す追い出し処理は、例えば、上記図15に示す置き換え処理で発生する。
追い出し対象となるテーブルブロックは、例えば上記図25で示す第2のゲストOSのテーブルブロックT701-0-0とする。
追い出し対象のテーブルブロックT701-0-0に代わって、内部メモリ8に記憶される読み込み対象のテーブルブロックは、第1のゲストOSのテーブルブロックT601-0-0とする。
追い出し対象のテーブルブロックT701-0-0のカウンタ値C701-0-0は、内部メモリ8に記憶されている。テーブルブロックT701-0-0のMAC値M701-0-0は、外部メモリ7に記憶されている。外部メモリ7のMAC値M701-0-0は、外部メモリ7のテーブルブロックT701-0-0のMAC値である。よって、内部メモリ8で更新されたテーブルブロックT701-0-0を外部メモリ7へ書き戻す場合には、MAC値M701-0-0の更新処理が必要となる。内部メモリ8のテーブルブロックT701-0-0が更新されていない場合は、外部メモリ7と内部メモリ8でテーブルブロックT701-0-0の内容に差分がないことから、MAC値M701-0-0の更新処理は必要ない。
上記第2の実施形態では、追い出し対象のテーブルブロックと、この追い出しの契機となる読み込み対象のテーブルブロックとは、同じゲストOSのページテーブル要素である。
しかしながら、本実施形態においては、追い出しの契機となる読み込み対象のページテーブルT601-0-0は、第1のゲストOSの実行によって発生しているのに対し、追い出し対象のページテーブルT701-0-0は第2のゲストOSの実行によって発生している。すなわち、本実施形態では、異なるゲストOSで、読み込みと追い出しとが発生している。さらに、この2つのゲストOSは、セキュアページテーブルツリーT600,T700、セキュア検証子ツリー921,922ばかりでなくルート検証情報131,132もそれぞれ個別に持つ。
このような特徴に基づいて、本実施形態では、セキュアVMM68は、ステップS801において、追い出し対象テーブルブロックT701-0-0の更新をチェックする。
追い出し対象テーブルブロックT701-0-0が更新されている場合、ステップS802において、セキュアVMM68は、追い出しを行うセキュアページテーブルツリーT700のルート検証情報132を取得し、追い出しを行うセキュアページテーブルツリーT700を認識する。すわわち、セキュアVMM68は、これまで実行中であった第1のゲストOSのルート検証情報131ではなく、第2のゲストOSのルート検証情報132を取得する。
セキュアVMM68は、ステップS803において、第2のゲストOSのルート検証情報132を使って、追い出し対象テーブルブロックT701-0-0のMAC更新処理を実行する。
セキュアVMM68は、ステップS804において、書き出し先物理アドレスの決定を、第2のゲストOSのセキュアページテーブルツリーT700の逆変換又は読み込み時の物理アドレスを保持しておくなどの方法により解決する。
ステップS805,S806は、上記第2の実施形態で説明した図16のステップS404,S405と同様である。
上記のようなページテーブルに関する追い出し処理及びその周辺処理と、上記図26に示す情報処理装置93の構成とを関連付けて説明する。
ステップS201、ステップS202において、検証管理部79は、記憶領域管理部83に空きバッファを要求する。記憶領域管理部83は、バッファ領域管理部83bを参照し、空きバッファを探す。
記憶領域管理部83は、空きバッファがない場合に、ステップS302において、追い出し対象ページテーブルとなるバッファ領域を所定のアルゴリズムにより選択する。バッファ書出管理部83cは、ステップS801において、バッファ領域管理部83bによって選択された追い出し対象ページテーブルに対して、当該バッファ領域の更新有無を判断する。
更新ありの場合、ステップS802において、ルート検証特定部83dは、追い出しを行う場合に、追い出しバッファに対応するゲストOSIDを取得し、対応するルート検証情報131又は132を取得し、セキュアページテーブルツリーT600,T700を認証する。
ルート検証特定部83dは、検証情報生成部80にルート検証情報131又は132を通知する。
ステップS803において、検証情報生成部80は、追い出し対象ページテーブルのMAC更新処理を行う。
ステップS804において、バッファ領域管理部83bは、書き出し先となる外部メモリ7のアドレスを決定する。
ステップS805において、外部書出部82は、追い出し対象ページテーブル及び生成された検証子を外部メモリ7に書き出す。
バッファ領域からの書き出しが完了すると、ステップS806において、参照関係更新部83aは、ページテーブルの参照関係を更新する。
(OS切替処理)
図29は、本実施形態に係るOS切り替え処理を例示するフローチャートである。
セキュアVMM68は、ステップS901において切替先のゲストOSを決定し、ステップS902においてルート検証情報121,122を切り替え、ステップS903においてレジスタ64を書き換え、ステップS904において切替先のゲストOSの実行を開始する。
以上説明した本実施形態においては、ゲストOSごとにセキュアページテーブルツリーT600,T700及びセキュア検証子ツリー921,922を生成し、ゲストOSの切り替えに応じてセキュアページテーブルツリーT600,T700及びセキュア検証子ツリー921,922を切り替える。これにより、ゲストOSごとのセキュアページテーブルツリーT600,T700の更新を効率的に行うことができる。
本実施形態においては、中間物理アドレスを用いてデータの検証子を計算することにより、データの改ざん検証に中間物理アドレスを用いることができる。
[第7の実施形態]
上記の各実施形態においては、情報処理装置65,93の全体のメモリイメージ、又は、それぞれのゲストOS全体のメモリイメージが、1つのルート検証情報13,131,132に集約される。換言すれば、上記各実施形態は、情報処理装置65,93全体のメモリ内容、又は、それぞれのゲストOSのメモリ内容が1ビットでも変化した場合、その変化はルート検証情報13,131,132の変化となって現れる性質を持つ。
本実施形態は、この性質を利用して、情報処理装置65,93のメモリ内容が、正常な動作を含めて、ある時点から変化していないことを確認する機能を実現する。この機能は、事故あるいは犯罪行為などが発生した時点の情報処理装置65,93の状態を保全(Perpetuation of evidence)する、いわゆるデジタルフォレンジックに関する。
図30は、本実施形態に係る情報処理システムを例示するシステム構成図である。
図31は、本実施形態に係る情報処理システムの構成を例示するブロック図である。
図32は、本実施形態に係る情報処理システムのフォレンジック処理を例示するフローチャートである。
情報処理システム94は、情報処理装置(データ参照装置)95と、管理サーバ96とが、ネットワーク97経由で通信可能に接続された構成を持つ。
情報処理装置95は、上記の情報処理装置65,93と同様の構成を持ち、さらに署名生成部951、メッセージ送信952を備える。
ステップS1001において、情報処理装置95に備えられるセキュアVMM68は、管理サーバ96からの通知又は自律的な異常検出機能などに基づいて、情報の保全処理を開始する。
ステップS1002において、セキュアVMM68は、保全処理対象がゲストOSの場合、ゲストOSの実行を停止し、停止状態において検証記憶部84に記憶されたデータ、セキュアページテーブルツリー121、セキュア検証子ツリー122を外部メモリ7に順次書き出す。
ステップS1003において、署名生成部951は、外部メモリ7への書き出しが完了すると、鍵保存ユニット67に記憶されているルート検証情報のMAC値とシステム時刻とに対して、鍵保存ユニット67に記憶されているフォレンジック署名用の秘密鍵を用いて、フォレンジック情報(署名情報)を生成する。
ステップS1004において、メッセージ送信部952は、生成されたフォレンジック情報を、ネットワーク97経由で所定の管理サーバ96に送信する。ルート検証情報のうちMAC生成用の秘密鍵は、外部に開示することが不適切であるため送信しない。
以上説明した本実施形態においては、情報処理装置95を回収した機関は、正当な法的権限に基づいて管理サーバ96で管理されているフォレンジック情報と、情報処理装置95内部のゲストOSのルート検証情報とを比較する。
もしフォレンジック情報が生成された時点より後に、何者かが情報処理装置95のデータを改ざんした場合、当然に、ルート検証情報が変化するため、不正を検出することができる。
フォレンジックの観点からは、メモリに対する物理攻撃だけでなく、正常な稼働による記録の上書きなども不正行為となる。本実施形態のようにフォレンジック情報を送信し、保存しておくことにより、このような不正行為を検出することができる。
[第8の実施形態]
本実施形態においては、上記第1乃至第7の実施形態の変形例について説明する。
本実施形態においては、外部メモリ7から内部メモリ8へコピーされるデータに対して、毎回検証を行うか、1回だけ検証を行うか、検証を行わないか、判断する。なお、本実施形態において、外部メモリ7から内部メモリ8へコピーされるテーブルに対しては、例えばデータ保護方式などのテーブルに含まれている各種の設定情報が外部の攻撃者によって変更されることを防止するために、毎回検証が行われるとする。これにより、データの検証のレベルを適切化することができ、プロセッサ66の処理速度が低下することを防止することができる。本実施形態において、電源投入から電源断までの間でプロセッサ66に読み込まれるデータの検証は毎回実行か、1回実行か、検証なしか判断されるが、例えば、検証の回数は、毎回又は1回に限定されるものではなく、2回以上など他の回数としてもよい。
外部メモリ7から内部メモリ8へコピーされるデータが毎回検証される場合には、プロセッサ66の稼働中にデータ保護が可能である。データ保護には、例えば、改ざんの検証、暗号化による安全性の確保などが含まれる。しかしながら、内部メモリ8のサイズより大きなデータがプロセッサ66で実行される場合(例えば、内部メモリ8のサイズより大きなプログラムがプロセッサ66で実行される場合)には、内部メモリ8に格納されていないデータ(例えば、プログラム)の参照が発生しやすく、キャッシュミスの発生が増え、ページングを実行するためにオーバーヘッドが大きくなる。
一方で、プロセッサ66が稼働中の不揮発メモリに対するデータ改ざん及び窃視攻撃は、プロセッサ66が停止中の不揮発メモリに対するデータ改ざん及び窃視攻撃と比較して困難性が高いため、プロセッサ66の用途によっては、あえてデータ改ざん及び窃視攻撃への対策をプロセッサ66の停止中に限定し、プロセッサ66が稼働中のデータ改ざん及び窃視攻撃による攻撃リスクを許容し、プロセッサ66が稼働中のオーバーヘッドの削減をデータ保護より優先してもよい。
以下では3種類のデータ保護方式が混在するプロセッサ66について説明する。3種類のデータ保護方式の動作概要を以下に示す。
第1のデータ保護方式は、毎回検証(ETV: Each Time Verification)である。毎回検証は、外部メモリ7から内部メモリ8へデータがコピーされる場合に、毎回、検証されたデータを内部メモリ8に格納する。例えば、内部メモリ8は、SRAM(Static Random Access Memory)のバッファメモリである。内部メモリ8からあふれるデータは外部メモリ7に書き出される。毎回検証では、内部メモリ8から外部メモリ7への書き出し時に、毎回、例えば、MAC値などの検証子が更新される。内部メモリ8から外部メモリ7への書き出し時に暗号化を行い、外部メモリ7から内部メモリ8への読み出し時に復号を行うとしてもよい。
第2のデータ保護方式は、1回検証(OTV: One Time Verification)である。1回検証は、電源投入後の初回のデータ参照時のみ、外部メモリ7のデータに対して直接検証を行う。外部メモリ7のデータが暗号化されている場合には、外部メモリ7のデータが復号される。その後、外部メモリ7のデータに対する2回目以降の参照では、外部メモリ7のデータが検証及び復号されることなく、直接参照される。プロセッサ66の電源断の前に、復号された状態のデータは、再度暗号化され、データに対する検証子が更新される。
第3のデータ保護方式は、検証なし(NOV: No Verification)である。検証なしでは、プロセッサ66は、外部メモリ7のゲストOSのデータを、検証処理を実行することなく直接参照する。
本実施形態において、電源投入及び電源断は、ゲストOSの再起動なしにソフトウェアの実行状態をメモリに維持したまま電源を断するいわゆるノーマリーオフ動作を含む。
複数のデータ保護方式が混在する場合には、悪影響を与える相互作用を排除する必要がある。本実施形態において、あるデータ(ページデータ)に対するデータ保護方式は、仮想マシンモニタ(セキュアVMM68)が管理する内部情報と、ページテーブルにおけるデータ保護方式の設定情報によって決められる。複数のデータ保護方式のいずれであっても、ページテーブルの改ざんが防止されることにより、外部の攻撃者がデータ保護方式を変更することはできない。
本実施形態では、複数のデータ保護方式ごとに、データが保護されるレベル、換言すればデータの安全性の高低、が異なる。しかしながら、複数のデータ保護方式のいずれであっても、データ保護方式を設定するページテーブル自体に対しては毎回検証が実行され、ページテーブルは保護され、稼働中のデータ改ざんを含む攻撃から保護される。、本実施形態の冒頭でも説明されているが、このように、ページテーブルに対して毎回検証を適用することで、ページテーブルに含まれる各種の設定情報の保護レベルを高くすることができる。したがって、本実施形態では、低い保護レベルのデータが改ざんされたとしても、その被害はより高い保護レベルのデータには及ばないことが担保できる。停止中のデータ改ざんにより、検証なしのデータ保護方式のデータが改ざんされたとしても、1回検証及び毎回検証のデータ保護方式のデータは、影響を受けない。また、ゲストOSがセキュアVMM68で管理されるページテーブルを直接操作することはできない。例えば、第1のゲストOSが、当該第1のゲストOSと第2のゲストOSとの間に共有メモリ領域を設定する場合、第1のゲストは、VMMにサービス要求を発行し、間接的にページテーブルの設定が変更される可能性はある。しかしながら、このようなページテーブルの設定の変更を許可する条件が十分に検討されていれば、第1のゲストOSから第2のゲストOSのデータを無差別に破壊するような攻撃は排除できる。したがって、複数のデータ保護方式が混在していても、本実施形態では、悪影響を与える相互作用を排除することができる。
(1回検証の動作)
外部メモリ7が不揮発性の主記憶装置の場合の1回検証の動作について説明する。
1回検証は、上記第2の実施形態で説明した図2と同様の構成によって実現可能である。
図33は、本実施形態に係るページテーブルエントリのフィールド形式を例示するデータ構造図である。この図33のページテーブルエントリは、上記図17のページテーブルエントリの変形例である。
データブロックを参照するテーブルエントリTE1,TE2は、ソフトウェア使用予備フィールド85を含む。
ソフトウェア使用予備フィールド85及び有効/無効フラグ854は、データ保護形式と保護対象データの状態とを制御するための制御フィールドとして用いられる。例えば、ソフトウェア使用予備フィールド85は、データ保護方式フィールド851、暗号化フィールド852、使用状態フィールド853を含む。
データ保護方式フィールド(PTF:Protection Type Field)851に設定される情報は、毎回検証、1回検証、検証なし、予備、のいずれかを示す。
暗号化フィールド852に設定されている情報は、暗号化による保護あり、又は、暗号化による保護なし、を示す。
使用状態フィールド853は、1回検証のために設けられているフィールドである。使用状態フィールド853に設定されている情報が使用中を示す場合、データは検証済み(暗号化ありの場合復号済み)であることを示す。使用状態フィールド853に設定されている情報が未使用(未検証)を示す場合、データは電源投入後、データが未参照の状態であり、データは未検証であることを示す。
さらに、ページテーブルエントリは、当該ページテーブルエントリが有効か無効かを示す有効/無効フラグ854を含む。
(複数のデータ保護方式の動作)
図34は、本実施形態に係る、データ保護方式ごとのデータのコピー状態及び検証状態を例示する状態遷移図である。この図34では、外部メモリ7がMRAMであり、内部メモリ8がSRAMであるとする。
図35は、複数のデータ保護方式におけるページテーブルエントリの制御フィールドの状態、ページテーブルエントリが有効か否かを示す有効/無効フラグ854、次回参照データの状態、次回参照データの状態を示す符号、の関係を例示する図である。有効/無効フラグ854は、換言すれば、アドレス変換の可能/不可能を表す。
例えば、使用状態フィールド853に1が設定されている場合には使用中を示し、0が設定されている場合には未使用を示す。
例えば、有効/無効フラグ854が1の場合は有効を示し、0の場合は無効を示す。有効/無効フラグ854が有効の場合、ページテーブルエントリで参照されるデータは命令実行ユニット45で利用可能である。有効/無効フラグ854が無効の場合、ページテーブルエントリで参照されるデータは命令実行ユニット45で利用可能ではない。
以下の説明で、次回参照データとは、ゲストOSのあるデータがコピーされた結果、同時に複数の場所(例えば、外部メモリ7と内部メモリ8の双方)に格納されている場合に、次にセキュアVMM68又はゲストOSによって実際に利用されるデータを意味する。例えば、毎回検証において、内部メモリ8にデータが読み込まれていない状態では、内部メモリ8に読み込まれる前の、外部メモリ7に格納されており未検証の状態ND1のデータが次回参照データである。そして、外部メモリ7の状態ND1のデータが検証され、内部メモリ8に読み込まれた場合、内部メモリ8に格納されている検証済みの状態ND2のデータが次回参照データである。内部メモリ8における次回参照データに対しては、ゲストOSによる参照又は追い出しが行われる。内部メモリ8の状態ND2のデータに対して検証子(たとえば、MAC値)が再計算され、状態ND2のデータが外部メモリ7に格納され、内部メモリ8の状態ND2のデータが消去された場合には、次は、外部メモリ7に格納されており未検証の状態ND1のデータが次回参照データになる。
毎回検証において、データは状態ND1と状態ND2との間を遷移する。状態ND1と状態ND2とでは、データイメージの格納される位置、検証実行及びMAC値計算などの状態が異なる。毎回検証では、次回参照データが状態ND1(外部メモリ7の未検証)の場合に、次回参照データに必ず検証を行い、暗号化保護ありの場合には次回参照データを復号し、次回参照データを内部メモリ8に格納する。命令実行ユニット45によるデータ参照は、状態ND2(内部メモリ8の検証済み)の次回参照データに対して行われる。状態ND2の次回参照データが外部メモリ7に書き出される場合には、次回参照データのMAC値が計算され、暗号化保護ありの場合には次回参照データが暗号化され、次回参照データが外部メモリ7に格納され、外部メモリ7に格納された次回参照データは状態ND1(外部メモリ7の未検証)となる。このように暗号化保護ありの場合、外部メモリ7から内部メモリ8への次回参照データのコピーにおいて復号が実行され、内部メモリ8から外部メモリ7への次回参照データの書き出しにおいて暗号化が実行される。再度、外部メモリ7から内部メモリ8へ次回参照データがコピーされる場合には、外部メモリ7の状態ND1の次回参照データが読み込まれ、検証され、復号され、内部メモリ8に格納され、次回参照データは状態ND2となる。データ参照は、状態ND2の次回参照データに対して行われる。
1回検証において、データは状態ND3と状態ND4との間を遷移する。本実施形態に係る1回検証では、状態ND3と状態ND4のいずれの場合であっても、データイメージの格納されるアドレスは同一としてもよい。1回検証では、次回参照データが状態ND3(外部メモリ7の未検証)の場合に、内部メモリ8へのコピーを行わずに外部メモリ7上で次回参照データの検証を行う。暗号化保護ありの場合には、外部メモリ7の次回参照データが検証とともに復号される。外部メモリ7で使用中の状態ND4(外部メモリ7の検証済み)の次回参照データに対するMAC値の更新は次回電源断までに行われる。電源断時には、状態ND4の次回参照データは、状態ND3(外部メモリ7の未使用)に戻される。暗号化保護ありの場合には、外部メモリ7における状態ND4の次回参照データに対して、再暗号化が実行され、その後、再暗号化された次回参照データは、状態ND3となる。
検証なしでは、外部メモリ7における状態ND5の次回参照データに対して検証が行われない。命令実行ユニット45は、外部メモリ7に格納されており未検証の状態ND5の次回参照データを参照可能である。この検証なしでは、電源断における終了処理も行われない。
なお、上記のデータ書き出し、MAC値の計算、データの再暗号化は、上記第2の実施形態で説明したように、データが更新された場合のみ行うとしてもよい。したがって、上記第2の実施形態のように、データ書き出し、MAC値の計算、データの再暗号化の前に、データ更新有無の判定が実行されてもよいが、以下では説明を簡素化するために、データが更新された場合の動作のみを説明する。
ページテーブルについては毎回検証を行うため、上記第1及び第2の実施形態と同様である。説明を簡素化するために、本実施形態では、データに対する検証のみを説明し、ページテーブルの検証については説明を省略する。
(検証処理)
以下においては、検証処理のうち上記第2の実施形態と異なる部分を説明する。
読み込み対象のデータのページテーブルエントリは、電源投入後の初期状態において、以下の状態のいずれかを含む。
毎回検証(ETV):D/Fフラグ=F:有効/無効フラグ=0(状態ND1)
1回検証(OTV):D/Fフラグ=F:有効/無効フラグ=0(状態ND3)
検証なし(NOV):D/Fフラグ=F:有効/無効フラグ=0(状態ND5)
初期状態において制御フィールドにこの情報が設定されるための電源断処理については後述する。
上述のように1回検証の場合であっても、ページテーブルはすべて毎回検証される。したがって、データ検証までの処理は上記第1及び第2の実施形態と同様である。以下では、上記第1及び第2の実施形態と異なる処理についてのみ説明する。
図36は、本実施形態に係る複数のデータ保護方式に対応する検証処理を例示するフローチャートである。
この図36は、上記図12のアドレス解決処理のステップS103における検証処理として実行可能である。
まず、ステップS20Aにおいて、セキュアVMM68は、データを参照するページテーブルエントリで設定されているデータ保護方式を判断する。
データ保護方式が毎回検証の場合には、処理はステップS201に移動する。
データ保護方式が1回検証の場合には、処理はステップS20Dに移動する。
ステップS203の後、セキュアVMM68は、ステップS20Bにおいて、内部メモリ8のデータに対する検証を実行する。このステップS20Bの処理は、後述の図37で説明する。ステップS20Bの後、処理はステップS205に移動する。
ステップS207の後、セキュアVMM68は、ステップS20Cにおいて、データを参照するページテーブルエントリの使用状態フィールド853に対して、使用中を示す情報を設定する(未使用を使用中に変更する)。その後処理は、正常終了する。
ステップS20Dにおいて、セキュアVMM68は、外部メモリ7のデータに対する検証を実行する。このステップS20Dの処理は、後述の図38で説明する。ステップS20Dでは、外部メモリ7に格納されている検証対象データを読み出し、検証のためのMAC値を計算し、検証を行うが、その際読み出したデータは内部メモリ8に転送しない。
ステップS20Eにおいて、セキュアVMM68は、検証が成功か否か判断する。
検証が失敗の場合には、処理はステップS206へ移動する。
検証が成功の場合には、ステップS20Fにおいて、セキュアVMM68は、データを参照するページテーブルエントリの使用状態フィールド853に対して使用中を示す情報を設定する。その後処理は、正常終了する。
1回検証で検証が成功した場合には、毎回検証で検証が成功した場合と同様、当該データを参照するページテーブルエントリが有効化され、データ参照処理が再開される。
図37は、内部メモリ8のデータに対する検証の処理の一例を示すフローチャートである。この図37は、上記図36のステップS20Bに相当する。
ステップS1101において、セキュアVMM68は、データを参照するページテーブルエントリの暗号化フィールド852で暗号化保護が設定されているか否か判断する。
暗号化保護が設定されていない場合、処理はステップS1103に移動する。
暗号化保護が設定されている場合、ステップS1102において、セキュアVMM68は、外部メモリ7のデータを復号し、内部メモリ8へ読み込む。
ステップS1103において、セキュアVMM68は、内部メモリ8のデータを検証する。
図38は、外部メモリ7のデータに対する検証の処理を例示するフローチャートである。この図38は、上記図36のステップS20Dに相当する。
ステップS1201において、セキュアVMM68は、データを参照するページテーブルエントリの暗号化フィールド852で暗号化保護が設定されているか否か判断する。
暗号化保護が設定されていない場合、処理はステップS1203に移動する。
暗号化保護が設定されている場合、ステップS1202において、セキュアVMM68は、外部メモリ7のデータを復号する。
ステップS1203において、セキュアVMM68は、外部メモリ7のデータを検証する。
(追い出し処理)
1回検証のデータは、単に1回しか検証が実行されないだけではなく、内部メモリ8に読み込まれない。したがって、1回検証のデータは、内部メモリ8から外部メモリ7への追い出し処理の対象にはならない。1回検証において、検証が1回実行され、使用中になったデータは、その後電源断まで、使用中の状態が維持され、ゲストOSによるデータ参照要求に対して、外部メモリ7のデータが直接参照される。
1回検証で、データを参照する上位ページテーブルが内部メモリ8から外部メモリ7へ追い出される場合に、参照先のデータに対するMAC値の計算などの処理は行われない。また、上位ページテーブルが内部メモリ8から外部メモリ7へ追い出される場合に、当該上位ページテーブル自体のMAC値は計算され、上位ページテーブルは内部メモリ8から外部メモリ7へ書き出されるが、上位ページテーブルのページテーブルエントリの無効化は行われない。したがって、もう一度、データが参照される場合には、対応する上位ページテーブルが検証され、上位ページテーブルが外部メモリ7から内部メモリ8に再度読み込まれるだけでよい。内部メモリ8に再度読み込まれた上位ページテーブルはすでに有効状態である。すなわち、上位ページテーブルのページテーブルエントリで”使用中”が設定されているデータの参照では、上位ページテーブルのページテーブルエントリの有効化は不要である。
(電源断前処理)
上記のように、上位ページテーブルのページテーブルエントリで”使用中”が設定されているデータは、その後電源断まで外部メモリ7で直接参照される。
電源断前には、使用中が設定されているデータに対して、MAC値の計算、暗号化、データを参照する上位ページテーブルのページテーブルエントリの更新、が実行される。これにより、次の電源投入時に、上記の検証処理が適切に動作する。
図39は、本実施形態に係る電源断前処理を例示するフローチャートである。
ステップS1301において、セキュアVMM68は、毎回検証が設定されている内部メモリ8のデータに対する追い出し処理を実行する。
ステップS1302において、セキュアVMM68は、1回検証が設定されている外部メモリ7のデータに対する更新処理を実行する。
ステップS1303において、セキュアVMM68は、上記図6で説明したように、内部メモリ8のページテーブルの追い出し処理を実行する。
図40は、本実施形態に係る1回検証が設定されているデータの更新処理を例示するフローチャートである。この図40は、上記図39のステップS1302に相当する。
この図40の処理は、使用中が設定されているデータの上位ページテーブルのページテーブルエントリに対して繰り返し実行される。
ステップS1401において、セキュアVMM68は、外部メモリ7に格納されているデータに対して、MAC値を更新し、暗号化保護が設定されている場合には暗号化を行う。
ステップS1402において、セキュアVMM68は、データを参照する上位ページテーブルのページテーブルエントリに対して、未使用及び無効を設定する。
図41は、本実施形態に係る外部メモリ7に格納されているデータに対する更新処理の一例を示すフローチャートである。この図41は、上記図40のステップS1401に相当する。
ステップS1501において、セキュアVMM68は、外部メモリ7に格納されているデータに対して、MAC値を計算する。
ステップS1502において、セキュアVMM68は、データを参照するページテーブルエントリの暗号化フィールド852で暗号化保護が設定されているか否か判断する。
暗号化保護が設定されていない場合、処理は終了する。
暗号化保護が設定されている場合、ステップS1503において、セキュアVMM68は、外部メモリ7のデータを暗号化する。
上記の電源断前処理により、1回検証のデータを参照するページテーブルエントリには、未使用かつ無効が設定される。このため、次回電源投入後のデータ参照時には、外部メモリ7のデータに対する複数回のデータ参照のうち前記複数回より少ない少なくとも1回に対して、検証が行われる。すなわち、あるデータに対する参照の初回には必ずアドレス変換の失敗が発生し、この失敗に基づいて、当該データに対して少なくとも1回の検証が実行される。
上記のように、電源断前処理では、上位ページテーブルのページテーブルエントリに使用中が設定されているすべてのデータに対して、MAC値計算と暗号化が実行され、ページテーブルエントリの設定が使用中から未使用に変更される。MAC値計算と暗号化とページテーブルエントリの設定変更とを併せて検証更新処理と呼ぶ。なお、上記第2の実施形態で説明されたカウンタ方式では、カウンタの更新も検証更新処理に含まれる。並行して、MAC値計算の影響を受ける上位ページテーブルについてもMAC値計算が行われ、全ての下位ページテーブルの検証更新処理が完了したページテーブルに対して逐次検証更新処理が実行される。1回検証のページテーブルに対する検証更新処理は毎回検証の場合と同様である。
上記図39のフローチャートでは、電源断前処理として、内部メモリ8に格納されており毎回検証が設定されているデータの外部メモリ7への追い出し処理、1回検証が設定されているデータの外部メモリ7での検証更新処理、内部メモリ8に格納されているページテーブルの追い出し処理を、逐次的に実行している。これらの処理は必ずしもこの順序で行う必要はなく順序を入れ替えてもよい。ただし、内部メモリ8からのページテーブルの追い出し処理は、データの追い出し処理と検証更新処理に依存するため、最後に行う必要がある。また、複数の種類のデータ保護方式が混在するページテーブルに対して、データ保護方式ごとに検証更新処理を実行する処理では、検証更新処理を実行する際に一度追い出された参照元ページテーブルの再読み込みが必要になる場合がある。このため、1つのデータ参照元ページテーブルに対して、複数の種別のデータ保護方式が混在する場合には、当該ページテーブルに含まれる全ての種別のデータ保護方式に対してまとめて検証更新処理を実行する。これにより、データ参照元ページテーブルの再読み込み回数を少なくすることができる。
カウンタ方式では、上位ページテーブルのMAC値計算のために、下位データに対応するカウンタ値が必要とされる。しかしながら、上位ページテーブルのMAC値計算のために、下位データのMAC値は必要とされない。
したがって、1回検証では、あるページテーブルの1回検証のページテーブルエントリが使用中になると、カウンタ値を予め1つ増分し、下位ページのページ更新を待つことなく、当該ページテーブルの検証更新処理を実行可能となる。よってカウンタ方式が用いられる場合、1回検証のデータに対する電源断時の検証更新処理と、ページテーブルの検証更新処理を独立に行うことができる。ただし、データの状態又はアドレス情報がページテーブルに格納されている場合、ページテーブルを内部メモリ8へ読み込む必要がある。この場合、使用中のデータの状態情報、制御情報、又は、アドレス情報をページテーブルとは別の一時リストなどで管理することで、電源断時のデータ更新に、再度ページテーブルを読み込むことを不要とすることができる。1回検証のデータと、毎回検証及び検証なしのデータが混在しており、使用中のデータの総数が少ない場合、上記一時リストは、ページテーブルと比較してサイズが小さくなる。このため、内部メモリ8を節約しつつ、電源断時の処理時間を短縮することができる。
(構成)
図42は、本実施形態に係るメモリ管理装置1の構成を例示するブロック図である。
メモリ管理装置1の検証計算部4は、方式判断部99を含む。
メモリ管理装置1は、電源遮断前処理部98をさらに備える。
方式判断部99は、複数のデータ保護方式のうち設定されているデータ保護方式を判断し、判断結果に応じて処理を切り替える。
電源断前処理部98は、上記図39で説明した電源断前処理を実行する。
以上説明した本実施形態においては、上記第1乃至第7の実施形態と同様の階層的検証を適用可能であり、攻撃耐性とオーバーヘッドとが異なる複数のデータ保護方式を共存させることができる。データ保護方式の割り当ては、ゲストOS毎にそれぞれ異なるデータ保護方式を割り当ててもよく、1つのゲストOS内のデータ毎に複数のデータ保護方式が共存してもよい。検証処理の内容自体は、それぞれのデータ毎に割り当てられたデータ保護方式に応じて正しく機能する。
1回検証では、データのサイズが内部メモリ8に格納可能なサイズに制約されないため、例えば2メガバイトのデータのような大きなサイズのデータであっても対応可能である。
[第9の実施形態]
上記第8の実施形態では、外部メモリ7がMRAMなどのようなワードアクセス可能な不揮発性メモリの場合を例として説明している。しかしながら、現時点ではワードアクセス可能な不揮発性メモリより、アクセスがページ単位に限られ、書き込み回数に制限のあるフラッシュメモリの方がビット単価が安くコスト優位である。そこで、本実施形態においては、上記のデータ保護方式を、例えばフラッシュメモリなどのような不揮発性メモリ(不揮発性ページメモリ)と、例えばDRAM(Dynamic Random Access Memory)などのような揮発性メモリ(揮発性ワードアクセスメモリ)とを組み合わせた外部の主記憶装置、に適用する場合を説明する。
図43は、本実施形態に係る情報処理装置65のハードウェア構成を例示するブロック図である。
プロセッサ66と、不揮発性メモリ400と、揮発性メモリ401とは、外部バス44を介して、データ、信号、命令を互いに送受信可能とする。
上記のように、不揮発性メモリ400としては、例えばフラッシュメモリが用いられる。揮発性メモリとしては、例えばDRAMが用いられる。しかしながら、それぞれ同様のメモリの性質を備える場合には、他の様々なメモリを適用可能である。
DRAMは揮発性ではあるが、ワードアクセスが可能であり、書き換え可能回数は事実上無制限である。DRAMをビット単価の安いフラッシュメモリの一時バッファメモリとして使うことで低コストに主記憶装置を構成することができる。
揮発性のDRAMが用いられる場合には、秘匿対象のデータが、電源断の後ある程度の時間が経過すればDRAMから消失するという利点がある。これは特に上述の1回検証における暗号化されたデータの処理との組み合わせにおいて利点となる。
以下、外部メモリ7が、不揮発性メモリ400と揮発性メモリ401との組み合わせを含む場合において、上記の3種類のデータ保護方式が適用される例を説明する。
不揮発性メモリ400は、停止状態においてセキュアVMM68、セキュアOS56、非セキュアOS57を格納する。
(不揮発性メモリ400に対するアクセス)
例えば、ページ単位でのアクセスに限定された不揮発性メモリ400は、直接物理メモリアドレスにマッピングされず、コントローラ経由でアクセスされる。この場合、不揮発性メモリ400では、ページ毎に物理アドレスが与えられるとは限らない。本実施形態では、不揮発性メモリ400と揮発性メモリ401又は内部メモリ8との間の間のデータ転送は、ページ単位で行われる場合を説明する。ページが転送される場合に、不揮発性メモリ400のアクセス先が適切に識別できれば、不揮発性メモリ400が直接メモリアドレスにマッピングされていなくても動作可能である。具体的には、不揮発性メモリ400に対するアクセスにおいて、ページテーブルが保持する変換先物理アドレスが、後述のD/F(DRAM/フラッシュ)フラグに基づいて、フラッシュメモリのデータブロック識別子に変更される。この変更の結果得られたデータブロック識別子に基づいて、不揮発性メモリ400がアクセスされる。
以下では、説明を簡略化にするため、不揮発性メモリ400がメモリアドレスにマッピングされている場合を例として説明する。
(複数のデータ保護方式の動作)
図44は、本実施形態に係るページテーブルエントリのフィールド形式を例示するデータ構造図である。この図44は、上記図33のページテーブルエントリの変形例である。
例えば、ソフトウェア使用予備フィールド85は、データ保護方式フィールド851、暗号化フィールド852、使用状態フィールド853、D/Fフラグ855を含む。
D/Fフラグ855は、次回参照データが揮発性メモリ401及び内部メモリ8のいずれかに格納されているか、又は、不揮発性メモリ400に格納されているか、を示す。
例えば、D/Fフラグ855にDが設定されている場合には、次回参照データが、揮発性メモリ401及び内部メモリ8のいずれかに格納されていることを示す。D/Fフラグ855にFが設定されている場合には、次回参照データが、不揮発性メモリ400に格納されていることを示す。
図45は、本実施形態に係る、データ保護方式ごとのデータのコピー状態及び検証状態を例示する状態遷移図である。この図45では、次回参照データは、不揮発性メモリ400、揮発性メモリ401、内部メモリ8のいずれかに格納されている。
図46は、複数のデータ保護方式におけるページテーブルエントリのデータ保護方式フィールド851の状態、D/Fフラグ855、有効/無効フラグ854、次回参照データの状態、次回参照データの状態を示す符号、の関係を例示する図である。
以下では、上記第2及び第8の実施形態と相違する部分について、説明する。
毎回検証において、データは、状態ND6乃至状態ND8の間を遷移する。状態ND6乃至状態ND8では、データの格納位置、検証実行及びMAC値計算などの状態が異なる。毎回検証では、状態ND6の次回参照データが不揮発性メモリ400に格納されている場合に、次回参照データに必ず検証を行い、次回参照データを内部メモリ8に格納する。暗号化保護ありの場合には、次回参照データが検証とともに復号される。命令実行ユニット45によるデータ参照は、状態ND7(内部メモリ8の検証済み)の次回参照データに対して行われる。稼働中に、状態ND7の次回参照データが内部メモリ8から外部メモリ7へ書き出される場合には、次回参照データのMAC値が計算され、暗号化保護ありの場合には、次回参照データが暗号化され、次回参照データが揮発性メモリ401に格納され、揮発性メモリ401に格納された次回参照データは状態ND8(揮発性メモリ401の未検証)となる。再度、次回参照データが参照される場合には、揮発性メモリ401の状態ND8の次回参照データが読み込まれ、検証され、暗号化保護ありの場合には次回参照データが復号され、内部メモリ8に格納され、内部メモリ8に格納された次回参照データは状態ND7となる。この状態ND7の次回参照データが命令実行ユニット45によって参照される。
電源断において、次回参照データが内部メモリ8に格納されている場合には、内部メモリ8の次回参照データのMAC値が計算され、暗号化保護ありの場合には次回参照データが復号され、次回参照データが不揮発性メモリ400に格納され、不揮発性メモリ400に格納された次回参照データは状態ND6(不揮発性メモリ400の未検証)となる。
電源断において、次回参照データが揮発性メモリ401に格納されている場合には、揮発性メモリ401の次回参照データが不揮発性メモリ400へ転送され、次回参照データが不揮発性メモリ400に格納され、不揮発性メモリ400に格納された次回参照データは状態ND6(不揮発性メモリ400の未検証)となる。内部メモリ8から揮発性メモリ401へのデータ書き出しにおいて、MAC値の計算及び次回参照データの暗号化は実行済みであるため、揮発性メモリ401から不揮発性メモリ400へ次回参照データが転送される場合には、MAC値の計算及び次回参照データの暗号化は必要ない。
1回検証において、データは、状態ND9と状態ND10との間を遷移する。状態ND9と状態ND10とでは、データの格納される位置、検証実行及びMAC値計算などの状態が異なる。1回検証では、次回参照データが状態ND9(不揮発性メモリ400の未検証)の場合に、次回参照データに検証を行い、暗号化保護ありの場合には次回参照データを復号し、次回参照データを揮発性メモリ401に格納する。揮発性メモリ401の次回参照データは状態ND10(揮発性メモリ401の検証済み)となる。命令実行ユニット45によるデータ参照は、揮発性メモリ401から内部メモリ8へのコピーは行われず、状態ND10の次回参照データに対して行われる。状態ND10の次回参照データが揮発性メモリ401から不揮発性メモリ400へ書き出される場合には、次回参照データのMAC値が計算され、暗号化保護ありの場合には次回参照データが暗号化され、次回参照データが不揮発性メモリ400に格納され、不揮発性メモリ400に格納された次回参照データが状態ND9(不揮発性メモリ400の未検証)となる。揮発性メモリ401に格納されている次回参照データに対するMAC値計算と、揮発性メモリ401から不揮発性メモリ400への書き出しは、次回の電源断までに行う。
検証なしにおいて、データは、状態ND11と状態ND12との間を遷移する。状態ND11と状態ND12とでは、データの格納される位置が異なる。検証なしでは、次回参照データが状態ND11(不揮発性メモリ400)の場合に、次回参照データを揮発性メモリ401に転送する。揮発性メモリ401の次回参照データは状態ND12(揮発性メモリ401)となる。命令実行ユニット45によるデータ参照において揮発性メモリ401から内部メモリ8へのコピーは行われず、命令実行ユニット45によるデータ参照は状態ND12の次回参照データに対して行われる。状態ND12の次回参照データが揮発性メモリ401から不揮発性メモリ400へ転送されると、次回参照データが不揮発性メモリ400に格納され、不揮発性メモリ400に格納された次回参照データは状態ND11となる。揮発性メモリ401に格納されている次回参照データに対する揮発性メモリ401から不揮発性メモリ400への転送は、次回の電源断までに行う。
本実施形態においても、上記第8の実施形態と同様に、データ書き出し、MAC値の計算、データの再暗号化は、データが更新された場合にのみ実行されるとしてもよい。
本実施形態においても、上記第8の実施形態と同様に、ページテーブルについては毎回検証を行う。説明を簡素化するためにめ、本実施形態では、データに対する検証のみを説明し、ページテーブルの検証については説明を省略する。その他にも、上記各実施形態と同様の説明については省略する。
(検証転送処理)
読み込み対象のデータのページテーブルエントリは、電源投入されると、以下の状態のいずれかを持つ。
毎回検証(ETV):D/Fフラグ=F:有効/無効フラグ=0(状態ND6)
1回検証(OTV):D/Fフラグ=F:有効/無効フラグ=0(状態ND9)
検証なし(NOV):D/Fフラグ=F:有効/無効フラグ=0(状態ND11)
図47は、本実施形態に係るアドレス解決処理の例示するフローチャートである。
ステップS102の判断の結果、テーブルエントリが無効の場合、制御はMMU46からセキュアVMM68に移り、ステップS10Aにおいて、セキュアVMM68は、後述の図48で説明される検証転送処理を実行し、その後処理はステップS104に移動する。
図48は、本実施形態に係る複数のデータ保護方式に対応する検証転送処理を例示するフローチャートである。この図48は、上記図47のアドレス解決処理のステップS10Aの検証転送処理として呼び出される処理である。この図48では、不揮発性メモリ400をフラッシュ、揮発性メモリ401をDRAMと表記しているが、これに限定されないことは先で述べた通りである。以下で説明される他の図面についても同様である。
ステップS1601において、セキュアVMM68は、データを参照するページテーブルエントリに設定されている情報に基づいて、データ保護方式を判断する。データ保護方式が毎回検証の場合、処理はステップS1611に移動する。データ保護方式が1回検証の場合、処理はステップS1621に移動する。データ保護方式が検証なしの場合、処理は、ステップS1631に移動する。
データ保護方式が毎回検証の場合、ステップS1611において、セキュアVMM68は、D/Fフラグ255がDRAMを示すか、又は、フラッシュを示すか、判断する。
D/Fフラグ255がDRAMを示す場合、ステップS1612において、セキュアVMM68は、DRAMのデータを内部メモリ8の空き領域にコピーする。
D/Fフラグ255がフラッシュを示す場合、ステップS1612において、セキュアVMM68は、フラッシュのデータを内部メモリ8の空き領域にコピーする。
ステップS1614において、セキュアVMM68は、検証対象データの内部メモリ8での検証及び復号処理を実行する。
ステップS1615において、セキュアVMM68は、検証が成功したか否か判断する。
検証成功の場合には、ステップS1616において、セキュアVMM68は、データのコピー先の内部メモリ8のアドレスをページテーブルエントリに設定する。
ステップS1617において、セキュアVMM68は、ページテーブルエントリのD/Fフラグ855にDを設定し、有効/無効フラグ854に1を設定する。そして、処理は終了する。
検証失敗の場合には、処理はステップS1641に移動する。
ステップS1641において、セキュアVMM68は、検証失敗後処理を実行し、処理は終了する。
データ保護方式が1回検証の場合、ステップS1621において、セキュアVMM68は、フラッシュのデータをDRAMの空き領域にコピーする。
ステップS1622において、セキュアVMM68は、検証対象データのDRAMでの検証及び復号処理を実行する。
ステップS1623において、セキュアVMM68は、検証が成功したか否か判断する。
検証失敗の場合には、処理は上記のステップS1641に移動する。
検証成功の場合には、ステップS1624において、セキュアVMM68は、データのコピー先のDRAMのアドレスをページテーブルエントリに設定する。
ステップS1625において、セキュアVMM68は、ページテーブルエントリのD/Fフラグ855にDを設定し、有効/無効フラグ854に1を設定する。そして、処理は終了する。
データ保護方式が検証なしの場合、ステップS1631において、セキュアVMM68は、フラッシュのデータをDRAMの空き領域にコピーする。
ステップS1632において、セキュアVMM68は、データのコピー先のDRAMのアドレスをページテーブルエントリに設定する。
ステップS1633において、セキュアVMM68は、ページテーブルエントリのD/Fフラグ855にDを設定し、有効/無効フラグ854に1を設定する。そして、処理は終了する。
(追い出し処理)
本実施形態における追い出し処理は、内部メモリ8から揮発性メモリ401又は不揮発性メモリ400への追い出し処理と、揮発性メモリ401から不揮発性メモリ400への追い出しの2種類がある。このうち、揮発性メモリ401から不揮発性メモリ400への追い出し処理は、後で説明する図51の電源断前の追い出し処理と基本的に同一であるためここでは説明を省略する。ここでは、稼働中の内部メモリ8から揮発性メモリ401への追い出し処理について説明する。内部メモリ8から揮発性メモリ401への追い出し処理は、毎回検証のデータに対して実行される。
図49は、本実施形態に係る稼働中の内部メモリ8から揮発性メモリ401への追い出し処理を例示するフローチャートである。
ステップS1701において、セキュアVMM68は、追い出し対象データのMAC値を計算する。
ステップS1702において、セキュアVMM68は、追い出し対象データを、DRAMの空き領域にコピーする。
ステップS1703において、セキュアVMM68は、追い出し対象データのコピー先のDRAMのアドレスをページテーブルエントリに設定する。
ステップS1704において、セキュアVMM68は、ページテーブルエントリのD/Fフラグ855にD、有効/無効フラグ854に0を設定する。そして、処理は終了する。
(電源断前処理)
図50は、本実施形態に係る電源断前処理を例示するフローチャートである。
ステップS1801において、セキュアVMM68は、内部メモリ8に格納されており毎回検証が設定されているデータのフラッシュへの追い出し処理を実行する。
次に、使用中が設定されているデータを参照する上位ページテーブルのページテーブルエントリに対して、ステップS1802が繰り返される。
ステップS1802では、セキュアVMM68は、DRAMのデータのフラッシュへの追い出し処理を実行する。
このように、ステップS1801を実行し、さらに、使用中が設定されているデータを参照する上位ページテーブルの全てに対してステップS1802の処理が繰り返されることで、内部メモリ8及びDRAMにおけるゲストOSのデータの書き出し処理は完了する。
次に、ステップS1803において、セキュアVMM68は、内部メモリ8のページテーブルをフラッシュへコピーする追い出し処理を実行する。そして、処理は終了される。
図51は、本実施形態に係る揮発性メモリ401から不揮発性メモリ400への追い出し処理の一例を示すフローチャートである。
ステップS1901において、セキュアVMM68は、データを参照するページテーブルエントリに設定されている情報に基づいて、データ保護方式を判断する。
データ保護方式が1回検証の場合、ステップS1902において、セキュアVMM68は、データのMAC値計算及び暗号化処理を実行する。1回検証の場合のステップS1902のMAC値計算及び暗号化処理は、セキュアDMAコントローラ52によって、データ転送と並行して処理されてもよい。
データ保護方式が毎回検証又は検証なしの場合、処理はステップS1903に移動する。毎回検証の場合には、内部メモリ8からの追い出し時にMAC値計算及び暗号化処理が実行されている。また、検証なしの場合には、データに対するMAC値計算及び暗号化処理は不要である。
データ保護方式が毎回検証、1回検証、検証なしのいずれの場合であっても、ステップS1903において、セキュアVMM68は、データをDRAMからフラッシュへ転送(コピー)する処理を実行する。
ステップS1904において、セキュアVMM68は、データのコピー先のフラッシュのアドレスをページテーブルエントリに設定する。
ステップS1705において、セキュアVMM68は、ページテーブルエントリのD/Fフラグ855にF、有効/無効フラグ854に0を設定する。そして、処理は終了する。
以上説明した本実施形態においては、例えばMRAMなどのような高価な不揮発性のランダムアクセスメモリではなく、比較的安価な例えばフラッシュメモリなどのような不揮発性メモリ400と、DRAMなどのような揮発性メモリ401とが併用され、データに対して3種類のデータ保護方式のいずれかが実行される。これにより、プロセッサ66のオーバーヘッドを低減させるとともに、製造コストを低減させることができる。
上記の第8及び第9の実施形態において、あるOSでは毎回検証を適用し、他のOSでは1回検証又は検証なしを適用してもよい。例えば、セキュアOS56のデータに対して検証を行い、非セキュアOS57のデータに対して検証を行わないとしてもよい。
上記の第8及び第9の実施形態において、あるOSに対するデータであっても、一部のデータに対して毎回検証を適用し、他のデータに対して1回検証又は検証なしを適用してもよい。例えば、セキュアOS56と非セキュアOS57とが相互に読み書き可能な共有データ領域を持ち、セキュアOS56が読み込み時にデータを検証し、非セキュアOS57が書き込み時に検証子を書き込まない場合を考える。この場合において、非セキュアOS57が共有データ領域に書き込んだデータをセキュアOS56が読み出すと、セキュアOS56が読み出したデータに対して検証子が計算されておらず、検証失敗となる。しかしながら、上記の第8及び第9の実施形態において、例えば、セキュアOS56の検証対象データに対して毎回検証が適用され、セキュアOS56のデータのうち非セキュアOS57と共有される検証不要なデータに対して検証なしが適用される。これにより、非セキュアOS57が共有データ領域に書き込んだデータを、セキュアOS56が読み出す場合に検証失敗となることを防止することができる。
[第10の実施形態]
本実施形態においては、上記第1乃至第9の実施形態で用いられる暗号化及び改ざん検証の具体例について説明する。本実施形態では、暗号化方式XTS-AESの詳細について説明する。また、本実施形態においては、ページテーブル又はデータに対するアドレス及びバージョン毎のリプレイ攻撃防止に用いられるTweakと呼ばれる暗号パラメータについて説明する。例えば、XTS-AESによる暗号化とハッシュ値を利用した改ざん検証とを組み合わせることにより、リプレイ攻撃が排除される。本実施形態においては、XTS-AESによる暗号化を利用した改ざん検証用MAC値計算についても説明する。
AESはIEEE P1619として標準化されており、例えばディスク装置等のランダムアクセスデータに適用される暗号化方式である。AESはTweak及びSequence Numberと呼ばれるパラメータを持つ。同じ秘密鍵による同じ平文に対する暗号化であっても、パラメータが異なっていれば、暗号文は全く異なったものとなる。パラメータの秘匿性は不要である。したがって、あるパラメータにおいて平文−暗号文のペアが攻撃者にとって既知であっても、別のパラメータに基づく暗号文のデータ機密性は守られる。
図52は、XTS-AESを例示する概念図である。
XTS-AESは、128ビット又は256ビットの連鎖からなるブロック平文データ{P0,P1,…Pm}を暗号化して、同一サイズの暗号文{C0,C1,…,Cm}を得る暗号化方式である。
XTS-AESは、C= XTS-AES(Key,P,i,j)で表記される。
Keyは秘密鍵であり、秘匿が必要である。例えば、Keyは256ビットとする。
Pは平文であり、ビット数は任意とする。
iはTweakであり、秘匿は不要である。例えば、iは128ビットとする。
jはSequence Numberであり、秘匿は不要である。例えば、jは128ビットとする。
Cは暗号文であり、ビット数はPと同じである。
本実施形態では、ゲストOS毎に異なる秘密鍵を使用される。したがって、リプレイ攻撃の対策は、同一OS内のページ要素(ページテーブル及びデータページ)について、時間(安全でないストレージへの格納回数)と空間(メモリアドレス)とについて行われれば十分である。
本実施形態では、ゲストOSの構成要素は、データページだけでなく、ページテーブルと、当該ページテーブルと連携する検証ツリーも含まれる。これらページテーブル及び検証ツリーに対する改ざん検証及び暗号化も、データと同一の秘密鍵に基づいて実行されることが、鍵管理のオーバーヘッドを減らす観点で望ましい。
図53は、本実施形態に係るTweakとSequence Numberの例を示す図である。
iはTweakに対応する。共通ページインデックスには、データページとページテーブルとで重複しない個別のTweakが割り当てられる。共通ページインデックスは2つの要素を含む。第1の要素は、ページアドレスインデックスである。ページアドレスインデックスは、データページについてはアドレス変換前の中間物理アドレス、ページテーブルについては当該ページテーブルが関わるデータページの1つのアドレス変換前の中間物理アドレスとする。アドレスが64ビットの場合、ページ(4096バイト分)の下位アドレス12ビットは不要のため、ページアドレスインデックスとして52ビットが使われる。
第2の要素は、レベルである。ページアドレスインデックスだけを用いた場合にはデータページとページテーブルでTweakが衝突する。レベルは、この衝突を防止するためのインデックスである。例えば、レベルは、データページ及びページテーブルの階層を表す3ビットのインデックスである。
ページアドレスインデックスとレベルを結合した情報が、共通ページインデックスである。共通ページインデックスを用いることで、データページとページテーブルとの改ざん検証及び暗号化を同一の暗号方式で処理することができる。
Tweakのうち、残りのビットはデータ格納回数を表すカウンタとして用いられる。本実施形態で、カウンタは73ビット確保される。
jはSequence Numberに対応する。Sequence Numberは、一般に、データページ又はページテーブル内の暗号ブロック(16バイト)のシーケンス番号用カウンタとして用いられる。4キロバイトのデータページ又はページテーブルの場合、シーケンス番号用カウンタとして8ビットが割り当てられる。2メガバイトのデータページ又はページテーブルの場合、シーケンス番号用カウンタとして20ビットが割り当てられる。Sequence Numberの残りのフィールドは、データページ又はページテーブルの書き換え回数のカウンタとして補助的に用いられてもよい。
図54は、ページテーブルに対する暗号化保護なしの場合のMAC値計算及び検証処理を例示する概念図である。
この図54において、改ざんの検証対象PT|CTRは、ページテーブルPTとカウンタCTRとの組み合わせとする。この組み合わせの検証対象PT|CTRに対して、SHA-256に基づくハッシュ値H(PT|CTR)が計算され、ハッシュ値H(PT|CTR)に対して上記パラメータKey,i,jを用いて暗号化が行われ、MAC値が計算される。この検証対象PT|CTRとMAC値とが検証のペアとなる。ただし、上述のように、MAC値は1階層上のページテーブルのカウンタと関連付けられるため、検証対象PT|CTRとMAC値とは、離れたアドレスに格納される。
検証はMAC値計算の逆を行う。検証対象PT|CTRに対してSHA-256に基づいてハッシュ値H(PT|CTR)が計算される。別途MAC値がXTS-AESに基づいて復号される。SHA-256に基づいて計算されたハッシュ値H(PT|CTR)と、XTS-AESに基づいて復号されたハッシュ値H(PT|CTR)とが照合され、一致すれば改ざんの検証は成功と判断される。
図55は、ページデータに対する暗号化保護ありの場合のMAC値計算及び検証処理を例示する概念図である。
この図55において、改ざんの検証対象PDは、ページデータのみとする。この検証対象PDに対して、SHA-256に基づくハッシュ値H(PD)が計算され、検証対象PDとハッシュ値H(PD)との組み合わせPD|H(PD)に対して上記パラメータKey,i,jを用いて暗号化が行われ、暗号文CとMAC値が計算される。暗号文CとMAC値とが検証のペアとなる。暗号文CとMAC値とは、上記と同様に、離れたアドレスに格納される。
検証は暗号化及びMAC値計算の逆を行う。暗号文CとMAC値とがXTS-AESに基づいて復号され、平文ページデータである検証対象PDと、ハッシュ値H(PD)の期待値とが得られる。検証対象PDに対して、SHA-256に基づいてハッシュ値H(PD)が計算される。SHA-256に基づいて計算されたハッシュ値H(PD)とハッシュ値H(PD)の期待値とが照合され、一致すれば改ざんの検証は成功と判断される。
以上説明した本実施形態においては、データの保護とページテーブルの保護に用いる秘密鍵及び暗号化におけるパラメータの大部分を共通化することができる。
また、多くの暗号アクセラレータに搭載されている標準の暗号化方式XTS-AESを用いて、効率的な改ざん検証及び暗号化を行うことができる。
上記各実施形態において、暗号化、復号、及び検証の各種処理は、ソフトウェアで実現されてもよく、ハードウェアで実現されてもよい。暗号化、復号、及び検証の各種処理がハードウェアで実現された場合には、暗号化、復号、及び検証の各種処理を高速化することができる。
上記各実施形態において、カウンタ値及びアドレスが暗号化されることにより、カウンタ値及びアドレスの不正取得を防止することができる。
上記各実施形態において、データとページテーブルとで、検証を実行すか否か、暗号化を実行するか否かを、区別してもよい。
例えば、ページテーブルに対しては検証を行い、暗号化を行わず、データに対しては、暗号化のみを行うとしてもよい。
例えば、ページテーブルに対しては検証を行い、暗号化を行わず、データに対しては、検証と暗号化との双方を行うとしてもよい。
例えば、ページテーブルに対しては検証と暗号化の双方を行い、データに対しては、検証と暗号化とのうちの少なくとも一方を行うとしてもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。