IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アーム・リミテッドの特許一覧

<>
  • 特許-推測バリア命令 図1
  • 特許-推測バリア命令 図2
  • 特許-推測バリア命令 図3
  • 特許-推測バリア命令 図4
  • 特許-推測バリア命令 図5
  • 特許-推測バリア命令 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-19
(45)【発行日】2023-12-27
(54)【発明の名称】推測バリア命令
(51)【国際特許分類】
   G06F 9/30 20180101AFI20231220BHJP
   G06F 9/34 20180101ALI20231220BHJP
   G06F 12/0862 20160101ALI20231220BHJP
【FI】
G06F9/30 350A
G06F9/34 350A
G06F12/0862 110
【請求項の数】 7
(21)【出願番号】P 2020535645
(86)(22)【出願日】2018-12-14
(65)【公表番号】
(43)【公表日】2021-04-01
(86)【国際出願番号】 GB2018053636
(87)【国際公開番号】W WO2019135063
(87)【国際公開日】2019-07-11
【審査請求日】2021-12-07
(31)【優先権主張番号】62/613,280
(32)【優先日】2018-01-03
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/208,701
(32)【優先日】2018-12-04
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】グリセンスウェイト、リチャード ロイ
(72)【発明者】
【氏名】ガブリエッリ、ジャコモ
(72)【発明者】
【氏名】ホースネル、マシュー ジェイムズ
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特開平09-223013(JP,A)
【文献】特表2003-515214(JP,A)
【文献】米国特許出願公開第2003/0084259(US,A1)
【文献】特表2005-504390(JP,A)
【文献】特表2006-507594(JP,A)
【文献】米国特許出願公開第2009/0089564(US,A1)
【文献】米国特許第06484230(US,B1)
【文献】米田 聡,LINUXレポート「CPUの脆弱性対応で大騒ぎLinuxカーネルも修正を急ぐ」,日経Linux 2018年3月号,日経BP社,2018年02月08日,第20巻 第2号,第7頁
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30- 9/38
G06F 12/0862
(57)【特許請求の範囲】
【請求項1】
データ処理を実行する処理回路構成と、
前記データ処理を実行するように前記処理回路構成を制御する命令を復号する命令復号回路構成と
を備え、
前記命令復号回路構成は、推測バリア命令に応答して、前記推測バリア命令後にプログラム順に現れ、前記推測バリア命令に前記プログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止するように、前記処理回路構成を制御し、
前記推測バリア命令が終了するまで、
条件付き選択命令の結果に対するアドレス依存性を有する、ロード、ストア、データ、又は命令のプリロード命令RW2が、前記推測バリア命令後にプログラム順に現れ、そして、
前記条件付き選択命令が、前記条件付き選択命令の入力レジスタの1つについて、推測的に実行されているロード命令R1に対するレジスタ・データ依存性を有し、且つ
前記条件付き選択命令が、前記条件付き選択命令の別の入力レジスタについて、R1に対するレジスタ・データ依存性を有さず、且つ
前記条件付き選択命令の条件が、R1がアーキテクチャ上実行されていないならば、R1に依存しない入力レジスタが選択されるようになる場合に、
前記キャッシュ内のエントリの割当が、前記キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、R1からの推測的にロードされた値の任意の部分の値を判定するために使用されることができる場合に、前記処理回路構成は、記エントリの割当に影響を与えるRW2を阻止するように構成されている、装置。
【請求項2】
データ処理を実行する処理回路構成と、
前記データ処理を実行するように前記処理回路構成を制御する命令を復号する命令復号回路構成と
を備え、
前記命令復号回路構成は、推測バリア命令に応答して、前記推測バリア命令後にプログラム順に現れ、前記推測バリア命令に前記プログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止するように、前記処理回路構成を制御し、
前記推測バリア命令が終了するまで、
条件付き移動命令の結果に対するアドレス依存性を有する、ロード、ストア、データ、又は命令のプリロード命令RW2が、前記推測バリア命令後にプログラム順に現れ、そして、
前記条件付き移動命令は、前記条件付き移動命令の入力レジスタについて、推測的に実行されているロード命令R1に対するレジスタ依存性を有さず、且つ
前記条件付き移動命令の条件は、R1がアーキテクチャ上実行されていないならば、前記条件を満たすようになる場合に、
前記キャッシュ内のエントリの割当が、前記キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、R1からの推測的にロードされた値の任意の部分の値を判定するために使用されることができる場合に、前記処理回路構成は、記エントリの割当に影響を与えるRW2を阻止するように構成されている、装置。
【請求項3】
前記キャッシュは、
データ・キャッシュ、
命令キャッシュ、及び
分岐予測キャッシュ
のうちの1つである、請求項1又は2に記載の装置。
【請求項4】
ターゲット・プログラム・コードの命令を実行する命令実行環境を提供するホスト処理装置を制御するコンピュータ・プログラムであって、
データ処理を実行するように処理プログラム・ロジックを制御する前記ターゲット・プログラム・コードの命令を復号する命令復号プログラム・ロジックを備え、
前記命令復号プログラム・ロジックは、推測バリア命令に応答して、前記推測バリア命令後にプログラム順に現れ、前記推測バリア命令に前記プログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止し、
前記推測バリア命令が終了するまで、
条件付き選択命令の結果に対するアドレス依存性を有する、ロード、ストア、データ、又は命令のプリロード命令RW2が、前記推測バリア命令後にプログラム順に現れ、そして、
前記条件付き選択命令が、前記条件付き選択命令の入力レジスタの1つについて、推測的に実行されているロード命令R1に対するレジスタ・データ依存性を有し、且つ
前記条件付き選択命令が、前記条件付き選択命令の別の入力レジスタについて、R1に対するレジスタ・データ依存性を有さず、且つ
前記条件付き選択命令の条件が、R1がアーキテクチャ上実行されていないならば、R1に依存しない入力レジスタが選択されるようになる場合に、
前記キャッシュ内のエントリの割当が、前記キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、R1からの推測的にロードされた値の任意の部分の値を判定するために使用されることができる場合に、前記命令復号プログラム・ロジックは、記エントリの割当に影響を与えるRW2を阻止するように構成されている、コンピュータ・プログラム。
【請求項5】
ターゲット・プログラム・コードの命令を実行する命令実行環境を提供するホスト処理装置を制御するコンピュータ・プログラムであって、
データ処理を実行するように処理プログラム・ロジックを制御する前記ターゲット・プログラム・コードの命令を復号する命令復号プログラム・ロジックを備え、
前記命令復号プログラム・ロジックは、推測バリア命令に応答して、前記推測バリア命令後にプログラム順に現れ、前記推測バリア命令に前記プログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止し、
前記推測バリア命令が終了するまで、
条件付き移動命令の結果に対するアドレス依存性を有する、ロード、ストア、データ、又は命令のプリロード命令RW2が、前記推測バリア命令後にプログラム順に現れ、そして、
前記条件付き移動命令は、前記条件付き移動命令の入力レジスタについて、推測的に実行されているロード命令R1に対するレジスタ依存性を有さず、且つ
前記条件付き移動命令の条件は、R1がアーキテクチャ上実行されていないならば、前記条件を満たすようになる場合に、
前記キャッシュ内のエントリの割当が、前記キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、R1からの推測的にロードされた値の任意の部分の値を判定するために使用されることができる場合に、前記命令復号プログラム・ロジックは、記エントリの割当に影響を与えるRW2を阻止するように構成されている、コンピュータ・プログラム。
【請求項6】
推測バリア命令を復号するステップと、
前記推測バリア命令の復号に応答して、前記推測バリア命令後にプログラム順に現れ、前記推測バリア命令に前記プログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止するように、処理回路構成を制御するステップと
を含むデータ処理方法であって、
前記推測バリア命令が終了するまで、
条件付き選択命令の結果に対するアドレス依存性を有する、ロード、ストア、データ、又は命令のプリロード命令RW2が、前記推測バリア命令後にプログラム順に現れ、そして、
前記条件付き選択命令が、前記条件付き選択命令の入力レジスタの1つについて、推測的に実行されているロード命令R1に対するレジスタ・データ依存性を有し、且つ
前記条件付き選択命令が、前記条件付き選択命令の別の入力レジスタについて、R1に対するレジスタ・データ依存性を有さず、且つ
前記条件付き選択命令の条件が、R1がアーキテクチャ上実行されていないならば、R1に依存しない入力レジスタが選択されるようになる場合に、
前記キャッシュ内のエントリの割当が、前記キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、R1からの推測的にロードされた値の任意の部分の値を判定するために使用されることができる場合に、前記データ処理方法は、記エントリの割当に影響を与えるRW2を阻止するステップを含む、データ処理方法。
【請求項7】
推測バリア命令を復号するステップと、
前記推測バリア命令の復号に応答して、前記推測バリア命令後にプログラム順に現れ、前記推測バリア命令に前記プログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止するように、処理回路構成を制御するステップと
を含むデータ処理方法であって、
前記推測バリア命令が終了するまで、
条件付き移動命令の結果に対するアドレス依存性を有する、ロード、ストア、データ、又は命令のプリロード命令RW2が、前記推測バリア命令後にプログラム順に現れ、そして、
前記条件付き移動命令は、前記条件付き移動命令の入力レジスタについて、推測的に実行されているロード命令R1に対するレジスタ依存性を有さず、且つ
前記条件付き移動命令の条件は、R1がアーキテクチャ上実行されていないならば、前記条件を満たすようになる場合に、
前記キャッシュ内のエントリの割当が、前記キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、R1からの推測的にロードされた値の任意の部分の値を判定するために使用されることができる場合に、前記データ処理方法は、記エントリの割当に影響を与えるRW2を阻止するステップを含む、データ処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、データ処理の分野に関する。
【背景技術】
【0002】
データ処理装置は、命令の入力オペランドが正しいか、又は命令を実行する必要が少しでもあるかが分かる前に命令が実行される命令の推測的実行をサポートし得る。たとえば、処理装置は、分岐の実際の結果が何であるかが分かる前に、後続する命令を推測的にフェッチ、復号、及び実行できるように、分岐命令の結果を予測する分岐予測器を有し得る。また、いくつかのシステムは、実際の値が実際にメモリから返される前にメモリからロードされた値が予測されるロード推測をサポートし、後続する命令を、より高速に処理できるようにする。他の推測の形態も可能である。
【先行技術文献】
【非特許文献】
【0003】
【文献】“Some Efficient Architecture Simulation Techniques”, Robert Bedichek, Winter 1990 USENIX Conference, Pages 53 - 63
【発明の概要】
【課題を解決するための手段】
【0004】
少なくともいくつかの実例は、データ処理を実行する処理回路構成と、データ処理を実行するように処理回路構成を制御する命令を復号する命令復号回路構成とを備える装置を提供し、命令復号回路構成は、推測バリア命令に応答して、推測バリア命令後にプログラム順に現れ、推測バリア命令にプログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止するように、処理回路構成を制御する。
【0005】
少なくともいくつかの実例は、ターゲット・プログラム・コードの命令を実行する命令実行環境を提供するホスト処理装置を制御するコンピュータ・プログラムを提供し、コンピュータ・プログラムは、ターゲット・プログラム・コードの命令を復号して、データ処理を実行する処理プログラム・ロジックを制御する命令復号プログラム・ロジックを備え、命令復号プログラム・ロジックは、推測バリア命令に応答して、推測バリア命令後にプログラム順に現れ、推測バリア命令にプログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止する。
【0006】
少なくともいくつかの実例は、推測バリア命令を復号することと、推測バリア命令の復号に応答して、推測バリア命令後にプログラム順に現れ、推測バリア命令にプログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止するように、処理回路構成を制御することとを備える、データ処理方法を提供する。
【0007】
少なくともいくつかの実例は、データ処理を実行する処理回路構成と、データ処理を実行するように処理回路構成を制御する命令を復号する命令復号回路構成であって、条件付き分岐命令に応答して、条件付き分岐命令後の次の命令が、第1の命令である第1の結果と、次の命令が第2の命令である第2の結果とのうちの一方を選択するように処理回路構成を制御するように構成された、命令復号回路構成と、第1の結果又は第2の結果が、条件付き分岐命令のために選択されるべきであるか否かを予測する分岐予測回路構成とを備える装置を提供し、ここでは、条件付き分岐命令の一方向推測変数に応答して、分岐予測回路構成及び命令復号回路構成のうちの少なくとも一方は、分岐予測回路構成が、条件付き分岐命令の一方向推測変数について第1の結果を予測する場合、第1の命令のために、推測的実行における制限を適用し、分岐予測回路構成が、条件付き分岐命令の一方向推測変数について第2の結果を予測する場合、第2の命令のために、推測的実行における前記制限の適用を省略するように、処理回路構成を制御するように構成される。
【0008】
少なくともいくつかの実例は、条件付き分岐命令に応答して、条件付き分岐命令後の次の命令が第1の命令である第1の結果と、次の命令が第2の命令である第2の結果とのうちの一方を選択することと、第1の結果又は第2の結果が、条件付き分岐命令のために選択されるべきであるか否かを予測することと、条件付き分岐命令が、条件付き分岐命令の一方向推測変数である場合、第1の結果が、条件付き分岐命令の一方向推測変数のために予測される場合、第1の命令へ、推測的実行における制限を適用することと、第2の結果が、条件付き分岐命令の一方向推測変数のために予測される場合、第2の命令へ、推測的実行における前記制限の適用を省略することとを備える、データ処理方法を提供する。
【0009】
本技術のさらなる態様、特徴、及び利点は、添付の図面と連携して読まれるべき、以下の実例の説明から明らかになるであろう。
【図面の簡単な説明】
【0010】
図1】推測的実行命令をサポートするデータ処理装置の実例を概略的に例示する図である。
図2】推測ベースのキャッシュ・ベースのタイミング・サイド・チャネルに基づく潜在的な攻撃の実例を概略的に例示する図である。
図3】推測バリア命令を処理する方法を示す図である。
図4】ストア推測バリア命令を処理する方法を示す図である。
図5】条件付き分岐命令の一方向推測変数を処理する方法を例示する図である。
図6】使用され得るシミュレータの実例を例示する図である。
【発明を実施するための形態】
【0011】
データ処理装置は、メモリ内のいくつかのデータが、処理回路構成上で実行される特定の処理によってアクセスできないことを保証するためのメカニズムを有し得る。たとえば、権限ベースのメカニズム及び/又はメモリ保護属性を使用して、メモリの特定の領域へのアクセスを制御し得る。最近、推測的実行とキャッシングを使用するシステムでは、悪意のある人物が、推測的に実行された命令の体系的な効果が、誤った推測後に取り消された後でも、推測的に実行された命令の効果が、データ・キャッシュに残る場合があるという特性を悪用して、アクセスを有さないメモリの領域から、情報を取得する可能性があることが認識されている。このような攻撃は、分岐予測器や他の推測メカニズムをトレーニングして、より高い権限のコードを欺いて、この権限のコードが、機密情報に依存するメモリ・アドレスのパターンにアクセスできるように設計された命令のシーケンスを推測的に実行し、これによって、この機密情報へのアクセスを有さない、より低い権限のコードが、キャッシュ・タイミング・サイド・チャネルを使って、より高い権限のコードによって、キャッシュへどのアドレスが割り当てられているのか、又は、キャッシュからどのアドレスが削除されているのかを調べ、機密情報を推定できるいくつかの情報を与えることが可能となる。このような攻撃は、推測的サイド・チャネル攻撃と呼ばれ得る。
【0012】
以下により詳細に説明するように、データ処理装置の命令復号回路構成は、推測バリア命令をサポートし得る。推測バリア命令に応答して、命令復号回路構成は、推測バリア命令後にプログラム順に現れ、推測バリア命令にプログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止するように処理回路構成を制御し得る。これは、上記のタイプの攻撃に対する保護を提供する。たとえば、機密情報へのアクセスが許可されているコンパイラ生成コードのプログラマは、信頼できないコードによって提供された値からアドレスが導出される前のロード命令と、前のロード命令によってロードされた値に基づいてアドレスが計算される後のロード命令との間に、推測バリアを含めることができる。バリアを含めることで、後のロード命令が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止し、信頼できないコードにアクセスできない機密情報に関する情報を、キャッシュ・タイミング・チャネルを使用して判定できるようにする。したがって、推測バリア命令のサポートを提供することにより、セキュリティを向上させることができる。
【0013】
キャッシュ内のエントリの割当の推測的な影響が阻止される、推測バリア命令に続く後続する動作は、ロード命令及びストア命令のうちの一方であり得る。(そのロード命令又はストア命令がアドレス依存性を有する)前の命令は、ロード命令であり得る。
【0014】
1つの実例では、推測バリア命令が終了するまで、
・条件付き選択命令の結果に対するアドレス依存性を有するロード、ストア、データ、又は命令プリロードRW2が、推測バリア命令後にプログラム順に現れる場合、
○条件付き選択命令は、入力レジスタの1つについて、推測的に実行されたロードR1に対するレジスタ・データ依存性を有し、
〇条件付き選択命令は、他の入力レジスタについて、R1に対するレジスタ依存性を有さず、
〇条件付き選択命令の条件は、R1が体系的に実行されていない場合に、R1に依存しない入力が選択されるのであれば、
処理回路構成は、キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、R1から推測的にロードされた値の任意の部分の値を判定するために使用されることができるような、キャッシュ内のエントリの割当に影響を与えるRW2を阻止するように構成される。これにより、攻撃者は、後続する動作RW2のキャッシュへの効果を分析することにより、ロードR1によって推測的にロードされた値に関する任意の情報を導出できなくなる。
【0015】
別の実例では、推測バリア命令が終了するまで、
・条件付き移動命令の結果に対するアドレス依存性を有するロード、ストア、データ、又は命令プリロードRW2が、推測バリア命令後にプログラム順に現れる場合、
○条件付き移動命令は、その入力レジスタについて、推測的に実行されたロードR1に対するレジスタ依存性を有さず、
〇条件付き移動命令の条件は、R1が体系的に実行されていない場合に、条件を満たすのであれば、
処理回路構成は、キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、R1から推測的にロードされた値の任意の部分の値を判定するために使用されることができるような、キャッシュ内のエントリの割当に影響を与えるRW2を阻止するように構成される。繰り返すが、これにより、攻撃者が、ロードR1の不正な推測を悪用して、キャッシュ割当における後続する動作RW2の効果の分析に基づいて、R1によってロードされた値に関する情報を取得することを阻止する。
【0016】
推測バリア命令後の後続する動作によるエントリの割当の推測的な影響が阻止されるキャッシュは、データ・キャッシュ、命令キャッシュ、及び分岐予測キャッシュのいずれでもよい。キャッシュの他の実例は、値予測器キャッシュ、ロード/ストア・エイリアシング予測器キャッシュ、及び他の予測構造を含むことができる。
【0017】
処理回路構成では、推測バリア命令に続く後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止できる様々な手法があり得る。1つの実例では、これは、少なくとも推測バリア命令が終了するまで、後続する動作の推測的実行を阻止することによって阻止され得る。推測バリア命令は、プログラム順に先行する命令が解決されると、終了したと見なすことができる。いくつかの実例では、推測バリア命令が終了すると、後続する動作の推測的実行が許可される可能性がある(ただし、推測は、推測バリア命令に続く動作に関連付けられた予測に基づく)。
他の実例では、処理回路構成は、後続する動作の推測的実行を許可している間、後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止し得る。キャッシュ内のエントリの割当に対する影響は、キャッシュを割り当てるエントリを事前に有していなかった所与のアドレスに対する新たなエントリの割当、又は、所与のアドレスがもはやキャッシュされないように、所与のアドレスに関連付けられた、事前にキャッシュされたエントリの削除であり得る。
【0018】
たとえば、推測的実行自体を阻止するのではなく、キャッシュに対するその推測的実行の効果が阻止され得る。たとえば、いくつかの実施では、推測バリア命令に先行する命令の結果の推測的予測に基づいて実行され、推測バリア命令がまだ終了していないのであれば、バリア命令に続く推測的に実行される動作が、データをまったくキャッシュしないように選択できる。
【0019】
或いは、推測バリア命令が終了するまで、後続する動作によって推測的にロードされたあらゆるデータが、推測的バッファに保持され、推測が解決されて、推測バリア命令が終了するまで、メイン・キャッシュに割り当てられない。たとえば、推測的バッファは、メイン・キャッシュの任意のキャッシュ手法と共に追加のキャッシュ手法として探索され得るバッファであり得るが、推測バッファの内容は、特定の権限レベルの遷移(たとえば、より低い権限状態への遷移)において廃棄され、これにより、より低い権限のコードは、まだ正しいと解決されていない場合、推測的にロードされたデータにアクセスできなくなる。このアプローチは、メイン・キャッシュ領域が、推測的にロードされた値で汚染されることを阻止し(そして、推測的にロードされた値の割当により、メイン・キャッシュからの他の値の削除を阻止し)、より低い権限状態への遷移が続いた場合、より低い権限のコードは、キャッシュ・タイミング・サイド・チャネルを使用して、キャッシュされた値に関する情報を推測することはできない。
【0020】
1つの実例では、推測バリア命令に応答して、命令復号回路構成は、前の命令のデータ値予測と、前の命令が、条件付き分岐命令以外の命令である場合、前の命令の条件コード予測と、前の命令が、ベクトル値のどのデータ要素が、処理されるべきアクティブな要素であるのかを示す属性情報に依存するベクトル命令である場合、その属性情報の予測とのうち、少なくとも一方を使用して、後続する命令が推測的に実行されることを阻止するように処理回路構成を制御し得る。後続する命令が、推測バリア命令に先行する命令に対して行われたデータ値予測、条件コード予測、又は属性予測の結果を、推測的に使用できないようにすることによって、攻撃者が利用できる手段を減らすことができる。
【0021】
1つの実例では、処理回路構成は、推測バリア命令ベースに続く命令の制御フローの推測的制御を許可し、推測バリア命令に先行する体系的に未解決の前の命令に関連付けられた予測を行い得る。したがって、推測バリア命令の前後のフロー推測の制御は、依然として許可される可能性がある。バリア後に推測的に実行された命令に応答して、キャッシングの効果を抑制することで、前述の攻撃を十分軽減し得るので、推測的制御フローを許可することが可能である。バリアの前後の制御フローの推測的制御を有効化することによって、パフォーマンスを向上させることができる。同様に、いくつかの実例では、前の命令がまだ体系的に解決されていない場合、推測バリア命令に先行する前の命令のデータ値予測又は条件コード予測の結果を一度にプログラム順に使用しないのであれば、推測バリア命令に続く条件付き命令の推測的実行が許可され得る。
【0022】
いくつかのデータ処理装置における推測の別の形態は、ロード命令又はストア命令のアドレスを推測することであり得る。ロード命令又はストア命令のアドレスは、前の命令によって計算され得るレジスタからの値に基づくアドレス計算に依存し得る。ロードのアドレスがまだ不明であるロード命令がストア命令後に続く場合、ロード命令のアドレスが実際に、前のストア命令のアドレスと同じになる可能性があるというリスクがあり得るが、これは、ロードのアドレスが前のストアのアドレスと異なる場合よりも少なくなり得る。ストア値が依存する前の命令の結果を待つことで、ストア命令の実行が遅れる可能性がある。ロードが実際にストアと同じアドレスにアクセスするか否かは、ロード命令が実行されるまで不明であり得る。処理回路構成が、実行のためにロード命令を発行する前に、ストア命令の終了を待っていたのであれば、ロード・アドレスが実際にストア・アドレスと異なることが判明した場合に、不要な遅延を引き起こす可能性がある。
【0023】
したがって、ロード命令を推測的に早く(前のストアをバイパスして)発行することで、ロード命令のアドレスが実際に、ストア命令のアドレスと異なることが判明した場合、ロードが、前のストア命令からの値を待って不必要に遅延しないため、パフォーマンスが向上する。しかしながら、ロード・アドレスが、実際に、前のストア・アドレスと同じであることが判明した場合、ロード命令は、ストア命令が実行される前に、ストア命令の実行から得られる値とは異なるターゲット・アドレスにストアされた古い値をロードし得るので、この推測的実行により、誤った値がロードされる可能性がある。
【0024】
いくつかのシナリオでは、攻撃者は、機密情報へのアクセスの取得を試みるために、ロードによって、前のストアのこの推測的バイパスを、悪用する可能性がある。このような攻撃を軽減するために、ストア推測バリア命令が提供され得る。ストア推測バリア命令に応答して、命令復号回路構成は、プログラム順にストア推測バリア命令に先行する前のストア命令が、プログラム順にストア推測バリア命令に続き、前のストア命令と同じアドレスを指定する、後続するロード命令の推測的実行によってバイパスされるのを阻止し得る。ストア推測バリア命令は、上記で考察された推測バリア命令とは異なる命令エンコーディングを有し得る。したがって、ストア推測バリア命令のサポートにより、セキュリティが向上する。
【0025】
ストア推測バリア命令の様々な変数が提供され得る。ストア推測バリア命令の第1の変数の場合、後続するロード命令は、前のストア命令と同じ仮想アドレスを指定するものであり得る。第2の変数の場合、後続するロード命令は、前のストア命令と同じ物理アドレスを指定するものであり得る。第2の変数の提供は、たとえば、オペレーティング・システムに出入りするときに、キャッシュ・タイミング・サイド・チャネル・メカニズムを使用して、推測的ロードが悪用されるのを阻止するのに役立つ。
【0026】
ストア推測バリア命令に応答して、命令復号回路構成はまた、プログラム順にストア推測バリア命令に続き、前のロード命令と同じアドレスを指定する後続するストア命令から得られるデータを、プログラム順に推測的にロードする、ストア推測バリア命令に先行する前のロード命令を阻止し得る。これは、ストアが別のアドレスを有することを前提として、推測バリア命令に続くストアが、前のロードに先行して実行されるという逆のシナリオの悪用を試みる攻撃から保護するが、後に、前のロードと同じアドレスに実際にストアすることが判明し、この場合、ストアの推測的実行により、前のロードによって誤った値がロードされる可能性がある。ストア推測バリア命令は、攻撃者が、キャッシュ・タイミング・サイド・チャネルを使用して、このような誤った推測によって引き起こされたキャッシュ割当における変更を調査することを回避できるため、セキュリティが向上する。
【0027】
推測的実行を引き起こし得る1つのタイプの命令は、条件付き分岐命令であり得、それに応答して、命令デコーダは、条件付き分岐命令後の次の命令として第1の命令が選択される第1の結果、又は、条件付き分岐命令後の次の命令として第2の命令が選択される第2の結果のいずれかを選択するように、処理回路構成を制御し得る。たとえば、第1の結果及び第2の結果のうちの一方は、条件付き分岐命令が採用されたとの結果であり得、他方は、不採用されたとの結果であり得る。実際の結果が分かる前に、条件付き分岐命令に対して第1の結果又は第2の結果を選択する必要があるか否かを予測するために、分岐予測回路構成が提供され得る。後続する命令は、その後、分岐予測に基づいて推測的に実行され得る。
【0028】
1つの実例では、条件付き分岐命令の一方向推測変数が提供され得、それに応答して、分岐予測回路構成及び命令復号回路構成のうちの少なくとも一方は、分岐予測回路構成が、条件付き分岐命令の一方向推測変数の第1の結果を予測する場合、処理回路構成を制御して、第1の命令について推測的実行に対する制限を適用し得る一方、分岐予測回路構成が、条件付き分岐命令の一方向推測変数のための第2の結果を予測する場合、推測的実行に対する制限は、第2の命令について省略され得る。
【0029】
したがって、推測的実行は、分岐予測器が、条件付き分岐について、1つの結果を予測するときの方が、他の結果を予測するときよりも、より制限され得る。これは、前述したタイプの推測ベースのキャッシュ・タイミング・サイド・チャネル攻撃から保護するのに役立ち得る。たとえば、条件付き分岐が、信頼できない可能性のあるコードから渡された値が許容範囲内にあるか否か、又は信頼できない可能性のあるコードによって提供されたパスワードが正しいか否かをチェックする場合、採用されたとの結果と、不採用されたとの結果のうちの一方は、潜在的な機密情報の処理を続行するように設計され得るが、他の結果は、その機密情報にアクセスするリスクがない可能性がある。したがって、通常、条件付き分岐の結果のうち、どちらが他方よりも攻撃のリスクにさらされる可能性が高いかを、プログラマ又はコンパイラは知ることができる。条件付き分岐命令の一方向推測変数を提供することにより、予測された分岐結果に対する推測的実行の制限が他方よりも少なくなるため、第2の結果が予測されたときに推測的実行を許可することにより、プロセッサのパフォーマンスを向上させることができるが、第1の結果が予測されたときに推測的実行を制限することにより、セキュリティを向上させる。
【0030】
条件付き分岐について第1の結果が予測される場合に、推測的実行を制限する多くの手法が存在し得る。1つの実例では、条件付き分岐に続く所与の命令の推測的実行は、(少なくとも予測が正しいものとして解決されるまで)完全に阻止され得る。或いは、推測における制限により、後続する命令を推測的に実行することもできるが、(再度、少なくとも予測が正しいものとして解決されるまで)分岐後の後続する命令に適用されるキャッシングに制限が含まれる可能性がある。たとえば、条件付き分岐の第1の結果の予測に続いて推測的に実行される命令に応答して、キャッシングが禁止され得るか、又は、上記の実例のようにメイン・キャッシュから分離された別個の推測的バッファにではあるが、キャッシングが有効化され得る。
【0031】
一般に、条件付き分岐命令の一方向推測変数は、多くの手法で条件付き分岐命令の従来の双方向推測変数と区別され得る(そのために、推測的実行が制限されず、それにも関わらず、第1の結果又は第2の結果が、分岐予測器によって予測される)。1つの実例では、一方向推測変数は、異なる命令エンコーディング(たとえば、異なる命令オペコード、又は異なる変数を区別する命令エンコーディング内のフィールド)を有し得る。或いは、条件付き分岐命令の一方向推測変数及び双方向推測変数は、同じエンコーディングを有することができるが、データ処理装置の制御レジスタにストアされた制御パラメータは、そのような条件付き分岐命令に遭遇した場合に、どの変数を使用するかを指定し得る。
【0032】
また、一方向推測変数自体の多くの代替変数が存在し得る。たとえば、第1の変数の場合、第1の結果は、採用されたとの結果を備え得、第2の結果は、不採用されたとの結果を備え得る。第2の変数の場合、第1の結果と、第2の結果とは、逆であり得るため、第1の結果は、不採用されたとの結果を備え得る一方、第2の結果は、第2の結果を備え得る。繰り返すが、これら変数は、異なる命令エンコーディングによって、又は、制御レジスタ内のパラメータによって区別できる。したがって、第1の変数の場合は採用されたとの結果に、又は、第2の変数の場合は不採用されたとの結果に、推測的実行における制限を適用できる様々な変数を提供することにより、これは、採用されたとの結果、又は不採用されたとの結果が、推測的キャッシュ・タイミング・サイド・チャネルによる攻撃に対してより脆弱であるか否かに応じて、プログラマ又はコンパイラが、使用すべき変数を選択する柔軟性を与える。
【0033】
処理装置のマイクロ・アーキテクチャは、第1の結果が、条件付き分岐命令の一方向推測変数に対して予測されるが、第2の結果が予測されないときに、推測的実行における制限が適用されることを保証し得る多くの手法が存在し得る。
【0034】
1つの実例では、分岐予測回路構成は、以前の条件付き分岐命令の結果に基づいてトレーニングされた分岐予測状態情報に基づいてその予測を行い得、条件付き分岐命令の一方向推測変数を、分岐予測状態情報のトレーニングから除外し得る。一方向変数を分岐予測状態のトレーニングから除外することで、これは分岐予測器が、一方向変数の実際の結果を学習するのを阻止するので、一方向変数の予測が、たとえば、一方向変数についてストアされた分岐予測状態を含めないか、又は、実際の分岐結果に基づいてトレーニングされずに、一方向分岐の第2の結果を予測するようにデフォルト設定する分岐予測状態のエントリを含めることによって、推測がそれほど制限されない第2の結果に偏る可能性がある。
【0035】
たとえば、いくつかの分岐予測器では、ストアされた分岐予測状態が存在しないどの命令の予測も、不採用との結果とデフォルト設定し得る。この場合、一方向推測条件付き分岐命令の第1の変数の場合(第1の結果が採用であり、第2の結果が不採用である場合)、分岐予測器は、分岐予測状態がストアされていない命令の第2の結果(不採用)を予測するようにデフォルト設定し得るので、第1の結果に基づいて命令を推測的に実行することが不可能であることを保証するために、一方向推測分岐のために分岐予測状態情報を割り当てない可能性がある。対照的に、第2の変数の場合(推測が制限される第1の結果が、不採用との結果となる場合)、第1の結果に基づく推測がないことを保証するために、デフォルト予測として第2の(採用された)結果を指定するエントリが分岐予測回路に割り当てられ得、これは、その後、一方向分岐の実際の分岐結果が第1の結果であっても(一方向分岐の実際の結果に基づくトレーニングがないため)、第2の結果を予測し続ける。
【0036】
マイクロ・アーキテクチャにおける条件付き分岐命令の一方向推測変数の第1の結果の推測を制限する別の手法は、分岐予測器が、一方向推測制御がない条件付き分岐と同様に、条件付き分岐命令の一方向推測変数の実際の結果に基づいて、その分岐予測状態情報を引き続きトレーニングし得るが、その後、分岐予測器によってどの予測が出力されるのかに基づいて、処理パイプラインは、その後、推測が許可されるか否か、又は、推測が許可される場合、キャッシングに制限があるか否かを制御し得る。したがって、このマイクロ・アーキテクチャ・アプローチを用いて、分岐予測器は、他の双方向推測の条件付き分岐と同様の一方向推測変数に基づいて分岐予測状態をトレーニングし得るが、一方向推測変数に対して予測される結果に基づいて、推測するか否かのフィルタリングが適用され得る。
【0037】
これらマイクロ・アーキテクチャ・アプローチの両方は、条件付き分岐命令の一方向推測変数の体系的な定義内にあり、そのために、第1の結果が予測されるときに推測に制限が適用されるが、第2の結果が予測されるときに省略されることが理解されるであろう。
【0038】
それに加えて、いくつかの実例では、命令デコーダは、条件付き分岐命令の推測制限変数をサポートすることもでき、そのために、第1の結果又は第2の結果のどちらが分岐予測回路構成によって選択されるかに関わらず、分岐後の次の命令に、推測的実行に制限が適用される。これは、プログラム・フローの両方の分岐が、潜在的な推測ベースのキャッシュ・タイミング・サイド・チャネル攻撃のリスクがあると見なされる場合に役立ち、そのため、この特定の分岐では、パイプラインは、その命令に対して行われた予測に推測的に作用しないか、或いは、推測的実行が許可されている場合、推測が第1の結果又は第2の結果のどちらに基づいていても、条件付き分岐命令に関連付けられた条件が解決されるまで、そのような状態実行命令のキャッシングの効果を制限できる。
【0039】
したがって、上記の技術は、潜在的なサイド・チャネル攻撃に対する堅牢性を提供するのに役立つ。
【0040】
図1は、いくつかのパイプライン・ステージを備える処理パイプラインを有するデータ処理装置2の実例を概略的に例示する図である。パイプラインは、分岐命令の結果を予測するための分岐予測器4を含む。フェッチ・ステージ6は、分岐予測器4によって行われた予測に基づいて一連のフェッチ・アドレスを生成する。フェッチ・ステージ6は、フェッチ・アドレスによって識別された命令を、命令キャッシュ8からフェッチする。復号ステージ10は、フェッチされた命令を復号して、パイプラインの後続するステージを制御するための制御情報を生成する。名前変更ステージ12は、レジスタの名前変更を実行して、命令によって識別されたアーキテクチャ・レジスタ指定子を、ハードウェアで提供されるレジスタ14を識別する物理レジスタ指定子にマップする。レジスタの名前変更は、順不同の実行をサポートするのに役立ち、これにより、同じアーキテクチャ・レジスタを指定する命令間のハザードを、ハードウェア・レジスタ・ファイル内の異なる物理レジスタにマップすることにより排除し、命令がキャッシュ8からフェッチされたプログラム順とは異なる順序で実行される可能性を高め、これにより、前の命令が、オペランドが利用可能になるのを待っている間に、後の命令の実行を可能にすることによって、パフォーマンスを向上させ得る。アーキテクチャ・レジスタを別の物理レジスタにマップする機能により、分岐誤予測が発生した場合の体系的状態のロール・バックも容易になる。発行ステージ16は、命令を処理するために必要なオペランドがレジスタ14で利用可能になるまで、実行を待つ命令をキューに入れる。実行ステージ18は、対応する処理動作を実行するための命令を実行する。書き戻しステージ20は、実行された命令の結果をレジスタ14に書き戻す。
【0041】
実行ステージ18は、分岐命令が正しく予測されたか否かを評価する分岐ユニット21、算術演算又は論理演算を実行するALU(算術論理ユニット:arithmetic logic unit)22、浮動小数点オペランドを使用して演算を実行する浮動小数点ユニット24、単一の命令に応答して多数の独立したデータ要素が処理されるベクトル演算を処理するためのベクトル処理ユニット25、及びメモリ・システムからレジスタ14にデータをロードするロード動作、又はレジスタ14からメモリ・システムにデータをストアするストア動作を実行するロード/ストア・ユニット26などのいくつかの実行ユニットを含むことができる。この実例では、メモリ・システムは、レベル1の命令キャッシュ8、レベル1のデータ・キャッシュ30、データと命令との間で共有されるレベル2のキャッシュ32、及びメイン・メモリ34を含むが、これは、可能なメモリ階層の単なる1つの実例であり、他の実施は、さらなるレベルのキャッシュ、又は異なる構成を有し得ることが理解されよう。メモリへのアクセスは、アドレス変換及び/又はメモリ保護を制御するために、メモリ管理ユニット(MMU:memory management unit)35を使用して制御することができる。ロード/ストア・ユニット26は、MMU35の変換ルックアサイド・バッファ(TLB:translation lookaside buffer)36を使用して、パイプラインによって生成された仮想アドレスを、メモリ・システム内の場所を識別する物理アドレスにマップすることができる。図1に示されるパイプラインは単なる1つの実例であり、他の実例は、異なるセットのパイプライン・ステージ又は実行ユニットを有し得ることが理解されよう。たとえば、順序付きプロセッサには、名前変更ステージ12がない場合がある。
【0042】
分岐予測器4は、条件付き分岐命令の分岐結果の予測、及び/又は、間接的分岐命令のターゲット・アドレスの予測に基づいて、それらが本当に必要か否かが分かる前に、データ処理動作を推測的に実行するために、データ処理装置によって使用され得る推測メカニズムの1つの実例である。実行ステージを制御して、その命令に関連付けられた情報の予測(分岐予測以外)に基づいて命令を推測的に実行するために、実行ユニット18に関連付けられた推測制御回路構成40も存在し得る。
【0043】
たとえば、条件付き命令は、実行ステージ18を制御して、レジスタ14にストアされている条件ステータス・コード42の値を条件とする条件付き処理動作を実行し得る。いくつかの条件設定命令では、命令の結果に基づいて、条件ステータス・コード42が更新される場合があり得る。たとえば、ALU22によって処理された算術命令は、条件コード42を更新して、算術演算の結果がゼロであったか否か、結果が負であったか否か、又は、演算が符号付きオーバフロー又は符号なしオーバフローを生成したか否か、のような結果の特性を示すことができる。その後、後続する条件付き命令は、条件ステータス・コード42の現在の値が、いくつかのテスト条件を満たすか否かをテストし得る。体系的な観点から、コードがテスト条件を満たしている場合は、関連付けられた処理動作(算術演算や論理演算など)が実行され得るが、条件ステータス・コード42がテスト条件を満たしていない場合は、その条件付き動作が実行されない可能性があり、代わりに、命令は、体系的な効果がない、無動作命令として取り扱われる場合がある。しかしながら、マイクロ・アーキテクチャでは、推測制御回路構成40は、実際の条件コードが分かる前に、条件ステータス・コード42の予測に基づいて、条件付き命令に関連付けられた処理動作を推測的に実行して、条件コードを変更する可能性がある前の命令が終了するのを待つことを避けることができる。予測が正しくないことが判明した場合、推測的に実行された命令の結果が破棄され、プログラム・フローを、最後の正しい実行ポイントに巻き戻すことができる。
【0044】
推測制御回路構成40によって実行され得る別の形態の推測は、ベクトル処理ユニット25によって実行されるベクトル導入に関連付けられた述語値44の予測であり得る。SIMD(単一命令複数データ:single instruction multiple data)命令としても知られているベクトル命令は、同じレジスタ内にストアされている複数のデータ要素を演算できる。たとえば、ベクトル加算命令は、ベクトル処理ユニットをトリガして、複数の加算演算を実行し得、これら加算演算のおのおのは、2つのベクトル・レジスタの対応する位置にそれぞれのデータ要素のペアを加算し、結果ベクトル・レジスタへ書き込まれる対応する結果要素を生成する。これにより、1つの命令に応答して、複数の独立した追加を実行できる。ベクトル命令は、ベクトル命令を含むベクトル化された命令のループが、ベクトル処理ユニット25によって実行される単一の反復に応答して、スカラ・ループの複数の反復を処理できるようにすることで、処理命令のスカラ・ループをより速く処理できるようにするのに役立ち得る。
【0045】
ベクトル化された命令のシーケンス内に、条件付き機能を含めることが望ましい場合があり、これにより、ベクトルの1つの要素が特定の条件を満たさない場合、それ以外の場合はその要素に対して実行される後続する動作は実行されないが、必要な条件を満たしていれば、同じベクトル内で他の要素がまだ処理される可能性がある。また、スカラ・ループをベクトル化する場合、スカラ・ループの反復回数は、ベクトルで提供される要素数の正確な倍数にマップされない場合があり、この場合、最後のベクトル・ループ反復でベクトルを完全に埋めるのに十分なスカラ反復がないため、ベクトルのいくつかの要素を処理する必要がないループ・テール反復がある場合がある。したがって、ベクトルのどの要素がアクティブな要素であるかを指定する述語値44を定義することが役立ち得る。結果ベクトルの非アクティブな要素はゼロにクリアされ得るか、又は命令を実行する前に宛先レジスタのそれら部分にストアされた以前の値を保持することができる。
【0046】
したがって、述語値44は、対応するベクトル命令の結果が判定される前に分かる必要があり得る。述語値44は、前の命令、たとえば他の命令の結果を待っている条件付き命令によって設定できる。述語が実際に計算されるのを待つと、ベクトル命令が遅延し得る。(たとえば、同じ命令を実行する以前のインスタンスに基づいて、又はすべての要素がアクティブであるというデフォルト仮定に基づいて)述語値に対して行うことができる予測がある場合、予測が正しい場合、ベクトル命令を推測的に実行してパフォーマンスを向上できる。述語の予測が、後に正しくないと判明した場合、処理をより前の実行ポイントに巻き戻して、誤って推測された命令の結果を廃棄することができる。したがって、推測制御の別の形態は、述語値44の予測に基づいて推測的にベクトル命令を実行することであり得る。
【0047】
別の形態の推測は、ロード/ストア・ユニットによって実行されるロード命令又はストア命令のアドレスにある。たとえば、ロード命令が前のストア命令に続くか、ストア命令が前のロード命令に続く場合、第2の命令は、アドレスが異なることが判明した場合、パフォーマンスを向上させるために、実際には異なるデータ値にアクセスするので独立しているという前提で、第1の命令に先行して推測的に実行され得る。しかしながら、推測が正しくないことが判明し、第2の命令ペアが実際に第1のアドレスと同じアドレスにアクセスしてしまう場合は、推測が正しくない可能性があり、これは、命令の1つが誤った結果をもたらす可能性がある。誤推測が検出された場合、処理を、前の実行ポイントに巻き戻すことができる。
【0048】
そのような推測メカニズムは、攻撃者がアクセスを許可されるべきではない機密情報へのアクセスを取得するために、攻撃者によって悪用される可能性がある。処理装置は、権限ベースのメカニズムを使用して動作することができ、ここでは、MMU35は、所与の特権レベル以上で実行されるコードに、メモリ・アドレス空間の特定の領域へのアクセスを制限するアクセス許可を定義し得る。非権限コードを制御している攻撃者は、キャッシュ・タイミング・サイド・チャネルの悪用を試みて、攻撃者がアクセスを有さないメモリの権限領域内の機密情報に関する情報へのアクセスを得ようとすることができる。
【0049】
キャッシュ・タイミング・サイド・チャネルの背後にある基本的な原理は、キャッシュへの割当のパターン、特に、割当に使用されたキャッシュ・セットは、キャッシュに以前にあったエントリにアクセスするのに費やされた時間を測定することで、又は、割り当てられたエントリにアクセスする時間を測定することで判定され得る。これは、その後、どのアドレスがキャッシュに割り当てられているのかを判定するために使用され得る。
【0050】
推測ベースのキャッシュ・タイミング・サイド・チャネルの新規性は、推測的メモリ読取の使用である。推測的メモリ読取は、高度なマイクロプロセッサの典型であり、非常に高いパフォーマンスを可能にする全機能の一部である。体系的に未解決の分岐(又はプログラム・フローにおける他の変更)を超えてキャッシュ可能な場所に推測的メモリ読取を実行することにより、さらに、それら読取結果自身を使用して、さらなる推測的メモリ読取のアドレスを形成できる。これら推測的読取により、アドレスが、第1の推測的読取の値を示すキャッシュにエントリが割り当てられる。これは、信頼できないコードが推測を制御して、信頼できないコードではアクセスできない場所の第1の推測的読取を引き起こす場合に、悪用可能なサイド・チャネルになる。しかし、キャッシュ内の第2の推測的割当の効果は、その信頼できないコードによって測定できる。
【0051】
監視ソフトウェアの任意の形態では、信頼できないソフトウェアが、信頼できるソフトウェアがアクセスするアレイ又は同様の構造へのオフセットとして使用されるデータ値を渡すのが一般的である。たとえば、(信頼できない)アプリケーションは、ファイル記述子IDに基づいて、開いているファイルに関する情報を要求する場合がある。もちろん、監視ソフトウェアは、使用前にオフセットが適切な範囲内にあることを確認するため、そのようなパラダイムのソフトウェアは以下の形式で記述できる。
【数1】
【0052】
最新のマイクロプロセッサでは、プロセッサによる実施は一般に、
【数2】

