(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-07-04
(45)【発行日】2023-07-12
(54)【発明の名称】分岐予測回路への入力のエンコード
(51)【国際特許分類】
G06F 9/38 20180101AFI20230705BHJP
【FI】
G06F9/38 330B
G06F9/38 330A
(21)【出願番号】P 2020528089
(86)(22)【出願日】2018-10-19
(86)【国際出願番号】 GB2018053033
(87)【国際公開番号】W WO2019106333
(87)【国際公開日】2019-06-06
【審査請求日】2021-10-12
(32)【優先日】2017-11-29
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】グロカット、トーマス クリストファー
(72)【発明者】
【氏名】石井 康雄
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2008/0052499(US,A1)
【文献】米国特許出願公開第2009/0089564(US,A1)
【文献】米国特許出願公開第2016/0170769(US,A1)
【文献】米国特許出願公開第2018/0088957(US,A1)
【文献】米国特許出願公開第2011/0296202(US,A1)
【文献】米国特許出願公開第2011/0296206(US,A1)
【文献】米国特許出願公開第2016/0092702(US,A1)
【文献】米国特許出願公開第2018/0101484(US,A1)
【文献】D Evtyushkin, D Ponomarev, N Abu-Ghazaleh,Jump over ASLR: Attacking branch predictors to bypass ASLR,2016 49th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO),米国,IEEE,2016年10月15日,https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=778743/,令和4年10月24日検索
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
一連の命令に関連して少なくとも1つの分岐予測状態エントリを記憶するように構成される分岐予測回路と、
新しい分岐予測状態エントリを生成するために少なくとも1つの入力を受信するための入力回路であって、前記少なくとも1つの入力は複数のビットを含む、入力回路と、
前記一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、前記複数のビットの少なくとも一部をエンコードするためのエンコード演算を実施するように構成されるコーディング回路と
を備えるデータ処理装置
であって、
前記エンコード演算は、キーを使用することにより前記複数のビットの前記少なくとも一部をエンコードすることを含み、前記キーは、前記一連の命令が実行されている前記現在の実行環境に基づいており、
前記少なくとも1つの入力は、分岐命令のデスティネーション・アドレスの指標を含み、
前記分岐予測回路は、命令の命令アドレスの指標を含むクエリ値を受信し、前記クエリ値を使用して検索を実施するよう構成され、
前記データ処理装置は、前記クエリ値を受信することに応じて出力される前記分岐予測回路の出力に対して逆エンコード演算を実施するための逆エンコード回路を備える、データ処理装置。
【請求項2】
前記エンコード演算は、前記一連の命令が実行されている現在の実行パーミッションを示す値に基づいて、前記複数のビットの前記少なくとも一部をエンコードすることを含む、請求項1に記載のデータ処理装置。
【請求項3】
前記エンコード演算は、前記キーを使用して、前記複数のビットの前記少なくとも一部を再配列すること、又はトグルすることを含む、請求項
1又は2に記載のデータ処理装置。
【請求項4】
前記逆エンコード回路は、前記現在の実行環境に関連付けられる前記キーの値を再計算し、前記キーの前記再計算された値を使用して前記逆エンコード演算を実施するよう構成される、請求項
1から3までのいずれか一項に記載のデータ処理装置。
【請求項5】
前記キーは、
前記一連の命令が実行されている例外レベル、特権レベル、ASID、VMID、NS、物理プロセッサ・コア数、及び論理コア数、1つ又は複数のソフトウェア書き込み可能レジスタ、並びに以前に生成された乱数
のうちの少なくとも1つを示す1つ又は複数のキー入力値の任意の組み合わせにさらに基づいている、請求項
1から
4までのいずれか一項に記載のデータ処理装置。
【請求項6】
前記以前に生成された乱数は、
論理プロセッサごとの要素、
物理プロセッサごとの要素、及び
システム全体の要素
の少なくとも1つを含む、請求項
5に記載のデータ処理装置。
【請求項7】
前記キーは、前記1つ又は複数のキー入力値に適用される一方向変形に基づいている、請求項
5又は
6に記載のデータ処理装置。
【請求項8】
前記一連の命令は、最低の実行パーミッションで実行するよう構成された複数の実行環境のうちの1つで実行されることができ、前記コーディング回路は、前記一連の命令が
前記最低の実行パーミッションで実行されている前記複数の実行環境のうちの
1つの実行環境の識別子にさらに基づいて、前記エンコード演算を実施するよう構成される、請求項1から
7までのいずれか一項に記載のデータ処理装置。
【請求項9】
前記一連の命令が投機的な状態で実行されている間、命令フェッチ・フォールト及び命令デコード・フォールトの任意の組み合わせのレートを検出し、前記レートが所定の条件を満たすことに応答して例外を発生させ、又はエラー応答を作成するよう構成された監視回路を備える、請求項1から
8までのいずれか一項に記載のデータ処理装置。
【請求項10】
前記分岐予測回路は、複数の分岐ターゲット・エントリを含む分岐ターゲット予測構造を備え、それぞれの分岐ターゲット・エントリは、少なくとも分岐ターゲット・アドレスを指定し、
前記コーディング回路は、前記現在の実行環境に関連付けられる暗号化キーを使用して、前記分岐ターゲット予測構造に書き込まれる新しい分岐ターゲット・エントリの少なくとも一部を暗号化するための暗号化回路を備える、請求項1から
9までのいずれか一項に記載のデータ処理装置。
【請求項11】
それぞれの分岐ターゲット・エントリは、タグ情報及び少なくとも前記分岐ターゲット・アドレスを指定する分岐データを指定し、
前記
データ処理装置は、前記現在の実行環境に関連付けられる命令フェッチ・アドレスについて分岐ターゲット予測ルックアップを実施するための分岐ターゲット予測回路を備え、前記分岐ターゲット予測ルックアップは、前記分岐ターゲット予測構造の分岐ターゲット・エントリのサブセットのいずれかが、前記命令フェッチ・アドレスについて決定されたターゲット・タグに対応するタグ情報を指定するか否かを判断することを含む、請求項1
0に記載のデータ処理装置。
【請求項12】
前記ターゲット・タグの値は、2つ以上の実行環境で再利用可能である、請求項1
1に記載のデータ処理装置。
【請求項13】
前記暗号化回路は、前記暗号化キーを使用して前記新しい分岐ターゲット・エントリの前記タグ情報の少なくとも一部を暗号化するよう構成される、請求項1
1又は1
2に記載のデータ処理装置。
【請求項14】
前記暗号化回路は、前記暗号化キーを使用して前記新しい分岐ターゲット・エントリの前記分岐データの少なくとも一部を暗号化するよう構成され、
前記
データ処理装置は、前記分岐ターゲット予測ルックアップで前記ターゲット・タグに対応するタグ情報を指定するように特定された分岐ターゲット・エントリの前記サブセットのうちの1つの前記分岐データの前記少なくとも一部を復号化する復号化回路を備える、請求項1
3に記載のデータ処理装置。
【請求項15】
前記暗号化キーは、前記現在の実行環境に固定された静的なキーを含む、請求項1
0から1
4までのいずれか一項に記載のデータ処理装置。
【請求項16】
前記現在の実行環境についての前記静的なキーは、前記複数の実行環境の少なくとも2つと、前記現在の実行環境に特有の少なくとも1つの識別子とで共有される共通キーに依存している、請求項1
5に記載のデータ処理装置。
【請求項17】
前記暗号化キーは、前記現在の実行環境に可変の動的なキーを含む、請求項1
0から1
4までのいずれか一項に記載の
データ処理装置。
【請求項18】
前記現在の実行環境についての更新された暗号化キーを生成するためのキー生成回路を備える、請求項
17に記載の
データ処理装置。
【請求項19】
複数の領域エントリを含む領域テーブルを備え、各領域エントリは、分岐コンテキスト情報を、前記分岐コンテキスト情報よりも少ないビットを含む領域識別子へマッピングし、前記分岐コンテキスト情報は、対応する実行環境に関連付けられる少なくとも1つの識別子を含む、請求項1
1から1
4までのいずれか一項に記載の
データ処理装置。
【請求項20】
前記命令フェッチ・アドレスについての前記ターゲット・タグは、前記領域テーブルによって前記命令フェッチ・アドレスに関連付けられる前記分岐コンテキスト情報にマッピングされたターゲット領域識別子を含む、請求項
19に記載の
データ処理装置。
【請求項21】
各領域エントリは、前記対応する実行環境に関連付けられる前記暗号化キーを指定する、請求項
19又は2
0に記載の
データ処理装置。
【請求項22】
前記領域テーブルの所与の領域エントリによって与えられた前記マッピングが更新される場合、前記分岐ターゲット予測回路は、前記マッピング更新後に前記所与の領域エントリに関連付けられる前記実行環境に関連付けられる前記暗号化キーの更新をトリガするよう構成される、請求項
19から2
1までのいずれか一項に記載の
データ処理装置。
【請求項23】
前記分岐ターゲット予測回路は、前記命令フェッチ・アドレス、及び前記命令フェッチ・アドレスの命令に先行する以前の分岐命令の分岐結果の履歴に依存して、前記ターゲット・タグを判断するように構成される、請求項1
1から14まで及び19から2
2までのいずれか一項に記載の
データ処理装置。
【請求項24】
一連の命令に関連して少なくとも1つの分岐予測状態エントリを記憶する手段と、
新しい分岐予測状態エントリを生成するために少なくとも1つの入力を受信する手段であって、前記少なくとも1つの入力は複数のビットを含む、手段と、
前記一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、前記少なくとも1つの入力の前記複数のビットの少なくとも一部をエンコードする
ためのエンコード演算を実施する手段と
を備えるデータ処理装置
であって、
前記エンコード演算は、キーを使用することにより前記複数のビットの前記少なくとも一部をエンコードすることを含み、前記キーは、前記一連の命令が実行されている前記現在の実行環境に基づいており、
前記少なくとも1つの入力は、分岐命令のデスティネーション・アドレスの指標を含み、
前記記憶する手段は、命令の命令アドレスの指標を含むクエリ値を受信し、前記クエリ値を使用して検索を実施するよう構成され、
前記データ処理装置は、前記クエリ値を受信することに応じて出力される前記記憶する手段の出力に対して逆エンコード演算を実施する手段を備える、データ処理装置。
【請求項25】
分岐予測回路によって、一連の命令に関連して少なくとも1つの分岐予測状態エントリを記憶するステップと、
入力回路によって、新しい分岐予測状態エントリを生成するために少なくとも1つの入力を受信するステップであって、前記少なくとも1つの入力は複数のビットを含む、ステップと、
コーディング回路によって、前記一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、前記複数のビットの少なくとも一部をエンコードする
ためのエンコード演算を実施するステップと
を含む方法
であって、
前記エンコード演算は、キーを使用することにより前記複数のビットの前記少なくとも一部をエンコードすることを含み、前記キーは、前記一連の命令が実行されている前記現在の実行環境に基づいており、
前記少なくとも1つの入力は、分岐命令のデスティネーション・アドレスの指標を含み、
前記方法は、
前記分岐予測回路によって、命令の命令アドレスの指標を含むクエリ値を受信し、前記クエリ値を使用して検索を実施するステップと、
逆エンコード回路によって、前記クエリ値を受信することに応じて出力される前記分岐予測回路の出力に対して逆エンコード演算を実施するステップと
を含む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本技法はデータ処理の分野に関する。より詳細には、分岐予測に関する。
【背景技術】
【0002】
データ処理装置は、分岐命令の結果を、それらが実際に実行される前に予測するための、分岐予測回路を有する場合がある。分岐命令が実際に実行される前に分岐結果を予測することによって、その分岐に続く後続の命令がフェッチされ始め、分岐命令の実行が完了する前に投機的に実行され始めることが可能であり、それによって、分岐の結果が実際に分かって初めてフェッチされるよりも早期に後続の命令を実行することができるため、予測が正しい場合はパフォーマンスが節約される。
【発明の概要】
【課題を解決するための手段】
【0003】
少なくとも一部の実例は、一連の命令に関連して少なくとも1つの分岐予測状態エントリを記憶するように構成される分岐予測回路と、新しい分岐予測状態エントリを生成するために少なくとも1つの入力を受信するための入力回路であって、少なくとも1つの入力は複数ビットを含む、入力回路と、一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、複数ビットの少なくとも一部をエンコードするためのエンコード演算を実施するように構成されるコーディング回路とを備えるデータ処理装置を提供する。
【0004】
少なくとも一部の実例は、一連の命令に関連して少なくとも1つの分岐予測状態エントリを記憶する手段と、新しい分岐予測状態エントリを生成するために少なくとも1つの入力を受信する手段であって、少なくとも1つの入力は複数ビットを含む、受信する手段と、一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、前記少なくとも1つの入力の複数ビットの少なくとも一部をエンコードする手段とを備えるデータ処理装置を提供する。
【0005】
少なくとも一部の実例は、一連の命令に関連して少なくとも1つの分岐予測状態エントリを記憶することと、新しい分岐予測状態エントリを生成するために少なくとも1つの入力を受信することであって、少なくとも1つの入力は複数ビットを含む、受信することと、一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、複数ビットの少なくとも一部をエンコードすることとを含む方法を提供する。
【0006】
本技法のさらなる態様、特徴及び利点は、添付の図面と併せて読まれる実例の以下の説明から明らかとなろう。
【図面の簡単な説明】
【0007】
【
図1】分岐予測器を有するデータ処理装置の実例を概略的に示す図である。
【
図2】分岐予測回路への入力のエンコード部分についてのコーディング回路の実例を示す図である。
【
図3A】現在の実行コンテキストに関連付けられるキーに基づく入力のエンコード部分の実例を示す図である。
【
図3B】現在の実行コンテキストに関連付けられるキーに基づく入力のエンコード部分の実例を示す図である。
【
図3C】現在の実行コンテキストに関連付けられるキーに基づく入力のエンコード部分の実例を示す図である。
【
図4A】現在の実行コンテキストに関連付けられる再計算キーに基づいて、逆エンコード演算を、分岐予測回路によって出力されたエンコードされたデスティネーション・アドレスに適用する実例を示す図である。
【
図4B】エンコード演算を、分岐予測回路を検索するクエリの一部として使用される命令アドレスに適用する実例を示す図である。
【
図5】現在の実行コンテキストに関連付けられる複数の識別子に基づいてキーを生成する実例を示す図である。
【
図6】命令フェッチ・フォールトのレートを検出するための監視回路の実例を示す図である。
【
図7】命令フェッチ・フォールトが20%以上のレートで増加することが、エラー応答をトリガする実例を示すグラフである。
【
図8】分岐ターゲット・バッファ及び分岐方向予測器を備える分岐予測器の別の実例を示す図である。
【
図9】比較のために、所与の実行コンテキストを特定するコンテキスト情報がそれぞれの分岐ターゲット・エントリについてのタグ情報内で指定される、分岐ターゲット・バッファの一形態を示す図である。
【
図10】領域テーブルが、コンテキスト情報を分岐ターゲット・バッファ内でタグ情報として使用される短い領域識別子に圧縮するために使用される、代替的な実装形態を示す図である。
【
図11】攻撃者が異なる実行コンテキストが領域テーブルからの同一の領域識別子を再利用することができるという性質を利用することがある、そのような領域テーブルを使用しているシステムにおいて生じ得る潜在的なセキュリティの問題を示す図である。
【
図12】対応する実行コンテキストに関連付けられる暗号化キーに基づいて、分岐ターゲット予測構造に記憶される前に分岐情報が暗号化され、分岐ターゲット予測構造から読み出される際に復号化される実例を示す図である。
【
図13】
図12の実例による分岐ターゲット・バッファのエントリ及び領域テーブルの実例を示す図である。
【
図14】領域テーブル・エントリが更新された時の暗号化キーを変更する実例を示す図である。
【
図15】そのような攻撃からマルチターゲット間接分岐予測器を保護するために、暗号化を使用することに対応する実例を示す図である。
【
図16】そのような攻撃からマルチターゲット間接分岐予測器を保護するために、暗号化を使用することに対応する実例を示す図である。
【
図17】分岐ターゲット予測ルックアップを実施する方法を図示する流れ図である。
【
図18】領域テーブルに基づいてルックアップ用のターゲット・タグ値を生成するための方法を示す流れ図である。
【発明を実施するための形態】
【0008】
処理回路が、複数の実行環境のうちの1つでデータ処理を実施することができる。例えば、それぞれの実行環境は、処理回路によって実行される異なるソフトウェア・プロセス、異なる特権レベルのソフトウェア(例えばアプリケーションとオペレーティング・システム)、所与のソフトウェア・プロセスの異なる部分、処理回路で実行される異なる仮想マシン、などに対応することがある。分岐予測回路は、一連の命令に関連して少なくとも1つの分岐予測状態エントリを記憶するために提供され得る。分岐予測状態エントリは、例えば遂行する若しくは遂行しないと予測される結果、又は予測される分岐ターゲット・アドレスなどの、分岐の予測される性質を指定することができる。分岐予測回路を使用して、分岐命令の結果を、それらが実際に実行されるよりも前に予測することができ、予測された分岐の性質に基づいて早期のフェッチ及び後続の命令の投機的な実行を可能にする。入力回路は、新しい分岐予測状態エントリを生成するために少なくとも1つの入力を受信するために提供され得、この場合少なくとも1つの入力は複数ビットを含む。例えば、入力は、新しいエントリが分岐予測回路に割り当てられる分岐命令の命令アドレスの少なくとも一部、及び/又は将来的な機会に対して予測される分岐ターゲット・アドレスとして使用され得る分岐命令についての実際の分岐ターゲット・アドレスを指定することができる。必要とされる記憶容量を低減するために、一部の実施例は分岐ターゲット・アドレスを、例えば分岐命令のアドレスからのオフセットとして指定することにより、間接的に記憶することができる。
【0009】
分岐予測のメカニズムは通常、その誤予測がシステムによって処理されたデータのセキュリティにとって致命的ではなく、達成されるパフォーマンス・レベルに影響するだけの、パフォーマンス向上メカニズムと見なされる。したがって、通常は分岐予測器の内容を保護するセキュリティ対策が必要であると期待しないかも知れない。
【0010】
本技法は、一連の命令が実行されている現在の実行環境に関連付けられる値に基づいて、入力回路によって受信される入力の複数ビットの少なくとも一部をエンコードするためのエンコード演算を実施するためのコーディング回路を提供する。次いで、入力のエンコードされたバージョンを使用して、分岐予測回路のために生成されるよう新しい分岐予測状態エントリを形成することができる。
【0011】
直観に反して、分岐予測回路が、一実行環境が別の実行環境に関連付けられるデータにアクセスすることを制限する処理回路に設けられたセキュリティ保護を、攻撃者がすり抜けるために利用できるルートを与え得ることが認識されている。その理由は、分岐予測回路によって分岐予測状態エントリが異なる実行環境からエントリを割り当てた実行環境にアクセスできるようになる場合があるため、第1の実行環境によって分岐予測回路に割り当てられた分岐予測状態を使用して第2の実行環境で実行される分岐の挙動を制御することができるからである。以前、このことは単にパフォーマンスの問題と見なされており、第2の実行環境が異なるコンテキストによって割り当てられた間違ったエントリをヒットするかのようであり、分岐の実際の分岐結果が予測に一致しないと特定されると、後に第2の実行環境による分岐の実行中に誤予測が特定されることがあった。しかしながら、誤予測された分岐のために誤って投機的に実行された命令は、キャッシュ内のデータ又はデータ処理装置によって使用される他の非アーキテクチャ的な記憶構造において、なお影響を及ぼし、攻撃者が第2の実行環境からアクセス可能な重要なデータである可能性がある一部の情報を得るために試行するよう利用され得ることが認識されている。
【0012】
新しい分岐予測状態エントリの生成の際、現在の実行環境に関連付けられる値に基づいて分岐予測回路への入力の少なくとも一部のビットをエンコードすることを適用するためにコーディング回路を設けることにより、入力の少なくとも一部のビットのエンコードが実行環境特有の値に基づいているため、2つの異なる実行環境が同一の入力を与えたとしても分岐予測器は異なるように出力し、別の実行コンテキストを騙して同一の分岐予測状態エントリを再利用させる試行において、ある実行コンテキストが分岐予測回路を悪意のある分岐情報で訓練することをより困難にする。これにより上で議論したタイプの攻撃のリスクを低減する。分岐予測器は通常はセキュリティリスクをもたらすとは見なされず純粋にパフォーマンス向上対策として見なされているため、そのようなコーディング回路は有用であり、驚きである。
【0013】
一部の実例では、エンコード演算は一連の命令が実行されている現在の実行パーミッションを示す値に基づいて入力値の複数ビットの少なくとも一部をエンコードすることを含むことがある。これにより、異なる実行パーミッションに関連付けられる実行環境が入力を様々な方法でエンコードすることを可能にしており、攻撃者にはアクセス可能ではなくvictim(ヴィクティム)実行環境にはアクセス可能なデータを露出させる試行において、攻撃者が所望のターゲット・アドレスへ分岐するようvictim実行環境を異なる実行パーミッションで成功裏に制御できることを困難にしているが、なぜなら攻撃者の実行環境に関連付けられる値を使用してエンコードされた場合、入力のどの値が、攻撃対象となる別の実行環境に関連付けられる異なる値を使用してエンコードされたターゲット入力に一致するか、を攻撃者が推測することが困難な場合があるからである。
【0014】
コーディング回路によって適用されるエンコード演算は、現在の実行環境に関連付けられる値に基づいて入力の少なくとも一部のビットのビット値を変化させるあらゆる演算を含むことができる。現在の実行環境に関連付けられる値の単なる連結、及び入力回路によって受信される入力は、入力の少なくとも一部のビットのエンコードとは見なされないが、なぜなら、この場合入力のすべてのビットが、その本来の値を依然として保持することになるからであることに留意されたい。したがって、一般に、エンコードすることは、現在の実行環境に関連付けられる値によって定義される変形を使用して少なくとも1つのビットの値を変化させる。
【0015】
例えば、エンコード演算は、キーを使用して少なくとも一部のビットをエンコードすることを含むことがあり、この場合キーは一連の命令が実行されている現在の実行環境に基づいている。エンコード演算は、キーを使用して少なくとも一部のビットを再配列することを含むことができる(例えば、ビットのシフト又は他の並べ替えを適用すること)。さらに、エンコード演算は、キーを使用して入力のビットの少なくとも一部をトグルすることを含むことがある。例えば、トグルすることは、XOR(排他的OR)演算を入力の少なくとも一部のビット、及び現在の実行環境に関連付けられる値から導出したキーに適用することにより実装することができる。XOR演算は、パフォーマンス及びハードウェアの観点から効率的な場合がある。代替的に、エンコード演算は、キーに基づいて入力の少なくとも一部のビットに適用されるハッシュ関数を含んでもよい。エンコード演算は可逆であり得る(例えば、初めのXOR演算の結果に対して、同一のキーを使用して第2のXOR演算を適用することは、本来の入力を復元することができる)か、又は一方向のハッシュ関数であり得る。
【0016】
分岐予測回路への入力は、複数の情報を含む場合がある。エンコードは、入力の異なる部分に適用することができる。入力の全体をエンコードする必要はない。
【0017】
例えば、少なくとも1つの入力は、分岐命令の命令アドレスの指標を含むことがあり、それを使用してその分岐命令についての予測を与える新しい分岐予測状態エントリを形成することができる。分岐予測回路にクエリする時、分岐予測回路は、分岐予測がなされる命令の命令アドレスの指標を含むクエリ値を受信し、そのクエリ値を使用して検索を実施することができる。検索は、例えば、分岐予測回路が1つ又は複数の命令に関連する分岐予測状態エントリを記憶するかどうかを、命令アドレスがクエリ値によって指定されることに対応して、特定することがある。例えば、それぞれのエントリは、いくつかのタグ情報、又は分岐予測回路に与えられたクエリがそのエントリに一致するかどうかを検索が特定できるようにする他の状態データを含むことがある。クエリがミスとなり、続いてクエリによって示される命令アドレスが分岐命令に対応すると判断される場合、タグ情報又はミスを起こしたクエリに対応する他の状態を指定し、また分岐命令について決定された実際の分岐情報を指定する新しい分岐予測状態エントリを分岐予測回路に割り当てることができる。
【0018】
一実例において、コーディング回路は、検索の実施に先立って、現在の実行環境に関連付けられる1つ又は複数の値から導出されるキーを使用してクエリ値の複数ビットの少なくとも一部に対してエンコード演算を実施することができる。したがって、異なる実行環境はその環境特有のキーに基づいて同一のクエリを異なる方法でエンコードし、入力クエリと分岐予測回路のエントリとの間の、一致するとしてリターンされるマッピングを変更し、それによって異なる実行環境において一部の他のクエリ値に関連付けられる分岐を騙して攻撃者の実行環境によって割り当てられる予測状態を使用させるために、攻撃者が分岐予測器を訓練するためのクエリとして入力のどの値を与えるべきかを予測することをより複雑にしている。(分岐について予測されるデスティネーション・アドレスなどの予測される分岐状態に、ではなく)クエリ値にコーディングを適用することの利点は、エンコード演算を分岐予測回路へのクエリ入力に適用することが攻撃者をいらだたせるのに十分であり得、予測される分岐情報が依然として分岐予測回路にクリアな状態で記憶され得るため、分岐予測器から分岐状態情報を読み出す際にあらゆるデコードを適用することが必須ではないことである。これは、分岐予測器から出力される際デコード回路を通過する追加的なタイミング・パスを回避することによりパフォーマンスを改善することができる。
【0019】
他の実例では、ビットが新しい分岐予測状態エントリを形成するためにコーディング回路によってエンコードされる少なくとも1つの入力は、分岐命令のデスティネーション・アドレス(「分岐ターゲット・アドレス」又は「分岐ターゲット・オフセット」としても知られる)の指標を含むことができる。この場合は、装置は、命令アドレスを示すクエリ値に基づいてトリガされた分岐予測回路の検索に応じて出力される分岐予測回路からの出力に対して、逆のエンコード演算を実施するための逆エンコード回路(又はデコード回路)をさらに含むことができる。逆エンコード演算は、コーディング回路によって適用されたエンコード演算の効果を逆転させ、値がエンコード演算によって変形されたビットの本来の値を復元するあらゆる演算であり得る。この場合は、クエリ値とアクセスされる分岐予測回路のエントリとのマッピングを変更するのではなく、予測される分岐状態は現在の実行環境に関連付けられるキーに基づいて環境特有のやり方でエンコードされ、それによって第2の実行環境が第1の実行環境によって訓練された分岐予測状態エントリをヒットしたとしても、得られる分岐予測は、同一のエントリが第1の実行環境からアクセスされる場合になされる予測とは異なることができる。これは悪意をもって分岐予測器を訓練することによって攻撃者が異なる実行環境が分岐する位置を成功裏に制御することをより困難にする。これは、間違った分岐予測器状態エントリをヒットする機会を低減することによりパフォーマンスを改善することができる。
【0020】
逆エンコード回路は、現在の実行環境に関連付けられるキーの値を再計算し、キーの再計算された値を使用して逆エンコード演算を実施することができる。したがって、現在の実行環境が、分岐予測状態エントリが割り当てられる時間と、分岐予測状態エントリが予測を行うためにアクセスされる時間との間に変わると、現在の実行環境に関連付けられる値から導出されるキーは再計算されるため、逆エンコード演算はそのエントリの割り当てに対して予測分岐状態として与えられる情報に、異なる情報をもたらすことがある。
【0021】
上で議論した2つの手法を組み合わせるために、分岐の命令アドレス、及びデスティネーション・アドレスの両方へのエンコード演算を適用することも可能である。
【0022】
現在の実行環境に関連付けられるキーは、現在の実行環境に関連付けられる1つ又は複数の識別子の組み合わせに基づくことができる。例えば、キーは以下のうちの1つ又は複数のあらゆる組み合わせに基づくことができる:
例外レベル(異なる動作モード、例えば、ユーザ・モード、カーネル・モード、ハイパーバイザ・モードを区別する)
特権レベル(異なる実行パーミッションを区別する)
ASID(アドレス空間ID(address space ID)―異なるアプリケーション・レベルの実行コンテキストを区別する)
VMID(仮想マシンID(virtual machine ID)―異なるオペレーティング・システム若しくは仮想マシン・レベルの実行コンテキスト、又は異なるオペレーティング・システム若しくは仮想マシンの制御下で実行する同一のASIDを有するアプリケーションを区別する)
NS(non-secure/secure)(装置の現在のセキュリティ状態を示す非セキュア/セキュア状態)
物理プロセッサ・コア数(ハードウェア内に設けられる異なるプロセッサ・コアで実行するプロセスを区別する)
論理コア数(ハードウェア内に設けられる共有プロセッサ・コアの異なる論理パーティションで実行される実行環境を区別する)
1つ又は複数のソフトウェア書き込み可能レジスタ(キーのさらなる変形を提供するためのキーを導出するために使用されるさらなる入力をソフトウェアが与えることができるように、例えば、これはそのプロセス下で実行しているプロセスのASID又はVMIDなどのコンテキスト識別子を知っているプロセスが、そのプロセスによって使用されるキーの値を予測することをより困難にする)。
【0023】
また、キーは、以前に生成された乱数に基づいてさらに生成することができる。これは、現在の実行環境に関連付けられる識別子の所与の組み合わせについて生成されるキーのさらなる変形を与えることができ、あるデバイスによって使用されるキー(又はキーを導出するために使用される関数)を特定することができる攻撃者が、その知識を異なる乱数を使用し得る他のデバイスに適用することを困難にしている。乱数は、論理プロセッサごとの要素、物理プロセッサごとの要素、及びシステム全体の要素の少なくとも1つを含むことができる。以前に生成された乱数の少なくとも一部は、スタート・アップ時に生成することができるため、データ処理装置がスタート・アップする都度変化し、所与の実行環境に関連付けられるキーの破壊に対してさらなる耐性を提供する。例えば、ハードウェア乱数生成器又は疑似乱数生成器は、装置がブートされる都度新しい乱数を生成するようトリガされ得る。以前に生成された乱数の少なくとも一部は、真の乱雑さが求められなくてもよい疑似乱数であってもよい。
【0024】
一部の実施例では、一連の命令は、最低の実行パーミッション(最低の特権を有する実行パーミッション・レベル)で実行するように構成される複数の実行環境のうちの1つで実行され得る。例えば、最低の実行パーミッションにある実行環境は、アプリケーション又はアプリケーションのサブ部分を含む場合がある。一部の実例では、コーディング回路は、一連の命令が実行されている最低の実行パーミッションにある複数の実行環境のうちの1つの識別子にさらに基づくエンコード演算を実施することができる。これは、同一のアドレス変換レジームを共有することができ、そのために分岐予測器入力の分岐予測器のエントリへのマッピングを共有すると期待され得るアプリケーション・レベルのソフトウェアの異なる部分が、分岐予測器入力の異なるエンコードを使用させ、同一のアドレス変換レジームを共有する別のアプリケーション又はアプリケーションの別の部分に対して、あるアプリケーション又はアプリケーションの一部が上で議論した形態の攻撃を作り出すリスクを低減することを可能にしている。
【0025】
一連の命令が投機的な状態で実行されている間、命令フェッチ又はデコード・フォールトのレートを検出し、例外を発生させるか、又は所定のしきい値を超える増加などの所定の判定基準を満たす命令フェッチ及び/若しくはデコード・フォールトの検出率に応じてエラー応答を作り出すために監視回路を設けてもよい。例えば、しきい値は直前のレートよりも少なくとも20%高くてもよい。代替的に、しきい値は他のアプリケーションについての平均レートを20%上回ることができる。これは上で議論した形態の攻撃を検出するための技法を提供することができる。命令フェッチ・フォールトの回数が増加する場合、可能性のある説明としては、攻撃者が他のコードを騙して、不適切な分岐アドレスから命令を実行するように分岐予測器を訓練しようと試行していることが挙げられ得、これは後で誤予測として検出される。投機的な命令フェッチ又はデコード・フォールトのレートが増加する時に、例外又はエラー応答をトリガすることによって、潜在的な攻撃の警告を与えることができる。そのような警告に対してソフトウェアがどのように応答するよう選択するか、は実行されている特定のソフトウェアに依存することがあるが、命令フェッチ・フォールトで異常に高い増加が検出される際に割り込み/エラー応答をトリガするために監視回路を設けることは、ソフトウェアがそのソフトウェアに適当なやり方で応答することを可能にするためのハードウェア・フレームワークを提供することができる。
【0026】
一実例では、分岐予測回路は複数の分岐ターゲット・エントリを含む分岐ターゲット予測構造を含むことができ、それぞれの分岐ターゲット・エントリは少なくとも1つの分岐ターゲット・アドレスを指定する。コーディング回路は、現在の実行環境に関連付けられる暗号化キーを使用して、分岐ターゲット予測構造に書き込まれる新しい分岐ターゲット・エントリの少なくとも一部を暗号化するための暗号化回路を備えることができる。
【0027】
それぞれの分岐ターゲット・エントリはタグ情報を指定することができる。装置は、現在の実行環境に関連付けられる命令フェッチ・アドレスについて分岐ターゲット予測ルックアップを実施する分岐ターゲット予測回路を有することができる。分岐ターゲット予測ルックアップは、分岐ターゲット・エントリのサブセットのいずれかが命令フェッチ・アドレスについて決定されたターゲット・タグに対応するタグ情報を指定するかどうか判断することを含むことができる。分岐ターゲット予測ルックアップでルックアップされる分岐ターゲット・エントリのサブセットは、fully-associative(フルアソシアティブ型)キャッシュの実装形態の場合に分岐ターゲット予測構造の分岐ターゲット・エントリのすべてを含むことができるか、又はset-associative(セットアソシアティブ型)の実装形態で分岐ターゲット・エントリの一部のみ(分岐ターゲット・エントリの適切なサブセット)を含むことができる。set-associativeの実装形態では、ルックアップされる分岐ターゲット・エントリのサブセットを、例えば所与の分岐命令のアドレスの一部に基づいて選択することができる。
【0028】
一般に、ターゲット・タグは、命令フェッチ・アドレス、フェッチ・アドレスが生じる現在の実行環境、又は命令フェッチ・アドレスによって表現される現在の実行ポイントの何らかの性質を示す処理回路の最近の演算の一部の過去の履歴の何らかの性質に基づいて、何らかの方法で決定され得る。使用される特定のタグは、実装される分岐ターゲット予測構造のタイプに依存して変わってもよい。例えば、ターゲット・タグは命令フェッチ・アドレスから、又は現在の実行環境に関連付けられる1つ若しくは複数の識別子から導出することができるか、或いは命令フェッチ・アドレスによって特定される命令にたどり着く分岐結果の過去の履歴に基づいている場合もある。
【0029】
ターゲット・タグの値は、複数の実行環境で再利用可能であってもよい。したがって、ターゲット・タグは特定の実行環境に一意でなくてもよい。これは、例えば、特定の分岐ターゲット予測構造が現在の実行環境に関連付けられる識別子とは完全に独立しているタグを使用するため、又は分岐ターゲット予測構造のタグ情報記憶における回路エリアを節約するために、タグが現在の実行環境に関連付けられる値から導出された少なくとも一部を含む一方で、タグ情報及びターゲット・タグが、現在の実行環境を特定する1つ又は複数の実行環境識別子の圧縮されたバージョンに基づくことができるからであり得、そのため圧縮された識別子の値は実行環境ごとに再利用可能となり得る。
【0030】
したがって、一実行環境で使用されるターゲット・タグが、異なる実行コンテキストに関連付けられる分岐命令の実行後、分岐ターゲット予測構造のエントリに割り当てられたタグ情報とは一致しないことを保証することができない。これは分岐ターゲット予測構造で偽陽性ヒットをもたらすことがあるため、時に誤った分岐ターゲット・アドレスがリターンされることがあり、ひいては分岐誤予測は分岐後に間違った命令を実施させることがある。そのような偽陽性ヒットが処理パフォーマンスの低下を引き起こすことがある一方で、プロセッサをトリガして誤予測の分岐後にパイプラインされた命令をフラッシュし、いったん分岐結果が解決されると正しい処理経路から命令フェッチを再開させることによって、誤予測を扱うための分岐誤予測解決回路が既に設けられている場合がある。したがって、複数の実行環境にわたってタグ値の再利用によって引き起こされる偽陽性ヒットは、分岐誤予測の他の原因に類似する方法で解決される可能性があるため、またこれはパフォーマンスに影響する一方で典型的にはデータ・セキュリティにとってのリスクとは見なされることがないため、典型的には大きな問題とは考えられないであろう。
【0031】
しかしながら、実際には分岐ターゲット予測回路におけるそのような偽陽性ヒットは、データ処理装置によって処理されるデータのセキュリティへの脆弱性をもたらすことがあると認識されている。装置は、例えば特権ベースのデータ・アクセス保護スキームを使用して、一部のデータへのアクセスを一定の実行環境に制限することができる。分岐ターゲット予測回路での偽陽性ヒットは、そのようなセキュリティ・メカニズムをすり抜けさせることがあるため、第2の実行環境にはアクセス可能であり且つ第1の実行環境にはアクセス不可能な重要な情報についての情報を、攻撃者によって制御される第1の実行環境が取得できることが認識されている。分岐予測のメカニズムは通常、その誤予測がシステムによって処理されたデータのセキュリティにとって致命的ではなく、達成されるパフォーマンス・レベルに影響するだけの、パフォーマンス向上メカニズムと見なされるため、これは驚くべきことである。
【0032】
潜在的なセキュリティ脆弱性の理由としては、第1の実行コンテキストを制御している攻撃者が、第2の実行環境をトリガし、その分岐ターゲット・アドレスとして一定の既知のアドレス(以下で「偽ヒット・ターゲット・アドレス」と称される)を示す第1の実行環境によって割り当てられるエントリにヒットさせるよう実行環境同士のターゲット・タグ値の再利用を利用することができる場合、これは攻撃者が第2の実行環境を制御して偽ヒット・ターゲット・アドレスに配置された一定の悪意のあるコードに分岐させることができる。結果的に、第2の実行環境によって実行される分岐の実際のターゲット・アドレスが偽ヒット・ターゲット・アドレスとは一致しない可能性があるため、分岐予測が誤っていると判断することができ、次いで誤って実行された命令のアーキテクチャ上の効果を逆転させるために、誤って実行された命令に関連付けられるあらゆるアーキテクチャ的な状態を以前の正しい状態値に巻き戻すことができ、その一方で誤って実行された命令は、キャッシュ内のデータ、又はトランスレーション・ルックアサイド・バッファ(TLB:translation lookaside buffer)などの非アーキテクチャ的なプロセッサ状態を変えさせることもでき、これは誤予測が解決された後も存続することがある。攻撃者は、誤って実行された命令の結果としてデータがキャッシュされる特定のアドレスが、攻撃者がアクセスしたいと思う重要な情報に依存することを確実にするために、偽ヒット・ターゲット・アドレスに悪意のあるコードを設計しておくことがある。したがって、攻撃者は次に、どのデータがキャッシュされているかを精査するよう設計された第1の実行環境で命令を実行すること、及び誤予測された命令が実行された期間に、第2の実行環境によってどの情報がキャシュされたかを精査するためにキャッシュ・ミス・カウント又はメモリ・アクセス・レイテンシ測定値などのパフォーマンス・インジケータを使用することができる。これにより、攻撃者が第2の実行環境によって処理される潜在的に重要なデータについての情報を得て、システムのセキュリティ・メカニズムをすり抜けることが可能になる。
【0033】
したがって、分岐ターゲット予測構造に書き込まれる新しい分岐ターゲット・エントリの少なくとも一部は、その分岐情報に割り当てられる対応する実行環境に関連付けられる暗号化キーを使用して暗号化することができる。新しい分岐ターゲット・エントリのタグ情報、若しくは新しい分岐ターゲット・エントリの分岐データ(少なくとも予測される分岐ターゲット・アドレスを指定する)のいずれか、又は両方を暗号化することができる。タグ情報が新しい分岐ターゲット・エントリを割り当てる際暗号化キーを使用して少なくとも部分的に暗号化される場合、分岐ターゲット予測ルックアップの間、暗号化回路は命令フェッチ・アドレスについて決定されたターゲット・タグを現在の実行環境に関連付けられる(再計算された)暗号化キーを使用して暗号化することができ、分岐ターゲット予測回路は、分岐ターゲット・エントリのサブセットのいずれかがターゲット・タグに対応するタグ情報を指定しているかどうかを識別するために暗号化されたターゲット・タグを分岐ターゲット・エントリのサブセットのタグ情報と比較することができるか、又はルックアップされるエントリに記憶された暗号化されたタグ情報は復号化され(暗号化されていない)ターゲット・タグと比較されるか、のいずれかである。分岐データが新しいエントリを分岐予測構造に割り当てられる際に暗号化される場合、装置は、分岐ターゲット予測ルックアップでターゲット・タグに対応するタグ情報を指定するとして特定された分岐ターゲット・エントリのサブセットのうちの1つの分岐データの暗号化された部分を復号化するため復号化回路をさらに有する場合がある。
【0034】
例えば、ある特定の実例では、分岐ターゲット予測ルックアップにおいて、ルックアップされた分岐ターゲット・エントリのサブセットのいずれもターゲット・タグに対応するタグ情報を指定しない場合、また命令フェッチ・アドレスが分岐命令を含む1つ又は複数の命令のブロックを指定する場合、暗号化回路は、現在の実行環境に関連付けられる暗号化キーを使用して分岐命令について決定された実際の分岐情報を暗号化することができ、分岐ターゲット予測回路は、分岐ターゲット・エントリを、暗号化された分岐情報及びターゲット・タグに対応するタグ情報を指定する分岐ターゲット予測構造に割り当てることができる。一方で、ルックアップのヒットの際、分岐ターゲット・エントリのサブセットのうちの1つがターゲット・タグに対応するタグ情報を指定する場合、そのエントリに記憶される分岐情報は、現在の実行環境に関連付けられる暗号化キーを使用して復号化することができ、また復号化された分岐情報は、所与の分岐命令について予測された分岐情報として出力することができる。
【0035】
したがって、この実例では、分岐ターゲット予測構造内の分岐情報はその分岐情報に関連付けられる対応する実行環境に関連付けられる暗号化キーによって保護されるため、ある実行環境が分岐情報を割り当てる場合は、その環境はその環境に関連付けられるキーを使用して暗号化され、そうすると別の実行環境がそのエントリの同一のタグ情報を再利用する時に偽陽性ヒットが偶然に起こると、分岐情報は他の実行環境に関連付けられるキーを使用して復号化されることになり、同一の分岐ターゲット・アドレスを、エントリを割り当てた実行環境によって元々提供されたものとして示すことがない。通常、分岐予測器はデータのセキュリティ又は一貫性に影響を及ぼさない、純粋にパフォーマンス向上の対策として考えつくものであるため、分岐予測器で暗号化が有用であることは驚くべきことであるが、実行環境特有キーを使用して分岐情報を暗号化することにより、攻撃者がそれぞれの実行環境に関連付けられるキーを知らない場合、攻撃者が別の実行環境が分岐する位置を制御することがより困難であるため、上で議論したタイプの攻撃をずっと困難にする。
【0036】
いくつかの実例では、暗号化回路及び復号化回路は、別個の回路を備えることができる。例えば、場合によっては、暗号化された分岐情報を復号化するために適用される演算は、分岐情報を暗号化するために適用される演算とは同一でなくてもよく、そのため別個の暗号化及び復号化の方法を適用することができる。代替的に、暗号化及び復号化の演算は実際に同一の演算であってもよい。例えば、暗号化演算は分岐情報及び暗号化キーに対して可逆的な演算(例えば、XOR)を適用することを含むことができ、また復号化演算は暗号化された分岐情報及び暗号化キーに対して同一の可逆的な演算(例えば、XOR)を適用することを含むことができる。したがって、いくつかの実例では、暗号化回路と復号化回路とは両方、ハードウェアに設けられる同一の回路に対応することができる(2つの別個の回路ユニットを提供することが必要とならない)。代替的に、暗号化及び復号化演算が同一であっても、分岐ターゲット予測構造のあるエントリについての分岐情報の復号化を、別のエントリについての分岐情報の暗号化と並行して実施することができるように、別個の暗号化及び復号化回路を設けることがなお有用である場合がある。
【0037】
いくつかの実例では、暗号化キーは現在の実行環境に固定の静的なキーを含むことができる。したがって、それぞれの実行環境は、変わることのないある固定されたキーに関連付けられることができる。これは、攻撃者が、ある暗号化キーを使用して暗号化された値を復号化する結果を、暗号化で使用されたキーとは異なる復号化キーを使用して予測することをなお困難にできるため、十分なセキュリティを提供するために足る場合があり、この場合キーの1つ又は複数は未知である。複数の環境特有のキーは、それぞれの実行環境の記憶構造に記憶することができるが、複数の実行環境は大きい場合があるため、これは著しく大容量の記憶を要求することがある。現在の実行環境についての静的なキーを決定するための単純な手法は、複数の実行環境と現在の実行環境に特有の少なくとも1つの環境識別子とで共有される共通キーから静的なキーを導出することであり得る。例えば、共通キーは、上で議論したような、以前に生成された乱数であってもよい。例えば、共通キーは、上で言及したASID、VMIDなどの現在の実行環境の識別子に基づいてハッシュ化又は改変される場合がある。
【0038】
別の手法では、暗号化キーは現在の実行環境に可変の動的なキーを含むことができる。したがって、環境ごとに変わるのと同様に、暗号化キーは特有の環境について時間ごとに変化することもできる。これは、攻撃者が、ある期間にかけてデータ処理システムの挙動を観察することによって所与の環境についてのキーを導出できる機会を低減するため、かなりのセキュリティを与えることができる。したがって、装置は、現在の実行環境についての更新された暗号化キーを生成するためのキー生成回路を備えることができる。例えば、キー生成回路は、必要とされる場合に所与の実行環境についての暗号化キーのために、新しい乱数値又は疑似乱数値を生成するために、線形帰還シフト・レジスタ(LFSR:linear feedback shift register)などの乱数又は疑似乱数生成器を備えることができる。キーが更新されるタイミングは、任意であることができるか、又はある所定のイベントに応じたものであってもよく、或いは一定の時間期間若しくは分岐予測イベントの回数の満了においてであってもよい。いくつかの実例では、それぞれの分岐ターゲット・エントリのタグ情報は、クリアな状態で記憶されているため、タグ情報には暗号化も復号化も適用されない。これはタグの比較を単純にすることができる。分岐情報を暗号化することは、上で議論したような攻撃の確率を低減するのに足りる場合がある。
【0039】
代替的に、分岐ターゲット・アドレスを示す分岐情報を暗号化することに加えて(又はその代わりに)、タグ情報は暗号化することができる。したがって、命令フェッチ・アドレスが分岐を含む命令のブロックを参照しているとして特定される場合、分岐ターゲット予測ルックアップでミスがあると、ターゲット・タグは、現在の実行環境に関連付けられる暗号化キーを使用して暗号化することができ、暗号化されたターゲット・タグは、割り当てられる分岐ターゲット・エントリについてのタグ情報として指定することができる。分岐ターゲット予測ルックアップにおいて、復号化回路が分岐ターゲット・エントリのサブセットのそれぞれのタグ情報を復号化することができ、分岐ターゲット予測回路は復号化されたタグ情報をターゲット・タグと比較することができる。代替的に、分岐ターゲットのルックアップから暗号化されたターゲット・タグは、分岐ターゲット予測構造に記憶される暗号化されたタグ情報と直接比較し、タグ同士が一致するかどうか特定することができ、復号化の必要性を回避する。
【0040】
場合によっては、タグ及び分岐情報は、ある暗号化はタグに適用され別の暗号化は分岐に適用されて、別個に暗号化又は復号化することができ、この場合、タグの暗号化(所望であれば、暗号化された、又は復号化された形態で比較)を扱う手法のいずれかが使用され得る。しかしながら、他の実例では、タグ情報及び分岐情報は単一の暗号化スキームで共に暗号化することができる。暗号化された値が分岐情報及び環境特有の暗号化キーだけでなく、分岐に伴って与えられるタグ情報にも依存する場合(タグ情報は、分岐情報の暗号化についてさらなる乱雑さを与えることができる)、分岐情報に適用された暗号化を破ることが困難な場合があるため、これはさらなるセキュリティを与えることができる。しかしながら、この場合、一致エントリがあるかどうか確認するために、復号化されたタグがターゲット・タグと比較され得る前に、復号化回路はタグのブロック全体及びそれぞれのルックアップされたエントリの分岐情報を復号化する必要がある場合があるため、これは低速である可能性があり、もしそうであれば、復号化された分岐情報を出力することができる。
【0041】
したがって、要約すると、暗号化/復号化のために遂行される手法、並びに分岐情報及びタグが暗号化される程度は、パフォーマンスとセキュリティとの所望のトレードオフに依存する可能性がある。
【0042】
一般に、分岐ターゲット・アドレスを示すあらゆる情報を、分岐情報として使用することができる。いくつかの実例では、分岐情報(暗号化の前、又は復号化の後のクリアな状態で見た時)は明示的に分岐ターゲット・アドレスを示すことがある。分岐ターゲット・アドレスは、絶対アドレスとして、又は分岐ターゲット予測ルックアップが実施される現在の命令フェッチ・アドレスに対するオフセットを使用して相対アドレスとして示されることができる。いくつかの実例では、分岐ターゲット・アドレスは、分岐情報によって直接特定されなくてもよいが、分岐情報は分岐ターゲット・アドレスを特定する何らかの他の構造へのポインタを提供することができるか、又は分岐ターゲット・アドレスを計算するために使用することができる。したがって、一般に、分岐情報は、予測される分岐ターゲット・アドレスを決定できるようにする、あらゆる情報を含むことができる。
【0043】
いくつかの実例では、分岐情報は分岐ターゲット・アドレス以外のあらゆる他の情報を指定しなくてもよい。しかしながら、いくつかの実例では、分岐情報は少なくとも1つの他の分岐情報をさらに示すことがあり、命令フェッチ・アドレスによって特定される1つ又は複数の命令のブロック内において分岐命令のいくつかの予測される性質を表現している。例えば、さらなる情報は、分岐が条件付きの分岐命令かどうか、分岐ターゲット・アドレスが分岐ターゲット予測構造とは別個の何らかの他の分岐ターゲット予測器を使用して予測されるべきかどうか(例えば、ターゲット・アドレスがその分岐に先行する過去の処理結果に応じて変化する多形(polymorphic)分岐のターゲットを予測するための分岐ターゲット予測器)、又は分岐がファンクション・コール若しくはファンクション・リターンを表現しているかどうかを指定することができる。そのような追加的な分岐情報は、分岐ターゲット・アドレスを特定する情報と共に暗号化/復号化することができる。
【0044】
ターゲット・タグは命令フェッチ・アドレスの性質の範囲に依存し得るが、一実例では、分岐ターゲット予測回路はターゲット・タグを、現在の実行環境に関連付けられる少なくとも1つの環境識別子に応じて決定することができる。これは異なる環境で生じる同一のアドレスについてなされた予測同士の偽陽性ヒットを回避することを助けることができる。例えば環境識別子は、アドレスに関連付けられる仮想マシンを識別する仮想マシン識別子、及び/又はアドレスに関連付けられるプロセスを識別するプロセス識別子を含むことができる。
【0045】
ターゲット・タグが現在の実行環境に関連付けられる少なくとも1つの実行環境識別子に依存する場合、実行環境同士の間でターゲット・タグ値の再利用があるべきではないことを期待するかも知れない。しかしながら、実際には、データ処理装置によって実行され得る多くの異なる環境があり得るが、情報を分岐ターゲット予測構造に記憶されて有する異なる環境の数は、いつでもずっと少なくなる可能性がある。ひいては、それぞれのエントリのタグ情報の完全な環境識別子を表現することは、大量のビット数を必要とすることがあり、実際にはこの情報の多くは冗長であり得るが、それは分岐ターゲット予測ルックアップの目的について、現在の実行環境を、分岐ターゲット予測構造でキャッシュされた分岐情報を現在有する他の実行環境と区別することだけが必要とされるため、また、現在の実行環境を分岐ターゲット予測構造内で表現される分岐情報を有していない他の環境と区別する必要がないためである。したがって、完全な環境識別子を記憶することは、不必要にそれぞれの領域エントリのサイズを大きくし、比較器の数がタグ情報のそれぞれのビットをターゲット・タグと比較するために必要とされ、回路エリアを大きくする。
【0046】
したがって、回路エリア及び電力消費を削減するために、いくつかの実装形態は、複数の領域エントリを有する領域テーブルを提供することができ、それぞれの領域エントリは分岐コンテキスト情報を、分岐コンテキスト情報よりも少ないビットを含む領域識別子にマッピングする。分岐コンテキスト情報は、対応する実行環境に関連付けられる少なくとも1つの識別子を含むことができる。分岐ターゲット予測ルックアップを実施する際、ターゲット・タグは、現在の命令フェッチ・アドレスに関連付けられる領域テーブルによって分岐コンテキスト情報(少なくとも1つの識別子を含む)にマッピングされるターゲット領域識別子に基づいて決定することができる。それぞれの分岐ターゲット・エントリについてのタグ情報は、実行環境の識別子の代わりに領域識別子を指定することができる。したがって、領域テーブルは、実行環境識別子の大量のセット、及び分岐コンテキスト情報を特定するために使用されるあらゆる他の情報を、分岐ターゲット予測構造内でタグとして使用されるより短い識別子に圧縮してエリアを節約することを、効果的に可能にしている。
【0047】
そのような領域テーブルを使用する手法では、領域エントリの数は有限であり得るため、領域テーブルで割り当てられる対応する領域エントリをまだ有していない新しい実行環境に遭遇すると、以前異なる実行環境に割り当てられた領域エントリが現在の実行コンテキストについて再利用される必要がある場合がある。領域エントリが再利用される場合、対応する領域識別子は、依然として分岐ターゲット予測構造においてあるエントリについてのタグとして使用される場合がある。偽陽性ヒットを防ぐためにこれらの古くなった分岐ターゲット・エントリが分岐ターゲット予測構造から無効化されることがある一方で、そのような無効化を実施することは、再利用されている選択された領域識別子の情報を削除するために、分岐ターゲット予測構造をウォーク・スルーするための特殊な回路を必要とすることがあるため、パフォーマンス及び複雑性の観点からコスト高であり得る。実際には、あらゆるケースで、そのエントリに基づく分岐誤予測がある場合、古くなったエントリは削除されると期待されるため、このパフォーマンス・コストは正当化されない場合がある。したがって、領域テーブルを使用する実装形態は、領域テーブルの更新の際、分岐ターゲット・エントリを無効化しないようにする傾向があるため、分岐ターゲット予測構造で偽陽性ヒットとなりやすい。したがって、上で議論したような分岐情報の暗号化/復号化は、セキュリティを改善するために領域テーブルを使用する分岐ターゲット予測器について、特に有用である場合がある。
【0048】
それぞれの実行環境に関連付けられる暗号化キーは、別個の記憶構造に記憶することができるが、領域テーブルが与えられると、それぞれの領域エントリが対応する実行環境に関連付けられる暗号化キーを指定すると効率的な場合がある。したがって、暗号化キーはターゲット領域識別子をルックアップするのと同時に領域テーブルから読み出され、別個の記憶構造の別個のルックアップの必要性を省くことができる。この手法は、すべての実行環境についての暗号化キーを記憶する必要がないことをさらに意味している。代わりに、キーは、領域テーブルによって領域識別子に現在マッピングされる特定の実行環境についてのみ維持され得る。他の実行環境については、分岐ターゲット予測構造に現在関与していないため、あらゆる暗号化キーを維持する必要がない。したがって、この手法は、記憶する必要があるキーの数をさらに低減することができる。
【0049】
所与の実行環境に関連付けられる暗号化キーは、領域テーブルの所与の領域エントリによって与えられるマッピングがやはり更新される時に、更新され得る。つまり、領域テーブルの領域エントリが異なる実行環境に割り当てられなければならない時、マッピング更新後にその領域エントリに関連付けられる実行環境についての新しいキーを生成するために、その領域エントリについて指定された暗号化キーもやはり更新され得る。これは、ある環境に関連付けられる古いキーが新しい環境に対して同一なままとなることを防ぎ、ひいてはそれぞれの環境が異なるキーを使用することを確実にしている。
【0050】
いくつかの実装形態では、領域テーブルによって領域識別子にマッピングされた分岐コンテキスト情報は、現在の実行環境を識別する1つ又は複数の実行環境識別子を含むことができるが、あらゆる他の情報を含むことができない。
【0051】
しかしながら、他の手法では、分岐コンテキスト情報は他の情報にもやはり依存することがある。例えば、分岐コンテキスト情報は、以前の分岐ターゲット予測ルックアップによって所与の領域エントリが領域テーブルに割り当てられた命令フェッチ・アドレスの部分をさらに含むことがある。したがって、命令フェッチ・アドレスの一部は、領域テーブルをルックアップし、対応する領域識別子を特定するために使用され、これは命令フェッチ・アドレスのその部分を、分岐ターゲット予測構造のそれぞれの分岐ターゲット・エントリに、タグ情報として記憶する必要を回避している。しばしば、命令フェッチ・アドレスの最上位部分は、所与の実行環境によって使用される多くのフェッチ・アドレスと同一である場合があり、特定の実行環境の所与の時間フレーム内で使用されるすべての命令フェッチ・アドレスにわたって使用される、その最上位部分について異なる値の数は、比較的少ないことがある。したがって、領域テーブル内の命令フェッチ・アドレスのこの部分を表現し、それを実行環境識別子と共に短い領域識別子に圧縮することによって、それぞれの分岐ターゲット・エントリに必要とされるタグ記憶の量、及びターゲット・タグを記憶されたタグ情報と比較するための比較ロジックの量を低減することができる。
【0052】
分岐ターゲット予測構造の他の形態は、所与の実行環境に関連付けられる実行環境識別子とは独立したタグを使用する可能性がある。例えば、分岐ターゲット予測構造のあるタイプを使用して、実行された以前の分岐に応じて挙動が変化する、ある分岐命令のターゲット・アドレスを予測することができる。例えば、所与の分岐命令の分岐ターゲット・アドレスは、例えばより前の条件付き命令の結果に応じて、それらの条件付き命令自身が分岐結果の過去の履歴に依存することがある、異なる可能な分岐ターゲット・アドレスの範囲の1つとして計算されることができる。そのような分岐ターゲット予測構造に関して、タグは命令フェッチ・アドレス、及び命令フェッチ・アドレスの命令に先行する以前の分岐命令の分岐結果の履歴に依存することがあるが、現在の実行環境の環境識別子とは独立していることができる。したがって、このタイプのタグでは、所与の命令アドレス及び分岐結果の履歴が異なる環境で生成された可能性があるため、タグのその値は複数の実行環境で再利用可能であることができる。異なる環境間の偽陽性ヒットに起因してvictim環境を攻撃者環境によって制御される何らかの命令アドレスへ強制的に分岐させようとする試行において、やはり、これは攻撃者に分岐ターゲット予測構造を、攻撃対象となる何らかのvictim環境で使用されると期待される所与の分岐履歴についての分岐情報でポピュレートさせる道筋を与える場合があり得る。上で議論したような分岐ターゲット予測構造において、分岐情報及び/又はタグ情報の暗号化(また、必要であれば復号化)を使用することによって、間違った環境の暗号化キーを使用して暗号化された分岐情報を復号化することは、攻撃者によって制御することができる既知のアドレスにたどり着く可能性が低いため、そのような攻撃をより困難にすることができる。
【0053】
図1は、複数のパイプライン工程を含む処理パイプラインを有するデータ処理装置2の実例を概略的に図示している。パイプラインは、分岐命令の結果を予測するため、及びフェッチされる命令の一連のフェッチ・アドレスを生成するための、分岐予測器4を含む。フェッチ工程6は、フェッチ・アドレスによって特定された命令を命令キャッシュ8からフェッチする。デコード工程10は、フェッチされた命令をデコードして、パイプラインの後続の工程を制御するための制御情報を生成する。リネーム工程12は、レジスタのリネームを実施して、命令によって特定されたアーキテクチャ上のレジスタ指定子をハードウェアに設けられたレジスタ14を特定する物理レジスタ指定子にマッピングする。レジスタのリネームは、アウトオブオーダー実行をサポートするために有用である場合があるが、これにより、同一のアーキテクチャ上のレジスタを指定する命令間の障害を、それらをハードウェア・レジスタ・ファイル内の異なる物理レジスタにマッピングすることにより除去できるからであり、命令がキャシュ8からフェッチされた際のそのプログラム順とは異なる順で実行することができる見込みを高め、オペランドが利用可能になるのを前方の命令が待機している間に後方の命令が実行できるようにすることによってパフォーマンスを改善することができる。アーキテクチャ上のレジスタを異なる物理レジスタにマッピングする機能は、分岐誤予測が起こった場合にアーキテクチャ的な状態のロール・バックをさらに促進できる。発行工程16は、実行待ちの命令を、それらの命令を処理するために必要とされるオペランドがレジスタ14で利用可能になるまでキューイングする。実行工程18は、対応する処理演算を実行するための命令を実行する。ライトバック工程20は、実行された命令の結果をレジスタ14に書き戻す。
【0054】
実行工程18は、分岐命令が正しく予測されていたかどうかを評価するための分岐ユニット21、算術又は論理演算を実施するための算術論理ユニット(ALU:arithmetic logic unit)22、浮動小数点オペランドを使用する演算を実施するための浮動小数点ユニット24、及びメモリ・システムからのデータをレジスタ14にロードするためのロード演算、又はレジスタ14からのデータをメモリ・システムに格納するためのストア演算を実施するためのロード/ストア・ユニット26などの複数の実行ユニットを含むことができる。この実例では、メモリ・システムは、レベル1命令キャッシュ8、レベル1データ・キャッシュ30、データと命令との間で共有されるレベル2キャシュ32、及びメイン・メモリ34を含むが、これは可能なメモリ・ヒエラルキの一実例に過ぎず、他の実装形態ではさらなるキャシュのレベル又は様々な配置構成を有することができることを了解されたい。ロード/ストア・ユニット26は、トランスレーション・ルックアサイド・バッファ36を使用することがあり、フェッチ・ユニット6はトランスレーション・ルックアサイド・バッファ37を使用して、パイプラインによって生成される仮想アドレスをメモリ・システム内の位置を特定する物理アドレスにマッピングすることができる。
図1に示されるパイプラインは一実例に過ぎず、他の実例はパイプライン工程又は実行ユニットの様々なセットを有する場合があることを了解されたい。例えば、インオーダ・プロセッサはリネーム工程12を有していないことがある。
【0055】
図2は、割り当てられる新しい分岐予測状態エントリを生成するために分岐予測器4へ入力を与える実例を図示している。入力には複数ビットが含まれる。例えば、この実例の入力は、分岐として特定された命令の命令アドレス、及び分岐が実行される時に分岐先のアドレスを示す分岐デスティネーション・アドレス(ターゲット・アドレス)を指定する。コーディング回路52は、一連の命令が実行されている現在の実行環境に関連付けられる値54に基づいて、入力の少なくとも一部のビットに対するエンコード演算を実施するために提供される。エンコード演算から得られるエンコードされた入力値は、次いで分岐予測回路4に与えられる。例えば、エンコードは、入力の命令アドレス又はデスティネーション・アドレスの一方又は両方の、すべて又は一部に適用することができる。
【0056】
図3A~
図3Cは、エンコード演算を実施する異なる実例を図示している(実例
図3A及び
図3Bでは、分岐のデスティネーション・アドレスの一部に適用されているが、実例
図3Cのように命令アドレスに適用することもできる)。
図3A~
図3Cで示されるように、入力アドレスの一部のビットはエンコード演算を残りのビットに適用される前に除去することができる。
図3Aでは、現在の実行環境(又は現在の実行パーミッション)に関連付けられる値から導出されたキーに基づいて、残りのビットの相対的順序の再配置が実施される。例えば、キーによって指定されるビット数分の右シフト、又は何らかの他のビットの並べ替えを実施することができる。
図3Bの実例では、エンコード演算は、キーと分岐予測器への入力の選択されたビットとのXORとして実施される。XORは、対応するキーに基づいてさらなるXORを実施することにより逆エンコード演算を実施することができる、可逆的なエンコード演算の実例である。
図3Cの実例では、キーに基づいて選択された入力のビットにハッシュ関数を適用することができる。キーはエンコードされる選択されたビットと同じビット数を含む必要はないことに留意されたい。一般に、適用されるエンコードの特定の形態に関わらず、入力の一部の値は、エンコードされる入力を分岐予測回路に与える前に変更されたそのビット値を有している。デスティネーション・アドレスのエンコードを示している
図3A及び
図3Bの実例では、除去されたビットは、逆エンコードを適用する時にその値が推論され得るか、又は知られている、ビットである場合がある。例えば、命令が既にそれらのサイズにアラインされている場合、アドレスの1つ又は複数の下位ビットを、常にそれらがゼロであるように除去することができる。同様に、デスティネーション・アドレスが命令アドレスからのオフセットとして表現されている場合、上位ビットは常にゼロである可能性があるため、逆エンコードを適用する際それらを復元する必要性がないことからコーディングを適用する前に除去することができる。対照的に、命令アドレスのエンコードについて、この手法では逆エンコードが必要ではなく、また変形は一方向変形であり得るため、除去されたビットが逆エンコードによって復元され得ることを確実にする必要がない。
【0057】
図4A~
図4Bは、所与の命令アドレスを指定するクエリに応答して予測された分岐情報を取り出すために分岐予測回路をクエリする2つの実例を示している。
図2のコーディング回路52が、エンコード演算を分岐のデスティネーション・アドレスの少なくとも一部のビットに適用する実例において、
図4Aが使用され得る。この実例では、分岐予測がなされる命令アドレスを指定する分岐予測回路に、クエリが与えられる。分岐予測回路4は、その記憶構造のルックアップを実施して、いずれかのエントリがクエリに一致するかどうかを特定し、あるエントリが一致する場合、エンコードされたデスティネーション・アドレス(現在の実行環境に関連付けられる値54に基づいてコーディング回路52によって生成された)が取り出され、出力される。逆エンコード回路56(いくつかの実施例ではコーディング回路52と同一である場合があり、又は実装されるエンコード/デコードのアルゴリズムに応じて異なっていてもよい)は、(
図2のように)一致する分岐予測エントリが分岐予測回路に書き込まれた時点ではなく分岐予測回路のクエリが実施された時点の現在の実行環境54に関連付けられるパラメータに基づいて再計算されていることを除いて、
図2で使用された現在の実行環境54に関連付けられる値と同じ方法で形成される再計算キー58に基づいて、エンコードされるデスティネーション装置へ逆エンコード演算を適用する。したがって、クエリがエントリを割り当てたのと同一の実行環境によってトリガされた後に一致エントリがアクセスされる場合、逆エンコード回路56によって出力される得られるデスティネーション・アドレスは、
図2で入力として元々与えられたデスティネーション・アドレスと同一となる。しかしながら、一致エントリがそのエントリを割り当てたのとは異なる実行環境からアクセスされる場合、デコードされるデスティネーション・アドレス60は元々割り当てられたものとは異なる。エンコード/逆エンコードのアルゴリズム、及び/又はキー(若しくはキーを生成するために使用される方法)は、攻撃者が逆エンコードされたアドレス60(アドレスをエンコードしたのとは異なるキーを使用して逆エンコードされる場合)を、攻撃者が一部の他の実行環境を分岐させたい所望の分岐ターゲット・アドレスに一致させるためにデスティネーション・アドレスのどの代替的な値を
図2で入力として与えるべきかを予測することを困難にするよう選択することができる。
【0058】
図4Bは、エンコード演算がコーディング回路52によって命令アドレス(又は、分岐予測回路4で一致エントリを位置付けるために使用される他のタグ情報)に適用される実例において分岐予測回路4をクエリするために使用される代替的な手法を示している。この場合、分岐情報の検索を実施するために分岐予測回路4をクエリする際、対応するコーディング回路52(
図2で使用されるものと同一の物理回路である可能性があり、又は異なる回路である可能性がある)は、同一のエンコード演算を、現在の実行環境に関連付けられる識別子に基づいて再計算された再計算キー58(分岐予測器にクエリする時点で再計算される)に基づいてクエリされた命令アドレスに適用し、例えば、キーにしたがって命令アドレスをエンコードするために一方向ハッシュを適用する。この手法では、分岐予測回路4から出力されたデータはエンコードされる必要がなく、代わりに分岐予測器へ入力として与えられるクエリと、クエリに一致すると思われる分岐予測器での位置とのマッピングをスクランブルすることによって攻撃に対する耐性が提供されるため、可逆的な演算を使用することは必須ではない。したがって、分岐予測回路4は、ハッシュ化されたクエリ情報に基づいて検索され、一致エントリから出力されるデスティネーション・アドレス62は、あらゆる逆エンコードを適用されることなくクリアな状態で出力され、クエリ入力として与えられる命令アドレスによって表現される分岐のための予測される分岐ターゲット・アドレスとして使用され得る。
【0059】
図5は、現在の実行環境に関連付けられる複数の識別子からキーを形成する実例を示している。これらの識別子は、処理パイプライン2に関連付けられる1つ又は複数の制御レジスタから取得することができ、これらは現在の実行環境の性質を指定する。例えば、キーは以下のいずれかに基づくことができる:
・例外レベル79
・実行特権レベル80
・アドレス空間ID(ASID)81
・仮想マシンID(VMID)82
・セキュリティ状態(NS)83
・物理コア数84
・論理コア数85
・真の乱数、又は疑似乱数であり得る、乱数値86。(疑似)乱数は、それぞれの論理プロセッサに関して異なる論理プロセッサごとの(疑似)乱数89、それぞれの物理プロセッサ・コアに関して異なる物理プロセッサごとの(疑似)乱数90、及びデータ処理システム内のすべての論理又は物理プロセッサ・コア間で共有されるが、あるシステム上でのキー・ブレイクが別のシステムで再利用され得る機会を低減するためにシステムごとに異なっている、システム(疑似)乱数91、のうちの少なくとも1つから導出することができる。(或いは、これらのうちの任意の1つ又は複数)。乱数のこれらの要素89、90、91のそれぞれは、データ処理装置2がスタート・アップする都度、更新され得る。
・1つ又は複数のソフトウェア書き込み可能レジスタ値87、エンコード演算についてさらなる乱雑さを与えるためにソフトウェアの制御下でレジスタ14に書き込むことができる。
・コンテナID86(最も制限されるアクセス権を有する最低の特権レベルにある実行環境の異なる部分を区別する識別子)。
【0060】
もちろん、特定の実装形態について、これらのパラメータのすべてを考慮する必要はない。一般に、現在の実行環境に関連付けられる1つ又は複数の識別子80~85、88に基づいて、また任意選択でソフトウェア定義値である乱数などのさらなるパラメータに基づいて、エンコード演算(及び、必要であれば逆エンコード演算)用のキーを生成することによって、異なる特権レベルを有する2つの異なる実行環境は、同一のキーを有する可能性は低く、そのため攻撃者がある実行環境において、多くのデータ・アクセス特権を有する実行環境を騙してセキュアなデータの露出を導き得る悪意のあるコードへ分岐させるように分岐予測器を訓練することが困難である。さらには、(疑似)乱数値をキー生成プロセスに追加することにより、攻撃者がどのキーかを決定することがなお困難となる。特に、乱数値を使用することは、攻撃者があるシステムに対して完全なアクセスを有していたとしても、リバース・エンジニアリングによって得られたいかなる情報も、(疑似)乱数値が異なるために別のシステムに使用されるキーを予測するために使用することができないことを意味している。同様に、それぞれの論理プロセッサ・コアでそれぞれの実行環境ごとに生成された異なるキーを有することが望ましい場合がある。複雑さとパフォーマンス上の理由から、論理プロセッサごとに別個の(疑似)乱数生成器を有することが望ましくない場合がある。この場合、キー生成プロセスにおいて、論理及び/又は物理コア数を伴う、プロセッサごと又はシステム・レベルごとの(疑似)乱数を使用することによって、同一の結果を得ることが可能な場合がある。いくつかの実施例では、キー生成プロセスは、様々なキー入力を共にハッシュ化することを含む場合がある。使用されるハッシュ化アルゴリズムは、(セキュアな)一方向ハッシュであり得る。
【0061】
つまり、いくつかの実例では、キーは少なくとも1つのキー入力パラメータに適用される一方向変形に基づいていることがあり、この場合、少なくとも1つのキー入力パラメータは、現在の実行環境に関連付けられる少なくとも1つの値を含むが(例えば、ASID、VMID、又は上で議論した例外レベル)、ソフトウェア書き込み可能値の乱数などの他の入力を含むこともできる。キーを生成するために一方向変形を使用することによって、これは攻撃者が1つを除くすべての入力を観察でき、アルゴリズムを知っており、また生成されたキーのいくつかを観察できたとしても、攻撃者が欠落している入力(例えば、乱数)が何であるかを理解することができないことを意味しており、ひいては攻撃者が異なる実行環境用のキーが何であるかを予測することができないことを意味している。
【0062】
図6は、フェッチ工程6が遭遇する命令フェッチ・フォールト、及び/又はデコード工程10が遭遇する命令デコード・フォールトのレートを監視するために監視回路95が設けられる実例を示している。フェッチ・フォールトのレートとデコード・フォールトのレートとは、別個に監視されてもよく、又は組み合わされたレートとして監視されてもよい。また、いくつかの実例では、これらのタイプのフォールトのうち1つだけが監視されてもよい(例えば、フェッチ・フォールトのみ、又はデコード・フォールトのみ)。フェッチ及びデコード・フォールトは様々な理由で発生することがあるが、1つとしては分岐予測器4による分岐誤予測を挙げることができる。攻撃者が分岐予測器を使用して上で議論したような攻撃をさせるよう試行する場合、より頻繁な分岐誤予測がある可能性がある。したがって、命令フェッチ及びデコード・フォールトのレートを、攻撃が仕掛けられているかのヒントを与え得るインジケータとして使用することができる。監視回路95は、一定のしきい値による所与の期間において命令フェッチ又はデコード・フォールトのレート数の増加が検出された場合、エラー応答をトリガする(割り込み又は例外を発生させるなど)ことができる。
図7は、連続的な時間の持続時間Tにおいて、命令フェッチ・フォールトのレートを集計するグラフを示している。
図7に示すように、命令フェッチ・フォールトのレートにおける増加が、ある期間から次の期間の間に、しきい値(例えば、20%)を上回って増加している場合、フォールト・ハンドリング応答がトリガされ得る。当業者であれば、本発明の範囲内で攻撃を検出するためにフォールト・レートを使用する多くの方法があることが了解されよう(例えば、所定のしきい値と比較する、又はプログラムの以前の実行のフォールト・レートと比較する)。ソフトウェアがそのような例外に対してどのように応答するよう選択するかは、変わることがあるが、これは攻撃が進行中であることをソフトウェアに伝達する手段を提供する。
【0063】
図8は、分岐予測器4の別の実例を概略的に図示しており、分岐命令が遂行されるか、遂行されないかを予測するための分岐方向予測器(BDP:branch direction predictor)140、遂行される場合に分岐命令がプログラムの実行をリダイレクトする先のターゲット・アドレスを予測するための分岐ターゲット・バッファ(BTB:branch target buffer)142、及びキャシュ8からフェッチされるプログラム命令のブロックを特定するフェッチ・アドレスをキューイングするためのフェッチ・キュー144(場合によっては、フェッチ・キューは分岐予測器4の一部の代わりにフェッチ工程6の一部と見なされることがあるが、機能性は同一であることに留意されたい)を含む。フェッチ・キュー144に配置されるアドレスは、命令キャッシュ8からフェッチされる命令のブロックのアドレスを表現しており、分岐予測器の以前の予測から導出される。キャシュ8から1ブロックでフェッチされる命令の単位は、「フェッチ・ブロック」と称されることがあり、一定のデフォルトのサイズ、例えば、16、32、又は64バイトを有することができるが、場合によっては、フェッチが実施される開始アドレスが自然なフェッチ・ブロック境界とアラインしていない場合、デフォルトのサイズよりも小さなサイズで部分的なフェッチ・ブロックのフェッチが実施される場合がある。
【0064】
分岐履歴バッファ又は分岐結果予測器とも称されることがあるBDP140は、分岐命令が、遂行される/遂行されない、の結果を予測するための分岐履歴情報を記録する。あらゆる既知の分岐が遂行される/遂行されない、の予測スキームが、BDP140のために使用され得る。例えば、gshare又はTAGEが、既知の分岐方向予測アルゴリズムの実例である。
【0065】
BTB142は、分岐命令について命令アドレスの一部に対応するタグによって特定された複数の分岐命令についての予測情報を保持している(また、可能性としては、コンテキスト識別子、又は現在の実行環境の他の識別子などの他の情報に依存する)。予測情報は、分岐についてのターゲット・アドレス、並びに対応する分岐命令の命令アドレス(プログラム・カウンタ、すなわちPC(program counter))、分岐に関するいくつかの属性(例えば、間接的、条件無し、ファンクション・コール、ファンクション・リターン、・・・かどうか)などの他の情報、又は以下で説明するような分岐の結果を予測するための他の情報を示すことができる。
【0066】
分岐予測器4は、多形である分岐命令のターゲット・アドレスを予測するために使用される特殊な種類の分岐ターゲット・バッファである、マルチターゲット分岐のターゲット予測器146をさらに含み、つまりそれらの分岐ターゲット・アドレスは時々変化するため、同一の命令フェッチ・アドレスにおける分岐命令の実行の異なるインスタンスは、分岐を進める以前の命令の結果に応じて異なるターゲット・アドレスとなる場合がある。BTB142及びマルチターゲット間接分岐ターゲット予測器146の両方は、分岐ターゲット予測構造の実例である。さらに、分岐予測器4は、コンテキスト識別子を、BTB142用のタグ情報として使用される短い領域識別子に圧縮するために使用される領域テーブル148を備える。
【0067】
フェッチ工程6が、命令キャッシュ8から命令のブロックをフェッチするために、所与のフェッチ・アドレスについて新しいフェッチを開始する時、分岐予測器4は、BDP140、BTB142及びマルチターゲット分岐のターゲット予測器146において、そのフェッチ・アドレスをさらにルックアップする。BTB142が、現在のフェッチ・アドレスによって表現されるプログラム・カウンタ・アドレスについての分岐ターゲット・アドレスを含む予測された分岐情報を保持する場合、その情報は、BTB142から読み出され、BDP140によって認められる。ルックアップは、分岐予測制御ロジック150によって制御することができる。BDP140によって、分岐が遂行されないと予測される場合、分岐予測制御ロジック150は、次のフェッチ・アドレスとして、加算器152によって一定のストライド量の分、インクリメントされた現在のフェッチ・アドレスのインクリメントされたバージョンを選択し、それによって以降のサイクルで使用される次のフェッチ・アドレスは、現在のフェッチ・アドレスから順次続いていく。一方で、BDP140が、分岐が遂行されると予測される場合、分岐予測制御ロジック150は次のフェッチ・アドレスとして、BTB142によって出力される予測された分岐ターゲットを選択する。いくつかの命令フェッチ・アドレスについて、BTB142は、アドレスが以前に多形であるとして検出された分岐を含む命令のブロックを参照することを示す属性を出力することがあり、この場合、多形の分岐属性は分岐予測制御ロジック150を制御して、マルチターゲット分岐のターゲット予測器146によって出力される分岐ターゲット・アドレスを、BTB142の出力の代わりに、次のフェッチ・アドレスとして選択する。マルチターゲット分岐のターゲット予測器は、その予測されたターゲット・アドレスを、現在の命令フェッチ・アドレスによって特定される現在の実行ポイントに先行する昔の分岐の分岐履歴を元にしており、分岐履歴とは無関係なBTB142によってなされる予測とは対照的である。
【0068】
分岐予測制御ロジック150によって出力される次のフェッチ・アドレスは、フェッチ・キュー144に割り当てられ、それによって、やがてアドレスがキューの手前に到達すると、フェッチ工程6によって対応する命令のブロックが命令キャッシュ8からフェッチされる。さらに、次のフェッチ・アドレスは、そのフェッチ・アドレスについての分岐予測器4の別のルックアップをトリガするために、以降の処理サイクルにおいて現在のフェッチ・アドレスとして入力される。このプロセスは、実行中のプログラム・コードをステップ実行するために、サイクルごとに続く。分岐ユニット21で分岐誤予測が検出された場合、分岐命令の実際の結果が分岐予測器4によって生成された予測された結果と異なる時、信号がフェッチ工程6に送信し戻され、フェッチ・キューをリセットして実際の分岐ターゲット・アドレスからのフェッチを再開し、将来的に予測が正しい可能性を高めるべく分岐の実際の結果に基づいて様々な予測構造140、142、146の内容を更新する。
【0069】
要約すると、BTB142(分岐ターゲット・アドレス・キャッシュ(BTAC:branch target address cache)としても知られることがある)は、分岐の予測されるターゲット・アドレスを特定するために使用される分岐予測器4の構成要素である。したがって、BTBは事実上、それぞれのエントリが分岐位置(分岐命令の、プログラム・カウンタ、又は分岐命令アドレス)、分岐についての予測されたターゲット・アドレス、及び可能性としては分岐が条件付きかどうか、また例えば分岐がファンクション・コール又はファンクション・リターンを表現しているかどうかを指定する属性などの他の傾向を与える、小さなエントリのキャッシュであることができる。異なる実行コンテキスト(例えば、プロセッサ2又は異なる仮想マシンによって実行中の、異なるプロセス)は異なる分岐を参照するために同一の仮想アドレスを使用することがあるため、不必要なアドレス衝突を回避するためにそれぞれのBTBエントリは、プロセス識別子及び/又は仮想マシン識別子などのコンテキスト情報でタグ付けされてもよい。
【0070】
図9は、領域テーブル148を使用しない実施例における、BTBの実装形態を示している。この実例では、BTB142は、それぞれのエントリ156がBTBルックアップの際そのエントリが現在のフェッチ・アドレスに関連するか特定するためのタグ情報を与えるタグ部分158を含む複数のエントリ156と、分岐ターゲット・アドレス166及び現在の対応する分岐に関連付けられるあらゆる他の情報168を含む予測された分岐情報を与えるデータ部分160とを含む。この実例では、タグ部分158は、タグ情報として、対応する分岐が実行され命令フェッチ・アドレス164が分岐に対応している(命令のブロックのプログラム・カウンタが分岐を含んでいる)実行環境(コンテキスト)を識別する1つ又は複数の実行環境識別子162を指定する。データ部分は、分岐ターゲット・アドレス166、及び分岐が条件付き、ファンクション・コア、ファンクション・リターンなどかどうかを指定する属性などの他の情報168を含む。
【0071】
いくつかの実装形態では、データ部分160は、(
図9には図示していないが)分岐アドレス164の最下位ビットをさらに含むことができる。これは、複数の命令がサイクルごとに実行される、スーパスカラのプロセッサで有用である場合があり、この場合、分岐予測器4は複数命令のブロックを並列に予測する必要があるため、それぞれのエントリが命令のブロックにマッピングする場合がある。命令フェッチ・アドレスの最下位ビットは、ブロック内のあらゆる命令がエントリに対して一致できるよう、タグ部分158から排除されることがある。しかしながら、所与のエントリによって表現されるブロックからの命令フェッチ・アドレスが入力されても、命令フェッチ・アドレスがそのエントリに関連付けられるブロックで発生する最後の分岐のアドレスよりも後方である場合、その命令フェッチ・アドレスの後で分岐は発生せず、そのためその分岐に関連付けられる分岐予測は実行されるべきではない。したがって、分岐ターゲット・アドレス・エントリ156のデータ部分160で分岐アドレスの最下位ビットを含むことにより、これはBTB142でルックアップされた現在の命令フェッチ・アドレスが与えられた場合、一致エントリによって表現される予測が実行されるべきかどうかの判断を可能にする。
【0072】
BTBに与えられるキャッシュは、様々な方法で実装することができる。いくつかの実例では、キャッシュは、所与の分岐についての分岐情報がBTB内のあらゆる場所に配置できるように、fully associativeであることができる。しかしながら、実際にはset-associativeキャッシュの実装形態がより効率的である場合があり、この場合、所与の分岐についての分岐情報を記憶できる場所は、分岐ターゲット・バッファのルックアップの間に所与のフェッチ・アドレスについてルックアップされなければならないエントリの数を低減するために、特定のセット(分岐を含む命令ブロックの命令フェッチ・アドレスに基づいて特定される)に限定される可能性がある。
【0073】
典型的には、十分に高いパフォーマンスを提供するために十分な分岐情報を記憶することができるように、BTBは比較的多数、例えば数千のエントリを有することができる。しかしながら、実際には、1つの実行コンテキストはそのコンテキストの多くの命令についてキャッシュされた分岐情報を有することができるため、所与の時間にBTBに記憶された情報を有するコンテキストの数は例えば最大10などずっと少ない可能性がある。やはり、所与のコンテキストに関連付けられる分岐命令の多くは、分岐命令アドレス164の上位の部分について同一の値をすべて共有することができる。このことは、
図3に示される方法で実装されている場合、識別子の完全なコンテキストを明示的に示しているため、タグ情報158が大量の冗長な情報を含むことがあることを意味しており、完全な分岐命令アドレスはタグ158について比較的多数のビットを必要とする場合があり、BTB142に必要な回路エリアを増加させ、BTB142のルックアップ中にタグの比較に必要とされる比較器の数も増加させる。
【0074】
図10に示すように、BTBのエリア効率を改善するために、分岐予測器4は、領域テーブル148を使用してこの冗長な情報を短いタグ値に圧縮することができる。
図10の実例では、BTBのそれぞれのエントリ156は、やはりタグ部分158及びデータ部分160を有しており、データ部分160は
図9と同一である。しかしながら、BTB152内でタグ158の実行コンテキスト識別子162及び完全な分岐命令アドレス・タグ164を表現する代わりに、タグ部分は代わりに分岐命令アドレスのタグ部分の下位部分169、並びにコンテキスト識別子162及び分岐命令アドレスの上方部分167を指定する領域テーブル内の対応する領域エントリ170を指す領域識別子171のみを指定する。
図10では、それぞれの領域エントリ170に領域識別子は明示的に示されていないが、対応する領域エントリ170のインデックスから暗示されていることに留意されたい(例えば、領域テーブルの第1のエントリは領域識別子#0に関連付けられ得、次のエントリは領域識別子#1に関連付けられ得るなど)。領域テーブル148は、BTB142よりずっと小さい場合があり、例えば10から100の間のエントリを有し、
図10の実例で例えば32などである。BTB142をルックアップする時、現在の実行コンテキスト及びプログラム・カウンタの上方ビット(例えばビット48~21)を特定する1つ又は複数のコンテキスト識別子が、領域テーブル内でルックアップされ、対応する領域識別子を特定し、次いで領域識別子及びプログラム・カウンタのタグ・ビットの下位部分(例えばビット20~16)がBTB142をルックアップするためのタグ情報として使用される。プログラム・カウンタの最下位ビット(例えば15~0)は、set associativeのBTB142の対応するセットにインデックス付けするために使用されるビットであるため、タグでは全く使用されないことに留意されたい。したがって、領域テーブル148によって、BTBエントリ156のタグ部分158のサイズを小さくすることができる。これは、BTB142をルックアップする目的のために、現在の実行コンテキストをすべての他の実行コンテキストと区別することは必須ではなく、代わりに必要なことは現在の実行コンテキストをBTB142で分岐情報を現在有しているあらゆる他の実行コンテキストと区別することである、という事実を活用している。
【0075】
しかしながら、
図11に示すように、領域テーブル148を使用してBTB142を実装する場合、これは分岐予測器4が、ある実行コンテキストからの分岐が、異なる実行コンテキストによって割り当てられたBTBエントリの分岐情報と一致すると判断する、何らかの偽ヒットにつながることがある。これは、領域テーブル148への更新の前後での、ある実例におけるBTBの内容を示している、
図10と
図11を比較することで分かる。
図10では、BTBはaddr1、addr2、addr3において、現在3つの分岐についての分岐情報をそれぞれ含んでいる(それぞれエントリ156-1、156-2、156-3によって表現されている)。エントリ156-1及び156-3によって表現される分岐は、領域テーブル・エントリ#Aによって表現されるプロセス1に関連付けられ、BTBエントリ156-2によって表現される分岐は、領域テーブル・エントリ#Bによって表現されるプロセス2に関連付けられる。
【0076】
図11に示すように、次に第3のプロセスが分岐命令を実行し、情報をBTB142に割り当てることを必要とするが、プロセス3は割り当てられた領域テーブル148にエントリを現在1つも有していない。すべての領域テーブル・エントリが既に占有されている場合、これは領域エントリ170を削除して新しいプロセスに再割り当てするよう要求するため、例えば、以前はプロセス1に割り当てられていた領域エントリ170-1は、今度はコンテキスト識別子及びプロセス3に関連付けられる上方アドレス・ビットを提供するように更新され得る。分岐ターゲット・バッファ・エントリ156-1は、以前の分岐1をプロセス3に関連付けられる新しい分岐で置き換えるように、さらに更新され得る。しかしながら、更新された領域テーブル・エントリの領域識別子#Aを指定している別のBTBエントリ156-3は、この工程で無効化されなくてもよく、以前はプロセス1に関連付けられていた分岐3に関連付けられる情報を提供し続けることができる。領域テーブルへの更新があった場合に、そのような古くなった分岐を除去するためにBTB142をウォーク・スルーするための無効化ロジックは、通常は用意されないが、その理由は、さらなる回路を必要とすることになるからであり、また、そのような誤った分岐情報は、予測がその情報に基づいてなされる場合あらゆるケースで検出可能であると期待されるが、その理由は実行工程18において分岐の実際の分岐結果は、間違った実行コンテキストからの分岐予測データが使用される場合は予測とは異なり、そして関与するBTBエントリの無効化がトリガされ得るからである。これがパフォーマンスの低下を引き起こすことがある一方で、実際には領域テーブル識別子の再利用とは関連しない他の理由で誤予測が起こる可能性があるが、処理パイプライン2における同一の誤予測解決ロジックを再利用することができるため、これは大きな問題ではない。したがって、領域テーブル148を使用する典型的なBTB実装形態では、更新されている領域テーブル・エントリにマッピングする領域識別子を有するエントリは、
図11で示される実例156-3のように、異なる実行コンテキストによって割り当てられた古くなった分岐情報と存続し続けることがある。
【0077】
したがって、領域テーブル・エントリが更新される場合、BTB142の古いエントリは、更新された領域テーブル・エントリに割り当てられる新しいプロセスからの後続の分岐命令に対してヒットすることがあり、これは異なる実行コンテキストからの以前に割り当てられた分岐情報に対する偽ヒットを引き起こす場合がある。以前、このことはセキュリティの問題ではなく、パフォーマンスの問題と見なされるだけであった。しかしながら、攻撃者が、攻撃者の制御下にない別の実行コンテキストの投機的実行を制御して、そのプロセスによって管理される秘密データについての情報を露出させるために、BTBのこの性質を使用することができることが認識されている。これは、以下の条件の両方が満足される場合に可能である:
・条件1:プロセスAが、別のプロセスBによってBTB142に与えられたターゲット・アドレスを使用することができる。
・条件2:プロセスBが、プロセスAによってアクセスされるBTBエントリのターゲットを制御することができる。
図11の上の実例では、異なるコンテキスト間のBTBにおいてタグ情報として使用される領域識別子の再利用により、プロセス3はプロセス1によって与えられるターゲット・アドレスを使用することができる(条件1)。やはり、プロセス1は、プロセス3によってアクセスされるBTBエントリのターゲットを制御することができるが、その理由はプロセス3の分岐とタグ・ビット[20:16]を共有する所望のターゲット・アドレスで分岐を実行することができるからであり、それによって、所望のターゲット・アドレスは、プロセス3によってヒットされるBTB142のエントリに割り当てられることになる。より一般的には、これらの条件は、タグ情報158の値が複数の実行コンテキスト間で再利用することができる分岐ターゲット予測構造で生じる可能性がある。領域テーブルは、これが生じ得る理由の1つであるが、他の理由は単純にタグ情報が現在の実行コンテキスト(現在の実行環境)の識別子に依存しないことである。
【0078】
上述の2つの条件は、以下のような攻撃の基本として使用され得る。第1に、プロセス1を制御する攻撃者は、victimプロセス3を制御して攻撃者へ秘密データを露出し得る何らかの動作を実施させるために、そのvictimプロセス3によって実行されるよう設計された何らかの悪意のある一連の命令にマッピングする分岐ターゲット・アドレスを指定するBTBエントリが割り当てられる結果となる分岐命令を実行する可能性がある。領域テーブルが更新され、以前攻撃者プロセス1に使用された領域識別子がvictimプロセス3に再割り当てされた後、victimプロセス3は、攻撃者プロセス1によって割り当てられた古くなったBTBエントリ内のタグ・データと一致するアドレスからの命令を実行し、そして攻撃者によって与えられたその情報に基づいて分岐予測が行われる。これにより、一連の命令の投機的実行に、攻撃者によって与えられた分岐ターゲット・アドレスを形成させることになる、つまり、非アーキテクチャ的な状態におけるような足跡を残すことにより(例えばデータ・キャッシュ)、victimプロセス3を騙して秘密データを露出させるようにする、攻撃者によって与えられた特殊な命令である。これらの命令は、例えば、それらのターゲットのメモリ・アドレスを、攻撃者がアクセスしたいと思う秘密情報を使用して計算するメモリ・アクセス命令を含むことがある。したがって、メモリ・アクセス命令によって、キャッシュ30、32にロードされるデータは、秘密情報に依存する可能性がある。最終的に分岐誤予測が特定され、プロセッサ・パイプライン2のレジスタ14のアーキテクチャ的な状態が、一連の命令が誤予測されvictimプロセス3によって投機的実行されるより前のポイントに巻き戻されたとしても、誤って投機的実行された命令によってメモリからロードされたデータは、なおキャッシュ30、32に存続することができる。したがって、実行が攻撃者プロセス1にスイッチ・バックする時、攻撃者は秘密データに基づくターゲット・アドレスを計算した結果得られたそれぞれの可能なアドレスにアクセスを試行することができる。そのようなメモリ・アクセスを実施する場合、攻撃者プロセス1は、ロード命令に関する実行時間などのパフォーマンス・データ、又はキャッシュ・ミス数のカウントなどを測定することができ、攻撃者はパフォーマンスについてのそのようなサイド・チャネル情報から、所与のアドレスからのデータがvictimプロセス3によってキャシュ内に配置されたか、そうでないかを判断することができ、これはvictimプロセス3にはアクセスできたが攻撃者プロセス1にはアクセスできなかった、秘密データの性質を推測するために使用することができる。
【0079】
そのような攻撃が成功するためには、上で与えた2つの条件が満足される必要がある。
図12は、偽陽性ヒットの場合に攻撃者がvictimコンテキストによって使用される分岐ターゲット・アドレスを制御することを困難にすることにより、そのような攻撃を阻止する、この第2の条件を破る技法を示している。分岐ターゲット予測構造142、146が、現在の実行コンテキストに関連付けられる暗号化キーに基づいて分岐ターゲット予測構造に書き込まれる分岐情報を暗号化するための暗号化回路174、及び現在の実行コンテキストに関連付けられる暗号化キーに基づいて分岐ターゲット予測構造から読み出された分岐情報を復号化するための復号化回路176と共に設けられる。キー生成回路179(例えば、線形帰還シフト・レジスタ又は他の乱数生成器)は、コンテキストごとに時々キーを生成することができる。分岐ターゲット予測回路178(
図8の分岐予測制御ロジック150、並びにターゲット・タグ値を生成するため、及び分岐ターゲット・エントリをルックアップして所与の命令フェッチ・アドレスについての分岐情報を特定するための、分岐ターゲット予測構造142、146に関連付けられるあらゆるキャッシュ・アクセス回路に対応することができる)は、命令フェッチ・アドレスから(例えば、領域テーブル148を使用して)ターゲット・タグを生成し、分岐ターゲット予測構造でヒットがあれば暗号化された分岐情報を出力するよう分岐ターゲット予測構造を制御することができる。ミスがあり、分岐が引き続き実行工程18によって実行される場合、分岐についての実際の分岐情報は、暗号化回路174によって暗号化され、分岐を特定するタグ情報に関連して、分岐ターゲット予測回路の制御下で分岐ターゲット予測構造に書き込まれる。暗号化及び復号化回路174、176は、
図12では別個の回路として示されているが、同一の回路であってもよい(例えば、XOR回路)。
【0080】
上で議論したように、分岐情報を暗号化することの代替法は、ターゲット・タグの一部を暗号化することであり、この場合復号化回路176は必要とされない場合がある。
【0081】
図13は、暗号化/復号化が適用される場合の、領域テーブル148及び分岐ターゲット・バッファ142の内容の実例を示している。この実例では、それぞれの領域テーブル・エントリ170は、その領域テーブル・エントリ170によって表現される対応する実行コンテキストに関連付けられる暗号化キー180を記憶している。キー180は、線形帰還シフト・レジスタ(LFSR)又は他の乱数生成器179によって乱数又は疑似乱数として、キーが同一の領域テーブル・エントリを再利用する異なる実行コンテキストについて異なっているように、対応する領域テーブル・エントリ170が更新される都度生成することができる。BTB142のルックアップがミスの場合、現在のフェッチ・アドレスを超えてフェッチが順次続けられるが、実行工程18においてフェッチされた命令ブロックからの分岐が実行される場合、実際の分岐情報が決定され、BTB142の新しい分岐エントリ156に割り当てることができる。BTBの新しいエントリを割り当てる際、分岐情報が現在の実行コンテキストについての領域テーブル148に記憶されている対応する暗号化キー180を使用して暗号化される。任意選択で、同様にキーを使用してタグ情報158を暗号化することができる。しかしながら、タグの暗号化は必須ではない。いくつかの実施例では、予測分岐データ160として記憶されるあらゆる追加的な情報168は暗号化されなくてもよいため、分岐ターゲット情報のみが暗号化され得るが、分岐情報160のすべてが暗号化されるほうがセキュリティは強固であり得る。
【0082】
BTB142でヒットを生成する分岐予測ルックアップの際、タグ情報158が現在の命令フェッチ・アドレスについて生成されるターゲット・タグに一致するべく、この時BTB142から直接分岐情報160を単純に出力することの代わりに、まず分岐情報は領域テーブル148によって定義される現在の実行コンテキストに関連付けられる対応する暗号化キー180を使用して復号化され、次いで復号化された分岐情報は、次のフェッチ・アドレスを導出するために分岐予測ロジック150によって使用される。BTBコンテキストを保護するために使用される暗号化及び復号化は、秘密キー暗号法を使用して、又は公開キー暗号法を使用して実装することができる。分岐ターゲット・アドレス予測は、処理パイプラインのクリティカル・タイミング・パス上にあることがあるため、例えばより複雑なマルチラウンドの暗号法を使用する代わりに、比較的軽量な暗号化方法(例えば、分岐情報とキー180のXORを取る)を使用することは有用である場合がある。
【0083】
図14に示すように、この技法は上で議論した攻撃についての第2の条件を妨げることができるが、その理由は、その情報に割り当てられた実行コンテキストに関連付けられるキーを使用して分岐情報を暗号化することによって、同一のBTBエントリ156-3が新しい実行コンテキストからアクセスされ、次いで新しい実行コンテキストのキーを使用して復号化される場合、これは元々のコンテキストによって割り当てられたターゲット・アドレスではなく、ガーベッジ情報を生成することになり、それによって攻撃者が悪意のあるターゲットをBTBにプッシュし、既知の位置から悪意のあるコードを実行するために異なる実行コンテキストを制御することが困難となるからである。例えば、
図14では、プロセス1を制御する攻撃者は特定のエントリ156-3を割り当て、次いで領域エントリ170-1が更新され、
図11のようにプロセス3を指す。領域テーブルを更新する際、新しいキー180が領域テーブル・エントリ170-1について生成されるため、続いて新しい実行コンテキスト3からの実行の間にBTBエントリ156-3でヒットがある場合、新しいキーを使用する分岐情報の復号化は、同一の分岐ターゲット・アドレスを、プロセス1によって元々与えられた分岐ターゲット・アドレスとして与えることがない。分岐ターゲット情報の古い情報が、古くなったキー(領域テーブルでもはや利用可能ではない、キー1)によって暗号化される一方で、領域テーブル・エントリ#Aは新しいキーを有する。上で議論したタイプの攻撃を作成し、victimプロセス3を制御して悪意のあるターゲット・アドレスTにジャンプさせることができるように、攻撃者はDec(Enc(T’,key1),New key)==Tとなるように異なるターゲット・アドレスT’を与える必要があり、これは暗号化キーについて十分なビット数があれば古いキー及び新しいキーを知らない攻撃者が、victimプロセス3を強制してTに分岐させる必要があるT’の値を予測することを実行不能にすることができる。
【0084】
図13及び
図14は、個々の実行コンテキストに関連付けられるキーが領域テーブル148にキャッシュされる実例を示しているが、これは必須ではなく、それぞれの実行コンテキストに関連付けられるキーを記憶するための別個の記憶構造も可能である。
【0085】
図13及び
図14の実例では、キーは、領域テーブルの置き換えが発生する都度更新されるため、ワンタイム使用の動的なキーである。これは、攻撃を困難にすることができるが、その理由は攻撃者がキーを特定し、それを利用してキーの寿命が終わる前に秘密情報を読み出す必要があるからであり、これは攻撃者が、キーが更新される前の利用可能な時間内にBTBからの一連の分岐予測結果を観察することによりキーについての情報を知ることができる可能性を低減する。それにもかかわらず、他の実装形態では、領域テーブル・エントリに割り振られた動的なキーの代わりに、同一キーが所与の実行コンテキスト用に、そのコンテキストの寿命の間中使用されるように、それぞれの実行コンテキストについて静的なキーを使用することができる。この場合、記憶装置の要求を低減するためにそれぞれのコンテキスト用のキーを生成する効率的な方法は、すべての実行コンテキスト間で共有される共通キーを提供するが、それぞれのコンテキストごとにその共通キーから、共通キーをコンテキストに関連付けられるコンテキスト識別子でハッシュ化することによりコンテキスト特有のキーを導出することである場合がある。
【0086】
図15及び
図16は、マルチターゲット間接分岐予測器146を使用する実例を示す。ターゲット・アドレスがプログラムの間に時々変化する多形の分岐について、それぞれの分岐プログラム・カウンタ・アドレスごとに固定のターゲット・アドレスを与えるBTB142は、信頼できる予測を与えることができない場合があるため、別個の予測構造146を設けることができる。そのような多形の分岐については、BTB142の分岐情報を更新して、BTBの予測されたターゲット・アドレスは将来的に使用するべきではなく、代わりにそのような分岐についての分岐ターゲット・アドレスを、マルチターゲット間接分岐予測器146を使用して予測すべきであることを示すインジケータを提供することができる。マルチターゲット間接分岐予測器は、それぞれが分岐について予測されたターゲット・アドレスを示す情報、及び以前の分岐の結果の履歴に基づくタグ情報194を含む複数の分岐ターゲット・エントリ190(例えば、以前の分岐が、遂行されたか、遂行されなかったかどうかを示す一連のビット)を含む。したがって、同一の分岐命令を、その分岐までたどり着く異なる分岐履歴に対応するマルチターゲット間接分岐予測器146の複数エントリに割り当てることができる。タグ情報194は、分岐を含む命令のブロックの命令フェッチ・アドレスにさらに依存する。BTB142とは違って、タグ情報は対応する実行コンテキストのコンテキスト識別子、又はプログラム・カウンタ・アドレスの上方ビットを含んでいない。マルチターゲット間接分岐予測器46でそれぞれのエントリに関連付けられるタグは現在の実行コンテキストとは独立しているため、やはりこれは、タグ値が複数の実行コンテキスト間で再利用することができることを意味している。プロセス2を制御する攻撃者が、victimプロセス1において特定の間接的な分岐に到達するために使用されるアクセス・パターン(分岐履歴)を知っている場合、攻撃者は、類似のセキュリティ問題を、プロセス1によってアクセスされる既知の分岐履歴パターン(例えば
図14のタグA)によってタグ付けされた悪意のあるターゲット・アドレスをプッシュすることにより、上で議論した問題に利用することができる。ここでの仮定は、攻撃者がマルチターゲット間接分岐予測器146におけるタグの衝突を意図的に予測できるということである。
【0087】
図16に示すように、この弱点が利用されることを妨げるために、領域テーブルからの暗号化キー180は、マルチターゲット間接分岐予測器146のコンテンツを暗号化するためにさらに使用され得る。したがって、分岐情報がマルチターゲット間接分岐予測器146のエントリ190に割り当てられると、現在の実行コンテキストについての暗号化キー180は、領域テーブルから読み出され、これは分岐情報192、及び任意選択で対応するエントリ190のタグ194を暗号化するために使用される。マルチターゲット間接分岐予測器146のルックアップの際、分岐情報192は、現在の実行コンテキストの暗号化キー180を使用して復号化され、それによって、現在の実行コンテキストが以前の実行コンテキストによって割り当てられたエントリにヒットする場合、データを暗号化するために使用されたキーとは異なるキーを使用する復号化は、以前の実行コンテキストによって元々与えられたアドレスとは異なり、ガーベッジ・データを出力させることにつながる。
【0088】
したがって、領域テーブル148を使用しない実装形態においても、分岐予測器がマルチターゲット間接分岐予測器146、又は現在の実行コンテキストとは独立しているタグを使用する別の予測構造を使用すると、やはり、分岐予測器の内容の暗号化は、攻撃者が分岐予測構造で偽陽性ヒットを使用して、秘密データを可視化するよう意図された悪意のあるコードを実行するためにvictimプロセスを制御できることを回避するために有用である場合がある。
【0089】
図17は、分岐ターゲット予測ルックアップ、及び分岐ターゲット予測構造142、146において分岐情報の更新を実施する方法を図示する流れ図である。
図17は、実施することができる分岐予測のすべての特徴を示していないことを了解されたい(例えば、BDP140による分岐方向予測、同様に投機的に実行される命令の実行を停止し、誤予測の場合にプロセッサ状態を巻き戻すために遂行されるステップが示されていない―これらは、あらゆる既知の分岐予測技法と同様に実施することができる)。
【0090】
ステップ200において、ターゲット・タグが、分岐予測器のルックアップが実施される命令フェッチ・アドレスについて取得される。ターゲット・タグの特定の性質は、分岐予測器構造が実装される方法に依存する。例えば、上で議論したような領域テーブル148を使用して実装されたBTBについて、ターゲット・タグは、現在の実行コンテキストのコンテキスト識別子及び命令フェッチ・アドレスの一部に基づいて領域テーブルから決定することができる。次の
図18に関連して、この手法をより詳細に議論する。代替的に、マルチターゲット間接分岐予測器146について、ターゲット・タグは、命令フェッチ・アドレス、及び以前の遂行した/遂行しなかった、の結果の履歴に基づいている。ターゲット・タグを生成する他の方法が、やはり可能である。
【0091】
ステップ202において、分岐予測制御ロジック150は、分岐ターゲット予測構造142、146を制御して分岐ターゲット・エントリ156、190のサブセットをルックアップする。エントリのサブセットは、例えば命令アドレスに基づいて選択することができるか、又はfully associativeキャッシュの実装形態では、分岐ターゲット予測構造のすべてのエントリを含むことができる。分岐予測回路は、選択されたエントリのセットのいずれかが、ステップ200で所与の分岐命令について取得されたターゲット・タグに対応するタグ情報を指定するかどうかを判断する。どの分岐ターゲット・エントリのサブセットもターゲット・タグに対応するタグ情報を指定しない場合、分岐ターゲット予測構造でのルックアップはミスとなり、分岐予測制御ロジック150は、現在のフェッチ・アドレスのインクリメントされたバージョンを次のフェッチ・アドレスとして加算器152から出力する。対応する命令のブロックがデコードされると、ステップ203においてデコード工程10はブロック内のいずれかの命令が分岐命令かどうかを判断する。分岐命令を含んでいない場合、いかなる分岐情報も更新する必要がないため、方法は終了する。フェッチされた/デコードされた命令のブロックが、分岐命令を含む場合、ステップ204において、victimエントリが、ルックアップされる分岐ターゲット・エントリのサブセットから選択される。例えば、分岐ターゲット・エントリのサブセットのうちの1つが、現在無効である場合、無効なエントリをvictimエントリとして選択することができる。分岐ターゲット・エントリのサブセットのすべてが現在有効である場合、有効なエントリのうちの1つが削除されて新しい分岐情報用に空けられる。あらゆる削除ポリシを使用してvictimエントリを選択することができる(例えばラウンド・ロビン、又はleast recently used)。
【0092】
ステップ206において、実際の分岐情報が所与の分岐命令について実行工程18によって解決されると、実際の分岐情報は、現在の実行コンテキストに関連付けられる暗号化キーを使用して暗号化される。分岐情報は、分岐ターゲット・アドレスを導出すること、又は指定するための情報を含む場合があり、また上で議論したような分岐についての他の情報をさらに含むことができる。暗号化キーは領域テーブル148から、又は別個の記憶装置から読み出すことができる。一部の事例では、ターゲット・タグも暗号化することができる。ステップ208において、暗号化された分岐情報、及びターゲット・タグに基づいて決定された(任意選択で暗号化された)タグ情報が、ステップ204で選択されたvictimエントリに書き込まれる。
【0093】
ステップ202において、分岐ターゲット予測構造142、146でヒットがあり、ルックアップされる分岐ターゲット・エントリのサブセットのうちの1つがターゲット・タグに対応するタグ情報を指定していた場合、ステップ210において、その一致エントリに記憶された分岐情報が、現在の実行コンテキストに関連付けられる暗号化キーを使用して復号化される。ステップ212において、復号化された分岐情報が、所与の分岐命令についての予測として出力される。復号化された分岐情報から導出された分岐ターゲット・アドレスは、命令の後続のフェッチを制御するためにフェッチ・キュー144に割り当てられ、復号化された分岐情報によって指定される分岐命令の他の予測される属性は、処理パイプラインの他の態様を制御することができる。分岐が実行工程に到達すると、実際の分岐情報が分岐命令について決定され、予測が正しかったかどうかを判断することができる。誤予測があった場合、分岐命令に続く命令をパイプラインからフラッシュすることができ、分岐が遂行されるべきではない場合、分岐の命令アドレスに続く順次のアドレスからすべて取られる場合は、分岐の正しいターゲット・アドレスから命令のフェッチを再開するためにフェッチ工程6に信号を送信することができる。また、分岐予測器4は、同一の命令フェッチ・アドレスについての後続の予測が次回はより正確である見込みが高くなるように、実際の分岐結果に基づいて分岐ターゲット予測構造142、146に記憶される分岐情報を訂正するよう更新することができる。
【0094】
図18は、それぞれのエントリのタグ部分を圧縮するために領域テーブル148を使用する分岐ターゲット予測構造がBTB142である実施例において、
図17のステップ200においてターゲット・タグを取得する方法をさらに詳細に示す流れ図である。ステップ220において、領域テーブル148は、現在の命令フェッチ・アドレスに関連付けられる分岐コンテキスト情報に基づいてルックアップされる。例えば、分岐コンテキスト情報は、分岐が実行される実行コンテキストを特定する1つ又は複数のコンテキスト識別子を含む場合があり、命令フェッチ・アドレスの上方の分岐命令アドレス・ビットをさらに含む場合がある。ステップ222において、分岐予測制御回路は、エントリ190に記憶される分岐コンテキスト情報が所与の分岐命令に与えられた分岐コンテキスト情報に一致する、一致する領域テーブル・エントリ190を、領域テーブルが含んでいるかどうかを判断する。一致する領域テーブル・エントリを含んでいる場合、領域テーブルでヒットがあり、ステップ224において、ターゲット・タグが、一致する領域テーブル・エントリに関連付けられる領域ID、及び命令アドレスのタグ部分の1つ又は複数の下位ビット(例えば、
図13の実例では、ビット20:16)を含んでいるとして、決定される。やはり、ステップ226において、現在の実行コンテキストに対応する暗号化キーが、一致する領域テーブル・エントリからキーを読み出すことによって、領域テーブルからリターンされる。
【0095】
ステップ222において、現在の命令フェッチ・アドレスに与えられる分岐コンテキスト情報に一致する分岐コンテキスト情報を有する一致する領域テーブル・エントリがないように、領域テーブルでルックアップがミスとなる場合、ステップ230において、victim領域テーブル・エントリが選択され、例えば、特定のコンテキストにまだマッピングされていない無効な領域テーブル・エントリ、又は無効なエントリが存在しない場合は削除されることになる有効な領域テーブル・エントリである。やはり、victim領域テーブル・エントリを選択するために、LRU又はラウンド・ロビンなどの削除ポリシを使用することができる。ステップ232において、victim領域テーブル・エントリに記憶される暗号化キー180が、更新される。例えば、新しい乱数又は疑似乱数を出力するために、線形帰還シフト・レジスタ、又は他の乱数若しくは疑似乱数生成器がトリガされる場合がある。更新された暗号化キーはvictim領域テーブル・エントリに書き込まれる。さらに、ステップ234において、ステップ220において所与の分岐命令について決定された分岐コンテキスト情報が、ステップ230で選択されたvictim領域テーブル・エントリに書き込まれる。victim領域テーブル・エントリに関連付けられる領域識別子は、新しい実行コンテキストにマッピングされており、現在の実行コンテキストからルックアップされる場合、その領域識別子に以前マッピングされたBTB142のあらゆるエントリが、今度は偽陽性ヒットをリターンする可能性があるが、その理由はこれらが同一領域識別子を共有する以前の実行コンテキストによって割り当てられたからである。しかしながら、ステップ232において暗号化キーを更新することによって、これらの偽陽性エントリの暗号化されたコンテキストは、これらのエントリをBTB142に割り当てた以前の実行コンテキストによって期待されるやり方で振る舞うことにはならず、そのためこれは悪意のあるプロセスが、攻撃者によって選択された特定のアドレスにマッピングするために、別のコンテキストによって実行される特定の分岐ターゲット・アドレスを制御できることを妨げる。ステップ234に続いて、
図18の方法はステップ224に続き、分岐ターゲット予測構造の後続のルックアップについてのターゲット・タグをリターンし、暗号化キーをリターンするために、領域テーブルルックアップがヒットを生成したかのようにステップ224及び226が同一のやり方で実施される。
図18の完了に続いて、生成されたタグを、
図17のステップ202以降にしたがって分岐ターゲット予測ルックアップのために使用することができる。
【0096】
要約すると、分岐ターゲット予測構造の分岐情報は、分岐情報を分岐ターゲット予測構造に割り当てさせる原因となった実行コンテキストに関連付けられる暗号化キーに基づいて暗号化される。分岐ターゲット予測構造のルックアップの際、ヒットがある場合、一致エントリからの分岐情報は、現在の実行コンテキストに関連付けられる暗号化キーを使用して復号化される。暗号化及び復号化は、異なるコンテキストからエントリを割り当てたコンテキストへの分岐ターゲット予測構造のエントリにおける偽陽性ヒットを利用することにより攻撃者が別の実行コンテキストから重要データにアクセスを得ることをずっと困難にするため、複数の実行コンテキストで再利用可能な値を伴うタグ情報を使用する分岐ターゲット予測構造にとって、これは有用である。
【0097】
図8~
図18に示した具体的な実例は分岐予測器を実装する方法の一例に過ぎないことを了解されたい。より一般的には、新しい分岐予測エントリを生成する時、分岐予測器への入力の一部を、現在の実行コンテキストに関連付けられる値に基づいてエンコードすることができ、所与のクエリ入力について分岐予測器にクエリする際、クエリをトリガしている実行環境に関連付けられる値を使用してクエリ入力をエンコードすることができるか、又は分岐予測器の出力を最新の実行環境に関連付けられる値を使用して逆エンコード若しくはデコードすることができるか、或いはその両方であり、victimプロセスを制御して、異なる実行環境間の分岐予測器における偽ヒットを使用して特定のアドレスへの分岐を制御するために、攻撃者が分岐予測器においてどの状態が訓練されるべきかを推測することを困難にしている。
【0098】
さらには、例示の配置構成を以下の条項で詳述する。
(1)一連の命令に関連して少なくとも1つの分岐予測状態エントリを記憶するように構成される分岐予測回路と、新しい分岐予測状態エントリを生成するために少なくとも1つの入力を受信するための入力回路であって、少なくとも1つの入力は複数ビットを含む、入力回路と、一連の命令が実行されている現在の実行パーミッションを示す値に基づいて、複数ビットの少なくとも一部をエンコードするように構成されるコーディング回路とを備える、データ処理装置。
(2)コーディング回路は、キーを使用することによりビットの少なくとも一部をエンコードするよう構成され、キーは一連の命令が実行されている現在の実行パーミッションに基づいている、条項(1)に記載のデータ処理装置。
(3)コーディング回路は、キーを使用して複数ビットの少なくとも一部を再配列することにより、複数ビットの少なくとも一部をエンコードするよう構成される、条項(2)に記載のデータ処理装置。
(4)コーディング回路は、キーを使用して複数ビットの少なくとも一部をトグルすることにより、複数ビットの少なくとも一部をエンコードするよう構成される、条項(2)に記載のデータ処理装置。
(5)コーディング回路は、キーを使用してハッシュ関数を実施することにより、複数ビットの少なくとも一部をエンコードするよう構成される、条項(2)に記載のデータ処理装置。
(6)ハッシュ関数は、可逆的である、条項(5)に記載のデータ処理装置。
(7)コーディング回路は、キーでXOR演算を実施することにより、複数ビットの少なくとも一部をエンコードするよう構成される、条項(2)に記載のデータ処理装置。
(8)ハッシュ関数は、一方向のハッシュ関数である、条項(5)に記載のデータ処理装置。
(9)少なくとも1つの入力は分岐命令の命令アドレスの指標を含み、分岐予測回路は分岐命令の命令アドレスの指標を含むクエリ値を受信してクエリ値を使用して検索を実施するよう構成され、コーディング回路は検索に先立ってキーを使用してクエリ値のビットの少なくとも一部をエンコードするよう構成される、条項(2)から(8)までのいずれか一項に記載のデータ処理装置。
(10)コーディング回路は、現在の実行環境に関連付けられるキーの値を再計算し、キーの再計算された値を使用してクエリ値の複数ビットの少なくとも一部にエンコード演算を実施するよう構成される、条項(9)に記載のデータ処理装置。
(11)少なくとも1つの入力は分岐命令のデスティネーション・アドレスの指標を含み、分岐予測回路は分岐命令の命令アドレスの指標を含むクエリ値を受信してクエリ値を使用して検索を実施するよう構成され、装置はクエリ値を受信することに応じて出力される分岐予測回路の出力に対してデコードを実施するためのデコード回路を備える、条項(2)から(10)までのいずれか一項に記載のデータ処理装置。
(12)デコードは、キーの値を再計算し、次いでデコード関数を実施することを含む、条項(11)に記載のデータ処理装置。
(13)キーは、一連の命令が実行されている例外レベル、特権レベル、ASID、VMID、NS、物理プロセッサ・コア数、及び論理コア数を示す値のあらゆる組み合わせ、並びに1つ又は複数のソフトウェア書き込み可能レジスタ、にさらに基づいている、条項(1)から(12)までのいずれかに記載のデータ処理装置。
(14)キーは、以前に生成された乱数にさらに基づいている、条項(1)から(13)までのいずれかに記載のデータ処理装置。
(15)以前に生成された乱数は、論理プロセッサごとの要素、物理プロセッサごとの要素、及びシステム全体の要素の少なくとも1つを含む、条項(14)に記載のデータ処理装置。
(16)以前に生成された乱数の少なくとも一部は、スタートアップ時に生成される、条項(15)に記載のデータ処理装置。
(17)以前に生成された乱数の少なくとも一部は、疑似乱数である、条項(14)から(16)までのいずれか一項に記載のデータ処理装置。
(18)キーは、現在の実行環境又は現在の実行パーミッションに関連付けられる少なくとも1つの値を含む、少なくとも1つのキー入力パラメータに適用される一方向変形に基づいている、条項(1)から(17)までのいずれか一項に記載のデータ処理装置。
(19)一連の命令は、最低の実行パーミッションで実行するよう構成された複数の実行環境のうちの1つで実行することができ、コーディング回路は、一連の命令が実行されている複数の実行環境のうちの1つの識別子にさらに基づいて、複数ビットの少なくとも一部をエンコードするよう構成される、条項(1)から(17)までのいずれかに記載のデータ処理装置。
(20)一連の命令が投機的な状態で実行されている間、命令フェッチ・フォールト及び命令デコード・フォールトのあらゆる組み合わせのレートを検出し、レートが所定のしきい値を上回って増加することに応答して割り込みを発生させるか、又はエラー応答を作成するするよう構成された、監視回路を備える、条項(1)から(19)までのいずれかに記載のデータ処理装置。
(21)所定のしきい値は、直前のレートよりも少なくとも20%上回る、条項(20)に記載のデータ処理装置。
(22)一連の命令に関連して少なくとも1つの分岐予測状態エントリを記憶する手段と、新しい分岐予測状態エントリを生成するために少なくとも1つの入力を受信する手段であって、少なくとも1つの入力は複数ビットを含む、受信する手段と、一連の命令が実行されている現在の実行パーミッションを示す値に基づいて、前記少なくとも1つの入力の複数ビットの少なくとも一部をエンコードする手段とを備える、データ処理装置。
(23)一連の命令に関連して少なくとも1つの分岐予測状態エントリを記憶することと、新しい分岐予測状態エントリを生成するために少なくとも1つの入力を受信することであって、少なくとも1つの入力は複数ビットを含む、受信することと、一連の命令が実行されている現在の実行パーミッションを示す値に基づいて、複数ビットの少なくとも一部をエンコードすることとを含む、方法。
(24)複数の実行コンテキストのうちの1つでデータ処理を実施するための処理回路と、複数の分岐ターゲット・エントリを含み、それぞれの分岐ターゲット・エントリは少なくとも1つの分岐ターゲット・アドレスを示す分岐情報を指定する、分岐ターゲット予測構造と、現在の実行コンテキストに関連付けられる暗号化キーを使用して分岐ターゲット予測構造に書き込まれる分岐情報を暗号化するための暗号化回路と、現在の実行コンテキストに関連付けられる暗号化キーを使用して分岐ターゲット予測構造から読み出された分岐情報を復号化するための復号化回路とを備える、装置。
(25)それぞれの分岐ターゲット・エントリは、タグ情報を指定し、装置は、現在の実行コンテキストに関連付けられる命令フェッチ・アドレスについて分岐ターゲット予測ルックアップを実施するための分岐ターゲット予測回路を備え、分岐ターゲット予測ルックアップは、分岐ターゲット予測構造の分岐ターゲット・エントリのサブセットのいずれかが、命令フェッチ・アドレスについて決定されたターゲット・タグに対応するタグ情報を指定するかどうかを判断することを含む、条項(24)に記載の装置。
(26)ターゲット・タグの値は、複数の実行コンテキストのうち2つ以上で再利用可能である、条項(25)に記載の装置。
(27)分岐ターゲット・エントリのサブセットのいずれもターゲット・タグに対応するタグ情報を指定しない場合、また命令フェッチ・アドレスが分岐命令を含む少なくとも1つの命令のブロックを指定する場合、暗号化回路は、現在の実行コンテキストに関連付けられる暗号化キーを使用して分岐命令についての実際の分岐情報を暗号化するよう構成され、分岐ターゲット予測回路は、暗号化された分岐情報を指定し、ターゲット・タグに対応するタグ情報を指定する分岐ターゲット予測構造の分岐ターゲット・エントリを割り当てるよう構成される、条項(25)又は(26)に記載の装置。
(28)分岐ターゲット・エントリのサブセットのうちの1つがターゲット・タグに対応するタグ情報を指定する場合、復号化回路は、エントリのサブセットのうちの前記1つに記憶される分岐情報を現在の実行コンテキストに関連付けられる暗号化キーを使用して復号化するよう構成され、分岐ターゲット予測回路は、復号化された分岐情報を命令フェッチ・アドレスについての予測された分岐情報として出力するよう構成される、条項(25)から(27)までのいずれかに記載の装置。
(29)暗号化キーは、現在の実行コンテキストに固定された静的なキーを含む、条項(24)から(28)までのいずれかに記載の装置。
(30)現在の実行コンテキストについての静的なキーは、複数の実行コンテキストの少なくとも2つと、現在の実行コンテキストに特有の少なくとも1つのコンテキスト識別子とで共有される共通キーに依存している、条項(29)に記載の装置。
(31)暗号化キーは、現在の実行コンテキストに可変の動的なキー含む、条項(24)から(30)までのいずれかに記載の装置。
(32)現在の実行コンテキストについての更新された暗号化キーを生成するためのキー生成回路を備える、条項(31)に記載の装置。
(33)分岐ターゲット・エントリのサブセットのいずれもターゲット・タグに対応するタグ情報を指定しない場合、また命令フェッチ・アドレスが分岐命令を含む少なくとも1つの命令のブロックを指定する場合、暗号化回路は、現在の実行コンテキストに関連付けられる暗号化キーを使用してターゲット・タグを暗号化するよう構成され、分岐ターゲット予測回路は、暗号化されたターゲット・タグを割り当てられた分岐ターゲット・エントリについてのタグ情報として指定するよう構成され、分岐ターゲット予測ルックアップにおいて、復号化回路は分岐ターゲット・エントリのサブセットのそれぞれのタグ情報を復号化するよう構成され、分岐ターゲット予測回路は、復号化されたタグ情報をターゲット・タグと比較するよう構成される、条項(25)に記載の装置。
(34)分岐情報は、分岐ターゲット・アドレス以外の少なくとも1つの分岐情報をさらに示す、条項(24)から(33)までのいずれかに記載の装置。
(35)分岐ターゲット予測回路は、現在の実行コンテキストに関連付けられる少なくとも1つのコンテキスト識別子に依存するターゲット・タグを決定するよう構成される、条項(25)に記載の装置。
(36)それぞれの領域エントリが、分岐コンテキスト情報よりも少ないビットを含む領域識別子へ分岐コンテキスト情報をマッピングする、複数の領域エントリを含む領域テーブルを備え、分岐コンテキスト情報は対応する実行コンテキストに関連付けられる少なくとも1つのコンテキスト識別子を含む、条項(25)に記載の装置。
(37)命令フェッチ・アドレスについてのターゲット・タグは、領域テーブルによって命令フェッチ・アドレスに関連付けられる分岐コンテキスト情報にマッピングされたターゲット領域識別子を含む、条項(36)に記載の装置。
(38)それぞれの領域エントリは対応する実行コンテキストに関連付けられる暗号化キーを指定する、条項(36)又は(37)に記載の装置。
(39)領域テーブルの所与の領域エントリによって与えられたマッピングが更新される場合、分岐ターゲット予測回路は、マッピング更新後に所与の領域エントリに関連付けられる実行コンテキストに関連付けられる暗号化キーの更新をトリガするよう構成される、条項(36)から(38)までのいずれかに記載の装置。
(40)所与の領域エントリの分岐コンテキスト情報は、以前の分岐ターゲット予測ルックアップによって所与の領域エントリが領域テーブルに割り当てられた命令フェッチ・アドレスの部分をさらに含む、条項(36)から(39)までのいずれかに記載の装置。
(41)分岐ターゲット予測回路は、ターゲット・タグが命令フェッチ・アドレス、及び命令フェッチ・アドレスの命令に先行する以前の分岐命令の分岐結果の履歴に依存するかどうか判断するように構成される、条項(25)に記載の装置。
(42)複数の実行コンテキストのうちの1つでデータ処理を実施するための手段と、それぞれの分岐ターゲット・エントリは少なくとも1つの分岐ターゲット・アドレスを示す分岐情報を指定する、分岐ターゲット予測構造の分岐ターゲット・エントリを記憶するための手段と、現在の実行コンテキストに関連付けられる暗号化キーを使用して記憶するための手段に書き込まれる分岐情報を暗号化するための手段と、現在の実行コンテキストに関連付けられる暗号化キーを使用して記憶するための手段から読み出された分岐情報を復号化するための手段とを備える、装置。
(43)複数の実行コンテキストのうちの1つでデータ処理を実施することと、それぞれの分岐ターゲット・エントリは少なくとも1つの分岐ターゲット・アドレスを示す分岐情報を指定する、分岐ターゲット予測構造の分岐ターゲット・エントリを記憶することと、現在の実行コンテキストに関連付けられる暗号化キーを使用して分岐ターゲット予測構造に書き込まれる分岐情報を暗号化することと、現在の実行コンテキストに関連付けられる暗号化キーを使用して分岐ターゲット予測構造から読み出された分岐情報を復号化することとを含む、方法。
【0099】
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」はハードウェア又はソフトウェアの内部接続の、配置又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは機能を実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
【0100】
本発明の図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの正確な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本発明の範囲及び精神を逸脱することなく、その様々な変形及び修正がそこになされ得ることを理解されたい。