(57)【要約】  データ処理装置は、一連の命令に関連して少なくとも１つの分岐予測状態エントリを記憶するように構成される分岐予測回路と、新しい分岐予測状態エントリを生成するために少なくとも１つの入力を受信するための入力回路であって、少なくとも１つの入力は複数ビットを含む、入力回路と、一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、複数ビットの少なくとも一部をエンコードするためのエンコード演算を実施するように構成されるコーディング回路とを備える。これは、ある実行環境によって訓練された分岐予測エントリが、分岐予測に基づいて別の実行環境によって使用される機能を利用する潜在的な攻撃を防御する。
2021504800.tif 000002
【特許請求の範囲】
【請求項１】
一連の命令に関連して少なくとも１つの分岐予測状態エントリを記憶するように構成される分岐予測回路と、
新しい分岐予測状態エントリを生成するために少なくとも１つの入力を受信するための入力回路であって、前記少なくとも１つの入力は複数のビットを含む、入力回路と、
前記一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、前記複数のビットの少なくとも一部をエンコードするためのエンコード演算を実施するように構成されるコーディング回路と
を備えるデータ処理装置。
【請求項２】
前記エンコード演算は、前記一連の命令が実行されている現在の実行パーミッションを示す値に基づいて、前記複数のビットの前記少なくとも一部をエンコードすることを含む、請求項１に記載のデータ処理装置。
【請求項３】
前記エンコード演算は、キーを使用することにより前記複数のビットの前記少なくとも一部をエンコードすることを含み、前記キーは、前記一連の命令が実行されている前記現在の実行環境に基づいている、請求項１又は２に記載のデータ処理装置。
【請求項４】
前記エンコード演算は、前記キーを使用して、前記複数のビットの前記少なくとも一部を再配列すること、又はトグルすることを含む、請求項３に記載のデータ処理装置。
【請求項５】
前記少なくとも１つの入力は、分岐命令の命令アドレスの指標を含み、
前記分岐予測回路は、命令の命令アドレスの指標を含むクエリ値を受信して前記クエリ値を使用して検索を実施するよう構成され、
前記コーディング回路は、前記検索に先立って前記キーを使用して前記クエリ値の複数のビットの少なくとも一部に対して前記エンコード演算を実施するよう構成される、請求項３又は４に記載のデータ処理装置。
【請求項６】
前記コーディング回路は、前記現在の実行環境に関連付けられる前記キーの値を再計算し、前記キーの前記再計算された値を使用して前記クエリ値の前記複数のビットの前記少なくとも一部に対して前記エンコード演算を実施するよう構成される、請求項５に記載のデータ処理装置。
【請求項７】
前記少なくとも１つの入力は、分岐命令のデスティネーション・アドレスの指標を含み、
前記分岐予測回路は、命令の命令アドレスの指標を含むクエリ値を受信して前記クエリ値を使用して検索を実施するよう構成され、
前記装置は、前記クエリ値を受信することに応じて出力される前記分岐予測回路の出力に対して逆エンコード演算を実施するための逆エンコード回路を備える、請求項３又は４に記載のデータ処理装置。
【請求項８】
前記逆エンコード回路は、前記現在の実行環境に関連付けられる前記キーの値を再計算し、前記キーの前記再計算された値を使用して前記逆エンコード演算を実施するよう構成される、請求項７に記載のデータ処理装置。
【請求項９】
前記キーは、
前記一連の命令が実行されている例外レベル、特権レベル、ＡＳＩＤ、ＶＭＩＤ、ＮＳ、物理プロセッサ・コア数、及び論理コア数、１つ又は複数のソフトウェア書き込み可能レジスタ、並びに以前に生成された乱数
のうちの少なくとも１つを示す１つ又は複数のキー入力値の任意の組み合わせにさらに基づいている、請求項３から８までのいずれか一項に記載のデータ処理装置。
【請求項１０】
前記以前に生成された乱数は、
論理プロセッサごとの要素、
物理プロセッサごとの要素、及び
システム全体の要素
の少なくとも１つを含む、請求項９に記載のデータ処理装置。
【請求項１１】
前記キーは、前記１つ又は複数のキー入力値に適用される一方向変形に基づいている、請求項９又は１０に記載のデータ処理装置。
【請求項１２】
前記一連の命令は、最低の実行パーミッションで実行するよう構成された複数の実行環境のうちの１つで実行されることができ、前記コーディング回路は、前記一連の命令が実行されている前記複数の実行環境のうちの前記１つの識別子にさらに基づいて、前記エンコード演算を実施するよう構成される、請求項１から１１までのいずれか一項に記載のデータ処理装置。
【請求項１３】
前記一連の命令が投機的な状態で実行されている間、命令フェッチ・フォールト及び命令デコード・フォールトの任意の組み合わせのレートを検出し、前記レートが所定の条件を満たすことに応答して例外を発生させ、又はエラー応答を作成するよう構成された監視回路を備える、請求項１から１２までのいずれか一項に記載のデータ処理装置。
【請求項１４】
前記分岐予測回路は、複数の分岐ターゲット・エントリを含む分岐ターゲット予測構造を備え、それぞれの分岐ターゲット・エントリは、少なくとも分岐ターゲット・アドレスを指定し、
前記コーディング回路は、前記現在の実行環境に関連付けられる暗号化キーを使用して、前記分岐ターゲット予測構造に書き込まれる新しい分岐ターゲット・エントリの少なくとも一部を暗号化するための暗号化回路を備える、請求項１から１３までのいずれか一項に記載のデータ処理装置。
【請求項１５】
それぞれの分岐ターゲット・エントリは、タグ情報及び少なくとも前記分岐ターゲット・アドレスを指定する分岐データを指定し、
前記装置は、前記現在の実行環境に関連付けられる命令フェッチ・アドレスについて分岐ターゲット予測ルックアップを実施するための分岐ターゲット予測回路を備え、前記分岐ターゲット予測ルックアップは、前記分岐ターゲット予測構造の分岐ターゲット・エントリのサブセットのいずれかが、前記命令フェッチ・アドレスについて決定されたターゲット・タグに対応するタグ情報を指定するか否かを判断することを含む、請求項１４に記載のデータ処理装置。
【請求項１６】
前記ターゲット・タグの値は、２つ以上の実行環境で再利用可能である、請求項１５に記載のデータ処理装置。
【請求項１７】
前記暗号化回路は、前記暗号化キーを使用して前記新しい分岐ターゲット・エントリの前記タグ情報の少なくとも一部を暗号化するよう構成される、請求項１５又は１６に記載のデータ処理装置。
【請求項１８】
前記暗号化回路は、前記暗号化キーを使用して前記新しい分岐ターゲット・エントリの前記分岐データの少なくとも一部を暗号化するよう構成され、
前記装置は、前記分岐ターゲット予測ルックアップで前記ターゲット・タグに対応するタグ情報を指定するように特定された分岐ターゲット・エントリの前記サブセットのうちの１つの前記分岐データの前記少なくとも一部を復号化する復号化回路を備える、請求項１７に記載のデータ処理装置。
【請求項１９】
前記暗号化キーは、前記現在の実行環境に固定された静的なキーを含む、請求項１４から１８までのいずれか一項に記載のデータ処理装置。
【請求項２０】
前記現在の実行環境についての前記静的なキーは、前記複数の実行環境の少なくとも２つと、前記現在の実行環境に特有の少なくとも１つの識別子とで共有される共通キーに依存している、請求項１９に記載のデータ処理装置。
【請求項２１】
前記暗号化キーは、前記現在の実行環境に可変の動的なキーを含む、請求項１４から１８までのいずれか一項に記載の装置。
【請求項２２】
前記現在の実行環境についての更新された暗号化キーを生成するためのキー生成回路を備える、請求項２１に記載の装置。
【請求項２３】
複数の領域エントリを含む領域テーブルを備え、各領域エントリは、分岐コンテキスト情報を、前記分岐コンテキスト情報よりも少ないビットを含む領域識別子へマッピングし、前記分岐コンテキスト情報は、対応する実行環境に関連付けられる少なくとも１つの識別子を含む、請求項１５から１８までのいずれか一項に記載の装置。
【請求項２４】
前記命令フェッチ・アドレスについての前記ターゲット・タグは、前記領域テーブルによって前記命令フェッチ・アドレスに関連付けられる前記分岐コンテキスト情報にマッピングされたターゲット領域識別子を含む、請求項２３に記載の装置。
【請求項２５】
各領域エントリは、前記対応する実行環境に関連付けられる前記暗号化キーを指定する、請求項２３又は２４に記載の装置。
【請求項２６】
前記領域テーブルの所与の領域エントリによって与えられた前記マッピングが更新される場合、前記分岐ターゲット予測回路は、前記マッピング更新後に前記所与の領域エントリに関連付けられる前記実行環境に関連付けられる前記暗号化キーの更新をトリガするよう構成される、請求項２３から２５までのいずれか一項に記載の装置。
【請求項２７】
前記分岐ターゲット予測回路は、前記命令フェッチ・アドレス、及び前記命令フェッチ・アドレスの命令に先行する以前の分岐命令の分岐結果の履歴に依存して、前記ターゲット・タグを判断するように構成される、請求項１４から２６までのいずれか一項に記載の装置。
【請求項２８】
一連の命令に関連して少なくとも１つの分岐予測状態エントリを記憶する手段と、
新しい分岐予測状態エントリを生成するために少なくとも１つの入力を受信する手段であって、前記少なくとも１つの入力は複数のビットを含む、手段と、
前記一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、前記少なくとも１つの入力の前記複数のビットの少なくとも一部をエンコードする手段と
を備えるデータ処理装置。
【請求項２９】
一連の命令に関連して少なくとも１つの分岐予測状態エントリを記憶するステップと、
新しい分岐予測状態エントリを生成するために少なくとも１つの入力を受信するステップであって、前記少なくとも１つの入力は複数のビットを含む、ステップと、
前記一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、前記複数のビットの少なくとも一部をエンコードするステップと
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法はデータ処理の分野に関する。より詳細には、分岐予測に関する。
【背景技術】
【０００２】
データ処理装置は、分岐命令の結果を、それらが実際に実行される前に予測するための、分岐予測回路を有する場合がある。分岐命令が実際に実行される前に分岐結果を予測することによって、その分岐に続く後続の命令がフェッチされ始め、分岐命令の実行が完了する前に投機的に実行され始めることが可能であり、それによって、分岐の結果が実際に分かって初めてフェッチされるよりも早期に後続の命令を実行することができるため、予測が正しい場合はパフォーマンスが節約される。
【発明の概要】
【課題を解決するための手段】
【０００３】
少なくとも一部の実例は、一連の命令に関連して少なくとも１つの分岐予測状態エントリを記憶するように構成される分岐予測回路と、新しい分岐予測状態エントリを生成するために少なくとも１つの入力を受信するための入力回路であって、少なくとも１つの入力は複数ビットを含む、入力回路と、一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、複数ビットの少なくとも一部をエンコードするためのエンコード演算を実施するように構成されるコーディング回路とを備えるデータ処理装置を提供する。
【０００４】
少なくとも一部の実例は、一連の命令に関連して少なくとも１つの分岐予測状態エントリを記憶する手段と、新しい分岐予測状態エントリを生成するために少なくとも１つの入力を受信する手段であって、少なくとも１つの入力は複数ビットを含む、受信する手段と、一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、前記少なくとも１つの入力の複数ビットの少なくとも一部をエンコードする手段とを備えるデータ処理装置を提供する。
【０００５】
少なくとも一部の実例は、一連の命令に関連して少なくとも１つの分岐予測状態エントリを記憶することと、新しい分岐予測状態エントリを生成するために少なくとも１つの入力を受信することであって、少なくとも１つの入力は複数ビットを含む、受信することと、一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、複数ビットの少なくとも一部をエンコードすることとを含む方法を提供する。
【０００６】
本技法のさらなる態様、特徴及び利点は、添付の図面と併せて読まれる実例の以下の説明から明らかとなろう。
【図面の簡単な説明】
【０００７】
【図１】分岐予測器を有するデータ処理装置の実例を概略的に示す図である。
【図２】分岐予測回路への入力のエンコード部分についてのコーディング回路の実例を示す図である。
【図３Ａ】現在の実行コンテキストに関連付けられるキーに基づく入力のエンコード部分の実例を示す図である。
【図３Ｂ】現在の実行コンテキストに関連付けられるキーに基づく入力のエンコード部分の実例を示す図である。
【図３Ｃ】現在の実行コンテキストに関連付けられるキーに基づく入力のエンコード部分の実例を示す図である。
【図４Ａ】現在の実行コンテキストに関連付けられる再計算キーに基づいて、逆エンコード演算を、分岐予測回路によって出力されたエンコードされたデスティネーション・アドレスに適用する実例を示す図である。
【図４Ｂ】エンコード演算を、分岐予測回路を検索するクエリの一部として使用される命令アドレスに適用する実例を示す図である。
【図５】現在の実行コンテキストに関連付けられる複数の識別子に基づいてキーを生成する実例を示す図である。
【図６】命令フェッチ・フォールトのレートを検出するための監視回路の実例を示す図である。
【図７】命令フェッチ・フォールトが２０％以上のレートで増加することが、エラー応答をトリガする実例を示すグラフである。
【図８】分岐ターゲット・バッファ及び分岐方向予測器を備える分岐予測器の別の実例を示す図である。
【図９】比較のために、所与の実行コンテキストを特定するコンテキスト情報がそれぞれの分岐ターゲット・エントリについてのタグ情報内で指定される、分岐ターゲット・バッファの一形態を示す図である。
【図１０】領域テーブルが、コンテキスト情報を分岐ターゲット・バッファ内でタグ情報として使用される短い領域識別子に圧縮するために使用される、代替的な実装形態を示す図である。
【図１１】攻撃者が異なる実行コンテキストが領域テーブルからの同一の領域識別子を再利用することができるという性質を利用することがある、そのような領域テーブルを使用しているシステムにおいて生じ得る潜在的なセキュリティの問題を示す図である。
【図１２】対応する実行コンテキストに関連付けられる暗号化キーに基づいて、分岐ターゲット予測構造に記憶される前に分岐情報が暗号化され、分岐ターゲット予測構造から読み出される際に復号化される実例を示す図である。
【図１３】図１２の実例による分岐ターゲット・バッファのエントリ及び領域テーブルの実例を示す図である。
【図１４】領域テーブル・エントリが更新された時の暗号化キーを変更する実例を示す図である。
【図１５】そのような攻撃からマルチターゲット間接分岐予測器を保護するために、暗号化を使用することに対応する実例を示す図である。
【図１６】そのような攻撃からマルチターゲット間接分岐予測器を保護するために、暗号化を使用することに対応する実例を示す図である。
【図１７】分岐ターゲット予測ルックアップを実施する方法を図示する流れ図である。
【図１８】領域テーブルに基づいてルックアップ用のターゲット・タグ値を生成するための方法を示す流れ図である。
【発明を実施するための形態】
【０００８】
処理回路が、複数の実行環境のうちの１つでデータ処理を実施することができる。例えば、それぞれの実行環境は、処理回路によって実行される異なるソフトウェア・プロセス、異なる特権レベルのソフトウェア（例えばアプリケーションとオペレーティング・システム）、所与のソフトウェア・プロセスの異なる部分、処理回路で実行される異なる仮想マシン、などに対応することがある。分岐予測回路は、一連の命令に関連して少なくとも１つの分岐予測状態エントリを記憶するために提供され得る。分岐予測状態エントリは、例えば遂行する若しくは遂行しないと予測される結果、又は予測される分岐ターゲット・アドレスなどの、分岐の予測される性質を指定することができる。分岐予測回路を使用して、分岐命令の結果を、それらが実際に実行されるよりも前に予測することができ、予測された分岐の性質に基づいて早期のフェッチ及び後続の命令の投機的な実行を可能にする。入力回路は、新しい分岐予測状態エントリを生成するために少なくとも１つの入力を受信するために提供され得、この場合少なくとも１つの入力は複数ビットを含む。例えば、入力は、新しいエントリが分岐予測回路に割り当てられる分岐命令の命令アドレスの少なくとも一部、及び／又は将来的な機会に対して予測される分岐ターゲット・アドレスとして使用され得る分岐命令についての実際の分岐ターゲット・アドレスを指定することができる。必要とされる記憶容量を低減するために、一部の実施例は分岐ターゲット・アドレスを、例えば分岐命令のアドレスからのオフセットとして指定することにより、間接的に記憶することができる。
【０００９】
分岐予測のメカニズムは通常、その誤予測がシステムによって処理されたデータのセキュリティにとって致命的ではなく、達成されるパフォーマンス・レベルに影響するだけの、パフォーマンス向上メカニズムと見なされる。したがって、通常は分岐予測器の内容を保護するセキュリティ対策が必要であると期待しないかも知れない。
【００１０】
本技法は、一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、入力回路によって受信される入力の複数ビットの少なくとも一部をエンコードするためのエンコード演算を実施するためのコーディング回路を提供する。次いで、入力のエンコードされたバージョンを使用して、分岐予測回路のために生成されるよう新しい分岐予測状態エントリを形成することができる。
【００１１】
直観に反して、分岐予測回路が、一実行環境が別の実行環境に関連付けられるデータにアクセスすることを制限する処理回路に設けられたセキュリティ保護を、攻撃者がすり抜けるために利用できるルートを与え得ることが認識されている。その理由は、分岐予測回路によって分岐予測状態エントリが異なる実行環境からエントリを割り当てた実行環境にアクセスできるようになる場合があるため、第１の実行環境によって分岐予測回路に割り当てられた分岐予測状態を使用して第２の実行環境で実行される分岐の挙動を制御することができるからである。以前、このことは単にパフォーマンスの問題と見なされており、第２の実行環境が異なるコンテキストによって割り当てられた間違ったエントリをヒットするかのようであり、分岐の実際の分岐結果が予測に一致しないと特定されると、後に第２の実行環境による分岐の実行中に誤予測が特定されることがあった。しかしながら、誤予測された分岐のために誤って投機的に実行された命令は、キャッシュ内のデータ又はデータ処理装置によって使用される他の非アーキテクチャ的な記憶構造において、なお影響を及ぼし、攻撃者が第２の実行環境からアクセス可能な重要なデータである可能性がある一部の情報を得るために試行するよう利用され得ることが認識されている。
【００１２】
新しい分岐予測状態エントリの生成の際、現在の実行環境に関連付けられる値に基づいて分岐予測回路への入力の少なくとも一部のビットをエンコードすることを適用するためにコーディング回路を設けることにより、入力の少なくとも一部のビットのエンコードが実行環境特有の値に基づいているため、２つの異なる実行環境が同一の入力を与えたとしても分岐予測器は異なるように出力し、別の実行コンテキストを騙して同一の分岐予測状態エントリを再利用させる試行において、ある実行コンテキストが分岐予測回路を悪意のある分岐情報で訓練することをより困難にする。これにより上で議論したタイプの攻撃のリスクを低減する。分岐予測器は通常はセキュリティリスクをもたらすとは見なされず純粋にパフォーマンス向上対策として見なされているため、そのようなコーディング回路は有用であり、驚きである。
【００１３】
一部の実例では、エンコード演算は一連の命令が実行されている現在の実行パーミッションを示す値に基づいて入力値の複数ビットの少なくとも一部をエンコードすることを含むことがある。これにより、異なる実行パーミッションに関連付けられる実行環境が入力を様々な方法でエンコードすることを可能にしており、攻撃者にはアクセス可能ではなくｖｉｃｔｉｍ（ヴィクティム）実行環境にはアクセス可能なデータを露出させる試行において、攻撃者が所望のターゲット・アドレスへ分岐するようｖｉｃｔｉｍ実行環境を異なる実行パーミッションで成功裏に制御できることを困難にしているが、なぜなら攻撃者の実行環境に関連付けられる値を使用してエンコードされた場合、入力のどの値が、攻撃対象となる別の実行環境に関連付けられる異なる値を使用してエンコードされたターゲット入力に一致するか、を攻撃者が推測することが困難な場合があるからである。
【００１４】
コーディング回路によって適用されるエンコード演算は、現在の実行環境に関連付けられる値に基づいて入力の少なくとも一部のビットのビット値を変化させるあらゆる演算を含むことができる。現在の実行環境に関連付けられる値の単なる連結、及び入力回路によって受信される入力は、入力の少なくとも一部のビットのエンコードとは見なされないが、なぜなら、この場合入力のすべてのビットが、その本来の値を依然として保持することになるからであることに留意されたい。したがって、一般に、エンコードすることは、現在の実行環境に関連付けられる値によって定義される変形を使用して少なくとも１つのビットの値を変化させる。
【００１５】
例えば、エンコード演算は、キーを使用して少なくとも一部のビットをエンコードすることを含むことがあり、この場合キーは一連の命令が実行されている現在の実行環境に基づいている。エンコード演算は、キーを使用して少なくとも一部のビットを再配列することを含むことができる（例えば、ビットのシフト又は他の並べ替えを適用すること）。さらに、エンコード演算は、キーを使用して入力のビットの少なくとも一部をトグルすることを含むことがある。例えば、トグルすることは、ＸＯＲ（排他的ＯＲ）演算を入力の少なくとも一部のビット、及び現在の実行環境に関連付けられる値から導出したキーに適用することにより実装することができる。ＸＯＲ演算は、パフォーマンス及びハードウェアの観点から効率的な場合がある。代替的に、エンコード演算は、キーに基づいて入力の少なくとも一部のビットに適用されるハッシュ関数を含んでもよい。エンコード演算は可逆であり得る（例えば、初めのＸＯＲ演算の結果に対して、同一のキーを使用して第２のＸＯＲ演算を適用することは、本来の入力を復元することができる）か、又は一方向のハッシュ関数であり得る。
【００１６】
分岐予測回路への入力は、複数の情報を含む場合がある。エンコードは、入力の異なる部分に適用することができる。入力の全体をエンコードする必要はない。
【００１７】
例えば、少なくとも１つの入力は、分岐命令の命令アドレスの指標を含むことがあり、それを使用してその分岐命令についての予測を与える新しい分岐予測状態エントリを形成することができる。分岐予測回路にクエリする時、分岐予測回路は、分岐予測がなされる命令の命令アドレスの指標を含むクエリ値を受信し、そのクエリ値を使用して検索を実施することができる。検索は、例えば、分岐予測回路が１つ又は複数の命令に関連する分岐予測状態エントリを記憶するかどうかを、命令アドレスがクエリ値によって指定されることに対応して、特定することがある。例えば、それぞれのエントリは、いくつかのタグ情報、又は分岐予測回路に与えられたクエリがそのエントリに一致するかどうかを検索が特定できるようにする他の状態データを含むことがある。クエリがミスとなり、続いてクエリによって示される命令アドレスが分岐命令に対応すると判断される場合、タグ情報又はミスを起こしたクエリに対応する他の状態を指定し、また分岐命令について決定された実際の分岐情報を指定する新しい分岐予測状態エントリを分岐予測回路に割り当てることができる。
【００１８】
一実例において、コーディング回路は、検索の実施に先立って、現在の実行環境に関連付けられる１つ又は複数の値から導出されるキーを使用してクエリ値の複数ビットの少なくとも一部に対してエンコード演算を実施することができる。したがって、異なる実行環境はその環境特有のキーに基づいて同一のクエリを異なる方法でエンコードし、入力クエリと分岐予測回路のエントリとの間の、一致するとしてリターンされるマッピングを変更し、それによって異なる実行環境において一部の他のクエリ値に関連付けられる分岐を騙して攻撃者の実行環境によって割り当てられる予測状態を使用させるために、攻撃者が分岐予測器を訓練するためのクエリとして入力のどの値を与えるべきかを予測することをより複雑にしている。（分岐について予測されるデスティネーション・アドレスなどの予測される分岐状態に、ではなく）クエリ値にコーディングを適用することの利点は、エンコード演算を分岐予測回路へのクエリ入力に適用することが攻撃者をいらだたせるのに十分であり得、予測される分岐情報が依然として分岐予測回路にクリアな状態で記憶され得るため、分岐予測器から分岐状態情報を読み出す際にあらゆるデコードを適用することが必須ではないことである。これは、分岐予測器から出力される際デコード回路を通過する追加的なタイミング・パスを回避することによりパフォーマンスを改善することができる。
【００１９】
他の実例では、ビットが新しい分岐予測状態エントリを形成するためにコーディング回路によってエンコードされる少なくとも１つの入力は、分岐命令のデスティネーション・アドレス（「分岐ターゲット・アドレス」又は「分岐ターゲット・オフセット」としても知られる）の指標を含むことができる。この場合は、装置は、命令アドレスを示すクエリ値に基づいてトリガされた分岐予測回路の検索に応じて出力される分岐予測回路からの出力に対して、逆のエンコード演算を実施するための逆エンコード回路（又はデコード回路）をさらに含むことができる。逆エンコード演算は、コーディング回路によって適用されたエンコード演算の効果を逆転させ、値がエンコード演算によって変形されたビットの本来の値を復元するあらゆる演算であり得る。この場合は、クエリ値とアクセスされる分岐予測回路のエントリとのマッピングを変更するのではなく、予測される分岐状態は現在の実行環境に関連付けられるキーに基づいて環境特有のやり方でエンコードされ、それによって第２の実行環境が第１の実行環境によって訓練された分岐予測状態エントリをヒットしたとしても、得られる分岐予測は、同一のエントリが第１の実行環境からアクセスされる場合になされる予測とは異なることができる。これは悪意をもって分岐予測器を訓練することによって攻撃者が異なる実行環境が分岐する位置を成功裏に制御することをより困難にする。これは、間違った分岐予測器状態エントリをヒットする機会を低減することによりパフォーマンスを改善することができる。
【００２０】
逆エンコード回路は、現在の実行環境に関連付けられるキーの値を再計算し、キーの再計算された値を使用して逆エンコード演算を実施することができる。したがって、現在の実行環境が、分岐予測状態エントリが割り当てられる時間と、分岐予測状態エントリが予測を行うためにアクセスされる時間との間に変わると、現在の実行環境に関連付けられる値から導出されるキーは再計算されるため、逆エンコード演算はそのエントリの割り当てに対して予測分岐状態として与えられる情報に、異なる情報をもたらすことがある。
【００２１】
上で議論した２つの手法を組み合わせるために、分岐の命令アドレス、及びデスティネーション・アドレスの両方へのエンコード演算を適用することも可能である。
【００２２】
現在の実行環境に関連付けられるキーは、現在の実行環境に関連付けられる１つ又は複数の識別子の組み合わせに基づくことができる。例えば、キーは以下のうちの１つ又は複数のあらゆる組み合わせに基づくことができる：
例外レベル（異なる動作モード、例えば、ユーザ・モード、カーネル・モード、ハイパーバイザ・モードを区別する）
特権レベル（異なる実行パーミッションを区別する）
ＡＳＩＤ（アドレス空間ＩＤ（ａｄｄｒｅｓｓ  ｓｐａｃｅ  ＩＤ）―異なるアプリケーション・レベルの実行コンテキストを区別する）
ＶＭＩＤ（仮想マシンＩＤ（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ＩＤ）―異なるオペレーティング・システム若しくは仮想マシン・レベルの実行コンテキスト、又は異なるオペレーティング・システム若しくは仮想マシンの制御下で実行する同一のＡＳＩＤを有するアプリケーションを区別する）
ＮＳ（ｎｏｎ−ｓｅｃｕｒｅ／ｓｅｃｕｒｅ）（装置の現在のセキュリティ状態を示す非セキュア／セキュア状態）
物理プロセッサ・コア数（ハードウェア内に設けられる異なるプロセッサ・コアで実行するプロセスを区別する）
論理コア数（ハードウェア内に設けられる共有プロセッサ・コアの異なる論理パーティションで実行される実行環境を区別する）
１つ又は複数のソフトウェア書き込み可能レジスタ（キーのさらなる変形を提供するためのキーを導出するために使用されるさらなる入力をソフトウェアが与えることができるように、例えば、これはそのプロセス下で実行しているプロセスのＡＳＩＤ又はＶＭＩＤなどのコンテキスト識別子を知っているプロセスが、そのプロセスによって使用されるキーの値を予測することをより困難にする）。
【００２３】
また、キーは、以前に生成された乱数に基づいてさらに生成することができる。これは、現在の実行環境に関連付けられる識別子の所与の組み合わせについて生成されるキーのさらなる変形を与えることができ、あるデバイスによって使用されるキー（又はキーを導出するために使用される関数）を特定することができる攻撃者が、その知識を異なる乱数を使用し得る他のデバイスに適用することを困難にしている。乱数は、論理プロセッサごとの要素、物理プロセッサごとの要素、及びシステム全体の要素の少なくとも１つを含むことができる。以前に生成された乱数の少なくとも一部は、スタート・アップ時に生成することができるため、データ処理装置がスタート・アップする都度変化し、所与の実行環境に関連付けられるキーの破壊に対してさらなる耐性を提供する。例えば、ハードウェア乱数生成器又は疑似乱数生成器は、装置がブートされる都度新しい乱数を生成するようトリガされ得る。以前に生成された乱数の少なくとも一部は、真の乱雑さが求められなくてもよい疑似乱数であってもよい。
【００２４】
一部の実施例では、一連の命令は、最低の実行パーミッション（最低の特権を有する実行パーミッション・レベル）で実行するように構成される複数の実行環境のうちの１つで実行され得る。例えば、最低の実行パーミッションにある実行環境は、アプリケーション又はアプリケーションのサブ部分を含む場合がある。一部の実例では、コーディング回路は、一連の命令が実行されている最低の実行パーミッションにある複数の実行環境のうちの１つの識別子にさらに基づくエンコード演算を実施することができる。これは、同一のアドレス変換レジームを共有することができ、そのために分岐予測器入力の分岐予測器のエントリへのマッピングを共有すると期待され得るアプリケーション・レベルのソフトウェアの異なる部分が、分岐予測器入力の異なるエンコードを使用させ、同一のアドレス変換レジームを共有する別のアプリケーション又はアプリケーションの別の部分に対して、あるアプリケーション又はアプリケーションの一部が上で議論した形態の攻撃を作り出すリスクを低減することを可能にしている。
【００２５】
一連の命令が投機的な状態で実行されている間、命令フェッチ又はデコード・フォールトのレートを検出し、例外を発生させるか、又は所定のしきい値を超える増加などの所定の判定基準を満たす命令フェッチ及び／若しくはデコード・フォールトの検出率に応じてエラー応答を作り出すために監視回路を設けてもよい。例えば、しきい値は直前のレートよりも少なくとも２０％高くてもよい。代替的に、しきい値は他のアプリケーションについての平均レートを２０％上回ることができる。これは上で議論した形態の攻撃を検出するための技法を提供することができる。命令フェッチ・フォールトの回数が増加する場合、可能性のある説明としては、攻撃者が他のコードを騙して、不適切な分岐アドレスから命令を実行するように分岐予測器を訓練しようと試行していることが挙げられ得、これは後で誤予測として検出される。投機的な命令フェッチ又はデコード・フォールトのレートが増加する時に、例外又はエラー応答をトリガすることによって、潜在的な攻撃の警告を与えることができる。そのような警告に対してソフトウェアがどのように応答するよう選択するか、は実行されている特定のソフトウェアに依存することがあるが、命令フェッチ・フォールトで異常に高い増加が検出される際に割り込み／エラー応答をトリガするために監視回路を設けることは、ソフトウェアがそのソフトウェアに適当なやり方で応答することを可能にするためのハードウェア・フレームワークを提供することができる。
【００２６】
一実例では、分岐予測回路は複数の分岐ターゲット・エントリを含む分岐ターゲット予測構造を含むことができ、それぞれの分岐ターゲット・エントリは少なくとも１つの分岐ターゲット・アドレスを指定する。コーディング回路は、現在の実行環境に関連付けられる暗号化キーを使用して、分岐ターゲット予測構造に書き込まれる新しい分岐ターゲット・エントリの少なくとも一部を暗号化するための暗号化回路を備えることができる。
【００２７】
それぞれの分岐ターゲット・エントリはタグ情報を指定することができる。装置は、現在の実行環境に関連付けられる命令フェッチ・アドレスについて分岐ターゲット予測ルックアップを実施する分岐ターゲット予測回路を有することができる。分岐ターゲット予測ルックアップは、分岐ターゲット・エントリのサブセットのいずれかが命令フェッチ・アドレスについて決定されたターゲット・タグに対応するタグ情報を指定するかどうか判断することを含むことができる。分岐ターゲット予測ルックアップでルックアップされる分岐ターゲット・エントリのサブセットは、ｆｕｌｌｙ−ａｓｓｏｃｉａｔｉｖｅ（フルアソシアティブ型）キャッシュの実装形態の場合に分岐ターゲット予測構造の分岐ターゲット・エントリのすべてを含むことができるか、又はｓｅｔ−ａｓｓｏｃｉａｔｉｖｅ（セットアソシアティブ型）の実装形態で分岐ターゲット・エントリの一部のみ（分岐ターゲット・エントリの適切なサブセット）を含むことができる。ｓｅｔ−ａｓｓｏｃｉａｔｉｖｅの実装形態では、ルックアップされる分岐ターゲット・エントリのサブセットを、例えば所与の分岐命令のアドレスの一部に基づいて選択することができる。
【００２８】
一般に、ターゲット・タグは、命令フェッチ・アドレス、フェッチ・アドレスが生じる現在の実行環境、又は命令フェッチ・アドレスによって表現される現在の実行ポイントの何らかの性質を示す処理回路の最近の演算の一部の過去の履歴の何らかの性質に基づいて、何らかの方法で決定され得る。使用される特定のタグは、実装される分岐ターゲット予測構造のタイプに依存して変わってもよい。例えば、ターゲット・タグは命令フェッチ・アドレスから、又は現在の実行環境に関連付けられる１つ若しくは複数の識別子から導出することができるか、或いは命令フェッチ・アドレスによって特定される命令にたどり着く分岐結果の過去の履歴に基づいている場合もある。
【００２９】
ターゲット・タグの値は、複数の実行環境で再利用可能であってもよい。したがって、ターゲット・タグは特定の実行環境に一意でなくてもよい。これは、例えば、特定の分岐ターゲット予測構造が現在の実行環境に関連付けられる識別子とは完全に独立しているタグを使用するため、又は分岐ターゲット予測構造のタグ情報記憶における回路エリアを節約するために、タグが現在の実行環境に関連付けられる値から導出された少なくとも一部を含む一方で、タグ情報及びターゲット・タグが、現在の実行環境を特定する１つ又は複数の実行環境識別子の圧縮されたバージョンに基づくことができるからであり得、そのため圧縮された識別子の値は実行環境ごとに再利用可能となり得る。
【００３０】
したがって、一実行環境で使用されるターゲット・タグが、異なる実行コンテキストに関連付けられる分岐命令の実行後、分岐ターゲット予測構造のエントリに割り当てられたタグ情報とは一致しないことを保証することができない。これは分岐ターゲット予測構造で偽陽性ヒットをもたらすことがあるため、時に誤った分岐ターゲット・アドレスがリターンされることがあり、ひいては分岐誤予測は分岐後に間違った命令を実施させることがある。そのような偽陽性ヒットが処理パフォーマンスの低下を引き起こすことがある一方で、プロセッサをトリガして誤予測の分岐後にパイプラインされた命令をフラッシュし、いったん分岐結果が解決されると正しい処理経路から命令フェッチを再開させることによって、誤予測を扱うための分岐誤予測解決回路が既に設けられている場合がある。したがって、複数の実行環境にわたってタグ値の再利用によって引き起こされる偽陽性ヒットは、分岐誤予測の他の原因に類似する方法で解決される可能性があるため、またこれはパフォーマンスに影響する一方で典型的にはデータ・セキュリティにとってのリスクとは見なされることがないため、典型的には大きな問題とは考えられないであろう。
【００３１】
しかしながら、実際には分岐ターゲット予測回路におけるそのような偽陽性ヒットは、データ処理装置によって処理されるデータのセキュリティへの脆弱性をもたらすことがあると認識されている。装置は、例えば特権ベースのデータ・アクセス保護スキームを使用して、一部のデータへのアクセスを一定の実行環境に制限することができる。分岐ターゲット予測回路での偽陽性ヒットは、そのようなセキュリティ・メカニズムをすり抜けさせることがあるため、第２の実行環境にはアクセス可能であり且つ第１の実行環境にはアクセス不可能な重要な情報についての情報を、攻撃者によって制御される第１の実行環境が取得できることが認識されている。分岐予測のメカニズムは通常、その誤予測がシステムによって処理されたデータのセキュリティにとって致命的ではなく、達成されるパフォーマンス・レベルに影響するだけの、パフォーマンス向上メカニズムと見なされるため、これは驚くべきことである。
【００３２】
潜在的なセキュリティ脆弱性の理由としては、第１の実行コンテキストを制御している攻撃者が、第２の実行環境をトリガし、その分岐ターゲット・アドレスとして一定の既知のアドレス（以下で「偽ヒット・ターゲット・アドレス」と称される）を示す第１の実行環境によって割り当てられるエントリにヒットさせるよう実行環境同士のターゲット・タグ値の再利用を利用することができる場合、これは攻撃者が第２の実行環境を制御して偽ヒット・ターゲット・アドレスに配置された一定の悪意のあるコードに分岐させることができる。結果的に、第２の実行環境によって実行される分岐の実際のターゲット・アドレスが偽ヒット・ターゲット・アドレスとは一致しない可能性があるため、分岐予測が誤っていると判断することができ、次いで誤って実行された命令のアーキテクチャ上の効果を逆転させるために、誤って実行された命令に関連付けられるあらゆるアーキテクチャ的な状態を以前の正しい状態値に巻き戻すことができ、その一方で誤って実行された命令は、キャッシュ内のデータ、又はトランスレーション・ルックアサイド・バッファ（ＴＬＢ：ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）などの非アーキテクチャ的なプロセッサ状態を変えさせることもでき、これは誤予測が解決された後も存続することがある。攻撃者は、誤って実行された命令の結果としてデータがキャッシュされる特定のアドレスが、攻撃者がアクセスしたいと思う重要な情報に依存することを確実にするために、偽ヒット・ターゲット・アドレスに悪意のあるコードを設計しておくことがある。したがって、攻撃者は次に、どのデータがキャッシュされているかを精査するよう設計された第１の実行環境で命令を実行すること、及び誤予測された命令が実行された期間に、第２の実行環境によってどの情報がキャシュされたかを精査するためにキャッシュ・ミス・カウント又はメモリ・アクセス・レイテンシ測定値などのパフォーマンス・インジケータを使用することができる。これにより、攻撃者が第２の実行環境によって処理される潜在的に重要なデータについての情報を得て、システムのセキュリティ・メカニズムをすり抜けることが可能になる。
【００３３】
したがって、分岐ターゲット予測構造に書き込まれる新しい分岐ターゲット・エントリの少なくとも一部は、その分岐情報に割り当てられる対応する実行環境に関連付けられる暗号化キーを使用して暗号化することができる。新しい分岐ターゲット・エントリのタグ情報、若しくは新しい分岐ターゲット・エントリの分岐データ（少なくとも予測される分岐ターゲット・アドレスを指定する）のいずれか、又は両方を暗号化することができる。タグ情報が新しい分岐ターゲット・エントリを割り当てる際暗号化キーを使用して少なくとも部分的に暗号化される場合、分岐ターゲット予測ルックアップの間、暗号化回路は命令フェッチ・アドレスについて決定されたターゲット・タグを現在の実行環境に関連付けられる（再計算された）暗号化キーを使用して暗号化することができ、分岐ターゲット予測回路は、分岐ターゲット・エントリのサブセットのいずれかがターゲット・タグに対応するタグ情報を指定しているかどうかを識別するために暗号化されたターゲット・タグを分岐ターゲット・エントリのサブセットのタグ情報と比較することができるか、又はルックアップされるエントリに記憶された暗号化されたタグ情報は復号化され（暗号化されていない）ターゲット・タグと比較されるか、のいずれかである。分岐データが新しいエントリを分岐予測構造に割り当てられる際に暗号化される場合、装置は、分岐ターゲット予測ルックアップでターゲット・タグに対応するタグ情報を指定するとして特定された分岐ターゲット・エントリのサブセットのうちの１つの分岐データの暗号化された部分を復号化するため復号化回路をさらに有する場合がある。
【００３４】
例えば、ある特定の実例では、分岐ターゲット予測ルックアップにおいて、ルックアップされた分岐ターゲット・エントリのサブセットのいずれもターゲット・タグに対応するタグ情報を指定しない場合、また命令フェッチ・アドレスが分岐命令を含む１つ又は複数の命令のブロックを指定する場合、暗号化回路は、現在の実行環境に関連付けられる暗号化キーを使用して分岐命令について決定された実際の分岐情報を暗号化することができ、分岐ターゲット予測回路は、分岐ターゲット・エントリを、暗号化された分岐情報及びターゲット・タグに対応するタグ情報を指定する分岐ターゲット予測構造に割り当てることができる。一方で、ルックアップのヒットの際、分岐ターゲット・エントリのサブセットのうちの１つがターゲット・タグに対応するタグ情報を指定する場合、そのエントリに記憶される分岐情報は、現在の実行環境に関連付けられる暗号化キーを使用して復号化することができ、また復号化された分岐情報は、所与の分岐命令について予測された分岐情報として出力することができる。
【００３５】
したがって、この実例では、分岐ターゲット予測構造内の分岐情報はその分岐情報に関連付けられる対応する実行環境に関連付けられる暗号化キーによって保護されるため、ある実行環境が分岐情報を割り当てる場合は、その環境はその環境に関連付けられるキーを使用して暗号化され、そうすると別の実行環境がそのエントリの同一のタグ情報を再利用する時に偽陽性ヒットが偶然に起こると、分岐情報は他の実行環境に関連付けられるキーを使用して復号化されることになり、同一の分岐ターゲット・アドレスを、エントリを割り当てた実行環境によって元々提供されたものとして示すことがない。通常、分岐予測器はデータのセキュリティ又は一貫性に影響を及ぼさない、純粋にパフォーマンス向上の対策として考えつくものであるため、分岐予測器で暗号化が有用であることは驚くべきことであるが、実行環境特有キーを使用して分岐情報を暗号化することにより、攻撃者がそれぞれの実行環境に関連付けられるキーを知らない場合、攻撃者が別の実行環境が分岐する位置を制御することがより困難であるため、上で議論したタイプの攻撃をずっと困難にする。
【００３６】
いくつかの実例では、暗号化回路及び復号化回路は、別個の回路を備えることができる。例えば、場合によっては、暗号化された分岐情報を復号化するために適用される演算は、分岐情報を暗号化するために適用される演算とは同一でなくてもよく、そのため別個の暗号化及び復号化の方法を適用することができる。代替的に、暗号化及び復号化の演算は実際に同一の演算であってもよい。例えば、暗号化演算は分岐情報及び暗号化キーに対して可逆的な演算（例えば、ＸＯＲ）を適用することを含むことができ、また復号化演算は暗号化された分岐情報及び暗号化キーに対して同一の可逆的な演算（例えば、ＸＯＲ）を適用することを含むことができる。したがって、いくつかの実例では、暗号化回路と復号化回路とは両方、ハードウェアに設けられる同一の回路に対応することができる（２つの別個の回路ユニットを提供することが必要とならない）。代替的に、暗号化及び復号化演算が同一であっても、分岐ターゲット予測構造のあるエントリについての分岐情報の復号化を、別のエントリについての分岐情報の暗号化と並行して実施することができるように、別個の暗号化及び復号化回路を設けることがなお有用である場合がある。
【００３７】
いくつかの実例では、暗号化キーは現在の実行環境に固定の静的なキーを含むことができる。したがって、それぞれの実行環境は、変わることのないある固定されたキーに関連付けられることができる。これは、攻撃者が、ある暗号化キーを使用して暗号化された値を復号化する結果を、暗号化で使用されたキーとは異なる復号化キーを使用して予測することをなお困難にできるため、十分なセキュリティを提供するために足る場合があり、この場合キーの１つ又は複数は未知である。複数の環境特有のキーは、それぞれの実行環境の記憶構造に記憶することができるが、複数の実行環境は大きい場合があるため、これは著しく大容量の記憶を要求することがある。現在の実行環境についての静的なキーを決定するための単純な手法は、複数の実行環境と現在の実行環境に特有の少なくとも１つの環境識別子とで共有される共通キーから静的なキーを導出することであり得る。例えば、共通キーは、上で議論したような、以前に生成された乱数であってもよい。例えば、共通キーは、上で言及したＡＳＩＤ、ＶＭＩＤなどの現在の実行環境の識別子に基づいてハッシュ化又は改変される場合がある。
【００３８】
別の手法では、暗号化キーは現在の実行環境に可変の動的なキーを含むことができる。したがって、環境ごとに変わるのと同様に、暗号化キーは特有の環境について時間ごとに変化することもできる。これは、攻撃者が、ある期間にかけてデータ処理システムの挙動を観察することによって所与の環境についてのキーを導出できる機会を低減するため、かなりのセキュリティを与えることができる。したがって、装置は、現在の実行環境についての更新された暗号化キーを生成するためのキー生成回路を備えることができる。例えば、キー生成回路は、必要とされる場合に所与の実行環境についての暗号化キーのために、新しい乱数値又は疑似乱数値を生成するために、線形帰還シフト・レジスタ（ＬＦＳＲ：ｌｉｎｅａｒ  ｆｅｅｄｂａｃｋ  ｓｈｉｆｔ  ｒｅｇｉｓｔｅｒ）などの乱数又は疑似乱数生成器を備えることができる。キーが更新されるタイミングは、任意であることができるか、又はある所定のイベントに応じたものであってもよく、或いは一定の時間期間若しくは分岐予測イベントの回数の満了においてであってもよい。いくつかの実例では、それぞれの分岐ターゲット・エントリのタグ情報は、クリアな状態で記憶されているため、タグ情報には暗号化も復号化も適用されない。これはタグの比較を単純にすることができる。分岐情報を暗号化することは、上で議論したような攻撃の確率を低減するのに足りる場合がある。
【００３９】
代替的に、分岐ターゲット・アドレスを示す分岐情報を暗号化することに加えて（又はその代わりに）、タグ情報は暗号化することができる。したがって、命令フェッチ・アドレスが分岐を含む命令のブロックを参照しているとして特定される場合、分岐ターゲット予測ルックアップでミスがあると、ターゲット・タグは、現在の実行環境に関連付けられる暗号化キーを使用して暗号化することができ、暗号化されたターゲット・タグは、割り当てられる分岐ターゲット・エントリについてのタグ情報として指定することができる。分岐ターゲット予測ルックアップにおいて、復号化回路が分岐ターゲット・エントリのサブセットのそれぞれのタグ情報を復号化することができ、分岐ターゲット予測回路は復号化されたタグ情報をターゲット・タグと比較することができる。代替的に、分岐ターゲットのルックアップから暗号化されたターゲット・タグは、分岐ターゲット予測構造に記憶される暗号化されたタグ情報と直接比較し、タグ同士が一致するかどうか特定することができ、復号化の必要性を回避する。
【００４０】
場合によっては、タグ及び分岐情報は、ある暗号化はタグに適用され別の暗号化は分岐に適用されて、別個に暗号化又は復号化することができ、この場合、タグの暗号化（所望であれば、暗号化された、又は復号化された形態で比較）を扱う手法のいずれかが使用され得る。しかしながら、他の実例では、タグ情報及び分岐情報は単一の暗号化スキームで共に暗号化することができる。暗号化された値が分岐情報及び環境特有の暗号化キーだけでなく、分岐に伴って与えられるタグ情報にも依存する場合（タグ情報は、分岐情報の暗号化についてさらなる乱雑さを与えることができる）、分岐情報に適用された暗号化を破ることが困難な場合があるため、これはさらなるセキュリティを与えることができる。しかしながら、この場合、一致エントリがあるかどうか確認するために、復号化されたタグがターゲット・タグと比較され得る前に、復号化回路はタグのブロック全体及びそれぞれのルックアップされたエントリの分岐情報を復号化する必要がある場合があるため、これは低速である可能性があり、もしそうであれば、復号化された分岐情報を出力することができる。
【００４１】
したがって、要約すると、暗号化／復号化のために遂行される手法、並びに分岐情報及びタグが暗号化される程度は、パフォーマンスとセキュリティとの所望のトレードオフに依存する可能性がある。
【００４２】
一般に、分岐ターゲット・アドレスを示すあらゆる情報を、分岐情報として使用することができる。いくつかの実例では、分岐情報（暗号化の前、又は復号化の後のクリアな状態で見た時）は明示的に分岐ターゲット・アドレスを示すことがある。分岐ターゲット・アドレスは、絶対アドレスとして、又は分岐ターゲット予測ルックアップが実施される現在の命令フェッチ・アドレスに対するオフセットを使用して相対アドレスとして示されることができる。いくつかの実例では、分岐ターゲット・アドレスは、分岐情報によって直接特定されなくてもよいが、分岐情報は分岐ターゲット・アドレスを特定する何らかの他の構造へのポインタを提供することができるか、又は分岐ターゲット・アドレスを計算するために使用することができる。したがって、一般に、分岐情報は、予測される分岐ターゲット・アドレスを決定できるようにする、あらゆる情報を含むことができる。
【００４３】
いくつかの実例では、分岐情報は分岐ターゲット・アドレス以外のあらゆる他の情報を指定しなくてもよい。しかしながら、いくつかの実例では、分岐情報は少なくとも１つの他の分岐情報をさらに示すことがあり、命令フェッチ・アドレスによって特定される１つ又は複数の命令のブロック内において分岐命令のいくつかの予測される性質を表現している。例えば、さらなる情報は、分岐が条件付きの分岐命令かどうか、分岐ターゲット・アドレスが分岐ターゲット予測構造とは別個の何らかの他の分岐ターゲット予測器を使用して予測されるべきかどうか（例えば、ターゲット・アドレスがその分岐に先行する過去の処理結果に応じて変化する多形（ｐｏｌｙｍｏｒｐｈｉｃ）分岐のターゲットを予測するための分岐ターゲット予測器）、又は分岐がファンクション・コール若しくはファンクション・リターンを表現しているかどうかを指定することができる。そのような追加的な分岐情報は、分岐ターゲット・アドレスを特定する情報と共に暗号化／復号化することができる。
【００４４】
ターゲット・タグは命令フェッチ・アドレスの性質の範囲に依存し得るが、一実例では、分岐ターゲット予測回路はターゲット・タグを、現在の実行環境に関連付けられる少なくとも１つの環境識別子に応じて決定することができる。これは異なる環境で生じる同一のアドレスについてなされた予測同士の偽陽性ヒットを回避することを助けることができる。例えば環境識別子は、アドレスに関連付けられる仮想マシンを識別する仮想マシン識別子、及び／又はアドレスに関連付けられるプロセスを識別するプロセス識別子を含むことができる。
【００４５】
ターゲット・タグが現在の実行環境に関連付けられる少なくとも１つの実行環境識別子に依存する場合、実行環境同士の間でターゲット・タグ値の再利用があるべきではないことを期待するかも知れない。しかしながら、実際には、データ処理装置によって実行され得る多くの異なる環境があり得るが、情報を分岐ターゲット予測構造に記憶されて有する異なる環境の数は、いつでもずっと少なくなる可能性がある。ひいては、それぞれのエントリのタグ情報の完全な環境識別子を表現することは、大量のビット数を必要とすることがあり、実際にはこの情報の多くは冗長であり得るが、それは分岐ターゲット予測ルックアップの目的について、現在の実行環境を、分岐ターゲット予測構造でキャッシュされた分岐情報を現在有する他の実行環境と区別することだけが必要とされるため、また、現在の実行環境を分岐ターゲット予測構造内で表現される分岐情報を有していない他の環境と区別する必要がないためである。したがって、完全な環境識別子を記憶することは、不必要にそれぞれの領域エントリのサイズを大きくし、比較器の数がタグ情報のそれぞれのビットをターゲット・タグと比較するために必要とされ、回路エリアを大きくする。
【００４６】
したがって、回路エリア及び電力消費を削減するために、いくつかの実装形態は、複数の領域エントリを有する領域テーブルを提供することができ、それぞれの領域エントリは分岐コンテキスト情報を、分岐コンテキスト情報よりも少ないビットを含む領域識別子にマッピングする。分岐コンテキスト情報は、対応する実行環境に関連付けられる少なくとも１つの識別子を含むことができる。分岐ターゲット予測ルックアップを実施する際、ターゲット・タグは、現在の命令フェッチ・アドレスに関連付けられる領域テーブルによって分岐コンテキスト情報（少なくとも１つの識別子を含む）にマッピングされるターゲット領域識別子に基づいて決定することができる。それぞれの分岐ターゲット・エントリについてのタグ情報は、実行環境の識別子の代わりに領域識別子を指定することができる。したがって、領域テーブルは、実行環境識別子の大量のセット、及び分岐コンテキスト情報を特定するために使用されるあらゆる他の情報を、分岐ターゲット予測構造内でタグとして使用されるより短い識別子に圧縮してエリアを節約することを、効果的に可能にしている。
【００４７】
そのような領域テーブルを使用する手法では、領域エントリの数は有限であり得るため、領域テーブルで割り当てられる対応する領域エントリをまだ有していない新しい実行環境に遭遇すると、以前異なる実行環境に割り当てられた領域エントリが現在の実行コンテキストについて再利用される必要がある場合がある。領域エントリが再利用される場合、対応する領域識別子は、依然として分岐ターゲット予測構造においてあるエントリについてのタグとして使用される場合がある。偽陽性ヒットを防ぐためにこれらの古くなった分岐ターゲット・エントリが分岐ターゲット予測構造から無効化されることがある一方で、そのような無効化を実施することは、再利用されている選択された領域識別子の情報を削除するために、分岐ターゲット予測構造をウォーク・スルーするための特殊な回路を必要とすることがあるため、パフォーマンス及び複雑性の観点からコスト高であり得る。実際には、あらゆるケースで、そのエントリに基づく分岐誤予測がある場合、古くなったエントリは削除されると期待されるため、このパフォーマンス・コストは正当化されない場合がある。したがって、領域テーブルを使用する実装形態は、領域テーブルの更新の際、分岐ターゲット・エントリを無効化しないようにする傾向があるため、分岐ターゲット予測構造で偽陽性ヒットとなりやすい。したがって、上で議論したような分岐情報の暗号化／復号化は、セキュリティを改善するために領域テーブルを使用する分岐ターゲット予測器について、特に有用である場合がある。
【００４８】
それぞれの実行環境に関連付けられる暗号化キーは、別個の記憶構造に記憶することができるが、領域テーブルが与えられると、それぞれの領域エントリが対応する実行環境に関連付けられる暗号化キーを指定すると効率的な場合がある。したがって、暗号化キーはターゲット領域識別子をルックアップするのと同時に領域テーブルから読み出され、別個の記憶構造の別個のルックアップの必要性を省くことができる。この手法は、すべての実行環境についての暗号化キーを記憶する必要がないことをさらに意味している。代わりに、キーは、領域テーブルによって領域識別子に現在マッピングされる特定の実行環境についてのみ維持され得る。他の実行環境については、分岐ターゲット予測構造に現在関与していないため、あらゆる暗号化キーを維持する必要がない。したがって、この手法は、記憶する必要があるキーの数をさらに低減することができる。
【００４９】
所与の実行環境に関連付けられる暗号化キーは、領域テーブルの所与の領域エントリによって与えられるマッピングがやはり更新される時に、更新され得る。つまり、領域テーブルの領域エントリが異なる実行環境に割り当てられなければならない時、マッピング更新後にその領域エントリに関連付けられる実行環境についての新しいキーを生成するために、その領域エントリについて指定された暗号化キーもやはり更新され得る。これは、ある環境に関連付けられる古いキーが新しい環境に対して同一なままとなることを防ぎ、ひいてはそれぞれの環境が異なるキーを使用することを確実にしている。
【００５０】
いくつかの実装形態では、領域テーブルによって領域識別子にマッピングされた分岐コンテキスト情報は、現在の実行環境を識別する１つ又は複数の実行環境識別子を含むことができるが、あらゆる他の情報を含むことができない。
【００５１】
しかしながら、他の手法では、分岐コンテキスト情報は他の情報にもやはり依存することがある。例えば、分岐コンテキスト情報は、以前の分岐ターゲット予測ルックアップによって所与の領域エントリが領域テーブルに割り当てられた命令フェッチ・アドレスの部分をさらに含むことがある。したがって、命令フェッチ・アドレスの一部は、領域テーブルをルックアップし、対応する領域識別子を特定するために使用され、これは命令フェッチ・アドレスのその部分を、分岐ターゲット予測構造のそれぞれの分岐ターゲット・エントリに、タグ情報として記憶する必要を回避している。しばしば、命令フェッチ・アドレスの最上位部分は、所与の実行環境によって使用される多くのフェッチ・アドレスと同一である場合があり、特定の実行環境の所与の時間フレーム内で使用されるすべての命令フェッチ・アドレスにわたって使用される、その最上位部分について異なる値の数は、比較的少ないことがある。したがって、領域テーブル内の命令フェッチ・アドレスのこの部分を表現し、それを実行環境識別子と共に短い領域識別子に圧縮することによって、それぞれの分岐ターゲット・エントリに必要とされるタグ記憶の量、及びターゲット・タグを記憶されたタグ情報と比較するための比較ロジックの量を低減することができる。
【００５２】
分岐ターゲット予測構造の他の形態は、所与の実行環境に関連付けられる実行環境識別子とは独立したタグを使用する可能性がある。例えば、分岐ターゲット予測構造のあるタイプを使用して、実行された以前の分岐に応じて挙動が変化する、ある分岐命令のターゲット・アドレスを予測することができる。例えば、所与の分岐命令の分岐ターゲット・アドレスは、例えばより前の条件付き命令の結果に応じて、それらの条件付き命令自身が分岐結果の過去の履歴に依存することがある、異なる可能な分岐ターゲット・アドレスの範囲の１つとして計算されることができる。そのような分岐ターゲット予測構造に関して、タグは命令フェッチ・アドレス、及び命令フェッチ・アドレスの命令に先行する以前の分岐命令の分岐結果の履歴に依存することがあるが、現在の実行環境の環境識別子とは独立していることができる。したがって、このタイプのタグでは、所与の命令アドレス及び分岐結果の履歴が異なる環境で生成された可能性があるため、タグのその値は複数の実行環境で再利用可能であることができる。異なる環境間の偽陽性ヒットに起因してｖｉｃｔｉｍ環境を攻撃者環境によって制御される何らかの命令アドレスへ強制的に分岐させようとする試行において、やはり、これは攻撃者に分岐ターゲット予測構造を、攻撃対象となる何らかのｖｉｃｔｉｍ環境で使用されると期待される所与の分岐履歴についての分岐情報でポピュレートさせる道筋を与える場合があり得る。上で議論したような分岐ターゲット予測構造において、分岐情報及び／又はタグ情報の暗号化（また、必要であれば復号化）を使用することによって、間違った環境の暗号化キーを使用して暗号化された分岐情報を復号化することは、攻撃者によって制御することができる既知のアドレスにたどり着く可能性が低いため、そのような攻撃をより困難にすることができる。
【００５３】
図１は、複数のパイプライン工程を含む処理パイプラインを有するデータ処理装置２の実例を概略的に図示している。パイプラインは、分岐命令の結果を予測するため、及びフェッチされる命令の一連のフェッチ・アドレスを生成するための、分岐予測器４を含む。フェッチ工程６は、フェッチ・アドレスによって特定された命令を命令キャッシュ８からフェッチする。デコード工程１０は、フェッチされた命令をデコードして、パイプラインの後続の工程を制御するための制御情報を生成する。リネーム工程１２は、レジスタのリネームを実施して、命令によって特定されたアーキテクチャ上のレジスタ指定子をハードウェアに設けられたレジスタ１４を特定する物理レジスタ指定子にマッピングする。レジスタのリネームは、アウトオブオーダー実行をサポートするために有用である場合があるが、これにより、同一のアーキテクチャ上のレジスタを指定する命令間の障害を、それらをハードウェア・レジスタ・ファイル内の異なる物理レジスタにマッピングすることにより除去できるからであり、命令がキャシュ８からフェッチされた際のそのプログラム順とは異なる順で実行することができる見込みを高め、オペランドが利用可能になるのを前方の命令が待機している間に後方の命令が実行できるようにすることによってパフォーマンスを改善することができる。アーキテクチャ上のレジスタを異なる物理レジスタにマッピングする機能は、分岐誤予測が起こった場合にアーキテクチャ的な状態のロール・バックをさらに促進できる。発行工程１６は、実行待ちの命令を、それらの命令を処理するために必要とされるオペランドがレジスタ１４で利用可能になるまでキューイングする。実行工程１８は、対応する処理演算を実行するための命令を実行する。ライトバック工程２０は、実行された命令の結果をレジスタ１４に書き戻す。
【００５４】
実行工程１８は、分岐命令が正しく予測されていたかどうかを評価するための分岐ユニット２１、算術又は論理演算を実施するための算術論理ユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ  ｌｏｇｉｃ  ｕｎｉｔ）２２、浮動小数点オペランドを使用する演算を実施するための浮動小数点ユニット２４、及びメモリ・システムからのデータをレジスタ１４にロードするためのロード演算、又はレジスタ１４からのデータをメモリ・システムに格納するためのストア演算を実施するためのロード／ストア・ユニット２６などの複数の実行ユニットを含むことができる。この実例では、メモリ・システムは、レベル１命令キャッシュ８、レベル１データ・キャッシュ３０、データと命令との間で共有されるレベル２キャシュ３２、及びメイン・メモリ３４を含むが、これは可能なメモリ・ヒエラルキの一実例に過ぎず、他の実装形態ではさらなるキャシュのレベル又は様々な配置構成を有することができることを了解されたい。ロード／ストア・ユニット２６は、トランスレーション・ルックアサイド・バッファ３６を使用することがあり、フェッチ・ユニット６はトランスレーション・ルックアサイド・バッファ３７を使用して、パイプラインによって生成される仮想アドレスをメモリ・システム内の位置を特定する物理アドレスにマッピングすることができる。図１に示されるパイプラインは一実例に過ぎず、他の実例はパイプライン工程又は実行ユニットの様々なセットを有する場合があることを了解されたい。例えば、インオーダ・プロセッサはリネーム工程１２を有していないことがある。
【００５５】
図２は、割り当てられる新しい分岐予測状態エントリを生成するために分岐予測器４へ入力を与える実例を図示している。入力には複数ビットが含まれる。例えば、この実例の入力は、分岐として特定された命令の命令アドレス、及び分岐が実行される時に分岐先のアドレスを示す分岐デスティネーション・アドレス（ターゲット・アドレス）を指定する。コーディング回路５２は、一連の命令が実行されている現在の実行環境に関連付けられる値５４に基づいて、入力の少なくとも一部のビットに対するエンコード演算を実施するために提供される。エンコード演算から得られるエンコードされた入力値は、次いで分岐予測回路４に与えられる。例えば、エンコードは、入力の命令アドレス又はデスティネーション・アドレスの一方又は両方の、すべて又は一部に適用することができる。
【００５６】
図３Ａ〜図３Ｃは、エンコード演算を実施する異なる実例を図示している（実例図３Ａ及び図３Ｂでは、分岐のデスティネーション・アドレスの一部に適用されているが、実例図３Ｃのように命令アドレスに適用することもできる）。図３Ａ〜図３Ｃで示されるように、入力アドレスの一部のビットはエンコード演算を残りのビットに適用される前に除去することができる。図３Ａでは、現在の実行環境（又は現在の実行パーミッション）に関連付けられる値から導出されたキーに基づいて、残りのビットの相対的順序の再配置が実施される。例えば、キーによって指定されるビット数分の右シフト、又は何らかの他のビットの並べ替えを実施することができる。図３Ｂの実例では、エンコード演算は、キーと分岐予測器への入力の選択されたビットとのＸＯＲとして実施される。ＸＯＲは、対応するキーに基づいてさらなるＸＯＲを実施することにより逆エンコード演算を実施することができる、可逆的なエンコード演算の実例である。図３Ｃの実例では、キーに基づいて選択された入力のビットにハッシュ関数を適用することができる。キーはエンコードされる選択されたビットと同じビット数を含む必要はないことに留意されたい。一般に、適用されるエンコードの特定の形態に関わらず、入力の一部の値は、エンコードされる入力を分岐予測回路に与える前に変更されたそのビット値を有している。デスティネーション・アドレスのエンコードを示している図３Ａ及び図３Ｂの実例では、除去されたビットは、逆エンコードを適用する時にその値が推論され得るか、又は知られている、ビットである場合がある。例えば、命令が既にそれらのサイズにアラインされている場合、アドレスの１つ又は複数の下位ビットを、常にそれらがゼロであるように除去することができる。同様に、デスティネーション・アドレスが命令アドレスからのオフセットとして表現されている場合、上位ビットは常にゼロである可能性があるため、逆エンコードを適用する際それらを復元する必要性がないことからコーディングを適用する前に除去することができる。対照的に、命令アドレスのエンコードについて、この手法では逆エンコードが必要ではなく、また変形は一方向変形であり得るため、除去されたビットが逆エンコードによって復元され得ることを確実にする必要がない。
【００５７】
図４Ａ〜図４Ｂは、所与の命令アドレスを指定するクエリに応答して予測された分岐情報を取り出すために分岐予測回路をクエリする２つの実例を示している。図２のコーディング回路５２が、エンコード演算を分岐のデスティネーション・アドレスの少なくとも一部のビットに適用する実例において、図４Ａが使用され得る。この実例では、分岐予測がなされる命令アドレスを指定する分岐予測回路に、クエリが与えられる。分岐予測回路４は、その記憶構造のルックアップを実施して、いずれかのエントリがクエリに一致するかどうかを特定し、あるエントリが一致する場合、エンコードされたデスティネーション・アドレス（現在の実行環境に関連付けられる値５４に基づいてコーディング回路５２によって生成された）が取り出され、出力される。逆エンコード回路５６（いくつかの実施例ではコーディング回路５２と同一である場合があり、又は実装されるエンコード／デコードのアルゴリズムに応じて異なっていてもよい）は、（図２のように）一致する分岐予測エントリが分岐予測回路に書き込まれた時点ではなく分岐予測回路のクエリが実施された時点の現在の実行環境５４に関連付けられるパラメータに基づいて再計算されていることを除いて、図２で使用された現在の実行環境５４に関連付けられる値と同じ方法で形成される再計算キー５８に基づいて、エンコードされるデスティネーション装置へ逆エンコード演算を適用する。したがって、クエリがエントリを割り当てたのと同一の実行環境によってトリガされた後に一致エントリがアクセスされる場合、逆エンコード回路５６によって出力される得られるデスティネーション・アドレスは、図２で入力として元々与えられたデスティネーション・アドレスと同一となる。しかしながら、一致エントリがそのエントリを割り当てたのとは異なる実行環境からアクセスされる場合、デコードされるデスティネーション・アドレス６０は元々割り当てられたものとは異なる。エンコード／逆エンコードのアルゴリズム、及び／又はキー（若しくはキーを生成するために使用される方法）は、攻撃者が逆エンコードされたアドレス６０（アドレスをエンコードしたのとは異なるキーを使用して逆エンコードされる場合）を、攻撃者が一部の他の実行環境を分岐させたい所望の分岐ターゲット・アドレスに一致させるためにデスティネーション・アドレスのどの代替的な値を図２で入力として与えるべきかを予測することを困難にするよう選択することができる。
【００５８】
図４Ｂは、エンコード演算がコーディング回路５２によって命令アドレス（又は、分岐予測回路４で一致エントリを位置付けるために使用される他のタグ情報）に適用される実例において分岐予測回路４をクエリするために使用される代替的な手法を示している。この場合、分岐情報の検索を実施するために分岐予測回路４をクエリする際、対応するコーディング回路５２（図２で使用されるものと同一の物理回路である可能性があり、又は異なる回路である可能性がある）は、同一のエンコード演算を、現在の実行環境に関連付けられる識別子に基づいて再計算された再計算キー５８（分岐予測器にクエリする時点で再計算される）に基づいてクエリされた命令アドレスに適用し、例えば、キーにしたがって命令アドレスをエンコードするために一方向ハッシュを適用する。この手法では、分岐予測回路４から出力されたデータはエンコードされる必要がなく、代わりに分岐予測器へ入力として与えられるクエリと、クエリに一致すると思われる分岐予測器での位置とのマッピングをスクランブルすることによって攻撃に対する耐性が提供されるため、可逆的な演算を使用することは必須ではない。したがって、分岐予測回路４は、ハッシュ化されたクエリ情報に基づいて検索され、一致エントリから出力されるデスティネーション・アドレス６２は、あらゆる逆エンコードを適用されることなくクリアな状態で出力され、クエリ入力として与えられる命令アドレスによって表現される分岐のための予測される分岐ターゲット・アドレスとして使用され得る。
【００５９】
図５は、現在の実行環境に関連付けられる複数の識別子からキーを形成する実例を示している。これらの識別子は、処理パイプライン２に関連付けられる１つ又は複数の制御レジスタから取得することができ、これらは現在の実行環境の性質を指定する。例えば、キーは以下のいずれかに基づくことができる：
・例外レベル７９
・実行特権レベル８０
・アドレス空間ＩＤ（ＡＳＩＤ）８１
・仮想マシンＩＤ（ＶＭＩＤ）８２
・セキュリティ状態（ＮＳ）８３
・物理コア数８４
・論理コア数８５
・真の乱数、又は疑似乱数であり得る、乱数値８６。（疑似）乱数は、それぞれの論理プロセッサに関して異なる論理プロセッサごとの（疑似）乱数８９、それぞれの物理プロセッサ・コアに関して異なる物理プロセッサごとの（疑似）乱数９０、及びデータ処理システム内のすべての論理又は物理プロセッサ・コア間で共有されるが、あるシステム上でのキー・ブレイクが別のシステムで再利用され得る機会を低減するためにシステムごとに異なっている、システム（疑似）乱数９１、のうちの少なくとも１つから導出することができる。（或いは、これらのうちの任意の１つ又は複数）。乱数のこれらの要素８９、９０、９１のそれぞれは、データ処理装置２がスタート・アップする都度、更新され得る。
・１つ又は複数のソフトウェア書き込み可能レジスタ値８７、エンコード演算についてさらなる乱雑さを与えるためにソフトウェアの制御下でレジスタ１４に書き込むことができる。
・コンテナＩＤ８６（最も制限されるアクセス権を有する最低の特権レベルにある実行環境の異なる部分を区別する識別子）。
【００６０】
もちろん、特定の実装形態について、これらのパラメータのすべてを考慮する必要はない。一般に、現在の実行環境に関連付けられる１つ又は複数の識別子８０〜８５、８８に基づいて、また任意選択でソフトウェア定義値である乱数などのさらなるパラメータに基づいて、エンコード演算（及び、必要であれば逆エンコード演算）用のキーを生成することによって、異なる特権レベルを有する２つの異なる実行環境は、同一のキーを有する可能性は低く、そのため攻撃者がある実行環境において、多くのデータ・アクセス特権を有する実行環境を騙してセキュアなデータの露出を導き得る悪意のあるコードへ分岐させるように分岐予測器を訓練することが困難である。さらには、（疑似）乱数値をキー生成プロセスに追加することにより、攻撃者がどのキーかを決定することがなお困難となる。特に、乱数値を使用することは、攻撃者があるシステムに対して完全なアクセスを有していたとしても、リバース・エンジニアリングによって得られたいかなる情報も、（疑似）乱数値が異なるために別のシステムに使用されるキーを予測するために使用することができないことを意味している。同様に、それぞれの論理プロセッサ・コアでそれぞれの実行環境ごとに生成された異なるキーを有することが望ましい場合がある。複雑さとパフォーマンス上の理由から、論理プロセッサごとに別個の（疑似）乱数生成器を有することが望ましくない場合がある。この場合、キー生成プロセスにおいて、論理及び／又は物理コア数を伴う、プロセッサごと又はシステム・レベルごとの（疑似）乱数を使用することによって、同一の結果を得ることが可能な場合がある。いくつかの実施例では、キー生成プロセスは、様々なキー入力を共にハッシュ化することを含む場合がある。使用されるハッシュ化アルゴリズムは、（セキュアな）一方向ハッシュであり得る。
【００６１】
つまり、いくつかの実例では、キーは少なくとも１つのキー入力パラメータに適用される一方向変形に基づいていることがあり、この場合、少なくとも１つのキー入力パラメータは、現在の実行環境に関連付けられる少なくとも１つの値を含むが（例えば、ＡＳＩＤ、ＶＭＩＤ、又は上で議論した例外レベル）、ソフトウェア書き込み可能値の乱数などの他の入力を含むこともできる。キーを生成するために一方向変形を使用することによって、これは攻撃者が１つを除くすべての入力を観察でき、アルゴリズムを知っており、また生成されたキーのいくつかを観察できたとしても、攻撃者が欠落している入力（例えば、乱数）が何であるかを理解することができないことを意味しており、ひいては攻撃者が異なる実行環境用のキーが何であるかを予測することができないことを意味している。
【００６２】
図６は、フェッチ工程６が遭遇する命令フェッチ・フォールト、及び／又はデコード工程１０が遭遇する命令デコード・フォールトのレートを監視するために監視回路９５が設けられる実例を示している。フェッチ・フォールトのレートとデコード・フォールトのレートとは、別個に監視されてもよく、又は組み合わされたレートとして監視されてもよい。また、いくつかの実例では、これらのタイプのフォールトのうち１つだけが監視されてもよい（例えば、フェッチ・フォールトのみ、又はデコード・フォールトのみ）。フェッチ及びデコード・フォールトは様々な理由で発生することがあるが、１つとしては分岐予測器４による分岐誤予測を挙げることができる。攻撃者が分岐予測器を使用して上で議論したような攻撃をさせるよう試行する場合、より頻繁な分岐誤予測がある可能性がある。したがって、命令フェッチ及びデコード・フォールトのレートを、攻撃が仕掛けられているかのヒントを与え得るインジケータとして使用することができる。監視回路９５は、一定のしきい値による所与の期間において命令フェッチ又はデコード・フォールトのレート数の増加が検出された場合、エラー応答をトリガする（割り込み又は例外を発生させるなど）ことができる。図７は、連続的な時間の持続時間Ｔにおいて、命令フェッチ・フォールトのレートを集計するグラフを示している。図７に示すように、命令フェッチ・フォールトのレートにおける増加が、ある期間から次の期間の間に、しきい値（例えば、２０％）を上回って増加している場合、フォールト・ハンドリング応答がトリガされ得る。当業者であれば、本発明の範囲内で攻撃を検出するためにフォールト・レートを使用する多くの方法があることが了解されよう（例えば、所定のしきい値と比較する、又はプログラムの以前の実行のフォールト・レートと比較する）。ソフトウェアがそのような例外に対してどのように応答するよう選択するかは、変わることがあるが、これは攻撃が進行中であることをソフトウェアに伝達する手段を提供する。
【００６３】
図８は、分岐予測器４の別の実例を概略的に図示しており、分岐命令が遂行されるか、遂行されないかを予測するための分岐方向予測器（ＢＤＰ：ｂｒａｎｃｈ  ｄｉｒｅｃｔｉｏｎ  ｐｒｅｄｉｃｔｏｒ）１４０、遂行される場合に分岐命令がプログラムの実行をリダイレクトする先のターゲット・アドレスを予測するための分岐ターゲット・バッファ（ＢＴＢ：ｂｒａｎｃｈ  ｔａｒｇｅｔ  ｂｕｆｆｅｒ）１４２、及びキャシュ８からフェッチされるプログラム命令のブロックを特定するフェッチ・アドレスをキューイングするためのフェッチ・キュー１４４（場合によっては、フェッチ・キューは分岐予測器４の一部の代わりにフェッチ工程６の一部と見なされることがあるが、機能性は同一であることに留意されたい）を含む。フェッチ・キュー１４４に配置されるアドレスは、命令キャッシュ８からフェッチされる命令のブロックのアドレスを表現しており、分岐予測器の以前の予測から導出される。キャシュ８から１ブロックでフェッチされる命令の単位は、「フェッチ・ブロック」と称されることがあり、一定のデフォルトのサイズ、例えば、１６、３２、又は６４バイトを有することができるが、場合によっては、フェッチが実施される開始アドレスが自然なフェッチ・ブロック境界とアラインしていない場合、デフォルトのサイズよりも小さなサイズで部分的なフェッチ・ブロックのフェッチが実施される場合がある。
【００６４】
分岐履歴バッファ又は分岐結果予測器とも称されることがあるＢＤＰ１４０は、分岐命令が、遂行される／遂行されない、の結果を予測するための分岐履歴情報を記録する。あらゆる既知の分岐が遂行される／遂行されない、の予測スキームが、ＢＤＰ１４０のために使用され得る。例えば、ｇｓｈａｒｅ又はＴＡＧＥが、既知の分岐方向予測アルゴリズムの実例である。
【００６５】
ＢＴＢ１４２は、分岐命令について命令アドレスの一部に対応するタグによって特定された複数の分岐命令についての予測情報を保持している（また、可能性としては、コンテキスト識別子、又は現在の実行環境の他の識別子などの他の情報に依存する）。予測情報は、分岐についてのターゲット・アドレス、並びに対応する分岐命令の命令アドレス（プログラム・カウンタ、すなわちＰＣ（ｐｒｏｇｒａｍ  ｃｏｕｎｔｅｒ））、分岐に関するいくつかの属性（例えば、間接的、条件無し、ファンクション・コール、ファンクション・リターン、・・・かどうか）などの他の情報、又は以下で説明するような分岐の結果を予測するための他の情報を示すことができる。
【００６６】
分岐予測器４は、多形である分岐命令のターゲット・アドレスを予測するために使用される特殊な種類の分岐ターゲット・バッファである、マルチターゲット分岐のターゲット予測器１４６をさらに含み、つまりそれらの分岐ターゲット・アドレスは時々変化するため、同一の命令フェッチ・アドレスにおける分岐命令の実行の異なるインスタンスは、分岐を進める以前の命令の結果に応じて異なるターゲット・アドレスとなる場合がある。ＢＴＢ１４２及びマルチターゲット間接分岐ターゲット予測器１４６の両方は、分岐ターゲット予測構造の実例である。さらに、分岐予測器４は、コンテキスト識別子を、ＢＴＢ１４２用のタグ情報として使用される短い領域識別子に圧縮するために使用される領域テーブル１４８を備える。
【００６７】
フェッチ工程６が、命令キャッシュ８から命令のブロックをフェッチするために、所与のフェッチ・アドレスについて新しいフェッチを開始する時、分岐予測器４は、ＢＤＰ１４０、ＢＴＢ１４２及びマルチターゲット分岐のターゲット予測器１４６において、そのフェッチ・アドレスをさらにルックアップする。ＢＴＢ１４２が、現在のフェッチ・アドレスによって表現されるプログラム・カウンタ・アドレスについての分岐ターゲット・アドレスを含む予測された分岐情報を保持する場合、その情報は、ＢＴＢ１４２から読み出され、ＢＤＰ１４０によって認められる。ルックアップは、分岐予測制御ロジック１５０によって制御することができる。ＢＤＰ１４０によって、分岐が遂行されないと予測される場合、分岐予測制御ロジック１５０は、次のフェッチ・アドレスとして、加算器１５２によって一定のストライド量の分、インクリメントされた現在のフェッチ・アドレスのインクリメントされたバージョンを選択し、それによって以降のサイクルで使用される次のフェッチ・アドレスは、現在のフェッチ・アドレスから順次続いていく。一方で、ＢＤＰ１４０が、分岐が遂行されると予測される場合、分岐予測制御ロジック１５０は次のフェッチ・アドレスとして、ＢＴＢ１４２によって出力される予測された分岐ターゲットを選択する。いくつかの命令フェッチ・アドレスについて、ＢＴＢ１４２は、アドレスが以前に多形であるとして検出された分岐を含む命令のブロックを参照することを示す属性を出力することがあり、この場合、多形の分岐属性は分岐予測制御ロジック１５０を制御して、マルチターゲット分岐のターゲット予測器１４６によって出力される分岐ターゲット・アドレスを、ＢＴＢ１４２の出力の代わりに、次のフェッチ・アドレスとして選択する。マルチターゲット分岐のターゲット予測器は、その予測されたターゲット・アドレスを、現在の命令フェッチ・アドレスによって特定される現在の実行ポイントに先行する昔の分岐の分岐履歴を元にしており、分岐履歴とは無関係なＢＴＢ１４２によってなされる予測とは対照的である。
【００６８】
分岐予測制御ロジック１５０によって出力される次のフェッチ・アドレスは、フェッチ・キュー１４４に割り当てられ、それによって、やがてアドレスがキューの手前に到達すると、フェッチ工程６によって対応する命令のブロックが命令キャッシュ８からフェッチされる。さらに、次のフェッチ・アドレスは、そのフェッチ・アドレスについての分岐予測器４の別のルックアップをトリガするために、以降の処理サイクルにおいて現在のフェッチ・アドレスとして入力される。このプロセスは、実行中のプログラム・コードをステップ実行するために、サイクルごとに続く。分岐ユニット２１で分岐誤予測が検出された場合、分岐命令の実際の結果が分岐予測器４によって生成された予測された結果と異なる時、信号がフェッチ工程６に送信し戻され、フェッチ・キューをリセットして実際の分岐ターゲット・アドレスからのフェッチを再開し、将来的に予測が正しい可能性を高めるべく分岐の実際の結果に基づいて様々な予測構造１４０、１４２、１４６の内容を更新する。
【００６９】
要約すると、ＢＴＢ１４２（分岐ターゲット・アドレス・キャッシュ（ＢＴＡＣ：ｂｒａｎｃｈ  ｔａｒｇｅｔ  ａｄｄｒｅｓｓ  ｃａｃｈｅ）としても知られることがある）は、分岐の予測されるターゲット・アドレスを特定するために使用される分岐予測器４の構成要素である。したがって、ＢＴＢは事実上、それぞれのエントリが分岐位置（分岐命令の、プログラム・カウンタ、又は分岐命令アドレス）、分岐についての予測されたターゲット・アドレス、及び可能性としては分岐が条件付きかどうか、また例えば分岐がファンクション・コール又はファンクション・リターンを表現しているかどうかを指定する属性などの他の傾向を与える、小さなエントリのキャッシュであることができる。異なる実行コンテキスト（例えば、プロセッサ２又は異なる仮想マシンによって実行中の、異なるプロセス）は異なる分岐を参照するために同一の仮想アドレスを使用することがあるため、不必要なアドレス衝突を回避するためにそれぞれのＢＴＢエントリは、プロセス識別子及び／又は仮想マシン識別子などのコンテキスト情報でタグ付けされてもよい。
【００７０】
図９は、領域テーブル１４８を使用しない実施例における、ＢＴＢの実装形態を示している。この実例では、ＢＴＢ１４２は、それぞれのエントリ１５６がＢＴＢルックアップの際そのエントリが現在のフェッチ・アドレスに関連するか特定するためのタグ情報を与えるタグ部分１５８を含む複数のエントリ１５６と、分岐ターゲット・アドレス１６６及び現在の対応する分岐に関連付けられるあらゆる他の情報１６８を含む予測された分岐情報を与えるデータ部分１６０とを含む。この実例では、タグ部分１５８は、タグ情報として、対応する分岐が実行され命令フェッチ・アドレス１６４が分岐に対応している（命令のブロックのプログラム・カウンタが分岐を含んでいる）実行環境（コンテキスト）を識別する１つ又は複数の実行環境識別子１６２を指定する。データ部分は、分岐ターゲット・アドレス１６６、及び分岐が条件付き、ファンクション・コア、ファンクション・リターンなどかどうかを指定する属性などの他の情報１６８を含む。
【００７１】
いくつかの実装形態では、データ部分１６０は、（図９には図示していないが）分岐アドレス１６４の最下位ビットをさらに含むことができる。これは、複数の命令がサイクルごとに実行される、スーパスカラのプロセッサで有用である場合があり、この場合、分岐予測器４は複数命令のブロックを並列に予測する必要があるため、それぞれのエントリが命令のブロックにマッピングする場合がある。命令フェッチ・アドレスの最下位ビットは、ブロック内のあらゆる命令がエントリに対して一致できるよう、タグ部分１５８から排除されることがある。しかしながら、所与のエントリによって表現されるブロックからの命令フェッチ・アドレスが入力されても、命令フェッチ・アドレスがそのエントリに関連付けられるブロックで発生する最後の分岐のアドレスよりも後方である場合、その命令フェッチ・アドレスの後で分岐は発生せず、そのためその分岐に関連付けられる分岐予測は実行されるべきではない。したがって、分岐ターゲット・アドレス・エントリ１５６のデータ部分１６０で分岐アドレスの最下位ビットを含むことにより、これはＢＴＢ１４２でルックアップされた現在の命令フェッチ・アドレスが与えられた場合、一致エントリによって表現される予測が実行されるべきかどうかの判断を可能にする。
【００７２】
ＢＴＢに与えられるキャッシュは、様々な方法で実装することができる。いくつかの実例では、キャッシュは、所与の分岐についての分岐情報がＢＴＢ内のあらゆる場所に配置できるように、ｆｕｌｌｙ  ａｓｓｏｃｉａｔｉｖｅであることができる。しかしながら、実際にはｓｅｔ−ａｓｓｏｃｉａｔｉｖｅキャッシュの実装形態がより効率的である場合があり、この場合、所与の分岐についての分岐情報を記憶できる場所は、分岐ターゲット・バッファのルックアップの間に所与のフェッチ・アドレスについてルックアップされなければならないエントリの数を低減するために、特定のセット（分岐を含む命令ブロックの命令フェッチ・アドレスに基づいて特定される）に限定される可能性がある。
【００７３】
典型的には、十分に高いパフォーマンスを提供するために十分な分岐情報を記憶することができるように、ＢＴＢは比較的多数、例えば数千のエントリを有することができる。しかしながら、実際には、１つの実行コンテキストはそのコンテキストの多くの命令についてキャッシュされた分岐情報を有することができるため、所与の時間にＢＴＢに記憶された情報を有するコンテキストの数は例えば最大１０などずっと少ない可能性がある。やはり、所与のコンテキストに関連付けられる分岐命令の多くは、分岐命令アドレス１６４の上位の部分について同一の値をすべて共有することができる。このことは、図３に示される方法で実装されている場合、識別子の完全なコンテキストを明示的に示しているため、タグ情報１５８が大量の冗長な情報を含むことがあることを意味しており、完全な分岐命令アドレスはタグ１５８について比較的多数のビットを必要とする場合があり、ＢＴＢ１４２に必要な回路エリアを増加させ、ＢＴＢ１４２のルックアップ中にタグの比較に必要とされる比較器の数も増加させる。
【００７４】
図１０に示すように、ＢＴＢのエリア効率を改善するために、分岐予測器４は、領域テーブル１４８を使用してこの冗長な情報を短いタグ値に圧縮することができる。図１０の実例では、ＢＴＢのそれぞれのエントリ１５６は、やはりタグ部分１５８及びデータ部分１６０を有しており、データ部分１６０は図９と同一である。しかしながら、ＢＴＢ１５２内でタグ１５８の実行コンテキスト識別子１６２及び完全な分岐命令アドレス・タグ１６４を表現する代わりに、タグ部分は代わりに分岐命令アドレスのタグ部分の下位部分１６９、並びにコンテキスト識別子１６２及び分岐命令アドレスの上方部分１６７を指定する領域テーブル内の対応する領域エントリ１７０を指す領域識別子１７１のみを指定する。図１０では、それぞれの領域エントリ１７０に領域識別子は明示的に示されていないが、対応する領域エントリ１７０のインデックスから暗示されていることに留意されたい（例えば、領域テーブルの第１のエントリは領域識別子＃０に関連付けられ得、次のエントリは領域識別子＃１に関連付けられ得るなど）。領域テーブル１４８は、ＢＴＢ１４２よりずっと小さい場合があり、例えば１０から１００の間のエントリを有し、図１０の実例で例えば３２などである。ＢＴＢ１４２をルックアップする時、現在の実行コンテキスト及びプログラム・カウンタの上方ビット（例えばビット４８〜２１）を特定する１つ又は複数のコンテキスト識別子が、領域テーブル内でルックアップされ、対応する領域識別子を特定し、次いで領域識別子及びプログラム・カウンタのタグ・ビットの下位部分（例えばビット２０〜１６）がＢＴＢ１４２をルックアップするためのタグ情報として使用される。プログラム・カウンタの最下位ビット（例えば１５〜０）は、ｓｅｔ  ａｓｓｏｃｉａｔｉｖｅのＢＴＢ１４２の対応するセットにインデックス付けするために使用されるビットであるため、タグでは全く使用されないことに留意されたい。したがって、領域テーブル１４８によって、ＢＴＢエントリ１５６のタグ部分１５８のサイズを小さくすることができる。これは、ＢＴＢ１４２をルックアップする目的のために、現在の実行コンテキストをすべての他の実行コンテキストと区別することは必須ではなく、代わりに必要なことは現在の実行コンテキストをＢＴＢ１４２で分岐情報を現在有しているあらゆる他の実行コンテキストと区別することである、という事実を活用している。
【００７５】
しかしながら、図１１に示すように、領域テーブル１４８を使用してＢＴＢ１４２を実装する場合、これは分岐予測器４が、ある実行コンテキストからの分岐が、異なる実行コンテキストによって割り当てられたＢＴＢエントリの分岐情報と一致すると判断する、何らかの偽ヒットにつながることがある。これは、領域テーブル１４８への更新の前後での、ある実例におけるＢＴＢの内容を示している、図１０と図１１を比較することで分かる。図１０では、ＢＴＢはａｄｄｒ１、ａｄｄｒ２、ａｄｄｒ３において、現在３つの分岐についての分岐情報をそれぞれ含んでいる（それぞれエントリ１５６−１、１５６−２、１５６−３によって表現されている）。エントリ１５６−１及び１５６−３によって表現される分岐は、領域テーブル・エントリ＃Ａによって表現されるプロセス１に関連付けられ、ＢＴＢエントリ１５６−２によって表現される分岐は、領域テーブル・エントリ＃Ｂによって表現されるプロセス２に関連付けられる。
【００７６】
図１１に示すように、次に第３のプロセスが分岐命令を実行し、情報をＢＴＢ１４２に割り当てることを必要とするが、プロセス３は割り当てられた領域テーブル１４８にエントリを現在１つも有していない。すべての領域テーブル・エントリが既に占有されている場合、これは領域エントリ１７０を削除して新しいプロセスに再割り当てするよう要求するため、例えば、以前はプロセス１に割り当てられていた領域エントリ１７０−１は、今度はコンテキスト識別子及びプロセス３に関連付けられる上方アドレス・ビットを提供するように更新され得る。分岐ターゲット・バッファ・エントリ１５６−１は、以前の分岐１をプロセス３に関連付けられる新しい分岐で置き換えるように、さらに更新され得る。しかしながら、更新された領域テーブル・エントリの領域識別子＃Ａを指定している別のＢＴＢエントリ１５６−３は、この工程で無効化されなくてもよく、以前はプロセス１に関連付けられていた分岐３に関連付けられる情報を提供し続けることができる。領域テーブルへの更新があった場合に、そのような古くなった分岐を除去するためにＢＴＢ１４２をウォーク・スルーするための無効化ロジックは、通常は用意されないが、その理由は、さらなる回路を必要とすることになるからであり、また、そのような誤った分岐情報は、予測がその情報に基づいてなされる場合あらゆるケースで検出可能であると期待されるが、その理由は実行工程１８において分岐の実際の分岐結果は、間違った実行コンテキストからの分岐予測データが使用される場合は予測とは異なり、そして関与するＢＴＢエントリの無効化がトリガされ得るからである。これがパフォーマンスの低下を引き起こすことがある一方で、実際には領域テーブル識別子の再利用とは関連しない他の理由で誤予測が起こる可能性があるが、処理パイプライン２における同一の誤予測解決ロジックを再利用することができるため、これは大きな問題ではない。したがって、領域テーブル１４８を使用する典型的なＢＴＢ実装形態では、更新されている領域テーブル・エントリにマッピングする領域識別子を有するエントリは、図１１で示される実例１５６−３のように、異なる実行コンテキストによって割り当てられた古くなった分岐情報と存続し続けることがある。
【００７７】
したがって、領域テーブル・エントリが更新される場合、ＢＴＢ１４２の古いエントリは、更新された領域テーブル・エントリに割り当てられる新しいプロセスからの後続の分岐命令に対してヒットすることがあり、これは異なる実行コンテキストからの以前に割り当てられた分岐情報に対する偽ヒットを引き起こす場合がある。以前、このことはセキュリティの問題ではなく、パフォーマンスの問題と見なされるだけであった。しかしながら、攻撃者が、攻撃者の制御下にない別の実行コンテキストの投機的実行を制御して、そのプロセスによって管理される秘密データについての情報を露出させるために、ＢＴＢのこの性質を使用することができることが認識されている。これは、以下の条件の両方が満足される場合に可能である：
・条件１：プロセスＡが、別のプロセスＢによってＢＴＢ１４２に与えられたターゲット・アドレスを使用することができる。
・条件２：プロセスＢが、プロセスＡによってアクセスされるＢＴＢエントリのターゲットを制御することができる。
図１１の上の実例では、異なるコンテキスト間のＢＴＢにおいてタグ情報として使用される領域識別子の再利用により、プロセス３はプロセス１によって与えられるターゲット・アドレスを使用することができる（条件１）。やはり、プロセス１は、プロセス３によってアクセスされるＢＴＢエントリのターゲットを制御することができるが、その理由はプロセス３の分岐とタグ・ビット［２０：１６］を共有する所望のターゲット・アドレスで分岐を実行することができるからであり、それによって、所望のターゲット・アドレスは、プロセス３によってヒットされるＢＴＢ１４２のエントリに割り当てられることになる。より一般的には、これらの条件は、タグ情報１５８の値が複数の実行コンテキスト間で再利用することができる分岐ターゲット予測構造で生じる可能性がある。領域テーブルは、これが生じ得る理由の１つであるが、他の理由は単純にタグ情報が現在の実行コンテキスト（現在の実行環境）の識別子に依存しないことである。
【００７８】
上述の２つの条件は、以下のような攻撃の基本として使用され得る。第１に、プロセス１を制御する攻撃者は、ｖｉｃｔｉｍプロセス３を制御して攻撃者へ秘密データを露出し得る何らかの動作を実施させるために、そのｖｉｃｔｉｍプロセス３によって実行されるよう設計された何らかの悪意のある一連の命令にマッピングする分岐ターゲット・アドレスを指定するＢＴＢエントリが割り当てられる結果となる分岐命令を実行する可能性がある。領域テーブルが更新され、以前攻撃者プロセス１に使用された領域識別子がｖｉｃｔｉｍプロセス３に再割り当てされた後、ｖｉｃｔｉｍプロセス３は、攻撃者プロセス１によって割り当てられた古くなったＢＴＢエントリ内のタグ・データと一致するアドレスからの命令を実行し、そして攻撃者によって与えられたその情報に基づいて分岐予測が行われる。これにより、一連の命令の投機的実行に、攻撃者によって与えられた分岐ターゲット・アドレスを形成させることになる、つまり、非アーキテクチャ的な状態におけるような足跡を残すことにより（例えばデータ・キャッシュ）、ｖｉｃｔｉｍプロセス３を騙して秘密データを露出させるようにする、攻撃者によって与えられた特殊な命令である。これらの命令は、例えば、それらのターゲットのメモリ・アドレスを、攻撃者がアクセスしたいと思う秘密情報を使用して計算するメモリ・アクセス命令を含むことがある。したがって、メモリ・アクセス命令によって、キャッシュ３０、３２にロードされるデータは、秘密情報に依存する可能性がある。最終的に分岐誤予測が特定され、プロセッサ・パイプライン２のレジスタ１４のアーキテクチャ的な状態が、一連の命令が誤予測されｖｉｃｔｉｍプロセス３によって投機的実行されるより前のポイントに巻き戻されたとしても、誤って投機的実行された命令によってメモリからロードされたデータは、なおキャッシュ３０、３２に存続することができる。したがって、実行が攻撃者プロセス１にスイッチ・バックする時、攻撃者は秘密データに基づくターゲット・アドレスを計算した結果得られたそれぞれの可能なアドレスにアクセスを試行することができる。そのようなメモリ・アクセスを実施する場合、攻撃者プロセス１は、ロード命令に関する実行時間などのパフォーマンス・データ、又はキャッシュ・ミス数のカウントなどを測定することができ、攻撃者はパフォーマンスについてのそのようなサイド・チャネル情報から、所与のアドレスからのデータがｖｉｃｔｉｍプロセス３によってキャシュ内に配置されたか、そうでないかを判断することができ、これはｖｉｃｔｉｍプロセス３にはアクセスできたが攻撃者プロセス１にはアクセスできなかった、秘密データの性質を推測するために使用することができる。
【００７９】
そのような攻撃が成功するためには、上で与えた２つの条件が満足される必要がある。図１２は、偽陽性ヒットの場合に攻撃者がｖｉｃｔｉｍコンテキストによって使用される分岐ターゲット・アドレスを制御することを困難にすることにより、そのような攻撃を阻止する、この第２の条件を破る技法を示している。分岐ターゲット予測構造１４２、１４６が、現在の実行コンテキストに関連付けられる暗号化キーに基づいて分岐ターゲット予測構造に書き込まれる分岐情報を暗号化するための暗号化回路１７４、及び現在の実行コンテキストに関連付けられる暗号化キーに基づいて分岐ターゲット予測構造から読み出された分岐情報を復号化するための復号化回路１７６と共に設けられる。キー生成回路１７９（例えば、線形帰還シフト・レジスタ又は他の乱数生成器）は、コンテキストごとに時々キーを生成することができる。分岐ターゲット予測回路１７８（図８の分岐予測制御ロジック１５０、並びにターゲット・タグ値を生成するため、及び分岐ターゲット・エントリをルックアップして所与の命令フェッチ・アドレスについての分岐情報を特定するための、分岐ターゲット予測構造１４２、１４６に関連付けられるあらゆるキャッシュ・アクセス回路に対応することができる）は、命令フェッチ・アドレスから（例えば、領域テーブル１４８を使用して）ターゲット・タグを生成し、分岐ターゲット予測構造でヒットがあれば暗号化された分岐情報を出力するよう分岐ターゲット予測構造を制御することができる。ミスがあり、分岐が引き続き実行工程１８によって実行される場合、分岐についての実際の分岐情報は、暗号化回路１７４によって暗号化され、分岐を特定するタグ情報に関連して、分岐ターゲット予測回路の制御下で分岐ターゲット予測構造に書き込まれる。暗号化及び復号化回路１７４、１７６は、図１２では別個の回路として示されているが、同一の回路であってもよい（例えば、ＸＯＲ回路）。
【００８０】
上で議論したように、分岐情報を暗号化することの代替法は、ターゲット・タグの一部を暗号化することであり、この場合復号化回路１７６は必要とされない場合がある。
【００８１】
図１３は、暗号化／復号化が適用される場合の、領域テーブル１４８及び分岐ターゲット・バッファ１４２の内容の実例を示している。この実例では、それぞれの領域テーブル・エントリ１７０は、その領域テーブル・エントリ１７０によって表現される対応する実行コンテキストに関連付けられる暗号化キー１８０を記憶している。キー１８０は、線形帰還シフト・レジスタ（ＬＦＳＲ）又は他の乱数生成器１７９によって乱数又は疑似乱数として、キーが同一の領域テーブル・エントリを再利用する異なる実行コンテキストについて異なっているように、対応する領域テーブル・エントリ１７０が更新される都度生成することができる。ＢＴＢ１４２のルックアップがミスの場合、現在のフェッチ・アドレスを超えてフェッチが順次続けられるが、実行工程１８においてフェッチされた命令ブロックからの分岐が実行される場合、実際の分岐情報が決定され、ＢＴＢ１４２の新しい分岐エントリ１５６に割り当てることができる。ＢＴＢの新しいエントリを割り当てる際、分岐情報が現在の実行コンテキストについての領域テーブル１４８に記憶されている対応する暗号化キー１８０を使用して暗号化される。任意選択で、同様にキーを使用してタグ情報１５８を暗号化することができる。しかしながら、タグの暗号化は必須ではない。いくつかの実施例では、予測分岐データ１６０として記憶されるあらゆる追加的な情報１６８は暗号化されなくてもよいため、分岐ターゲット情報のみが暗号化され得るが、分岐情報１６０のすべてが暗号化されるほうがセキュリティは強固であり得る。
【００８２】
ＢＴＢ１４２でヒットを生成する分岐予測ルックアップの際、タグ情報１５８が現在の命令フェッチ・アドレスについて生成されるターゲット・タグに一致するべく、この時ＢＴＢ１４２から直接分岐情報１６０を単純に出力することの代わりに、まず分岐情報は領域テーブル１４８によって定義される現在の実行コンテキストに関連付けられる対応する暗号化キー１８０を使用して復号化され、次いで復号化された分岐情報は、次のフェッチ・アドレスを導出するために分岐予測ロジック１５０によって使用される。ＢＴＢコンテキストを保護するために使用される暗号化及び復号化は、秘密キー暗号法を使用して、又は公開キー暗号法を使用して実装することができる。分岐ターゲット・アドレス予測は、処理パイプラインのクリティカル・タイミング・パス上にあることがあるため、例えばより複雑なマルチラウンドの暗号法を使用する代わりに、比較的軽量な暗号化方法（例えば、分岐情報とキー１８０のＸＯＲを取る）を使用することは有用である場合がある。
【００８３】
図１４に示すように、この技法は上で議論した攻撃についての第２の条件を妨げることができるが、その理由は、その情報に割り当てられた実行コンテキストに関連付けられるキーを使用して分岐情報を暗号化することによって、同一のＢＴＢエントリ１５６−３が新しい実行コンテキストからアクセスされ、次いで新しい実行コンテキストのキーを使用して復号化される場合、これは元々のコンテキストによって割り当てられたターゲット・アドレスではなく、ガーベッジ情報を生成することになり、それによって攻撃者が悪意のあるターゲットをＢＴＢにプッシュし、既知の位置から悪意のあるコードを実行するために異なる実行コンテキストを制御することが困難となるからである。例えば、図１４では、プロセス１を制御する攻撃者は特定のエントリ１５６−３を割り当て、次いで領域エントリ１７０−１が更新され、図１１のようにプロセス３を指す。領域テーブルを更新する際、新しいキー１８０が領域テーブル・エントリ１７０−１について生成されるため、続いて新しい実行コンテキスト３からの実行の間にＢＴＢエントリ１５６−３でヒットがある場合、新しいキーを使用する分岐情報の復号化は、同一の分岐ターゲット・アドレスを、プロセス１によって元々与えられた分岐ターゲット・アドレスとして与えることがない。分岐ターゲット情報の古い情報が、古くなったキー（領域テーブルでもはや利用可能ではない、キー１）によって暗号化される一方で、領域テーブル・エントリ＃Ａは新しいキーを有する。上で議論したタイプの攻撃を作成し、ｖｉｃｔｉｍプロセス３を制御して悪意のあるターゲット・アドレスＴにジャンプさせることができるように、攻撃者はＤｅｃ（Ｅｎｃ（Ｔ’，ｋｅｙ１），Ｎｅｗ  ｋｅｙ）＝＝Ｔとなるように異なるターゲット・アドレスＴ’を与える必要があり、これは暗号化キーについて十分なビット数があれば古いキー及び新しいキーを知らない攻撃者が、ｖｉｃｔｉｍプロセス３を強制してＴに分岐させる必要があるＴ’の値を予測することを実行不能にすることができる。
【００８４】
図１３及び図１４は、個々の実行コンテキストに関連付けられるキーが領域テーブル１４８にキャッシュされる実例を示しているが、これは必須ではなく、それぞれの実行コンテキストに関連付けられるキーを記憶するための別個の記憶構造も可能である。
【００８５】
図１３及び図１４の実例では、キーは、領域テーブルの置き換えが発生する都度更新されるため、ワンタイム使用の動的なキーである。これは、攻撃を困難にすることができるが、その理由は攻撃者がキーを特定し、それを利用してキーの寿命が終わる前に秘密情報を読み出す必要があるからであり、これは攻撃者が、キーが更新される前の利用可能な時間内にＢＴＢからの一連の分岐予測結果を観察することによりキーについての情報を知ることができる可能性を低減する。それにもかかわらず、他の実装形態では、領域テーブル・エントリに割り振られた動的なキーの代わりに、同一キーが所与の実行コンテキスト用に、そのコンテキストの寿命の間中使用されるように、それぞれの実行コンテキストについて静的なキーを使用することができる。この場合、記憶装置の要求を低減するためにそれぞれのコンテキスト用のキーを生成する効率的な方法は、すべての実行コンテキスト間で共有される共通キーを提供するが、それぞれのコンテキストごとにその共通キーから、共通キーをコンテキストに関連付けられるコンテキスト識別子でハッシュ化することによりコンテキスト特有のキーを導出することである場合がある。
【００８６】
図１５及び図１６は、マルチターゲット間接分岐予測器１４６を使用する実例を示す。ターゲット・アドレスがプログラムの間に時々変化する多形の分岐について、それぞれの分岐プログラム・カウンタ・アドレスごとに固定のターゲット・アドレスを与えるＢＴＢ１４２は、信頼できる予測を与えることができない場合があるため、別個の予測構造１４６を設けることができる。そのような多形の分岐については、ＢＴＢ１４２の分岐情報を更新して、ＢＴＢの予測されたターゲット・アドレスは将来的に使用するべきではなく、代わりにそのような分岐についての分岐ターゲット・アドレスを、マルチターゲット間接分岐予測器１４６を使用して予測すべきであることを示すインジケータを提供することができる。マルチターゲット間接分岐予測器は、それぞれが分岐について予測されたターゲット・アドレスを示す情報、及び以前の分岐の結果の履歴に基づくタグ情報１９４を含む複数の分岐ターゲット・エントリ１９０（例えば、以前の分岐が、遂行されたか、遂行されなかったかどうかを示す一連のビット）を含む。したがって、同一の分岐命令を、その分岐までたどり着く異なる分岐履歴に対応するマルチターゲット間接分岐予測器１４６の複数エントリに割り当てることができる。タグ情報１９４は、分岐を含む命令のブロックの命令フェッチ・アドレスにさらに依存する。ＢＴＢ１４２とは違って、タグ情報は対応する実行コンテキストのコンテキスト識別子、又はプログラム・カウンタ・アドレスの上方ビットを含んでいない。マルチターゲット間接分岐予測器４６でそれぞれのエントリに関連付けられるタグは現在の実行コンテキストとは独立しているため、やはりこれは、タグ値が複数の実行コンテキスト間で再利用することができることを意味している。プロセス２を制御する攻撃者が、ｖｉｃｔｉｍプロセス１において特定の間接的な分岐に到達するために使用されるアクセス・パターン（分岐履歴）を知っている場合、攻撃者は、類似のセキュリティ問題を、プロセス１によってアクセスされる既知の分岐履歴パターン（例えば図１４のタグＡ）によってタグ付けされた悪意のあるターゲット・アドレスをプッシュすることにより、上で議論した問題に利用することができる。ここでの仮定は、攻撃者がマルチターゲット間接分岐予測器１４６におけるタグの衝突を意図的に予測できるということである。
【００８７】
図１６に示すように、この弱点が利用されることを妨げるために、領域テーブルからの暗号化キー１８０は、マルチターゲット間接分岐予測器１４６のコンテンツを暗号化するためにさらに使用され得る。したがって、分岐情報がマルチターゲット間接分岐予測器１４６のエントリ１９０に割り当てられると、現在の実行コンテキストについての暗号化キー１８０は、領域テーブルから読み出され、これは分岐情報１９２、及び任意選択で対応するエントリ１９０のタグ１９４を暗号化するために使用される。マルチターゲット間接分岐予測器１４６のルックアップの際、分岐情報１９２は、現在の実行コンテキストの暗号化キー１８０を使用して復号化され、それによって、現在の実行コンテキストが以前の実行コンテキストによって割り当てられたエントリにヒットする場合、データを暗号化するために使用されたキーとは異なるキーを使用する復号化は、以前の実行コンテキストによって元々与えられたアドレスとは異なり、ガーベッジ・データを出力させることにつながる。
【００８８】
したがって、領域テーブル１４８を使用しない実装形態においても、分岐予測器がマルチターゲット間接分岐予測器１４６、又は現在の実行コンテキストとは独立しているタグを使用する別の予測構造を使用すると、やはり、分岐予測器の内容の暗号化は、攻撃者が分岐予測構造で偽陽性ヒットを使用して、秘密データを可視化するよう意図された悪意のあるコードを実行するためにｖｉｃｔｉｍプロセスを制御できることを回避するために有用である場合がある。
【００８９】
図１７は、分岐ターゲット予測ルックアップ、及び分岐ターゲット予測構造１４２、１４６において分岐情報の更新を実施する方法を図示する流れ図である。図１７は、実施することができる分岐予測のすべての特徴を示していないことを了解されたい（例えば、ＢＤＰ１４０による分岐方向予測、同様に投機的に実行される命令の実行を停止し、誤予測の場合にプロセッサ状態を巻き戻すために遂行されるステップが示されていない―これらは、あらゆる既知の分岐予測技法と同様に実施することができる）。
【００９０】
ステップ２００において、ターゲット・タグが、分岐予測器のルックアップが実施される命令フェッチ・アドレスについて取得される。ターゲット・タグの特定の性質は、分岐予測器構造が実装される方法に依存する。例えば、上で議論したような領域テーブル１４８を使用して実装されたＢＴＢについて、ターゲット・タグは、現在の実行コンテキストのコンテキスト識別子及び命令フェッチ・アドレスの一部に基づいて領域テーブルから決定することができる。次の図１８に関連して、この手法をより詳細に議論する。代替的に、マルチターゲット間接分岐予測器１４６について、ターゲット・タグは、命令フェッチ・アドレス、及び以前の遂行した／遂行しなかった、の結果の履歴に基づいている。ターゲット・タグを生成する他の方法が、やはり可能である。
【００９１】
ステップ２０２において、分岐予測制御ロジック１５０は、分岐ターゲット予測構造１４２、１４６を制御して分岐ターゲット・エントリ１５６、１９０のサブセットをルックアップする。エントリのサブセットは、例えば命令アドレスに基づいて選択することができるか、又はｆｕｌｌｙ  ａｓｓｏｃｉａｔｉｖｅキャッシュの実装形態では、分岐ターゲット予測構造のすべてのエントリを含むことができる。分岐予測回路は、選択されたエントリのセットのいずれかが、ステップ２００で所与の分岐命令について取得されたターゲット・タグに対応するタグ情報を指定するかどうかを判断する。どの分岐ターゲット・エントリのサブセットもターゲット・タグに対応するタグ情報を指定しない場合、分岐ターゲット予測構造でのルックアップはミスとなり、分岐予測制御ロジック１５０は、現在のフェッチ・アドレスのインクリメントされたバージョンを次のフェッチ・アドレスとして加算器１５２から出力する。対応する命令のブロックがデコードされると、ステップ２０３においてデコード工程１０はブロック内のいずれかの命令が分岐命令かどうかを判断する。分岐命令を含んでいない場合、いかなる分岐情報も更新する必要がないため、方法は終了する。フェッチされた／デコードされた命令のブロックが、分岐命令を含む場合、ステップ２０４において、ｖｉｃｔｉｍエントリが、ルックアップされる分岐ターゲット・エントリのサブセットから選択される。例えば、分岐ターゲット・エントリのサブセットのうちの１つが、現在無効である場合、無効なエントリをｖｉｃｔｉｍエントリとして選択することができる。分岐ターゲット・エントリのサブセットのすべてが現在有効である場合、有効なエントリのうちの１つが削除されて新しい分岐情報用に空けられる。あらゆる削除ポリシを使用してｖｉｃｔｉｍエントリを選択することができる（例えばラウンド・ロビン、又はｌｅａｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ）。
【００９２】
ステップ２０６において、実際の分岐情報が所与の分岐命令について実行工程１８によって解決されると、実際の分岐情報は、現在の実行コンテキストに関連付けられる暗号化キーを使用して暗号化される。分岐情報は、分岐ターゲット・アドレスを導出すること、又は指定するための情報を含む場合があり、また上で議論したような分岐についての他の情報をさらに含むことができる。暗号化キーは領域テーブル１４８から、又は別個の記憶装置から読み出すことができる。一部の事例では、ターゲット・タグも暗号化することができる。ステップ２０８において、暗号化された分岐情報、及びターゲット・タグに基づいて決定された（任意選択で暗号化された）タグ情報が、ステップ２０４で選択されたｖｉｃｔｉｍエントリに書き込まれる。
【００９３】
ステップ２０２において、分岐ターゲット予測構造１４２、１４６でヒットがあり、ルックアップされる分岐ターゲット・エントリのサブセットのうちの１つがターゲット・タグに対応するタグ情報を指定していた場合、ステップ２１０において、その一致エントリに記憶された分岐情報が、現在の実行コンテキストに関連付けられる暗号化キーを使用して復号化される。ステップ２１２において、復号化された分岐情報が、所与の分岐命令についての予測として出力される。復号化された分岐情報から導出された分岐ターゲット・アドレスは、命令の後続のフェッチを制御するためにフェッチ・キュー１４４に割り当てられ、復号化された分岐情報によって指定される分岐命令の他の予測される属性は、処理パイプラインの他の態様を制御することができる。分岐が実行工程に到達すると、実際の分岐情報が分岐命令について決定され、予測が正しかったかどうかを判断することができる。誤予測があった場合、分岐命令に続く命令をパイプラインからフラッシュすることができ、分岐が遂行されるべきではない場合、分岐の命令アドレスに続く順次のアドレスからすべて取られる場合は、分岐の正しいターゲット・アドレスから命令のフェッチを再開するためにフェッチ工程６に信号を送信することができる。また、分岐予測器４は、同一の命令フェッチ・アドレスについての後続の予測が次回はより正確である見込みが高くなるように、実際の分岐結果に基づいて分岐ターゲット予測構造１４２、１４６に記憶される分岐情報を訂正するよう更新することができる。
【００９４】
図１８は、それぞれのエントリのタグ部分を圧縮するために領域テーブル１４８を使用する分岐ターゲット予測構造がＢＴＢ１４２である実施例において、図１７のステップ２００においてターゲット・タグを取得する方法をさらに詳細に示す流れ図である。ステップ２２０において、領域テーブル１４８は、現在の命令フェッチ・アドレスに関連付けられる分岐コンテキスト情報に基づいてルックアップされる。例えば、分岐コンテキスト情報は、分岐が実行される実行コンテキストを特定する１つ又は複数のコンテキスト識別子を含む場合があり、命令フェッチ・アドレスの上方の分岐命令アドレス・ビットをさらに含む場合がある。ステップ２２２において、分岐予測制御回路は、エントリ１９０に記憶される分岐コンテキスト情報が所与の分岐命令に与えられた分岐コンテキスト情報に一致する、一致する領域テーブル・エントリ１９０を、領域テーブルが含んでいるかどうかを判断する。一致する領域テーブル・エントリを含んでいる場合、領域テーブルでヒットがあり、ステップ２２４において、ターゲット・タグが、一致する領域テーブル・エントリに関連付けられる領域ＩＤ、及び命令アドレスのタグ部分の１つ又は複数の下位ビット（例えば、図１３の実例では、ビット２０：１６）を含んでいるとして、決定される。やはり、ステップ２２６において、現在の実行コンテキストに対応する暗号化キーが、一致する領域テーブル・エントリからキーを読み出すことによって、領域テーブルからリターンされる。
【００９５】
ステップ２２２において、現在の命令フェッチ・アドレスに与えられる分岐コンテキスト情報に一致する分岐コンテキスト情報を有する一致する領域テーブル・エントリがないように、領域テーブルでルックアップがミスとなる場合、ステップ２３０において、ｖｉｃｔｉｍ領域テーブル・エントリが選択され、例えば、特定のコンテキストにまだマッピングされていない無効な領域テーブル・エントリ、又は無効なエントリが存在しない場合は削除されることになる有効な領域テーブル・エントリである。やはり、ｖｉｃｔｉｍ領域テーブル・エントリを選択するために、ＬＲＵ又はラウンド・ロビンなどの削除ポリシを使用することができる。ステップ２３２において、ｖｉｃｔｉｍ領域テーブル・エントリに記憶される暗号化キー１８０が、更新される。例えば、新しい乱数又は疑似乱数を出力するために、線形帰還シフト・レジスタ、又は他の乱数若しくは疑似乱数生成器がトリガされる場合がある。更新された暗号化キーはｖｉｃｔｉｍ領域テーブル・エントリに書き込まれる。さらに、ステップ２３４において、ステップ２２０において所与の分岐命令について決定された分岐コンテキスト情報が、ステップ２３０で選択されたｖｉｃｔｉｍ領域テーブル・エントリに書き込まれる。ｖｉｃｔｉｍ領域テーブル・エントリに関連付けられる領域識別子は、新しい実行コンテキストにマッピングされており、現在の実行コンテキストからルックアップされる場合、その領域識別子に以前マッピングされたＢＴＢ１４２のあらゆるエントリが、今度は偽陽性ヒットをリターンする可能性があるが、その理由はこれらが同一領域識別子を共有する以前の実行コンテキストによって割り当てられたからである。しかしながら、ステップ２３２において暗号化キーを更新することによって、これらの偽陽性エントリの暗号化されたコンテキストは、これらのエントリをＢＴＢ１４２に割り当てた以前の実行コンテキストによって期待されるやり方で振る舞うことにはならず、そのためこれは悪意のあるプロセスが、攻撃者によって選択された特定のアドレスにマッピングするために、別のコンテキストによって実行される特定の分岐ターゲット・アドレスを制御できることを妨げる。ステップ２３４に続いて、図１８の方法はステップ２２４に続き、分岐ターゲット予測構造の後続のルックアップについてのターゲット・タグをリターンし、暗号化キーをリターンするために、領域テーブルルックアップがヒットを生成したかのようにステップ２２４及び２２６が同一のやり方で実施される。図１８の完了に続いて、生成されたタグを、図１７のステップ２０２以降にしたがって分岐ターゲット予測ルックアップのために使用することができる。
【００９６】
要約すると、分岐ターゲット予測構造の分岐情報は、分岐情報を分岐ターゲット予測構造に割り当てさせる原因となった実行コンテキストに関連付けられる暗号化キーに基づいて暗号化される。分岐ターゲット予測構造のルックアップの際、ヒットがある場合、一致エントリからの分岐情報は、現在の実行コンテキストに関連付けられる暗号化キーを使用して復号化される。暗号化及び復号化は、異なるコンテキストからエントリを割り当てたコンテキストへの分岐ターゲット予測構造のエントリにおける偽陽性ヒットを利用することにより攻撃者が別の実行コンテキストから重要データにアクセスを得ることをずっと困難にするため、複数の実行コンテキストで再利用可能な値を伴うタグ情報を使用する分岐ターゲット予測構造にとって、これは有用である。
【００９７】
図８〜図１８に示した具体的な実例は分岐予測器を実装する方法の一例に過ぎないことを了解されたい。より一般的には、新しい分岐予測エントリを生成する時、分岐予測器への入力の一部を、現在の実行コンテキストに関連付けられる値に基づいてエンコードすることができ、所与のクエリ入力について分岐予測器にクエリする際、クエリをトリガしている実行環境に関連付けられる値を使用してクエリ入力をエンコードすることができるか、又は分岐予測器の出力を最新の実行環境に関連付けられる値を使用して逆エンコード若しくはデコードすることができるか、或いはその両方であり、ｖｉｃｔｉｍプロセスを制御して、異なる実行環境間の分岐予測器における偽ヒットを使用して特定のアドレスへの分岐を制御するために、攻撃者が分岐予測器においてどの状態が訓練されるべきかを推測することを困難にしている。
【００９８】
さらには、例示の配置構成を以下の条項で詳述する。
（１）一連の命令に関連して少なくとも１つの分岐予測状態エントリを記憶するように構成される分岐予測回路と、新しい分岐予測状態エントリを生成するために少なくとも１つの入力を受信するための入力回路であって、少なくとも１つの入力は複数ビットを含む、入力回路と、一連の命令が実行されている現在の実行パーミッションを示す値に基づいて、複数ビットの少なくとも一部をエンコードするように構成されるコーディング回路とを備える、データ処理装置。
（２）コーディング回路は、キーを使用することによりビットの少なくとも一部をエンコードするよう構成され、キーは一連の命令が実行されている現在の実行パーミッションに基づいている、条項（１）に記載のデータ処理装置。
（３）コーディング回路は、キーを使用して複数ビットの少なくとも一部を再配列することにより、複数ビットの少なくとも一部をエンコードするよう構成される、条項（２）に記載のデータ処理装置。
（４）コーディング回路は、キーを使用して複数ビットの少なくとも一部をトグルすることにより、複数ビットの少なくとも一部をエンコードするよう構成される、条項（２）に記載のデータ処理装置。
（５）コーディング回路は、キーを使用してハッシュ関数を実施することにより、複数ビットの少なくとも一部をエンコードするよう構成される、条項（２）に記載のデータ処理装置。
（６）ハッシュ関数は、可逆的である、条項（５）に記載のデータ処理装置。
（７）コーディング回路は、キーでＸＯＲ演算を実施することにより、複数ビットの少なくとも一部をエンコードするよう構成される、条項（２）に記載のデータ処理装置。
（８）ハッシュ関数は、一方向のハッシュ関数である、条項（５）に記載のデータ処理装置。
（９）少なくとも１つの入力は分岐命令の命令アドレスの指標を含み、分岐予測回路は分岐命令の命令アドレスの指標を含むクエリ値を受信してクエリ値を使用して検索を実施するよう構成され、コーディング回路は検索に先立ってキーを使用してクエリ値のビットの少なくとも一部をエンコードするよう構成される、条項（２）から（８）までのいずれか一項に記載のデータ処理装置。
（１０）コーディング回路は、現在の実行環境に関連付けられるキーの値を再計算し、キーの再計算された値を使用してクエリ値の複数ビットの少なくとも一部にエンコード演算を実施するよう構成される、条項（９）に記載のデータ処理装置。
（１１）少なくとも１つの入力は分岐命令のデスティネーション・アドレスの指標を含み、分岐予測回路は分岐命令の命令アドレスの指標を含むクエリ値を受信してクエリ値を使用して検索を実施するよう構成され、装置はクエリ値を受信することに応じて出力される分岐予測回路の出力に対してデコードを実施するためのデコード回路を備える、条項（２）から（１０）までのいずれか一項に記載のデータ処理装置。
（１２）デコードは、キーの値を再計算し、次いでデコード関数を実施することを含む、条項（１１）に記載のデータ処理装置。
（１３）キーは、一連の命令が実行されている例外レベル、特権レベル、ＡＳＩＤ、ＶＭＩＤ、ＮＳ、物理プロセッサ・コア数、及び論理コア数を示す値のあらゆる組み合わせ、並びに１つ又は複数のソフトウェア書き込み可能レジスタ、にさらに基づいている、条項（１）から（１２）までのいずれかに記載のデータ処理装置。
（１４）キーは、以前に生成された乱数にさらに基づいている、条項（１）から（１３）までのいずれかに記載のデータ処理装置。
（１５）以前に生成された乱数は、論理プロセッサごとの要素、物理プロセッサごとの要素、及びシステム全体の要素の少なくとも１つを含む、条項（１４）に記載のデータ処理装置。
（１６）以前に生成された乱数の少なくとも一部は、スタートアップ時に生成される、条項（１５）に記載のデータ処理装置。
（１７）以前に生成された乱数の少なくとも一部は、疑似乱数である、条項（１４）から（１６）までのいずれか一項に記載のデータ処理装置。
（１８）キーは、現在の実行環境又は現在の実行パーミッションに関連付けられる少なくとも１つの値を含む、少なくとも１つのキー入力パラメータに適用される一方向変形に基づいている、条項（１）から（１７）までのいずれか一項に記載のデータ処理装置。
（１９）一連の命令は、最低の実行パーミッションで実行するよう構成された複数の実行環境のうちの１つで実行することができ、コーディング回路は、一連の命令が実行されている複数の実行環境のうちの１つの識別子にさらに基づいて、複数ビットの少なくとも一部をエンコードするよう構成される、条項（１）から（１７）までのいずれかに記載のデータ処理装置。
（２０）一連の命令が投機的な状態で実行されている間、命令フェッチ・フォールト及び命令デコード・フォールトのあらゆる組み合わせのレートを検出し、レートが所定のしきい値を上回って増加することに応答して割り込みを発生させるか、又はエラー応答を作成するするよう構成された、監視回路を備える、条項（１）から（１９）までのいずれかに記載のデータ処理装置。
（２１）所定のしきい値は、直前のレートよりも少なくとも２０％上回る、条項（２０）に記載のデータ処理装置。
（２２）一連の命令に関連して少なくとも１つの分岐予測状態エントリを記憶する手段と、新しい分岐予測状態エントリを生成するために少なくとも１つの入力を受信する手段であって、少なくとも１つの入力は複数ビットを含む、受信する手段と、一連の命令が実行されている現在の実行パーミッションを示す値に基づいて、前記少なくとも１つの入力の複数ビットの少なくとも一部をエンコードする手段とを備える、データ処理装置。
（２３）一連の命令に関連して少なくとも１つの分岐予測状態エントリを記憶することと、新しい分岐予測状態エントリを生成するために少なくとも１つの入力を受信することであって、少なくとも１つの入力は複数ビットを含む、受信することと、一連の命令が実行されている現在の実行パーミッションを示す値に基づいて、複数ビットの少なくとも一部をエンコードすることとを含む、方法。
（２４）複数の実行コンテキストのうちの１つでデータ処理を実施するための処理回路と、複数の分岐ターゲット・エントリを含み、それぞれの分岐ターゲット・エントリは少なくとも１つの分岐ターゲット・アドレスを示す分岐情報を指定する、分岐ターゲット予測構造と、現在の実行コンテキストに関連付けられる暗号化キーを使用して分岐ターゲット予測構造に書き込まれる分岐情報を暗号化するための暗号化回路と、現在の実行コンテキストに関連付けられる暗号化キーを使用して分岐ターゲット予測構造から読み出された分岐情報を復号化するための復号化回路とを備える、装置。
（２５）それぞれの分岐ターゲット・エントリは、タグ情報を指定し、装置は、現在の実行コンテキストに関連付けられる命令フェッチ・アドレスについて分岐ターゲット予測ルックアップを実施するための分岐ターゲット予測回路を備え、分岐ターゲット予測ルックアップは、分岐ターゲット予測構造の分岐ターゲット・エントリのサブセットのいずれかが、命令フェッチ・アドレスについて決定されたターゲット・タグに対応するタグ情報を指定するかどうかを判断することを含む、条項（２４）に記載の装置。
（２６）ターゲット・タグの値は、複数の実行コンテキストのうち２つ以上で再利用可能である、条項（２５）に記載の装置。
（２７）分岐ターゲット・エントリのサブセットのいずれもターゲット・タグに対応するタグ情報を指定しない場合、また命令フェッチ・アドレスが分岐命令を含む少なくとも１つの命令のブロックを指定する場合、暗号化回路は、現在の実行コンテキストに関連付けられる暗号化キーを使用して分岐命令についての実際の分岐情報を暗号化するよう構成され、分岐ターゲット予測回路は、暗号化された分岐情報を指定し、ターゲット・タグに対応するタグ情報を指定する分岐ターゲット予測構造の分岐ターゲット・エントリを割り当てるよう構成される、条項（２５）又は（２６）に記載の装置。
（２８）分岐ターゲット・エントリのサブセットのうちの１つがターゲット・タグに対応するタグ情報を指定する場合、復号化回路は、エントリのサブセットのうちの前記１つに記憶される分岐情報を現在の実行コンテキストに関連付けられる暗号化キーを使用して復号化するよう構成され、分岐ターゲット予測回路は、復号化された分岐情報を命令フェッチ・アドレスについての予測された分岐情報として出力するよう構成される、条項（２５）から（２７）までのいずれかに記載の装置。
（２９）暗号化キーは、現在の実行コンテキストに固定された静的なキーを含む、条項（２４）から（２８）までのいずれかに記載の装置。
（３０）現在の実行コンテキストについての静的なキーは、複数の実行コンテキストの少なくとも２つと、現在の実行コンテキストに特有の少なくとも１つのコンテキスト識別子とで共有される共通キーに依存している、条項（２９）に記載の装置。
（３１）暗号化キーは、現在の実行コンテキストに可変の動的なキー含む、条項（２４）から（３０）までのいずれかに記載の装置。
（３２）現在の実行コンテキストについての更新された暗号化キーを生成するためのキー生成回路を備える、条項（３１）に記載の装置。
（３３）分岐ターゲット・エントリのサブセットのいずれもターゲット・タグに対応するタグ情報を指定しない場合、また命令フェッチ・アドレスが分岐命令を含む少なくとも１つの命令のブロックを指定する場合、暗号化回路は、現在の実行コンテキストに関連付けられる暗号化キーを使用してターゲット・タグを暗号化するよう構成され、分岐ターゲット予測回路は、暗号化されたターゲット・タグを割り当てられた分岐ターゲット・エントリについてのタグ情報として指定するよう構成され、分岐ターゲット予測ルックアップにおいて、復号化回路は分岐ターゲット・エントリのサブセットのそれぞれのタグ情報を復号化するよう構成され、分岐ターゲット予測回路は、復号化されたタグ情報をターゲット・タグと比較するよう構成される、条項（２５）に記載の装置。
（３４）分岐情報は、分岐ターゲット・アドレス以外の少なくとも１つの分岐情報をさらに示す、条項（２４）から（３３）までのいずれかに記載の装置。
（３５）分岐ターゲット予測回路は、現在の実行コンテキストに関連付けられる少なくとも１つのコンテキスト識別子に依存するターゲット・タグを決定するよう構成される、条項（２５）に記載の装置。
（３６）それぞれの領域エントリが、分岐コンテキスト情報よりも少ないビットを含む領域識別子へ分岐コンテキスト情報をマッピングする、複数の領域エントリを含む領域テーブルを備え、分岐コンテキスト情報は対応する実行コンテキストに関連付けられる少なくとも１つのコンテキスト識別子を含む、条項（２５）に記載の装置。
（３７）命令フェッチ・アドレスについてのターゲット・タグは、領域テーブルによって命令フェッチ・アドレスに関連付けられる分岐コンテキスト情報にマッピングされたターゲット領域識別子を含む、条項（３６）に記載の装置。
（３８）それぞれの領域エントリは対応する実行コンテキストに関連付けられる暗号化キーを指定する、条項（３６）又は（３７）に記載の装置。
（３９）領域テーブルの所与の領域エントリによって与えられたマッピングが更新される場合、分岐ターゲット予測回路は、マッピング更新後に所与の領域エントリに関連付けられる実行コンテキストに関連付けられる暗号化キーの更新をトリガするよう構成される、条項（３６）から（３８）までのいずれかに記載の装置。
（４０）所与の領域エントリの分岐コンテキスト情報は、以前の分岐ターゲット予測ルックアップによって所与の領域エントリが領域テーブルに割り当てられた命令フェッチ・アドレスの部分をさらに含む、条項（３６）から（３９）までのいずれかに記載の装置。
（４１）分岐ターゲット予測回路は、ターゲット・タグが命令フェッチ・アドレス、及び命令フェッチ・アドレスの命令に先行する以前の分岐命令の分岐結果の履歴に依存するかどうか判断するように構成される、条項（２５）に記載の装置。
（４２）複数の実行コンテキストのうちの１つでデータ処理を実施するための手段と、それぞれの分岐ターゲット・エントリは少なくとも１つの分岐ターゲット・アドレスを示す分岐情報を指定する、分岐ターゲット予測構造の分岐ターゲット・エントリを記憶するための手段と、現在の実行コンテキストに関連付けられる暗号化キーを使用して記憶するための手段に書き込まれる分岐情報を暗号化するための手段と、現在の実行コンテキストに関連付けられる暗号化キーを使用して記憶するための手段から読み出された分岐情報を復号化するための手段とを備える、装置。
（４３）複数の実行コンテキストのうちの１つでデータ処理を実施することと、それぞれの分岐ターゲット・エントリは少なくとも１つの分岐ターゲット・アドレスを示す分岐情報を指定する、分岐ターゲット予測構造の分岐ターゲット・エントリを記憶することと、現在の実行コンテキストに関連付けられる暗号化キーを使用して分岐ターゲット予測構造に書き込まれる分岐情報を暗号化することと、現在の実行コンテキストに関連付けられる暗号化キーを使用して分岐ターゲット予測構造から読み出された分岐情報を復号化することとを含む、方法。
【００９９】
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」はハードウェア又はソフトウェアの内部接続の、配置又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは機能を実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
【０１００】
本発明の図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの正確な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本発明の範囲及び精神を逸脱することなく、その様々な変形及び修正がそこになされ得ることを理解されたい。
【図１】
2021504800.tif 000003
【図２】
2021504800.tif 000004
【図３Ａ】
2021504800.tif 000005
【図３Ｂ】
2021504800.tif 000006
【図３Ｃ】
2021504800.tif 000007
【図４Ａ】
2021504800.tif 000008
【図４Ｂ】
2021504800.tif 000009
【図５】
2021504800.tif 000010
【図６】
2021504800.tif 000011
【図７】
2021504800.tif 000012
【図８】
2021504800.tif 000013
【図９】
2021504800.tif 000014
【図１０】
2021504800.tif 000015
【図１１】
2021504800.tif 000016
【図１２】
2021504800.tif 000017
【図１３】
2021504800.tif 000018
【図１４】
2021504800.tif 000019
【図１５】
2021504800.tif 000020
【図１６】
2021504800.tif 000021
【図１７】
2021504800.tif 000022
【図１８】
2021504800.tif 000023
【国際調査報告】
2021504800.tif 000024
2021504800.tif 000025
2021504800.tif 000026