範囲チェックに関連付けられている分岐(上記のコードにおける7行目が意味する)を実行する前に、値を確立するために推測的にデータ・アクセス(上記のコードにおける9行目が意味する)を実行する場合がある。このコードを監視レベル(OS KernelやHypervisorなど)で実行しているプロセッサは、信頼できないソフトウェアによって渡された
【数3】

の範囲外の値によって判定される、その監視レベルにアクセス可能な通常メモリ内の任意の場所から推測的にロードすることができる。これは体系的には問題ではなく、推測が正しくない場合、ロードされた値は、ハードウェアによって廃棄される。
【0053】
しかしながら、高度なプロセッサは、さらなる推測のために、推測的にロードされた値を使用することができる。推測ベースのキャッシュ・タイミング・サイド・チャネルによって悪用されるのは、このさらなる推測である。たとえば、以前の実例は、以下の形式になるように拡張され得る。
【数4】

【0054】
この実例では、
【数5】

と組み合わされた
【数6】

から計算されたアドレスを使用してメモリからロードされたvalue(10行目)が、その後、さらなるメモリ・アクセスの基礎として使用される(13行目)。したがって、value2の推測的ロードは、
【数7】

のために推測的にロードされたデータから導出されたアドレスから発生する。プロセッサによる
【数8】

