(57)【要約】  メモリセキュリティのカウンタ整合性ツリーは、少なくとも２つのカウンタ間で共有されるメジャーカウント値と、少なくとも２つのカウンタの各々に個別に指定されるそれぞれのマイナーカウント値との組み合わせとして各々定義される少なくとも２つのカウンタを指定する少なくとも１つの分割カウンタノードを含む。これにより、ツリーの親ノードごとに提供できる子ノード数が増加するため、メモリ領域の所与のサイズをカバーするツリー内でトラバースしなければならないツリーのレベル数が減少する。メインカウンタ整合性ツリーの対応するノードに収まらない大きなマイナーカウンタを収容するために、ミラーカウンタ整合性ツリーにノードを割り当てることにより、マイナーカウンタサイズを動的に変更できる。
2020529657.tif 000002
【特許請求の範囲】
【請求項１】
メモリに保存されたデータへのアクセスを制御するためのメモリアクセス回路と、
前記メモリの保護メモリ領域に保存されたデータの整合性を検証するためのメモリセキュリティ回路と
を含む装置であって、
前記メモリセキュリティ回路は、複数のノードを含むメインカウンタ整合性ツリーを維持するように構成され、各ノードは、前記保護メモリ領域の各データブロックに関連付けられた複数のカウンタを指定し、前記複数のノードは、前記メインカウンタ整合性ツリーのさらなるカウンタを提供する子ノードを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つの親ノードと、前記メインカウンタ整合性ツリー以外のデータを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つのリーフノードとを含み、
前記メモリセキュリティ回路は、前記保護メモリ領域のターゲットデータブロックへのアクセスに応答して、前記ターゲットデータブロックに関連付けられた保存済み認証コードと、前記ターゲットデータブロックおよび前記ターゲットデータブロックに関連付けられているカウンタ整合性ツリーのターゲットカウンタに基づいて生成される計算された認証コードとを比較することによって、前記ターゲットデータブロックの整合性を検証するように構成され、
前記メインカウンタ整合性ツリーのノードの少なくとも１つは、少なくとも２つのカウンタ間で共有されるメジャーカウント値と、前記少なくとも２つのカウンタの各々に個別に指定されるそれぞれのマイナーカウント値との組み合わせとして各々定義される前記少なくとも２つのカウンタを指定する分割カウンタノードを含み、
前記メモリセキュリティ回路は、前記メインカウンタ整合性ツリーの所与の分割カウンタノードに関連付けられたサイズ増加トリガイベントに応答して、前記所与の分割カウンタノードのマイナーカウンタのサイズを増やし、少なくとも１つのミラーカウンタ整合性ツリーの対応する分割カウンタノード内の前記所与の分割カウンタノードのマイナーカウンタのサブセットを割り当てるように構成されている、装置。
【請求項２】
前記所与の分割カウンタノードは、前記所与の分割カウンタノードのマイナーカウンタのサイズを示すサイズフィールドを指定する、請求項１に記載の装置。
【請求項３】
前記所与の分割カウンタノードのマイナーカウンタが前記メモリセキュリティ回路によってサポートされる最大サイズ以外のサイズを有する場合、前記サイズ増加トリガイベントに応答して、前記メモリセキュリティ回路は、前記所与の分割カウンタノードのマイナーカウンタのサイズを、前記メモリセキュリティ回路でサポートされる複数のマイナーカウンタサイズの中で２番目に大きいサイズに増やすように構成されている、請求項１に記載の装置。
【請求項４】
前記マイナーカウンタのサイズが、前記メモリセキュリティ回路によってサポートされる最小マイナーカウンタサイズの２倍を超える分割カウンタノードに対して、前記メモリセキュリティ回路は、少なくとも２つのミラーカウンタ整合性ツリーの対応する分割カウンタノードを割り当てるように構成されている、請求項１に記載の装置。
【請求項５】
前記メモリセキュリティ回路は、前記少なくとも１つのミラーカウンタ整合性ツリーにメモリ空間がまだ割り当てられていない場合、前記サイズ増加トリガイベントに応答して、前記少なくとも１つのミラーカウンタ整合性ツリーにメモリ空間を割り当てるように構成されている、請求項１に記載の装置。
【請求項６】
前記メモリセキュリティ回路は、各ミラーカウンタ整合性ツリーに対して、前記メインカウンタ整合性ツリーに割り当てられたメモリ空間の量と同じ量のメモリ空間を割り当てるように構成されている、請求項１に記載の装置。
【請求項７】
所与のミラーカウンタ整合性ツリーの対応する分割カウンタノードのアドレスと前記所与のミラーカウンタ整合性ツリーのベースアドレスとの間の第１のオフセットは、前記メインカウンタ整合性ツリーの前記所与の分割カウンタノードのアドレスと前記メインカウンタ整合性ツリーのベースアドレスとの間の第２のオフセットに等しい、請求項１に記載の装置。
【請求項８】
前記サイズ増加トリガイベントが、
前記所与の分割カウンタノードのマイナーカウンタのうちの１つのマイナーカウンタオーバーフロー、
予め決められた条件を満たす前記所与の分割カウンタノードのマイナーカウンタのオーバーフロー率、および
前記所与の分割カウンタノードのカウンタに関連付けられたデータブロックの認証コード再計算またはデータ再暗号化イベントが閾値を超える割合
の少なくとも１つを含む、請求項１に記載の装置。
【請求項９】
前記サイズ増加トリガイベントは、前記保護領域の関連サブセットに関連付けられたメモリトラフィックのレベルが閾値よりも大きいことを検出することを含み、前記保護領域の前記関連サブセットは、前記関連サブセット内の任意のターゲットブロックの整合性検証が前記所与の分割カウンタノードに依存する前記保護領域の一部を含む、請求項１に記載の装置。
【請求項１０】
第２のメモリを備え、
前記メモリセキュリティ回路が、
前記メインカウンタ整合性ツリーのルートノード、または
前記保護メモリ領域に保存された前記メインカウンタ整合性ツリーのルートノードの整合性を検証するための情報
を指定するルート検証データを前記第２のメモリに保存するように構成されている、
請求項１に記載の装置。
【請求項１１】
前記メモリセキュリティ回路は、前記ターゲットデータブロックへのアクセスに応答して、前記ターゲットカウンタと前記ルートノードとを含む前記メインカウンタ整合性ツリーのブランチ上のカウンタの整合性を検証するために１回以上の検証確認を実行するように構成され、前記検証確認の少なくとも１回は、前記第２のメモリに保存されている前記ルート検証データに依存する、請求項１０に記載の装置。
【請求項１２】
前記メモリセキュリティ回路は、前記メインカウンタ整合性ツリーの所与のノードにアクセスするときに、前記メインカウンタ整合性ツリーの所与のノードが利用可能になる前に、前記メインカウンタ整合性ツリーの所与のノードに関連付けられたマイナーカウンタサイズを予測するように構成されている、請求項１に記載の装置。
【請求項１３】
前記メモリセキュリティ回路は、前記予測されたマイナーカウンタサイズに応じて、前記ミラーカウンタ整合性ツリーの対応するノードにアクセスする要求をトリガするかどうかを判定するように構成されている、請求項１２に記載の装置。
【請求項１４】
前記ターゲットデータブロックの前記ターゲットカウンタが前記メインカウンタ整合性ツリーの分割カウンタノードによって指定される場合、前記保護メモリ領域の前記ターゲットデータブロックの更新に応答して、前記メモリセキュリティ回路は、前記ターゲットカウンタに対応するマイナーカウント値を更新し、前記ターゲットデータブロックの更新されたデータと、前記ターゲットカウンタに対応する対応する対応するメジャーカウント値と、前記ターゲットカウンタに対応する更新されたマイナーカウント値とに基づいて、前記ターゲットデータブロックに関連付けられた前記保存済み認証コードを再計算するように構成されている、請求項１に記載の装置。
【請求項１５】
前記メインカウンタ整合性ツリーは、異なるアリティを有する少なくとも２つのノードを含む、請求項１に記載の装置。
【請求項１６】
前記メインカウンタ整合性ツリーの少なくとも１つのノードが、正確な２の累乗以外のデータブロックの数のカウンタを指定する、請求項１に記載の装置。
【請求項１７】
前記メモリセキュリティ回路は、前記ターゲットデータブロックと同じキャッシュラインから前記ターゲットデータブロックの前記保存済み認証コードを読み取るように構成されている、請求項１に記載の装置。
【請求項１８】
前記メモリアクセス回路は、前記メインカウンタ整合性ツリーとは無関係に、前記メモリの非保護メモリ領域へのアクセスを制御するように構成されている、請求項１に記載の装置。
【請求項１９】
メモリの保護メモリ領域に保存されたデータへのアクセスを制御する方法であって、
複数のノードを含むメインカウンタ整合性ツリーを維持することであって、各ノードが、前記保護メモリ領域の各データブロックに関連付けられた複数のカウンタを指定し、複数のノードは、前記メインカウンタ整合性ツリーのさらなるカウンタを提供する子ノードを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つの親ノードと、前記メインカウンタ整合性ツリー以外のデータを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つのリーフノードとを含む、維持することと、
前記保護メモリ領域のターゲットデータブロックへのアクセスに応答して、前記ターゲットデータブロックに関連付けられた保存済み認証コードと、前記ターゲットデータブロックおよび前記ターゲットデータブロックに関連付けられている前記メインカウンタ整合性ツリーのターゲットカウンタに基づいて生成される計算された認証コードとを比較することによって、前記ターゲットデータブロックの整合性を検証することであって、
前記メインカウンタ整合性ツリーのノードの少なくとも１つは、少なくとも２つのカウンタ間で共有されるメジャーカウント値と、前記少なくとも２つのカウンタの各々に個別に指定されるそれぞれのマイナーカウント値との組み合わせとして各々定義される少なくとも２つのカウンタを指定する分割カウンタノードを含む、検証することと、
前記メインカウンタ整合性ツリーの所与の分割カウンタノードに関連付けられたサイズ増加トリガイベントに応答して、前記所与の分割カウンタノードのマイナーカウンタのサイズを増やし、少なくとも１つのミラーカウンタ整合性ツリーの対応する分割カウンタノード内に前記所与の分割カウンタノードのマイナーカウンタのサブセットを割り当てることと
を含む、メモリの保護メモリ領域に保存されたデータへのアクセスを制御する方法。
【請求項２０】
請求項１９に記載の方法を実行するようにデータ処理装置を制御するためのコンピュータプログラムを記憶している非一時的記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ処理の分野に関する。より具体的には、本技術はメモリセキュリティに関する。
【背景技術】
【０００２】
一部のデータ処理システムでは、潜在的な攻撃者にさらされるべきではない秘密または機密情報の処理を含むソフトウェアを実行する必要があり得る。しかし、攻撃者が改ざんできないメモリにそのような全ての情報を保存するのに十分な容量を提供することは実行不可能な場合があるため、時には攻撃に対して脆弱なメモリに一部の機密情報をエクスポートする必要があり得る。例えば、オンチップに保存されたデータは攻撃から保護されるが、オンチップのメモリストレージは限られているため、オフチップの外部メモリにデータを書き込む必要があり得る。攻撃者は、外部メモリからデータを読み取ったり、外部メモリに受け渡されるデータを傍受したり、および／または外部メモリに保存されたデータ値を、そのような外部保存データが次に処理システムに戻されるときに不正な挙動を引き起こすことを意図して改ざんしたりすることができる可能性がある。安全でない可能性のあるメモリに保存されているデータにセキュリティを提供するため、データ値がメモリに保存される前に暗号化し、安全でないメモリからデータが読み取られたときに整合性確認を行い、データがメモリに保存されて以後に変更されていないことを確認することができる。ただし、このようなメモリセキュリティの動作では、メモリにデータを書き込んだり、メモリからデータを読み取ったりするたびに追加の計算とメモリアクセスを実行する必要があり得るため、パフォーマンスコストが発生する。
【発明の概要】
【０００３】
少なくともいくつかの例では、
メモリに保存されたデータへのアクセスを制御するためのメモリアクセス回路と、
メモリの保護メモリ領域に保存されたデータの整合性を検証するためのメモリセキュリティ回路と
を含む装置を提供し、
メモリセキュリティ回路は、複数のノードを含むメインカウンタ整合性ツリーを維持するように構成され、各ノードは、保護メモリ領域の各データブロックに関連付けられた複数のカウンタを指定し、複数のノードは、メインカウンタ整合性ツリーのさらなるカウンタを提供する子ノードを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つの親ノードと、メインカウンタ整合性ツリー以外のデータを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つのリーフノードとを含み、
メモリセキュリティ回路は、保護メモリ領域のターゲットデータブロックへのアクセスに応答して、ターゲットデータブロックに関連付けられた保存済み認証コードと、ターゲットデータブロックおよびターゲットデータブロックに関連付けられているカウンタ整合性ツリーのターゲットカウンタに基づいて生成される計算された認証コードとを比較することによって、ターゲットデータブロックの整合性を検証するように構成され、
メインカウンタ整合性ツリーのノードの少なくとも１つは、少なくとも２つのカウンタ間で共有されるメジャーカウント値と、少なくとも２つのカウンタの各々に個別に指定されるそれぞれのマイナーカウント値との組み合わせとして各々定義される少なくとも２つのカウンタを指定する分割カウンタノードを含み、
メモリセキュリティ回路は、メインカウンタ整合性ツリーの所与の分割カウンタノードに関連付けられたサイズ増加トリガイベントに応答して、所与の分割カウンタノードのマイナーカウンタのサイズを増やし、少なくとも１つのミラーカウンタ整合性ツリーの対応する分割カウンタノード内の所与の分割カウンタノードのマイナーカウンタのサブセットを割り当てるように構成されている。
【０００４】
少なくともいくつかの例は、
複数のノードを含むメインカウンタ整合性ツリーを維持することであって、各ノードが、保護メモリ領域の各データブロックに関連付けられた複数のカウンタを指定し、複数のノードは、メインカウンタ整合性ツリーのさらなるカウンタを提供する子ノードを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つの親ノードと、メインカウンタ整合性ツリー以外のデータを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つのリーフノードとを含む、維持することと、
保護メモリ領域のターゲットデータブロックへのアクセスに応答して、ターゲットデータブロックに関連付けられた保存済み認証コードと、ターゲットデータブロックおよびターゲットデータブロックに関連付けられているメインカウンタ整合性ツリーのターゲットカウンタに基づいて生成される計算された認証コードとを比較することによって、ターゲットデータブロックの整合性を検証することであって、
メインカウンタ整合性ツリーのノードの少なくとも１つは、少なくとも２つのカウンタ間で共有されるメジャーカウント値と、少なくとも２つのカウンタの各々に個別に指定されるそれぞれのマイナーカウント値との組み合わせとして各々定義される少なくとも２つのカウンタを指定する分割カウンタノードを含む、検証することと、
メインカウンタ整合性ツリーの所与の分割カウンタノードに関連付けられたサイズ増加トリガイベントに応答して、所与の分割カウンタノードのマイナーカウンタのサイズを増やし、少なくとも１つのミラーカウンタ整合性ツリーの対応する分割カウンタノード内の所与の分割カウンタノードのマイナーカウンタのサブセットを割り当てることと
を含む、メモリの保護メモリ領域に保存されたデータへのアクセスを制御する方法を提供する。
【０００５】
少なくともいくつかの例は、上記方法を実行するようにデータ処理装置を制御するコンピュータプログラムを提供する。コンピュータプログラムは、記憶媒体に保存されてもよい。記憶媒体は、非一時的記憶媒体であってもよい。
【０００６】
本技術のさらなる態様、特徴および利点は、添付の図面と併せて読まれる例の以下の説明から明らかになるであろう。
【図面の簡単な説明】
【０００７】
【図１】メモリの保護メモリ領域に保存されたデータの整合性を検証するためのメモリセキュリティ回路を有する装置の一例を概略的に示す図である。
【図２】比較のために、ハッシュツリーを使用して、保護メモリ領域に保存されたデータの整合性を確認する例を示す図である。
【図３】比較のために、ツリーの各ノードがデータの整合性を確認するためのモノリシックカウンタを指定するカウンタ整合性ツリーの例を示す図である。
【図４】カウンタが、カウンタ間で共有されるメジャーカウント値と、各カウンタについて個別に指定されるそれぞれのマイナーカウント値との組み合わせとして指定される分割カウンタノードを含む、カウンタ整合性ツリーの例を示す図である。
【図５】カウンタ整合性ツリーのノードのアリティがルートノードに向かってツリーを上るにつれて減少する例を示す図である。
【図６】カウンタ整合性ツリーの１つのノードが複数のメジャーカウント値を指定し、各メジャーカウント値が、そのノードによって指定されたマイナーカウント値の異なるサブセットに対応する例を示す図である。
【図７】所与のデータブロックの保存済み認証コードがそのデータブロックとは別に保存されている例を示す図である。
【図８】メモリへの読み取りアクセスを制御する方法を示すフロー図である。
【図９】メモリへの書き込みアクセスを実行する方法を示すフロー図である。
【図１０】まばらにポピュレートされたミラーカウンタ整合性ツリーの対応するノード内にマイナーカウンタのサブセットのための空間を割り当てることにより、分割カウンタノードのマイナーカウンタのサイズを増やす例を示す図である。
【図１１】まばらにポピュレートされたミラーカウンタ整合性ツリーの対応するノード内にマイナーカウンタのサブセットのための空間を割り当てることにより、分割カウンタノードのマイナーカウンタのサイズを増やす例を示す図である。
【図１２】複数のミラーカウンタ整合性ツリーが使用される例を示す図である。
【図１３】メインカウンタおよびミラーカウンタの整合性ツリーの対応するノードに、ベースアドレスに対する同じアドレスオフセットを使用することを示す図である。
【図１４】可変アリティと可変マイナーカウンタサイズを持つツリーの例を示す図である。
【図１５】カウンタ整合性ツリーの様々な実装のパフォーマンスを比較したグラフである。
【図１６】使用できるシミュレータの例を示す図である。
【０００８】
装置は、メモリに保存されたデータへのアクセスを制御するためのメモリアクセス回路と、メモリの保護メモリ領域に保存されたデータの整合性を検証するためのメモリセキュリティ回路とを有し得る。例えば、整合性検証は、攻撃者によって保護メモリ領域に保存されたデータを改ざんする攻撃者を検出するためのものであってもよい。例えば、メモリは、メモリアクセス回路を含む集積回路とは別の集積回路上のオフチップメモリであり得る。
【０００９】
整合性検証は、保存されたデータとメモリセキュリティ回路によって維持される整合性メタデータとの比較に依存する場合がある。例えば、保護メモリ領域にデータを書き込む場合、メモリセキュリティ回路は、保護メモリ領域に保存されたデータのプロパティに基づいて整合性メタデータを生成することができ、保護メモリ領域からデータを読み取る場合、メモリセキュリティ回路は、データが書き込まれて以後に変更されたかどうかを確認するために整合性メタデータを使用することができる。しかし、このような整合性メタデータには、保護メモリ領域のアドレス範囲全体を保護するための全てのメタデータを提供するためにかなりの量のストレージ空間が必要になる場合がある。攻撃者に対して脆弱ではない記憶装置ではデータを保持する容量は限られていることが多いため、実際には、保護メモリ領域自体に整合性メタデータの少なくとも一部を保存する必要があり得る。これにより、メタデータが攻撃に対して脆弱になるため、通常、同様に保護領域に保存されていてもよいさらなるメタデータを使用して、（対象となる実際のデータと同様の方法で）整合性メタデータ自体に読み取り時の整合性検証を行う必要があり得る。したがって、これは保護メモリ領域の「実際の」データの読み取りごとに対象となる実際のデータに加えて整合性メタデータの複数の読み取り、および整合性メタデータが有効かどうかを確認するための対応する比較をトリガすることがあり、保護メモリ領域のサイズの増加に伴い、システム全体のパフォーマンスに対する整合性検証のパフォーマンスの影響を制限することはますます困難になり得る。
【００１０】
以下で論じる技術では、メモリセキュリティ回路は、いくつかのノードを含むカウンタ整合性ツリーを維持することができる。各ノードは、保護メモリ領域のそれぞれのデータブロックに関連付けられている複数のカウンタを指定する。カウンタ整合性ツリーのノードは少なくとも１つの親ノードを含み、その親ノードによって指定されたカウンタの少なくとも１つは、さらなるデータブロック用のカウンタを提供するカウンタ整合性ツリーの子ノードを保存するデータブロックに関連付けられている。また、ノードは少なくとも１つのリーフノードを含み、少なくとも１つのカウンタは、カウンタ整合性ツリー以外のデータを保存するデータブロックに関連付けられている。
【００１１】
ツリー内の各カウンタは、対応するデータブロックの信頼性を確認するための認証コードを生成するために使用される。したがって、保護メモリ領域のターゲットデータブロックへのアクセスに応答して、メモリセキュリティ回路は、ターゲットデータブロックに関連付けられた保存済み認証コードを、ターゲットデータブロックとターゲットデータブロックに関連付けられているカウンタ整合性ツリーのターゲットカウンタとに基づいて生成される計算された認証コードと比較することにより、ターゲットデータブロックの整合性を検証することができる。なお、ターゲットデータブロックは、対象の「実際の」データを保存するデータブロックであり得るか、カウンタ整合性ツリー自体のノードの１つを保存するデータブロックであり得、これは何らかの他の「実際の」データブロックの整合性を確認するための検証プロセスの一部としてアクセスされ得る。
【００１２】
整合性ツリーの使用はリプレイ攻撃に対する防御に役立ち、リプレイ攻撃は、攻撃者が現在のデータ値とその有効な認証コードを一度に捕獲する攻撃形式であり（例えば、メモリ自体を読み取るか、メモリとデータソースとの間のインターフェースを監視することによる）、その後そのデータ値が最新ではなくなった後、古いデータブロックとそれに関連付けられた有効な認証コードを、メモリに保存されている正しい値に置き換えようとし、それが装置内の不正な挙動につながる可能性がある。あるノードからのデータが別のノードに基づいて計算された認証コードで保護される整合性ツリーを提供することにより、あるノードに関するデータおよび認証コードの古いペアと、親ノードから計算された認証コードとカウンタとの間の不一致から、古くなったデータのリプレイを検知することができる。整合性ツリーを実装する１つの方法は、カウンタ整合性ツリーとしての実装であり、これは、親ノードが各子ノードの認証コードの生成に使用されるカウンタを提供するように、ツリーがカウンタで構成されている種類の整合性ツリーである。ただし、カウンタの頻繁なオーバーフローを回避するために、カウンタには所定のビット数を設ける必要があり得る。これにより、ツリーノードごとに提供できるカウンタの数が制限されるため、カウンタ整合性ツリーを実装できる効率が制限される可能性がある。
【００１３】
以下で論じる技術では、カウンタ整合性ツリーのノードの少なくとも１つが分割カウンタノードであり、分割カウンタノードは、少なくとも２つのカウンタ間で共有されるメジャーカウント値と、少なくとも２つのカウンタの各々に対して個別に指定されるそれぞれのマイナーカウント値との組み合わせとして各々定義される、少なくとも２つのカウンタを指定する。したがって、メジャーカウント値は、分割カウンタノードによってカバーされるデータブロックの少なくとも２つに対応する２つ以上のカウンタの各々に共有される共通部分を指定し、それぞれのマイナーカウント値は、カウンタごとに異なる部分を各々指定する。
【００１４】
このような分割カウンタノードをカウンタ整合性ツリーで使用すると、より効率的なメモリパフォーマンスが可能になる。カウンタごとに個別に指定されたマイナーカウント値は、必要な全てのビット数を各カウンタについて完全に個別に提供する必要がある場合に比べて小さいため（一部のビットは、カウンタグループに１回提供される共有メジャーカウンタでカバーされるため）、これは、所与のサイズのデータブロック内に収まるマイナーカウント値の数が大きくなり、そのため、カウンタ整合性ツリーの単一ノード内でカウンタを指定できるデータブロックの数を効果的に増やすことができることを意味する。言い換えると、カウンタ整合性ツリーノードのアリティは大きくなる可能性がある（アリティとは、親ノードごとに提供される子ノードの数を指す）。保護メモリ領域の所与のサイズを想定すると、分割カウンタノードのアリティを増やすことができる場合、データブロックの整合性およびカウンタ自体の整合性を確認するための全てのカウンタを取得するためにトラバースする必要があるカウンタ整合性ツリーのレベル数は減少する可能性がある。これは、カウンタ整合性ツリーのトラバース中に生成されるメモリトラフィックが少なくなることを意味するため、保護メモリ領域の「実際の」データへのアクセスごとに必要とされる読み取り動作が少なくなることにより、パフォーマンスが向上する。
【００１５】
また、一部の実装では、メモリからのデータのサブセットを保存するためのキャッシュを有することができ、データアクセス待ち時間は、データをメモリ自体から読み取らなければならない場合に比べて、キャッシュ内のアクセスでは短くなる。分割カウンタノードでは、所与のサイズのデータブロックにより多くのカウンタを表すことができるため、これはより多くのカウンタを所定量のキャッシュ空間にキャッシュできることを意味し、所与のデータアクセスの整合性を確認するために必要なカウンタがキャッシュ内に存在する可能性が高まり、したがって、データが既にキャッシュされている場合には、メモリ内の保護メモリ領域へのより多くのアクセスを省略することができる。
【００１６】
実際には、所与の認証コードに通常必要とされるよりも少ないビットでマイナーカウンタを指定できるため、分割（メジャー−マイナー）カウンタの手法は、ツリーの各親ノードが子ノードの数のカウンタを指定するのではなく子ノードの数の認証コードを指定する代替の「ハッシュツリー」実装に比べて、効率的である傾向もある。認証コードの生成に使用される秘密鍵が不明である場合に（総当たりなどによって）所与のデータブロックに関連付けられた認証コード（ハッシュ）を推測または推測することが暗号的に実行不可能である、十分なレベルのセキュリティを提供するのに通常必要な各ハッシュのビット数を考えると、実際のツリーのアリティは、ハッシュツリーで実用的であるよりも、ツリーの分割カウンタノードでより大きくなる可能性がある。
【００１７】
したがって、整合性メタデータをカウンタ整合性ツリーとして実装し、ツリーの少なくともいくつかのノードを上記のように分割カウンタノードとして実装すると、カウンタ整合性ツリーは、ツリーの生成中および／またはデータの整合性検証のためのツリーの使用中により効率的にトラバースすることができ、システムのパフォーマンスが向上する。
【００１８】
メインカウンタ整合性ツリーの所与の分割カウンタノードに関連付けられたサイズ増加トリガイベントに応答して、メモリセキュリティ回路は、所与の分割カウンタノードのマイナーカウンタのサイズを増やし、少なくとも１つのミラーカウンタ整合性ツリーの対応する分割カウンタノード内の所与の分割カウンタノードのマイナーカウンタのサブセットを割り当てることができる。これにより、より大きなマイナーカウンタを保存するために必要な任意の追加の空間をミラーカウンタ整合性ツリーの対応するノード内に収容できるため、そのノードのアリティ（そのノード下の子ノードの数）を減らすことなく、メインツリーの特定のノードのマイナーカウンタのサイズを増やすことができる。マイナーカウンタのサイズは、サイズ増加トリガイベントが検出されたメインカウンタ整合性ツリーの選択されたノードで増やすことができるが、メインカウンタ整合性ツリーの全てのノードで増やす必要はない。したがって、ミラーカウンタ整合性ツリーは、ミラーカウンタ整合性ツリーの全てのノードに有効なデータを持たない、まばらにポピュレートされたツリーであり得る。この手法は、メモリトラフィックがメモリアドレス空間全体に均等に分布しない（一部のブロックが他のブロックよりも頻繁にアクセスされる）ため、有用であり得る。したがって、この手法により、各ノードはできるだけ小さなマイナーカウンタサイズを使用して開始できるようになり、所与のデータブロックの整合性を検証するときにトラバースする必要があるツリーのレベル数を減らすが、頻繁にアクセスされるメモリ領域に相当するノードについては、ミラーツリーを使用してカウンタサイズを増やして追加のカウンタを収容し、オーバーフローの可能性を減らし、パフォーマンス集中型の再暗号化または必要なマイナーカウンタのオーバーフローでトリガされる認証コードの再計算動作の可能性を減らすことができることにより、パフォーマンスを向上させる。したがって、可変マイナーカウンタサイズの手法は、ツリーの所与のノードに対して所定の固定されたマイナーカウンタサイズを持つツリーよりも全体的に優れたパフォーマンスを提供できる。
【００１９】
装置は第２のメモリを有してもよく、メモリセキュリティ回路は、メインカウンタ整合性ツリーのルートノードを指定するか、またはメインカウンタ整合性ツリーのルートノードの整合性を検証するための情報を指定するルート検証データを第２のメモリに保存してもよい（第２のケースでは、ルートノード自体が保護メモリ領域に保存されることがある）。第２のメモリは信頼の境界内にある可能性があるため、攻撃に対して脆弱ではない。例えば、第２のメモリはオンチップメモリであり得、保護メモリ領域はオフチップメモリにあり得る。ルートノードは、ツリーの他の全てのノードの祖先ノードであるノードである。したがって、ルート検証データにより、保護メモリ領域内にあるカウンタ整合性ツリーの任意の部分を、攻撃に対して脆弱ではない信頼できるデータに基づいて認証することが可能になる。場合によっては、第２のメモリに保存されているルートノード自体が、上述したように分割カウンタノードであり得る。あるいは、モノリシック（非分割）カウンタを使用してルートノードを実装できる。また、ルートノードの整合性を検証するために第２のメモリに保存される情報は、ルートノード自体ではなくてもよく、保護メモリ領域内に保存されたルートノードから導出された認証値と比較するための保存済み認証値を含んでもよく、および／またはルートノードから導出される認証値を計算するために使用される保存済みカウンタを含んでもよい。ミラーカウンタ整合性ツリーが割り当てられ、ミラーカウンタ整合性ツリーのルートノードがポピュレートされた場合、第２のメモリは、ミラーカウンタ整合性ツリーのルートノードの整合性を検証するためのルート検証データを保存することもでき、またはミラーカウンタ整合性ツリー自体のルートノードを保存することもできる。
【００２０】
したがって、ターゲットデータブロックにアクセスすると、メモリセキュリティ回路は１つ以上の検証確認を実行して、ターゲットカウンタおよびルートノード（およびメインカウンタ整合性ツリーの全体的なサイズによっては介在ノード上の１つ以上の介在カウンタ）を含むメインカウンタ整合性ツリーのブランチ上のカウンタの整合性を検証し、それらの検証確認の少なくとも１回は、第２のメモリに保存されているルート検証データに依存する。
【００２１】
保護メモリ領域のターゲットデータブロックが更新されると、メモリセキュリティ回路はターゲットカウンタを更新し、ターゲットデータブロックに書き込まれた更新データと更新されたターゲットカウンタの両方に基づいてターゲットデータブロックに関連付けられている保存済み認証コードを再計算してもよい。したがって、ターゲットデータブロックが更新されるたびに認証コードの計算に使用されるターゲットカウンタを更新することにより、認証コードの計算が新鮮になり、認証コードの生成に使用される秘密鍵の推定が難しくなる。
【００２２】
カウンタの更新は、カウンタ値の繰り返しを回避し、かつカウンタの可能な全ての値が既に使用されているときに検出できる一連の更新を提供する任意の方法で行うことができる（データの暗号化または認証方法に対する何らかの他の変更をせずに同じカウンタ値を再利用することは、リプレイ攻撃が成功するリスクを生じる可能性がある）。比較的単純な手法は、ターゲットデータブロックの対応するデータが更新されるたびにターゲットカウンタを増分することにより、カウンタを更新することであり得る。あるいは、他の実装では、対応するデータの更新ごとにカウンタを非単調に更新することができる（例えば定数を使用してＸＯＲ演算を適用することにより、単調に増加する参照カウンタを変換して非単調に増加するカウント値のシーケンスを得、攻撃者がカウンタの変動パターンを判断しにくくするために、更新のたびにカウント値をターゲットカウンタに書き込む）。
【００２３】
カウンタがオーバーフロー（以前に使用されたカウンタ値に戻る）した場合には、オーバーフローによって、データの暗号化に使用される暗号鍵の変更、または認証コードの生成に使用される秘密鍵もしくは他のパラメータの変更など何らかの他のアクションがトリガされ、暗号化／認証プロセスの何らかの他のパラメータが変更されているため、古いカウンタ値を再利用するのがより安全になる場合がある。
【００２４】
ターゲットデータブロックに関連付けられたターゲットカウンタは保護メモリ領域内のさらなるデータブロックに保存される可能性があるため、カウンタの更新には、保護メモリ領域内の別のデータブロックへの追加の書き込みアクセスが必要になる場合があり、したがって、更新されるデータブロックに関連付けられたさらなるカウンタが必要になり、それ自体がさらなる書き込みアクセスなどをトリガする場合がある。したがって、元の書き込みアクセスは、一連の連続したカウンタ更新と認証コードの再計算をトリガする可能性があり、ルートに到達するまでツリーをトラバースする。
【００２５】
カウンタ整合性ツリーの全てのノードが分割カウンタの手法を使用することは必須ではない。例えば、保護メモリ領域内で保護されるデータブロックの総数は、カウンタ整合性ツリーに実装されているアリティ（親ノードごとの子ノードの数）の正確な累乗ではない場合があり、その場合には、少数のモノリシックカウンタを保存すれば必要なアリティを提供するのに十分である可能性があるため、アリティが低く、分割カウンタの手法を使用しないノードも存在し得る。したがって、全てのノードで分割カウンタを使用する必要があるわけではない。
【００２６】
分割カウンタノードとして実装されているノードについては、対応するターゲットデータブロック内の対応するデータへの書き込みのために分割形式で実装されたターゲットカウンタを更新する必要がある場合、メモリセキュリティ回路はターゲットカウンタに対応するマイナーカウント値を更新する。また、メモリセキュリティ回路は、ターゲットデータブロックの更新されたデータ、対象のターゲットカウンタに対応する対応するメジャーカウント値、および対象のターゲットカウンタに対応する更新されたマイナーカウント値に基づいて、ターゲットデータブロックに関連付けられている保存済み認証コードを再計算してもよい。マイナーカウント値の更新がオーバーフローをトリガしない場合、同じメジャーカウント値をターゲットデータブロックと共有する他のデータブロックに関連付けられた他の認証コードを更新する必要はない。
【００２７】
ただし、マイナーカウント値の更新によりオーバーフロー（以前に使用されたマイナーカウント値の再利用）が発生する場合、メモリセキュリティ回路は、ターゲットカウンタ対象の対応するメジャーカウント値を更新してもよい。カウンタのメジャーカウント値を共有するターゲットデータブロック以外のデータブロックがいくつかあるため、メジャーカウント値を更新すると、以前に保存された認証コードは、メジャーカウント値、それらのデータブロックのデータ、およびマイナーカウンタから計算された認証コードともはや一致しなくなることを意味する。したがって、メモリセキュリティ回路は、ターゲットデータブロック自体の保存済み認証コードの再計算に加えて、対応するメジャーカウント値を共有するカウンタに関連付けられている他のデータブロックの各々に関連付けられた保存済み認証コードも再計算できる。したがって、時には、それぞれのマイナーカウンタ間でメジャーカウント値を共有することは、ターゲットデータブロック自体以外のブロックの認証コードの追加計算が必要になることを意味する場合がある。しかし、このパフォーマンスペナルティはほとんど発生せず、一方で分割カウンタの手法を用いてツリーノードのアリティを増加させることによるパフォーマンスの向上は、カウンタツリーの各トラバースの高速化に役立ち、平均すると分割カウンタの手法の方がパフォーマンスが優れている。
【００２８】
また、少なくとも１つのミラーカウンタ整合性ツリーの所与のノードのマイナーカウント値のオーバーフローに応答して（または、閾値の超過など予め決められた条件を満たした所与のノードのマイナーカウンタのオーバーフロー率に応じて）、メモリセキュリティ回路は、そのノードのマイナーカウンタのサイズを増やし、マイナーカウンタのサブセットを少なくとも１つのミラーカウンタ整合性ツリーの対応するノードに割り当てることもできる。すなわち、マイナーカウンタがオーバーフローする（または頻繁にオーバーフローする）場合、これは、マイナーカウンタの現在のサイズが小さすぎるという指標になり得、したがって、マイナーカウンタのサイズを増やして同じブロック内の他のマイナーカウンタが頻繁にオーバーフローする可能性を減らすために有用であり得る。マイナーカウンタのオーバーフローに応答してマイナーカウンタのサイズを常に大きくすることは必須ではなく、場合によっては所与のノードのマイナーカウンタサイズの増加をトリガするためにいくつかの条件を満たす必要があり得、条件の１つはそのノードのマイナーカウンタのオーバーフローであり得る。マイナーカウンタのオーバーフローの比率は、例えば時間（一定期間内のオーバーフロー数）、またはメモリアクセス数（所定のメモリアクセス数に対して検出されたオーバーフロー数）、またはメモリへの書き込み動作数に対する比率など、様々な方法で監視することができる。マイナーカウンタサイズは、データの再暗号化または認証コードの再計算の比率が設定された閾値を超えた場合にも増加する可能性がある（再び、データの再暗号化または認証コードの再計算の比率を時間、メモリアクセス数、またはメモリへの書き込み動作の数に対して定義できる）。
【００２９】
分割カウンタノードは、親ノードとリーフノードの両方を含むカウンタ整合性ツリーの任意のノードに設けることができる。ただし、少なくとも１つの親ノードが分割カウンタノードであると特に有用であり得る。これにより、所与のサイズの保護メモリ領域をカバーするために必要なツリーのレベルが少なくなるように、ツリーのより高速なファンアウトが可能になる。いくつかの実装では、メモリセキュリティ回路は、カウンタ整合性ツリーの異なるレベルに少なくとも２つの分割カウンタノードを含むカウンタ整合性ツリーを維持することができる。
【００３０】
いくつかの実装では、カウンタ整合性ツリーの各ノードは同じアリティを有することができ、すなわち、各ノードは同数のデータブロックまたは子ノードのカウンタを指定できる。ただし、ツリーの少なくとも２つのノードで、異なる数の子ノードのカウンタを指定することもできる。
【００３１】
特に、ツリーの上位にある（すなわち、ルートノードに近い）ノードが、ルートから離れていてツリーのリーフに近いノードよりも低いアリティを有するように、メインカウンタ整合性ツリーの少なくとも一部を実装すると有用であり得る。したがって、ツリーのアリティはレベルごとに可変であり得、ツリーをトラバースしてルートノードに近づくにつれて減少し得る。
【００３２】
例えば、メインカウンタ整合性ツリーは、第１の数のデータブロックのカウンタを指定する第１の分割カウンタノードと、第１の数よりも大きい第２の数のデータブロックのカウンタを指定する第２の分割カウンタノードで構成することができ、ここで、第１の分割カウンタノードは第２の分割カウンタノードの親ノードである。子に対する親ノードのアリティを減らすことにより、子ノードに比べて親ノードのカウンタが少なくなるため、ビット数の大きいカウンタを含む空間が増える。したがって、第１の分割カウンタノードによって指定されたマイナーカウント値は、第２の分割カウンタノードによって指定されたマイナーカウント値よりも大きいビット数を有し得る。ツリーの上位レベルの各ノードはツリー下位のノードよりも広範囲のアドレスをカバーするために、ツリーのルートに向かうにつれてツリーの各レベルへの書き込みトラフィックの量は指数関数的に増加する傾向があるため、これは非常に有用である。アリティを小さくし、マイナーカウント値を大きくすることで、ルートノードに向かってツリーを上昇するにつれて、これらの上位レベルでカウンタオーバーフローが発生する可能性が低くなり、上位レベルのノードで認証コードを再計算する必要性の頻度が下がる。したがって、下位レベルで高いアリティを提供し、上位レベルで低いアリティを提供することにより、個々の読み取り動作の待ち時間およびカウンタオーバーフローが発生する場合の待ち時間の両方を考慮するとパフォーマンスのより良いバランスを提供することができる。
【００３３】
同様に、祖父母ノード、親ノードおよび子ノードをそれぞれ含むツリーに３つ以上のレベルがある場合、祖父母ノードが親ノードよりも少ないカウンタを指定できる（より少ない数の子ノードをカバーする）ように、祖父母ノードは親ノードに比べてさらに低いアリティを有することができ、祖父母ノードのマイナーカウント値は親ノードのマイナーカウント値よりも多いビット数を有することができる。したがって、親ノードに対応する第１の分割カウンタノードと上記子ノードに対応する第２の分割カウンタノードでは、３番目の分割カウンタノードを含むさらなる祖父母ノードが第３のデータブロック数のカウンタを指定することができ、これは、第１の（親）分割カウンタノードに使用される第１の数よりも小さくなる。
【００３４】
いくつかの実装では、ツリーの各ノードのアリティは、正確な２の累乗になり得る。したがって、メインカウンタ整合性ツリーの各ノードは、例えば８、１６、３２または６４など、正確な２の累乗であるデータブロックの数のカウンタを指定できる。
【００３５】
しかし、一実装では、メインカウンタ整合性ツリーの少なくとも１つのノードが、例えば３６または４８などの正確な２の累乗以外のデータブロックの数のカウンタを指定する場合がある。すなわち、少なくとも１つの分割カウンタノードのアリティは、正確な２の累乗以外の値になる場合がある。メモリ空間は通常、アドレス計算算術を単純化するために２の累乗単位のアドレスに対応するブロックで構成されているため、２の累乗ではない数のデータブロックに対応するツリーノードを使用することは、熟練者にとっては非常に直感的であり得る。しかし、２つの隣接する２の累乗の間にあるアリティを提供することで、パフォーマンスのバランスが向上することがよくあることが認識されており、これは、２番目に大きい２の累乗に対応するアリティを有するツリーノードを実装すると、各カウンタのサイズが小さくなりすぎ、実行時間の大半を占めるかなりの数のオーバーフローが発生する可能性があるが、２番目に小さい２の累乗を使用すると、カウンタにビットが過剰に供給される可能性があり、オーバーフローの可能性は無視できるほど低いがカウンタのビットはほとんど使用されないためである。したがって、しばしばカウンタ整合性ツリーの所与のノードがカバーするデータブロックの数に２の累乗ではない数を使用すると、オーバーフローの可能性に対して読み取り／書き込みアクセスでトラバースするツリーレベルの合計数のバランスがとれ、動作期間全体で平均してパフォーマンスが向上する場合がある。ツリーノードに２の累乗ではないアリティを使用すると、カウンタ整合性ツリーの所与のノードを保存するアドレスを決定するためのアドレス計算算術が複雑になる可能性があるが、この追加のオーバーヘッドは、オーバーフローの可能性に対してツリーをトラバースするために必要なメモリアクセス数のバランスがとれるというパフォーマンスの追加のメリットによって解消され得る。
【００３６】
いくつかの例では、メモリセキュリティ回路は、保護メモリ領域のターゲットデータブロックと同じキャッシュラインからターゲットデータブロックの保存済み認証コードを読み取ることができる。キャッシュラインはメモリアドレス空間の単位であり、メモリによる単一のデータアクセスとして返すことができる。保存済み認証コードを同じキャッシュライン内のターゲットデータ自体と一緒に保存することにより、保存済み認証コードを読み取ってターゲットデータブロックの計算された認証コードと比較するために２回目のメモリアクセスを実行する必要がなくなる。
【００３７】
しかしながら、他の実装では、保存済み認証コードはターゲットデータブロックとは別のキャッシュラインに保存され得る。例えば、いくつかのメモリチップは、一次記憶領域内のデータに関連付けられたエラー検出／訂正コードを保存するための二次記憶領域を提供することができる。そのようなメモリチップは、一次データとそれに関連するエラー検出／訂正コードの両方を、それらが別々のキャッシュラインに保存されている場合でも、メモリアクセスに応答して効率的に返すように設計できる。したがって、いくつかの実装では、保存済み認証コードは、エラー検出／訂正コードで使用するために設計されたメモリチップの二次保存領域に保存され得る。
【００３８】
保存済み認証コードと、アクセスされているターゲットデータブロックの計算された認証コードとの不一致が検出されると、メモリセキュリティ回路がセキュリティ違反応答をトリガすることがある。セキュリティ違反応答は、メモリへのアクセスの成功を防げるため、または攻撃の可能性に対する対策をとるためのいくつかの動作のいずれかであり得る。例えば、セキュリティ違反応答には、次のいずれかが含まれ得る。ターゲットデータブロック内のデータアクセスの復号化を許可する暗号鍵へのアクセスを拒否する；ターゲットデータブロックへのアクセス要求を拒否する；ターゲットデータブロックをダミーデータ、ランダムデータ、またはターゲットデータブロックの以前の内容とは無関係の他のデータで上書きしてそのデータへのアクセスを防ぐ；例外を発生させオペレーティングシステムなどのソフトウェアプロセスをトリガして攻撃に対する対策を講じる；保護メモリ領域内の全てのデータ（ターゲットデータブロックだけではない）をそれが侵害された場合に上書きまたは消去する、および／または装置またはメモリを無効化して装置またはメモリのさらなる正常使用を防げる（例えば、攻撃の対象となった後メモリまたは装置の溶融接続による焼損などの物理的対策を講じてデバイスの正常使用を防げる）。セキュリティ違反が識別されたときに実行されるアクションの正確な詳細は、実装ごとに異なり得る。
【００３９】
メモリセキュリティ回路は、保護メモリ領域のデータブロックに書き込まれたデータを暗号化し、保護メモリ領域のデータブロックから読み取られたデータを復号化する暗号化／復号化回路を有してもよい。したがって、データは、保護メモリ領域からデータを読み取ることができる攻撃者に平文で公開されない場合がある。カウンタ整合性ツリーは、保護メモリ領域にあるデータの改ざんを検出し、かつ攻撃をリプレイする手段を提供することにより、さらなる保護を提供する。保護メモリ領域に書き込まれるカウンタ整合性ツリーの任意のノードも、「実際の」データ自体と同様の方法で暗号化および復号化され得る。
【００４０】
一部の実装では、メモリセキュリティ回路による制御の対象となるメモリにマッピングされた全てのアドレス空間が保護メモリ領域と見なされるため、そのメモリへの全てのアクセスは、暗号化、復号化、およびカウンタ整合性ツリーを用いた整合性検証の対象となり得る。また、メモリアクセス回路は、同じ保護の対象ではない、別個のメモリユニットなど、少なくとも１つの他のメモリへのアクセスを制御してもよい。あるいは、同じメモリデバイス内で、メモリ内の異なるアドレス範囲を保護領域と非保護メモリ領域にそれぞれマッピングすることができる。非保護メモリ領域では、メモリアクセス回路は、メモリセキュリティ回路によって提供される保護のいずれかとは無関係に、その領域のデータへのアクセスを制御でき、例えば、暗号化／復号化を必要とせず、カウンタ整合性ツリーと認証コードに基づく整合性検証を必要としない。したがって、非保護メモリ領域へのアクセスは、カウンタ整合性ツリーとは無関係に制御できる。例えば、攻撃者から保護する必要のない非機密データが存在する場合がある。そのデータを非保護メモリ領域に書き込むことで、整合性ツリーデータと認証コードを読み書きしてデータの信頼性を検証するために追加のメモリアクセスを実行する必要がないため、パフォーマンスが向上する。
【００４１】
上記技術は、ハードウェアでメモリセキュリティ回路の機能を提供する特注の回路を備えた物理デバイスに実装できる。したがって、暗号化または復号化または整合性検証動作はハードウェアで提供されるメモリセキュリティ回路によって自動的に実行できるため、処理装置で実行するソフトウェアは、これらが実行されていることを認識する必要はない。したがって、ソフトウェアが保護メモリ領域にマッピングされたアドレスにデータを書き込むように命令すると、メモリセキュリティ回路はデータをメモリに書き込む前に暗号化し、メモリが攻撃者によって侵害されていないというカウンタ整合性ツリーに基づいて、対応するカウンタ整合性ツリーノードの生成および／または検証を制御できる。同様に、ソフトウェアによる保護メモリ領域の読み取りでは、メモリセキュリティハードウェアは、読み取りデータの復号化と、読み取りデータがまだ有効であることを検証するためのカウンタ整合性ツリーノードの確認を制御できる。
【００４２】
しかしながら、他の例では、暗号化／復号化、保存済み認証コードおよびカウンタ整合性ツリーの生成、ならびに保存済み認証コードおよびカウンタ整合性ツリーに基づく整合性検証動作は装置内の汎用処理回路で実行されるソフトウェアによって行われる場合があり、この装置は、このようなメモリセキュリティ動作を自動的に実行するためのハードウェアを備えていない。例えば、ソフトウェアは、オペレーティングシステムやハイパーバイザーなどのプラットフォームレベルのコードであり得、その制御下で実行される他のアプリケーションをサポートする場合がある。例えば、仮想マシンまたはシミュレータプログラムは、ハードウェアが実際にメモリセキュリティ回路を備えているかのようにアプリケーションコードを実行することができるが、保護メモリ領域にマッピングされたアドレスへのメモリアクセスを検出し、そのようなアクセスに対して、保護メモリ領域に実際にデータが書き込まれる前に、データのさらなる暗号化または復号化、あるいはカウンタ整合性ツリーを維持し保存済み認証コードとカウンタ整合性ツリーに基づいてデータの整合性を検証するための動作を実行することができる。したがって、いくつかの例では、この技術は、データ処理装置を制御して上記方法を提供するためのコンピュータプログラムを保存する記憶媒体を提供し得る。コンピュータプログラムは、ネットワーク経由でダウンロードするなど、非一時的な形式で記録することもできる。
【００４３】
図１は、プログラム命令を実行してデータ処理動作を実行するための少なくとも１つのプロセッサコア６を含む集積回路またはシステムオンチップ４を含むデータ処理システム２の例を概略的に示す。図１は１つのプロセッサコアのみを示しているが、場合によってはシステムオンチップ４は複数のプロセッサを備えている場合がある。各プロセッサコアまたはプロセッサコアクラスタにはキャッシュ８（または複数レベルのキャッシュ８、１０）があり得る。メモリコントローラ１２は、システムオンチップ４とは別個の集積回路上にあるオフチップメモリ１４へのアクセスを制御するためのメモリアクセス回路として機能する。オンチップのデータへのアクセスは攻撃者によって改ざんが困難であり得るが、システムオンチップのエッジは信頼境界として機能し、その境界を超える任意のデータは、メモリコントローラ１２とオフチップメモリ１４との間で物理チャネル１６上のデータを傍受することにより、またはデータがオフチップメモリ１４に保存されている間にデータを読み取りまたは変更することにより、攻撃に対して脆弱になり得る。図１は、信頼境界がシステムオンチップのエッジに対応する例を示しているが、他の場合にはシステムオンチップ内に信頼境界があり得、信頼境界を超えたデータは潜在的な攻撃にさらされる可能性がある。
【００４４】
システムオンチップ４は、システムに物理的にアクセスし、かつマイクロプロセッサとオフチップシステムメモリ１４との間で交換されているデータまたはコードを監視および／またはリプレイする能力を有する悪意のある敵からオフチップメモリ１４の保護メモリ領域２２に保存されたデータを保護するために提供されるメモリセキュリティユニット２０を含み得る。保護メモリ領域２２は、保護されるデータ２４と、データ２４の検証に使用される整合性ツリーメタデータ２６とを含む。非保護メモリ領域２８もオフチップメモリ１４に設けられ、非保護領域に保存されたデータ３０はメモリセキュリティユニット２０によって保護されず、攻撃者によって自由にアクセスおよび改変される。いくつかの実装では、保護メモリ領域２２および非保護メモリ領域２８へのアドレスのマッピングはハードウェアによって固定されることがあるため、オペレーティングシステム、またはプロセッサコア６によって実行される他のソフトウェアは、保護メモリ領域２２または非保護メモリ領域２８にどのアドレスをマッピングするかを変更できない。あるいは、アドレスマッピングを制御するオペレーティングシステムが信頼できる場合、保護領域または非保護領域にマッピングされるアドレスを制御するアドレスマッピングは、ソフトウェアの制御下でプロセッサによって変更され得るため、保護領域と非保護領域はオフチップメモリ１４の同じ物理的場所に常にマッピングする必要はない。実装によっては、オフチップメモリ１４に非保護メモリ領域２８がない場合があり、この場合には、オフチップメモリ全体を保護メモリ領域２２と見なすことができる。
【００４５】
メモリセキュリティユニット２０は、オフチップメモリ１４に書き込まれるデータを暗号化し、かつオフチップメモリから読み戻されたデータを復号化するための暗号化／復号化回路３２を含む。これにより、オフチップメモリ１４から読み取られるデータまたはオフチップメモリ１４に保存されるデータを悪意のある観察者が平文で見ることを防ぐことによってプライバシーを提供する。暗号化および復号化で使用される暗号鍵は、システムオンチップ上のオンチップメモリ（例えばＳＲＡＭ）３４内またはメモリセキュリティユニット２０自体内に保存することができる。暗号化と復号化には任意の既知の技術を使用してもよく、暗号鍵を保護するために任意の既知の手法が使用できる。
【００４６】
メモリセキュリティユニット２０は、以下で一般に検証回路３６と呼ばれる整合性ツリー生成および検証回路３６も含む。検証回路３６は、保護メモリ領域に整合性ツリー２６を維持する役割を担う。整合性ツリーは、保護領域２２に現在保存されているデータが、その領域に書き込まれたときと同じであるかどうかを検証するためのいくつかの情報を提供することができる。データの整合性確認は、例えば、ＡＥＳ−ＧＣＭやＳＨＡ−２５６などの一方向暗号化関数を用いて保存されたデータから生成され得るメッセージ認証コード（ＭＡＣ）を用いて実現でき、これは、認証コードの生成に使用された秘密鍵が不明な場合に、攻撃者が総当たりによって特定のデータ値に関連付けられた認証コードを推測することが計算的に実行不可能になる関数を使用する。認証コードは、保護メモリ領域２２内のデータ２４と一緒に、または別のデータ構造に保存できる。あるデータ値について保存されたＭＡＣを、保存されたＭＡＣの生成に使用した同じ一方向関数を使用して、保存されたデータから導出される計算されたＭＡＣに対して確認し、保存されたＭＡＣと計算されたＭＡＣの間に不一致が検出された場合、これはデータが改ざんされていることを示し得る。
【００４７】
ただし、全ての攻撃を防ぐには、ＭＡＣを提供するだけでは不十分な場合がある。別のタイプの攻撃は、システムに物理的にアクセスする悪意のある人物が、バス上で以前に観測された暗号化データとＭＡＣの合法的な組み合わせを保存し、システムの動作を侵害するために古くなった値で所与のメモリ位置のデータを破壊する目的で後にバスでこれらをリプレイするリプレイ攻撃であり得る。そのようなリプレイ攻撃は整合性ツリー２６を使用して防止することができ、整合性ツリー２６は、ツリーの各リーフノードが整合性データを提供して保護メモリ領域２２のデータブロック２４の１つが有効であることを検証し、リーフノードの親ノードがさらなる整合性データを提供してリーフノード自体が有効であることを確認する、ノードのツリー構造を提供する。ツリーのさらなる親ノードを使用して、親ノード自体を確認してもよく、これはツリーをツリーのルートまでトラバースしながら続行され、その後最終的な検証のソースを提供することができる。オンチップメモリ３４に保存されたルート検証データ３８は、ツリー自体のルートノードをオンチップに保存することにより、または保護メモリ領域に保存されたルートノードの認証を可能にする他の情報を保存することにより、ツリーのルートが真正であることを検証するために使用され得る。
【００４８】
メモリセキュリティユニット２０は、特定のデータブロックを確認するのに必要な整合性ツリー２６のノードが保護メモリ領域２２に位置するアドレスを計算するためのアドレス計算回路４０を有してもよい。オプションで、メモリセキュリティユニット２０はまた、オフチップメモリ１４から再度読み取らなければならない場合よりも高速なアクセスのために、整合性ツリーの最近使用されたノードをキャッシュするキャッシュ４２を有してもよい。代替として、メモリセキュリティユニット２０は、プロセッサコア６によっても使用できるキャッシュ１０の１つにアクセスすることができ、したがって、共有キャッシュ１０内の整合性ツリー２６からデータをキャッシュすることもメモリセキュリティユニット２０の動作を高速化するのに役立ち得る。
【００４９】
整合性ツリーを実装できる方法はいくつかある。図２は、比較のために、整合性ツリー２６を各データブロックのハッシュ（ＭＡＣ）から構築されたハッシュツリーとして実装する第１の例を示す。図２に示すように、各データブロック５０は、データブロック５０の内容にＭＡＣハッシュ関数５４を適用することにより計算された対応するＭＡＣ５２を有する。ＭＡＣハッシュ関数５４は、攻撃者にとって秘密鍵を推測することがより困難になるように新鮮さ（ＭＡＣがデータおよび秘密鍵から導出される方法の変化）を提供するために、データブロックの更新ごとに更新されるカウンタ５６にも依存する。この手法では、各ＭＡＣ生成に使用されるカウンタ５６は、別個のデータ構造でハッシュツリー２６とは別個に保存されてもよい。カウンタを保存するために使用されるデータブロックは、それ自体がＭＡＣを使用して保護されたデータブロック５０の一部であってもよい。あるいは、対応するデータブロックのＭＡＣ認証の失敗が生じるためカウンタの改ざんが依然として検出できるため、カウンタは非保護メモリ領域２８に保存され得る。
【００５０】
データブロックの所定のグループについて計算された全てのＭＡＣ５２は、整合性ツリー２６のリーフノード６０内に集められ、リーフノードは、アドレス空間の所定の範囲をカバーするＭＡＣを指定する。次いで、ツリーのリーフノード６０の整合性は、リーフノード６０の内容に基づいてさらなるＭＡＣ６２およびさらなるカウンタ６４を計算して、整合性ツリー２６の非リーフノード６６内の他のリーフノード６０からのＭＡＣと共にそれ自体が保存される別のＭＡＣを生成することによって保護できる。この非リーフノード６６は、ＭＡＣが非リーフノード６６に保存されている各リードノード６０の親ノードとして機能する。したがって、各親ノードは、各子ノードに保存された全てのＭＡＣがカバーする合計メモリと同じサイズのメモリブロックを保護するためにＭＡＣを保存する。例えば、図２の場合、ツリーは８進ハッシュツリーであるため、各親ノードは８つの子ノードを有し、その子の１つがカバーするメモリ領域のサイズの８倍のメモリ領域をカバーする。同様に、各非リーフノードについて、同じＭＡＣ計算関数を非リーフノードに適用するが、その非リーフノードに固有の別のカウンタを使用して、さらなるＭＡＣを計算する。単一のＭＡＣで保護された親ノードに子ノードのＭＡＣを合わせてグループ化し続けることにより、最終的に保護メモリ領域２２全体をルートノード６６−Ｒに縮小することができ、ルートノード６６−Ｒは、保護メモリ領域２２全体を共にカバーするいくつかの子ノードのＭＡＣを保存する。必要なツリーのレベル数は、保護メモリ領域のサイズに依存し得る。ルートノード６６−Ｒの信頼性は、ルート検証データ３８としてオンチップメモリ３４にルートノード自体を保存するか、図２に示すようにルートノードのＭＡＣをさらに計算して、オンチップメモリ３４にルート検証データ３８としてそのＭＡＣ６８を保存することで確認できる。
【００５１】
したがって、データ値にアクセスしなければならない場合、対応するデータブロック５０には、そのＭＡＣを生成するために使用されたのと同じＭＡＣ関数５４が適用され、結果はツリーの対応するリーフノード６０に保存されているＭＡＣと比較され、次に、ルートノードに到達しルートノードも検証されるまで、親ノードから取得したＭＡＣに基づいて検証される連続する各子ノードでツリーがトラバースされる。ターゲットデータブロック５０からルートノードに戻るブランチ上の各ノードの検証が全て成功した場合、データアクセスが許可される。各カウンタ５６は、対応するデータブロックが更新される（書き込まれる）ときに増分され、その結果、データブロックとそのＭＡＣとの間のマッピングは時間と共に変化する。
【００５２】
図２に示す手法の問題は、特定のデータ値が与えられているが秘密鍵の知識がない場合に、攻撃者が対応するＭＡＣを推測したり総当たりで解読したりできることが計算的に実行不可能である十分なセキュリティを提供するために、各ＭＡＣが、例えば６４ビットなど、かなり大きな数のビットを必要とし得ることである。これにより、１つのキャッシュラインに収まるＭＡＣの数が制限される場合がある。例えば、キャッシュラインサイズが５１２ビットの場合、８つの６４ビットＭＡＣが各キャッシュラインに収まるため、ツリーの各ノードは８つの子ノードを持つように制限される。８進ハッシュツリーを使用すると、保護メモリ領域のサイズが大きくなるにつれて、リーフノードからルートまでトラバースする必要があるツリーのレベル数が比較的大きくなり得る。単一のデータブロック５０が改ざんされていないことを検証するためにアクセスする必要のある各キャッシュラインは、オフチップメモリ１４とメモリコントローラ１２との間に余分なメモリトラフィックを追加するため、パフォーマンスに影響を与える可能性がある。同様に、オフチップメモリ内でデータが更新された後、リーフノードでカウンタが増分されると、そのメモリブロックに対応する上位ノードで全てのＭＡＣを更新する必要があり得、これは、１つのノードに関連付けられたカウンタを増分するたびに、親ノードの対応するＭＡＣを再計算および更新する必要があり得、次に、そのノードに関連付けられたカウンタの増分がトリガされる可能性があり、したがって上位から２番目の親ノードに保存されているＭＡＣの再計算が必要になり、カウンタへのさらなる増分がトリガされ、ルートに到達するまで同様に続くためである。ツリーのアリティが低いほど、所与のサイズのメモリ領域を保護するためにトラバースする必要があるレベル数が大きくなるため、パフォーマンスへの影響が大きくなる。
【００５３】
図３は、ハッシュツリーの代わりにカウンタツリーを使用して整合性ツリー２６を実装する代替法を示す。この場合、各ノードは、ツリーの次のノードでブロックを認証するために使用される全てのＭＡＣを提供するツリーの所与のノードではなく、代わりにツリーの現在のノードの各子ノードに個別のカウンタを定義する。整合性ツリー２６自体の一部ではない保護メモリ領域２２の各データブロック５０は、ＭＡＣ８０によって保護され、ＭＡＣ８０は、データブロック５０の内容と、カウンタ整合性ツリー２６のリーフノード８４から読み取られるカウンタ８２とに基づいて計算される。リーフノード８４は、異なるデータブロック５０に各々対応するいくつかのカウンタを指定してもよい。この例では、所与のデータブロック５０に対して計算されたＭＡＣ８０は、対応するデータと同じキャッシュライン内に保存される。これは必須ではなく、他の例では、ＭＡＣは対応するデータとは別に保存され得る。ツリーの各リーフノード８４について、リーフノード８４の内容と、リーフノード８４の親ノードとして機能する非リーフノード８８から読み取られたカウンタ８６とに基づいて、同様のＭＡＣ８０が計算される。各非リーフノード８８は、複数の子ノード８４に使用されるカウンタを提供する。同様に、ツリーの各レベルで、所与の子ノードのＭＡＣ８０を計算するために使用されるカウンタ８６は、その子ノードの親ノードに対応するデータブロック８８からルートノード８８‐Ｒまで読み取られる。メモリセキュリティユニット２０のアドレス計算回路４０は、対象となる所与のターゲットデータブロックについて、関連するカウンタを提供する整合性ツリー２６の必要なノードを他のどのデータブロックが保存するかを識別する。最終的に、ルートノード８８−Ｒに到達し、ルートノードのＭＡＣ８０がルートノードの内容とルートカウンタ８９の関数として計算される。ルートカウンタ８９は、ルート検証データ３８としてオンチップメモリ３４に保存され得る。あるいは、ツリーのルートノード８８−Ｒ全体をオンチップメモリのルート検証データに保存してもよく、この場合、このルートノードのＭＡＣをさらに計算する必要はない。
【００５４】
要約すると、図３に示すカウンタツリーでは、ツリーの各レベルで、ツリーの親ノードから読み取られたカウンタを使用して計算される同じキャッシュラインに保存されたＭＡＣを使用して、カウンタキャッシュラインの整合性が確保される。
【００５５】
各カウンタは、対応するデータブロックが書き込まれるたびに増分または更新される。例えば、非整合性ツリーデータを提供するデータブロック５０が更新されると、ツリーのリーフノード８４の１つで対応するカウンタが増分される。次に、これはリーフノード８４に関連付けられたＭＡＣ８０の再計算を必要とし、それがツリーの上位から２番目の親ノード８８内のカウンタの増分をトリガし、同様にしてルートまでさかのぼる。
【００５６】
カウンタの１つがオーバーフローした場合、例えばカウンタの最も正の値から最も負の値またはゼロにラップアラウンドすると、以前のカウンタ値の１つが繰り返される可能性があるため、リプレイ攻撃が可能になるリスクがある。この場合、メモリセキュリティユニット２０は暗号化回路３２で使用される暗号鍵を更新することができるため、これはまた、平文で見られる特定のデータ値と、暗号化されたデータ値およびカウンタに基づいて生成されたＭＡＣとの間の異なるマッピングを強制する。しかしながら、そのように暗号鍵が変更されると、保護メモリ領域２２の全てのデータを古い鍵を使用して復号化し、新しい鍵を使用して再暗号化してからメモリに書き戻す必要があるため、暗号鍵の更新は高価になる可能性がある。これは、大量の読み取りと書き込みを必要とする可能性があるため、パフォーマンスの点で高価な動作になり得る。保護メモリ領域２２のそのような完全な再暗号化が必要とされる頻度を減らすために、そのようなオーバーフローを稀にするのに十分なビット数を有するカウンタを各データブロックに提供することが望ましい。例えば、図３に示す手法では、各５１２ビットキャッシュラインにはＭＡＣに使用される６４ビットがあり、これにより、各々５６ビットの８つのカウンタに分割できるカウンタに４４８ビットが残る。各カウンタのサイズを小さくすると、１つのキャッシュラインに収まるカウンタを増やすことができるが、これにより、パフォーマンスに影響を与える可能性のあるオーバーフローが頻繁に発生する。したがって、図３に示す手法は、ツリーのアリティ（図３の例では８のアリティ）を制限する傾向もあり、ツリーがファンアウトできる速度を制限し、ツリー全体で所定のサイズの保護メモリ領域２２をカバーするためにトラバースする必要があるレベル数を増やす。
【００５７】
図４は、図２および図３に示される例と比較してパフォーマンスを改善するためにメモリセキュリティユニット２０で使用され得る分割カウンタ整合性ツリー２６を示す。カウンタツリーは、図３のようにリーフノード８４と非リーフノード８８の同様の配置を有し、各親（非リーフ）ノード８８は、その子ノードの各々に対してＭＡＣ８０を計算するためのカウンタを提供し、リーフノード８４は、他の非整合性ツリー関連データブロック５０のＭＡＣを計算するためのカウンタ８２を提供する。ただし、図４では、ツリーの少なくともいくつかのノードが分割カウンタの手法を使用しており、ツリーのそのノードのカウンタは、メジャーカウント値９５と多数のマイナーカウント値９７を使用して分割形式で表されている。各マイナーカウント値９７は、ツリーのそのノードがカバーするデータブロックの１つに対応する。所与のデータブロックの実際のカウンタは、メジャーカウント値９５（そのノードがカバーする全てのブロック間で共有される）とそのデータブロックに指定された特定のマイナーカウント値９７との組み合わせによって定義される。例えば、ブロック０のカウンタは、ブロック０用に選択された特定のマイナーカウント値と連結されたメジャーカウント値に対応でき、ブロック１のカウンタは、ブロック１用に選択された特定のマイナーカウント値と連結された共有メジャーカウント値に対応でき、以下同様である。したがって、ＭＡＣ８０が所与のデータブロックについて計算されるとき、ＭＡＣ関数５４は、親ノードからの共有メジャーカウンタ９５および特定のデータブロックのために選択されたマイナーカウンタ９７の１つと共にデータブロックの内容に適用される。各マイナーカウンタ９７は、対応するデータブロックの更新ごとに増分される。共有メジャーカウンタ９５は、対応するマイナーカウンタ９７のセットのいずれかがオーバーフローすると増分される。
【００５８】
この分割カウンタの手法を使用することにより、各データブロックに提供されるカウンタの全体的なサイズは比較的大きくなるが、各データブロックに個別のカウンタが存在するため、攻撃者は所与のデータブロックに適用されるカウンタ値を推測しにくくなる。例えば、６４ビットＭＡＣを使用する５１２ビットキャッシュラインには、６４ビットメジャーカウンタと３２の１２ビットマイナーカウンタを備え、各データブロックに７６ビットカウンタを効果的に提供することができる。したがって、メジャーカウンタと十分に大きい１つのマイナーカウンタの合計ビット数を提供することで、保護メモリ領域全体の再暗号化を必要とするカウンタオーバーフローの可能性を減らすことができる。
【００５９】
しかしながら、１つの親ノードがカバーできる子ノードの数はマイナーカウンタの数に依存し、図４に示す手法のマイナーカウンタは図３に示すモノリシックカウンタよりも小さいため、これは、キャッシュラインの任意の所与のサイズに対して親ノードごとに多数の子ノードを許可するように、ツリーのアリティを大幅に増やせることを意味する。図４の例では、ツリーの分割カウンタノードのアリティは３２である。これは、ツリーのファンアウトがはるかに大きいため、所定量のメモリをカバーするために必要なレベルが少ないことを意味する。図４のリーフノード８４が示すように、ツリーの全てのノードが分割カウンタの手法を使用することは必須ではなく、例えば、一部は図３に示すモノリシックの手法をなおも使用できるため、異なるアリティ（例えば図４の例では８）を有し得る。これは、保護メモリ領域全体のサイズが、分割カウンタノードで使用されるアリティの正確な累乗に対応するブロック数にマッピングされない場合に役立ち、この場合アリティの低いノードが必要になることがある。
【００６０】
図５に示すように、アリティは各分割カウンタノードで同じである必要はない。実際、ツリーがルートノードに向かって上にトラバースされるにつれてアリティを減らすことは有用である。これは、ツリーがルートノードに向かって上昇するにつれて書き込みトラフィックが指数関数的に増加するため、カウンタがオーバーフローする可能性が高くなるためである。ツリーの上位レベル（ルートに近い）を、下位レベル（リーフに近い）よりも低いアリティで実装することにより、全体的なパフォーマンスを向上させることができる。例えば、図５は、４８個の８ビットマイナーカウンタを備える４８進ノード１００、３６個の１０ビットマイナーカウンタを備える３６進の親ノード１０２、および３２個の１２ビットマイナーカウンタを有する３２進の祖父母ノード１０４を示す。ツリーを上るマイナーカウンタのサイズを大きくすることで、カウンタオーバーフローのためにメモリの大きな領域でＭＡＣを再計算しなければならない回数を減らすことができる。もちろん、図５に示すメジャーカウンタ、マイナーカウンタ、およびＭＡＣの特定のサイズは単なる一例であり、これらのサイズは利用可能なキャッシュラインサイズと特定のシステムの要件に応じて変更できる。
【００６１】
図５に示すように、ツリーのノードのいくつかは、例えば図５に示す３６進または４８進ノードなど、正確な２の累乗ではないアリティを有する場合がある。これは例えばアドレスビットのサブセットに基づいてインデックスを作成する代わりにルックアップテーブルを使用するなど、より複雑なアドレス計算回路４０が必要となる可能性があるが、２の累乗ではないアリティを使用することは、オーバーフローの可能性と各読み取り／書き込みでトラバースする必要があるツリーレベルの数とのバランスが向上するために有用であり得、これにより、より複雑なアドレス生成にもかかわらず、全体的なパフォーマンスが向上する。
【００６２】
図４および図５の例では、ツリーの各分割カウンタノードは、そのノードの全ての子ノードの全てのマイナーカウンタで共有される単一のメジャーカウンタ９５を指定する。ただし、図６に示すようにこれは必須ではなく、場合によってはツリーの所与のノードは、マイナーカウンタ９７の一部に各々対応する複数のメジャーカウンタ９５を指定できる。ノードごとに追加のメジャーカウンタを指定すると、キャッシュラインの所与のサイズで提供できるマイナーカウンタ数を減らすことができるが、場合によってはメジャーカウンタが増分されるときにＭＡＣを再計算しなければならない同じメジャーカウンタを共有するデータブロック数が少なくなるため、マイナーカウンタがオーバーフローするときのオーバーヘッドを減らすためにこれが望ましい場合がある。
【００６３】
図４と図５の例では、データブロックに関連付けられたＭＡＣ８０をデータ自体と同じキャッシュラインに保存しているが、図７に示すようにこれは必須ではなく、他の実装では、ＭＡＣによって保護されているデータブロックまたは整合性ツリーノードを提供するキャッシュライン１１２から別のキャッシュラインにＭＡＣ８０を保存できる。例えば、ＭＡＣ８０は、ＥＣＣを保存するための専用領域を有するメモリチップのエラー訂正コード（ＥＣＣ）領域に保存できる。
【００６４】
図８は、オフチップメモリ１４からデータを読み取ることを要求するための読み取りアクセスを処理する方法を示す流れ図である。読み取りアクセスは、例えば、プロセッサコア６によって実行されるロード命令、またはキャッシュコントローラによって開始されるキャッシュプリフェッチ要求などによってトリガされ得る。ステップ２００で、メモリコントローラ１２が読み取りアクセス要求を受信する。ステップ２０２で、メモリコントローラは、読み取りアクセス要求のアドレスによって指定されたターゲットデータブロックが保護メモリ領域２２にマッピングされているかどうかを判定する。ターゲットアドレスが非保護メモリ領域２８にマッピングされている場合、ステップ２０４で、読み取りアクセスは整合性ツリー２６とは無関係に整合性検証なしで進められ、いずれの復号化も実行せずにデータを読み取る。オフチップメモリから読み取られたデータは、プロセッサコアおよび／またはキャッシュに返される。
【００６５】
ターゲットアドレスが保護メモリ領域２２のデータブロックにマッピングされている場合、ステップ２０６で、検証回路３６は、ツリーがツリー２６のルートノードまでトラバースされるにつれて、ターゲットデータブロックおよびターゲットデータブロックと同じブランチにあるカウンタ整合性ツリーの１つ以上の祖先ノードから読み取られたデータに対して整合性検証を実行する。関連する整合性ツリーブランチ上の各データブロックについて、整合性ツリー検証回路３６は、関連データブロックに保存されたデータの関数である計算されたＭＡＣと、ツリーの親ノードによって指定されたその対応するカウンタを計算する。親ノードが分割カウンタノードである場合、そのカウンタは、共有メジャーカウンタと、その親ノードがカバーするメモリブロック内の関連データブロックの位置に応じて親ノードから選択される選択マイナーカウンタとの組み合わせによって定義される。計算されたＭＡＣを確認されているデータブロックの保存済みＭＡＣと比較し、ステップ２０８で、ターゲットブロックとカウンタ整合性ツリーの１つ以上の祖先ノードの各々について保存済みＭＡＣと計算されたＭＡＣが一致するかどうかを判定する。ステップ２０６で試験したデータブロックのいずれかの保存済みＭＡＣと計算されたＭＡＣの間に不一致がある場合、ステップ２１０で、セキュリティ違反応答をトリガし、例えば、セキュリティ違反を処理するオペレーティングシステムにトラップする、オフチップメモリ１４へのアクセスを不能にする、またはメモリへの継続的なアクセスを防ぐために電気接続を介した溶断などの物理的な対策を講じる。試験したブロックのいずれにも不一致が検出されない場合には、ステップ２１２でデータアクセスが許可されるため、元のターゲットデータブロックから読み取られたデータは暗号化／復号化回路３２によって復号化され、復号化された形式で返されてプロセッサまたはキャッシュの１つで使用される。
【００６６】
したがって、ステップ２０６での検証は、整合性ツリーの各ステップを確認するために、保護メモリ領域内の異なるデータブロックの一連の検証を必要とする場合がある。このような検証に必要な読み取りは任意の順序でトリガでき、同様に、各読み取りデータブロックの予想されるＭＡＣを計算し、保存済みＭＡＣと比較するための対応する検証計算を任意の順序で行うことができる。一部の実施形態では、元のターゲットデータブロックの読み取りが別のデータブロックの読み取りをトリガして、そのターゲットデータブロックのターゲットカウンタを取得でき、この読み取り自体がさらに読み取りをトリガすることがあり、実際にはターゲットデータブロックから順番に読み取りが発生し、ルートノードまでツリーの各上位レベルに対してさらなる読み取りを連続してトリガするが、これは必須ではない。読み取りアクセス要求によって指定されたターゲットデータブロックを識別する読み取りターゲットアドレスが提示される他の例では、アドレス計算回路４０は、ターゲットデータブロックの整合性検証に必要な整合性ツリーの各ノードのアドレスに読み取りターゲットアドレスをマッピングすることができるため、いくつかの並行読み取りを発行したり、ツリーノード祖先のシーケンスとは異なる順序でツリーの読み取りの一部をトリガしたりすることができる。したがって、読み取りアクセスでは、ツリー内の必要な検証の各々が実行される順序は重要ではない。
【００６７】
図９は、メモリコントローラ１２およびメモリセキュリティユニット２０によるオフチップメモリ１４への書き込みアクセスを制御する方法を示すフロー図を示す。ステップ２５０で、メモリコントローラ１２は、オフチップメモリ１４にマッピングされたアドレスを指定する書き込みアクセスを検出する。書き込みアクセスは、例えば、プロセッサコア６によって実行される保存命令、またはキャッシュコントローラによってトリガされるキャッシュライトバックによってトリガされ得る。ステップ２５２で、メモリコントローラは、書き込みアクセス要求によって指定されたアドレスが保護メモリ領域２２にあるターゲットデータブロックを識別するかどうかを判定する。識別しない場合、メモリセキュリティユニット２０によって提供される保護はここでも必要ないため、ステップ２５４で、暗号化が適用されずいかなる整合性検証も実行されることなく、書き込みデータをターゲットデータブロックに書き込む。また、整合性ツリー２６への修正は不要である。
【００６８】
ステップ２５２で、ターゲットデータブロックが保護領域２２にあることが判明した場合、ステップ２６２で、整合性ツリー生成回路３６は、書き込みアクセス要求による書き込みアクセスを受けるターゲットデータブロックに関連付けられたカウンタが、整合性ツリー２６の分割カウンタノードによって定義されるかどうかを判定する。定義されない場合、ステップ２６４で、ターゲットブロックに関連付けられたモノリシックカウンタを増分する。増分は、カウンタの現在の値に１を追加することに対応できるか、または各カウンタが取得する既知のシーケンスで現在の値から次の値にカウント値を切り替えることに対応できる。ステップ２６６で、整合性ツリー生成回路３６により、カウンタの増分がオーバーフローを引き起こしたかどうかを判定し、オーバーフローでカウンタは以前に使用された値に折り返す。オーバーフローが発生した場合、これは、保護メモリ領域２２全体のグローバル暗号化またはＭＡＣ計算に影響するパラメータが最後に更新されてから、ターゲットブロックに提供できる全ての可能なカウント値が使用されたことを意味する。したがって、ステップ２６８で、保護メモリ領域２２の全てのデータブロックに使用されるグローバル暗号鍵またはＭＡＣ生成オペランドを更新する。暗号鍵が更新されるため、これは、保護メモリ領域２２の全てのデータを読み取り、暗号化／復号化ロジック３２で復号化してから、新しい鍵で再暗号化し、保護メモリ領域２２に書き戻す必要があることを意味する。鍵は同じままであるがカウンタ以外のＭＡＣ生成オペランドが更新された場合、この再暗号化は不要である。再暗号化が実行されるかどうかに関係なく、ＭＡＣの生成に使用される関数が変更されるか、ＭＡＣの計算に使用される暗号化データが変更されるため、カウンタ整合性ツリーとＭＡＣを保護メモリ領域全体について再計算しなければならない。したがって、ステップ２６８の動作はパフォーマンスの点で比較的高価であるが、ビット数が十分なカウンタではこれらのイベントは稀である。
【００６９】
ステップ２６６でオーバーフローが発生しなかった場合、保護領域全体のＭＡＣおよびカウンタを再計算する必要はない。代わりに、ステップ２７０で、ターゲットデータブロックに対応するＭＡＣを、書き込みデータアクセスで指定された書き込みデータの新しい暗号化バージョンと、ステップ２６４で得られた増分されたモノリシックカウンタとに基づいて再計算し、再計算されたＭＡＣは、保護領域２２に、例えばデータ自体と同じキャッシュラインに保存される。ステップ２６４でカウンタが更新されたため、更新されたカウント値をツリーの上位レベルにあるリーフノードまたは親ノードに書き込む必要があるため、ステップ２７２で、その上位ノードのアドレスを指定するとともに書き込まれるカウンタの更新された値を指定するさらなる書き込みアクセスをトリガする。したがって、これは、そのさらなる書き込みアクセスのために図９の方法を実行するさらなるインスタンスをトリガする可能性がある。
【００７０】
一方、ステップ２６２で、元の書き込みアクセスで指定されたターゲットデータブロックのカウンタが、整合性ツリーの分割カウンタノードで定義されると判定された場合、方法はステップ２７４に進む。ステップ２７４で、整合性ツリー生成回路３６は、ターゲットデータブロックに対応して選択されたマイナーカウンタを増分する。これは、元の書き込み要求によって書き込まれているターゲットブロック専用の特定のマイナーカウンタである。ステップ２７６で、この増分によりマイナーカウンタがオーバーフローしたかどうかを判定する。オーバーフローしなかった場合、ステップ２７８で、元の書き込み要求の暗号化された書き込みデータ、ターゲットブロックと同じメジャーカウンタを使用する他の全てのブロックとの間で共有される共有メジャーカウンタ、およびステップ２７４で選択された特定のマイナーカウンタの増分バージョンに基づいて、ターゲットデータブロックのＭＡＣを再計算し、結果のＭＡＣは、暗号化された書き込みデータに関連してメモリに保存される。
【００７１】
ステップ２７６でマイナーカウンタのオーバーフローが発生する場合、ステップ２８０で、ターゲットブロックの親ノードの共有メジャーカウンタを増分する。ステップ２８２で、メジャーカウンタがオーバーフローしたかどうかを判定する。オーバーフローしなかった場合、ステップ２８４で、ターゲットデータブロックとメジャーカウンタを共有する他の各ブロックについてＭＡＣを再計算し、再計算されたＭＡＣはそれらのブロックの各々についてメモリに保存される。他のブロックの各ＭＡＣは、それらのブロックに保存されている現在のデータ（ＭＡＣを再計算するためにメモリから読み取られる）、およびそれらの他の各ブロックの増分メジャーカウンタならびに特定のマイナーカウンタに基づいて計算される。すなわち、他の各ブロックは、マイナーカウンタの異なる１つであるが同じ増分メジャーカウンタを使用する。オーバーフローしたマイナーカウンタを有するノードが整合性ツリーのリーフノードである場合、ＭＡＣが再計算された他の各ブロックに関連付けられたデータは、ＭＡＣを再計算する前に新しいカウンタで再暗号化される。親ノードが非リーフノードである場合、他のブロックのデータを再暗号化する必要はない。ステップ２８４の後、ステップ２７８を上記と同じ方法で実行し、ターゲットブロックの新しい暗号化された書き込みデータ、増分された共有メジャーカウンタ、およびターゲットブロックに固有の増分されたマイナーカウンタに基づいてターゲットブロックのＭＡＣを再計算する。ステップ２８４が実行されたかどうかに関係なく、ステップ２７８に続いて、方法は再びステップ２７２に進み、さらなる書き込みアクセス要求をトリガして、ステップ２７４またはステップ２８０から生じる増分されたカウンタを更新する。一方、ステップ２８２でメジャーカウンタがオーバーフローした場合、状況はステップ２６６と同様であるため、再びステップ２６８でグローバル更新動作を実行して、暗号鍵またはＭＡＣ生成オペランドを更新し、その後、保護メモリ領域２２の再暗号化を必要に応じて実行し、新しく更新されたパラメータについて整合性ツリー２６を完全に再計算する。図９の方法は、ルートノードのＭＡＣが更新され、ルートノードカウンタ８９が増分されると終了する。
【００７２】
図９では、理解を容易にするために、ステップ２７０／２７８／２８４および２７２のそれぞれで再計算されたＭＡＣと増分されたカウンタをメモリに書き込む個別の書き込みを示しているが、所与の親ノードのＭＡＣがその親ノードの子ノードに関連付けられたカウンタと同じキャッシュラインに保存される実施形態では、ＭＡＣおよびカウンタの更新は、単一のキャッシュラインに必要な全ての更新が準備されるまでメモリセキュリティユニット２０内にバッファリングされるため、更新されたキャッシュラインをオフチップに書き込むためには単一の書き込み要求のみが必要である。同様に、異なる非整合性ツリーのターゲットデータブロック５０への複数の書き込み要求が並行して実行されている場合、異なるターゲットデータブロック５０のカウンタ更新の一部では、同じ整合性ツリーノード内の異なるカウンタを更新する必要があり得るため、メモリシステムユニット２０内のカウンタ更新をバッファリングすることにより、１つのキャッシュラインにおけるそのような複数のカウンタ更新をオフチップメモリ１４への単一の書き込みトランザクションで実行することが可能になる。したがって、カウンタおよびＭＡＣ更新を実行するためにオフチップメモリ１４に対してトランザクションが開始される正確な方法は、実装ごとに異なり得ることが理解されよう。
【００７３】
所与のノードのマイナーカウンタ９７をできるだけ小さくすることが望ましい場合があり、これにより、メモリの同じ領域を保護するためのカウンタツリーのレベル数を減らすことが可能になり、ツリートラバース中のメモリトラフィックを削減し、その後のパフォーマンスの改善につながる。さらに、カウンタキャッシュラインごとのマイナーカウンタの数が多いほど、キャッシュ可能性が向上し、ツリートラバース中にカウンタをフェッチするメモリアクセス数が減る（トラバースはキャッシュでヒットするまで続くため）。
【００７４】
一方、リーフノードでのマイナーカウンタのオーバーフローは、ＭＡＣ、ならびにオーバーフローのために増分されたメジャーカウンタを使用して暗号化および認証されるメモリ内の全てのキャッシュラインの再暗号化および再計算を意味する。整合性ツリー自体は非暗号化形式で保存される可能性があるため、非リーフノードでのマイナーカウンタのオーバーフローはＭＡＣ再計算のオーバーヘッドのみを引き起こす。しかしながら、親ノードのマイナーカウンタは、子ノードの任意のマイナーカウンタへの書き込み時に増分されるため、ツリーを上に行くにつれて書き込み数が増え、オーバーヘッドが増加する可能性がある。したがって、小さなマイナーカウンタが提供する小さなフットプリントと優れたキャッシュ可能性の特性は、再暗号化とＭＡＣ再計算のオーバーヘッドを管理できる場合にのみ、整合性保護のためにメモリトラフィックのオーバーヘッドを削減するのに有効である。所与のノードのマイナーカウンタサイズが固定されている場合、これらの競合する要求を調整することは困難である。
【００７５】
この目的のために、本発明者らはツリーのアリティに影響を与えずにマイナーカウンタのサイズを変更する機構を提案する。これを図１０〜図１３に例示する。メモリに頻繁に書き込まれる傾向があるキャッシュラインの場合、ツリーのアリティに影響を与えることなく、マイナーカウンタサイズが動的に増加する。高アリティのコンパクトツリーには、整合性保護のためのメモリアクセスが少ないというメリットがあり、頻繁に書き込まれるキャッシュラインだけの大きなマイナーカウンタは、再暗号化とＭＡＣ再計算のオーバーヘッドを確認するのに役立つ。この挙動を達成するために、カウンタキャッシュのカウンタキャッシュラインのＭＡＣから少数のビットを盗み、マイナーキャッシュのサイズを示すために使用する。これらのビットの最小値（００）は、最小のマイナーカウンタサイズ（図１０〜図１３の例では３ビット）を示すために使用できる。
【００７６】
図１０に示すように、メモリセキュリティユニット２０は、全てのカウンタが最小サイズ（例えば３ビット）のものであるメインカウンタツリー２６を構築することにより開始する。各ノードのマイナーカウンタのサイズは、サイズフィールド４０２で示され、このフィールドは、この例ではＭＡＣのサイズを６４ビットではなく６２ビットに減らすことによって２ビットが利用可能になる。別の方法は、サイズフィールド４０２のスペースを確保するために、ＭＡＣのサイズを縮小する代わりにメジャーカウンタのサイズを縮小することである。この時点で、マイナーカウンタサイズを増やす必要がある場合に追加のミラーノードを収容するミラーツリー４００はまだ存在しない可能性があり、ミラーツリー４００は、以下で説明するように必要に応じて割り当てることができる。あるいは、ミラーツリー４００用の空間は既にメモリに割り当てられていてもよいが、ミラーツリー４００はまだポピュレートされていなくてもよい。
【００７７】
メインカウンタツリー２６は上記実施形態と同じ方法で使用され、関連するＭＡＣを、データブロックの内容に基づいて計算されたＭＡＣ、ならびにそのデータブロックに関連付けられた親ノードから取得されたメジャーカウンタおよびマイナーカウンタと比較することにより、所与のデータブロックの整合性を検証する。ツリーを上にトラバースする各ノードの複数の整合性確認をルートまで実行して、各カウンタ自体が有効であることを確認できる。ルートノードの整合性を検証するためのルート検証情報８９は、上述のようにオンチップメモリに保存されてもよい。データブロックへの書き込み時に、関連するリーフノードカウンタが増分され、そのノードのＭＡＣが再計算される。
【００７８】
これは、メインツリーの所与のノード８８のマイナーカウンタのサイズを増やすことが有用であり得ることを示すサイズ増加トリガイベントが検出されるまで続く。様々なイベントをサイズ増加トリガイベントとして扱うことができる。例えば、サイズ増加トリガイベントは、所与のノードで検出されたマイナーカウンタのオーバーフローであり得る。また、サイズ増加トリガイベントは、所与のノードのマイナーカウンタのオーバーフローの閾値を超える比率、または何らかの他の条件を満たすオーバーフローの割合であり得る。また、一般に、所与のツリーノードで検出されたオーバーフロー、再暗号化またはＭＡＣ再計算の頻度またはパターンに関するメトリックを監視し、マイナーカウンタのサイズを増やすかどうかを決定するために使用できる。別の例では、サイズ増加トリガイベントは、保護領域の関連サブセットに関連付けられたメモリトラフィックのレベルが閾値よりも大きいことを検出することを含むことができ、保護領域の関連サブセットは、関連するサブセット内の任意のターゲットブロックの整合性検証が所与の分割カウンタノードに依存する保護領域の一部を含む。例えば、メモリセキュリティユニット２０は、保護領域の特定の部分に関連付けられたメモリトラフィックの量を監視することができる。ツリーの上位レベル（ルートに近い）のノードは、通常、カウンタがより多くのデータブロックの整合性確認に関与するため（ツリーをトラバースする各連続カウンタを検証するために必要なＭＡＣ計算のシーケンスに起因する）、下位レベルのノードに比べて保護領域のより大きな部分に関連付けられる。したがって、ツリーの所与のノードに依存して整合性が検証される部分へのトラフィックが大量にある場合、対応するノードのマイナーカウンタサイズは大きくなる可能性がある。例えば、メモリトラフィックの監視は、プロセッサコア６の最終レベルキャッシュ１０からオフチップメモリ１４への書き込み数の追跡に基づくか、独自の内部キャッシュ４２からオフチップメモリ１４へのメモリセキュリティユニット２０による書き込み数の追跡に基づくことがある。
【００７９】
したがって、一般に、メモリセキュリティユニット２０は、メインツリー２６の所与のノード内のマイナーカウンタが小さすぎることを示すサイズ増加トリガイベントを識別することができる。マイナーカウンタのサイズを大きくする必要があることが識別されると、メモリセキュリティユニット２０は、メインツリー２６に、等しいサイズの１つ以上のミラーサブツリー４００を割り当てる。メインツリーの識別されたノード内の全てのマイナーカウンタのマイナーカウンタサイズは、最小サイズの整数倍（図１１の６ビットなど）に増加し、そのノードのマイナーカウンタの小数ｆのみが元の場所（例えば、図１１のｆ＝０．５）に保存される。そのノードの残りのマイナーカウンタは、ミラーツリー４００の対応するノードに割り当てられ、ミラーツリー４００は、メインツリーのメインノードに使用されるオフセットと同じミラーツリー４００内のオフセットに位置する。メインノードのサイズフィールド４０２は更新されて、そのノードのマイナーカウンタのサブセットが実際にミラーツリー４００の対応するミラーノード４０４に保存されていることを示す。
【００８０】
図１１は、メインツリーのノードＮ１２７がより大きなマイナーカウンタを必要とする例を示す。したがって、マイナーカウンタは６ビットカウンタに増加し、これは、ノードＮ１２７の１２８個の子ノードＮ１２７＿０〜Ｎ１２７＿１２７に関連付けられた１２８個のマイナーカウンタのうち６４個を保存するための空間しかないことを意味する。したがって、ノードＮ１２７のフィールド４０２のサイズフィールド値０ｂ０１は、マイナーカウンタ０〜６３がそのノード自体に保存されているが、マイナーカウンタ６４〜１２７はミラーツリー４００の対応するミラーノードＮ１２７’に保存されていることを識別する。
【００８１】
ミラーツリー内の新たに割り当てられたノードを使用して、所与のメインツリーノードのマイナーカウンタのサイズを増やす場合、メモリセキュリティユニット２０は以下のステップを実行してもよい。
１．オーバーフローしたばかりのマイナーカウンタを、オーバーフロー前の値にロールバックする。
２．ここで、マイナーカウンタは、メインノードおよび少なくとも１つのミラーノード内の各Ｎビットのマイナーカウンタについて、サイズ増加前にＭビット、サイズ増加後にＮビットを有し、
オーバーフロー前に、マイナーカウンタのＭ最下位ビットと、対応するマイナーカウンタの値とを等しく設定し、
マイナーカウンタの（Ｎ−Ｍ）最上位ビットと、所与のメインツリーノードのメジャーカウンタの（Ｎ−Ｍ）最下位ビットとを等しく設定する。
３．所与のメインツリーノードのメジャーカウンタを、（Ｎ−Ｍ）ビットだけ右にシフトする（これにより、マイナーカウンタにシフトされたビットはシフトアウトされ、（Ｎ−Ｍ）先行０がメジャーカウンタの残りのビットに接頭辞を付与する）。
４．次に、再びオーバーフローしたマイナーカウンタを増分する。
【００８２】
例えば、４ビットのメジャーカウンタと４個の２ビットのマイナーカウンタを有するノードを考えてみる（単純化するためにより小さいカウンタサイズを使用する）。さらに、カウンタは次の（バイナリ）値を有すると仮定する。
Major C.      Minor C's    
0101          01 10 11 00
（Major C；メジャーカウンタ、Minor C’s：マイナーカウンタ）
【００８３】
ここで、サイズ増加イベントによってマイナーカウンタが４ビットに増加する場合（４番目のマイナーカウンタが１１−＞００にオーバーフローしたため）、更新されたメインツリーノード（Main tree node）とミラーノード（Mirror node）は次のようになる。
Main tree node:                    Mirror tree node:
Major C.    Minor C's              Major C.    Minor C's
0001        0101   0110            0001        0111   1000
【００８４】
ここで、Ｎ＝４、Ｍ＝２であるため、（Ｎ−Ｍ）＝２、すなわち、全てのマイナーカウンタに２ビットを追加した。したがって、全てのマイナーカウンタにメジャーカウンタの２個の最下位ビットで接頭辞を付与し、メジャーカウンタに２個の０で接頭辞を付与する。
【００８５】
このような操作により、メジャーカウンタ：マイナーカウンタの組み合わせは、影響を受けるノード内の他の全ての（オーバーフローしていない）マイナーカウンタについては不変であるため、コストのかかる再暗号化／ＭＡＣ再計算が回避される。
【００８６】
したがって、ノードＮ１２７の子ノードＮ１２７＿０のＭＡＣを認証する場合、マイナーカウンタは親ノードＮ１２７自体から選択できるが、ノードＮ１２７の異なる子ノードＮ１２７＿１２７のＭＡＣを認証する場合、マイナーカウンタはミラーノード１２７’から読み込まれることがある。メインノードＮ１２７とミラーノードＮ１２７’は両方ともメインツリーで同じ親ノードを共有するため、同じメジャーカウンタとマイナーカウンタ（この例ではルートノードから取得）を使用して、メインノードＮ１２７およびミラーノードＮ１２７’の両方に関連付けられたＭＡＣを計算する。各ミラーノード４０４は、メインツリーのノード８８と同じレイアウトを有してもよいが、ミラーノード４０４の全マイナーカウンタおよび対応するメインノード８８間で共有されるメジャーカウンタ９５は、メインノード８８自体で指定され得るため、メジャーカウンタフィールド９５をミラーノード４０４で使用する必要はない。
【００８７】
図１１に示す他のノード（ルートノード、Ｎ０、Ｎ１２７＿０、Ｎ１２７＿１２７）については、マイナーカウンタのサイズを増やす必要がまだないため、ミラーツリー内の対応する場所４０６はまだポピュレートされていない。ミラーツリー４００はまばらにポピュレートされた構造であり、メインツリー２６と同じサイズの完全なツリーを収容するためにメモリ内の空間が割り当てられているが、メインツリーのどのノード８８でメモリトラフィックが最も多いかに応じて、ミラーツリー４００の選択されたノードのみが満たされ、そのようにしてオーバーフローの頻度を減らすために各マイナーカウンタに追加のビットが必要であると判定される。したがって、各ノードのアリティを可能な限り高くするために、必要以上に大きいサイズのマイナーカウンタを不必要に割り当てる必要はないが、頻繁にアクセスされるメモリ領域では、対応するノードに、アリティを犠牲にすることなくより大きなカウンタを与え、データの再暗号化やＭＡＣの再計算を頻繁に行わなければならないことによるコストのかかるパフォーマンスオーバーヘッドを削減することができる。メインツリーのルートノード４０２にミラーツリー４００のミラーノードが割り当てられている場合、オンチップメモリのルート整合性検証情報８９は、ミラーツリー４００のルートノードの整合性を検証するための情報も指定することができる。メインツリーのルートノード４０２がミラーノードを必要としない場合、ミラーツリー４００の任意のノードは、メインツリー２６の親ノード、または親ノードがマイナーカウンタを展開している場合にはその親ノードに対応するミラーノード４０４で指定された情報に基づいて、その整合性を検証することができる。
【００８８】
図１２に示すように、場合によっては複数レベルのマイナーカウンタサイズがサポートされることがあり得るため、メインツリーの所与のノードでサイズ増加トリガイベントが検出されるたびに、マイナーカウンタサイズをメモリセキュリティユニット２０でサポートされる２番目に大きいサイズに増やすことができる。例えば、図１２では３つのレベルがサポートされており、カウンタサイズフィールド０ｂ００、０ｂ０１および０ｂ１０は、それぞれ３ビット、６ビット、または１２ビットのカウンタサイズを示す。マイナーカウンタサイズが、サポートされる最小カウンタサイズの２倍を超えるメインツリーのノードの場合、そのノードの子ノードの全てのマイナーカウンタに対応するために、複数のミラーツリーに追加のミラーノードが必要になる場合がある。例えば、図１２のノードＮ０＿１２７の場合、サイズフィールド値０ｂ１０は、１２ビットマイナーカウンタが使用されることを示しているため、１２８個の３ビットマイナーカウンタに以前に割り当てられた空間に収まるのは３２個の１２ビットマイナーカウンタのみである。したがって、ノードＮ０＿１２７の子ノードの残りの９６個の１２ビットマイナーカウンタは、図１２に示すように、さらに３つのミラーツリー４００の３つの対応するノードＮ０＿１２７’、Ｎ０＿１２７’’、Ｎ０＿１２７’’’に分散され得る。対照的に、６ビットのマイナーカウンタが使用される図１２のノードＮ０の場合、唯一の対応するノードＮ０’を第１のミラーツリー４００に割り当てればよく、第１のミラーツリー４００は、必要な１２８個のマイナーカウンタを保存するのに十分であるため、ミラーツリー２および３のノードＮ０’’、Ｎ０’’’はポピュレートされない。後でノードＮ０で別のサイズ増加トリガイベントが発生する場合には、マイナーカウンタサイズが１２ビットに増分され、この時点でノードＮ０’’およびＮ０’’’がポピュレートされるようになる可能性がある。追加のミラーカウンタ整合性ツリーの各々は、任意のノードに初めてそのミラーノードの１つをポピュレートする必要があるメモリ内に、割り当てられた空間を有する（例えば、図１２のミラーツリー２および３は、メインツリーのノードＮ０＿１２７のマイナーカウンタサイズが１２ビットに増加したときに割り当てられた可能性がある）。
【００８９】
図１３に示すように、メモリセキュリティユニット２０は、メインツリー２６および１つ以上のミラーツリー４００のためにメモリ内の空間を割り当ててもよい。メインツリー２６の場合、ツリーの各ノード８８には、メインツリーベースアドレス４１０に対する対応するオフセットが割り当てられる。各ミラーツリー４００について、メモリセキュリティユニット２０は、メインツリー２６に割り当てられるのと同じ量の空間を割り当ててもよく、ミラーツリーの各ミラーノード４０４は、ミラーツリーベースアドレス４１２に対して、メインツリー２６の対応するメインノード８８に使用されるオフセットと同じオフセットに位置する。例えば、図１３に示すように、メインツリーベースアドレス４１０とメインノードＮ０＿１２７のアドレスとの間のメインオフセット４１４は、ミラーツリーベースアドレス４１２と対応するミラーノードＮ０＿１２７’のアドレスとの間のミラーツリーオフセット４１６に等しい。メインノードＮ０＿１２７のカウンタサイズを拡張する必要性がまだ識別されているかどうかに依存して、ミラーツリーオフセット４１６で指定されたオフセットの実際のメモリ位置は、実際にはカウンタで満たされていない可能性がある。したがって、メモリ内のミラーツリー４００に割り当てられた空間はまばらにポピュレートされている可能性があり、この空間のいくつかの部分は所与の時間未使用である可能性がある。
【００９０】
例えば、セキュアメモリの保護領域１ＧＢを有するシステムを整合性ツリーで保護すると考える場合、その保護領域をカバーするノードを保存するために必要な合計メモリは、各メインツリーノードで１２８個の３ビットマイナーカウンタを使用すると約８ＭＢであり得る（メジャーカウンタのサイズ、図１０の例に示すサイズおよびＭＡＣフィールドを使用する場合であるが、明らかに他のサイズも可能である）。したがって、ベースツリーのサイズは約８ＭＢであり得る。マイナーカウンタサイズのジャンプごとに、同じサイズ（８ＭＢ）のまばらにポピュレートされたミラーサブツリーを構築する。したがって、図１２に示すようにさらに３つのミラーツリーが構築される場合でも、合計の空間は約３２ＭＢのままである。比較すると、固定されたサイズカウンタを用いる図３の手法では、約１５０ＭＢのフットプリントを有する静的カウンタツリーが構築され得る。したがって、図１０の手法で追加のミラーツリーを構築することに関連するオーバーヘッドははるかに少なくなる。メモリは書き込み頻度の均等な分布で書き込まれないため、一部の領域の保護は小さなマイナーカウンタで対応でき、また、ミラーツリーを使用して、ノードごとのアリティを犠牲にすることを必要とせずに、選択されたノードのマイナーカウンタサイズを増やすことができる。また、ミラーツリーを使用する可変マイナーカウンタサイズの手法は、サポートされる所与の最大マイナーカウンタサイズ（例えば３２ではなく１２８）に対して各ツリーノードのアリティを大きくでき、メモリの所与のサイズ領域を保護するのに必要なノードの総数が削減され、したがって、全てのノードのマイナーカウンタサイズが最大サイズに増加した場合でも、ＭＡＣまたはメジャーカウンタを保存するのに必要な空間は少なくなることを意味する。すなわち、図１０に示すツリーの全てのノードが１２ビットのマイナーカウンタまで増加し、３つのミラーツリー全てを完全にポピュレートする必要がある場合でも、合計の空間は依然として図３よりも小さくなる。
【００９１】
メインツリー２６および各ミラーツリー４００のベースアドレス４１０、４１２は、メモリセキュリティユニット２０内で、そのキャッシュ４２内または専用ベースアドレスレジスタ内のいずれかに保持され得る。ベースアドレスレジスタが提供されている場合、対応するミラーツリーがまだ割り当てられていない場合には各ミラーツリーのベースアドレスレジスタは無効な値に設定されることがある（例えば、無効な値は、実際のミラーツリーへの割り当てが許可されていない予め決定されたベースアドレスであり得、例えば全て０もしくは全て１、またはレジスタに関連付けられた個別の有効なビットは、アドレスが有効なベースアドレスであるかどうかを示すことができる）。この場合、メモリセキュリティユニット２０は、特定のミラーツリーベースアドレスが有効であるかどうかから、ツリー構造全体で使用されるマイナーカウンタの最大サイズを推測することができる。例えば、図１２のミラーツリー２に関連付けられたベースアドレスレジスタが無効と示されている場合、これはツリー構造の任意のノードで使用される最大マイナーカウンタサイズが６ビット以下であることを示す。これにより、ツリーで使用される最大マイナーカウンタサイズの個別の指示を保存する必要性を回避できる。
【００９２】
また、メモリセキュリティユニット２０は、いくつかの例では、特定のミラーツリー内にどのノード、および／またはいくつのノードがポピュレートされたかを示す追跡情報を維持してもよい。これにより、メモリセキュリティユニット２０は、メインツリー２６の対応するノードが必要なときに、必要なミラーツリーノードを投機的にロードするかどうかを決定できるようになる。すなわち、メモリセキュリティユニット２０は、メインツリーノードにアクセスするためのロード要求を発行する際に、以下かどうかを決定する必要があり得る。
（ｉ）メインツリーノードが返されるのを待ってから、メインツリーノードのサイズフィールド４０２に基づいて、関連するマイナーカウンタを取得するために対応するミラーツリーノードをロードする必要があるかどうかを判定する、または（ｉｉ）メインツリーノードのサイズフィールド４０２が確認されるとともにミラーツリーノードが実際に必要かどうかが判定されるのを待たずに、１つ以上のミラーツリーノードとメインツリーノードをロードする。オプション（ｉ）を使用すると、ミラーツリーノードが実際に必要でない場合に、不要なロードのトリガを回避することにより、メモリ帯域幅を削減できる。オプション（ｉｉ）を使用すると、ミラーツリーノードが必要である場合に、遅延を回避することにより、パフォーマンスを改善できる。オプション（ｉ）またはオプション（ｉｉ）が好ましいかどうかは、所与のミラーツリーで確立された有効なノード数に依存し、ミラーツリー内の有効なノード数が多いほど、現在のアクセスが、対応するミラーノードを必要とする可能性が高くなり、したがって、ミラーノードを投機的にロードすることでパフォーマンスが向上する可能性が高くなる。
【００９３】
したがって、一般に、メインカウンタ整合性ツリーの所与のノードにアクセスするときに、メモリセキュリティユニット２０は、メインツリーの所与のノードが実際にメモリから返される前に、所与のノードのマイナーカウンタサイズを予測し、マイナーカウンタサイズの予測を使用して、対応するメインツリーノードが返される前に所与のミラーツリー内のミラーツリーノードのロードをトリガするかどうかを判定することができる。予測は、所与のミラーツリーが割り当てられているかどうか、および／または所与のミラーツリーに対して有効なノードがいくつ確立されているかを示す追跡情報に基づくことができる。追跡情報は、様々なレベルの精度で有効なノード数を追跡できる。例えば、メモリセキュリティユニット２０は、追跡情報でどの特定のノードが有効であることを指定せずに、所与のミラーツリーのノードがいくつ有効かをカウントする有効ノードカウンタを維持することができる（例えばこの場合、そのツリーの有効ノードカウンタが所定の閾値よりも大きい場合にミラーツリーノードは投機的にロードされ得る）。あるいは、メモリセキュリティユニット２０は、ミラーツリーのどの特定のノードが有効であるかを示すビットマップを維持することができ、これにより、所与のミラーツリーノードが必要かどうかの正確な決定が可能になる。いずれにしても、ミラーツリーのポピュレーションレベルを追跡することは、ロードスケジューリングに関する決定に役立ち、パフォーマンスを向上させることができる。
【００９４】
図９の方法を拡張して、上述の可変マイナーカウンタサイズの例を実装することができる。そのような実施形態では、ステップ２７６でマイナーカウンタがオーバーフローすると、ステップ２８０に直接進む代わりに、追加のステップを実行して、マイナーカウンタサイズが既に最大マイナーカウンタサイズであるかどうかを確認できる。既にマイナーカウンタサイズがメモリセキュリティユニット２０によってサポートされる最大サイズである場合、方法はステップ２８０に進み、ターゲットブロックに関連付けられたメジャーカウンタを増分し、方法は上記のようにステップ２８０以降に続く。しかしながら、マイナーカウンタサイズがサポートされている最大サイズにまだ達していない場合、メモリセキュリティユニット２０は、オーバーフローしたマイナーカウンタを含むメインツリーのノードに関連付けられたマイナーカウンタのサイズを増やす。したがって、ミラーツリー４００のメインノードと少なくとも１つの対応するノード４０４は、各カウンタのビット数が拡張されるように書き換えられ（上記のように、１つ以上のビットをメジャーカウンタから各マイナーカウンタにシフトし、メジャーカウンタを先行ゼロでパディングすることによって）、拡張されたマイナーカウンタ値は、メインノード自体のマイナーカウンタ用に予約された空間、およびミラーツリー４００の１つ以上の対応するノード４０４に分配される。関連するサイズのマイナーカウンタを収容するために必要なミラーツリー４００に空間がまだ割り当てられていない場合、この時点でメモリセキュリティユニット２０が空間を割り当てることができる。次に、方法は図９のステップ２７８に進み、図９の残りのステップは上記と同じである。
【００９５】
図１０〜図１３の例は、ツリーの各レベルが同じアリティ（１２８）を持つ場合を示すが、前の例と同様に、図１４で示すようにツリーのレベル間で異なるアリティを持つツリーを提供することも可能であり、図１４は、親ノードが３２進で子ノードが６４進である例を示す。最初は、親ノードには３２進の１２ビットマイナーカウンタがあり、子ノードには６４進の６ビットマイナーカウンタがあったが、サイズ増加トリガイベントの後、６４進の子ノードのマイナーカウンタのサイズは１２に増加し、追加のミラーノードが割り当てられて６４進の子ノードの１２ビットカウンタの半分を収容する。暗号化カウンタの後続ノード（６４進の子ノードのカウンタを使用してＭＡＣが計算される）は１２８進であり得る。図１４は各ノードの２の累乗のアリティを示すが、上述のように正確な２の累乗ではないアリティを提供することも可能である。
【００９６】
要約すると、上記では分割カウンタを使用するカウンタツリーが説明され、少なくともいくつかのレベルで分割カウンタ設計が使用される。これにより、図２および図３の比較例の８進ツリー（カウンタツリーまたはＭＡＣツリー）とは対照的に、１６、３２、６４または１２８進の整合性ツリーを構築できる（選択された分割カウンタ設計のマイナー：メジャーカウンタ比（１６，３２，６４，１２８など）に基づく）。これにより、メモリの同じ領域を保護するためのカウンタツリーのレベル数を減らすことができ、ツリートラバース中のメモリトラフィックの減少につながり、その後のパフォーマンスが向上する。さらに、カウンタキャッシュラインごとのマイナーカウンタ数が多いほど、キャッシュ可能性が向上し、ツリートラバース中のメモリアクセス数が減る（トラバースはキャッシュがヒットするまで続くため）。
【００９７】
各レベルで異なる分割カウンタ設計を使用する可変アリティカウンタツリーについて説明する。親ノードのマイナーカウンタは、子ノードの任意のマイナーカウンタへの書き込み時に増分される。したがって、ツリーを上に行くと、書き込みトラフィックは指数関数的に増加する（キャッシュの効果は無視する）。したがって、本発明者らは、各レベルで攻撃性の低い分割カウンタ設計を使用することにより、ツリーの上位へ行くにつれてツリーのアリティを減らすことを提案する。評価では、分割−６４設計ではリーフレベルで重大なオーバーフロー（ＭＡＣの再計算が実行時間の５０％以上を占める）が見られるが、分割−３２設計では無視できるほど小さいオーバーフロー（ＭＡＣの再計算は１％未満の時間を費やす）が見られる。したがって、本発明者らは、リーフレベルで分割−４８（メジャーカウンタごとに４８個のマイナーカウンタを持つ）を設計し、ツリーの次のレベルで比を減らし（メジャーカウンタごとに３６個のマイナーカウンタを持つ分割−３６）、以下同様にすることを提案する。これにより、２の累乗ではないアリティが発生し、アドレス計算算術が複雑になるが、それはＭＡＣの再計算によるオーバーヘッドなしで追加のパフォーマンスメリットを活用するためにかかる妥当なコストである。
【００９８】
本発明者らは、また、ミラーツリーを使用して所定のノードの拡大されたカウンタを収容する可変マイナーカウンタサイズのツリーを提案し、これはマイナーカウンタサイズの減少（アリティとツリートラバースパフォーマンスの向上を可能にする）およびマイナーカウンタサイズの増加（マイナーカウンタがオーバーフローしたときに再暗号化またはＭＡＣ再計算が必要になる可能性を減らす）の競合する需要を両立させるのに役立つ。ミラーツリーの手法では、より大きなカウンタを必要とするノードはより大きなカウンタを使用できるが、あまり頻繁ではない他のノードはより小さなマイナーカウンタをなおも使用できる。可変マイナーカウンタの手法を、必要に応じて、上記可変アリティツリーと組み合わせるか、アリティがツリー全体で同じ場合には固定アリティのバージョンを使用できる。
【００９９】
図１５は、異なる分割カウンタベースのカウンタツリーのパフォーマンスの評価を示す。
・棒グラフ４本の各セットの左側の棒グラフは、モノリシック５６ビットカウンタ（モノ−８）との比較の手法を示す。
・棒グラフ４本の各セットの左から２番目の棒グラフは分割１６（１６進）を示す。
・棒グラフ４本の各セットの左から３番目の棒グラフは分割‐３２（３２進）を示す。
・棒グラフ４本の各セットの右側の棒グラフは分割‐６４（６４進）を示す。
【０１００】
パフォーマンスの高速化は、各ベンチマークについてモノ−８の棒グラフに対する比として表示され、すなわち、モノ−８の場合、高速化比は常に１である。暗号化および整合性ツリーカウンタをオンチップでキャッシュする３２ＫＢの専用カウンタキャッシュを想定している。これらの構成のパフォーマンスをＳＰＥＣ２００６のメモリを集中的に使用する作業量で評価する（１０００命令あたり１メモリアクセス以上）。図１０に示すように、分割−３２（３２進）のツリーは、モノリシックカウンタ（５６ビット）ツリー（８進）と比較して平均で４２％の高速化を示している。分割−１６カウンタツリーは、平均で２６％のやや少ない高速化を示す。これは主に、分割カウンタツリーノードのキャッシュ可能性が改善され、メモリトラフィックの削減につながったためである。分割−６４は、分割−３２（平均４２％）と比較して大幅な高速化（平均５７％）を示している。ただし、分割−６４では、パフォーマンスモデルでは考慮されていないオーバーフロー（ＭＡＣ再計算の処理に５０％以上の時間を費やす）のため、かなりのコストもかかる。その結果、分割−３２が静的アリティを備えたカウンタツリーのより好ましい保守的な設計、すなわちレベルをまたがるカウンタと同じ設計である。ただし、分割−３２と分割−６４のパフォーマンスの違い、および分割−３２では無視できるほど少ないが分割−６４ではかなりのオーバーフローが発生するという事実を考えると、図５に示すように、可変で２の累乗ではないアリティの分割カウンタツリーに中間点を見出すことができる。
【０１０１】
図１６は、使用可能なシミュレータの実装を例示している。前述の実施形態では、当該技術をサポートする特定の処理ハードウェアを動作させる装置および方法の点で本発明が実装されているが、コンピュータプログラムの使用を通じて実装される本明細書に記載の実施形態に従って命令実行環境を提供することも可能である。このようなコンピュータプログラムは、ハードウェアアーキテクチャのソフトウェアベースの実装を提供する限り、しばしばシミュレータと呼ばれる。様々なシミュレータのコンピュータプログラムには、エミュレータ、仮想マシン、モデル、および動的バイナリトランスレータを含むバイナリトランスレータが含まれる。通常、シミュレータ実装はホストプロセッサ３３０上で実行され、オプションでホストオペレーティングシステム３２０を実行し、シミュレータプログラム３１０をサポートし得る。いくつかの構成では、ハードウェアと提供された命令実行環境および／または同じホストプロセッサ上に提供された複数の別個の命令実行環境との間に複数のシミュレーション層があり得る。歴史的に、合理的な速度で実行するシミュレータ実装を提供するには強力なプロセッサが必要であるが、互換性や再利用の理由で別のプロセッサにネイティブなコードを実行したい場合など、所定の状況ではそのような手法は正当化され得る。例えば、シミュレータ実装は、ホストプロセッサハードウェアでサポートされていない追加機能を命令実行環境に提供したり、通常は異なるハードウェアアーキテクチャに関連付けられる命令実行環境を提供したりすることがある。シミュレーションの概要は、「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３ページに記載されている。
【０１０２】
特定のハードウェア構成または特徴を参照してこれまで実施形態を説明した範囲で、シミュレーションの実施形態では、適切なソフトウェア構成または特徴によって同等の機能を提供することができる。例えば、特定の回路は、コンピュータプログラムロジックとしてシミュレーションの実施形態に実装されてもよい。同様に、レジスタまたはキャッシュなどのメモリハードウェアは、ソフトウェアデータ構造としてシミュレーションの実施形態に実装されてもよい。前述の実施形態で参照した１つ以上のハードウェア要素がホストハードウェア（例えば、ホストプロセッサ３３０）上に存在する構成では、一部のシミュレーションの実施形態では、適切な場合、ホストハードウェアを利用してもよい。
【０１０３】
シミュレータプログラム３１０は、コンピュータ可読記憶媒体（非一時的媒体であってもよい）に保存されてもよく、プログラムインターフェース（命令実行環境）を、シミュレータプログラム３１０によってモデル化されているハードウェアアーキテクチャのアプリケーションプログラムインターフェースと同じターゲットコード３００に提供する。したがって、オフチップメモリ１４のデータを読み書きするための命令を含むターゲットコード３００のプログラム命令は、シミュレータプログラム３１０を使用して命令実行環境内から実行することができ、上記のようにハードウェアで提供されるメモリセキュリティユニット２０を実際に持たないホストコンピュータ３３０は、これらの特徴を模倣できる。
【０１０４】
さらなる構成例を以下の条項に記載する。
（１）メモリに保存されたデータへのアクセスを制御するためのメモリアクセス回路と、
メモリの保護メモリ領域に保存されたデータの整合性を検証するためのメモリセキュリティ回路と
を含む装置であって、
メモリセキュリティ回路は、複数のノードを含むカウンタ整合性ツリーを維持するように構成され、各ノードは、保護メモリ領域の各データブロックに関連付けられた複数のカウンタを指定し、複数のノードは、カウンタ整合性ツリーのさらなるカウンタを提供する子ノードを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つの親ノードと、カウンタ整合性ツリー以外のデータを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つのリーフノードとを含み、
メモリセキュリティ回路は、保護メモリ領域のターゲットデータブロックへのアクセスに応答して、ターゲットデータブロックに関連付けられた保存済み認証コードと、ターゲットデータブロックおよびターゲットデータブロックに関連付けられているカウンタ整合性ツリーのターゲットカウンタに基づいて生成される計算された認証コードとを比較することによって、ターゲットデータブロックの整合性を検証するように構成され、
カウンタ整合性ツリーのノードの少なくとも１つは、少なくとも２つのカウンタ間で共有されるメジャーカウント値と、少なくとも２つのカウンタの各々に個別に指定されるそれぞれのマイナーカウント値との組み合わせとして各々定義される少なくとも２つのカウンタを指定する分割カウンタノードを含む、装置。
（２）第２のメモリを備え、
メモリセキュリティ回路が、
カウンタ整合性ツリーのルートノード、または
保護メモリ領域に保存されているカウンタ整合性ツリーのルートノードの整合性を検証するための情報
を指定するルート検証データを第２のメモリに保存するように構成されている、
条項（１）に記載の装置。
（３）ターゲットデータブロックへのアクセスに応答して、メモリセキュリティ回路は、ターゲットカウンタとルートノードを含むカウンタ整合性ツリーのブランチ上のカウンタの整合性を検証するために１回以上の検証確認を実行するように構成され、検証確認の少なくとも１回は、第２のメモリに保存されているルート検証データに依存する、条項（２）に記載の装置。
（４）保護メモリ領域のターゲットデータブロックの更新に応答して、メモリセキュリティ回路は、ターゲットカウンタを更新し、ターゲットデータブロックに関連付けられた保存済み認証コードを、ターゲットデータブロックの更新されたデータと更新されたターゲットカウンタとに基づいて再計算するように構成されている、条項（１）に記載の装置。
（５）メモリセキュリティ回路は、ターゲットカウンタを増分することによりターゲットカウンタを更新するように構成されている、条項（４）に記載の装置。
（６）ターゲットデータブロックのターゲットカウンタがカウンタ整合性ツリーの分割カウンタノードによって指定される場合、保護メモリ領域のターゲットデータブロックの更新に応答して、メモリセキュリティ回路は、ターゲットカウンタに対応するマイナーカウント値を更新し、ターゲットデータブロックの更新されたデータ、ターゲットカウンタに対応する対応するメジャーカウント値、およびターゲットカウンタに対応する更新されたマイナーカウント値に基づいて、ターゲットデータブロックに関連付けられた保存済み認証コードを再計算するように構成されている、条項（１）に記載の装置。
（７）マイナーカウント値への更新がオーバーフロー状態を引き起こす場合、メモリセキュリティ回路は、対応するメジャーカウント値を更新し、対応するメジャーカウント値を共有しているカウンタに関連付けられたデータブロックの各々に関連付けられた保存済み認証コードを再計算するように構成されている、条項（６）に記載の装置。
（８）少なくとも１つの親ノードの少なくとも１つは分割カウンタノードである、条項（１）に記載の装置。
（９）カウンタ整合性ツリーは、カウンタ整合性ツリーの異なるレベルに少なくとも２つの分割カウンタノードを含む、条項（１）に記載の装置。
（１０）カウンタ整合性ツリーは、異なる数のデータブロックのカウンタを指定する少なくとも２つのノードを含む、条項（１）に記載の装置。
（１１）カウンタ整合性ツリーは、第１の数のデータブロックのカウンタを指定する第１の分割カウンタノードと、第１の数よりも大きい第２の数のデータブロックのカウンタを指定する第２の分割カウンタノードとを含み、第１の分割カウンタノードは第２の分割カウンタノードの親ノードである、条項（１）に記載の装置。
（１２）第１の分割カウンタノードによって指定されたマイナーカウント値は、第２の分割カウンタノードによって指定されたマイナーカウント値よりも大きいビット数を有する、条項（１１）に記載の装置。
（１３）第１の分割カウンタノードの親ノードは、第１の数よりも小さい第３の数のデータブロックのカウンタを指定する分割カウンタノードである、条項（１１）に記載の装置。
（１４）カウンタ整合性ツリーの少なくとも１つのノードは、正確な２の累乗以外のデータブロックの数のカウンタを指定する、条項（１）に記載の装置。
（１５）メモリセキュリティ回路は、ターゲットデータブロックと同じキャッシュラインからターゲットデータブロックの保存済み認証コードを読み取るように構成されている、条項（１）に記載の装置。
（１６）ターゲットデータブロックへのアクセスに応答して、メモリセキュリティ回路は、保存済み認証コードと計算された認証コードとの間に不一致が検出されたときにセキュリティ違反応答をトリガするように構成されている、条項（１）に記載の装置。
（１７）メモリセキュリティ回路は、保護メモリ領域のデータブロックに書き込まれたデータを暗号化し、保護メモリ領域のデータブロックから読み取られたデータを復号化する暗号化／復号化回路を含む、条項（１）に記載の装置。
（１８）メモリアクセス回路は、カウンタ整合性ツリーとは無関係に、メモリの非保護メモリ領域へのアクセスを制御するように構成されている、条項（１）に記載の装置。
（１９）複数のノードを含むカウンタ整合性ツリーを維持することであって、各ノードが、保護メモリ領域の各データブロックに関連付けられた複数のカウンタを指定し、複数のノードは、カウンタ整合性ツリーのさらなるカウンタを提供する子ノードを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つの親ノードと、カウンタ整合性ツリー以外のデータを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つのリーフノードとを含むことと、
保護メモリ領域のターゲットデータブロックへのアクセスに応答して、ターゲットデータブロックに関連付けられた保存済み認証コードと、ターゲットデータブロックおよびターゲットデータブロックに関連付けられているカウンタ整合性ツリーのターゲットカウンタに基づいて生成される計算された認証コードとを比較することによって、ターゲットデータブロックの整合性を検証することであって、
カウンタ整合性ツリーのノードの少なくとも１つは、少なくとも２つのカウンタ間で共有されるメジャーカウント値と、少なくとも２つのカウンタの各々に個別に指定されるそれぞれのマイナーカウント値との組み合わせとして各々定義される少なくとも２つのカウンタを指定する分割カウンタノードを含むことと、
を含む、メモリの保護メモリ領域に保存されたデータへのアクセスを制御する方法。
（２０）条項（１９）の方法を実行するようにデータ処理装置を制御するためのコンピュータプログラムを記憶している非一時的記憶媒体。
（２１）命令実行環境を提供するためにホストデータ処理装置を制御するためのコンピュータプログラムが提供されてもよく、コンピュータプログラムは、
メモリに保存されたデータへのアクセスを制御するためのメモリアクセスプログラムロジックと、
メモリの保護メモリ領域に保存されたデータの整合性を検証するためのメモリセキュリティプログラムロジックと
を含み、
メモリセキュリティプログラムロジックは、複数のノードを含むカウンタ整合性ツリーを維持するように構成され、各ノードは、保護メモリ領域の各データブロックに関連付けられた複数のカウンタを指定し、複数のノードは、カウンタ整合性ツリーのさらなるカウンタを提供する子ノードを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つの親ノードと、カウンタ整合性ツリー以外のデータを保存するデータブロックにカウンタの少なくとも１つが関連付けられている少なくとも１つのリーフノードとを含み、
メモリセキュリティプログラムロジックは、保護メモリ領域のターゲットデータブロックへのアクセスに応答して、ターゲットデータブロックに関連付けられた保存済み認証コードと、ターゲットデータブロックおよびターゲットデータブロックに関連付けられているカウンタ整合性ツリーのターゲットカウンタに基づいて生成される計算された認証コードとを比較することによって、ターゲットデータブロックの整合性を検証するように構成され、
カウンタ整合性ツリーのノードの少なくとも１つは、少なくとも２つのカウンタ間で共有されるメジャーカウント値と、少なくとも２つのカウンタの各々に個別に指定されるそれぞれのマイナーカウント値との組み合わせとして各々定義される少なくとも２つのカウンタを指定する分割カウンタノードを含む。
【０１０５】
本出願では、「…に構成される」という言葉は、装置要素が定義された動作を実行できる構成を有することを意味するために使用される。これに関連して、「構成」とは、ハードウェアまたはソフトウェアの相互接続の装置または方法を意味する。例えば、装置が、定義された動作を提供する専用のハードウェアを備えていることもあるし、プロセッサまたは他の処理デバイスが機能を実行するようにプログラムされていることもある。「に構成される」は、定義された動作を提供するために、装置要素を何らかの方法で変更する必要があることを意味するものではない。
【０１０６】
本発明の例示的な実施形態を添付の図面を参照して本明細書で詳細に説明したが、本発明はそれらの正確な実施形態に限定されず、添付の特許請求の範囲によって定義される本発明の範囲および精神から逸脱することのなく当業者によって様々な変更および修正を行うことができることを理解されたい。
【図１】
2020529657.tif 000003
【図２】
2020529657.tif 000004
【図３】
2020529657.tif 000005
【図４】
2020529657.tif 000006
【図５】
2020529657.tif 000007
【図６】
2020529657.tif 000008
【図７】
2020529657.tif 000009
【図８】
2020529657.tif 000010
【図９】
2020529657.tif 000011
【図１０】
2020529657.tif 000012
【図１１】
2020529657.tif 000013
【図１２】
2020529657.tif 000014
【図１３】
2020529657.tif 000015
【図１４】
2020529657.tif 000016
【図１５】
2020529657.tif 000017
【図１６】
2020529657.tif 000018
【国際調査報告】
2020529657.tif 000019
2020529657.tif 000020