(57)【特許請求の範囲】
【請求項１】
メモリが接続され、当該メモリに記憶されたデータの読み出し及び当該メモリへのデータの書き込み時に検証を行うメモリ管理装置であって、
前記メモリに対して割り当てられた機密値であるルート機密値を記憶する第１記憶部と、
所定の複数のデータにおいて共有される上位カウンタ値及び前記複数のデータに各々対応付けられた下位カウンタ値を保持する第２記憶部と、
前記複数のデータへの前記メモリへの書き込みにおける前記上位カウンタ値及び前記下位カウンタ値を含むカウンタ値の更新及びデータ検証値の計算を行う割当部と、
前記データの読み出しにおける前記データ検証値の検証処理を行う検証部とを備え、
前記メモリへの第１のデータの書き込みの場合、
前記割当部は、前記第１のデータの前記メモリへの書き込みの回数が増える毎に、当該第１のデータに対応する前記下位カウンタ値をインクリメントし、
前記割当部は、前記第１のデータに対応する前記下位カウンタ値がオーバフローした場合に前記複数のデータに共有される前記上位カウンタ値をインクリメントすると共に前記下位カウンタ値をリセットすることにより、前記第１のデータに対応する前記カウンタ値を更新し、
前記割当部は、前記第１のデータに対応する前記カウンタ値を用いて第１のデータ毎機密値を計算し、前記第１のデータ、前記ルート機密値及び前記第１のデータ毎機密値を用いて第１のデータ検証値を計算し、
前記割当部は、前記第１のデータに対応する前記カウンタ値が更新された場合、更新された前記カウンタ値を用いて、前記第１のデータ毎機密値を再計算し、前記第１のデータ、前記ルート機密値及び前記第１のデータ毎機密値を用いて前記第１のデータ検証値を再計算し、
前記割当部は、前記第１のデータと、計算された前記第１のデータ検証値又は再計算された前記第１のデータ検証値を前記メモリに書き込み、
前記割当部は、前記上位カウンタ値のインクリメントに応じて、前記第１のデータと上位カウンタ値を共有する第２のデータに対応する前記下位カウンタ値をインクリメントし、インクリメントされた前記下位カウンタ値がオーバフローした場合に前記下位カウンタ値をリセットすることにより、前記第２のデータに対応する前記カウンタ値を更新し、
前記割当部は、前記第２のデータに対応する前記カウンタ値を用いて前記第１のデータ毎機密値を計算し、前記第２のデータ、前記ルート機密値及び前記第１のデータ毎機密値を用いて前記第１のデータ検証値を計算し、
前記割当部は、前記第２のデータに対応する前記カウンタ値が更新された場合、更新された前記カウンタ値を用いて前記第１のデータ毎機密値を再計算し、前記第２のデータ、前記ルート機密値及び前記第１のデータ毎機密値を用いて前記第１のデータ検証値を再計算し、
前記割当部は、計算された前記第１のデータ検証値又は再計算された前記第１のデータ検証値を前記メモリに書き込み、
前記メモリからの前記第１のデータの読み出しの場合、
前記検証部は、前記第１のデータ及び前記第１のデータ検証値が読み出された場合、読み出された前記第１のデータに対応する前記カウンタ値の最新の値を用いて第２のデータ毎機密値を計算し、読み出された前記第１のデータ、前記ルート機密値及び前記第２のデータ毎機密値を用いて第２のデータ検証値を計算し、
前記検証部は、読み出された前記第１のデータ検証値と前記第２のデータ検証値とを比較して、読み出された前記第１のデータに対する検証を行う、
ことを特徴とするメモリ管理装置。
【請求項２】
前記割当部は、前記上位カウンタ値のインクリメントに応じて、前記第１のデータと上位カウンタ値を共有する前記第２のデータに対応する前記下位カウンタ値をインクリメントし、インクリメントされた前記下位カウンタ値がオーバフローしなかった場合、前記第１のデータ毎機密値の再計算及び前記第２のデータと前記第１データ検証値との前記メモリへの書き込みを行なわず、
前記第１のデータの読み出しにおいて「（前記上位カウンタ値―前記下位カウンタ値）×定数」により前記第２のデータ毎機密値を計算する
ことを特徴とする請求項１に記載のメモリ管理装置。
【請求項３】
前記カウンタ値には、前記下位のカウンタ値毎に、前記データの変更の有無を示すフラグが各々対応付けられ、
前記第１のデータの変更があった場合に、前記第１のデータに対応する前記下位カウンタ値に対して対応付けられたフラグである第１のフラグが、前記第１のデータの変更があったことを示すように前記第１のフラグを更新し、前記上位カウンタ値を共有する前記第２のデータの前記メモリへの書き込みにより前記上位カウンタ値がインクリメントされた場合、前記第１のデータの変更がなかったことを示すように前記第１のフラグを更新する更新部を更に備え、
前記割当部は、前記第１のデータの変更があったことを前記第１のフラグが示す場合、前記第１のデータ毎機密値を再計算し、前記第１のデータの変更がなかったことを前記第１のフラグが示す場合且つ前記第１のデータに対応する前記カウンタ値に含まれる前記下位カウンタ値がインクリメントされた結果オーバフローしなかった場合、前記第１のデータ毎機密値を再計算せず、前記第１のデータの変更がなかったことを前記第１のフラグが示す場合且つ前記第１のデータに対応する前記カウンタ値に含まれる前記下位カウンタ値がインクリメントされた結果オーバフローした場合、前記第１のデータ毎機密値を再計算し、
前記第１のデータの読み出しにおいて、前記第１のデータの変更がなかったことを前記第１のフラグが示す場合「（前記上位カウンタ値―前記下位カウンタ値）×定数」により前記第２のデータ毎機密値を計算する
ことを特徴とする請求項１又は２に記載のメモリ管理装置。
【請求項４】
前記割当部は、
更に、上位カウンタ値及び当該上位カウンタ値を共有する複数の下位カウンタ値が統合された階層構造を有し、前記下位カウンタ値毎に前記フラグが対応付けられた前記カウンタ値を前記メモリ及び第２記憶部のうち少なくとも一方に書き込み、
前記メモリ及び第２記憶部のうち少なくとも一方に記憶された前記カウンタ値を読み出し、
前記メモリ及び第２記憶部のうち少なくとも一方に記憶された前記カウンタ値の最新の値により、前記第２のデータ毎機密値を計算する
ことを特徴とする請求項３に記載のメモリ管理装置。
【請求項５】
前記第１のデータ及び前記第２のデータは、ブロック単位であり、
前記割当部は、前記第１のデータの前記メモリへの書き込みに対して、前記第１のデータを書き込む前記メモリにおけるブロック単位のアドレスと前記カウンタ値との連接値が一意となる前記カウンタ値を割り当てる
ことを特徴とする請求項１乃至４のいずれか一項に記載のメモリ管理装置。
【請求項６】
メモリが接続され、当該メモリに記憶されたデータの読み出し及び当該メモリへのデータの書き込み時に検証を行うメモリ管理装置で実現されるメモリ管理方法であって、
前記メモリ管理装置は、前記メモリに対して割り当てられた機密値であるルート機密値を記憶する第１記憶手段と、所定の複数のデータにおいて共有される上位カウンタ値及び前記複数のデータに各々対応付けられた下位カウンタ値を保持する第２記憶手段と、割当手段と、検証手段とを備え、
前記割当手段が、前記複数のデータへの前記メモリへの書き込みにおける、各前記データに対応する前記上位カウンタ値及び前記下位カウンタ値を含むカウンタ値の更新及びデータ検証値の計算を行う割当ステップと、
前記検証手段が、前記データの読み出しにおける前記データ検証値の検証処理を行う検証ステップとを含み、
前記メモリへの第１のデータの書き込みの場合、
前記割当ステップでは、
前記第１のデータの前記メモリへの書き込みの回数が増える毎に、当該第１のデータに対応する前記下位カウンタ値をインクリメントし、
前記第１のデータに対応する前記下位カウンタ値がオーバフローした場合に前記複数のデータに共有される前記上位カウンタ値をインクリメントすると共に前記下位カウンタ値をリセットすることにより、前記第１のデータに対応する前記カウンタ値を更新し、
前記第１のデータに対応する前記カウンタ値を用いて第１のデータ毎機密値を計算し、前記第１のデータ、前記ルート機密値及び前記第１のデータ毎機密値を用いて第１のデータ検証値を計算し、
前記第１のデータに対応する前記カウンタ値が更新された場合、更新された前記カウンタ値を用いて、前記第１のデータ毎機密値を再計算し、前記第１のデータ、前記ルート機密値及び前記第１のデータ毎機密値を用いて前記第１のデータ検証値を再計算し、
前記第１のデータと、計算された前記第１のデータ検証値又は再計算された前記第１のデータ検証値を前記メモリに書き込み、
前記上位カウンタ値のインクリメントに応じて、前記第１のデータと上位カウンタ値を共有する第２のデータに対応する前記下位カウンタ値をインクリメントし、インクリメントされた前記下位カウンタ値がオーバフローした場合に前記下位カウンタ値をリセットすることにより、前記第２のデータに対応する前記カウンタ値を更新し、
前記第２のデータに対応する前記カウンタ値を用いて前記第１のデータ毎機密値を計算し、前記第２のデータ、前記ルート機密値及び前記第１のデータ毎機密値を用いて前記第１のデータ検証値を計算し、
前記第２のデータに対応する前記カウンタ値が更新された場合、更新された前記カウンタ値を用いて前記第１のデータ毎機密値を再計算し、前記第２のデータ、前記ルート機密値及び前記第１のデータ毎機密値を用いて前記第１のデータ検証値を再計算し、
計算された前記第１のデータ検証値又は再計算された前記第１のデータ検証値を前記メモリに書き込み、
前記メモリからの前記第１のデータの読み出しの場合、
前記検証ステップでは、
前記第１のデータ及び前記第１のデータ検証値が読み出された場合、読み出された前記第１のデータに対応する前記カウンタ値の最新の値を用いて第２のデータ毎機密値を計算し、読み出された前記第１のデータ、前記ルート機密値及び前記第２のデータ毎機密値を用いて第２のデータ検証値を計算し、
読み出された前記第１のデータ検証値と前記第２のデータ検証値とを比較して、読み出された前記第１のデータに対する検証を行う
ことを特徴とするメモリ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリ管理装置及びメモリ管理方法に関する。
【背景技術】
【０００２】
プロセッサに接続された大容量のオフチップのメモリ（オフチップメモリ）に対する改ざん攻撃、特にリプレイアタック対策では、メモリを構成するブロック（メモリブロック）の完全性検証（メモリ完全性検証という）に必要な機密情報を、限られた量のオンチップ機密情報からメモリブロック毎、書き換えのバージョン毎に派生させる必要がある。この課題に対して、Bonsai  Merkel  Tree  (Rogers2007)と呼ばれるデータブロック毎の一意識別子および階層化されたカウンタ値に基づいてMAC検証値を計算する際の完全性検証の秘密鍵を生成することと、完全性検証の対象をカウンタ値及びデータに限定することで効率的に機密情報を管理する手法が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第２５６４５９３号公報
【非特許文献】
【０００４】
【非特許文献１】Rogers  et.al.  “Using  Address  Independent  Seed  Encryption  and  Bonsai  Merkle  Trees  to  Make  Secure  Processors  OS-  and  Performance-Friendly”,  In  Proceedings  of  the  40th  Annual  IEEE/ACM  International  Symposium  on  Microarchitecture  Pages:  183-196  Year  of  Publication:2007
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ツリーによって改ざん保護されたカウンタ値をメモリ保護に適用する場合、保護対象のメモリブロックのオフチップメモリの書き込み回数が下位カウンタのサイズを超えてオーバフローすると、階層化されたツリーの親ブロック配下にある上位カウンタのカウンタ値（上位カウンタ値）を共有する全てのデータブロックについて同時に上位カウンタ値を更新（増分）してMAC検証値を再計算しなければならない。これはメモリシステムのスループット及び応答性の悪化の要因を招く恐れがある。一方カウンタのサイズを大きく取った場合、保護対象であるツリーの回数が指数関数的に増大し、メモリの利用効率が悪化してしまう恐れがある。
【０００６】
本発明の一側面は、メモリシステムのスループット及び応答性能の低下を抑制しつつ、メモリの利用効率の悪化を防止可能なメモリ管理装置及びメモリ管理方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
一実施形態のメモリ管理装置は、メモリが接続され、当該メモリに記憶されたデータの読み出し及び当該メモリへのデータの書き込み時に検証を行うメモリ管理装置であって、前記メモリに対して割り当てられた機密値であるルート機密値を記憶する第１記憶部と、所定の複数のデータにおいて共有される上位カウンタ値及び前記複数のデータに各々対応付けられた下位カウンタ値を保持する第２記憶部と、前記複数のデータへの前記メモリへの書き込みにおける前記上位カウンタ値及び前記下位カウンタ値を含むカウンタ値の更新及びデータ検証値の計算を行う割当部と、前記データの読み出しにおける前記データ検証値の検証処理を行う検証部とを備え、前記メモリへの第１のデータの書き込みの場合、前記割当部は、前記第１のデータの前記メモリへの書き込みの回数が増える毎に、当該第１のデータに対応する前記下位カウンタ値をインクリメントし、前記割当部は、前記第１のデータに対応する前記下位カウンタ値がオーバフローした場合に前記複数のデータに共有される前記上位カウンタ値をインクリメントすると共に前記下位カウンタ値をリセットすることにより、前記第１のデータに対応する前記カウンタ値を更新し、前記割当部は、前記第１のデータに対応する前記カウンタ値を用いて第１のデータ毎機密値を計算し、前記第１のデータ、前記ルート機密値及び前記第１のデータ毎機密値を用いて第１のデータ検証値を計算し、前記割当部は、前記第１のデータに対応する前記カウンタ値が更新された場合、更新された前記カウンタ値を用いて、前記第１のデータ毎機密値を再計算し、前記第１のデータ、前記ルート機密値及び前記第１のデータ毎機密値を用いて前記第１のデータ検証値を再計算し、前記割当部は、前記第１のデータと、計算された前記第１のデータ検証値又は再計算された前記第１のデータ検証値を前記メモリに書き込み、前記割当部は、前記上位カウンタ値のインクリメントに応じて、前記第１のデータと上位カウンタ値を共有する第２のデータに対応する前記下位カウンタ値をインクリメントし、インクリメントされた前記下位カウンタ値がオーバフローした場合に前記下位カウンタ値をリセットすることにより、前記第２のデータに対応する前記カウンタ値を更新し、前記割当部は、前記第２のデータに対応する前記カウンタ値を用いて前記第１のデータ毎機密値を計算し、前記第２のデータ、前記ルート機密値及び前記第１のデータ毎機密値を用いて前記第１のデータ検証値を計算し、前記割当部は、前記第２のデータに対応する前記カウンタ値が更新された場合、更新された前記カウンタ値を用いて前記第１のデータ毎機密値を再計算し、前記第２のデータ、前記ルート機密値及び前記第１のデータ毎機密値を用いて前記第１のデータ検証値を再計算し、前記割当部は、計算された前記第１のデータ検証値又は再計算された前記第１のデータ検証値を前記メモリに書き込み、前記メモリからの前記第１のデータの読み出しの場合、前記検証部は、前記第１のデータ及び前記第１のデータ検証値が読み出された場合、読み出された前記第１のデータに対応する前記カウンタ値の最新の値を用いて第２のデータ毎機密値を計算し、読み出された前記第１のデータ、前記ルート機密値及び前記第２のデータ毎機密値を用いて第２のデータ検証値を計算し、前記検証部は、読み出された前記第１のデータ検証値と前記第２のデータ検証値とを比較して、読み出された前記第１のデータに対する検証を行う、ことを特徴とする。
【図面の簡単な説明】
【０００８】
【図１】図１は、一実施の形態のマイクロプロセッサのハードウェア構成を例示する図。
【図２】図２は、メモリ完全性検証に係るハードウェア構成を例示する図。
【図３】図３は、従来方式に係る外部メモリ１０２におけるカウンタ値の格納形式を示す図。
【図４】図４は、同実施の形態に係る検証用のデータ構造を示す図。
【図５】図５は、同実施の形態に係る外部メモリ１０２におけるカウンタ値の格納形式を示す図。
【図６】図６は、同実施の形態に係るキャッシュのデータ形式を示す図。
【図７】図７は、BMT方式をキャッシュメモリに適用した場合の動作の概要を示すフローチャート。
【図８】図８は、同実施の形態に係る階層的な改ざん検証の手順を示すフローチャート。
【図９】図９は、同実施の形態に係るキャッシュラインの書き込み時のMAC計算処理の手順を示すフローチャート。
【図１０】図１０は、従来技術における関連ブロックのMAC再計算処理の手順を示すフローチャート。
【図１１】図１１は、同実施の形態における関連ブロックのMAC再計算処理の手順を示すフローチャート。
【図１２】図１２は、従来技術に係るキャッシュラインの読み込み時におけるMAC計算処理の手順を示すフローチャート。
【図１３】図１３は、同実施の形態における、キャッシュラインの読み込み時におけるMAC計算処理の手順を示すフローチャート。
【図１４】図１４は、従来技術におけるカウンタ値の更新及びMAC計算の手順の概要を例示する図。
【図１５】図１５は、図１４に例示される手順に応じた状態を表す図。
【図１６】図１６は、同実施の形態におけるカウンタ値の更新及びMAC計算の手順の概要を例示する図。
【図１７】図１７は、図１６に例示される手順に応じた状態を表す図。
【図１８】図１８は、同実施の形態の適用例に係る次世代電力網の構成を例示する図。
【発明を実施するための形態】
【０００９】
ここで、本実施の形態に係る背景について説明する。メモリに格納されたデータに対してはさまざまな不正操作攻撃がある。本実施の形態は、プロセッサ内に全体を格納することが技術的且つコスト的に困難な大規模なメモリシステム上のデータに対する不正操作攻撃に対抗するための手段を目的の１つとしてなされたものである。メモリシステムとは、プロセッサ及びメモリから構成される。メモリシステムにおいては、メモリはプロセッサによりデータの格納（書き込み）及び読み出しが制御される。例えば、現在の非常に大きな影響を与える場合のリスクを低減する手段が必要であることを背景になされたものである。そのような例のメモリの１つとして、家庭や屋外での介護支援のための自律行動ロボットの行動ルールのデータベースが考えられる。人間に対する支援では周囲の状況に適合した行動を選択するための大規模なルールベースとリアルタイムの応答が求められる。そしてこのようなデータベースが不正操作攻撃やマルウェアと呼ばれる不正プログラムによって書き換えられてしまった場合人命にかかわる被害が出る恐れがある。メモリの不正書き換え防止のみを目的とした場合、ＣＰＵ（Central  Processing  Unit）のオンチップメモリがもっとも安全だが、必要なメモリの容量が大きくなるとチップ積層技術などを適用してもメモリを別チップとした場合と比較して高コストとなりがちである。本実施の形態はＣＰＵ外に配置された大規模なメモリに格納されたデータに対しても暗号技術を適用することによりＣＰＵに内蔵されたメモリと実用上同等の安全性を提供することを目的としてなされている。
【００１０】
以下、キャッシュライン単位にデータの読み書きを行うキャッシュメモリを例にして本実施の形態について説明する。図１は、本実施の形態に係るメモリ管理装置を適用したマイクロプロセッサのハードウェア構成を例示する図である。マイクロプロセッサ１０１は、外部メモリ(Ｅｘｔ.Ｍｅｍｏｒｙ)１０２に接続される。マイクロプロセッサ１０１及び外部メモリ１０２を併せてメモリシステムという。例えば、マイクロプロセッサ１０１を、コンピュータシステムのメインボードとし、外部メモリ１０２をハードディスクなどの２次記憶装置としてメモリシステムを構成しても良い。
【００１１】
マイクロプロセッサ１０１は、ＥＸＵ１１１、Ｌ１命令キャッシュ（Ｌ１Ｉ＄）１２１、Ｌ１データキャッシュ（Ｌ１Ｄ＄）１３１、Ｌ２キャッシュ（Ｌ２Ｕ＄）１４１、ＢＩＵ１５１、内部バス１６１、専用ハードウェア暗号エンジン（ＣｒｙＥ）１７１、カウンタキャッシュ（ＣＴＲ＄）１８１、メモリ検証ユニット(Memory  Verification  Unit:  MVU)１９１及び制御レジスタ２０１を備える。ＢＩＵ１５１は、外部メモリ１０２からのデータの読み出しや外部メモリ１０２へのデータの書き込みを制御する。ＥＸＵ１１１は、命令を実行するプロセッサである。Ｌ２キャッシュ１４１は、外部メモリ１０２から読み出されたデータを記憶するキャッシュメモリである。Ｌ１データキャッシュ１３１は、外部メモリ１０２から読み出されＬ２キャッシュ１４１に記憶（格納）されたデータを記憶するキャッシュメモリである。Ｌ１命令キャッシュ１２１は、ＥＸＵ１１１が実行する命令を記憶するキャッシュメモリである。カウンタキャッシュ１８１は、カウンタ値を記憶するキャッシュメモリである。ＭＶＵ１９１は、検証対象アドレススタック(検証スタック)１９２及びMAC値スタック(MACスタック）１９３を有し、外部メモリ１０２に格納されたデータの読み出しや外部メモリ１０２へのデータの書き込みに対して、カウンタキャッシュ１８１に格納されたカウンタ値を用いて後述の階層的な改ざん検証を行う。専用ハードウェア暗号エンジン１７１は、ＭＶＵ１９１が改ざん検証を行なう際にＭＶＵ１９１からの要求に応じて、MAC計算を行う。制御レジスタ２０１は当該マイクロプロセッサの動作を制御するレジスタ群を保持する記憶手段であり、ＥＸＵ１１１から値を設定することができる。制御レジスタ２０１は、汎用制御レジスタ（ＣＲ)２０２を有すると共に、後述するルート機密値２０３を記憶する。
【００１２】
次に、本実施の形態の基本となるメモリ完全性検証の計算方法について説明する。本実施の形態におけるメモリ完全性検証とは、データに対する改ざんを検出する改ざん検証である。ここでは、マイクロプロセッサ１０１から外部メモリ１０２に書き込まれたデータについて、次に読み出されたときの値と書き込まれたときの値とが異なっているとき改ざんされたものと定義する。マイクロプロセッサ１０１の外部にある外部メモリ１０２上のデータが変更されても、その時点ではマイクロプロセッサ１０１はその変更を検出することはできず、外部メモリ１０２から次にデータを参照するときに暗号的手法を用いて改ざんの有無を判定することをもって改ざん検出と定義する。上述の非特許文献１でも同様の定義が用いられている。なお、改ざん検出においてマイクロプロセッサ１０１は以前に書き込まれたデータをそのままの形式で直接保持し比較しているわけではなく、MAC検証値(データ検証値)と呼ばれる圧縮した値及びMAC計算に必要なカウンタのみをマイクロプロセッサ１０１内部に保持することでマイクロプロセッサ１０１に内蔵されるキャッシュメモリ等のメモリのサイズを小さく抑えている。尚、以下では、説明の便宜上、MAC検証値を単にMAC値又はMACと表記する。
【００１３】
図２は、本実施の形態に係るメモリ完全性検証に係るマイクロプロセッサ１０１の構成を例示する図である。同図に示されるように、外部メモリ１０２に、情報として、データ１０２−１、MAC１０２−２及びカウンタ(CTR)１０２−３が格納されているものとする。
【００１４】
メモリ完全性検証の計算において、以下ではビット操作についてverilogにならった次の表記を用いる。
X[63:6]  :  値Xの63ビットから6ビット目の範囲。LSBをビット0とする。
X||Y  :  XとYのビット連接。
【００１５】
暗号演算について以下の表記を用いる。
Y  =  E_S[X]  :  秘密鍵Sによる  XのAES共通鍵ブロック暗号化により  Yを計算する。S,X,Y全てのデータサイズはブロック長に一致。以下ではAES128を例にとりブロック長が128ビット(16バイト)として説明するがそのほかの暗号アルゴリズムを用いても差し支えない。
Z  =  MAC_S[D0..D3]]  :  各々が共通鍵ブロックサイズのD0,D1,D2,  XD3の4ブロックのデータに対し秘密鍵Sに基づく共通鍵ブロックベースの固定長CMACアルゴリズムを適用してMAC値Zを得る。Z,Sのデータサイズも共通鍵ブロック長に一致する。以下では64バイト（キャッシュラインサイズ）のキャッシュライン単位にMACを適用することを前提として、16バイトのデータブロック4個の64バイトのデータのMACを計算する。
【００１６】
以下にパラメータを挙げる。
RS(２０３−３):  Root  Secret  外部メモリ１０２のメモリ領域全体で共通に使われる値であって、外部メモリ１０２に対して割り当てられた機密値（ルート機密値）。マイクロプロセッサ１０１内部に常に保持される。
Addr:キャッシュライン内の検証対象ブロックの先頭アドレス。ビット幅は64ビット。本実施の形態では暗号演算のブロック長が16バイトであるため下位4ビット(Addr[3:0])は常に「0」である。
D(Addr)[c]:  Addrを先頭アドレスとするキャッシュラインサイズのデータ(D0..D3)。cは当該アドレスによって格納場所が示されるデータがマイクロプロセッサ１０１から書き込まれた回数が増える度にインクリメントされる。
Cm:マイナーカウンタ（下位カウンタ）。キャッシュライン毎に定義されるカウンタ値。検証対象のキャッシュラインの先頭アドレスAddr  に対応するCmをCm(Addr)と表記する。D(Addr)の書き込み1回毎にCmはインクリメントされる。初期値は「0」。
CM:メジャーカウンタ（上位カウンタ）。複数のキャッシュラインで共有されるカウンタ値。62ビット幅。検証対象のキャッシュラインの先頭アドレスAddrに対応するCMをCM(Addr)と表記する。Cmのオーバフローの都度  CMはインクリメントされる。初期値は「0」。
Sd:ライン毎シード値。128ビット幅。
Sd  =Addr[63:4]||CM||Cm・・・（式１）
【００１７】
尚、上述のシード値の計算式１は非特許文献1の公知技術に記載されているものであり、後述の本実施の形態では計算式１ともうひとつの計算式を併用することを付記しておく。
【００１８】
あるアドレスAddrのキャッシュラインXに対するアドレス及びMACの値（MAC値）Vは、ブロック毎機密値  S[Addr,c]  を用いて次の式２で計算される。
S[Addr,c]=  E_RS[Sd]=  E_RS[Addr[63:4]||CM[60:0]||Cm[6:0]：ブロック毎機密値
V  [D(Addr)[c]]=MAC_S[  D(Addr)[c]]・・・(式２)
ここでc=CM[60:0]||Cm[6:0]である。
【００１９】
上述の式２でMAC値が計算されるとき、マイクロプロセッサ１０１において、MAC値の導出に使われる秘密鍵Sdは、全てのキャッシュラインのブロック毎アドレスAddr及び書き込み回数cについて決して重複することはないことは定義から明らかである。あるデータの書き込み回数cはCM||Cmに一致する。ブロック毎に一意のアドレスAddrとCM||Cmの連接値をルート秘密鍵RSにより暗号化したものがブロック毎に書き込みの都度更新されるMAC秘密鍵Sとなる。AddrとCM  ||Cmは本実施の形態に係るメモリシステムにおいて一意であり、AESブロック暗号は関数として全単射の性質をもつためSも一意であることが保証される。
【００２０】
秘密鍵Sが正しく一意性を持てば、Data(Addr)[c]と検証値V[Data(Addr)[c]]のいずれも改ざんの可能性がある外部メモリ１０２に格納させても安全である。なぜなら、秘密鍵RSについてData(Addr)[c]に対する検証値V[Data(Addr)[c]]の生成に使われるSはただ1回だけ使われ、他のデータのMAC値計算には異なるS[Addr,c]が使われているためである。但し、この一意性が保証されるのは上述の手順が正しく行われ、データの書き込みの都度カウンタ値が正しくインクリメントされていることが必要となる。これらの処理とパラメータの全てがマイクロプロセッサ１０１内に格納されている場合は安全だが、検証対象となるメモリ領域が非常に大きい場合、カウンタ値をマイクロプロセッサ１０１内に全て格納することは困難である。図３は、従来方式におけるカウンタ値の格納形式を示す図である。同図に示されるように、CMに60ビット、Cmに7ビットを割り当てた場合、検証対象の1/64のメモリサイズが必要となってしまう。
【００２１】
そこで、本実施の形態においては、カウンタ値が格納されるキャッシュライン（カウンタライン）についてもデータ同様にMACを用いた改ざん検証を適用し、さらに階層化することにより、どれだけ大きなメモリ領域に改ざん検証を適用したとしても、マイクロプロセッサ１０１内部に固定的に保持しなければならないデータのサイズを小さく抑えている。  
【００２２】
マイクロプロセッサ１０１内部に持つルート機密値を用いて外部メモリ１０２に格納されたデータに対する改ざん検証では以下が適用される。
RS(203-1):共通
Root  MAC(２０３−２):128ビットのMAC値である機密値。マイクロプロセッサ１０１内部に常に保持される。
これら機密値のサイズは合計してもRoot  MAC(128ビット),Root  Secret(128ビット)の合計32バイト程度であり、後述のように検証対象に対してはるかに小さい。
【００２３】
以下、階層的な改ざん検証を行う手順をより詳細に説明するにあたって、図３〜６を用いて検証用のデータの構造の概要と外部メモリ１０２上及びマイクロプロセッサ１０１内部における格納形式を説明する。図４は、検証用のデータ構造を示す図である。符号２０３は既に説明したマイクロプロセッサ１０１内部に保持されるルート機密値であり、Root  Secret２０３−１,Root  MAC２０３−２,Root  CTR２０３−３で構成される。符号１０２−１は検証対象のデータを表し、Data0〜Data4095の4096個の64バイトのキャッシュラインに対応するデータを含んでいる。符号１０２−２,１０２−３はそれぞれMACとカウンタ値(CTR)を示す。これらは階層的に構成されており、ここでは2階層の親子関係を有する例が示されている。
【００２４】
上述のメモリ完全性検証の計算方法の説明で示したように、検証対象のデータ64バイトに対してMACは16バイトである。Data0に対応するMACはMAC0-0であり、MAC0-0〜MAC0-3の4ブロックのデータがひとつのキャッシュライン(MACライン  ML0)に格納される。データからMACを計算する際にはカウンタ値が必要である。図４に示されるように、CTR1-0の１カウンタラインにML0〜ML16のMACラインのMAC値の計算に必要なカウンタ値が格納されている。図５は、本実施の形態に係る外部メモリ１０２におけるカウンタ値の格納形式を示す図である。図５に示される本実施の形態に係る格納形式と上述の図３に示される従来方式に係る格納形式とでは若干の差異があるが、上位カウンタ（Majorカウンタ６０２，７０２）64ビットをカウンタラインCTR1-0内で共通に持ち、各MACラインMAC0-0〜MAC1-63に対応する64個の下位カウンタ（Minorカウンタ６０３−０〜６０３−６３，７０３−０〜７０３−６３）を持つ。MACブロック(ML0)に格納される4個のMACブロック(MAC1-0〜MAC1-3のMAC値計算において、上位カウンタ値及び下位カウンタ値は共通の値が使われるが、それぞれのブロックは異なるアドレスを持つためMAC計算におけるシード値はそれぞれ異なっており、ブロック間のデータ交換攻撃が行われても検出が可能である。いずれにおいても、上位カウンタを共有する下位のカウンタが統合され、階層構造を有する格納形式である。尚、従来方式では、下位カウンタにおいてカウンタ値を表すのは7ビットであるが、本実施の形態においては、下位カウンタ７０３−０〜７０３−６３のうちそれぞれカウンタ値を表すのは6ビット（７０３−０―ｃ〜７０３−６３―ｃ）であり、残り1ビットは後述のライトフラグ（７０３−０―ｗ〜７０３−６３―ｗ）である。
【００２５】
4096個のデータが格納されるキャッシュライン（データライン）を検証するために１階層目には1024個のMACライン(MAC1-0〜MAC1-1023)と64個のカウンタライン(CTR1-0〜CTR1-63)が必要である。さらに１階層目のカウンタラインの改ざんを防止するため、２階層目のMAC,CTRが設けられる。CTR1-0〜CTR1-63に対応するMAC値がMAC2-0〜MAC2-15に格納され、MAC計算に必要なカウンタ値がCTR2-0に格納される。ここではMACが格納されるMACラインが16個、カウンタ値が格納されるカウンタラインが1個となる。最後にCTR2-0の１個のカウンタラインに対するMACがマイクロプロセッサ１０１内部のRoot  MACに格納される。Root  MACは外部からの改ざんや傍受が不能なためカウンタは不要である。
【００２６】
尚、本実施の形態では階層を2階層とし、検証対象のデータ（検証対象データ）のサイズを「4096×64  =  256」KBとしたが、階層数を追加することで任意の範囲にあるデータを検証対象とすることができる。
【００２７】
上述のデータ、MAC及びカウンタは外部メモリ１０２上に格納され、検証対象データのアドレス（検証対象アドレス）が決定されれば、その検証に必要な上位カウンタ値が格納されるカウンタライン及びMACが格納されているMACラインのアドレスは一意に決定可能であるものとする。より具体的には、図１のレジスタ２０２をコントロールレジスタとして、当該レジスタ２０２に検証対象アドレスの範囲（検証対象アドレス範囲）、カウンタ及びMACの先頭アドレスが格納されており、ＭＶＵ１９１がこれらのアドレスを計算して改ざん検証を行う。
【００２８】
データ及びカウンタ値はマイクロプロセッサ１０１内部でキャッシュメモリに格納される。具体的には、データは、Ｌ１データキャッシュ１３１及びＬ２キャッシュ１４１のうち少なくとも一方に格納され、カウンタ値は、カウンタキャッシュ１８１に格納される。一般にキャッシュメモリに格納された情報であるキャッシュには、タグと呼ばれる制御データが付加される。図６は、キャッシュのデータ形式を示す図である。符号８１６はデータであり、データもしくは図３の符号６０１又は図５の符号７０１で示されるカウンタラインの内容が格納される。符号８１１は当該キャッシュラインが有効かを示すv(valid)ビットである。書き込みフラグ８１２は当該キャッシュラインの読み出し後のデータの変更の有無を示すd(dirty)ビットである。dビットが「1」の場合書き込みがあり、当該キャッシュラインフラッシュの際に外部メモリ１０２へのデータ書き戻しが必要となる。以上は一般的な制御ビットである。検証対象フラグ８１３は当該キャッシュラインに格納されたデータもしくはカウンタ値が検証対象のデータであるかどうかを示すx(eXamine)ビットである。検証済みフラグ８１４は当該キャッシュラインに検証対象のデータが格納されているとき、そのデータに対する改ざん検証が完了状態であることを表す  s(status)ビットである。これは、階層的な改ざん検証には時間がかかるため、データの格納は完了しても改ざん検証がまだ完了しない期間にキャッシュメモリに格納されたデータへのアクセスが行われないようにするためのものである。これら２つのフィールドは本実施の形態の改ざん検証に関わるビットである。
【００２９】
ここで、上述のライトフラグについて説明する。ライトフラグの値は初期状態では「0」である。MACライン及びカウンタに対応するデータが格納されているキャッシュライン（データラインという）がそれぞれカウンタキャッシュ１８１とＬ２キャッシュ１４１とに読み出されている状態で、データラインへの書き込み(ＢＩＵ１５１からＬ１データキャッシュ１３１のあるキャッシュラインへのデータ書き込みの後、Ｌ１データキャッシュ１３１から当該キャッシュラインがフラッシュされ、Ｌ２キャッシュ１４１に反映されたとき)が行われると、データライン８０１の書き込みフラグ８１２のdirtyビット及び当該キャッシュラインに対応するカウンタのライトフラグ７０３―ｘ−ｗ（ｘ＝０〜６３）が「1」に設定される。なお、書き込みフラグ８１２はタグなので当該キャッシュラインがフラッシュされるときも外部メモリ１０２に書き出されることはないが、カウンタのライトフラグ７０３―ｘ−ｗは当該キャッシュラインがフラッシュされるときに他の情報とともにマイクロプロセッサ１０１外部である外部メモリ１０２に書き出されることを付記しておく。
【００３０】
次に、本実施の形態に係るメモリ完全性検証の前提となるメモリ検証の方式(BMT方式)をキャッシュメモリに適用した場合の動作の概要について図７を用いて説明する。尚、図２に示されるように、外部メモリ１０２に、情報として、データ１０２−１、MAC１０２−２及びカウンタ(CTR)１０２−３が格納されており、Ｌ１データキャッシュ１３１及びＬ２キャッシュ１４１共にアクセス対象のデータを保持しておらずキャッシュミスが発生し、外部メモリ１０２からのデータの読み出し時に改ざん検証が行われる場合の手順の概要を説明する。この場合、図７に示されるように、まず、ＥＸＵ１１１がＬ１データキャッシュ１３１へアドレスAddrのデータ読み出し要求を発行したとき(ステップＳ１)、Ｌ１データキャッシュ１３１においては、キャッシュミスとなり、Ｌ１データキャッシュ１３１はＬ２キャッシュ１４１へアドレスAddrのデータ読み出し要求を発行する(ステップＳ３)。一方、ＭＶＵ１９１は、内部バス１６１の監視により、Ｌ１データキャッシュ１３１からＬ２キャッシュ１４１へのデータ読み出し要求のデータアドレスAddrが、要求ＣＲ２０２に設定された検証対象範囲アドレス内にあることを検出する(ステップＳ４)。ステップＳ３の後、Ｌ２キャッシュ１４１においても、キャッシュミスとなり、Ｌ２キャッシュ１４１はＢＩＵ１５１にアドレスAddrのデータ読み出し要求を発行する(ステップＳ６)。
【００３１】
その後、ＢＩＵ１５１は、外部メモリ１０２からアドレスAddrのデータを読み出してデータ本体を取得し、これをＬ２キャッシュ１４１に格納させる。ＢＩＵ１５１は、当該データが格納されるデータラインの制御フラグに検証対象であり、かつ検証が未完了であることを示すフラグを設定する(ステップＳ７)。具体的には、ＢＩＵ１５１は、xビットを「1」に、sビットを「0」に設定する。その後、ＢＩＵ１５１は、検証スタック１９２をクリアし、これから改ざん検証を行う検証対象アドレスをアドレスAddrに設定する(ステップＳ８)。そして、ステップＳ２０〜Ｓ３３において、Ｌ２キャッシュ１４１及びカウンタキャッシュ１８１へのデータの読み出しと読み出されたデータに対してMACを用いた階層的な改ざん検証が行われる。階層的な改ざん検証の詳細な手順については後述する。この改ざん検証が終わると、ステップＳ１０では、Ｌ２キャッシュ１４１からＬ１データキャッシュ１３１へデータを読み出すフィル処理を行う。そして、ステップＳ１１では、ＥＸＵ１１１がＬ１データキャッシュ１３１から検証済みのデータを取得する。
【００３２】
次に、本実施の形態に係る階層的な改ざん検証の手順について図８を用いて詳細に説明する。尚、図７で説明したステップＳ８の後、図８のステップＳ２０の前に、ＭＶＵ１９１は、Ｌ２キャッシュ１４１から取得した読み出し対象のデータのアドレスを取得している。また、ステップＳ８では、ＭＶＵ１９１内の検証スタック１９２がクリアされ、上述の読み出し対象のアドレスが検証対象アドレスとして設定されている。ステップＳ２０では、ＭＶＵ１９１は、検証対象がカウンタラインのトップ(CTR2-0)であるか否かを判定する。
【００３３】
検証対象がカウンタラインのトップでない場合（ステップＳ２０：ＮＯ）、ＭＶＵ１９１は、検証対象アドレスに対応する上位カウンタのカウンタライン及びMACラインの格納先のアドレスを所定の方法により計算する。MACラインについてはＬ２データキャッシュ１４１または外部メモリ１０２からMACラインを取得し、４個のMACブロックから検証対象に対応するMACブロック1個をMACスタック１９３にpushする(ステップＳ２１)。次いで、ＭＶＵ１９１は、ステップＳ２１で計算したカウンタラインの内容がカウンタキャッシュ１８１にヒットするか否かを判定する（ステップＳ２２）。カウンタラインの内容がカウンタキャッシュ１８１にヒットした場合（ステップＳ２２：ＹＥＳ）且つ検証済みの状態である場合にはカウンタキャッシュ１８１に格納されたカウンタ値は改ざん検証済みで信用できることを意味する。この場合、ステップＳ２６に進み、MAC値を用いた改ざん検証が行われる。
【００３４】
一方、カウンタラインの内容がカウンタキャッシュ１８１においてキャッシュミスした場合（ステップＳ２２：ＮＯ）、ＭＶＵ１９１は、カウンタをステップＳ２１で計算した格納先のアドレスから取得しカウンタキャッシュ１８１に格納する(ステップＳ２３)。そして、ＭＶＵ１９１は、検証スタック１９２に検証対象アドレスをpushする（ステップＳ２４）。その後、ＭＶＵ１９１は、カウンタの格納先のアドレスを次の検証対象アドレスに設定して（ステップＳ２５）、ステップＳ２０に戻る。この手順により階層を下位から上位に辿る動作が行われる。
【００３５】
ステップＳ２６では、ＭＶＵ１９１は、検証スタック１９２をpopして得られた一階層下位の検証対象アドレスの内容（データの場合はステップＳ７でＬ２キャッシュ１４１に格納済み、カウンタの場合はステップＳ２３でカウンタキャッシュ１８１に格納済み）に対するMAC計算を専用ハードウェア暗号エンジン１７１に要求し、専用ハードウェア暗号エンジン１７１から当該データに対するMAC値を得る。専用ハードウェア暗号エンジン１７１は、ＭＶＵ１９１からの要求に応じて当該データに対するMAC計算を行い、この結果得られたMAC値をＭＶＵ１９１に渡す。次にＭＶＵ１９１は、MACスタック１９３をpopしてステップＳ２１で外部メモリ１０２から取得したMAC値を得る（ステップＳ２７)。ＭＶＵ１９１は、ステップＳ２１，Ｓ２７で得られたMAC値を比較し、これらが一致するか否かを判定する（ステップＳ２８）。これらが一致した場合（ステップＳ２８：ＹＥＳ）、当該データに対する改ざん検証は成功であり、ステップＳ２９に進む。ステップＳ２１，Ｓ２７で得られたMAC値が不一致の場合（ステップＳ２８：ＮＯ）、ステップＳ３３に進み、ＭＶＵ１９１は、検証失敗後処理を行う。
【００３６】
ステップＳ２９では、ＭＶＵ１９１は、スタック処理により検証スタック１９２とＭＡＣスタック１９３とが空であるか否かを判定する。検証スタック１９２とＭＡＣスタック１９３とが空である場合（ステップＳ２９：ＹＥＳ）、即ち、ステップＳ７で外部メモリ１０２からＬ２キャッシュ１４１に読み出されたデータに対する完全性検証が成功したということであり、当該データは改ざんされていないことが検出される。この場合、図７のステップＳ１０に進み、上述したように、Ｌ２キャッシュ１４１からＬ１データキャッシュ１３１に対してデータを読み出すフィル処理が行われる。一方、検証スタック１９２とＭＡＣスタック１９３とが空でない場合（ステップＳ２９：ＮＯ）、ＭＶＵ１９１は、Ｌ２キャッシュ１４１においてデータを読み出したキャッシュラインに検証済みフラグ８１４を設定して（ステップＳ３０）、その後、ステップＳ２６に戻ることによって、同様の処理が繰り返され、この結果、階層的な改ざん検証が行われることになる。
【００３７】
ところで、カウンタキャッシュ１８１に検証済みのカウンタ値がひとつもない場合は、ステップＳ２０で、検証対象がカウンタラインのトップであると判定される（ステップＳ２０：ＹＥＳ）。この場合、ステップＳ３１に進み、ＭＶＵ１９１は、検証スタック１９２にカウンタライントップ(CTR-2-0)のアドレスをpushし、ステップＳ３２では、MACスタック１９３に  Root  MAC  ２０３−２の値をpushする。その後、ステップＳ２６に進み、上述したループ処理の実行により階層的な改ざん検証が行われる。
【００３８】
次に、MACの計算タイミングについて説明する。MACが計算され外部メモリ１０２に書き込まれるのは、Ｌ２キャッシュ１４１又はカウンタキャッシュ１８１に格納されているデータで検証対象フラグ８１３が「1」且つライトフラグ８１２が「1」のラインがフラッシュされ外部メモリ１０２に書き込まれるときである。MACの計算には検証済みの対応するカウンタ値が必要となる。その場合はＭＶＵ１９１により上述のキャッシュラインの書き込み時の改ざん検証と同様の手順でカウンタが階層的な改ざん検証を経てカウンタキャッシュ１８１にカウンタラインが読み出され、データに対応する下位カウンタ値をインクリメントしたうえでMACが計算され、Ｌ２キャッシュ１４１から書き込まれるデータと共に外部メモリ１０２に書き込まれる。
【００３９】
ここで、従来技術及び本実施の形態におけるキャッシュラインの書き込み時のMAC計算処理の手順について説明する。図３，５を用いて説明したように、下位カウンタ(６０３−０〜６０３−６３,７０３−０〜７０３−６３)は7又は6ビットのサイズであり、対応するデータラインが128回又は64回読み出しと書き込み（フラッシュ）とをくりかえすとオーバフローしてしまう。下位カウンタのオーバフローが起きた場合、上位カウンタをインクリメントし、下位カウンタを「0」にリセットする。このとき、フラッシュされるキャッシュライン(以下原因ラインと呼ぶ)についてデータ（第１のデータ）及びMAC（第１のデータ検証値）の書き込みを行うのは当然だが、上位カウンタの値が変更されるため、上位カウンタを共有する他のキャッシュライン(以下関連ラインと呼ぶ第２のデータ)も上位カウンタの値変更にあわせてデータ（第２のデータ）の読み出しとMAC（第１のデータ検証値）の再計算、そしてMACの書き込みを行う。ここで再計算のために新たに読み出されたデータ及びキャッシュライン上に既に存在して変更のないデータについてはMACのみの再計算で良く、データの書き込みは不要である。以下、この一連の手順をオーバフロー時のMAC再計算と呼ぶ。オーバフロー時のMAC再計算では、本来読み出しの必要がないデータを一度読み出し、MACを再計算して書き込むことになり、この処理は内部バス１６１及びマイクロプロセッサ１０１内部のメモリ(符号１２１，１３１，１４１，１８１)を占有する点で大きなオーバヘッドとなるだけでなく、内部バス１６１及び専用ハードウェア暗号エンジン１７１が集中的に占有される。このため、メモリシステム全体の応答性能の低下を招いてしまう。そこで、本実施の形態においては、データに対する完全性検証の精度を維持しつつ、下位カウンタのオーバフロー時のMAC再計算の回数を削減して、メモリシステム全体の応答性能の低下を抑制可能にする。
【００４０】
ここで、まず、キャッシュラインの書き込み時のMAC計算処理の手順について図９を用いて説明する。これはＬ２キャッシュ１４１又はカウンタキャッシュ１８１のいずれかのキャッシュメモリで書込みフラグ８１２と検証対象フラグ８１３とが「1」であるキャッシュラインのデータ（第１のデータ）が外部メモリ１０２に書き込まれるときに行われる処理である。ＭＶＵ１９１は、書き込み対象アドレスに対応する下位カウンタをインクリメントする(ステップＳ４０)。カウンタラインがキャッシュメモリ上になければカウンタラインの読み出しと検証とが行われる。このとき、書き込み対象のキャッシュラインはキャッシュメモリ上にあるため、当該キャッシュラインのMAC検証は不要である。
【００４１】
次いで、ＭＶＵ１９１は、ステップＳ４０でのインクリメントにより下位カウンタのオーバフローがあるか否かを判定し（ステップＳ４１）、下位カウンタのオーバフローがある場合（ステップＳ４１：ＹＥＳ）、ＭＶＵ１９１は、上位カウンタをインクリメントし、下位カウンタをリセットして（ステップＳ４５）、その後、ステップＳ４６で関連ラインのMAC再計算処理を行う。
【００４２】
一方、下位カウンタのオーバフローがない場合（ステップＳ４１：ＮＯ）、ＭＶＵ１９１は、「上位カウンタ×定数+下位カウンタ」を検証用シード値として割り当て（ステップＳ４２）、当該データに対するMAC計算を専用ハードウェア暗号エンジン１７１に要求し、専用ハードウェア暗号エンジン１７１から当該データに対するMAC値を得て（ステップＳ４３）、データ及びMACを外部メモリ１０２に書き込む（ステップＳ４４）。
【００４３】
次に、ステップＳ４６で行う関連ラインのMAC再計算処理の詳細な手順について従来技術と本実施の形態とで対比しながら説明する。図１０は、従来技術における関連ラインのMAC再計算処理の手順を示すフローチャートである。図１１は、本実施の形態における関連ラインのMAC再計算処理の手順を示すフローチャートである。まず、従来技術における手順について説明する。ＭＶＵ１９１は、上位カウンタをインクリメントし（ステップＳ５０）、同一のカウンタラインを共有するキャッシュライン(関連ライン)の先頭アドレスを検証対象アドレスとして設定する（ステップＳ５１）。その後、ＭＶＵ１９１は、検証対象アドレスから検証対象データ（第２のデータ）をキャッシュメモリから読み出し、当該検証対象データに対して改ざん検証を行う（ステップＳ５２）。そして、ＭＶＵ１９１は、下位カウンタ値を「0」にリセットする(ステップＳ５３)。その後、ＭＶＵ１９１は、「上位カウンタ×定数」をデータ書き込みにおける検証用シード値（第１のデータ毎機密値）として割り当て（ステップＳ５４）、当該データに対するMAC計算を専用ハードウェア暗号エンジン１７１に要求し、専用ハードウェア暗号エンジン１７１から当該データに対するMAC値（第１のデータ検証値）を得てデータ及びMACを外部メモリ１０２に書き込む（ステップＳ５５）。そして、ＭＶＵ１９１は、次のキャッシュラインの先頭アドレスを検証対象アドレスに設定する（ステップＳ５６）。次いで、ＭＶＵ１９１は、原因ラインを除く関連ラインの全てについてMAC再計算が完了したか否かを判定し（ステップＳ５７）、当該判定結果が否定的である場合（ステップＳ５７：ＮＯ）、ステップＳ５２に戻り、当該判定結果が肯定的である場合（ステップＳ５７：ＹＥＳ）、関連ブロックのMAC再計算処理を終了する。
【００４４】
次に、本実施の形態に係るステップＳ４６で行う関連ブロックのMAC再計算処理の手順について図１１を用いて説明する。尚、この処理に先立って、ＭＶＵ１９１は、原因ラインフラッシュによる下位カウンタにおけるオーバフローの発生のため上位カウンタがインクリメントされていることを確認しておく。そして、ステップＳ６０では、ＭＶＵ１９１は、図１０のステップＳ５１と同様に、同一のカウンタラインを共有するキャッシュライン(関連ライン)の先頭アドレスを検証対象アドレスとして設定する。図４の例では、原因ラインがData3であるときCTR1-0  にカウンタ値が格納されるData0〜Data63が関連ライン（第２のデータ）となる。検証対象アドレスはData0の先頭アドレスが設定される。 
【００４５】
次いで、ＭＶＵ１９１は、当該関連ラインのライトフラグが「1」であるか否かを判定し（ステップＳ６１）、当該ライトフラグが「1」である場合（ステップＳ６１：ＹＥＳ）、即ち、書き込みがあった場合は、従来技術と同様に最新の上位カウンタの値に基づいてMAC値を再計算する。具体的には、ＭＶＵ１９１は、図１０のステップＳ５２と同様にして、当該関連ラインに記憶された検証対象データを読み出し、上述した図８のステップＳ２０〜Ｓ３３の改ざん検証を行う（ステップＳ６６）。その後、本実施の形態においては従来技術と異なり、ＭＶＵ１９１は、当該関連ラインのライトフラグを「0」にリセットする。また、ＭＶＵ１９１は、図１０のステップＳ５３と同様にして、下位カウンタ値を「0」にリセットする（ステップＳ６７）。その後、ＭＶＵ１９１は、図１０のステップＳ５４〜Ｓ５５と同様にして、「上位カウンタ×定数」を検証用シード値として割り当て（ステップＳ６８）、当該データに対するMAC計算を専用ハードウェア暗号エンジン１７１に要求し、専用ハードウェア暗号エンジン１７１から当該データに対するMAC値を得て、データ及びMACを外部メモリ１０２に書き込み（ステップＳ６９）、ステップＳ６４に進む。
【００４６】
一方、当該関連ラインのライトフラグが「0」の場合（ステップＳ６１：ＮＯ）、即ち、当該関連ラインに書き込みがない場合は、ＭＶＵ１９１は、下位カウンタ値をインクリメントする(ステップＳ６２)。次いで、ＭＶＵ１９１は、下位カウンタがオーバフローしたか否かを判定し（ステップＳ６３）、下位カウンタがオーバフローした場合（ステップＳ６３：ＹＥＳ）、ステップＳ６６に進む。この結果、従来技術と同様に最新の上位カウンタの値に基づいて当該データに対するMAC再計算が行われる(ステップＳ６６〜Ｓ６９)。
【００４７】
下位カウンタがオーバフローしない場合は（ステップＳ６３：ＮＯ）、ＭＶＵ１９１は、当該ラインについては、従来技術とは違ってMAC再計算をスキップして、ステップＳ６４では、次の関連ライン(Data1)を対象アドレスに設定する。そして、ＭＶＵ１９１は、原因ラインを除く関連ラインの全てについてMAC再計算が完了したか否かを判定し（ステップＳ65）、当該判定結果が否定的である場合（ステップＳ６５：ＮＯ）、ステップＳ６１に戻り、当該判定結果が肯定的である場合（ステップＳ６５：ＹＥＳ）、関連ブロックのMAC再計算処理を終了する。
【００４８】
以上のように、本実施の形態においては、下位カウンタのオーバフロー時のMAC再計算の回数の削減を、MAC再計算のスキップによって実現する。但し、そもそもMAC再計算は上位カウンタの更新をMACの値に反映させるために行うものなので、MAC再計算を単純にスキップしただけでは上述の改ざん検証に失敗してしまう。その回避のためにキャッシュラインの読み込み時におけるMAC計算にも従来技術との違いが存在する。
【００４９】
次に、キャッシュラインの読み込み時におけるMAC計算処理の手順について従来技術と本実施の形態とで対比しながら説明する。図１２は、従来技術に係るキャッシュラインの読み込み時におけるMAC計算処理の手順を示すフローチャートである。図１３は、本実施の形態における、キャッシュラインの読み込み時におけるMAC計算処理の手順を示すフローチャートである。まず、従来技術における手順について説明する。ＭＶＵ１９１は、検証対象アドレスに対応する下位カウンタ値及びライトフラグを取得する（ステップＳ８０）。そして、ＭＶＵ１９１は、「上位カウンタ×定数+下位カウンタ」を読み込みにおける検証用シード値（第２のデータ毎機密値）として割り当て（ステップＳ８１）、当該データに対するMAC計算を専用ハードウェア暗号エンジン１７１に要求し、専用ハードウェア暗号エンジン１７１から当該データに対するMAC値（第２のデータ検証値）を得る（ステップＳ８２）。
【００５０】
次に、本実施の形態に係るキャッシュラインの読み込み時におけるMAC計算処理の手順について図１３を用いて説明する。ステップＳ９０では、ＭＶＵ１９１は、図１２のステップＳ８０と同様にして、検証対象アドレスに対応する下位カウンタ値及びライトフラグを取得する。その後、ＭＶＵ１９１は、ステップＳ９０で取得したライトフラグが「1」であるか否かを判定する（ステップＳ９１）。当該ライトフラグが「1」である場合（ステップＳ９１：ＹＥＳ）、ＭＶＵ１９１は、図１２のステップＳ８１と同様にして、検証用シード値を得て（ステップＳ９４）、ステップＳ９３に進む。一方、当該ライトフラグが「0」である場合（ステップＳ９１：ＮＯ）、即ち、当該ラインに対して前回のMAC計算以後書き込みがない場合には、ＭＶＵ１９１は、「(上位カウンタ−下位カウンタ)×定数」を検証用シード値（第２のデータ毎機密値）として割り当て（ステップＳ９２)、ステップＳ９３に進む。ステップＳ９３では、ＭＶＵ１９１は、検証用シード値を用いて当該データに対するMAC計算を専用ハードウェア暗号エンジン１７１に要求し、専用ハードウェア暗号エンジン１７１から当該データに対するMAC値を得る。ステップＳ９３で得られた読み込みにおける比較用MAC値（第２のデータ検証値）は、図８のステップＳ２７で、外部メモリ１０２から取得されたMAC値と比較されることになる。
【００５１】
ここで、図１１に示したMAC再計算処理及び図１３に示したMAC計算処理を組み合わせることで、MAC値再計算のスキップと正しい改ざん検証との両立が可能な理由を説明する。まず関連ラインのMAC値再計算処理では、原因ブロックのフラッシュによる上位カウンタのインクリメントにおいて、関連ラインのうちライト（書き込み）がなく値の変わらないものについては、下位カウンタをインクリメントしていた。このとき、下位カウンタは、当該関連ラインが上位カウンタのインクリメントにあたってのMAC値再計算を何回スキップしたかを保持するために機能している。そして、検証時には、ライトフラグが「0」のキャッシュライン（即ち関連ライン）については、下位カウンタの値を上位カウンタから差し引いて検証用シード値を計算している。従来技術においてはライトがないキャッシュラインではキャッシュのフラッシュは不要なので、下位カウンタは必ず「0」となるはずであり、ライトフラグを設けることで機能を代替できるのである。
【００５２】
以上のように、本実施の形態においては、完全性検証に用いられ且つ階層的に構成されたカウンタにおいて、上位カウンタ値を共有する親子関係を有する子階層のカウンタについて、子階層対応に上位カウンタ値の前回更新から現在までに書き込みがないことを表現するライトフラグを設け、更に、書き込みがないブロックの下位カウンタ値として、当該ブロックの現在のMAC値の計算において使用された上位カウンタ値と現在の上位カウンタ値との差分値を保持する。これにより、上位カウンタ値を共有する別の子階層のカウンタ値がオーバフローしたときのMAC値の再計算を抑止して、MAC再計算の回数を削減することで、メモリシステムの応答性能の低下を抑制する効果を奏する。この効果としては、カウンタのオーバフロー時のMAC再計算のオーバヘッドをブロック毎のカウンタのビット長を2倍にした場合と同等に削減する効果がある。また、MAC再計算のオーバヘッドを同等としてカウンタのビット長を半分に削減した、同一メモリ領域をカバーするのに必要なカウンタ値のツリーの階層も約半分に削減することができ、カウンタ値のツリーの保持に必要なマイクロプロセッサ１０１内のメモリ容量を削減できる。更に、カウンタのオーバフローに起因するMAC再計算のタイミング分散がメモリアクセスのランダム性に基づいて自然に実現される。このため、特段のスケジュール処理を必要とせずMAC再計算の負荷を時間的に分散してメモリシステムの応答性能の最悪値を改善することができる。また、外部メモリ１０２の利用効率の悪化を防止することができる。
【００５３】
上述の段落００１２〜００２４に記述されたMAC値の暗号計算処理をデータ検証値の計算及び再計算と呼ぶ。また、段落００３３〜００３６のデータ読み込みにおけるMAC検証処理を検証部、段落００３７〜００５１のデータ書き込みにおけるカウンタ値の更新及びMAC値の計算処理を割当部と呼ぶ。階層的な処理を行う割当部と検証部とでは共通化できるハードウェアがあるため、図１に示されるハードウェア構成では割当部と検証部とはＭＶＵ１９１として共通化されている。データ計算は暗号エンジン１７１において行われる。またルート機密値を保持する第１の記憶手段は符号２０３、データ毎のカウンタ値を保持する第２の記憶手段はカウンタキャッシュ１８１としてそれぞれ設けられている。
【００５４】
ここで、本実施の形態に係る効果をより明確にするため、カウンタ値の更新及びMAC値の更新の動作例について図１４〜１７を用いて従来技術と本実施の形態とで対比しながら説明する。図１４は、従来技術におけるカウンタ値の更新及びMAC計算の手順の概要を例示する図である。図１５は、図１４に例示される手順に応じた状態を表す図である。図１６は、本実施の形態におけるカウンタ値の更新及びMAC計算の手順の概要を例示する図である。図１７は、図１６に例示される手順に応じた状態を表す図である。尚、表の形式、キャッシュラインの対応関係及びキャッシュラインのフラッシュが発生するタイミングは従来技術と本実施の形態とで同一である。
【００５５】
図１４において、(1)〜(9)の数字は論理時刻を表す（それぞれの論理時刻の間で物理刻の間隔は一定ではない）。縦軸は、論理時刻(1)〜(9)において、当該カウンタに付与されたMAC値の計算に使われた上位カウンタおよび下位カウンタの値を表している。横軸は、同じ関連ラインに属するライン2,1,0の３個のキャッシュラインのカウンタ値の変化を表している。ここではカウンタのオーバフローを見るため下位カウンタのビット幅を2ビットとしている。３個のキャッシュラインはそれぞれ書き込みのパターンが異なっており、ライン2は読み出しのみ（リードオンリー）のデータであり、キャッシュラインへの書き込みはない。ライン１は書込み（された状態でのフラッシュ）頻度の低いキャッシュラインでありこの図の期間において1回だけデータが外部メモリ１０２に書き戻される(フラッシュされる)。ライン0は書込み頻度の高いキャッシュラインであり、この図の期間において20回フラッシュされる。図１５では、図１４に示される論理時刻毎に、ライン2,1,0に関するカウンタ値、書き込み、フラッシュ及びMAC再計算の状態の変化が表されている。
【００５６】
従来技術においては、図１４〜１５に示されるように、開始時点の論理時刻(1)において、ライン2,1,0は全て「上位カウンタ(C)＝下位カウンタ(c)=0」の状態である。論理時刻(2)でライン0がフラッシュされ、同ラインの下位カウンタ「c=1」となる。論理時刻(3)ではライン1がフラッシュされて同ラインの下位カウンタ「c=1」となる。論理時刻(3)〜(5)では、ライン0にそれぞれ１回ずつのフラッシュが発生してライン0の下位カウンタがオーバフローする。これにより、ライン1,2でMAC再計算が発生する。論理時刻(6)〜(9)ではそれぞれの間にライン0にのみ、４回のフラッシュと１回の下位カウンタオーバフローが発生する。従来技術では、ライン0の下位カウンタオーバフローが発生したとき、関連ラインでは必ずMAC再計算が行われる。図１４〜１５に示される例では、関連ライン2個に対して延べ10回のMAC再計算が行われている。
【００５７】
一方、本実施の形態においては、図１６〜１７に示されるように、ライン0で1回目の下位カウンタのオーバフローが発生する前の論理時刻(4)までの動作は従来技術と同様である。ライン1の下位カウンタのオーバフローが発生した論理時刻(5)の前に、論理時刻(3)でライン1への書き込みとフラッシュがあったため、ライン1のライトフラグは「1」に設定されている。論理時刻(1)〜(5)の間にフラッシュがなかったライン2のライトフラグは「0」のままである。論理時刻(5)において下位カウンタのオーバフローが発生した時に、書き込みのあったライン1については従来技術と同様にMAC再計算が行われる。一方、書き込みのなかったライン2はMAC再計算がスキップされ、代わりに下位カウンタがインクリメントされ「1」に設定される。この処理ではライン2のデータ読み出し及び書き込みは発生せず、カウンタキャッシュ１８１上のライン2に対応する下位カウンタへのインクリメント操作が行われるだけであり、MAC再計算と比較して処理時間は非常に短い。
【００５８】
論理時刻(5)の後、ライン1とライン2とにはフラッシュは発生せず、論理時刻(5)から論理時刻(9)の間にライン0に対して各4回ずつ、合計16回のフラッシュが発生し、合計4回の下位カウンタのオーバフローが発生する。論理時刻(5)から論理時刻(7)の間に発生するライン0のカウンタのオーバフローで、ライン2の下位カウンタは1ずつインクリメントされ、論理時刻(7)〜論理時刻(8)でオーバフローする。このオーバフローのとき、ライン2のMAC再計算が発生する。ライン1の下位カウンタは論理時刻(8)ではまだオーバフローしていないため、MAC再計算は行われない。論理時刻(5)でオーバフローが発生したライン1は遅れて論理時刻(8)〜(9)の間にオーバフローが発生する。
【００５９】
本実施の形態では、このように各キャッシュラインで前回にMAC再計算が発生した時刻に依存してキャッシュライン毎に異なる時刻でMAC再計算が行われるため、MAC再計算のタイミングが時間方向で分散される。このような構成においては、全くフラッシュのないライン2でのMAC再計算は、関連ラインにおける16回の下位カウンタオーバフローあたり1回発生した。一方、従来技術ではライン2でのMAC再計算は関連ラインにおける下位カウンタオーバフロー4回に1回発生しており、下位カウンタのビット長を2倍にしたのと同等の効果が得られている。ライトフラグ保持のためのビットが多く必要となっているが、この場合、カウンタにライトフラグ1ビットを追加しただけではMAC再計算の間隔が4回から8回に増えるだけであり、この差は元のカウンタのビット長が長いほど顕著になる。また、従来技術ではMAC再計算が全ての関連ラインで同時に行われていたのに対し、本実施の形態ではMAC再計算は前回のフラッシュのタイミングに依存して異なるタイミングで実行され、追加のスケジュール機構などを必要とせずに計算負荷を分散させ、システム負荷を平準化させる効果がある。
【００６０】
次に、上述した実施の形態に係るマイクロプロセッサ１０１を、多数の個人情報や課金情報をリアルタイムで処理する電力システムに適用する例について説明する。図１６は、電力システムとして次世代電力網（スマートグリッド）の構成を例示する図である。次世代電力網では、電力使用量を集計するスマートメーター３０１０ａと、家電機器を管理するホームサーバであるＨＥＭＳ（Home  Energy  Management  System）３０２０が各家庭に設置される。また、商業ビルを対象として、ビル内の電気機器を管理するサーバであるＢＥＭＳ（Building  Energy  Management  System）３０３０がビル毎に設置される。商業ビルには、スマートメーター３０１０ａと同様のスマートメーター３０１０ｂが設置される。以下では、スマートメーター３０１０ａ，３０１０ｂを単にスマートメーター３０１０という。
【００６１】
スマートメーター３０１０は、コンセントレータとよばれる中継器（コンセントレータ）３０４０によって数台ごとにまとめられ、通信網を介してメーターデータ管理システムであるＭＤＭＳ（Meter  Data  Management  System）３０５０と通信する。ＭＤＭＳ３０５０は、各家庭のスマートメーター３０１０から一定の間隔で電力使用量を受信して記憶する。エネルギー管理システムであるＥＭＳ（Energy  Management  System）３０６０は、ＭＤＭＳ３０５０に集まった複数の家庭の電力使用量、或いは、電力系統に設置されたセンサからの情報に基づいて、各家庭のスマートメーター３０１０やＨＥＭＳ３０２０に対して電力使用を抑制するよう要求するなどの電力制御を行う。また、ＥＭＳ３０６０は、遠隔端末ユニットであるＲＴＵ（Remote  Terminal  Unit）３０７１に接続された太陽光発電や風力発電などの分散電源３０８０、ＲＴＵ３０７２に接続された蓄電装置３０９０及びＲＴＵ３０７３に接続された発電側との間を制御する送配電制御装置３１００を制御し、スマートグリッド全体の電圧および周波数を安定化するための制御を行う。
【００６２】
本構成において、ＨＥＭＳ３０２０,ＢＥＭＳ３０３０,ＭＤＭＳ３０５０,ＥＭＳ３０６０の各システムは多数のスマートメーター３０１０あるいは電力装置からの情報を収集し、これらの制御や記憶を行う。これらシステムのメモリに対して物理的改ざん攻撃あるいはマルウェアによる改ざん攻撃が行われた場合、課金における不正のような経済的損失のみならず電力網の故障を引き起こすなどの被害を蒙る可能性もある。これらのシステムの少なくとも１つに上述の実施の形態において説明したメモリ完全性検証を適用することにより、これらの被害を防止する効果が得られる。
【００６３】
[変形例]
なお、本発明は前記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、前記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。また、以下に例示するような種々の変形が可能である。
【００６４】
上述した実施の形態においては、キャッシュライン単位にデータ読み書きを行うキャッシュメモリを例にして説明したが、ページ単位などを単位としたデータの読み書きを対象としても良い。その場合、読み書きの単位をブロックと呼ぶ。
【符号の説明】
【００６５】
１０１  マイクロプロセッサ
１０２  外部メモリ
１２１  Ｌ１命令キャッシュ
１３１  Ｌ１データキャッシュ
１４１  Ｌ２キャッシュ
１５１  ＢＩＵ
１６１  内部バス
１７１  専用ハードウェア暗号エンジン
１８１  カウンタキャッシュ
１９１  ＭＶＵ
１９２  検証スタック
１９３  ＭＡＣスタック
【図１】
0005159849.tif 000002
【図２】
0005159849.tif 000003
【図３】
0005159849.tif 000004
【図４】
0005159849.tif 000005
【図５】
0005159849.tif 000006
【図６】
0005159849.tif 000007
【図７】
0005159849.tif 000008
【図８】
0005159849.tif 000009
【図９】
0005159849.tif 000010
【図１０】
0005159849.tif 000011
【図１１】
0005159849.tif 000012
【図１２】
0005159849.tif 000013
【図１３】
0005159849.tif 000014
【図１４】
0005159849.tif 000015
【図１５】
0005159849.tif 000016
【図１６】
0005159849.tif 000017
【図１７】
0005159849.tif 000018
【図１８】
0005159849.tif 000019