の推測的ロードが、キャッシュへの割当を引き起こす場合、そのロードのアドレスの一部は、標準的なキャッシュ・タイミング・サイド・チャネルを使用して推測できる。そのアドレスは
【数9】

におけるデータに依存するため、値のデータの一部はサイド・チャネルを使用して推測できる。このアプローチを、様々な
【数10】

のビットに適用することにより、(多くの推測的実行において)値のデータ全体を判定できる。
【0055】
図2は、このタイプの攻撃を図解的に例示した図である。図2の実例では、変数xは、上記の
【数11】

に対応し、より低下した権限レベルEL0で動作する信頼できないコードから取得される。変数yは上記の実例における
【数12】

に対応し、これは、EL0にはアクセスできないが攻撃者がアクセスしたい秘密情報にアクセスできる、より高い権限レベルEL1で動作するコードによってロードされる。変数xは、アレイ1のサイズを示すサイズ・パラメータと比較され、信頼できないパラメータがアレイ・サイズより大きい場合、条件付き分岐は、後続するロード命令LD(上記の実例では、それぞれ10行目及び13行目におけるロードに対応する)を通過して分岐する。しかしながら、信頼できない変数xが、範囲外であると後で判定された場合でも、条件付き分岐が、不採用されたとの結果を判定すると仮定して、これらロードは推測的に実行される可能性がある。これにより、攻撃者が、#a+xを秘密のアドレスにマップするような手法で「x」を選択した場合、範囲外のアドレス#a+xにロードして、攻撃者がアクセスしてはならない秘密情報をロードし得る。その後、第2のロードは、秘密の一部に基づいて選択されたアドレスで、第2のアレイであるアレイ2から値をロードすることができる。この第2のロードにより、キャッシュ割当に変化が生じる可能性があり、より低下した権限レベル(EL0)で動作するより低い権限コードによって悪用される可能性がある。これは、キャッシュ・タイミング分析を使用して、第2のアレイのどの特定のアドレスがキャッシュされたかを調べ、それにより、秘密に関する情報を推測し得る。)
【0056】
したがって、信頼できないソフトウェアは、
【数13】

