(57)【要約】  装置は、データ処理を実行する処理回路構成と、データ処理を実行するように処理回路構成を制御する命令を復号する命令復号回路構成とを備える。命令復号回路構成は、推測バリア命令に応答して、推測バリア命令後にプログラム順に現れ、推測バリア命令にプログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止するように、処理回路構成を制御する。これは、推測的キャッシュ・タイミング・サイド・チャネル攻撃に対する保護を提供する。
2021509743.tif 000002
【特許請求の範囲】
【請求項１】
データ処理を実行する処理回路構成と、
前記データ処理を実行するように前記処理回路構成を制御する命令を復号する命令復号回路構成と
を備え、
前記命令復号回路構成は、推測バリア命令に応答して、前記推測バリア命令後にプログラム順に現れ、前記推測バリア命令に前記プログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止するように、前記処理回路構成を制御する、装置。
【請求項２】
前記後続する動作は、ロード命令及びストア命令のうちの一方である、請求項１に記載の装置。
【請求項３】
前記前の命令は、ロード命令である、請求項１又は２に記載の装置。
【請求項４】
前記推測バリア命令が終了するまで、
条件付き選択命令の結果に対するアドレス依存性を有するロード、ストア、データ、又は命令プリロードＲＷ２が、前記推測バリア命令後にプログラム順に現れる場合、
前記条件付き選択命令は、入力レジスタの１つについて、推測的に実行されているロードＲ１に対するレジスタ・データ依存性を有し、
前記条件付き選択命令は、他の入力レジスタについて、Ｒ１に対するレジスタ依存性を有さず、
前記条件付き選択命令の条件は、Ｒ１が体系的に実行されていない場合に、Ｒ１に依存しない入力が選択されるのであれば、
前記処理回路構成は、ＲＷ２が、前記キャッシュ内のエントリの割当に影響を与えないように構成され、前記キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、Ｒ１から推測的にロードされた値の任意の部分の値を判定するために使用される、請求項１から３までのいずれか一項に記載の装置。
【請求項５】
前記推測バリア命令が終了するまで、
条件付き移動命令の結果に対するアドレス依存性を有するロード、ストア、データ、又は命令プリロードＲＷ２が、前記推測バリア命令後にプログラム順に現れる場合、
前記条件付き移動命令は、その入力レジスタについて、推測的に実行されているロードＲ１に対するレジスタ依存性を有さず、
前記条件付き移動命令の条件は、Ｒ１が体系的に実行されていない場合に、前記条件を満たすのであれば、
前記処理回路構成は、ＲＷ２が、前記キャッシュ内のエントリの割当に影響を与えないように構成され、前記キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、Ｒ１から推測的にロードされた値の任意の部分の値を判定するために使用される、請求項１から４までのいずれか一項に記載の装置。
【請求項６】
前記キャッシュは、
データ・キャッシュ、
命令キャッシュ、及び
分岐予測キャッシュのうちの１つである、請求項１から５までのいずれか一項に記載の装置。
【請求項７】
ターゲット・プログラム・コードの命令を実行する命令実行環境を提供するホスト処理装置を制御するコンピュータ・プログラムであって、
データ処理を実行するように処理プログラム・ロジックを制御する前記ターゲット・プログラム・コードの命令を復号する命令復号プログラム・ロジックを備え、
前記命令復号プログラム・ロジックは、推測バリア命令に応答して、前記推測バリア命令後にプログラム順に現れ、前記推測バリア命令に前記プログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止する、コンピュータ・プログラム。
【請求項８】
推測バリア命令を復号することと、
前記推測バリア命令の復号に応答して、前記推測バリア命令後にプログラム順に現れ、前記推測バリア命令に前記プログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止するように、処理回路構成を制御することと
を備える、データ処理方法。
【請求項９】
データ処理を実行する処理回路構成と、
前記データ処理を実行するように前記処理回路構成を制御する命令を復号する命令復号回路構成であって、条件付き分岐命令に応答して、前記条件付き分岐命令後の次の命令が第１の命令である第１の結果と、前記次の命令が第２の命令である第２の結果とのうちの一方を選択するように前記処理回路構成を制御するように構成された、命令復号回路構成と、
前記第１の結果又は前記第２の結果が、前記条件付き分岐命令のために選択されるべきであるか否かを予測する分岐予測回路構成と
を備え、
前記条件付き分岐命令の一方向推測変数に応答して、前記分岐予測回路構成及び前記命令復号回路構成のうちの少なくとも一方は、
前記分岐予測回路構成が、前記条件付き分岐命令の前記一方向推測変数について前記第１の結果を予測する場合、前記第１の命令のために、推測的実行における制限を適用し、
前記分岐予測回路構成が、前記条件付き分岐命令の前記一方向推測変数について前記第２の結果を予測する場合、前記第２の命令のために、推測的実行における前記制限の適用を省略する
ように前記処理回路構成を制御するように構成される、装置。
【請求項１０】
推測的実行における前記制限が、所与の命令のために適用される場合、推測的実行における前記制限は、前記所与の命令の推測的実行を阻止することを備える、請求項９に記載の装置。
【請求項１１】
推測的実行における前記制限が、所与の命令のために適用される場合、推測的実行における前記制限は、前記所与の命令の推測的実行に応答して、実行されたキャッシングに制限を適用することを備える、請求項９又は１０に記載の装置。
【請求項１２】
前記第１の結果は、採用されたとの結果を備え、前記第２の結果は、不採用されたとの結果を備える、請求項９から１１までのいずれか一項に記載の装置。
【請求項１３】
前記第１の結果は、不採用されたとの結果を備え、前記第２の結果は、採用されたとの結果を備える、請求項９から１１までのいずれか一項に記載の装置。
【請求項１４】
前記分岐予測回路構成は、以前の条件付き分岐命令の結果に基づいてトレーニングされた分岐予測状態情報に基づいて、前記第１の結果又は前記第２の結果が選択されるべきであるかを予測するように構成される、請求項９から１３までのいずれか一項に記載の装置。
【請求項１５】
前記分岐予測回路構成は、前記分岐予測状態情報のトレーニングから、前記条件付き分岐命令の前記一方向推測変数を除外するように構成される、請求項１４に記載の装置。
【請求項１６】
前記第２の結果が、採用されたとの結果である前記条件付き分岐命令の一方向推測変数について、前記分岐予測回路構成は、前記採用されたとの結果が予測されるべきであることを指定する分岐予測状態情報の少なくとも１つのアイテムを割り当てるが、前記条件付き分岐命令の前記一方向推測変数の実際の結果に基づいて、分岐予測状態情報の前記少なくとも１つのアイテムが、トレーニングされることを阻止するように構成される、請求項１５に記載の装置。
【請求項１７】
前記分岐予測回路構成は、前記条件付き分岐命令の前記一方向推測変数の実際の結果に基づいて、前記分岐予測状態情報をトレーニングするように構成される、請求項１４から１６までのいずれか一項に記載の装置。
【請求項１８】
前記条件付き分岐命令の推測制限変数に応答して、前記分岐予測回路構成及び前記命令復号回路構成のうちの少なくとも一方は、前記第１の結果又は前記第２の結果が選択されたかに関わらず、前記条件付き分岐命令の前記推測制限変数に続く次の命令のために、推測的実行における前記制限を適用するように、前記処理回路構成を制御ように構成される、請求項９から１６までのいずれかに記載の装置。
【請求項１９】
条件付き分岐命令に応答して、前記条件付き分岐命令後の次の命令が第１の命令である第１の結果と、前記次の命令が第２の命令である第２の結果とのうちの一方を選択することと、
前記第１の結果又は前記第２の結果が、前記条件付き分岐命令のために選択されるべきであるか否かを予測することと、
前記条件付き分岐命令が、前記条件付き分岐命令の一方向推測変数である場合、
前記第１の結果が、前記条件付き分岐命令の前記一方向推測変数のために予測される場合、前記第１の命令へ、推測的実行における制限を適用することと、
前記第２の結果が、前記条件付き分岐命令の前記一方向推測変数のために予測される場合、前記第２の命令へ、推測的実行における前記制限を適用することを省略することと
を備える、データ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ処理の分野に関する。
【背景技術】
【０００２】
データ処理装置は、命令の入力オペランドが正しいか、又は命令を実行する必要が少しでもあるかが分かる前に命令が実行される命令の推測的実行をサポートし得る。たとえば、処理装置は、分岐の実際の結果が何であるかが分かる前に、後続する命令を推測的にフェッチ、復号、及び実行できるように、分岐命令の結果を予測する分岐予測器を有し得る。また、いくつかのシステムは、実際の値が実際にメモリから返される前にメモリからロードされた値が予測されるロード推測をサポートし、後続する命令を、より高速に処理できるようにする。他の推測の形態も可能である。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】“Some Efficient Architecture Simulation Techniques”, Robert Bedichek, Winter 1990 USENIX Conference, Pages 53 - 63
【発明の概要】
【課題を解決するための手段】
【０００４】
少なくともいくつかの実例は、データ処理を実行する処理回路構成と、データ処理を実行するように処理回路構成を制御する命令を復号する命令復号回路構成とを備える装置を提供し、命令復号回路構成は、推測バリア命令に応答して、推測バリア命令後にプログラム順に現れ、推測バリア命令にプログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止するように、処理回路構成を制御する。
【０００５】
少なくともいくつかの実例は、ターゲット・プログラム・コードの命令を実行する命令実行環境を提供するホスト処理装置を制御するコンピュータ・プログラムを提供し、コンピュータ・プログラムは、ターゲット・プログラム・コードの命令を復号して、データ処理を実行する処理プログラム・ロジックを制御する命令復号プログラム・ロジックを備え、命令復号プログラム・ロジックは、推測バリア命令に応答して、推測バリア命令後にプログラム順に現れ、推測バリア命令にプログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止する。
【０００６】
少なくともいくつかの実例は、推測バリア命令を復号することと、推測バリア命令の復号に応答して、推測バリア命令後にプログラム順に現れ、推測バリア命令にプログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止するように、処理回路構成を制御することとを備える、データ処理方法を提供する。
【０００７】
少なくともいくつかの実例は、データ処理を実行する処理回路構成と、データ処理を実行するように処理回路構成を制御する命令を復号する命令復号回路構成であって、条件付き分岐命令に応答して、条件付き分岐命令後の次の命令が、第１の命令である第１の結果と、次の命令が第２の命令である第２の結果とのうちの一方を選択するように処理回路構成を制御するように構成された、命令復号回路構成と、第１の結果又は第２の結果が、条件付き分岐命令のために選択されるべきであるか否かを予測する分岐予測回路構成とを備える装置を提供し、ここでは、条件付き分岐命令の一方向推測変数に応答して、分岐予測回路構成及び命令復号回路構成のうちの少なくとも一方は、分岐予測回路構成が、条件付き分岐命令の一方向推測変数について第１の結果を予測する場合、第１の命令のために、推測的実行における制限を適用し、分岐予測回路構成が、条件付き分岐命令の一方向推測変数について第２の結果を予測する場合、第２の命令のために、推測的実行における前記制限の適用を省略するように、処理回路構成を制御するように構成される。
【０００８】
少なくともいくつかの実例は、条件付き分岐命令に応答して、条件付き分岐命令後の次の命令が第１の命令である第１の結果と、次の命令が第２の命令である第２の結果とのうちの一方を選択することと、第１の結果又は第２の結果が、条件付き分岐命令のために選択されるべきであるか否かを予測することと、条件付き分岐命令が、条件付き分岐命令の一方向推測変数である場合、第１の結果が、条件付き分岐命令の一方向推測変数のために予測される場合、第１の命令へ、推測的実行における制限を適用することと、第２の結果が、条件付き分岐命令の一方向推測変数のために予測される場合、第２の命令へ、推測的実行における前記制限の適用を省略することとを備える、データ処理方法を提供する。
【０００９】
本技術のさらなる態様、特徴、及び利点は、添付の図面と連携して読まれるべき、以下の実例の説明から明らかになるであろう。
【図面の簡単な説明】
【００１０】
【図１】推測的実行命令をサポートするデータ処理装置の実例を概略的に例示する図である。
【図２】推測ベースのキャッシュ・ベースのタイミング・サイド・チャネルに基づく潜在的な攻撃の実例を概略的に例示する図である。
【図３】推測バリア命令を処理する方法を示す図である。
【図４】ストア推測バリア命令を処理する方法を示す図である。
【図５】条件付き分岐命令の一方向推測変数を処理する方法を例示する図である。
【図６】使用され得るシミュレータの実例を例示する図である。
【発明を実施するための形態】
【００１１】
データ処理装置は、メモリ内のいくつかのデータが、処理回路構成上で実行される特定の処理によってアクセスできないことを保証するためのメカニズムを有し得る。たとえば、権限ベースのメカニズム及び／又はメモリ保護属性を使用して、メモリの特定の領域へのアクセスを制御し得る。最近、推測的実行とキャッシングを使用するシステムでは、悪意のある人物が、推測的に実行された命令の体系的な効果が、誤った推測後に取り消された後でも、推測的に実行された命令の効果が、データ・キャッシュに残る場合があるという特性を悪用して、アクセスを有さないメモリの領域から、情報を取得する可能性があることが認識されている。このような攻撃は、分岐予測器や他の推測メカニズムをトレーニングして、より高い権限のコードを欺いて、この権限のコードが、機密情報に依存するメモリ・アドレスのパターンにアクセスできるように設計された命令のシーケンスを推測的に実行し、これによって、この機密情報へのアクセスを有さない、より低い権限のコードが、キャッシュ・タイミング・サイド・チャネルを使って、より高い権限のコードによって、キャッシュへどのアドレスが割り当てられているのか、又は、キャッシュからどのアドレスが削除されているのかを調べ、機密情報を推定できるいくつかの情報を与えることが可能となる。このような攻撃は、推測的サイド・チャネル攻撃と呼ばれ得る。
【００１２】
以下により詳細に説明するように、データ処理装置の命令復号回路構成は、推測バリア命令をサポートし得る。推測バリア命令に応答して、命令復号回路構成は、推測バリア命令後にプログラム順に現れ、推測バリア命令にプログラム順に先行する前の命令に対するアドレス依存性を有する後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止するように処理回路構成を制御し得る。これは、上記のタイプの攻撃に対する保護を提供する。たとえば、機密情報へのアクセスが許可されているコンパイラ生成コードのプログラマは、信頼できないコードによって提供された値からアドレスが導出される前のロード命令と、前のロード命令によってロードされた値に基づいてアドレスが計算される後のロード命令との間に、推測バリアを含めることができる。バリアを含めることで、後のロード命令が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止し、信頼できないコードにアクセスできない機密情報に関する情報を、キャッシュ・タイミング・チャネルを使用して判定できるようにする。したがって、推測バリア命令のサポートを提供することにより、セキュリティを向上させることができる。
【００１３】
キャッシュ内のエントリの割当の推測的な影響が阻止される、推測バリア命令に続く後続する動作は、ロード命令及びストア命令のうちの一方であり得る。（そのロード命令又はストア命令がアドレス依存性を有する）前の命令は、ロード命令であり得る。
【００１４】
１つの実例では、推測バリア命令が終了するまで、
・条件付き選択命令の結果に対するアドレス依存性を有するロード、ストア、データ、又は命令プリロードＲＷ２が、推測バリア命令後にプログラム順に現れる場合、
○条件付き選択命令は、入力レジスタの１つについて、推測的に実行されたロードＲ１に対するレジスタ・データ依存性を有し、
〇条件付き選択命令は、他の入力レジスタについて、Ｒ１に対するレジスタ依存性を有さず、
〇条件付き選択命令の条件は、Ｒ１が体系的に実行されていない場合に、Ｒ１に依存しない入力が選択されるのであれば、
処理回路構成は、ＲＷ２が、キャッシュ内のエントリの割当に影響を与えないように構成され、キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、Ｒ１から推測的にロードされた値の任意の部分の値を判定するために使用される。これにより、攻撃者は、後続する動作ＲＷ２のキャッシュへの効果を分析することにより、ロードＲ１によって推測的にロードされた値に関する任意の情報を導出できなくなる。
【００１５】
別の実例では、推測バリア命令が終了するまで、
・条件付き移動命令の結果に対するアドレス依存性を有するロード、ストア、データ、又は命令プリロードＲＷ２が、推測バリア命令後にプログラム順に現れる場合、
○条件付き移動命令は、その入力レジスタについて、推測的に実行されたロードＲ１に対するレジスタ依存性を有さず、
〇条件付き移動命令の条件は、Ｒ１が体系的に実行されていない場合に、条件を満たすのであれば、
処理回路構成は、ＲＷ２が、キャッシュ内のエントリの割当に影響を与えないように構成され、キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、Ｒ１から推測的にロードされた値の任意の部分の値を判定するために使用される。繰り返すが、これにより、攻撃者が、ロードＲ１の不正な推測を悪用して、キャッシュ割当における後続する動作ＲＷ２の効果の分析に基づいて、Ｒ１によってロードされた値に関する情報を取得することを阻止する。
【００１６】
推測バリア命令後の後続する動作によるエントリの割当の推測的な影響が阻止されるキャッシュは、データ・キャッシュ、命令キャッシュ、及び分岐予測キャッシュのいずれでもよい。キャッシュの他の実例は、値予測器キャッシュ、ロード／ストア・エイリアシング予測器キャッシュ、及び他の予測構造を含むことができる。
【００１７】
処理回路構成では、推測バリア命令に続く後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止できる様々な手法があり得る。１つの実例では、これは、少なくとも推測バリア命令が終了するまで、後続する動作の推測的実行を阻止することによって阻止され得る。推測バリア命令は、プログラム順に先行する命令が解決されると、終了したと見なすことができる。いくつかの実例では、推測バリア命令が終了すると、後続する動作の推測的実行が許可される可能性がある（ただし、推測は、推測バリア命令に続く動作に関連付けられた予測に基づく）。
他の実例では、処理回路構成は、後続する動作の推測的実行を許可している間、後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止し得る。キャッシュ内のエントリの割当に対する影響は、キャッシュを割り当てるエントリを事前に有していなかった所与のアドレスに対する新たなエントリの割当、又は、所与のアドレスがもはやキャッシュされないように、所与のアドレスに関連付けられた、事前にキャッシュされたエントリの削除であり得る。
【００１８】
たとえば、推測的実行自体を阻止するのではなく、キャッシュに対するその推測的実行の効果が阻止され得る。たとえば、いくつかの実施では、推測バリア命令に先行する命令の結果の推測的予測に基づいて実行され、推測バリア命令がまだ終了していないのであれば、バリア命令に続く推測的に実行される動作が、データをまったくキャッシュしないように選択できる。
【００１９】
或いは、推測バリア命令が終了するまで、後続する動作によって推測的にロードされたあらゆるデータが、推測的バッファに保持され、推測が解決されて、推測バリア命令が終了するまで、メイン・キャッシュに割り当てられない。たとえば、推測的バッファは、メイン・キャッシュの任意のキャッシュ手法と共に追加のキャッシュ手法として探索され得るバッファであり得るが、推測バッファの内容は、特定の権限レベルの遷移（たとえば、より低い権限状態への遷移）において廃棄され、これにより、より低い権限のコードは、まだ正しいと解決されていない場合、推測的にロードされたデータにアクセスできなくなる。このアプローチは、メイン・キャッシュ領域が、推測的にロードされた値で汚染されることを阻止し（そして、推測的にロードされた値の割当により、メイン・キャッシュからの他の値の削除を阻止し）、より低い権限状態への遷移が続いた場合、より低い権限のコードは、キャッシュ・タイミング・サイド・チャネルを使用して、キャッシュされた値に関する情報を推測することはできない。
【００２０】
１つの実例では、推測バリア命令に応答して、命令復号回路構成は、前の命令のデータ値予測と、前の命令が、条件付き分岐命令以外の命令である場合、前の命令の条件コード予測と、前の命令が、ベクトル値のどのデータ要素が、処理されるべきアクティブな要素であるのかを示す属性情報に依存するベクトル命令である場合、その属性情報の予測とのうち、少なくとも一方を使用して、後続する命令が推測的に実行されることを阻止するように処理回路構成を制御し得る。後続する命令が、推測バリア命令に先行する命令に対して行われたデータ値予測、条件コード予測、又は属性予測の結果を、推測的に使用できないようにすることによって、攻撃者が利用できる手段を減らすことができる。
【００２１】
１つの実例では、処理回路構成は、推測バリア命令ベースに続く命令の制御フローの推測的制御を許可し、推測バリア命令に先行する体系的に未解決の前の命令に関連付けられた予測を行い得る。したがって、推測バリア命令の前後のフロー推測の制御は、依然として許可される可能性がある。バリア後に推測的に実行された命令に応答して、キャッシングの効果を抑制することで、前述の攻撃を十分軽減し得るので、推測的制御フローを許可することが可能である。バリアの前後の制御フローの推測的制御を有効化することによって、パフォーマンスを向上させることができる。同様に、いくつかの実例では、前の命令がまだ体系的に解決されていない場合、推測バリア命令に先行する前の命令のデータ値予測又は条件コード予測の結果を一度にプログラム順に使用しないのであれば、推測バリア命令に続く条件付き命令の推測的実行が許可され得る。
【００２２】
いくつかのデータ処理装置における推測の別の形態は、ロード命令又はストア命令のアドレスを推測することであり得る。ロード命令又はストア命令のアドレスは、前の命令によって計算され得るレジスタからの値に基づくアドレス計算に依存し得る。ロードのアドレスがまだ不明であるロード命令がストア命令後に続く場合、ロード命令のアドレスが実際に、前のストア命令のアドレスと同じになる可能性があるというリスクがあり得るが、これは、ロードのアドレスが前のストアのアドレスと異なる場合よりも少なくなり得る。ストア値が依存する前の命令の結果を待つことで、ストア命令の実行が遅れる可能性がある。ロードが実際にストアと同じアドレスにアクセスするか否かは、ロード命令が実行されるまで不明であり得る。処理回路構成が、実行のためにロード命令を発行する前に、ストア命令の終了を待っていたのであれば、ロード・アドレスが実際にストア・アドレスと異なることが判明した場合に、不要な遅延を引き起こす可能性がある。
【００２３】
したがって、ロード命令を推測的に早く（前のストアをバイパスして）発行することで、ロード命令のアドレスが実際に、ストア命令のアドレスと異なることが判明した場合、ロードが、前のストア命令からの値を待って不必要に遅延しないため、パフォーマンスが向上する。しかしながら、ロード・アドレスが、実際に、前のストア・アドレスと同じであることが判明した場合、ロード命令は、ストア命令が実行される前に、ストア命令の実行から得られる値とは異なるターゲット・アドレスにストアされた古い値をロードし得るので、この推測的実行により、誤った値がロードされる可能性がある。
【００２４】
いくつかのシナリオでは、攻撃者は、機密情報へのアクセスの取得を試みるために、ロードによって、前のストアのこの推測的バイパスを、悪用する可能性がある。このような攻撃を軽減するために、ストア推測バリア命令が提供され得る。ストア推測バリア命令に応答して、命令復号回路構成は、プログラム順にストア推測バリア命令に先行する前のストア命令が、プログラム順にストア推測バリア命令に続き、前のストア命令と同じアドレスを指定する、後続するロード命令の推測的実行によってバイパスされるのを阻止し得る。ストア推測バリア命令は、上記で考察された推測バリア命令とは異なる命令エンコーディングを有し得る。したがって、ストア推測バリア命令のサポートにより、セキュリティが向上する。
【００２５】
ストア推測バリア命令の様々な変数が提供され得る。ストア推測バリア命令の第１の変数の場合、後続するロード命令は、前のストア命令と同じ仮想アドレスを指定するものであり得る。第２の変数の場合、後続するロード命令は、前のストア命令と同じ物理アドレスを指定するものであり得る。第２の変数の提供は、たとえば、オペレーティング・システムに出入りするときに、キャッシュ・タイミング・サイド・チャネル・メカニズムを使用して、推測的ロードが悪用されるのを阻止するのに役立つ。
【００２６】
ストア推測バリア命令に応答して、命令復号回路構成はまた、プログラム順にストア推測バリア命令に続き、前のロード命令と同じアドレスを指定する後続するストア命令から得られるデータを、プログラム順に推測的にロードする、ストア推測バリア命令に先行する前のロード命令を阻止し得る。これは、ストアが別のアドレスを有することを前提として、推測バリア命令に続くストアが、前のロードに先行して実行されるという逆のシナリオの悪用を試みる攻撃から保護するが、後に、前のロードと同じアドレスに実際にストアすることが判明し、この場合、ストアの推測的実行により、前のロードによって誤った値がロードされる可能性がある。ストア推測バリア命令は、攻撃者が、キャッシュ・タイミング・サイド・チャネルを使用して、このような誤った推測によって引き起こされたキャッシュ割当における変更を調査することを回避できるため、セキュリティが向上する。
【００２７】
推測的実行を引き起こし得る１つのタイプの命令は、条件付き分岐命令であり得、それに応答して、命令デコーダは、条件付き分岐命令後の次の命令として第１の命令が選択される第１の結果、又は、条件付き分岐命令後の次の命令として第２の命令が選択される第２の結果のいずれかを選択するように、処理回路構成を制御し得る。たとえば、第１の結果及び第２の結果のうちの一方は、条件付き分岐命令が採用されたとの結果であり得、他方は、不採用されたとの結果であり得る。実際の結果が分かる前に、条件付き分岐命令に対して第１の結果又は第２の結果を選択する必要があるか否かを予測するために、分岐予測回路構成が提供され得る。後続する命令は、その後、分岐予測に基づいて推測的に実行され得る。
【００２８】
１つの実例では、条件付き分岐命令の一方向推測変数が提供され得、それに応答して、分岐予測回路構成及び命令復号回路構成のうちの少なくとも一方は、分岐予測回路構成が、条件付き分岐命令の一方向推測変数の第１の結果を予測する場合、処理回路構成を制御して、第１の命令について推測的実行に対する制限を適用し得る一方、分岐予測回路構成が、条件付き分岐命令の一方向推測変数のための第２の結果を予測する場合、推測的実行に対する制限は、第２の命令について省略され得る。
【００２９】
したがって、推測的実行は、分岐予測器が、条件付き分岐について、１つの結果を予測するときの方が、他の結果を予測するときよりも、より制限され得る。これは、前述したタイプの推測ベースのキャッシュ・タイミング・サイド・チャネル攻撃から保護するのに役立ち得る。たとえば、条件付き分岐が、信頼できない可能性のあるコードから渡された値が許容範囲内にあるか否か、又は信頼できない可能性のあるコードによって提供されたパスワードが正しいか否かをチェックする場合、採用されたとの結果と、不採用されたとの結果のうちの一方は、潜在的な機密情報の処理を続行するように設計され得るが、他の結果は、その機密情報にアクセスするリスクがない可能性がある。したがって、通常、条件付き分岐の結果のうち、どちらが他方よりも攻撃のリスクにさらされる可能性が高いかを、プログラマ又はコンパイラは知ることができる。条件付き分岐命令の一方向推測変数を提供することにより、予測された分岐結果に対する推測的実行の制限が他方よりも少なくなるため、第２の結果が予測されたときに推測的実行を許可することにより、プロセッサのパフォーマンスを向上させることができるが、第１の結果が予測されたときに推測的実行を制限することにより、セキュリティを向上させる。
【００３０】
条件付き分岐について第１の結果が予測される場合に、推測的実行を制限する多くの手法が存在し得る。１つの実例では、条件付き分岐に続く所与の命令の推測的実行は、（少なくとも予測が正しいものとして解決されるまで）完全に阻止され得る。或いは、推測における制限により、後続する命令を推測的に実行することもできるが、（再度、少なくとも予測が正しいものとして解決されるまで）分岐後の後続する命令に適用されるキャッシングに制限が含まれる可能性がある。たとえば、条件付き分岐の第１の結果の予測に続いて推測的に実行される命令に応答して、キャッシングが禁止され得るか、又は、上記の実例のようにメイン・キャッシュから分離された別個の推測的バッファにではあるが、キャッシングが有効化され得る。
【００３１】
一般に、条件付き分岐命令の一方向推測変数は、多くの手法で条件付き分岐命令の従来の双方向推測変数と区別され得る（そのために、推測的実行が制限されず、それにも関わらず、第１の結果又は第２の結果が、分岐予測器によって予測される）。１つの実例では、一方向推測変数は、異なる命令エンコーディング（たとえば、異なる命令オペコード、又は異なる変数を区別する命令エンコーディング内のフィールド）を有し得る。或いは、条件付き分岐命令の一方向推測変数及び双方向推測変数は、同じエンコーディングを有することができるが、データ処理装置の制御レジスタにストアされた制御パラメータは、そのような条件付き分岐命令に遭遇した場合に、どの変数を使用するかを指定し得る。
【００３２】
また、一方向推測変数自体の多くの代替変数が存在し得る。たとえば、第１の変数の場合、第１の結果は、採用されたとの結果を備え得、第２の結果は、不採用されたとの結果を備え得る。第２の変数の場合、第１の結果と、第２の結果とは、逆であり得るため、第１の結果は、不採用されたとの結果を備え得る一方、第２の結果は、第２の結果を備え得る。繰り返すが、これら変数は、異なる命令エンコーディングによって、又は、制御レジスタ内のパラメータによって区別できる。したがって、第１の変数の場合は採用されたとの結果に、又は、第２の変数の場合は不採用されたとの結果に、推測的実行における制限を適用できる様々な変数を提供することにより、これは、採用されたとの結果、又は不採用されたとの結果が、推測的キャッシュ・タイミング・サイド・チャネルによる攻撃に対してより脆弱であるか否かに応じて、プログラマ又はコンパイラが、使用すべき変数を選択する柔軟性を与える。
【００３３】
処理装置のマイクロ・アーキテクチャは、第１の結果が、条件付き分岐命令の一方向推測変数に対して予測されるが、第２の結果が予測されないときに、推測的実行における制限が適用されることを保証し得る多くの手法が存在し得る。
【００３４】
１つの実例では、分岐予測回路構成は、以前の条件付き分岐命令の結果に基づいてトレーニングされた分岐予測状態情報に基づいてその予測を行い得、条件付き分岐命令の一方向推測変数を、分岐予測状態情報のトレーニングから除外し得る。一方向変数を分岐予測状態のトレーニングから除外することで、これは分岐予測器が、一方向変数の実際の結果を学習するのを阻止するので、一方向変数の予測が、たとえば、一方向変数についてストアされた分岐予測状態を含めないか、又は、実際の分岐結果に基づいてトレーニングされずに、一方向分岐の第２の結果を予測するようにデフォルト設定する分岐予測状態のエントリを含めることによって、推測がそれほど制限されない第２の結果に偏る可能性がある。
【００３５】
たとえば、いくつかの分岐予測器では、ストアされた分岐予測状態が存在しないどの命令の予測も、不採用との結果とデフォルト設定し得る。この場合、一方向推測条件付き分岐命令の第１の変数の場合（第１の結果が採用であり、第２の結果が不採用である場合）、分岐予測器は、分岐予測状態がストアされていない命令の第２の結果（不採用）を予測するようにデフォルト設定し得るので、第１の結果に基づいて命令を推測的に実行することが不可能であることを保証するために、一方向推測分岐のために分岐予測状態情報を割り当てない可能性がある。対照的に、第２の変数の場合（推測が制限される第１の結果が、不採用との結果となる場合）、第１の結果に基づく推測がないことを保証するために、デフォルト予測として第２の（採用された）結果を指定するエントリが分岐予測回路に割り当てられ得、これは、その後、一方向分岐の実際の分岐結果が第１の結果であっても（一方向分岐の実際の結果に基づくトレーニングがないため）、第２の結果を予測し続ける。
【００３６】
マイクロ・アーキテクチャにおける条件付き分岐命令の一方向推測変数の第１の結果の推測を制限する別の手法は、分岐予測器が、一方向推測制御がない条件付き分岐と同様に、条件付き分岐命令の一方向推測変数の実際の結果に基づいて、その分岐予測状態情報を引き続きトレーニングし得るが、その後、分岐予測器によってどの予測が出力されるのかに基づいて、処理パイプラインは、その後、推測が許可されるか否か、又は、推測が許可される場合、キャッシングに制限があるか否かを制御し得る。したがって、このマイクロ・アーキテクチャ・アプローチを用いて、分岐予測器は、他の双方向推測の条件付き分岐と同様の一方向推測変数に基づいて分岐予測状態をトレーニングし得るが、一方向推測変数に対して予測される結果に基づいて、推測するか否かのフィルタリングが適用され得る。
【００３７】
これらマイクロ・アーキテクチャ・アプローチの両方は、条件付き分岐命令の一方向推測変数の体系的な定義内にあり、そのために、第１の結果が予測されるときに推測に制限が適用されるが、第２の結果が予測されるときに省略されることが理解されるであろう。
【００３８】
それに加えて、いくつかの実例では、命令デコーダは、条件付き分岐命令の推測制限変数をサポートすることもでき、そのために、第１の結果又は第２の結果のどちらが分岐予測回路構成によって選択されるかに関わらず、分岐後の次の命令に、推測的実行に制限が適用される。これは、プログラム・フローの両方の分岐が、潜在的な推測ベースのキャッシュ・タイミング・サイド・チャネル攻撃のリスクがあると見なされる場合に役立ち、そのため、この特定の分岐では、パイプラインは、その命令に対して行われた予測に推測的に作用しないか、或いは、推測的実行が許可されている場合、推測が第１の結果又は第２の結果のどちらに基づいていても、条件付き分岐命令に関連付けられた条件が解決されるまで、そのような状態実行命令のキャッシングの効果を制限できる。
【００３９】
したがって、上記の技術は、潜在的なサイド・チャネル攻撃に対する堅牢性を提供するのに役立つ。
【００４０】
図１は、いくつかのパイプライン・ステージを備える処理パイプラインを有するデータ処理装置２の実例を概略的に例示する図である。パイプラインは、分岐命令の結果を予測するための分岐予測器４を含む。フェッチ・ステージ６は、分岐予測器４によって行われた予測に基づいて一連のフェッチ・アドレスを生成する。フェッチ・ステージ６は、フェッチ・アドレスによって識別された命令を、命令キャッシュ８からフェッチする。復号ステージ１０は、フェッチされた命令を復号して、パイプラインの後続するステージを制御するための制御情報を生成する。名前変更ステージ１２は、レジスタの名前変更を実行して、命令によって識別されたアーキテクチャ・レジスタ指定子を、ハードウェアで提供されるレジスタ１４を識別する物理レジスタ指定子にマップする。レジスタの名前変更は、順不同の実行をサポートするのに役立ち、これにより、同じアーキテクチャ・レジスタを指定する命令間のハザードを、ハードウェア・レジスタ・ファイル内の異なる物理レジスタにマップすることにより排除し、命令がキャッシュ８からフェッチされたプログラム順とは異なる順序で実行される可能性を高め、これにより、前の命令が、オペランドが利用可能になるのを待っている間に、後の命令の実行を可能にすることによって、パフォーマンスを向上させ得る。アーキテクチャ・レジスタを別の物理レジスタにマップする機能により、分岐誤予測が発生した場合の体系的状態のロール・バックも容易になる。発行ステージ１６は、命令を処理するために必要なオペランドがレジスタ１４で利用可能になるまで、実行を待つ命令をキューに入れる。実行ステージ１８は、対応する処理動作を実行するための命令を実行する。書き戻しステージ２０は、実行された命令の結果をレジスタ１４に書き戻す。
【００４１】
実行ステージ１８は、分岐命令が正しく予測されたか否かを評価する分岐ユニット２１、算術演算又は論理演算を実行するＡＬＵ（算術論理ユニット：arithmetic logic unit）２２、浮動小数点オペランドを使用して演算を実行する浮動小数点ユニット２４、単一の命令に応答して多数の独立したデータ要素が処理されるベクトル演算を処理するためのベクトル処理ユニット２５、及びメモリ・システムからレジスタ１４にデータをロードするロード動作、又はレジスタ１４からメモリ・システムにデータをストアするストア動作を実行するロード／ストア・ユニット２６などのいくつかの実行ユニットを含むことができる。この実例では、メモリ・システムは、レベル１の命令キャッシュ８、レベル１のデータ・キャッシュ３０、データと命令との間で共有されるレベル２のキャッシュ３２、及びメイン・メモリ３４を含むが、これは、可能なメモリ階層の単なる１つの実例であり、他の実施は、さらなるレベルのキャッシュ、又は異なる構成を有し得ることが理解されよう。メモリへのアクセスは、アドレス変換及び／又はメモリ保護を制御するために、メモリ管理ユニット（ＭＭＵ：memory management unit）３５を使用して制御することができる。ロード／ストア・ユニット２６は、ＭＭＵ３５の変換ルックアサイド・バッファ（ＴＬＢ：translation lookaside buffer）３６を使用して、パイプラインによって生成された仮想アドレスを、メモリ・システム内の場所を識別する物理アドレスにマップすることができる。図１に示されるパイプラインは単なる１つの実例であり、他の実例は、異なるセットのパイプライン・ステージ又は実行ユニットを有し得ることが理解されよう。たとえば、順序付きプロセッサには、名前変更ステージ１２がない場合がある。
【００４２】
分岐予測器４は、条件付き分岐命令の分岐結果の予測、及び／又は、間接的分岐命令のターゲット・アドレスの予測に基づいて、それらが本当に必要か否かが分かる前に、データ処理動作を推測的に実行するために、データ処理装置によって使用され得る推測メカニズムの１つの実例である。実行ステージを制御して、その命令に関連付けられた情報の予測（分岐予測以外）に基づいて命令を推測的に実行するために、実行ユニット１８に関連付けられた推測制御回路構成４０も存在し得る。
【００４３】
たとえば、条件付き命令は、実行ステージ１８を制御して、レジスタ１４にストアされている条件ステータス・コード４２の値を条件とする条件付き処理動作を実行し得る。いくつかの条件設定命令では、命令の結果に基づいて、条件ステータス・コード４２が更新される場合があり得る。たとえば、ＡＬＵ２２によって処理された算術命令は、条件コード４２を更新して、算術演算の結果がゼロであったか否か、結果が負であったか否か、又は、演算が符号付きオーバフロー又は符号なしオーバフローを生成したか否か、のような結果の特性を示すことができる。その後、後続する条件付き命令は、条件ステータス・コード４２の現在の値が、いくつかのテスト条件を満たすか否かをテストし得る。体系的な観点から、コードがテスト条件を満たしている場合は、関連付けられた処理動作（算術演算や論理演算など）が実行され得るが、条件ステータス・コード４２がテスト条件を満たしていない場合は、その条件付き動作が実行されない可能性があり、代わりに、命令は、体系的な効果がない、無動作命令として取り扱われる場合がある。しかしながら、マイクロ・アーキテクチャでは、推測制御回路構成４０は、実際の条件コードが分かる前に、条件ステータス・コード４２の予測に基づいて、条件付き命令に関連付けられた処理動作を推測的に実行して、条件コードを変更する可能性がある前の命令が終了するのを待つことを避けることができる。予測が正しくないことが判明した場合、推測的に実行された命令の結果が破棄され、プログラム・フローを、最後の正しい実行ポイントに巻き戻すことができる。
【００４４】
推測制御回路構成４０によって実行され得る別の形態の推測は、ベクトル処理ユニット２５によって実行されるベクトル導入に関連付けられた述語値４４の予測であり得る。ＳＩＭＤ（単一命令複数データ：single instruction multiple data）命令としても知られているベクトル命令は、同じレジスタ内にストアされている複数のデータ要素を演算できる。たとえば、ベクトル加算命令は、ベクトル処理ユニットをトリガして、複数の加算演算を実行し得、これら加算演算のおのおのは、２つのベクトル・レジスタの対応する位置にそれぞれのデータ要素のペアを加算し、結果ベクトル・レジスタへ書き込まれる対応する結果要素を生成する。これにより、１つの命令に応答して、複数の独立した追加を実行できる。ベクトル命令は、ベクトル命令を含むベクトル化された命令のループが、ベクトル処理ユニット２５によって実行される単一の反復に応答して、スカラ・ループの複数の反復を処理できるようにすることで、処理命令のスカラ・ループをより速く処理できるようにするのに役立ち得る。
【００４５】
ベクトル化された命令のシーケンス内に、条件付き機能を含めることが望ましい場合があり、これにより、ベクトルの１つの要素が特定の条件を満たさない場合、それ以外の場合はその要素に対して実行される後続する動作は実行されないが、必要な条件を満たしていれば、同じベクトル内で他の要素がまだ処理される可能性がある。また、スカラ・ループをベクトル化する場合、スカラ・ループの反復回数は、ベクトルで提供される要素数の正確な倍数にマップされない場合があり、この場合、最後のベクトル・ループ反復でベクトルを完全に埋めるのに十分なスカラ反復がないため、ベクトルのいくつかの要素を処理する必要がないループ・テール反復がある場合がある。したがって、ベクトルのどの要素がアクティブな要素であるかを指定する述語値４４を定義することが役立ち得る。結果ベクトルの非アクティブな要素はゼロにクリアされ得るか、又は命令を実行する前に宛先レジスタのそれら部分にストアされた以前の値を保持することができる。
【００４６】
したがって、述語値４４は、対応するベクトル命令の結果が判定される前に分かる必要があり得る。述語値４４は、前の命令、たとえば他の命令の結果を待っている条件付き命令によって設定できる。述語が実際に計算されるのを待つと、ベクトル命令が遅延し得る。（たとえば、同じ命令を実行する以前のインスタンスに基づいて、又はすべての要素がアクティブであるというデフォルト仮定に基づいて）述語値に対して行うことができる予測がある場合、予測が正しい場合、ベクトル命令を推測的に実行してパフォーマンスを向上できる。述語の予測が、後に正しくないと判明した場合、処理をより前の実行ポイントに巻き戻して、誤って推測された命令の結果を廃棄することができる。したがって、推測制御の別の形態は、述語値４４の予測に基づいて推測的にベクトル命令を実行することであり得る。
【００４７】
別の形態の推測は、ロード／ストア・ユニットによって実行されるロード命令又はストア命令のアドレスにある。たとえば、ロード命令が前のストア命令に続くか、ストア命令が前のロード命令に続く場合、第２の命令は、アドレスが異なることが判明した場合、パフォーマンスを向上させるために、実際には異なるデータ値にアクセスするので独立しているという前提で、第１の命令に先行して推測的に実行され得る。しかしながら、推測が正しくないことが判明し、第２の命令ペアが実際に第１のアドレスと同じアドレスにアクセスしてしまう場合は、推測が正しくない可能性があり、これは、命令の１つが誤った結果をもたらす可能性がある。誤推測が検出された場合、処理を、前の実行ポイントに巻き戻すことができる。
【００４８】
そのような推測メカニズムは、攻撃者がアクセスを許可されるべきではない機密情報へのアクセスを取得するために、攻撃者によって悪用される可能性がある。処理装置は、権限ベースのメカニズムを使用して動作することができ、ここでは、ＭＭＵ３５は、所与の特権レベル以上で実行されるコードに、メモリ・アドレス空間の特定の領域へのアクセスを制限するアクセス許可を定義し得る。非権限コードを制御している攻撃者は、キャッシュ・タイミング・サイド・チャネルの悪用を試みて、攻撃者がアクセスを有さないメモリの権限領域内の機密情報に関する情報へのアクセスを得ようとすることができる。
【００４９】
キャッシュ・タイミング・サイド・チャネルの背後にある基本的な原理は、キャッシュへの割当のパターン、特に、割当に使用されたキャッシュ・セットは、キャッシュに以前にあったエントリにアクセスするのに費やされた時間を測定することで、又は、割り当てられたエントリにアクセスする時間を測定することで判定され得る。これは、その後、どのアドレスがキャッシュに割り当てられているのかを判定するために使用され得る。
【００５０】
推測ベースのキャッシュ・タイミング・サイド・チャネルの新規性は、推測的メモリ読取の使用である。推測的メモリ読取は、高度なマイクロプロセッサの典型であり、非常に高いパフォーマンスを可能にする全機能の一部である。体系的に未解決の分岐（又はプログラム・フローにおける他の変更）を超えてキャッシュ可能な場所に推測的メモリ読取を実行することにより、さらに、それら読取結果自身を使用して、さらなる推測的メモリ読取のアドレスを形成できる。これら推測的読取により、アドレスが、第１の推測的読取の値を示すキャッシュにエントリが割り当てられる。これは、信頼できないコードが推測を制御して、信頼できないコードではアクセスできない場所の第１の推測的読取を引き起こす場合に、悪用可能なサイド・チャネルになる。しかし、キャッシュ内の第２の推測的割当の効果は、その信頼できないコードによって測定できる。
【００５１】
監視ソフトウェアの任意の形態では、信頼できないソフトウェアが、信頼できるソフトウェアがアクセスするアレイ又は同様の構造へのオフセットとして使用されるデータ値を渡すのが一般的である。たとえば、（信頼できない）アプリケーションは、ファイル記述子ＩＤに基づいて、開いているファイルに関する情報を要求する場合がある。もちろん、監視ソフトウェアは、使用前にオフセットが適切な範囲内にあることを確認するため、そのようなパラダイムのソフトウェアは以下の形式で記述できる。
【数１】
2021509743.tif 000003
【００５２】
最新のマイクロプロセッサでは、プロセッサによる実施は一般に、
【数２】
2021509743.tif 000004
範囲チェックに関連付けられている分岐（上記のコードにおける７行目が意味する）を実行する前に、値を確立するために推測的にデータ・アクセス（上記のコードにおける９行目が意味する）を実行する場合がある。このコードを監視レベル（ＯＳ  ＫｅｒｎｅｌやＨｙｐｅｒｖｉｓｏｒなど）で実行しているプロセッサは、信頼できないソフトウェアによって渡された
【数３】
2021509743.tif 000005
の範囲外の値によって判定される、その監視レベルにアクセス可能な通常メモリ内の任意の場所から推測的にロードすることができる。これは体系的には問題ではなく、推測が正しくない場合、ロードされた値は、ハードウェアによって廃棄される。
【００５３】
しかしながら、高度なプロセッサは、さらなる推測のために、推測的にロードされた値を使用することができる。推測ベースのキャッシュ・タイミング・サイド・チャネルによって悪用されるのは、このさらなる推測である。たとえば、以前の実例は、以下の形式になるように拡張され得る。
【数４】
2021509743.tif 000006
【００５４】
この実例では、
【数５】
2021509743.tif 000007
と組み合わされた
【数６】
2021509743.tif 000008
から計算されたアドレスを使用してメモリからロードされたｖａｌｕｅ（１０行目）が、その後、さらなるメモリ・アクセスの基礎として使用される（１３行目）。したがって、ｖａｌｕｅ２の推測的ロードは、
【数７】
2021509743.tif 000009
のために推測的にロードされたデータから導出されたアドレスから発生する。プロセッサによる
【数８】
2021509743.tif 000010
の推測的ロードが、キャッシュへの割当を引き起こす場合、そのロードのアドレスの一部は、標準的なキャッシュ・タイミング・サイド・チャネルを使用して推測できる。そのアドレスは
【数９】
2021509743.tif 000011
におけるデータに依存するため、値のデータの一部はサイド・チャネルを使用して推測できる。このアプローチを、様々な
【数１０】
2021509743.tif 000012
のビットに適用することにより、（多くの推測的実行において）値のデータ全体を判定できる。
【００５５】
図２は、このタイプの攻撃を図解的に例示した図である。図２の実例では、変数ｘは、上記の
【数１１】
2021509743.tif 000013
に対応し、より低下した権限レベルＥＬ０で動作する信頼できないコードから取得される。変数ｙは上記の実例における
【数１２】
2021509743.tif 000014
に対応し、これは、ＥＬ０にはアクセスできないが攻撃者がアクセスしたい秘密情報にアクセスできる、より高い権限レベルＥＬ１で動作するコードによってロードされる。変数ｘは、アレイ１のサイズを示すサイズ・パラメータと比較され、信頼できないパラメータがアレイ・サイズより大きい場合、条件付き分岐は、後続するロード命令ＬＤ（上記の実例では、それぞれ１０行目及び１３行目におけるロードに対応する）を通過して分岐する。しかしながら、信頼できない変数ｘが、範囲外であると後で判定された場合でも、条件付き分岐が、不採用されたとの結果を判定すると仮定して、これらロードは推測的に実行される可能性がある。これにより、攻撃者が、＃ａ＋ｘを秘密のアドレスにマップするような手法で「ｘ」を選択した場合、範囲外のアドレス＃ａ＋ｘにロードして、攻撃者がアクセスしてはならない秘密情報をロードし得る。その後、第２のロードは、秘密の一部に基づいて選択されたアドレスで、第２のアレイであるアレイ２から値をロードすることができる。この第２のロードにより、キャッシュ割当に変化が生じる可能性があり、より低下した権限レベル（ＥＬ０）で動作するより低い権限コードによって悪用される可能性がある。これは、キャッシュ・タイミング分析を使用して、第２のアレイのどの特定のアドレスがキャッシュされたかを調べ、それにより、秘密に関する情報を推測し得る。）
【００５６】
したがって、信頼できないソフトウェアは、
【数１３】
2021509743.tif 000015
に範囲外の数量を提供することにより、監視ソフトウェアにアクセスできる場所であればどこにでもアクセスできるため、信頼できないソフトウェアがこのアプローチを使用して、監視ソフトウェアがアクセスできるメモリの値を復元できる。
【００５７】
最新のプロセッサには、命令キャッシュ、データ・キャッシュ、分岐予測キャッシュなど、多数の異なるタイプのキャッシングを有する。これらキャッシュ内のエントリの割当が、信頼できない入力に基づいてロードされたいくつかのデータの任意の部分の値によって判定される場合、原則として、このサイド・チャネルが刺激され得る。
【００５８】
このメカニズムの一般化として、基礎となるハードウェア技術は、分岐を通過したコードが推測的に実行される可能性があることを意味し、したがって、分岐後にメモリにアクセスする任意のシーケンスは、推測的に実行される可能性があることを理解されたい。推測的にロードされた１つの値を使用して、推測的に実行できる第２のロード又は間接的な分岐のアドレスを構築するそのような推測では、第２のロード又は間接的な分岐は、第１の推測的ロードによってロードされた値を示すインジケーションを残して、他の方法ではその値を読み取ることができないコードによるキャッシュのタイミング分析を使用して読み取ることができる。この一般化は、一般的に生成される多くのコード・シーケンスが、他のより低い権限のソフトウェアで読み取ることができるキャッシュ割当のパターンに、情報をリークすることを意味する。この問題の最も深刻な形態は、このセクションで前述したものであり、ここでは、より低い権限のソフトウェアが、この手法で、リークされる値を選択することができる。
【００５９】
このサイド・チャネルは、Ｌｉｎｕｘ（登録商標）カーネルに含まれるｅＢＰＦバイト・コード・インタプリタ又はＪＩＴエンジンを使用して、カーネル空間で実行されるコードを使用するいくつかのプロセッサで実証されている。この手法で実行されるコードは、推測的にロードされたデータの必要なシフト及び逆参照を実行するルーチンを保持する。このメカニズムを使用することで、直接的に悪用されるカーネル空間で適切なルーチンを検索する必要が回避された。
【００６０】
これは、推測を悪用する１つの例示的な手法であることを理解されたい。コードの分析によると、信頼できないオフセットを使用してロードされた値自体が、このメカニズムを使用して意味のある量の情報を取得できる範囲でアドレスを形成するために使用される場所がいくつか存在する。
【００６１】
プロセッサが未解決の分岐を通過して推測することは一般的であり、そのため、この挙動は、順不同で実行されるキャッシュされたプロセッサで観察される可能性がある。順番に実行するいくつかのプロセッサでは、このアプローチを使用して、キャッシュへの必要な割当を行うには、推測的実行では不十分な場合があり得る。
【００６２】
リークした値が、より低い権限のソフトウェアによって判定されるシナリオのための実用的なソフトウェア緩和は、秘密を導出したアクセスが、非推測的に実行されるアクセスであった場合に、秘密から導出されたアドレス（上記の実例で
【数１４】
2021509743.tif 000016
をロードするために使用されるアドレス）は、秘密（
【数１５】
2021509743.tif 000017
におけるデータ）のみを示すことを保証する。
【００６３】
これは、いくつかの実施では、分岐の結果を判定するために（つまり、以前の実例では、
【数１６】
2021509743.tif 000018
をサニタイズするために）使用される条件に基づいて、条件付き選択又は条件付き移動命令を使用することで達成できる。これが機能しない実施では、［以下で定義する］新たなバリアを使用できる（この命令は、条件付き選択／条件付き移動が使用される実施ではＮＯＰである）。したがって、条件付き選択／条件付き移動と、新たなバリアとの両方の組合せで、この問題に十分対処できる。新たなバリアの詳細については、このセクションで後述する。
【００６４】
このサイド・チャネルの悪用を許可するシーケンスが権限コードに存在することは、一般的には珍しい。しかしながら、より低下した権限のレベルによって提供されるバイト・コードのコンパイルは、このようなシーケンスを権限ソフトウェアに導入する手段である。このようなバイト・コードをコンパイルするジャスト・イン・タイム・コンパイラは、コンパイルされたシーケンスの一部としてこれらメカニズムを使用することが特に重要である。このタイプのコード導入メカニズム（たとえば、ｅＢＰＦ）の提供は、それが実用的であるシステムでも無効化され得る。
【００６５】
この問題の影響を受ける可能性のある別の領域は、Ｊａｖａ（登録商標）ｓｃｒｉｐｔインタプリタ又はＪａｖａ（登録商標）ランタイムで発生する可能性がある、単一の例外レベル内にソフトウェアによる権限の境界がある場所である。たとえば、インタプリタでは、ソフトウェアによる権限の強制の重要な要素には、この実例で見られる信頼できない値の一種のサニタイズが含まれているため、潜在的にこのメカニズムの実例を与える可能性がある。同様に、Ｊａｖａ（登録商標）バイト・コードのランタイム・コンパイルによって生成されたシーケンスは、生成されたシーケンスに回避策を組み込む必要がある場合がある。
【００６６】
このバリアを挿入することが実際的でない場合は、ＤＳＢ  ＳＹＳとＩＳＢとの組合せを挿入する代替的なアプローチを挿入して推測を阻止できるが、これは、条件付き選択／条件付き移動及びＣＳＤＢバリアを使用するよりも、はるかに大きなパフォーマンス効果をもたらす可能性がある。
新たなバリアの第１の実例：
【００６７】
ＣＳＤＢは、新たな条件付き推測バリアである。
バリアが終了するまで、
１）条件付き選択命令の結果に対するアドレス依存性を有するバリア後にプログラム順に現れる任意のロード、ストア、データ、又は命令のプリロードＲＷ２の場合、
ｉ．条件付き選択命令は、入力レジスタの１つについて、推測的に実行されたロードＲ１に対するレジスタ・データ依存性を有し、
ｉｉ．条件付き選択命令は、他の入力レジスタについて、Ｒ１に対するレジスタ依存性を有さず、
ｉｉｉ．条件付き選択命令の条件は、Ｒ１が体系的に実行されていない場合に、Ｒ１に依存しない入力が選択されるのであれば、
ＲＷ２の推測的実行は、キャッシュ内のエントリの割当に影響を与えず、キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、Ｒ１から推測的にロードされたデータ値の任意の部分の値を判定するために使用され得る。
２）バリア後にプログラム順に現れ、そのターゲット・アドレスが、条件付き選択命令の結果に対するレジスタ依存性を有する任意の間接的な分岐（Ｂ２）の場合、
ｉ．条件付き選択命令は、入力レジスタの１つについて、推測的に実行されたロードＲ１に対するレジスタ・データ依存性を有し、
ｉｉ．条件付き選択命令は、他の入力レジスタについて、Ｒ１に対するレジスタ依存性を有さず、
ｉｉｉ．条件付き選択命令の条件は、Ｒ１が体系的に実行されていない場合、Ｒ１に依存しない入力が選択され、
Ｂ２の推測的実行は、キャッシュ内のエントリの割当に影響を与えず、キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、Ｒ１から推測的にロードされたデータ値の任意の部分の値を判定するために使用される。
バリアは、推測的に実行することはできないが、推測的ではないことが分かると終了することができる。
新たなバリアの第２の実例：
ＣＳＤＢは、新たな条件付き推測バリアである。
バリアが終了するまで、
１．条件付き移動命令の結果に対するアドレス依存性を有するバリア後にプログラム順に現れるロード、ストア、データ、又は命令のプリロードＲＷ２の場合、
ｉ．条件付き移動命令は、その入力レジスタについて、推測的に実行されたロードＲ１に対するレジスタ依存性を有さず、
ｉｉ．条件付き移動命令の条件は、Ｒ１が体系的に実行されていない場合、条件を満たすのであれば、
ＲＷ２の推測的実行は、キャッシュ内のエントリの割当に影響を与えず、キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、Ｒ１から推測的にロードされたデータ値の任意の部分の値を判定するために使用される。
２．バリア後にプログラム順に現れ、そのターゲット・アドレスが、条件付き移動命令の結果に対するレジスタ依存性を有する任意の間接的な分岐（Ｂ２）の場合、
ｉ．条件付き移動命令は、その入力レジスタについて、推測的に実行された、ロードＲ１に対するレジスタ依存性を有さず、
ｉｉ．条件付き移動命令の条件は、Ｒ１が体系的に実行されていない場合、Ｒ１に依存しない入力が選択され、
Ｂ２の推測的実行は、キャッシュ内のエントリの割当に影響を与えず、キャッシュ内のどのエントリが割り当てられているか、又は削除されているかを評価することにより、Ｒ１から推測的にロードされたデータ値の任意の部分の値を判定するために使用される。
バリアは、推測的に実行することはできないが、推測的でないことが分かると終了することができる。
バリアの使用
これら実例は、プロセッサで実行されるアセンブリ・コードでバリアがどのように使用されるのかを示す。
以前に示した実例を採用する。
【数１７】
2021509743.tif 000019
第１の実例では、これが、以下の形式のアセンブリにコンパイルされ得る。
【数１８】
2021509743.tif 000020
この場合、このコードを次のように変更することで、サイド・チャネルを軽減できる。
【数１９】
2021509743.tif 000021
第２の実例では、同等のコードは、以下の通り。
オリジナルのコード：
【数２０】
2021509743.tif 000022
緩和が追加されたコード：
【数２１】
2021509743.tif 000023
このサイド・チャネルが、データ・キャッシュ、命令キャッシュ、又は分岐予測キャッシュで作成されないようにするために、この緩和アプローチは、次の場合に使用され得る。
・データ・アドレスは、信頼できないオフセットから読み取られた値から判定される。
・間接的な分岐先は、信頼できないオフセットから読み取られた値から判定される。
・分岐の決定は、信頼できないオフセットから読み取られた値から判定される。
信頼できない値の使用を含む特定のコード・シーケンスに適用すると、この緩和策により、そのコード・シーケンスを使用して、このサイド・チャネルを悪用し、データにアクセスすることができなくなる。
【００６８】
すべてではないがいくつかの実施では、暗号化キーなどの特に重要な秘密を、デバイス・メモリにマップすると、キャッシュに割り当てられなくなる。このようにして、そのようなデータのマップピングは、オペレーティング・システムの下で実行可能な場合は、パフォーマンス・コストが大幅に増加するが、これら実施の追加の保護手段として使用できる。
【００６９】
したがって、図３に示すように、推測バリア命令を処理する方法が提供され得る。ステップ５０において、推測バリア命令が復号される。これに応答して、ステップ５２において、命令デコーダ１０は、パイプラインの残りのステージを制御して、プログラム順にバリアに先行する前の命令に対するアドレス依存性を有する条件付きバリア命令ＣＳＤＢの後にプログラム順に現れる後続する動作が、キャッシュ内のエントリの割当に推測的に影響を与えることを阻止する（このキャッシュは、たとえば、データ・キャッシュ３０、命令キャッシュ８、分岐予測器４内の分岐予測キャッシュ、又は値予測器キャッシュ、又はロード／ストア・エイリアシング予測器などの他のキャッシュであり得る）。キャッシュ割当への推測的影響の阻止は、後続する命令の推測的実行を完全に阻止すること、又は、推測的実行を許可するが、キャッシュの更新、又は、キャッシュされたエントリの、キャッシュの別個の推測的領域への割当を阻止することのいずれかによって実行され得、キャッシュは、たとえば、権限レベルが低下した場合に削除される（推測が正しいとして解決されると、データが、推測的領域からメイン領域へ転送され得る）。バリアに続く後続する命令に対するキャッシュへの推測的効果に対する制限は、バリアが終了するまで、つまり、バリアに先行する前の命令に関連付けられた推測が解決されるまで継続し得る。
【００７０】
推測バリア命令ＣＳＤＢの別の実例を以下に示す。バリアのセマンティクスは、ＣＳＤＢが、
任意の命令のデータ値予測、又は、
条件付き分岐命令以外の命令の条件コード４２の予測、又は、
体系的に解決されていないＣＤＳＢの前にプログラム順に現れるベクトル命令のベクトル予測状態４４の予測、
のいずれかの結果を使用して推測的に実行された後にプログラム順に現れる分岐命令以外の命令がないことである。
ＣＳＤＢの定義のために、条件コード４２とベクトル述語値４４は、データ値とは見なされない。
この定義は、ＣＳＤＢの前後の制御フローの推測と、ＣＳＤＢの後の条件付きデータ処理命令の推測的実行とを許可するが、ただし、体系的に解決されていない、ＣＳＤＢの前にプログラム順に現れる命令のデータ値又は条件コード予測の結果を使用する場合を除く。上記のコードの実例は、このバリア命令の実例でも使用できる。
【００７１】
推測の別の実例は、ロード命令及びストア命令（プログラム順内のいずれかの指示で発生する）が、同じアドレスにアクセスするか否かの推測である。多くの最新の高性能プロセッサでは、パフォーマンスの最適化が行われ、これにより、アドレスへのロードは、ターゲット・アドレスがまだハードウェアによって知られていないが、実際にはロードのアドレスと同じである、前のストアを推測的にバイパスする。これが発生すると、ロードは、ストアによって書き込まれた値よりも、そのアドレスのデータの前の値を推測的に読み取る。その推測的にロードされた値は、その後、キャッシュへの割当を引き起こす後続する推測的メモリ・アクセスのために使用され得、それら割当のタイミングは、アドレスとして選択されたデータ値の観測サイド・チャネルとして使用できる。原則として、高度な順不同プロセッサでは、以下の形式のコード・シーケンスにおいて、
【数２２】
2021509743.tif 000024
であれば、このシーケンスにおける第２のロードは、第１のロードからＸ３に返された推測的値から導出されたＸ３の値を使用して、推測的に実行され得る。その推測的にロードされた値は、その値を上書きしたＳＴＲよりもプログラム実行における早期から、第１のアドレスに保持された値から取得され得る。第２のロードの推測的実行によって生成されたキャッシュ割当は、Ｘ３に推測的にロードされたこの早期のデータに関するいくつかの情報を明らかにする。これは、その値の発見を阻止するために、ストアが、いくつかの前のデータを上書きしている状況を回避するために、攻撃者によって使用される可能性がある。この推測的バイパス・アプローチは、推測的ロードのチェーンを通じて拡張されて、このような場合、
【数２３】
2021509743.tif 000025
その後、このシーケンスにおける第２及び第３のロードは、その値を上書きしたＳＴＲよりも実行時における早期から、第１のアドレスに保持された値から取得されたＸ３の値を使用して、推測的に実行される。第３のロードの推測的実行によって生成されたキャッシュ割当は、Ｘ５におけるデータに関するいくつかの情報を明らかにする。この場合、攻撃者が、Ｘ２及びＸ４を指すアドレスに保持されている以前の値を制御している場合、それは後続する推測に影響を与え、第２の推測的ロードによるデータの選択と、第３のロードによって引き起こされたキャッシュ割当の調査によって選択されたデータの公開とを可能にする。
【００７２】
ストアと第１のロードとが同じ仮想アドレスと物理アドレスに対して行われる場合、この種の推測的並べ替えは、単一の例外レベル内でのみ発生する。
【００７３】
ストアと第１のロードが異なる仮想アドレスであるが、同じ物理アドレスに対して行われる場合、異なる例外レベルで、コード間で推測的並べ替えが発生する可能性があり、この場合、以下のようになる。
【数２４】
2021509743.tif 000026
Ｘ３をオフセットとして使用してキャッシュに推測的にロードされた場所は、Ｘ２とＸ４が指す物理アドレスにあった、以前のデータ値を示している可能性がある。
【００７４】
最新の高性能プロセッサでは、たとえば、ロードのアドレスの可用性と比較して、ストア・アドレスの生成におけるキャッシュ・ミスの結果として、ストアのアドレスの可用性が遅れている場合、ストアの並べ替え及び同じアドレスへの後続するロードと、そのようなロードによるより古いデータの推測的読み取りを示すことは比較的簡単である。
【００７５】
ストアとロードが同じレジスタを使用してアドレスを伝達する場合、プロセッサは、同じアドレスへの前のストアの前に、一般に、ロードを推測的に実行しない。しかしながら、いくつかのマイクロ・アーキテクチャ固有の場合、いくつかの実施では原則として可能である。この並べ替えの正確な条件は、通常、プロセッサによって処理されている以前のメモリ・アクセスの遅延の複合関数である。
【００７６】
これは、コードにおいて比較的一般的なパターンであるため、このメカニズムの特定の懸案は、ストアと第１のロードが（スタック・ポインタ、又は同じアドレスを有する他のレジスタのいずれかを使用する）スタックにおけるアクセスである場合である。原則として、これは、スタックにあったが上書きされた前の値が、その後のプロセッサの推測を制御するメカニズムを提供できる。権限付きスタックの場合、スタックにあった前の値は、実際には、より低い権限の実行の制御下にある可能性がある。
【００７７】
以下のシーケンスでは、
【数２５】
2021509743.tif 000027
これは、その後、第２のロードを使用するプロセッサのより高い権限のアドレス空間アドレスにおけるいずれかのデータの推測的ロードを指示するために、（恐らく、いくつかのデータの処理を要求するシステム・コールの結果として）ストアの前にスタックに保持されていた値を判定したより低い権限のコードのために制御チャネルを与えることができる。次に、その第２のロードの結果は、第３のロードのアドレスを形成するために使用されるという事実によって観測可能になり、キャッシュ割当が発生する。そのキャッシュ割当の存在は、これらすべてのサイド・チャネルに適用されるのと同じ手法で、従来のキャッシュ・タイミング分析によって検出できる。原則として、これにより、タイミング・サイド・チャネルを使用して、より低い権限コードによって、任意の権限データを読み取ることができる。
【００７８】
同様に、スタックは、関数ポインタで再利用できるため、この実例に示すように、任意のコードの選択を、より高い権限のアドレス空間で推測的に実行できる。
【数２６】
2021509743.tif 000028
原則として、これにより、推測ガジェットを選択して、興味深いデータを明らかにすることができる。
【００７９】
少なくともいくつかの実施で見られる可能性のあるこの挙動のさらなる形態は、このシーケンスで見られ得るように、順不同プロセッサが、命令ストリームにおける後のストアから推測的に戻りデータをロードできる場合である。
【数２７】
2021509743.tif 000029
これが発生した場合、第２のロードによるキャッシュ内の割当により、キャッシュ・タイミング・サイド・チャネルを使用して、後でストアされた値が観察される可能性がある。
【００８０】
単純な概念の実証がいくつかの実施で示されており、ここでは、ストアのアドレスは、同じアドレスへの後のロードに比べて遅延しているため、後に、上記のタイプの推測的メモリ・アクセスが発生する。これら推測的メモリ・アクセスは、タイミング・サイド・チャネルを使用して、ストア及びロードされるメモリ場所に保持されている前の値の判定によって選択されたデータの値を明らかにできるキャッシュ内の割当を引き起こす。これは、概念を証明するために専用に作製されたコードを使用して実証された。
【００８１】
この形態のバイパスのより一般的な場合、特にスタックにアクセスするときに通常発生するストア・アドレスが、ロード・アドレスの前又は同時に利用できる場合は、実証されておらず、プロセッサに、必要な並べ替えを行わせ、そのようなデータをリークさせるために、以前のメモリ・アクセスを遅延させるのに必要な複雑な条件を、ユーザ・コードが保証することは、非常に困難となろう。しかしながら、このメカニズムが、より高い権限のメモリからデータを読み取るための低帯域幅チャネルとして悪用される可能性があることを排除することはできない。
【００８２】
ロードによって後のストアを監視するメカニズムは実証されていないが、少なくともいくつかの実施では可能であると考えられている。
【００８３】
このような攻撃を軽減するために、２つのストア推測バリア命令、ＳＳＢＢ及びＰＳＳＢＢが提供される。ＳＳＢＢバリアの使用は、仮想アドレスを使用するＳＳＢＢの前の任意のストアが、ＳＳＢＢの後、任意の推測的なロードの実行によって、同じ仮想アドレスへバイパスされないことを保証する。また、ＳＳＢＢバリアは、ＳＳＢＢの前の特定の仮想アドレスへの任意のロードが、ＳＳＢＢの後にストアから推測的にロードしないことを保証する。このバリアは、例外レベル内のソフトウェア管理された権限の場合に、このメカニズムを使用する推測的ロードが悪用されるのを阻止するために使用され得る。ＰＳＳＢＢバリアの使用は、特定の物理アドレスを使用するＰＳＳＢＢの前の任意のストアが、ＰＳＳＢＢの後、任意の推測的なロードの実行によって、同じ物理アドレスへバイパスされないことを保証する。また、ＰＳＳＢＢバリアは、ＰＳＳＢＢの前の特定の物理アドレスへの任意のロードが、ＰＳＳＢＢの後にストアから推測的にロードしないことを保証する。
【００８４】
図４は、上記のＳＳＢＢ命令又はＰＳＳＢＢ命令のいずれかである、ストア推測バリア命令を処理する方法を示す。ステップ６０において、そのようなストア推測バリア命令が復号される。ステップ６２において、命令デコーダ１０は、処理パイプラインを制御して、プログラム順にストア推測バリア命令に先行する前のストア命令が、プログラム順にストア・バリア命令に続き、前のストアと同じアドレスを指定する後続するロード命令の推測的実行によってバイパスされるのを阻止する。ＳＳＢＢ命令の場合、「同じアドレス」は同じ仮想アドレスを指し、ＰＳＳＢＢ命令の場合、「同じアドレス」は同じ物理アドレスを指す。
【００８５】
また、ステップ６４において、ストア推測バリア命令に応答して、命令デコーダは、パイプラインの、後続するステージを制御して、プログラム順にストア推測バリア命令に先行する前のロード命令が、プログラム順にストア推測バリア命令に続き、同じアドレス（繰り返すが、「同じアドレス」は、ＳＳＢＢ変数又はＰＳＳＢＢ変数が復号されることに依存して、仮想アドレス又は物理アドレスとなり得る）を指定する後続するストア命令から得られるデータを、推測的にロードすることを阻止する。したがって、このバリアにより、コンパイラ又はプログラマは、推測サイド・チャネル攻撃に対する保護を提供できる。
【００８６】
推測の別の実例は、分岐予測器４による条件付き分岐命令である結果の予測（採用又は不採用）であり、これにより、予測に依存して後続する命令が推測的に実行される可能性がある。分岐は通常、高性能のＣＰＵマイクロ・アーキテクチャ設計で推測される。高精度で推測するために、その分岐の以前の実行に基づいて分岐を採用するか否かを予測する予測テーブルが生成される。
【００８７】
単方向分岐、すなわち、採用又は不採用のいずれかであり、両方ではない一方向のみの推測が発生する分岐を提供することが提案されている。このような単方向分岐は、両方向（採用及び不採用）での推測が許可される双方向分岐に加えて、命令セット・アーキテクチャでサポートされ得る。
【００８８】
次の高水準コードの実例を検討する。
【数２８】
2021509743.tif 000030
これは通常、次のような命令のシーケンスを、処理パイプラインで実行するように変換する。
【数２９】
2021509743.tif 000031
通常、（ａ＜ｂ）が当てはまる場合、最終的に予測器は、ａ＜ｂであると高い信頼度で予測し、機密コードを実行する必要があると推測し得る。これにより、上記のようなサイド・チャネル・タイミング攻撃が発生する可能性がある。
【００８９】
しかしながら、次のコードを提供した場合、
【数３０】
2021509743.tif 000032
であり、ここで、「ｂｐｔ」が、「ｂｒａｎｃｈ−ｏｎｌｙ−ｐｒｅｄｉｃｔ−ｔａｋｅｎ」（予測が採用された場合のみの分岐）のアセンブリ・ニーモニックである場合、マイクロ・アーキテクチャは、分岐予測器を使用して、分岐が採用されるという高い信頼度がある場合にのみ推測を行うことができる。採用された予測に対する信頼度が不十分であるか、不採用とされた予測に対する信頼度が高い場合、予測器は、分岐が解決されるまで、実行を停止する。これにより、機密コード領域への推測を阻止する。ｂｐｎ（予測が不採用された場合のみの分岐：ｂｒａｎｃｈ−ｏｎｌｙ−ｐｒｅｄｉｃｔ−ｎｏｔ−ｔａｋｅｎ）の直交アプローチは、他の方向の予測をガードする可能性がある。
【００９０】
マイクロ・アーキテクトには、これら分岐を取り扱うための多くの選択肢がある。通常の分岐予測器を使用して履歴の構築を続行できるが、その履歴を使用できるのは、許可された予測の方向に自信がある場合か、又は、これら分岐が、予測から完全に除外され得る場合のみである。第３の分岐の形態であり、予測されないｂｎｖ（ｂｒａｎｃｈ−ｎｅｖｅｒ−ｐｒｅｄｉｃｔ：予測されない分岐）もサポートされ得る。
【００９１】
したがって、図５は、条件付き分岐命令のそのような一方向推測変数を処理する方法を示している。ステップ１００において、処理パイプラインは、条件付き分岐命令の一方向推測変数に遭遇する。一方向推測変数は、様々な手法で識別できる。いくつかの場合では、フェッチ・ステージ６は、たとえば、命令を部分的に復号することによって、又は命令が命令キャッシュ８に割り当てられると、これら命令を分析するプリデコーダによって、命令に追加されたプリデコード情報にアクセスすることによって、条件付き分岐命令の一方向推測変数を直接識別できる場合がある。別の実例では、分岐命令が命令デコーダ１０によって復号されるとき、分岐が、条件付き分岐命令の一方向推測変数として識別された場合、これは分岐予測器４に戻されて通知され得、分岐予測器４は、その後、所与の命令アドレスにおける命令が、一方向推測変数の条件付き分岐命令として検出される分岐予測状態の、対応するエントリを更新し得る。これにより、同じ命令の後続するフェッチ時に、命令自体が命令を復号する能力を持たない場合でも、フェッチ・ステージ６は、ストアされた分岐予測状態から、命令が一方向推測変数であることを識別できる。
【００９２】
一方向推測変数に応答して、ステップ１０２において、分岐予測器４は、どの分岐結果が予測されるかを判定する。結果が、第１の結果である場合（それは、採用されたとの結果でも、不採用されたとの結果でもよい）、ステップ１０４において、分岐予測器４は、分岐に続いて実行される次の命令が、第１の命令であるべきであると予測する。第１の結果が、採用されたとの結果である場合、第１の命令は、分岐命令の分岐ターゲット・アドレスにおける命令である一方、第１の結果が、不採用されたとの結果である場合、第１の命令は、条件付き分岐から連続的に続く次の命令である。ステップ１０６において、制限推測的実行が、第１の命令に適用される。たとえば、第１の命令は、推測的に実行することを阻止されることも、又は、推測的に実行することを許可されることもあるが、推測的実行に基づいてキャッシュ構造への更新を制限することにより、攻撃者が、キャッシュ・タイミング・サイド・チャネル攻撃から、情報を導出することを阻止することができる。
【００９３】
一方、ステップ１０２において、第２の結果（第２の結果は、第１の結果とは逆の結果である）が予測された場合、ステップ１０８において、次の命令が、第２の命令である（繰り返すが、第２の結果が不採用である場合、次の連続的な命令であり、又は、第２の結果が採用である場合、分岐ターゲット・アドレスにおける命令である）と予測される。ステップ１１０において、（第１の結果に対してステップ１０６において適用されるであろう）制限推測は、第２の命令には、代わりに省略され、その結果、第２の命令の推測的実行は、無制限に進むことができる。
【００９４】
これによって、ここで説明する一方向分岐では、第２の結果が予測されるときに、推測を続行してパフォーマンスを向上させることができるが、第１の結果が、上記の形態の攻撃から保護すると予測される場合は、推測を制限する。いくつかの実施は、一方向分岐の単一の変数、たとえば、上記のｂｐｔ又はｂｐｎ（ｂｐｔの場合、図５の第１の結果は、不採用されたとの結果であり、第２の結果は、採用されたとの結果であり、ｂｐｎの場合、第１の結果は、採用されたとの結果であり、第２の結果は、不採用されたとの結果である）のいずれかのみをサポートし得る。他の実施では、ｂｐｔとｂｐｎとの両方をサポートし得る。これにより、プログラマ又はコンパイラは、採用、又は不採用の結果にしたがって実行されるコードが、機密情報の損失に対して最も脆弱であるか否かに応じて、適切な変数を選択できる。また、いくつかのシステムでは、予測結果又は第１の結果又は第２の結果のいずれかであるかに関わらず、推測に対する制限が常に適用される無推測変数もサポートし得る。
【００９５】
さらなる例は、以下の箇条書きに示される。
１．データ処理を実行する処理回路構成と、データ処理を実行するように処理回路構成を制御する命令を復号する命令復号回路構成とを備え、命令復号回路構成は、条件付き推測バリア命令に応答する、装置。
２．ターゲット・プログラム・コードの命令を実行する命令実行環境を提供するホスト処理装置を制御するコンピュータ・プログラムであって、データ処理を実行するように処理プログラム・ロジックを制御するターゲット・プログラム・コードの命令を復号する命令復号プログラム・ロジックを備え、命令復号プログラム・ロジックは、条件付き推測バリア命令に応答する、コンピュータ・プログラム。
３．条件付き推測バリア命令を復号することと、条件付き推測バリア命令の復号に応答して、処理回路構成を制御することとを備える、データ処理方法。
【００９６】
図６は、使用できるシミュレータの実施を例示する。前述した実施例は、関連する技術をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点から本発明を実施するが、コンピュータ・プログラムの使用によって実施される、本明細書に記載された実施例にしたがって命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムは、しばしば、ハードウェア・アーキテクチャのソフトウェア・ベースの実施を提供する限り、シミュレータと呼ばれる。様々なシミュレータ・コンピュータ・プログラムは、エミュレータ、仮想マシン、モデル、及び、動的バイナリ変換器を含むバイナリ変換器を含む。通常、シミュレータによる実施は、ホスト・プロセッサ２００で実行され、オプションでホスト・オペレーティング・システム２１０を実行して、シミュレータ・プログラム２２０をサポートする。いくつかの構成では、ハードウェアと、提供された命令実行環境との間にシミュレーションの多数の層が、及び／又は、同じホスト・プロセッサ上に提供された多数の異なる命令実行環境が存在する場合がある。歴史的に、強力なプロセッサは、妥当な速度で実行するシミュレータによる実施を提供する必要があったが、そのようなアプローチは、互換性や再利用の理由で別のプロセッサにネイティブなコードを実行したい場合など、特定の状況で正当化され得る。たとえば、シミュレータによる実施は、ホスト・プロセッサ・ハードウェアによってサポートされていない追加機能を備えた命令実行環境を提供したり、又は、通常は、異なるハードウェア・アーキテクチャに関連付けられた命令実行環境を提供できる。シミュレーションの概要は、非特許文献１に与えられる。
【００９７】
特定のハードウェア構成又は特徴を参照して実施例が以前に説明されている限り、シミュレートされた実施例では、同等の機能が、適切なソフトウェア構成又は特徴によって提供され得る。たとえば、特定の回路構成は、シミュレーションされた実施例において、コンピュータ・プログラム・ロジックとして実施され得る。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアは、ソフトウェア・データ構造としてシミュレートされた実施例で実施され得る。前述の実施例で参照されたハードウェア要素の１つ又は複数が、ホスト・ハードウェア（たとえば、ホスト・プロセッサ２００）上に存在する構成では、いくつかのシミュレートされた実施例は、適切な場合、ホスト・ハードウェアを活用し得る。
【００９８】
シミュレータ・プログラム２２０は、コンピュータ可読記憶媒体（これは、非一時的媒体であり得る）上にストアされ得、プログラム・インターフェース（命令実行環境）を、シミュレータ・プログラム２２０によってモデル化されるハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同じであるターゲット・コード２３０（アプリケーション、オペレーティング・システム、及びハイパバイザを含む）に提供する。したがって、前述した条件付き分岐命令の推測バリア命令、ストア推測バリア命令、及び一方向推測形態を含むターゲット・コード２３０のプログラム命令は、シミュレータ・プログラム２２０を使用して命令実行環境内から実行することができ、そのため、上述した装置２のハードウェア特徴を実際には有していないホスト・コンピュータ２００が、これらの特徴をエミュレートすることが可能となる。シミュレータ・プログラム２２０は、ターゲット・コード２３０の命令を復号し、ホスト・ハードウェア２００によってサポートされたネイティブ命令セットからの１つ又は複数の命令を使用して実行される対応する機能にそれらをマップする命令復号プログラム・ロジック２２５を含み得る。
【００９９】
本願では、「〜ように構成された」という文言は、装置の要素が、定義された動作を実行できる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェア又はソフトウェアの相互接続の構成又は方式を意味する。たとえば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ又は他の処理デバイスが、機能を実行するようにプログラムされてもよい。「〜ように構成された」は、定義された動作を提供するために装置要素を何らかの手法で変更する必要があることを意味するものではない。
【０１００】
本発明の例示的な実施例を、添付図面を参照して本明細書で詳細に説明したが、本発明はそれら正確な実施例に限定されず、様々な変更及び修正が、添付の特許請求の範囲によって定義される本発明の範囲及び趣旨から逸脱することなく、当業者によって実施され得ることを理解されたい。
【図１】
2021509743.tif 000033
【図２】
2021509743.tif 000034
【図３】
2021509743.tif 000035
【図４】
2021509743.tif 000036
【図５】
2021509743.tif 000037
【図６】
2021509743.tif 000038
【国際調査報告】
2021509743.tif 000039
2021509743.tif 000040
2021509743.tif 000041
2021509743.tif 000042