(57)【特許請求の範囲】
【請求項１】
信頼できるプロセッサと、信頼できるキャッシュメモリと、大容量記憶メモリとを備えた電子システムのデータ検証方法であって、前記データが前記大容量記憶メモリに記憶され、前記メモリがブロックに分割され、各ブロックがアドレスによって識別され、前記データが検証ツリーを通じてアドレス指定され、前記検証ツリーが、ノードを含むツリー構造であり、子孫ノードがルートノードに帰属し、各ノードが、前記ノードの子孫ノードの各々を含むブロックのアドレス及び前記子孫ノードを格納する各ブロックのダイジェスト値を記憶し、前記方法が、現在のダイジェスト値を前記信頼できるキャッシュメモリに保持しながら、検索データへのアクセスを行うものであり、該検索データへのアクセスが、
ａ）前記現在のダイジェスト値を、前記ルートノードを含むブロックの参照ダイジェストの値に初期化することにより、現在のノードを前記ルートノードに初期化するステップと、
ｂ）前記現在のノードを含むブロックを前記信頼できるキャッシュメモリにロードするステップと、
ｃ）前記ロードしたブロックのダイジェストを計算するステップと、
ｄ）前記計算したダイジェストが前記現在のダイジェスト値と異なる場合、データの破損を報告して前記検索データへのアクセスを停止するステップと、
ｅ）前記現在のノードが前記検索データを含む場合、前記現在のノードを返送して、前記検索データへのアクセスを停止するステップと、
ｆ）サブツリーの派生元である子ノードを特定するステップと、
ｇ）前記現在のノードに記憶された前記子ノードのダイジェストの値を前記現在のダイジェストに割り当て、前記子ノードが前記現在のノードになるようにするステップと、
ｈ）前記ロードステップｂ）にループするステップと、
を通じて行われる、
ことを特徴とする方法。
【請求項２】
前記現在のノードを初期化するステップａ）後に、前記信頼できるメモリ内に位置するブロックが前記現在のノードを含むかどうかを検証する追加ステップを含み、前記ブロックが前記現在のノードを含まない場合、前記ロードステップｂ）と、前記ダイジェストの計算ステップｃ）と、前記ダイジェストの検証及びデータの破損ステップｄ）とを実施する、
ことを特徴とする請求項１に記載の電子システムのデータ検証方法。
【請求項３】
前記初期化ステップが、前記現在のダイジェスト値を、前記信頼できるキャッシュメモリ内に存在するブロックから計算した、前記検索データを含むノードの祖先ノードＮを含むダイジェストの値に初期化することにより、前記現在のノードをノードＮに初期化する、
ことを特徴とする請求項１又は請求項２に記載の電子システムのデータ検証方法。
【請求項４】
前記初期化ステップが、前記ブロックの値が前記信頼できるキャッシュメモリ内に存在する場合、前記現在のダイジェスト値を、前記信頼できるキャッシュメモリ内で見つかったダイジェストの値として初期化することにより、前記現在のノードをノードＮに初期化する、
ことを特徴とする請求項１又は請求項２に記載の電子システムのデータ検証方法。
【請求項５】
前記現在のノードのブロック又はブロックダイジェストが、前記信頼できるキャッシュメモリに記憶されている場合、前記現在のノードにおける親ノードのブロック又はブロックダイジェストも、前記信頼できるキャッシュメモリに記憶される、
ことを特徴とする請求項１又は２に記載の電子システムのデータ検証方法。
【請求項６】
ａ）前記大容量記憶メモリ内に位置するブロックにアクセスして、これを前記信頼できるメモリに転送するステップと、
ｂ）前記ブロックのコンテンツを修正するステップと、
ｃ）前記ブロックの前記修正したコンテンツのダイジェスト値を計算するステップと、
ｄ）前記修正したブロックのコンテンツを前記大容量記憶メモリに書き込むステップと、
ｅ）前記ブロックが前記ルートノードを含む場合、前記計算したダイジェスト値を、前記ブロックの参照ダイジェストの新しい値として前記信頼できるメモリに記憶するステップと、
ｆ）前記ブロックが前記ルートノードを含まない場合、前記ブロックの親ノードを含む親ブロック内で、該親ブロックのダイジェスト値を、前記計算したダイジェスト値に置き換えるステップと、
によってブロックの修正を行う、
ことを特徴とする請求項１又は２に記載の電子システムのデータ検証方法。
【請求項７】
信頼できるプロセッサと、信頼できるキャッシュメモリと、大容量記憶メモリとを備えた電子システムのデータ検証方法であって、前記データが前記大容量記憶メモリに記憶され、前記メモリがブロックに分割され、各ブロックがアドレスによって識別され、前記データが検証ツリーを通じてアドレス指定され、前記検証ツリーが、ノードを含むツリー構造であり、子孫ノードがルートノードに帰属し、各ノードが、子孫ノードの各々を含むブロックのアドレス及び各ブロックのダイジェスト値を記憶し、前記方法が、現在のダイジェスト値を前記信頼できるキャッシュメモリに保持しながら、
ａ）前記大容量記憶メモリ内に位置するブロックのコンテンツを読み出して、このコンテンツの完全性を検証することなく前記信頼できるメモリに転送するステップと、
ｂ）前記読み出したブロックのコンテンツのダイジェスト値を計算するステップと、
ｃ）前記ブロックの前記コンテンツを修正するステップと、
ｄ）前記ブロックの前記修正したコンテンツのダイジェスト値を計算するステップと、
ｅ）前記ブロックの以前のコンテンツを上書きすることなく、前記修正したブロックの前記コンテンツを前記大容量記憶メモリに書き込むステップと、
ｆ）前記ブロックが前記ルートノードを含まない場合、前記ブロックの親ノードを含む親ブロック内の、前記ブロックの以前のコンテンツのダイジェスト値を、前記計算したダイジェスト値に置き換えるステップと、
を含む方法。
【請求項８】
前記ダイジェストが、偶発的破損から保護するためのチェックサム、又は改竄から保護するための認証された又はされていない暗号ダイジェストである、
ことを特徴とする請求項１または請求項７に記載の電子システムのデータ検証方法。
【請求項９】
前記大容量記憶メモリから前記信頼できるキャッシュメモリに転送されたデータを復号するステップと、前記信頼できるキャッシュメモリから前記大容量記憶メモリに転送されたデータを暗号化するステップとを含む、
ことを特徴とする請求項１または請求項７に記載の電子システムのデータ検証方法。
【請求項１０】
前記大容量記憶メモリが、別の大容量記憶メモリに対するキャッシュメモリである、
ことを特徴とする請求項１または請求項７に記載の電子システムのデータ検証方法。
【請求項１１】
前記信頼できるキャッシュメモリをクリアするステップを含み、該ステップが、前記修正したブロックの前記コンテンツを前記大容量記憶メモリに書き込む時間及び順序を動的に決定し、前記信頼できるキャッシュメモリからこれらを消去する前に、前記親ノード内の前記ダイジェストを更新するものである、
ことを特徴とする請求項１または請求項７に記載の電子システムのデータ検証方法。
【請求項１２】
信頼できるキャッシュメモリにアクセスするプロセッサがデータ検証のために実行するプログラムであって、
データを記憶した大容量記憶メモリがブロックに分割され、各ブロックがアドレスによって識別され、前記データが検証ツリーを通じてアドレス指定され、前記検証ツリーがノードを含むツリー構造であり、子孫ノードがルートノードに帰属し、各ノードが、前記ノードの子孫ノードの各々を含むブロックのアドレス及び前記子孫ノードを格納する各ブロックのダイジェスト値を記憶し、 前記プロセッサに、
ａ）現在のダイジェスト値を、前記ルートノードを含むブロックの参照ダイジェストの値に初期化することにより、現在のノードを前記ルートノードに初期化するステップと、
ｂ）前記現在のノードを含むブロックを前記信頼できるキャッシュメモリにロードするステップと、
ｃ）前記ロードしたブロックのダイジェストを計算するステップと、
ｄ）前記計算したダイジェストが前記現在のダイジェスト値と異なる場合、データの破損を報告して前記検索データへのアクセスを停止するステップと、
ｅ）前記現在のノードが前記検索データを含む場合、前記現在のノードを返送して、前記検索データへのアクセスを停止するステップと、
ｆ）サブツリーの派生元である子ノードを特定するステップと、
ｇ）前記現在のノードに記憶された前記子ノードのダイジェストの値を前記現在のダイジェストに割り当て、前記子ノードが前記現在のノードになるようにするステップと、
ｈ）前記ロードステップｂ）にループするステップと、
を実行させることによって、前記現在のダイジェスト値を保持しながら検索データにアクセスするデータ検証のためのプログラムコード命令を含む、
ことを特徴とするコンピュータプログラム。
【請求項１３】
信頼できるプロセッサと、信頼できるキャッシュメモリと、大容量記憶メモリとを備えた電子システムであって、
前記信頼できるプロセッサ及び前記信頼できるキャッシュメモリが、信頼できるコア内に位置し、前記大容量記憶メモリが、安全でない環境に位置し且つブロックに分割され、各ブロックがアドレスによって識別され、前記データが検証ツリーを通じてアドレス指定され、前記検証ツリーがノードを含むツリー構造であり、子孫ノードがルートノードに帰属し、各ノードが、前記ノードの子孫ノードの各々を含むブロックのアドレス及び前記子孫ノードを格納する各ブロックのダイジェスト値を記憶し、
前記プロセッサが、
ａ）現在のダイジェスト値を、前記ルートノードを含むブロックの参照ダイジェストの値に初期化することにより、現在のノードを前記ルートノードに初期化するステップと、
ｂ）前記現在のノードを含むブロックを前記信頼できるキャッシュメモリにロードするステップと、
ｃ）前記ロードしたブロックのダイジェストを計算するステップと、
ｄ）前記計算したダイジェストが前記現在のダイジェスト値と異なる場合、データの破損を報告して前記検索データへのアクセスを停止するステップと、
ｅ）前記現在のノードが前記検索データを含む場合、前記現在のノードを返送して、前記検索データへのアクセスを停止するステップと、
ｆ）サブツリーの派生元である子ノードを特定し、前記現在のノードに記憶された前記子ノードのダイジェストの値を前記現在のダイジェストに割り当て、前記子ノードが前記現在のノードになるようにし、さらに前記ロードするステップにループするステップと、
を実行することによって、前記現在のダイジェスト値を保持しながら検索データにアクセスするためのデータ検証を実施する、
ことを特徴とする電子システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、大容量記憶媒体に記憶されたデータを検証する分野に関する。本発明の１つの特定用途は、コンピュータシステムなどの電子システムの保護を対象とする。
【背景技術】
【０００２】
米国特許第４，３０９，５６９号には、メッセージを認証するためのデジタル署名方法において、暗証番号の一方向性関数の認証ツリー関数を使用することが記載されている。
【０００３】
米国特許第４，８８１，２６４号には、無限に拡張可能な一連のメッセージＭｉに署名するためのデジタル署名の生成方法が記載されている。無限に拡張可能な署名ノードで形成された認証ツリーが使用される。各ノードは、メッセージに署名するために使用することができる。各ノードは、最大ｋ個のサブノードに署名するために使用することもでき、この場合のｋは１よりも大きな整数である。メッセージに署名するため、及びサブノードに署名するためのいずれにも使用される各署名は、一方向性関数Ｆに基づく一意の署名である。関数Ｆは、公開されたものである。署名者は、メッセージＭｉに署名するために、今まで未使用のノード（ノードｉ）をツリーから選択する。次に、このノードのメッセージ署名鍵を使用してメッセージに署名する。その後、ツリーのルート（ノード１）からノードｉまでの一連のノードを使用して、メッセージの署名が正しいものであり、改竄されたものでないことを検証する。この手順により、メッセージが改竄されたものでないことを証明する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第４，３０９，５６９号明細書
【特許文献２】米国特許第４，８８１，２６４号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述の文献に記載されるような認証ツリーを使用して検証を行い、特に大容量記憶メモリに記憶されたデータの破損を検出することができる。しかしながら、この記憶データへのアクセスは効率が悪く、又はキャッシュメモリなどの、全ての署名を記憶するのに十分な大きさのメモリ空間を使用する必要がある。
【０００６】
上記に鑑み、本発明が取り扱う問題点の１つは、信頼できるプロセッサと、信頼できるキャッシュメモリと、大容量記憶メモリとを備えた電子システムの、大容量記憶メモリに記憶されたデータを検証する方法の必要性であり、この方法により、データに効率的にアクセスすることによって先行技術の欠点を排除する。
【課題を解決するための手段】
【０００７】
この問題点に対して本発明が提案する解決策は、記憶メモリに記憶され、検証ツリーを通じてアドレス指定されたデータを、検証ツリーが記憶された安全な又は信頼できるキャッシュメモリを用いて検証するための方法である。
【０００８】
より正確に言えば、第１の態様では、本発明は、信頼できるプロセッサと、信頼できるキャッシュメモリと、大容量記憶メモリとを備えた電子システムのデータ検証方法に関し、このデータは大容量記憶メモリに記憶され、このメモリはブロックに分割され、各ブロックはアドレスによって識別され、データは検証ツリーを通じてアドレス指定され、この検証ツリーはノードを含むツリー構造であり、子孫ノードがルートノードに帰属し、各ノードが、その子ノードの各々を含むブロックのアドレス及び各ブロックのダイジェストの値を記憶する。
【０００９】
この方法は、検索データへのアクセスを行うものであり、この検索データへのアクセスは、
ａ）現在のダイジェスト値を、ルートノードを含むブロックの参照ダイジェストの値に初期化することにより、現在のノードをルートノードに初期化するステップと、
ｂ）現在のノードを含むブロックを信頼できるキャッシュメモリにロードするステップと、
ｃ）ロードしたブロックのダイジェストを計算するステップと、
ｄ）計算したダイジェストが現在のダイジェスト値と異なる場合、データの破損を報告して検索データへのアクセスを停止するステップと、
ｅ）現在のノードが検索データを含む場合、現在のノードを返送して、検索データへのアクセスを停止するステップと、
ｆ）このデータを含むサブツリーの派生元である子ノードを特定するステップと、
ｇ）現在のノードに記憶された子ノードのダイジェスト値を現在のダイジェストに割り当て、子ノードが現在のノードになるようにするステップと、
ｈ）ロードステップｂ）にループするステップと、
を通じて行われる。
【００１０】
この方法は、現在のノードを初期化するステップａ）の後に、信頼できるメモリ内に位置するブロックが現在のノードを含むかどうかを検証する追加ステップを含み、このブロックが現在のノードを含まない場合、ロードステップｂ）と、ダイジェストの計算ステップｃ）と、ダイジェストの検証及びデータの破損報告ステップｄ）とを実施する。
【００１１】
初期化ステップは、現在のダイジェスト値を、信頼できるキャッシュメモリに存在するブロックから計算した、検索データを含むノードの祖先ノードＮを含むダイジェストの値に初期化することにより、現在のノードをノードＮに初期化することができる。
【００１２】
初期化ステップは、ブロックの値が信頼できるキャッシュメモリ内に存在する場合、現在のダイジェスト値を、信頼できるキャッシュメモリ内で見つかったダイジェストの値に初期化することにより、現在のノードをノードＮに初期化することができる。
【００１３】
現在のノードのブロック又はブロックダイジェストが信頼できるキャッシュメモリに記憶されている場合、現在のノードにおける親ノードのブロック又はブロックダイジェストも信頼できるキャッシュメモリに記憶されることが有利である。
【００１４】
この方法は、
ａ）大容量記憶メモリ内に位置するブロックにアクセスして、これを信頼できるメモリに転送するステップと、
ｂ）ブロックのコンテンツを修正するステップと、
ｃ）ブロックの修正したコンテンツのダイジェスト値を計算するステップと、
ｄ）ブロックのコンテンツを大容量記憶メモリに書き込むステップと、
ｅ）ブロックがルートノードを含む場合、計算したダイジェスト値を、ブロックの参照ダイジェストの新しい値として信頼できるメモリに記憶するステップと、
ｆ）ブロックがルートノードを含まない場合、ブロックの親ノードを含む親ブロック内で、親ブロックのダイジェスト値を、計算したダイジェスト値に置き換えるステップと、
においてブロックの修正を行うことができる。
【００１５】
１つの代替例では、方法が、
ａ）大容量記憶メモリ内に位置するブロックのコンテンツを読み出して、このコンテンツの完全性を検証することなく信頼できるメモリに転送するステップと、
ｂ）読み出したブロックのコンテンツのダイジェスト値を計算するステップと、
ｃ）ブロックのコンテンツを修正するステップと、
ｄ）修正したブロックコンテンツのダイジェスト値を計算するステップと、
ｅ）以前のブロックのコンテンツを上書きすることなく、修正したブロックコンテンツを大容量記憶メモリに書き込むステップと、
ｆ）ブロックがルートノードを含まない場合、ブロックの親ノードを含む親ブロック内で、親ブロックのダイジェスト値を、計算したダイジェスト値に置き換えるステップと、
ｇ）ブロックがルートノードを含む場合、ブロックの初期ダイジェストがルートブロックの参照ダイジェストに等しいこと、及び相互に交差したブロックの初期ダイジェストが、このブロックの親ノード内で見つかったダイジェストに等しいことを検証し、その後、ルートブロックの計算したダイジェスト値を、ブロックの参照ダイジェストの新しい値として信頼できるメモリに記憶するステップと、
においてブロックの修正を行うことができる。
【００１６】
ダイジェストは、偶発的破損から保護するためのチェックサム、或いは改竄から保護するための認証された又はされていない暗号ダイジェストとすることができる。加えて、大容量記憶メモリは、別の大容量記憶メモリに対するキャッシュメモリとすることができる。
【００１７】
この方法は、大容量記憶メモリから信頼できるキャッシュメモリに転送されたデータを復号するステップと、信頼できるキャッシュメモリから大容量記憶メモリに転送されたデータを暗号化するステップとを含むことができる。
【００１８】
方法は、信頼できるキャッシュメモリをクリアするステップを含むことができ、このステップは、修正したブロックのコンテンツを大容量記憶メモリに書き込む時間及び順序を動的に決定し、信頼できるキャッシュメモリからこれらを消去する前に、親ノード内のダイジェストを更新するものである。
【００１９】
第２の態様では、本発明は、プログラム可能なプロセッサによって実行されるたときに、本発明のデータ検証方法のステップをプログラム可能なプロセッサに実行させるプログラムコード命令を含むコンピュータプログラムに関する。
【００２０】
第３の態様では、本発明は、信頼できるプロセッサと、信頼できるキャッシュメモリと、大容量記憶メモリとを備えた電子システムに関し、信頼できるプロセッサ及び信頼できるキャッシュメモリは、信頼できるコア内に位置し、大容量記憶メモリは、安全でない環境に位置し、プロセッサは、本発明によるデータ検証方法を実施する。
【００２１】
従って、本発明は、小容量のキャッシュメモリ、特に検証ツリーの構造全体を含むには不十分な場合もあるメモリを使用しながら、信頼できる又は安全なキャッシュメモリに記憶された検証ツリーを通じてアドレス指定される記憶データへの効率的なアクセスを可能にする。本発明は、このような信頼できるキャッシュメモリの効率的な管理を可能にすると同時に、システムの性能を許容レベルに保つ。本発明はまた、大容量記憶メモリに記憶されたデータのあらゆる破損を検出し、信頼できるプロセッサによって読み戻されたデータが、以前に記憶されていたデータではない場合、特定の動作を引き起こすことも可能にする。本発明のその他の利点は、本明細書の説明で明らかになるであろう。
【００２２】
添付図面を参照する以下の非限定的な説明を読めば、本発明がより良く理解されるであろう。
【図面の簡単な説明】
【００２３】
【図１】電子システムの概略図である。
【図２】データを体系化する検証ツリーの概略図である。
【図３】大容量記憶メモリ内の検索データへのアクセスを示す概略図である。
【図４】大容量記憶メモリ内のブロックの修正を示す概略図である。
【図５】別の実施形態における、大容量記憶メモリ内の検索データへのアクセスを示す概略図である。
【図６】図５の実施形態の変形例の概略図である。
【図７】大容量記憶メモリ内のブロックの独創的修正を示す概略図である。
【図８】大容量記憶メモリ内のブロックの認証済みダイジェストを用いた独創的修正の概略図である。
【発明を実施するための形態】
【００２４】
図１に、信頼できるプロセッサ２と、信頼できるキャッシュメモリ３と、大容量記憶メモリ４とを備えた電子システム１を示す。
【００２５】
信頼できるプロセッサ２及び信頼できるキャッシュメモリ３は、信頼できるコア５の一部である。信頼できるコア内に位置するプロセッサ及びキャッシュメモリは、考えられる用途に関して十分に信頼でき又は十分に保護されていると見なされる。例えば、この信頼できるコアは、スマートカード又はＴＰＭモジュール（Ｔｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅ）、又はアクセスが制御された場所に位置するコンピュータなどの、不法侵入から物理的に保護された装置とすることができる。
【００２６】
大容量記憶メモリ４は、信頼できるコアの外部の安全でない環境６に位置する。大容量記憶メモリ４は、ブロックＢ１、Ｂ２、Ｂｎに分割される。各ブロックは、アドレスＡ１、Ａ２、Ａｎによって識別される。信頼できるプロセッサ２が大容量記憶メモリ４に対して行う基本動作は、所与のアドレスブロックに含まれるデータＤ１、Ｄ２、Ｄｎの読み出し、及び所与のアドレスブロックへのデータの書き込みである。
【００２７】
信頼できるプロセッサ２による大容量記憶メモリ４へのアクセスを迅速化するために、信頼できるキャッシュメモリ３を使用する。信頼できるキャッシュメモリは、大容量記憶メモリに比べて記憶容量は少ないが、アクセスは非常に高速である。信頼できるキャッシュメモリ３のサイズは、例えば２、３ブロックである。読み出し時には、検索するデータ片がキャッシュメモリ内に存在する場合、大容量記憶メモリに時間のかかるアクセスを行わなくて済む。また、この信頼できるキャッシュメモリは、大容量記憶メモリとは違ってデータ破損の危険性にさらされることがなく、この結果、信頼できるキャッシュメモリからのデータの読み出しには、大容量記憶メモリからの読み出しとは違って完全性の検証が必要ない。書き込み時には、キャッシュメモリに一時的に記憶されたいくつかのデータを、１回のキャッシュクリーニング動作で書き込むことができ、従って大容量記憶メモリに時間のかかるアクセスを行わなくて済む。
【００２８】
大容量記憶メモリ４は、誤動作又は外部の第三者による意図的な攻撃により、データ破損を招く障害に陥りやすい。データ破損により、元データが、ランダムデータ又は外部の第三者が選択したデータに置き換えられることがある。例えば、大容量記憶メモリ４は、ハードドライブ、又はＲＡＭ又はＥＥＰＲＯＭタイプのメモリ、又は別の第三者が制御し、信頼できるコアにより通信ネットワークを介してアクセスを受ける遠隔記憶空間などの、信頼できるコアを含むコンピュータシステムの周辺装置とすることができる。
【００２９】
データは、暗号化することができる。この場合、大容量記憶メモリに書き込む前にブロックを暗号化し、ロード後に復号する。秘密鍵は、信頼できるコア内にのみ記憶される。
【００３０】
検証ツリー
大容量記憶メモリ４に記憶されたデータＤ１、Ｄ２、Ｄｎの完全性を制御するために、本発明の方法は、ツリー構造、例えば図２に示すような検証ツリー１０によってデータを体系化する。この検証ツリー又は認証ツリー又はＭｅｒｋｌｅツリーは、全てのデータ片の検査を必要とせずに、データ片の一部の完全性を検証できるデータ構造になっている。検証ツリーの原理は、各データ片をブロックに分割し、各ブロックのダイジェストを計算するものである。データ片のダイジェストとは、必要な完全性のレベルに照らしてエラーの危険性が低いデータを特徴付ける値である。このダイジェストは、データ自体から計算されたチェックサム、例えば、パリティ又はＣＲＣ巡回冗長コードとすることができる。ダイジェストは、暗号タイプのものであってもよく、すなわちこれは、ＭＤ５（メッセージダイジェスト５）又はＳＨＡ−１（セキュアハッシュアルゴリズム１）などの暗号化ハッシュ関数を使用するデータのイメージである。ダイジェストは、認証済みダイジェスト、すなわち、チェックサムであるこれ自体のデータに加え、秘密要素を考慮する暗号ダイジェストであってもよい。例えば、認証済みダイジェストは、ＨＭＡＣ（鍵付きハッシュ化メッセージ認証コード）タイプのものであってもよい。この認証済みダイジェストは、暗号ハッシュ関数と秘密鍵の組み合わせを使用して計算される。各ブロックのダイジェストを計算した後、このダイジェストを新規のデータと見なし、考えられる最後のデータに関する唯一のダイジェストが得られるまでツリー生成処理を繰り返す。このようにして、連続するダイジェストによって検証ツリーを形成する。
【００３１】
図２では、検証ツリー１０の各ノードＮ１、Ｎ２、Ｎ３、．．．Ｎ２３がブロックに記憶され、これらを含むブロックのアドレスにより指定される。１つのブロックが数個のノードを含むこともでき、この場合、ノードの指定は、ブロックに含まれるノードからこのノードを識別できるようにする追加の指標を含む。ルートノードのアドレスは、信頼できるメモリ３内に保持される。１つのノード（例えば、Ｎ２）には、このノードの子ノード（例えば、Ｎ２の場合にはＮ４及びＮ５）のアドレスが記憶される。
【００３２】
あるブロック内のデータから計算したルートダイジェストの値が参照ルートダイジェストの値と同じであることを検証することにより、このブロックの完全性を検証することもできる。
【００３３】
検証ツリーは、例えば偶発的な破損からの保護、改竄からの保護、及び認証などの、使用するダイジェストのタイプに応じた利点をもたらす。検証ツリーは、ツリーの深さに比例する量のデータを処理することにより、ブロックの完全性を検証できるようにする。ブロックが修正された場合、ツリーの深さに比例する量のデータを処理することにより、検証ツリーも更新することができる。
【００３４】
信頼できるプロセッサ２は、例えばコンピュータプログラムの命令を実行することにより、以下で説明するデータ検証方法を実施する。この方法により、大容量記憶メモリ４に記憶された検索データにアクセスできるようになる。この方法により、データを修正してこれを大容量記憶メモリ４に記憶できるようにもなる。
【００３５】
図２に示すように、検証ツリーは、ノードを含むツリー構造であり、子ノードはルートノードに帰属する。各ノードＮには、各子ノードＮｆに関し、この子ノードを含むブロックのアドレス及びこのブロックのダイジェストが記憶される。信頼できるメモリ３内には、ルートノードＮｒを含むブロックのダイジェストの参照値Ｅｒｅｆが継続的に保持される。ダイジェストは、偶発的破損から保護するためのチェックサム、又は改竄から保護するための暗号ダイジェストとすることができる。
【００３６】
ブロックが信頼できるメモリにロードされるたびに、このブロックのダイジェストを、正当であることが分かっているダイジェストに照らしてチェックしなければならない。同じブロックを複数回にわたり連続してロードする場合、このブロックがロードされるたびに、そのダイジェストを検証しなければならない。
【００３７】
図３は、大容量記憶メモリ４内の検索データＤｒにアクセスするための、又はこれを読み出すための実施形態Ａ０の概略図である。第１のステップＳ１において、現在のダイジェスト値Ｅｃを、ルートノードを含むブロックＢｒの参照ダイジェストＥｒｅｆの値に初期化することにより、現在のノードＮＣをルートノードＮｒに初期化する。第２のステップＳ２において、現在のノードを含むブロックＢ｛Ｎｃ｝を信頼できるキャッシュメモリ３にロードする。第３のステップＳ３において、ロードしたブロックのダイジェストＥ［Ｂ｛Ｎｃ｝］を計算する。第４のステップＳ４において、計算したダイジェストＥ［Ｂ｛Ｎｃ｝］が現在のダイジェスト値Ｅｃと異なるかどうかを検証する。第５のステップＳ５において、値が異なる場合、データ破損を報告して、検索データへのアクセスを停止する。第６のステップＳ６において、現在のノードＮｃが検索データＤｒを含むかどうかを検証する。第７のステップＳ７において、現在のノードＮｃが検索データＤｒを含む場合、現在のノードを返送して、検索データへのアクセスを停止する。第８のステップＳ８において、現在のノードＮｃが検索データＤｒを含まない場合、データを含むサブツリーの派生元である子ノードＮｆを特定する。第９のステップＳ９において、現在のノードに記憶された子ノードのダイジェストＥｆの値を現在のダイジェストＥｃに割り当て、子ノードＮｆを現在のノードＮｃとする。その後、このアクセス方法は、第２のロードステップＳ２にループする。
【００３８】
説明したアクセス方法は、このようにしてデータツリー構造を検証ツリー構造と組み合わせる。このアクセス方法では、検索データを含むノードを含むブロックが破損している場合、破損したデータの断片にたどり着けば、このような破損が検出され報告される。このような報告は、例えば、ノードへのアクセスを引き起こした動作を放棄すること、また場合によっては、コンピュータシステムのユーザ又は保護されたデータの所有者に警告メッセージを送信することによって反映することができる。別の場合には、検索データを発見したときに、プロセッサがこれらを正常であると見なして処理することができる。また、この方法では、他のブロックが破損していても、正常なブロック内のデータを処理することができる。
【００３９】
以前に検索したデータＤｒの断片がプロセッサにより修正された場合、そのアクセス経路上の全てのノードのダイジェストを再計算しなければならない。この結果、このダイジェストを含むブロックを大容量記憶メモリ内で更新しなければならない。また、データ片が追加又は削除された場合、１又はそれ以上のブロックが修正されることにより、影響を受けるノードの祖先ノードを含むブロックを更新することが必要となる。
【００４０】
ブロックの更新は、このブロックを信頼できるメモリ３にロードし、信頼できるメモリ３内でコンテンツを修正し、その後この修正したコンテンツを大容量記憶メモリ４に書き込むものである。
【００４１】
図４は、大容量記憶メモリ４内のブロックの修正Ｍ０を示す概略図である。第１のステップＳ２１において、大容量記憶メモリ４内に位置するブロックＢにアクセスして修正し、このブロックＢのコンテンツを信頼できるメモリ３に転送する。第２のステップＳ２２において、ブロックＢのメモリ内のコピーのコンテンツを修正する。第３のステップＳ２３において、ブロックの修正したコンテンツのダイジェストＥ［Ｂｍｏｄ］の値を計算する。第４のステップＳ２４において、ブロックＢｍｏｄのコンテンツを大容量記憶メモリ４に書き込む。第５のステップＳ２５において、ブロックＢｍｏｄがルートノードＮｒを含むかどうかを検証する。第６のステップＳ２６において、ブロックがルートノードを含む場合、信頼できるメモリ３内で計算したダイジェスト値をブロックの新しい参照ダイジェスト値として記憶するＥｒｅｆ［Ｂｒ］＝Ｅ［Ｂｍｏｄ］。第７のステップＳ２７において、ブロックがルートノードを含まない場合、このブロックの親ノードを含む親ブロックＢ｛Ｎｐ｝内で、親ブロックのダイジェスト値を、計算したダイジェスト値と置き換えるＥ［Ｂ］＝Ｅ［Ｂｍｏｄ］。この修正方法は、第７のステップＳ２７において親ブロックの修正を要するので再帰的であり、この修正は、特にこの修正方法を用いて行うことができる。
【００４２】
読み出し用キャッシュメモリ
ノードにアクセスするには、大容量記憶メモリから信頼できるキャッシュメモリにブロックをロードし、ブロックダイジェストを計算する必要がある。これらの２つの操作は、各ブロックが交差する場合に時間がかかる。この理由として、第１に、通常の大容量記憶メモリが通常のプロセッサよりも非常に遅いこと、第２に、暗号ダイジェストの計算時間がかなり長いことが挙げられる。交差するブロックの数は、ツリー内のデータが位置する深さに比例する。
【００４３】
さらに、データ片へのアクセスに使用される中間ブロックのコンテンツを信頼できるキャッシュメモリに記憶することは、大容量キャッシュメモリが必要になるという理由から不可能であり又は望ましくない。
【００４４】
図５は、利用可能な信頼できるメモリのサイズが、データ片へのアクセスに使用される全ての中間ブロックを記憶するのに不十分な場合に、大容量記憶メモリ４内の検索データＤｒにアクセスするための別の実施形態Ａ１を示す概略図である。この代替形態は、信頼できるキャッシュメモリを効率的に管理できるようにするものである。アクセス方法は、図３を参照しながら説明した実施形態のものとほぼ同一である。図３と異なる点は、現在のノードを初期化する第１のステップＳ１の後に追加のステップＳ１１が加わる点である。この追加ステップＳ１１において、信頼できるメモリ３内に位置するブロックＢが現在のノードＮｃを含むかどうかを検証する。ブロックＢが現在のノードＮｃを含む場合は、現在のノードを返送して、検索されたデータ片へのアクセスを停止する第７のステップＳ７を直接実行する。そうでない場合、すなわちこのブロックが現在のノードを含まない場合は、ロードステップＳ２、ダイジェスト計算Ｓ３、ダイジェスト検証Ｓ４、データ破損の報告Ｓ５、及びブロック検証Ｓ６を実行する。
【００４５】
別の代替形態（図示せず）では、第１の初期化ステップＳ１において、現在のダイジェスト値Ｅｃを、検索されたデータ片を含むノードの祖先ノードＮを含む信頼できるキャッシュメモリ内に存在するブロックから計算したダイジェスト値に初期化することにより、現在のノードＮｃをノードＮに初期化することができる。
【００４６】
さらに別の代替形態（図示せず）では、第１の初期化ステップＳ１において、ブロックのダイジェスト値が信頼できるキャッシュメモリ内に存在する場合、現在のダイジェスト値Ｅｃを、信頼できるキャッシュメモリ内で見つかったダイジェストの値に初期化することにより、現在のノードＮｃを、上記の条件を満たすノードＮに初期化することができる。
【００４７】
ダイジェストの計算には、プロセッサの利用時間が多く費やされるので、ブロックＢのコンテンツ及び対応するダイジェストを信頼できるキャッシュメモリ内に保持することが有利である。これにより、ブロックＢのダイジェストを信頼できるキャッシュメモリから読み出し、再計算を行わずに済むようになる。
【００４８】
ダイジェストのサイズはブロックのサイズよりも小さいので、信頼できるキャッシュメモリには、いくつかのブロックのコンテンツではなくダイジェストのみを保持することが有利である。ブロックＢのダイジェストのキャッシュを信頼できるメモリ内に有している場合、ブロックＢの祖先ノードを含むブロックのダイジェストを検証する必要はない。図６は、図５の実施形態の変形例Ａ２の概略図である。この変形例は、第１の初期化ステップＳ１が、いくつかの追加ステップＳ２１、Ｓ２２、Ｓ２３、Ｓ２４、及びＳ２５に置き換わる点で図４の実施形態と異なる。第１の追加ステップＳ２１において、現在のノードＮｃを、ブロックＢに含まれるノードＮｎに初期化し、現在のダイジェスト値Ｅｃを、信頼できるキャッシュメモリ３内で見つかったブロックＢのダイジェストＥ［Ｂ］の値に初期化する。第２の追加ステップＳ２２において、ブロックＢを大容量記憶メモリから信頼できるメモリにロードする。第３の追加ステップＳ２３において、ブロックＢのダイジェストＥｃａｌｃを計算する。第４の追加ステップＳ２４において、計算したダイジェスト値と現在のダイジェスト値Ｅｃが一致することを検証する。第５の追加ステップＳ２５において、ブロックＢの計算したダイジェスト値が現在のダイジェスト値と異なる場合、エラーを報告してこのアクセス方法を停止する。ブロックＢの計算したダイジェスト値が現在のダイジェスト値と同じである場合、図５の実施形態の方法を追加の検証ステップＳ１１から継続することができる。
【００４９】
今説明した変形例は、ダイジェストのキャッシュによって検証ツリー内の下方への経路がより高速になり、すなわち第１の実施形態によるアクセスに比べてダイジェスト計算の回数が少なくなるので有利である。この理由は、第１の実施形態の方法によるブロックへのアクセスでは、影響を受けるブロックへのアクセス経路上の中間ノードごとに下方への経路が必要となるからである。ロードするブロック及びダイジェスト計算の回数で測った複雑度は、修正したノードの深さに関して２次式となる。既に、中間ノードのダイジェストが信頼できるキャッシュメモリ内に存在する場合、このダイジェストでは新たな下方への経路が避けられる。これは、更新する必要があるノードにアクセスする場合に特に有利である。
【００５０】
現在のノードのブロック又はダイジェストブロックが信頼できるキャッシュメモリに記憶されている場合、現在のノードにおける親ノードのブロック又はダイジェストブロックも信頼できるキャッシュメモリに記憶されることが有利である。
【００５１】
この条件が検証されると、キャッシュが十分に大きければ、ブロックの更新を線形時間で行うことができる。説明した第１の実施形態（図３）によるデータ片にアクセスする方法では、ツリー内の影響を受けるノードの深さに比例する回数のロード操作及びダイジェスト値の計算が必要である。更新方法（図４）では、キャッシュメモリ内にもはや存在しないブロックのダイジェスト値をロードして計算すればよい。キャッシュメモリ内に全てのブロックが存在する場合、新たにロードを行う必要はない。全てのダイジェスト値が依然としてキャッシュメモリ内にある場合、各ブロックの子孫のダイジェスト値を検証する必要はないので、各ブロックを更新のために１回のみロードすればよい。
【００５２】
この条件を満たすと、キャッシュメモリのコンテンツの消去機構に要件が課される。この理由は、消去機構が以下を行わなければならないからである。
−  あるブロックがキャッシュメモリから消去された場合、必要に応じてまずそのブロックのダイジェスト値を計算し、これをキャッシュメモリ内に保持しなければならない。
−  あるブロックのダイジェスト値がキャッシュメモリから消去された場合、このブロックに含まれるノードから派生するサブツリーの全てのブロック及び全てのダイジェスト値も消去しなければならない。
【００５３】
書き込み用キャッシュメモリ
ブロックが修正された場合、修正されたブロックを直ぐに大容量記憶メモリに書き込まないようにすることもできる。この場合、これらのブロックは、後で大容量記憶メモリに書き込むことができるように信頼できるキャッシュメモリに保持される。以下で説明する本発明の実施形態は、書き込みに使用するキャッシュメモリと、上述した読み出しに使用するキャッシュメモリの組み合わせに関する。
【００５４】
検証ツリー構造の一部であるブロックが修正された場合、これらの修正を考慮するために２つの操作を行わなければならない。第１に、ブロックのコンテンツを大容量記憶メモリに書き込まなければならない。第２に、親ノード内のダイジェストを更新しなければならず、これが親ノードを含むブロックの修正となる。これらの２つの操作は、各々延期することができる。これらの２つの操作は、必ずしも同時に行われるとは限らない。
【００５５】
これらの延期される２つの操作の時間及び順序は、動的に、すなわちプロセッサによる異なる動作の実行中にケースバイケースで決定されることが有利である。第１の例では、何らかの理由で親ノードが修正されると直ぐにダイジェストを更新できるのに対し、ブロックへの書き込みは、キャッシュメモリ空間が必要になることで、ブロックに割り当てられたキャッシュメモリの部分を取り出すことが必要になったときにのみ行われる。第２の例では、親ノードが更新される前にキャッシュメモリ空間の必要性が感じられると、ブロックに割り当てられたキャッシュメモリが取り出されるときまでに、ブロックダイジェストが計算されてキャッシュメモリに保持される。
【００５６】
独創的キャッシュメモリ
本発明の別の実施形態は、大容量記憶メモリに記憶されたデータにいわゆる独創的読み出し又はアクセスを行うものである。データへの独創的アクセスでは、読み出されるデータが破損していないことを確認せずにノードを読み出す。このデータに対して計算を行い、このデータ次第で、後で破損が検出された場合に元に戻せるという条件で動作を行うこともできる。後で検証を行って、破損が検出されない場合には、計算の結果を保持するかどうかを判断し、或いは破損が検出された場合には、行っている動作を取り消すかどうかを判断する。たとえこのような分離によって不必要な計算が行われるようになるとしても、障害が十分にまれであり、すなわち所与の限界を下回る限り、或いは障害が第三者による意図的な攻撃に起因する場合、効率の向上が利点となる。
【００５７】
データに独創的アクセスを行う１つの方法では、上述の実施形態によるアクセス方法を、ダイジェスト値の計算及び検証を行わずに実施する。これらの計算及び検証は、アクセスを検証でグループ化するグループ化検証ステップに置き換えられる。例えば、この検証ステップを、複雑なトランザクションの最後に行うことができる。これにより、サブツリー内でいくつかのデータ片が読み出されたときに、このサブツリーへの同じアクセス経路を複数回検証する必要性を回避できるようになる。
【００５８】
図７は、大容量記憶メモリ４内のノードＮｎから派生したサブツリー内のブロックＢの独創的修正ＭＡ０を示す概略図である。この実施形態では、独創的修正が、未検証データを記憶メモリに独創的に書き込むこと、及び古いダイジェストに照らして後で検証を行うことを含む。第１のステップＳ３１において、大容量記憶メモリ４内に位置するブロックＢに独創的にアクセスして、このブロックＢを信頼できるメモリ３に転送する。第２のステップＳ３２において、ブロックＢが読み出されるときにこのブロックのダイジェストＥを計算する。第３のステップＳ３３において、ブロックＢのコンテンツを修正する。第４のステップＳ３４において、ブロックの修正されたコンテンツのダイジェストＥ［Ｂｍｏｄ］の値を計算する。第５のステップＳ３５において、ブロックＢｍｏｄのコンテンツを大容量記憶メモリ４内に書き込む一方で、ブロックＢの古いコンテンツも保持する。第６のステップＳ３６において、ブロックＢがノードＮｎを含むかどうかを検証する。ブロックＢがノードＮｎを含む場合、独創的修正は完了する。そうでない場合、方法は第７のステップＳ３７に進み、すなわち、独創的修正は、ノードＮｎの親ノード内で、このノードＮｎを含むブロックの以前のダイジェストＥ［Ｂ］を、このノードＮｎを含むブロックの新しいダイジェストＥ［Ｂｍｏｄ］に置き換える。
【００５９】
独創的アクセスの１つにより、破損したデータが読み出された場合、独創的修正により、大容量記憶メモリに誤ったデータが書き込まれることがある。従って、その次に、例えば第１の実施形態の検証済みのアクセスによって修正されたノードの全てのダイジェストを検証する後続の検証動作Ｓ３８を行うことが有利である。このような検証によって破損が検出されたＳ４３場合、このようにして独創的に修正されたブロックが全て拒絶される。このような検証Ｓ３８によって破損が検出されなかった場合、ルートノードの新しいダイジェストが参照ダイジェストになるＥｒｅｆ［Ｂｒ］＝Ｅ［Ｂｍｏｄ］Ｓ４４。
【００６０】
図７に関連して説明した独創的修正を、認証済みダイジェストとともに使用されるように修正できると有利である。ノードのダイジェストの認証を、このノードから派生するサブツリー内のダイジェストの一貫性の検証と組み合わせれば、サブツリー内で読み出されたデータの真正性を保証するのに十分なものとなる。ノードのダイジェストを認証することで、実際にこのノードが正当に生じたものであり、第三者が生成したものではないことが保証される一方で、サブツリー内のダイジェストの一貫性を検証することで、第三者が既存のノードを再体系化したり、又はこれらをツリーの少なくとも１つ古いバージョンからのノードと組み合わせたりしていないことが保証される。図８に、認証済みダイジェストでの独創的修正ＭＡ１を示す。図８の独創的修正方法は、以下の追加ステップを含む点で図７の方法と異なる。
【００６１】
１つの追加の第１のステップＳ３９において、ブロックＢがノードＮｎを含む場合、ブロックＢへの検証済みアクセスＶＥＲＩＦを行い、独創的に読み出された未修正のコンテンツを検証済みのコンテンツと比較する。破損が検出されなければ、修正されたブロックの以前のコンテンツを消去することができる。
【００６２】
第２の追加ステップＳ４０において、Ｂのダイジェストの以前の値がダイジェストＥの値と同じかどうかを検証する。同じでない場合、独創的に読み出されたブロックＢのコンテンツが破損していたことを意味し、この結果ステップＳ４２においてこのような破損を報告する。
【００６３】
第３の追加ステップＳ４１において、Ｂのダイジェストの以前の値がダイジェスト値と同じである場合、ブロックの親ノードを含む親ブロックＢ｛Ｎｐ｝内で、親ブロックのダイジェスト値を、計算したダイジェスト値に置き換えるＥ［Ｂ］＝Ｅ［Ｂｍｏｄ］。
【００６４】
２レベルキャッシュメモリ構造
上述した方法を使用する電子システムは、サイズが限られた１つの信頼できるキャッシュメモリ、及びより大容量の壊れやすいメモリという２つのメモリを備えることができる。このシステムは、例えば、タイプＬ１の信頼できるキャッシュメモリと、タイプＬ２の安全でないキャッシュメモリとを有するプロセッサであってもよい。このような構成は、特に、キャッシュメモリＬ１及びプロセッサが同じチップを共有する一方で、タイプＬ２のキャッシュメモリが、スパイ行為又は差し替えを受ける可能性がある別のチップ上に存在する場合に見られる。
【００６５】
このような構成では、安全でないキャッシュメモリを、大容量記憶メモリに対するキャッシュメモリとして使用することもできる。ダイジェストの操作、計算、及び検証は、常に信頼できるキャッシュメモリへのロードに関連して、大容量記憶メモリから直接、又は安全でないキャッシュメモリを通じて行われる。この２レベルキャッシュメモリ構造には、上述したデータへのアクセス及び修正方法を適用することができる。
【００６６】
揮発性
本発明の実施形態では、大容量記憶メモリがデータを無期限に保持できる一方で、信頼できるキャッシュメモリは揮発性メモリであり、すなわち信頼できるコアへの電源が途絶えるとコンテンツが失われる。
【００６７】
上述の方法は、ルートノードのダイジェストの参照値を使用する。揮発性メモリのコンテンツが失われた後でもデータの認証を保証するために、信頼できるプロセッサは、例えば読み取り専用メモリ又はＰＲＯＭ（プログラム可能読み取り専用メモリ）又はＥＥＰＲＯＭ（電気的消去可能プログラム可能読み取り専用メモリ）などの、不揮発性の信頼できるメモリ内に秘密鍵を保持する。このメモリは、秘密鍵の機密性をさらに保証しなければならず、すなわち信頼できるコアのみがこの鍵を読み出すことができる。プロセッサはまた、データがルートブロックに書き込まれるたびに、ルートブロックのダイジェスト値又はルートブロックの暗号署名を大容量記憶メモリに書き込む。揮発性の信頼できるキャッシュメモリのコンテンツが失われた後にプロセッサを初期化する間、プロセッサは、この暗号署名を読み出して完全性を検証し、正しくない場合にはエラーを報告する。
【００６８】
不揮発性の書き換え可能な信頼できるメモリ内に暗号署名が存在することにより、プロセッサは、ルートノードにより生成されたルートノードのダイジェスト値のみを容認し、破損、特に容量記憶メモリのコンテンツの過去のバージョンを再生することによる未遂攻撃を検出して信号送信することができる。このようにして、検証ツリー構造は、記憶したデータの完全性を保証する一方で、ルートノードのダイジェスト値の暗号署名により、これらのデータが実際に同じ信頼できるプロセッサによって以前に書き込まれたものであることを保証する。
【００６９】
しかしながら、同じ信頼できるプロセッサによって以前に書き込まれたデータが、大容量記憶メモリに書き込まれた最新のバージョンでない場合もある。このような状況では、全ての過去のバージョンが正しい署名を有する。
【００７０】
記憶された古いバージョンのデータは、新しいバージョンが書き込まれる間に消去されることが有利である。しかしながら、大容量記憶メモリが攻撃者に直接制御されており、この攻撃者があるバージョンを後で復元できるように保存している可能性がある場合、これでは十分でない。
【００７１】
信頼できるプロセッサが、電力の停止に耐えることができる又は独立したバックアップ電源を有する永続的な信頼できるメモリを有していれば、古いバージョンの再生を回避することができる。この永続的な信頼できるメモリをいくつかの方法で使用して、信頼できるプロセッサの初期化中にルートブロックのダイジェスト値又は署名が容認されるのを制限することができる。
【００７２】
１つの第１の変形例では、ルートブロックのダイジェスト又は署名を、このルートブロックに新たに書き込まれた各データとともに永続的な信頼できるメモリに記憶する。初期化中に、ルートブロックのダイジェスト又は署名を大容量記憶メモリから読み戻す。この値が、永続的な信頼できるメモリに記憶された値と同じものである場合、初期化の実行を継続する。そうでない場合、大容量記憶メモリの破損エラーを報告する。
【００７３】
第２の変形例では、容認可能なルートブロックのダイジェスト又は署名であると判断されたいくつかのバージョンを記憶する。新しいルートブロックを大容量記憶メモリに書き込む前に、このダイジェスト又は署名の新しい値を永続的メモリに記憶し、大容量記憶メモリに新しいルートブロックが書き込まれたことが確認されたら、ダイジェスト又は署名の以前の値を消去することが有利である。このようにして、書き込み処理中に電力障害が生じた場合、新旧両方のバージョンが有効であると見なされる。
【００７４】
第３の変形例は、永続的な任意のメモリは備えずに増加カウンタのみを備えた信頼できるコアを有する電子システムに関する。増加カウンタとは、記憶された値に単位を追加することを唯一可能な修正とするメモリのことである。この場合、カウンタの値をバージョン番号として使用する。このバージョン番号又はこのバージョン番号から推定されるデータ片を、毎回ルートブロックが大容量記憶メモリに書き込まれる前にこのルートブロックにコピーする。また、ルートブロックの新しいバージョンを大容量記憶メモリに書き込む連続する２回の動作の間に、メモリカウンタを１単位だけ増分することにより修正する。このようにして、各ルートブロックの書き込み動作が、異なるバージョン番号を有するようになる。信頼できるコアの初期化時に、最後に書き込まれた値を含むルートブロックが、又は最後の書き込み動作中に電力が停止した場合には最後から２番目に書き込まれた値を含むルートブロックが容認される。重要と判断されるルートブロックの修正が行われるときにのみ、バージョン番号を修正することもできる。例えば、重要なデータの修正をもたらした修正のみを考慮することができる。
【符号の説明】
【００７５】
１  電子システム
２  信頼できるプロセッサ
３  信頼できるキャッシュメモリ
４  大容量記憶メモリ
５  信頼できるコア
６  安全でない環境
Ａ１〜ｎ  アドレス
Ｄ１〜ｎ  データ
Ｂ１〜ｎ  ブロック
【図１】
0005749257.tif 000002
【図２】
0005749257.tif 000003
【図３】
0005749257.tif 000004
【図４】
0005749257.tif 000005
【図５】
0005749257.tif 000006
【図６】
0005749257.tif 000007
【図７】
0005749257.tif 000008
【図８】
0005749257.tif 000009