に範囲外の数量を提供することにより、監視ソフトウェアにアクセスできる場所であればどこにでもアクセスできるため、信頼できないソフトウェアがこのアプローチを使用して、監視ソフトウェアがアクセスできるメモリの値を復元できる。
【0057】
最新のプロセッサには、命令キャッシュ、データ・キャッシュ、分岐予測キャッシュなど、多数の異なるタイプのキャッシングを有する。これらキャッシュ内のエントリの割当が、信頼できない入力に基づいてロードされたいくつかのデータの任意の部分の値によって判定される場合、原則として、このサイド・チャネルが刺激され得る。
【0058】
このメカニズムの一般化として、基礎となるハードウェア技術は、分岐を通過したコードが推測的に実行される可能性があることを意味し、したがって、分岐後にメモリにアクセスする任意のシーケンスは、推測的に実行される可能性があることを理解されたい。推測的にロードされた1つの値を使用して、推測的に実行できる第2のロード又は間接的な分岐のアドレスを構築するそのような推測では、第2のロード又は間接的な分岐は、第1の推測的ロードによってロードされた値を示すインジケーションを残して、他の方法ではその値を読み取ることができないコードによるキャッシュのタイミング分析を使用して読み取ることができる。この一般化は、一般的に生成される多くのコード・シーケンスが、他のより低い権限のソフトウェアで読み取ることができるキャッシュ割当のパターンに、情報をリークすることを意味する。この問題の最も深刻な形態は、このセクションで前述したものであり、ここでは、より低い権限のソフトウェアが、この手法で、リークされる値を選択することができる。
【0059】
このサイド・チャネルは、Linux(登録商標)カーネルに含まれるeBPFバイト・コード・インタプリタ又はJITエンジンを使用して、カーネル空間で実行されるコードを使用するいくつかのプロセッサで実証されている。この手法で実行されるコードは、推測的にロードされたデータの必要なシフト及び逆参照を実行するルーチンを保持する。このメカニズムを使用することで、直接的に悪用されるカーネル空間で適切なルーチンを検索する必要が回避された。
【0060】
これは、推測を悪用する1つの例示的な手法であることを理解されたい。コードの分析によると、信頼できないオフセットを使用してロードされた値自体が、このメカニズムを使用して意味のある量の情報を取得できる範囲でアドレスを形成するために使用される場所がいくつか存在する。
【0061】
プロセッサが未解決の分岐を通過して推測することは一般的であり、そのため、この挙動は、順不同で実行されるキャッシュされたプロセッサで観察される可能性がある。順番に実行するいくつかのプロセッサでは、このアプローチを使用して、キャッシュへの必要な割当を行うには、推測的実行では不十分な場合があり得る。
【0062】
リークした値が、より低い権限のソフトウェアによって判定されるシナリオのための実用的なソフトウェア緩和は、秘密を導出したアクセスが、非推測的に実行されるアクセスであった場合に、秘密から導出されたアドレス(上記の実例で
【数14】

をロードするために使用されるアドレス)は、秘密(
【数15】

におけるデータ)のみを示すことを保証する。
【0063】
これは、いくつかの実施では、分岐の結果を判定するために(つまり、以前の実例では、
【数16】

をサニタイズするために)使用される条件に基づいて、条件付き選択又は条件付き移動命令を使用することで達成できる。これが機能しない実施では、[以下で定義する]新たなバリアを使用できる(この命令は、条件付き選択/条件付き移動が使用される実施ではNOPである)。したがって、条件付き選択/条件付き移動と、新たなバリアとの両方の組合せで、この問題に十分対処できる。新たなバリアの詳細については、このセクションで後述する。
【0064】
このサイド・チャネルの悪用を許可するシーケンスが権限コードに存在することは、一般的には珍しい。しかしながら、より低下した権限のレベルによって提供されるバイト・コードのコンパイルは、このようなシーケンスを権限ソフトウェアに導入する手段である。このようなバイト・コードをコンパイルするジャスト・イン・タイム・コンパイラは、コンパイルされたシーケンスの一部としてこれらメカニズムを使用することが特に重要である。このタイプのコード導入メカニズム(たとえば、eBPF)の提供は、それが実用的であるシステムでも無効化され得る。
【0065】
この問題の影響を受ける可能性のある別の領域は、Java(登録商標)scriptインタプリタ又はJava(登録商標)ランタイムで発生する可能性がある、単一の例外レベル内にソフトウェアによる権限の境界がある場所である。たとえば、インタプリタでは、ソフトウェアによる権限の強制の重要な要素には、この実例で見られる信頼できない値の一種のサニタイズが含まれているため、潜在的にこのメカニズムの実例を与える可能性がある。同様に、Java(登録商標)バイト・コードのランタイム・コンパイルによって生成されたシーケンスは、生成されたシーケンスに回避策を組み込む必要がある場合がある。
【0066】
このバリアを挿入することが実際的でない場合は、DSB SYSとISBとの組合せを挿入する代替的なアプローチを挿入して推測を阻止できるが、これは、条件付き選択/条件付き移動及びCSDBバリアを使用するよりも、はるかに大きなパフォーマンス効果をもたらす可能性がある。
新たなバリアの第1の実例:
【0067】
CSDBは、新たな条件付き推測バリアである。
バリアが終了するまで、
1)条件付き選択命令の結果に対するアドレス依存性を有するバリア後にプログラム順に現れる任意のロード、ストア、データ、又は命令のプリロードRW2の場合、
i.条件付き選択命令は、入力レジスタの1つについて、推測的に実行されたロードR1に対するレジスタ・データ依存性を有し、
ii.条件付き選択命令は、他の入力レジスタについて、R1に対するレジスタ依存性を有さず、
iii.条件付き選択命令の条件は、R1が体系的に実行されていない場合に、R1に依存しない入力が選択されるのであれば、
RW2の推測的実行は、キャッシュ内のエントリの割当に影響を与えず、キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、R1から推測的にロードされたデータ値の任意の部分の値を判定するために使用され得る。
2)バリア後にプログラム順に現れ、そのターゲット・アドレスが、条件付き選択命令の結果に対するレジスタ依存性を有する任意の間接的な分岐(B2)の場合、
i.条件付き選択命令は、入力レジスタの1つについて、推測的に実行されたロードR1に対するレジスタ・データ依存性を有し、
ii.条件付き選択命令は、他の入力レジスタについて、R1に対するレジスタ依存性を有さず、
iii.条件付き選択命令の条件は、R1が体系的に実行されていない場合、R1に依存しない入力が選択され、
B2の推測的実行は、キャッシュ内のエントリの割当に影響を与えず、キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、R1から推測的にロードされたデータ値の任意の部分の値を判定するために使用される。
バリアは、推測的に実行することはできないが、推測的ではないことが分かると終了することができる。
新たなバリアの第2の実例:
CSDBは、新たな条件付き推測バリアである。
バリアが終了するまで、
1.条件付き移動命令の結果に対するアドレス依存性を有するバリア後にプログラム順に現れるロード、ストア、データ、又は命令のプリロードRW2の場合、
i.条件付き移動命令は、その入力レジスタについて、推測的に実行されたロードR1に対するレジスタ依存性を有さず、
ii.条件付き移動命令の条件は、R1が体系的に実行されていない場合、条件を満たすのであれば、
RW2の推測的実行は、キャッシュ内のエントリの割当に影響を与えず、キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、R1から推測的にロードされたデータ値の任意の部分の値を判定するために使用される。
2.バリア後にプログラム順に現れ、そのターゲット・アドレスが、条件付き移動命令の結果に対するレジスタ依存性を有する任意の間接的な分岐(B2)の場合、
i.条件付き移動命令は、その入力レジスタについて、推測的に実行された、ロードR1に対するレジスタ依存性を有さず、
ii.条件付き移動命令の条件は、R1が体系的に実行されていない場合、R1に依存しない入力が選択され、
B2の推測的実行は、キャッシュ内のエントリの割当に影響を与えず、キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、R1から推測的にロードされたデータ値の任意の部分の値を判定するために使用される。
バリアは、推測的に実行することはできないが、推測的でないことが分かると終了することができる。
バリアの使用
これら実例は、プロセッサで実行されるアセンブリ・コードでバリアがどのように使用されるのかを示す。
以前に示した実例を採用する。
【数17】

第1の実例では、これが、以下の形式のアセンブリにコンパイルされ得る。
【数18】

この場合、このコードを次のように変更することで、サイド・チャネルを軽減できる。
【数19】

第2の実例では、同等のコードは、以下の通り。
オリジナルのコード:
【数20】

緩和が追加されたコード:
【数21】

このサイド・チャネルが、データ・キャッシュ、命令キャッシュ、又は分岐予測キャッシュで作成されないようにするために、この緩和アプローチは、次の場合に使用され得る。
・データ・アドレスは、信頼できないオフセットから読み取られた値から判定される。
・間接的な分岐先は、信頼できないオフセットから読み取られた値から判定される。
・分岐の決定は、信頼できないオフセットから読み取られた値から判定される。
信頼できない値の使用を含む特定のコード・シーケンスに適用すると、この緩和策により、そのコード・シーケンスを使用して、このサイド・チャネルを悪用し、データにアクセスすることができなくなる。
【0068】
すべてではないがいくつかの実施では、暗号化キーなどの特に重要な秘密を、デバイス・メモリにマップすると、キャッシュに割り当てられなくなる。このようにして、そのようなデータのマップピングは、オペレーティング・システムの下で実行可能な場合は、パフォーマンス・コストが大幅に増加するが、これら実施の追加の保護手段として使用できる。
【0069】
したがって、図3に示すように、推測バリア命令を処理する方法が提供され得る。ステップ50において、推測バリア命令が復号される。これに応答して、ステップ52において、命令デコーダ10は、パイプラインの残りのステージを制御して、プログラム順にバリアに先行する前の命令に対するアドレス依存性を有する条件付きバリア命令CSDBの後にプログラム順に現れる後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止する(このキャッシュは、たとえば、データ・キャッシュ30、命令キャッシュ8、分岐予測器4内の分岐予測キャッシュ、又は値予測器キャッシュ、又はロード/ストア・エイリアシング予測器などの他のキャッシュであり得る)。キャッシュ割当への推測的影響の阻止は、後続する命令の推測的実行を完全に阻止すること、又は、推測的実行を許可するが、キャッシュの更新、又は、キャッシュされたエントリの、キャッシュの別個の推測的領域への割当を阻止することのいずれかによって実行され得、キャッシュは、たとえば、権限レベルが低下した場合に削除される(推測が正しいとして解決されると、データが、推測的領域からメイン領域へ転送され得る)。バリアに続く後続する命令に対するキャッシュへの推測的効果に対する制限は、バリアが終了するまで、つまり、バリアに先行する前の命令に関連付けられた推測が解決されるまで継続し得る。
【0070】
推測バリア命令CSDBの別の実例を以下に示す。バリアのセマンティクスは、CSDBが、
任意の命令のデータ値予測、又は、
条件付き分岐命令以外の命令の条件コード42の予測、又は、
体系的に解決されていないCDSBの前にプログラム順に現れるベクトル命令のベクトル予測状態44の予測、
のいずれかの結果を使用して推測的に実行された後にプログラム順に現れる分岐命令以外の命令がないことである。
CSDBの定義のために、条件コード42とベクトル述語値44は、データ値とは見なされない。
この定義は、CSDBの前後の制御フローの推測と、CSDBの後の条件付きデータ処理命令の推測的実行とを許可するが、ただし、体系的に解決されていない、CSDBの前にプログラム順に現れる命令のデータ値又は条件コード予測の結果を使用する場合を除く。上記のコードの実例は、このバリア命令の実例でも使用できる。
【0071】
推測の別の実例は、ロード命令及びストア命令(プログラム順内のいずれかの指示で発生する)が、同じアドレスにアクセスするか否かの推測である。多くの最新の高性能プロセッサでは、パフォーマンスの最適化が行われ、これにより、アドレスへのロードは、ターゲット・アドレスがまだハードウェアによって知られていないが、実際にはロードのアドレスと同じである、前のストアを推測的にバイパスする。これが発生すると、ロードは、ストアによって書き込まれた値よりも、そのアドレスのデータの前の値を推測的に読み取る。その推測的にロードされた値は、その後、キャッシュへの割当を引き起こす後続する推測的メモリ・アクセスのために使用され得、それら割当のタイミングは、アドレスとして選択されたデータ値の観測サイド・チャネルとして使用できる。原則として、高度な順不同プロセッサでは、以下の形式のコード・シーケンスにおいて、
【数22】

であれば、このシーケンスにおける第2のロードは、第1のロードからX3に返された推測的値から導出されたX3の値を使用して、推測的に実行され得る。その推測的にロードされた値は、その値を上書きしたSTRよりもプログラム実行における早期から、第1のアドレスに保持された値から取得され得る。第2のロードの推測的実行によって生成されたキャッシュ割当は、X3に推測的にロードされたこの早期のデータに関するいくつかの情報を明らかにする。これは、その値の発見を阻止するために、ストアが、いくつかの前のデータを上書きしている状況を回避するために、攻撃者によって使用される可能性がある。この推測的バイパス・アプローチは、推測的ロードのチェーンを通じて拡張されて、このような場合、
【数23】

その後、このシーケンスにおける第2及び第3のロードは、その値を上書きしたSTRよりも実行時における早期から、第1のアドレスに保持された値から取得されたX3の値を使用して、推測的に実行される。第3のロードの推測的実行によって生成されたキャッシュ割当は、X5におけるデータに関するいくつかの情報を明らかにする。この場合、攻撃者が、X2及びX4を指すアドレスに保持されている以前の値を制御している場合、それは後続する推測に影響を与え、第2の推測的ロードによるデータの選択と、第3のロードによって引き起こされたキャッシュ割当の調査によって選択されたデータの公開とを可能にする。
【0072】
ストアと第1のロードとが同じ仮想アドレスと物理アドレスに対して行われる場合、この種の推測的並べ替えは、単一の例外レベル内でのみ発生する。
【0073】
ストアと第1のロードが異なる仮想アドレスであるが、同じ物理アドレスに対して行われる場合、異なる例外レベルで、コード間で推測的並べ替えが発生する可能性があり、この場合、以下のようになる。
【数24】

X3をオフセットとして使用してキャッシュに推測的にロードされた場所は、X2とX4が指す物理アドレスにあった、以前のデータ値を示している可能性がある。
【0074】
最新の高性能プロセッサでは、たとえば、ロードのアドレスの可用性と比較して、ストア・アドレスの生成におけるキャッシュ・ミスの結果として、ストアのアドレスの可用性が遅れている場合、ストアの並べ替え及び同じアドレスへの後続するロードと、そのようなロードによるより古いデータの推測的読み取りを示すことは比較的簡単である。
【0075】
ストアとロードが同じレジスタを使用してアドレスを伝達する場合、プロセッサは、同じアドレスへの前のストアの前に、一般に、ロードを推測的に実行しない。しかしながら、いくつかのマイクロ・アーキテクチャ固有の場合、いくつかの実施では原則として可能である。この並べ替えの正確な条件は、通常、プロセッサによって処理されている以前のメモリ・アクセスの遅延の複合関数である。
【0076】
これは、コードにおいて比較的一般的なパターンであるため、このメカニズムの特定の懸案は、ストアと第1のロードが(スタック・ポインタ、又は同じアドレスを有する他のレジスタのいずれかを使用する)スタックにおけるアクセスである場合である。原則として、これは、スタックにあったが上書きされた前の値が、その後のプロセッサの推測を制御するメカニズムを提供できる。権限付きスタックの場合、スタックにあった前の値は、実際には、より低い権限の実行の制御下にある可能性がある。
【0077】
以下のシーケンスでは、
【数25】

これは、その後、第2のロードを使用するプロセッサのより高い権限のアドレス空間アドレスにおけるいずれかのデータの推測的ロードを指示するために、(恐らく、いくつかのデータの処理を要求するシステム・コールの結果として)ストアの前にスタックに保持されていた値を判定したより低い権限のコードのために制御チャネルを与えることができる。次に、その第2のロードの結果は、第3のロードのアドレスを形成するために使用されるという事実によって観測可能になり、キャッシュ割当が発生する。そのキャッシュ割当の存在は、これらすべてのサイド・チャネルに適用されるのと同じ手法で、従来のキャッシュ・タイミング分析によって検出できる。原則として、これにより、タイミング・サイド・チャネルを使用して、より低い権限コードによって、任意の権限データを読み取ることができる。
【0078】
同様に、スタックは、関数ポインタで再利用できるため、この実例に示すように、任意のコードの選択を、より高い権限のアドレス空間で推測的に実行できる。
【数26】


原則として、これにより、推測ガジェットを選択して、興味深いデータを明らかにすることができる。
【0079】
少なくともいくつかの実施で見られる可能性のあるこの挙動のさらなる形態は、このシーケンスで見られ得るように、順不同プロセッサが、命令ストリームにおける後のストアから推測的に戻りデータをロードできる場合である。
【数27】


これが発生した場合、第2のロードによるキャッシュ内の割当により、キャッシュ・タイミング・サイド・チャネルを使用して、後でストアされた値が観察される可能性がある。
【0080】
単純な概念の実証がいくつかの実施で示されており、ここでは、ストアのアドレスは、同じアドレスへの後のロードに比べて遅延しているため、後に、上記のタイプの推測的メモリ・アクセスが発生する。これら推測的メモリ・アクセスは、タイミング・サイド・チャネルを使用して、ストア及びロードされるメモリ場所に保持されている前の値の判定によって選択されたデータの値を明らかにできるキャッシュ内の割当を引き起こす。これは、概念を証明するために専用に作製されたコードを使用して実証された。
【0081】
この形態のバイパスのより一般的な場合、特にスタックにアクセスするときに通常発生するストア・アドレスが、ロード・アドレスの前又は同時に利用できる場合は、実証されておらず、プロセッサに、必要な並べ替えを行わせ、そのようなデータをリークさせるために、以前のメモリ・アクセスを遅延させるのに必要な複雑な条件を、ユーザ・コードが保証することは、非常に困難となろう。しかしながら、このメカニズムが、より高い権限のメモリからデータを読み取るための低帯域幅チャネルとして悪用される可能性があることを排除することはできない。
【0082】
ロードによって後のストアを監視するメカニズムは実証されていないが、少なくともいくつかの実施では可能であると考えられている。
【0083】
このような攻撃を軽減するために、2つのストア推測バリア命令、SSBB及びPSSBBが提供される。SSBBバリアの使用は、仮想アドレスを使用するSSBBの前の任意のストアが、SSBBの後、任意の推測的なロードの実行によって、同じ仮想アドレスへバイパスされないことを保証する。また、SSBBバリアは、SSBBの前の特定の仮想アドレスへの任意のロードが、SSBBの後にストアから推測的にロードしないことを保証する。このバリアは、例外レベル内のソフトウェア管理された権限の場合に、このメカニズムを使用する推測的ロードが悪用されるのを阻止するために使用され得る。PSSBBバリアの使用は、特定の物理アドレスを使用するPSSBBの前の任意のストアが、PSSBBの後、任意の推測的なロードの実行によって、同じ物理アドレスへバイパスされないことを保証する。また、PSSBBバリアは、PSSBBの前の特定の物理アドレスへの任意のロードが、PSSBBの後にストアから推測的にロードしないことを保証する。
【0084】
図4は、上記のSSBB命令又はPSSBB命令のいずれかである、ストア推測バリア命令を処理する方法を示す。ステップ60において、そのようなストア推測バリア命令が復号される。ステップ62において、命令デコーダ10は、処理パイプラインを制御して、プログラム順にストア推測バリア命令に先行する前のストア命令が、プログラム順にストア・バリア命令に続き、前のストアと同じアドレスを指定する後続するロード命令の推測的実行によってバイパスされるのを阻止する。SSBB命令の場合、「同じアドレス」は同じ仮想アドレスを指し、PSSBB命令の場合、「同じアドレス」は同じ物理アドレスを指す。
【0085】
また、ステップ64において、ストア推測バリア命令に応答して、命令デコーダは、パイプラインの、後続するステージを制御して、プログラム順にストア推測バリア命令に先行する前のロード命令が、プログラム順にストア推測バリア命令に続き、同じアドレス(繰り返すが、「同じアドレス」は、SSBB変数又はPSSBB変数が復号されることに依存して、仮想アドレス又は物理アドレスとなり得る)を指定する後続するストア命令から得られるデータを、推測的にロードすることを阻止する。したがって、このバリアにより、コンパイラ又はプログラマは、推測サイド・チャネル攻撃に対する保護を提供できる。
【0086】
推測の別の実例は、分岐予測器4による条件付き分岐命令である結果の予測(採用又は不採用)であり、これにより、予測に依存して後続する命令が推測的に実行される可能性がある。分岐は通常、高性能のCPUマイクロ・アーキテクチャ設計で推測される。高精度で推測するために、その分岐の以前の実行に基づいて分岐を採用するか否かを予測する予測テーブルが生成される。
【0087】
単方向分岐、すなわち、採用又は不採用のいずれかであり、両方ではない一方向のみの推測が発生する分岐を提供することが提案されている。このような単方向分岐は、両方向(採用及び不採用)での推測が許可される双方向分岐に加えて、命令セット・アーキテクチャでサポートされ得る。
【0088】
次の高水準コードの実例を検討する。
【数28】


これは通常、次のような命令のシーケンスを、処理パイプラインで実行するように変換する。
【数29】


通常、(a<b)が当てはまる場合、最終的に予測器は、a<bであると高い信頼度で予測し、機密コードを実行する必要があると推測し得る。これにより、上記のようなサイド・チャネル・タイミング攻撃が発生する可能性がある。
【0089】
しかしながら、次のコードを提供した場合、
【数30】


であり、ここで、「bpt」が、「branch-only-predict-taken」(予測が採用された場合のみの分岐)のアセンブリ・ニーモニックである場合、マイクロ・アーキテクチャは、分岐予測器を使用して、分岐が採用されるという高い信頼度がある場合にのみ推測を行うことができる。採用された予測に対する信頼度が不十分であるか、不採用とされた予測に対する信頼度が高い場合、予測器は、分岐が解決されるまで、実行を停止する。これにより、機密コード領域への推測を阻止する。bpn(予測が不採用された場合のみの分岐:branch-only-predict-not-taken)の直交アプローチは、他の方向の予測をガードする可能性がある。
【0090】
マイクロ・アーキテクトには、これら分岐を取り扱うための多くの選択肢がある。通常の分岐予測器を使用して履歴の構築を続行できるが、その履歴を使用できるのは、許可された予測の方向に自信がある場合か、又は、これら分岐が、予測から完全に除外され得る場合のみである。第3の分岐の形態であり、予測されないbnv(branch-never-predict:予測されない分岐)もサポートされ得る。
【0091】
したがって、図5は、条件付き分岐命令のそのような一方向推測変数を処理する方法を示している。ステップ100において、処理パイプラインは、条件付き分岐命令の一方向推測変数に遭遇する。一方向推測変数は、様々な手法で識別できる。いくつかの場合では、フェッチ・ステージ6は、たとえば、命令を部分的に復号することによって、又は命令が命令キャッシュ8に割り当てられると、これら命令を分析するプリデコーダによって、命令に追加されたプリデコード情報にアクセスすることによって、条件付き分岐命令の一方向推測変数を直接識別できる場合がある。別の実例では、分岐命令が命令デコーダ10によって復号されるとき、分岐が、条件付き分岐命令の一方向推測変数として識別された場合、これは分岐予測器4に戻されて通知され得、分岐予測器4は、その後、所与の命令アドレスにおける命令が、一方向推測変数の条件付き分岐命令として検出される分岐予測状態の、対応するエントリを更新し得る。これにより、同じ命令の後続するフェッチ時に、命令自体が命令を復号する能力を持たない場合でも、フェッチ・ステージ6は、ストアされた分岐予測状態から、命令が一方向推測変数であることを識別できる。
【0092】
一方向推測変数に応答して、ステップ102において、分岐予測器4は、どの分岐結果が予測されるかを判定する。結果が、第1の結果である場合(それは、採用されたとの結果でも、不採用されたとの結果でもよい)、ステップ104において、分岐予測器4は、分岐に続いて実行される次の命令が、第1の命令であるべきであると予測する。第1の結果が、採用されたとの結果である場合、第1の命令は、分岐命令の分岐ターゲット・アドレスにおける命令である一方、第1の結果が、不採用されたとの結果である場合、第1の命令は、条件付き分岐から連続的に続く次の命令である。ステップ106において、制限推測的実行が、第1の命令に適用される。たとえば、第1の命令は、推測的に実行することを阻止されることも、又は、推測的に実行することを許可されることもあるが、推測的実行に基づいてキャッシュ構造への更新を制限することにより、攻撃者が、キャッシュ・タイミング・サイド・チャネル攻撃から、情報を導出することを阻止することができる。
【0093】
一方、ステップ102において、第2の結果(第2の結果は、第1の結果とは逆の結果である)が予測された場合、ステップ108において、次の命令が、第2の命令である(繰り返すが、第2の結果が不採用である場合、次の連続的な命令であり、又は、第2の結果が採用である場合、分岐ターゲット・アドレスにおける命令である)と予測される。ステップ110において、(第1の結果に対してステップ106において適用されるであろう)制限推測は、第2の命令には、代わりに省略され、その結果、第2の命令の推測的実行は、無制限に進むことができる。
【0094】
これによって、ここで説明する一方向分岐では、第2の結果が予測されるときに、推測を続行してパフォーマンスを向上させることができるが、第1の結果が、上記の形態の攻撃から保護すると予測される場合は、推測を制限する。いくつかの実施は、一方向分岐の単一の変数、たとえば、上記のbpt又はbpn(bptの場合、図5の第1の結果は、不採用されたとの結果であり、第2の結果は、採用されたとの結果であり、bpnの場合、第1の結果は、採用されたとの結果であり、第2の結果は、不採用されたとの結果である)のいずれかのみをサポートし得る。他の実施では、bptとbpnとの両方をサポートし得る。これにより、プログラマ又はコンパイラは、採用、又は不採用の結果にしたがって実行されるコードが、機密情報の損失に対して最も脆弱であるか否かに応じて、適切な変数を選択できる。また、いくつかのシステムでは、予測結果又は第1の結果又は第2の結果のいずれかであるかに関わらず、推測に対する制限が常に適用される無推測変数もサポートし得る。
【0095】
さらなる例は、以下の箇条書きに示される。
1.データ処理を実行する処理回路構成と、データ処理を実行するように処理回路構成を制御する命令を復号する命令復号回路構成とを備え、命令復号回路構成は、条件付き推測バリア命令に応答する、装置。
2.ターゲット・プログラム・コードの命令を実行する命令実行環境を提供するホスト処理装置を制御するコンピュータ・プログラムであって、データ処理を実行するように処理プログラム・ロジックを制御するターゲット・プログラム・コードの命令を復号する命令復号プログラム・ロジックを備え、命令復号プログラム・ロジックは、条件付き推測バリア命令に応答する、コンピュータ・プログラム。
3.条件付き推測バリア命令を復号することと、条件付き推測バリア命令の復号に応答して、処理回路構成を制御することとを備える、データ処理方法。
【0096】
図6は、使用できるシミュレータの実施を例示する。前述した実施例は、関連する技術をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点から本発明を実施するが、コンピュータ・プログラムの使用によって実施される、本明細書に記載された実施例にしたがって命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムは、しばしば、ハードウェア・アーキテクチャのソフトウェア・ベースの実施を提供する限り、シミュレータと呼ばれる。様々なシミュレータ・コンピュータ・プログラムは、エミュレータ、仮想マシン、モデル、及び、動的バイナリ変換器を含むバイナリ変換器を含む。通常、シミュレータによる実施は、ホスト・プロセッサ200で実行され、オプションでホスト・オペレーティング・システム210を実行して、シミュレータ・プログラム220をサポートする。いくつかの構成では、ハードウェアと、提供された命令実行環境との間にシミュレーションの多数の層が、及び/又は、同じホスト・プロセッサ上に提供された多数の異なる命令実行環境が存在する場合がある。歴史的に、強力なプロセッサは、妥当な速度で実行するシミュレータによる実施を提供する必要があったが、そのようなアプローチは、互換性や再利用の理由で別のプロセッサにネイティブなコードを実行したい場合など、特定の状況で正当化され得る。たとえば、シミュレータによる実施は、ホスト・プロセッサ・ハードウェアによってサポートされていない追加機能を備えた命令実行環境を提供したり、又は、通常は、異なるハードウェア・アーキテクチャに関連付けられた命令実行環境を提供できる。シミュレーションの概要は、非特許文献1に与えられる。
【0097】
特定のハードウェア構成又は特徴を参照して実施例が以前に説明されている限り、シミュレートされた実施例では、同等の機能が、適切なソフトウェア構成又は特徴によって提供され得る。たとえば、特定の回路構成は、シミュレーションされた実施例において、コンピュータ・プログラム・ロジックとして実施され得る。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアは、ソフトウェア・データ構造としてシミュレートされた実施例で実施され得る。前述の実施例で参照されたハードウェア要素の1つ又は複数が、ホスト・ハードウェア(たとえば、ホスト・プロセッサ200)上に存在する構成では、いくつかのシミュレートされた実施例は、適切な場合、ホスト・ハードウェアを活用し得る。
【0098】
シミュレータ・プログラム220は、コンピュータ可読記憶媒体(これは、非一時的媒体であり得る)上にストアされ得、プログラム・インターフェース(命令実行環境)を、シミュレータ・プログラム220によってモデル化されるハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同じであるターゲット・コード230(アプリケーション、オペレーティング・システム、及びハイパバイザを含む)に提供する。したがって、前述した条件付き分岐命令の推測バリア命令、ストア推測バリア命令、及び一方向推測形態を含むターゲット・コード230のプログラム命令は、シミュレータ・プログラム220を使用して命令実行環境内から実行することができ、そのため、上述した装置2のハードウェア特徴を実際には有していないホスト・コンピュータ200が、これらの特徴をエミュレートすることが可能となる。シミュレータ・プログラム220は、ターゲット・コード230の命令を復号し、ホスト・ハードウェア200によってサポートされたネイティブ命令セットからの1つ又は複数の命令を使用して実行される対応する機能にそれらをマップする命令復号プログラム・ロジック225を含み得る。
【0099】
本願では、「~ように構成された」という文言は、装置の要素が、定義された動作を実行できる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェア又はソフトウェアの相互接続の構成又は方式を意味する。たとえば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ又は他の処理デバイスが、機能を実行するようにプログラムされてもよい。「~ように構成された」は、定義された動作を提供するために装置要素を何らかの手法で変更する必要があることを意味するものではない。
【0100】
本発明の例示的な実施例を、添付図面を参照して本明細書で詳細に説明したが、本発明はそれら正確な実施例に限定されず、様々な変更及び修正が、添付の特許請求の範囲によって定義される本発明の範囲及び趣旨から逸脱することなく、当業者によって実施され得ることを理解されたい。
図1
図2
図3
図4
図5
図6