(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-02-27
(45)【発行日】2024-03-06
(54)【発明の名称】命令の機密としての動的な指定
(51)【国際特許分類】
G06F 9/30 20180101AFI20240228BHJP
【FI】
G06F9/30 350
【外国語出願】
(21)【出願番号】P 2020195581
(22)【出願日】2020-11-25
【審査請求日】2022-01-07
(32)【優先日】2019-12-05
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】520078248
【氏名又は名称】マーベル アジア ピーティーイー、リミテッド
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】シュブヘンドゥ セクハー ムカージー
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特開2010-108315(JP,A)
【文献】米国特許出願公開第2019/0034356(US,A1)
【文献】米国特許出願公開第2014/0229690(US,A1)
【文献】特表2007-524869(JP,A)
【文献】TOWNLEY, Daniel et.al,SMT-COP:Defeating Side-channel Attacks on Execution Units in SMT Processors,Published in:2019 28th International Conference on Parallel Architectures and Compilation Techniques (PACT),米国,IEEE,2019年09月26日,pages:43-54
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30-9/38
(57)【特許請求の範囲】
【請求項1】
命令を実行するための集積回路であって、
機密処理イネーブルインジケータを有するレジスタと、
プロセッサコアと
を備え、
前記プロセッサコアは、
前記機密処理イネーブルインジケータが有効にされているかどうかをチェックし、
第1プロセスの第1スレッドからの第1命令が機密命令として指定されたことを検出し、
前記機密処理イネーブルインジケータの有効化および前記機密命令の検出に応答して、前記第1命令の実行中に、前記第1スレッド以外のスレッドから
の命令の発行、ディスパッチ、または実行のうち少なくとも1つをブロックする制約を呼び出し、
前記制約に従って前記第1命令を実行し、かつ、
前記第1命令が実行された後であって、前記機密処理イネーブルインジケータが依然として有効とされている間に、前記制約なしで機密命令として指定されていない第2命令を実行する
ように構成される、
集積回路。
【請求項2】
前記プロセッサコアはさらに、特権レベルが前記第1プロセスより高い第2プロセスによって、セキュリティポリシーに基づいて、前記第1命令の機密命令としての前記指定を許可するかどうかを判定する、請求項1に記載の集積回路。
【請求項3】
前記第1命令は、機密ビットを含み、前記プロセッサコアは、前記第1命令の前記機密ビットを評価することにより、前記第1命令が機密命令として指定されたことを検出するように構成される、請求項1または2に記載の集積回路。
【請求項4】
前記機密ビットは、前記第1プロセスにより動的に設定またはクリアされる、請求項3に記載の集積回路。
【請求項5】
前記第1プロセスの命令シーケンスにおいて、前記第1命令の前には機密開始命令があり、前記第1命令の後には機密停止命令があり、前記プロセッサコアは、前記機密開始命令の検出に基づいて、前記第1命令が機密命令として指定されたことを検出するように構成される、請求項1から4のいずれか一項に記載の集積回路。
【請求項6】
前記第1命令は、前記第1プロセスの前記命令シーケンスにおいて、直前に前記機密開始命令があり、かつ、直後に前記機密停止命令がある、命令サブシーケンスのメンバであり、前記プロセッサコアは、前記制約に従って前記命令サブシーケンスの全てのメンバを実行するように構成される、請求項5に記載の集積回路。
【請求項7】
前記プロセッサコアは、前記第2プロセスの命令に基づいて前記機密処理イネーブルインジケータの有効または無効の値を更新するように構成される、請求項2に記載の集積回路。
【請求項8】
前記第2プロセスは、ハイパーバイザプロセスである、請求項2または7に記載の集積回路。
【請求項9】
前記第2プロセスは、オペレーティングシステムプロセスである、請求項2または7に記載の集積回路。
【請求項10】
前記プロセッサコアは、
第3プロセスの第3命令が機密命令として指定されたことを検出し、
前記機密処理イネーブルインジケータが有効になっているかどうかをチェックし、かつ、
前記機密処理イネーブルインジケータの無効化に応答して、前記制約なしで前記第3プロセスの前記第3命令を実行する
ように構成される、請求項7から9の何れか一項に記載の集積回路。
【請求項11】
プロセッサパイプラインを備え、
前記プロセッサパイプラインは、前記プロセッサパイプラインの実行ユニットを使用して2つ以上のスレッドからの命令を並行して実行するように構成され、
前記制約は、前記プロセッサパイプラインの実行ユニットにより前記第1命令が実行されている間、他のスレッドからの命令の並列実行を防止する、
請求項1から10の何れか一項に記載の集積回路。
【請求項12】
前記レジスタは、前記第1プロセスの状態を記憶するプロセス状態レジスタである、請求項1から11の何れか一項に記載の集積回路。
【請求項13】
前記第1命令は、暗号命令である、請求項1から12の何れか一項に記載の集積回路。
【請求項14】
前記機密処理イネーブルインジケータは、単一のビットで構成される、請求項1から13の何れか一項に記載の集積回路。
【請求項15】
第1プロセスの状態を記憶するプロセス状態レジスタ内の機密処理イネーブルインジケータが有効にされているかどうかをチェックする段階と、
前記第1プロセスの第1スレッドからの第1命令が機密命令として指定されたことを検出する段階と、
前記機密処理イネーブルインジケータの有効化および前記機密命令の検出に応答して、前記第1命令の実行中に、前記第1スレッド以外のスレッドから
の命令の発行、ディスパッチ、または実行のうち少なくとも1つをブロックする制約を呼び出す段階と、
前記制約に従って前記第1命令を実行する段階と、
前記第1命令が実行された後であって、前記機密処理イネーブルインジケータが依然として有効とされている間に、前記制約なしで機密命令として指定されていない第2命令を実行する段階と
を備える方法。
【請求項16】
前記第1命令が機密命令として指定されたことを検出する段階は、
前記第1命令に含まれる機密ビットを評価する段階
を有する、請求項15に記載の方法。
【請求項17】
前記第1プロセスの命令シーケンスにおいて、前記第1命令の前には機密開始命令があり、前記第1命令の後には機密停止命令があり、前記方法は、
前記機密開始命令の検出に基づいて、前記第1命令が機密命令として指定されたことを検出する段階
を備える、請求項15または16に記載の方法。
【請求項18】
前記第1命令は、前記第1プロセスの前記命令シーケンスにおいて、直前に前記機密開始命令があり、かつ、直後に前記機密停止命令がある、命令サブシーケンスのメンバであり、前記方法は、
前記制約に従って前記命令サブシーケンスの全てのメンバを実行する段階
を備える、請求項17に記載の方法。
【請求項19】
前記第1プロセスより特権レベルの高い第2プロセスの命令に基づいて前記機密処理イネーブルインジケータの有効または無効の値を更新する段階
を備える請求項15から18の何れか一項に記載の方法。
【請求項20】
前記第2プロセスは、ハイパーバイザプロセスである、請求項19に記載の方法。
【請求項21】
前記第2プロセスは、オペレーティングシステムプロセスである、請求項19に記載の方法。
【請求項22】
第3プロセスの第3命令が機密命令として指定されたことを検出する段階と、
前記第3プロセスに関連付けられる機密処理イネーブルインジケータが有効になっているかどうかをチェックする段階と、
前記第3プロセスに関連付けられる前記機密処理イネーブルインジケータの無効化に応答して、前記制約なしで前記第3プロセスの前記第3命令を実行する段階と
を備える請求項19から21の何れか一項に記載の方法。
【請求項23】
前記制約は、プロセッサパイプラインの実行ユニットにより前記第1命令が実行されている間、他のスレッドからの命令の並列実行を防止し、前記プロセッサパイプラインは、前記プロセッサパイプラインの実行ユニットを使用して2つ以上のスレッドからの命令を並行して実行するように構成される、請求項15から22の何れか一項に記載の方法。
【請求項24】
前記第1命令は、暗号命令である、請求項15から23の何れか一項に記載の方法。
【請求項25】
前記機密処理イネーブルインジケータは、単一のビットで構成される、請求項16から24の何れか一項に記載の方法。
【請求項26】
命令を実行するための集積回路であって、
機密処理イネーブルインジケータを記憶するための手段と、
前記機密処理イネーブルインジケータが有効にされているかどうかをチェックし、第1プロセスの第1スレッドからの第1命令が機密命令として指定されたことを検出し、かつ、前記機密処理イネーブルインジケータの有効化および前記機密命令の検出に応答して、前記第1命令の実行中に、前記第1スレッド以外のスレッドから
の命令の発行、ディスパッチ、または実行のうち少なくとも1つをブロックする制約を呼び出すための手段と、
前記制約に従って前記第1命令を実行し、かつ、前記第1命令が実行された後であって、前記機密処理イネーブルインジケータが依然として有効とされている間に、前記制約なしで機密命令として指定されていない第2命令を実行するための手段と
を備える集積回路。
【請求項27】
前記第1プロセスより特権レベルの高い第2プロセスの命令に基づいて前記機密処理イネーブルインジケータの有効または無効の値を更新するための手段
を備える請求項26に記載の集積回路。
【請求項28】
プロセッサパイプラインを備え、
前記プロセッサパイプラインは、前記プロセッサパイプラインの実行ユニットを使用して2つ以上のスレッドからの命令を並行して実行するように構成され、
前記制約は、前記プロセッサパイプラインの実行ユニットにより前記第1命令が実行されている間、他のスレッドからの命令の並列実行を防止する、
請求項26または27に記載の集積回路。
【請求項29】
前記機密命令は、暗号命令である、請求項26から28の何れか一項に記載の集積回路。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願の相互参照]
本願は、2019年12月5日に出願された米国仮出願特許第62/944,245号に基づく優先権およびその利益を主張するものであり、その開示全体が参照によりここに組み込まれる。
【0002】
本開示は、命令の機密としての動的な指定に関する。
【背景技術】
【0003】
プロセッサパイプラインは、命令が一度に1サイクル前進する複数のステージを含む。スカラプロセッサでは、命令がパイプラインを1つずつ進み、サイクルごとに最大でただ1つの命令がコミットされる。スーパースカラプロセッサでは、複数の命令が同じパイプラインステージを同時に進むことができ、特定の条件(ハザードと呼ばれる)に応じて、発行幅まで、サイクルごとに複数の命令を発行することができる。幾つかのプロセッサは、(プログラム順序に従って)命令をインオーダに発行し、連続する命令がプログラム順序でパイプラインを進む。他のプロセッサでは、命令を並べ替えてアウトオブオーダに発行できるため、パイプライン全体のスループットが向上する可能性がある。並べ替えが許可される場合は、スライド命令ウィンドウ(そのサイズは発行幅よりも大きい可能性がある)内で命令を並べ替えることができ、リオーダバッファを使用して、命令ウィンドウ内の命令に関連付けられる結果(および他の情報)を一時的に記憶することで、命令をインオーダにコミットできるようにし得る(複数の命令がプログラム順序で連続している限り、それらを同じサイクルでコミットできる可能性がある)。
【発明の概要】
【0004】
本明細書には、命令の機密としての動的な指定の実装が開示されている。
【0005】
開示される実装の第1態様は、命令を実行するための集積回路であって、機密処理イネーブルインジケータを有するレジスタと、プロセッサコアとを備え、プロセッサコアは、第1プロセスの第1命令が機密命令として指定されたことを検出し、機密処理イネーブルインジケータが有効になっているかどうかをチェックし、機密命令の検出および機密処理イネーブルインジケータの有効化に応答して、第1命令を実行するための制約を呼び出し、当該制約に従って第1命令を実行し、かつ、当該制約なしで第1プロセスの第2命令を実行するように構成される、集積回路である。
【0006】
開示される実装の第2態様は、第1プロセスの第1命令が機密命令として指定されたことを検出する段階と、第1プロセスの状態を記憶するプロセス状態レジスタ内の機密処理イネーブルインジケータが有効になっているかどうかをチェックする段階と、機密命令の検出および機密処理イネーブルインジケータの有効化に応答して、第1命令を実行するための制約を呼び出す段階と、当該制約に従って第1命令を実行する段階と、当該制約なしで第1プロセスの第2命令を実行する段階とを備える方法である。
【0007】
開示される実装の第3態様は、命令を実行するための集積回路であって、機密処理イネーブルインジケータを有するレジスタと、プロセッサコアとを備え、プロセッサコアは、第1命令をフェッチすることであって、命令は、第1命令が機密であることを示す機密ビットを含む、フェッチすることと、機密ビットと機密処理イネーブルインジケータの現在の値とに基づいて、第1命令を実行するための制約を呼び出すことと、当該制約に従って第1命令を実行することと、当該制約なしで第2命令を実行することとを行うように構成される、集積回路である。
【0008】
開示される実装の第4態様は、命令を実行するための集積回路であって、プロセッサパイプラインであって、プロセッサパイプラインの実行ユニットを使用して2つ以上のスレッドからの命令を並行して実行するように構成されるプロセッサパイプラインと、機密処理イネーブルインジケータを有するレジスタと、第1スレッドの命令が機密命令として指定されたことを検出し、機密処理イネーブルインジケータが有効になっているかどうかをチェックし、かつ、機密命令の検出および機密処理イネーブルインジケータの有効化に応答して、プロセッサパイプラインの実行ユニットにより機密命令が実行されている間、第1スレッド以外のスレッドの命令が、プロセッサパイプラインの実行ユニットを使用して実行されるのを阻止するように構成されるスレッドハザード回路とを備える集積回路である。
【0009】
実装に関する以下の詳細な説明、添付の特許請求の範囲、および添付の図には、本開示のこれらの態様および他の態様が開示されている。
【図面の簡単な説明】
【0010】
本開示は、添付の図面と併せて読むと、以下の詳細な説明から最もよく理解される。これらの図面では、幾つかの図を通して同様の参照番号が同様の部分を指す。一般的な方法に従って、図面の様々な特徴が縮尺通りではないことが強調される。それどころか、これらの様々な特徴の寸法は、分かりやすくするために、任意に拡大または縮小されている。
【0011】
【
図1】コンピューティングシステム100の例の概略ブロック図である。
【0012】
【0013】
【0014】
【
図3】
図1のプロセッサメモリシステムの構成の例である。
【0015】
【
図4】セキュアなマルチスレッド実行の手法の例のフローチャートである。
【0016】
【
図5】動的に指定された機密命令を特別に処理して命令を実行するための集積回路の例のブロック図である。
【0017】
【
図6】動的に指定された機密命令を特別に処理して命令を実行する手法の例のフローチャートである。
【0018】
【
図7】プロセスの1つまたは複数の命令が機密命令として指定されたことを検出する手法の例のフローチャートである。
【0019】
【
図8】優先度のより高いプロセスを使用してプロセスの命令を機密に処理するための許可を更新する手法の例のフローチャートである。
【発明を実施するための形態】
【0020】
本明細書には、命令を機密として動的に指定するためのシステムおよび方法が記載されている。最近になってPortsmashなどのプロセッサに対するサイドチャネル攻撃が発見された。サイドチャネル攻撃とは、スパイが、実装されたアルゴリズム自体の弱点ではなく、実装の知識を使用して被害者エンティティに関する情報を発見できる攻撃である。例えば、スパイが、スパイ自体に関するタイミング情報を測定することにより、コンピュータシステム内の被害者プロセス上で実行されている命令を発見できる場合は、サイドチャネル攻撃と見なされる。
【0021】
場合によっては、被害者は、どの命令またはコードのどのセクションがサイドチャネル攻撃を受けやすい状態にあり得るか、もっと厳密に言えば、どの命令またはコードが、攻撃された場合に深刻な害を及ぼすかを、実行可能に指定することができる。AES暗号化命令は、係るクラスの命令の例である。
【0022】
通常、オペレーティングシステムまたはハイパーバイザはリソース割り当てを処理し、プロセッサでポリシ決定を行うが、ハードウェアはプリミティブを提供している場合がある。例えば、オペレーティングシステムはメモリページを割り当てる方法を決定するが、ハードウェアは仮想メモリのプリミティブを提供する。同様に、セキュリティは、OS/ハイパーバイザが「機密」の命令およびコードを保護する方法を決定する同様の問題として見なされ得る。ハードウェアは、それをサポートするためのプリミティブを提供することができる。
【0023】
本開示では、ソフトウェアが特定の命令を機密または非機密として指定し得る方法について説明する。命令が機密であるかどうかは、特権レベルのより低いプロセスにより要求が行われた後で、特権レベルのより高いプロセスによるものである。例えば、ARMでは、EL0ユーザプロセスが、命令を機密としてマークするように要求することができる。しかしながら、ハードウェアによって命令を機密としてマークできる場合は、これは、悪意のある目的(例えば、コンピューティングシステムの速度を落とすこと)に使用され得る。この問題に対処するために、命令が機密としてマークされ得るかどうかは、特権レベルのより高いソフトウェアプロセス(例えば、ハイパーバイザプロセス)により制御され得る。
【0024】
命令を機密命令としてマークする複数の異なる方法が採用されてよく、これは上位レベルのソフトウェアによるものである。第1メカニズムは、全ての命令において更なるビットを使用する。従って、全ての命令が機密または非機密として独立して指定され得る。ソフトウェアは、命令のどちらのバージョンも発行することができる。特権レベルのより低い実行プロセスの機密命令がそのようなものとして認識されるかどうかを上位レベルのソフトウェアが指定する別個のシステム制御レジスタが存在し得る。例えば、システム制御レジスタビットが設定されていない場合は、ハードウェアは命令を機密として認識することができず、命令の実行を保護するために実行の制約を呼び出さないであろう。例えば、システム制御レジスタビットが設定されている場合は、ハードウェアは、機密命令を含むプロセスのセキュリティを強化するのに役立つ制約に従って、命令を機密命令として実行することができる。
【0025】
第2メカニズムは、命令サブシーケンス(例えば、命令領域)を機密として指定することができる。下位レベルのソフトウェアは、アップコールを行ってシステム制御ビットを設定することができ、これは、後続の全ての命令が機密であることを示す。上位レベルのソフトウェアによってビットを設定できる場合は、ハードウェアは適切な措置を取る。その後、下位レベルのソフトウェアは、別のアップコールを行ってビットを設定解除(unset)することができる。
【0026】
本明細書に記載のシステムおよび手法は、例えば、ポリシ(ソフトウェアにより実装される)とプリミティブ(ハードウェアにより実装される)との間の明確な区別を提供することで、ハードウェアがソフトウェアの機密命令指定に基づいて適切な保護を提供できるようにする、および/または、ソフトウェアがハードウェアにフィードバックを提供して適切な保護メカニズム(例えば、実行の制約を呼び出すこと)を実行できるようにするなど、従来のシステムおよび手法に勝る利点を提供することができる。
【0027】
本明細書では、セキュアなマルチスレッド実行のためのシステムおよび方法について説明する。最近になって同時マルチスレッディング(SMT)プロセッサに対するサイドチャネル攻撃が発見された。サイドチャネル攻撃とは、スパイが、実装されたアルゴリズム自体の弱点ではなく、実装の知識を使用して被害者エンティティに関する情報を発見できる攻撃である。例えば、スパイが、スパイ自体に関するタイミング情報を測定することにより、コンピュータシステム内の被害者プロセス上で実行されている命令を発見できる場合は、サイドチャネル攻撃と見なされる。
【0028】
SMTプロセッサは、複数のハードウェアスレッドが同じ物理プロセッサコア内で実行できるマルチスレッドプロセッサのクラスである。例えば、Intel Xeonは、SMT処理の形態であるハイパースレッディングをサポートする。SMTスレッドの同時実行は、複数のスレッドからの命令をパイプラインに入力し、実行ユニットで同時に実行できることを示唆する。SMT処理の利点は、1つのスレッドにより使用されていないアイドルスロットを他のスレッドで埋めて使用できるため、性能が向上することである。
【0029】
しかしながら、Portsmashと呼ばれる新しいクラスのサイドチャネル攻撃がSMTプロセッサで開示されている。係る攻撃において、スパイプロセスは、自らの実行のタイミングをとることにより被害者に関する情報を発見する。例えば、被害者プロセスが、2つの命令、すなわちVICTIM0およびVICTIM1のうちの1つのみをループで実行するとする。また、VICTIM0は実行ユニット0(port0と呼ばれる)でのみ実行でき、VICTIM1は実行ユニット1(port1と呼ばれる)でのみ実行できると仮定する。同様に、スパイは命令SPY0およびSPY1を実行できると仮定する。同様に、SPY0はport0で実行され、SPY1はport1で実行される。簡略化するために、この例では、被害者がVICTIM0のみを継続的に実行するか、またはVICTIM1のみを継続的に実行すると仮定する。
【0030】
問題は、被害者プロセスがこれら2つの命令のうちのどちらを実行しているかをスパイが把握できるかどうかであり、その答えはイエスである。方法はこの通りである。被害者がVICTIM0またはVICTIM1のどちらか一方を継続的に実行しているとする。スパイはまず、SPY0を継続的に実行し、時間t0を測定して、これらの命令を実行する。スパイは次に、同じ数のSPY1を継続的に実行し、時間t1を測定して、これらの命令を実行する。t0>t1の場合は、被害者がVICTIM0命令を実行していたことを意味する。t0<t1の場合は、被害者はVICTIM1命令を実行していた。これは、SPY0およびVICTIM0の両方がport0で実行されるためである。従って、VICTIM0が実行されていた場合は、SPY0を実行するのに、port1に行くSPY1よりも長い時間がかかる。
【0031】
上記は、Aldaya,A.C.,Brumley,B.B.,ul Hassan,S.,Garcia,C.P.,&Tuveri,N.(2018)Port Contention for Fun and Profit,IACR Cryptology ePrint Archive,2018,1060に記載されているより複雑な手法のより単純なバージョンであるが、基本は同じである。スパイプロセスは、被害者と同じポートをめぐって競合し得る命令を実行し、かつ、被害者が実行している可能性のあるアルゴリズムを発見するのにかかる時間を測定する。Brumleyらは、係るメカニズムを使用してP-384楕円曲線暗号を破る方法を示している。
【0032】
Portsmash攻撃を防止する1つのアプローチは、SMT処理を完全に無効にすることである。すなわち、物理コアで一度に実行できるスレッドが1つのみである。このアプローチでは、プロセッサの全機能を使用しないため、高い性能が達成されない。
【0033】
Portsmash攻撃を防止する別のアプローチは、パイプラインリソースの時間的または空間的なパーティショニングを採用することである。時間的なパーティショニングでは、プロセッサパイプラインが、一度に1つのスレッドによってのみ使用され得る。従って、スパイプロセスは、ポート競合を使用して、被害者プロセスとのポート競合が原因で起こり得る遅延の程度を測定することができない。空間的なパーティショニングでは、2つのスレッドからの命令が同じポート上で実行されないように、プロセッサパイプライン内の実行ユニット、および、場合によっては他のリソースが、スレッド間でハードパーティショニングされる。時間的なパーティショニングは、第1スレッドの実行時に第2スレッドからの命令がパイプラインに入るのを許可しないため、性能が最適以下である。特定の種類の実行リソースをサポートできるポートは1つのみであることが多いため、空間的なパーティショニングを設計するのは難しいかもしれない。空間的なパーティショニングには、同じ実行リソースのスレッドと同じ数のポートが必要である。
【0034】
本開示では、マルチスレッドプロセッサ(例えば、SMTプロセッサ)に対するこうしたサイドチャネル攻撃を防止する手法について説明する。
【0035】
本開示では、スレッドレベルの粒度を使用してリソースをパーティショニングする代わりに、命令レベルの粒度を使用してマルチスレッドパイプライン(例えば、SMTパイプライン)内のリソースをパーティショニングする。大まかに言うと、これらの手法には、1)命令(場合によっては、被害者プロセスにある)が「機密」であることを認識することが含まれ得る。機密命令は、秘密を暴露し得る命令であるかもしれない。機密命令の例には、Advanced Encryption Standard(AES)シングルラウンド復号またはAESシングルラウンド暗号化などが含まれ得る。
【0036】
2)機密命令がサイクルで実行される場合は、機密命令を実行している同じスレッドからの命令のみを実行ユニットで実行することができる。従って、上の例では、VICTIM0またはVICTIM1が実行されるとき、SPY0またはSPY1を実行するのに同じくらい長い時間がかかる(t0~=t1)。
【0037】
通常、プロセッサパイプラインの発行およびディスパッチロジックは、実行ユニット内のポートに命令が発行され得るかどうかを判断する。この決定は、構造上のハザード、制約、およびRAW(リードアフターライト)の依存を解決することを含み得る。幾つかの実装では、発行ロジックが新しい「スレッドハザード」を更に解決するようになる。これは、機密命令が1つのスレッドから実行されるように選択された場合は、他のスレッドからの命令を、機密命令が実行されている1つまたは複数のサイクルで同時に実行できないことを示す新しいルールである。
【0038】
幾つかの実装は、平均命令スループットの観点から見て高い性能を維持しながらサイドチャネル攻撃(例えば、Portsmash攻撃)を防止するなど、以前のシステムに勝る利点を提供することができる。
【0039】
本明細書では、
図1から
図3に示されるように、セキュアなマルチスレッド実行の手法の更なる詳細について、それらが実装され得るシステムを初めに参照しながら説明する。
【0040】
図1は、コンピューティングシステム100の例の概略ブロック図である。コンピューティングシステム100は、少なくとも1つのプロセッサコア102を有する集積回路101を含み、少なくとも1つのプロセッサコア102は、単一の中央処理装置(CPU)またはマルチコアアーキテクチャ内の複数のプロセッサコアのうちの1つであり得る。マルチコアアーキテクチャでは、各プロセッサコア(または単に「コア」)が、関連付けられる回路を有する個々のCPUを含み得る。マルチコアアーキテクチャのこの例では、各プロセッサコア102が、プロセッサパイプライン104、1つまたは複数のレジスタファイル106、およびプロセッサメモリシステム108を含み得る。レジスタファイル106の各レジスタファイルは、個々にアドレス指定可能な1つまたは複数のレジスタを含み得る。
【0041】
各プロセッサコア102は、アンコア(uncore)110に接続され得る。アンコア110は、相互接続ネットワーク112および外部メモリシステム113を含み得る。相互接続ネットワーク112は、バス、クロスバースイッチ、メッシュネットワーク、または他の何らかの相互接続ネットワークであり得る。相互接続ネットワーク112は、各プロセッサコア102と外部メモリシステム113および/または入出力(I/O)ブリッジ114との間の通信を可能にし得る。
【0042】
I/Oブリッジ114は、I/Oバス116を介するような、ストレージデバイス118Aおよび他のI/Oデバイス118B~118Dを含む様々な異なるI/Oデバイスとの通信を可能にし得る。他のI/Oデバイス118B~118Dの非限定的な例には、ネットワークインタフェース、ディスプレイアダプタ、または、キーボードまたはマウスなどのユーザ入力デバイスが含まれ得る。
【0043】
ストレージデバイス118Aは、ディスクドライブまたは他の何らかの大容量ストレージデバイスであり得る。ストレージデバイス118Aは通常、不揮発性ストレージデバイスであり得る。幾つかの例では、ストレージデバイス118Aまたはその一部は、仮想メモリ方式で使用され得る。例えば、ストレージデバイス118Aの一部は、(通常、揮発性のおよび/または容量制限された)メインメモリの仮想メモリ方式で二次ストレージ(または「バッキングストア」)として機能し得る。メインメモリの例には、外部メモリシステム113との関連で以下に説明するような、プロセッサメモリシステム108または外部メモリシステムが含まれる。
【0044】
プロセッサメモリシステム108および外部メモリシステム113は共に、階層メモリシステムを形成する。階層は任意の数のレベルを含み得る。これらのレベルは、L1、L2、・・・LNと表示または称され得る。L1レベルはL2メモリシステムよりも下位レベルのメモリであり、次に、L2メモリシステムはL3メモリシステムよりも下位レベルであるなどである。通常、階層メモリシステムの各レベルは、すぐ下のレベルのメモリよりもアクセスが遅いメモリ(例えば、メモリシステム)を含み得る、および/または、階層メモリシステムの各レベルは、上位レベルのメモリよりもアクセスが速く、容量が制限され、および/または高価であるメモリ(例えば、メモリシステム)を含み得る。階層メモリシステムの各レベルは、キャッシュとして機能し得る。
【0045】
第1レベル(L1)のキャッシュが、プロセッサメモリシステム108内に(例えば、プロセッサメモリシステム108の一部で)あり得る。任意の数の上位レベル(L2、L3、・・・)のキャッシュが、外部メモリシステム113内にあり得る。外部メモリシステム113内の最高(すなわち、最後の)レベルのキャッシュは、最後のレベルのキャッシュ(LLC)と称され得る。ある例では、LLCがL2キャッシュであり得る。
【0046】
各レベルで、キャッシュは、命令をキャッシュするための命令キャッシュを提供する第1モジュールと、データをキャッシュするためのデータキャッシュを提供する第2モジュールとを含み得る。階層メモリシステムのあるレベルのメモリシステムは、命令またはデータのブロックをエントリ内にロードし、キャッシュブロック(キャッシュラインとも呼ばれる)を単位としてエントリから命令またはデータのブロックを排除(例えば、除去、上書きなど)することができる。キャッシュラインについては、
図3との関連で更に説明する。
【0047】
プロセッサメモリシステム108は、L1の命令キャッシュおよびデータキャッシュに加えて、最近の変換をキャッシュするためのトランスレーション・ルックアサイド・バッファ(TLB)と、L1の命令キャッシュもしくはデータキャッシュ内またはTLB内のミスを処理するための他の様々な回路とを含み得る。例えば、プロセッサコア102のプロセッサメモリシステム108内のその回路は、プロセッサパイプライン104内で実行されているストア命令から書き込まれる値を一時的に保持するための書き込みバッファを含み得る。TLBについては、
図3との関連で更に説明する。
【0048】
既に述べたように、外部メモリシステム113内の最高レベルのキャッシュは、LLC(LLC120など)である。LLC120は、メインメモリの直前にアクセス(例えば、検索など)され得る。言うまでもなく、これは単なる例である。他の例では、どのレベルのキャッシュがプロセッサメモリシステム108内にあるかと、どのレベルのキャッシュが外部メモリシステム113内にあるかとの間の正確な区分が異なり得る。例えば、L1キャッシュおよびL2キャッシュはどちらも、プロセッサコア102の内部に(すなわち、プロセッサメモリシステム108の一部で)あってよく、L3(およびそれよりも上位の)キャッシュは、プロセッサコア102の外部にあってよい。
【0049】
ある例では、各プロセッサコア102が自らの内部のL1キャッシュを含むことができ、プロセッサコアがL2キャッシュを共有することができる。外部メモリシステム113は、メインメモリコントローラ122を含むこともできる。メインメモリコントローラ122は、任意の数のメモリモジュール124に接続され得る。メモリモジュール124の各々は、メインメモリとして機能し得る(例えば、メインメモリであり得る)。ある非限定的な例では、メモリモジュール124のうちの1つまたは複数が、ダイナミックランダムアクセスメモリ(DRAM)モジュールであり得る。
【0050】
ある典型的な例では、メモリアドレスの内容が、階層メモリシステムのあるレベル(例えば、L1)で検索される。見つからない場合は、次の上位レベル(例えば、L2)が検索されるなどである。メモリアドレスを検索することは、階層メモリシステムのこのメモリレベルにメモリアドレスの内容が含まれているか、または代替的に、階層メモリシステムのこのメモリにメモリアドレスがキャッシュされているか、という質問に回答することを意味する。
【0051】
すなわち、階層メモリシステムの階層の特定のキャッシュレベルにおいて、各キャッシュエントリは、メモリブロックからの特定のワードがそのキャッシュレベルに存在する(すなわち、「ヒット」)か、そのキャッシュレベルに存在しない(すなわち、「ミス」)かを判断するためのビットと共に、特定のメモリブロックのデータワードを記憶するための空間を含む。1つのレベルにおけるミスの後、キャッシュシステムは、上位レベルのキャッシュからまたはメインメモリ(LLCにおけるミスの場合)からメモリブロックへのアクセス(すなわち、読み取りまたは書き込み)を試みる。
【0052】
プロセッサパイプライン104は、命令が一度に1サイクル前進する複数のステージを含み得る。これらのステージは、1つまたは複数の命令フェッチ(IF)ステージ、1つまたは複数の命令デコード(ID)ステージ、1つまたは複数のオペランドフェッチ(OF)ステージ、1つまたは複数の命令実行(IE)ステージ、および/または1つまたは複数のライトバック(WB)ステージを含み得る。パイプラインは、
図2Aおよび
図2Bとの関連で更に説明されるように、他のステージを含み得る。プロセッサパイプライン104は、プロセッサパイプラインの実行ユニットを使用して2つ以上のスレッドからの命令を並行して実行するように構成され得る。例えば、コア102は、同時マルチスレッディング(SMT)プロセッサであり得る。コア102は、パイプラインのフロントエンド部分で発生する幾つかのステージを含み得る。他の幾つかのステージは、パイプラインのバックエンド部分で発生する。フロントエンド部分は、実行前ステージを含み得る。パイプラインのバックエンド部分は、実行ステージおよび実行後ステージを含み得る。例えば、プロセッサパイプライン104は、
図2Aのプロセッサパイプライン220であり得る。例えば、プロセッサパイプライン104は、
図2Bのプロセッサパイプライン222であり得る。
【0053】
集積回路101は、第1スレッドの命令が機密命令として指定されたことを検出し、かつ、機密命令の検出に応答して、プロセッサパイプラインの実行ユニットにより機密命令が実行されている間、第1スレッド以外のスレッドの命令が、プロセッサパイプラインの実行ユニットを使用して実行されるのを阻止するように構成されるスレッドハザード回路を含み得る。例えば、スレッドハザード回路は、プロセッサパイプライン104の一部であってもよいし、プロセッサパイプライン104とインタフェースをとってもよい。幾つかの実装において、スレッドハザード回路は、多くの命令またはほとんどの命令の実行中にSMTプロセッサの性能優位性を維持しながら特定のサイドチャネル攻撃(例えば、Portsmash攻撃)を防止するのに役立ち得る。
【0054】
まず、命令が(例えば、1つまたは複数のIFステージで)フェッチされる。命令は、プログラムカウンタ(PC)に基づいてフェッチされ得る。PCは、メモリ内(例えば、メインメモリの一部内、またはコア102の命令キャッシュ内)の命令を識別するために使用され得るポインタである。PCは、コンパイルされた命令のブロック(「基本ブロック」と呼ばれる)のアドレスを介して前進することができる。PCは、特定のバイト数だけインクリメントされ得る。PCをインクリメントするための特定のバイト数は、各命令の長さ(例えば、バイト単位)と、一度にフェッチされる命令の数とに依存し得る。
【0055】
フェッチされた後、次に、命令は(例えば、1つまたは複数のIDステージで)デコードされて、演算と1つまたは複数のオペランドとを決定する。代替的に、幾つかのパイプラインでは、IFステージおよびIDステージが重複し得る。命令がオペランドを含む場合は、オペランドが(例えば、1つまたは複数のOFステージで)フェッチされる。
【0056】
次に、命令を発行する準備が整う。命令を発行すると、パイプラインのバックエンド部分におけるステージを介して命令の進行が開始されて、命令が実行される。ある例では、命令の実行は、命令の演算をオペランドに適用して、演算論理ユニット(ALU)命令の結果を生成することを含み得る。ある例では、命令の実行は、メモリ命令のメモリアドレスへのまたはメモリアドレスからの記憶またはロードを含み得る。ある例では、命令の実行は、条件分岐命令の条件を評価して、分岐を行うべきかどうかを判断することを含み得る。
【0057】
命令が実行を完了した後、命令をコミット(すなわち、リタイア)することで、命令のいかなる効果もソフトウェアでグローバルに見えるようにすることができる。命令をコミットすることは、例えば、(例えば、1つまたは複数のWBステージで)レジスタファイルに結果を記憶することを含み得る。ほとんどの実装では、いかなる命令がアウトオブオーダに発行されたとしても、全ての命令が概してインオーダにコミットされる。
【0058】
図2Aは、プロセッサパイプライン220の構成の例である。プロセッサパイプライン220は、プロセッサパイプラインの実行ユニットを使用して2つ以上のスレッドからの命令を並行して実行するように構成され得る。
【0059】
プロセッサパイプライン220は、様々なステージ(例えば、IFステージ、IDステージ、およびOFステージ)のための回路を含み得る。1つまたは複数の命令フェッチステージの場合は、命令フェッチ回路200が、
図1のプロセッサメモリシステム108などのプロセッサメモリシステム内の命令キャッシュにPCを提供して、プロセッサパイプライン220内に供給される(例えば、プロセッサパイプライン220に提供されるなど)命令をフェッチする(例えば、検索する、読み取るなど)。例えば、PCは、次の命令の仮想アドレスであってよく、この場合、PCは、順次実行の場合に(すなわち、分岐を全く行わずに)仮想アドレスの長さ分だけインクリメントされ得る。仮想アドレスについては、
図3との関連で説明する。
【0060】
命令フェッチ回路200は、分岐予測回路201にプログラムカウンタ、PCを提供することもできる。分岐予測回路201は、分岐命令の予測分岐結果203を提供するために使用され得る。予測分岐結果203によって、プロセッサパイプライン220は、実際の分岐結果204が決定されている間、投機的な実行を継続することができる。分岐予測回路201は、実際の分岐結果204の受信に基づいて更新される分岐履歴情報を記憶することもできる。幾つかの実装では、分岐予測回路201の幾つかまたは全てが命令フェッチ回路200の一部であると見なされ得る。
【0061】
アウトオブオーダ実行の例において、1つまたは複数の命令デコード(ID)ステージの場合は、命令デコード回路202が、発行待ちの命令ウィンドウ内の命令の発行キューに情報を記憶することができる。発行キュー(命令キューとも称され得る)とは、命令のオペランドが利用可能になるとキュー内の命令がキューから離れることができるようなものである。このように、命令は、プログラム内の以前の(例えば、古い)命令が実行される前に離れることができる。命令ウィンドウとは、アウトオブオーダに実行できる命令セットを指す。
【0062】
発行回路206は、発行キュー内の命令の各々が発行されるそれぞれのサイクルを決定することができる。命令を発行すると、その命令は、プロセッサパイプライン220の、第1実行ステージ208A、第2実行ステージ208B、および第3実行ステージ208Cなどの命令実行(IE)ステージの回路を介して進むために利用可能になる。説明を簡略化するために、
図2Aに示されている実行ステージは3つのみである。しかしながら、本明細書での開示はそのように限定されるものではなく、より多くの実行ステージまたはより少ない実行ステージが考えられる。
【0063】
集積回路101は、スレッドハザード回路230を含む。この例では、スレッドハザード回路230は、プロセッサパイプライン220の発行回路206の一部である。スレッドハザード回路230は、第1スレッドの命令が機密命令として指定されたことを検出し、かつ、機密命令の検出に応答して、プロセッサパイプライン220の実行ユニットにより機密命令が実行されている間、第1スレッド以外のスレッドの命令が、プロセッサパイプライン220の実行ユニットを使用して実行されるのを阻止するように構成され得る。
【0064】
幾つかの実装では、機密命令が静的に指定され得る(例えば、特定のタイプの命令が常に機密と見なされる)。例えば、スレッドハザード回路230は、命令のオペコードに基づいて機密命令を検出するように構成され得る。幾つかの実装では、機密命令が動的に指定され得る(例えば、命令が、フラグを使用してソフトウェアにより機密としてマークされ得る)。例えば、スレッドハザード回路230は、命令に含まれるフラグ(例えば、機密ビット)に基づいて機密命令を検出するように構成され得る。例えば、スレッドハザード回路230は、アーキテクチャレジスタ内のフラグに基づいて機密命令を検出するように構成され得る。
【0065】
実行中のアプリケーションに応じて、様々な異なる命令が機密として見なされ得る。例えば、機密命令は、暗号命令であり得る。例えば、機密命令は、AESシングルラウンド復号命令であり得る。例えば、機密命令は、AESシングルラウンド暗号化命令であり得る。
【0066】
プロセッサパイプライン220は、コミットステージ210などの1つまたは複数のコミットステージを含み得る。コミットステージは、IE状態208A、208B、および208Cを通り抜けた命令の結果をコミットする(例えば、メモリに書き込む)。例えば、コミットステージ回路217は、
図1のレジスタファイル106などのレジスタファイル内に結果をライトバックすることができる。しかしながら、幾つかの命令は、コミットステージ回路217によりコミットされない場合がある。代わりに、命令の結果は、場合によってはコミットステージからの情報に基づいて、バックエンドの別のステージまたはフロントエンドのステージ内の回路などの他の回路によりコミットされ得る。
【0067】
プロセッサパイプライン220の隣接するステージ間では、パイプライン回路を通る様々な経路がパイプラインレジスタを含む。例えば、
図2Aには、IEステージ208A、208B、および208Cのパイプラインレジスタ211が示されている。パイプラインレジスタは、次のステージへと下流に渡される上流ステージの結果を記憶するために使用され得る。パイプラインレジスタ211は、共通のクロック(不描写)によりクロックされ得る(すなわち、共通のクロックから導出されるクロック信号を受信することができる)。従って、各クロックサイクル、各パイプラインレジスタ211(ラッチ、またはフリップフロップのセットとも呼ばれる)は、入力から出力に結果を渡し、その結果がそのステージの回路により生成された後、入力で新しい結果を受信する準備を整えることができる。
【0068】
IEステージには、複数の別個の経路が存在し得る。IEステージは、異なるタイプの命令を実行するための様々な回路を含み得る。説明のために、
図2Aには、2つの経路212Aおよび212Bのみが示されている。しかしながら、実行ステージは、対応する回路を有する任意の数の経路を含むことができ、パイプラインレジスタ211などのパイプラインレジスタにより分離され得る。
【0069】
命令実行ステージを通る経路の数は概して、特定のアーキテクチャに依存し得る。ある例では、最大数の命令までの幾つかの命令が同じサイクルで同じ実行ステージを進むことができるように、十分な経路が含まれ得る。同じサイクルで同じ実行ステージを進むことができる命令の最大数は、発行幅と称され得る。
【0070】
所与の経路の機能回路を含むステージの数も異なり得る。
図2Aの例では、第1経路212Aは、第1実行ステージ208A、第2実行ステージ208B、および第3実行ステージ208Cにそれぞれ配置される機能回路214A、214B、および214Cを含む。第2経路212Bは、第1実行ステージ208Aおよび第2実行ステージ208Bにそれぞれ配置される機能回路216Aおよび216Bを含む。第2経路212Bでは、第3実行ステージ208Cが、更なる計算を実行せずに結果を渡す「サイロステージ」であるため、各経路が、パイプラインを介して同じ数のステージを通過することが保証される。
【0071】
ある例では、ある経路が、様々な演算用のユニット(例えば、ALU、乗算器、浮動小数点ユニットなど)を使用して命令を実行するための回路を含み得る。ある例では、別の経路が、メモリアクセス命令を実行するための回路を含み得る。メモリアクセス命令は、メモリシステムからデータ値を読み取るロード命令を含み得る。メモリアクセス命令は、メモリシステムにデータ値を書き込むためのストア命令を含み得る。メモリアクセス命令を実行するための回路は、
図3との関連で以下により詳細に説明するように、必要に応じて仮想アドレスの物理アドレスへの変換を開始することもできる。
【0072】
分岐予測に加えて、分岐予測回路201との関連で説明するように、プロセッサパイプライン220は、他のタイプの投機的実行を行うするように構成され得る。別のタイプの投機的実行の例では、プロセッサパイプライン220は、プリフェッチすることにより(キャッシュミスの場合などに)ストールする可能性を減らすように構成され得る。ストールとは、プロセッサによる命令の実行が停止/一時停止する状況を指す。
【0073】
プリフェッチ要求を使用して(例えば、データキャッシュの)キャッシュレベルをプリロードすることができるため、将来のメモリ要求は、そのキャッシュレベルでヒットする可能性が高く、より高いキャッシュレベルまたはメインメモリにアクセスする必要がない。例えば、投機的メモリアクセス要求は、予測されたアクセスパターンに基づいて命令キャッシュまたはデータキャッシュをプリロードするために送信されるプリフェッチ要求を含み得る。
【0074】
プリフェッチ要求は、プロセッサパイプライン220に挿入される明示的なプリフェッチ命令が、プリフェッチされる特定のアドレスを含むようなソフトウェアプリフェッチ要求であってもよいし、当該ソフトウェアプリフェッチ要求を含んでもよい。プリフェッチ要求は、パイプライン(例えば、プロセッサパイプライン220)に明示的なプリフェッチ命令が挿入されることなくプロセッサ(例えば、プロセッサコア102)内のハードウェアにより実行されるハードウェアプリフェッチであってもよいし、当該ハードウェアプリフェッチを含んでもよい。
【0075】
場合によっては、プリフェッチすることは、プログラムのメモリアクセス内のパターン(例えば、ストリーム)を認識することを含んでもよいし、プログラム内のロード命令を、そのロード命令がプログラム実行の一部として実際に発行される前に、(例えば、そのロード命令の投機的アドレスを使用して)投機的に実行することを含んでもよい。
【0076】
様々なタイプの外部命令が他のプロセッサコアから受信され得る。外部から受信された係る命令は、発行回路206によりプロセッサパイプライン220に挿入されて、適切なステージで処理され得る。外部から受信された係る命令の例には、その特定のプロセッサコア(すなわち、受信コア)のTLB内のエントリを無効にするためのTLB無効化(TLBI)命令がある。受信され得る外部命令の別の例には、GlobalSync命令がある。GlobalSync命令は、前にブロードキャストされたいかなるTLBIの効果も完了したことを保証するために、プロセッサコアにより実行されるメモリバリア操作の副作用としてプロセッサコアにブロードキャストされ得る。言い換えると、ブロードキャストTLBI命令を発行する発信元プロセッサコアがその後データ同期バリア(DSB)命令を発行することができるため、次に、他の全てのプロセッサコアによりGlobalSync命令が受信される。GlobalSync命令に応答して、受信プロセッサコアがTLBI命令を完了すると、受信プロセッサコアは、発信元プロセッサコアに確認応答を送信するか、または発信元プロセッサコアへ確認応答を送信させる。発信元プロセッサコアが全ての受信プロセッサコアから確認応答を受信すると、発信元プロセッサコアは、命令実行を進めることができる。場合によっては、外部命令によって、実行中のプログラムへの割り込みが発生し得る。
【0077】
図2Bは、プロセッサパイプライン222の構成の例である。プロセッサパイプライン222は、プロセッサパイプラインの実行ユニットを使用して2つ以上のスレッドからの命令を並行して実行するように構成され得る。
【0078】
プロセッサパイプライン222は、様々なステージ(例えば、IFステージ、IDステージ、およびOFステージ)のための回路を含み得る。1つまたは複数の命令フェッチステージの場合は、命令フェッチ回路200が、
図1のプロセッサメモリシステム108などのプロセッサメモリシステム内の命令キャッシュにPCを提供して、プロセッサパイプライン222内に供給される(例えば、プロセッサパイプライン222に提供されるなど)命令をフェッチする(例えば、検索する、読み取るなど)。例えば、PCは、次の命令の仮想アドレスであってよく、この場合、PCは、順次実行の場合に(すなわち、分岐を全く行わずに)仮想アドレスの長さ分だけインクリメントされ得る。仮想アドレスについては、
図3との関連で説明する。
【0079】
命令フェッチ回路200は、分岐予測回路201にプログラムカウンタ、PCを提供することもできる。分岐予測回路201は、分岐命令の予測分岐結果203を提供するために使用され得る。予測分岐結果203によって、プロセッサパイプライン222は、実際の分岐結果204が決定されている間、投機的な実行を継続することができる。分岐予測回路201は、実際の分岐結果204の受信に基づいて更新される分岐履歴情報を記憶することもできる。幾つかの実装では、分岐予測回路201の幾つかまたは全てが命令フェッチ回路200の一部であると見なされ得る。
【0080】
アウトオブオーダ実行の例において、1つまたは複数の命令デコード(ID)ステージの場合は、命令デコード回路202が、発行待ちの命令ウィンドウ内の命令の発行キューに情報を記憶することができる。発行キュー(命令キューとも称され得る)とは、命令のオペランドが利用可能になるとキュー内の命令がキューから離れることができるようなものである。このように、命令は、プログラム内の以前の(例えば、古い)命令が実行される前に離れることができる。命令ウィンドウとは、アウトオブオーダに実行できる命令セットを指す。
【0081】
発行回路240は、発行キュー内の命令の各々が発行されるそれぞれのサイクルを決定することができる。命令を発行すると、その命令は、プロセッサパイプライン222の、実行ステージ250などの命令実行(IE)ステージの回路を介して進むために利用可能になる。説明を簡略化するために、
図2Bに示されている実行ステージは1つのみである。しかしながら、本明細書での開示はそのように限定されるものではなく、より多くの実行ステージまたはより少ない実行ステージが考えられる。
【0082】
レジスタ読み取り回路242は、レジスタ値が、実行ステージ250で命令を実行するための入力引数として使用するために利用可能になると、これらのレジスタ値を(例えば、1つまたは複数のレジスタファイル106から)読み取るように構成され得る。
【0083】
ディスパッチ回路244は、実行のために、実行ステージ250の実行ユニット(例えば、260、262、264、266、または268)のうちの1つに命令を割り当てるように構成され得る。例えば、ディスパッチ回路244は、実行ユニットの利用可能性、および、命令タイプと実行ユニットのタイプとの間の一致に基づいて、実行ユニットを選択することができる。
【0084】
実行ステージ250は、並行して使用され得る複数の実行ユニット(例えば、260、262、264、266、および268)を含む。命令タイプに応じて、実行ユニット(例えば、260、262、264、266、および268)のうちの1つで命令を実行するには、1つまたは複数のクロックサイクルを要する場合がある。この例では、実行ユニット260が演算論理ユニット(ALU)であり、実行ユニット262がロード・ストアユニット(LSU)であり、実行ユニット264が浮動小数点ユニット(FPU)であり、実行ユニット266が暗号実行ユニットであり、実行ユニット268が別の演算論理ユニット(ALU)である。例えば、所与のクロックサイクルで実行ステージ250の異なる実行ユニットで2つの命令を実行することにより、プロセッサパイプライン222は、これら2つの命令を並行して実行することができる。
【0085】
レジスタ書き込み回路270は、値が実行ステージ250で実行ユニット(例えば、260、262、264、266、または268)の出力として利用可能になると、これらの値を(例えば、1つまたは複数のレジスタファイル106から)宛先レジスタに書き込むように構成されされ得る。
【0086】
集積回路101は、スレッドハザード回路280を含む。この例では、スレッドハザード回路280は、プロセッサパイプライン222のディスパッチ回路244の一部である。スレッドハザード回路280は、第1スレッドの命令が機密命令として指定されたことを検出し、かつ、機密命令の検出に応答して、プロセッサパイプライン220の実行ユニットにより機密命令が実行されている間、第1スレッド以外のスレッドの命令が、プロセッサパイプライン220の実行ユニットを使用して実行されるのを阻止するように構成され得る。
【0087】
幾つかの実装では、機密命令が静的に指定され得る(例えば、特定のタイプの命令が常に機密と見なされる)。例えば、スレッドハザード回路280は、命令のオペコードに基づいて機密命令を検出するように構成され得る。幾つかの実装では、機密命令が動的に指定され得る(例えば、命令が、フラグを使用してソフトウェアにより機密としてマークされ得る)。例えば、スレッドハザード回路280は、命令に含まれるフラグ(例えば、機密ビット)に基づいて機密命令を検出するように構成され得る。例えば、スレッドハザード回路280は、アーキテクチャレジスタ内のフラグに基づいて機密命令を検出するように構成され得る。
【0088】
実行中のアプリケーションに応じて、様々な異なる命令が機密として見なされ得る。例えば、機密命令は、暗号命令であり得る。例えば、機密命令は、AESシングルラウンド復号命令であり得る。例えば、機密命令は、AESシングルラウンド暗号化命令であり得る。
【0089】
図3は、
図1のプロセッサメモリシステム108の構成の例である。
図3に示される例では、プロセッサメモリシステム108は、メモリシステムへのアクセスを管理するメモリ管理ユニット(MMU)300を含む。MMU300は、仮想アドレスの物理アドレスへの変換を管理することができる。
【0090】
幾つかの実装では、MMU300は、所与の仮想アドレスにおける記憶された値(例えば、データまたは命令)のコピーが、階層キャッシュシステムのレベルの何れか、例えば、L1キャッシュ301から必要に応じてLLC120(
図1)までのレベルの何れかに存在するかどうかを判断することができる。存在する場合は、その仮想アドレスにアクセスする命令は、そのアドレスに関連付けられる値のキャッシュされたコピーを使用して実行され得る。存在しない場合は、その命令は、メインメモリ302からの値にアクセスした後に実行されるミス回路により処理され得る。
【0091】
仮想アドレス(VA)から変換される物理アドレス(PA)を使用して、メインメモリ302、および、場合によってはキャッシュシステムの1つまたは複数のレベルにアクセスする必要があるかもしれない。この目的のために、プロセッサメモリシステム108は、VAからPAへのマッピングにより定義される変換を記憶するTLB304と、TLB304で変換が見つからない場合にページテーブル308にアクセスするためのページテーブルウォーカ306とを含み得る。TLBに記憶される変換は、最近アクセスされた変換、アクセスされた可能性が高い変換、他の幾つかのタイプの変換、またはそれらの組み合わせを含み得る。
【0092】
ページテーブル308は、現在使用されているVAからPAへのマッピングの全てを含む、ページテーブルエントリ(PTE)310を含むエントリを記憶することができる。ページテーブル308は通常、二次ストレージ(例えば、
図1のストレージデバイス118A)から「ページイン」された対応するマッピングされた仮想メモリページを表す物理メモリページと共に、メインメモリ302に記憶され得る。ページフォールトを引き起こすページテーブル内の係るミスは、プログラムの実行中に発生し得る割り込みの別の例である。
【0093】
メモリページは、幾つかのキャッシュブロックを含み得る。キャッシュブロックは、幾つかのワードを含み得る。ワードは、所定の数のバイト(例えば、2バイト)である。バイトは、1つの単位として演算され得るビット(例えば、8ビット)のグループである。バイトは、メモリサイズの単位と見なされ得る。
【0094】
代替的に、ハイパーバイザにより管理される1つまたは複数のゲストオペレーティングシステムを有する仮想化システムでは、仮想アドレス(VA)が中間物理アドレス(IPA)に変換されてよく、次に、IPAが物理アドレス(PA)に変換される。仮想化システムでは、ゲストオペレーティングシステムによるVAのIPAへの変換が、ソフトウェアで完全に処理されてもよいし、ゲストオペレーティングシステムが、MMU300から何らかのハードウェア支援を受けてもよい。
【0095】
TLB304は、ページテーブル308から最近アクセスされたPTEをキャッシュするために使用され得る。最近アクセスされたPTEをキャッシュすると、ページテーブルウォーカ306が、ページテーブル308を記憶する複数レベルのデータ構造の潜在的にマルチレベルのページテーブルウォークを実行してPTE310を検索する必要なく、(ロード命令またはストア命令に応答するなどして)変換を実行することが可能になり得る。ある例では、ページテーブル308のPTE310は、仮想ページ番号312および物理ページ番号314を記憶することができ、これらの番号は共に、VAとそのVAの変換を定義するPAとの間のマッピングとして機能する。
【0096】
アドレス(すなわち、メモリアドレス)は、ビットの集合であり得る。メモリアドレスのビットは、下位ビットおよび上位ビットに分割され得る。例えば、32ビットアドレスを想定すると、メモリアドレスの例には、01101001 00101000 00001101 01011100がある。下位ビットが右端の16ビット(すなわち、00001101 01011100)であり、上位ビットが左端の16ビット(すなわち、01101001 00101000)である。メモリアドレスの下位ビットは、ページオフセットとして使用され得る。下位ビットは、VAとそのマッピングされたPAとで同一であり得る。従って、メモリアドレスの上位ビットは、マッピングを指定するためのメモリページ番号として使用され得る。
【0097】
PTE310は、ステータス情報(SI)316を含むこともできる。SI316は、ページがメインメモリ302に常駐しているかどうか、または、ページを二次ストレージから検索すべきかどうかを示すことができる。PTE310がTLB304の何れかのエントリに記憶されている場合は、ページテーブル308とTLB304との間のPTEの転送を管理するため、および、TLB304内のPTEを無効にするための追加情報も存在し得る。ある例では、TLB304内のPTEを無効にすることは、(エントリが有効であるかどうかを示す)ビットを、エントリが無効であることを示す状態(すなわち、2進状態)に切り替えることにより達成され得る。しかしながら、PTEを無効にする他の方法も考えられる。
【0098】
変換されるVAの一部と一致するTLB304内の有効なエントリが見つかった(すなわち、「TLBヒット」)場合は、そのエントリに記憶されているPTEが変換に使用される。一致がない(すなわち、「TLBミス」)場合は、ページテーブルウォーカ306は、ページテーブル308のレベルをトラバース(または「ウォーク」)して、PTEを検索することができる。
【0099】
L1キャッシュ301は、任意の数の考えられる方法で実装され得る。
図3に示される実装では、L1キャッシュ301は、Nウェイセットアソシアティブキャッシュモジュールとして実装されるものとして示されている。L1キャッシュ301の各キャッシュエントリ320は、メインメモリ302内の物理ページから(場合によっては、上位レベルのキャッシュモジュールを介して)コピーされた特定のキャッシュブロック324を記憶するためのビットを含み得る。
【0100】
キャッシュエントリ320は、タグ322を記憶するためのビットを含むこともできる。タグ322は、そのエントリのワードに共通である、仮想アドレスの幾つかの最上位ビットで構成され得る。仮想インデックス付き・仮想タグ付き(VIVT)タイプのキャッシュモジュールの場合は、キャッシュモジュールは、所望のデータの仮想アドレスのタグ部分を比較することに加えて、仮想アドレスのインデックス部分(タグとブロックオフセットとの間の中間ビットで構成され得る)を比較することで、複数のセットのうちのどれが、それらの所望のデータを含むキャッシュエントリを有し得るかを判断することができる。
【0101】
Nウェイセットアソシアティブキャッシュの場合は、タグ比較は、選択された「セット」(i)に対してN回(場合によっては、並行して)実行され得る。比較は、所望のデータを含むキャッシュブロックが記憶され得るN個の「ウェイ」の各々に対して1回ずつ実行され得る。
【0102】
次に、ブロックオフセットは、キャッシュエントリで見つかった(すなわち、「キャッシュヒット」)キャッシュブロックから特定のワードを選択するために使用され得る。選択されたセットの方法の何れについてもタグが一致しない(すなわち、「キャッシュミス」)場合は、キャッシュシステムは、上位レベルのキャッシュからまたはメインメモリ302(LLCの場合)からキャッシュブロックの検索を試みることができる。キャッシュエントリ320は、ステータス情報326を記憶するためのビットを含むこともできる。ステータス情報326は、例えば、有効なビットおよび/または任意のフラグもしくはエラー訂正ビットを含み得る。
【0103】
特定の仮想アドレスから特定の物理アドレスまたは中間物理アドレスへの変換を確立すると、様々なタイプのコンテキスト情報を使用して、他の点では同一の仮想アドレスを互いに区別することができる。このコンテキスト情報によって、異なるプロセスもしくは異なる仮想マシン、または、異なる仮想アドレス空間をサポートする他の様々な区別特性の何れかに対して、複数の独立した仮想アドレス空間が存在することが可能になり得る。
【0104】
コンテキスト情報の様々な部分を使用して、異なるVAからPAへの変換において使用されている仮想アドレス間の区別をすることができる、または、中間物理アドレス(IPA)が使用される場合は、VAからIPAへの変換またはIPAからPAへの変換において使用されている仮想アドレス間の区別をすることができる。
【0105】
例えば、オペレーティングシステムは、アドレス空間識別子(ASID)(例えば、16ビット)を使用して、実行中のプロセスに関連付けられるメモリ空間(仮想アドレス空間)を識別することができる。ハイパーバイザは、仮想マシン識別子(VMID)(例えば、16ビット)を使用して、仮想マシンのゲストオペレーティングシステムに関連付けられるメモリ空間(すなわち、中間物理アドレス空間)を識別することができる。
【0106】
例えば、セキュア(S)または非セキュア(NS)の値を用いるセキュリティ状態、またはEL0~EL3(2ビットの例外レベルの場合)の値を用いる例外レベル(「優先レベル」とも呼ばれる)など、特定のパラメータが、アーキテクチャで利用可能な複数の異なるクラスのプロセスまたはソフトウェア環境に関連付けられ得る。
【0107】
このコンテキスト情報の全てまたはサブセットが共に、特定の仮想アドレスのコンテキスト(「変換コンテキスト」または「ソフトウェアコンテキスト」とも呼ばれる)を構成する。
【0108】
コンテキスト識別子(CID)は、完全なコンテキスト情報または部分的なコンテキスト情報のどちらか一方を表すことができる。幾つかのアーキテクチャにおいて、例えば、完全なコンテキスト情報は、35ビット、すなわち、2ビットの例外レベル(EL)と、1ビットの非セキュア/セキュア(NS/S)値と、16ビットのVMIDと、16ビットのASIDとを含み得る。
【0109】
とは言え、複数の異なるCIDの有効性を追跡するデータ構造のストレージに当てられた集積回路領域の観点から見て大幅なオーバヘッドが存在する可能性のあり得ることに留意されたい。オーバヘッドを減らすために、CIDは、16ビットのVMIDおよび2ビットのELのみなど、部分的なコンテキスト情報を含み得る。係る部分的なコンテキスト情報は、コンテキストの複数の異なるサブセットを一意に識別することができる。代替的に、完全なコンテキスト情報からビットのサブセットを単に連結する代わりに、完全なコンテキスト情報をより少ないビットに本質的に圧縮する手法が使用され得る。例えば、CIDを計算する回路は、完全なコンテキスト情報よりも少ないビットを含むように構成されされ得る。これらのビットは、CIDと対応する完全なコンテキスト情報文字列との間の記憶されたマッピングに基づいて割り当てられ得る。
【0110】
マッピング自体は集積回路上の空間を取るが、複数の異なるアクティブなCIDの有効性を追跡するデータ構造においてより多くの空間が節約され得る。コンテキスト情報を圧縮する手法に関する更なる詳細は、例えば、参照により本明細書に組み込まれる「MANAGING TRANSLATION INVALIDATION」と題する米国特許第9,779,028号に見つけることができる。
【0111】
図4は、セキュアなマルチスレッド実行の手法400の例のフローチャートである。この手法は、メモリからプロセッサパイプライン内に第1スレッドの命令をフェッチする段階410と、命令が機密命令として指定されたことを検出する段階420と、機密命令の検出に応答して、プロセッサパイプラインの実行ユニットによる機密命令の実行中に、プロセッサパイプライン内の第1スレッド以外のスレッドの命令の実行を無効にする段階430と、プロセッサパイプラインの実行ユニットを使用して機密命令を実行する段階440と、機密命令の実行の完了に応答して、プロセッサパイプライン内の第1スレッド以外のスレッドの命令の実行を有効にする段階450と、処理パイプラインの実行ユニットを使用して、第1スレッドの第2命令と並行して第2スレッドの命令を実行する段階460とを含む。例えば、手法400は、
図1の集積回路101を使用して実装され得る。例えば、手法400は、
図2Aのプロセッサパイプライン220を使用して実装され得る。例えば、手法400は、
図2Bのプロセッサパイプライン222を使用して実装され得る。
【0112】
手法400は、メモリから(例えば、プロセッサメモリシステム108を介して)、プロセッサパイプラインの実行ユニットを使用して2つ以上のスレッドからの命令を並行して実行するように構成されるプロセッサパイプライン(例えば、プロセッサパイプライン104)内に、第1スレッドの命令をフェッチする段階410を含む。例えば、プロセッサパイプラインは、同時マルチスレッディングプロセッサに含まれ得る。
【0113】
手法400は、命令が機密命令として指定されたことを検出する段階420を含む。幾つかの実装では、機密命令が静的に指定され得る(例えば、特定のタイプの命令が常に機密と見なされる)。例えば、機密命令は、命令のオペコードに基づいて検出420され得る。幾つかの実装では、機密命令が動的に指定され得る(例えば、命令が、フラグを使用してソフトウェアにより機密としてマークされ得る)。例えば、機密命令は、命令に含まれるフラグ(例えば、機密ビット)に基づいて検出420され得る。例えば、機密命令は、アーキテクチャレジスタ内のフラグに基づいて検出420され得る。例えば、
図6の手法600は、命令が機密命令として指定されたことを検出420するように実装され得る。
【0114】
実行中のアプリケーションに応じて、様々な異なる命令が機密として見なされ得る。例えば、機密命令は、暗号命令であり得る。例えば、機密命令は、AESシングルラウンド復号命令であり得る。例えば、機密命令は、AESシングルラウンド暗号化命令であり得る。
【0115】
手法400は、機密命令の検出に応答して、プロセッサパイプラインの実行ユニットによる機密命令の実行中に、プロセッサパイプライン内の第1スレッド以外のスレッドの命令の実行を無効にする段階430を含む。幾つかの実装において、プロセッサパイプライン内の第1スレッド以外のスレッドの命令の実行を無効にする段階430は、第1スレッド以外のスレッドの命令の発行を阻止する段階を含む。幾つかの実装において、プロセッサパイプライン内の第1スレッド以外のスレッドの命令の実行を無効にする段階430は、第1スレッド以外のスレッドの命令のディスパッチを阻止する段階を含む。例えば、第1スレッド以外のスレッドの命令の実行を無効にする段階430では、機密命令により使用されるポートの遅延を増やすだけではなく、全てのポート(すなわち、プロセッサパイプラインの実行ユニット)で均一な遅延が発生し得る。従って、第1スレッド以外のスレッドの命令の実行を無効にする段階430では、機密命令の実行中に複数のスレッドからの命令の並列実行が防止され得るため、第1スレッドに対する特定のサイドチャネル攻撃(例えば、Portsmash攻撃)が防止され得る。
【0116】
手法400は、プロセッサパイプラインの実行ユニットを使用して機密命令を実行する段階440を含む。実行ユニット(例えば、実行ユニット260、実行ユニット262、実行ユニット264、実行ユニット266、または実行ユニット268)を使用して機密命令を実行する段階440は、1つまたは複数のクロックサイクルを要する場合がある。例えば、幾つかの命令(例えば、平方根命令または特定の暗号命令)は、実行を完了するのに複数のクロックサイクルを要する場合がある。
【0117】
手法400は、機密命令の実行の完了に応答して、プロセッサパイプライン内の第1スレッド以外のスレッドの命令の実行を有効にする段階450を含む。機密命令の完了後に第1スレッド以外のスレッドの命令の実行を有効にする段階450では、プロセッサパイプライン内の発行/ディスパッチロジックが制約される時間が制限され得る。
【0118】
手法400は、処理パイプラインの実行ユニットを使用して、第1スレッドの第2命令と並行して第2スレッドの命令を実行する段階460を含む。機密命令が実行されていないときに異なるスレッドからの命令を並行して実行できるようにすることで、命令スループットの観点からより優れた性能が達成され得る。なぜなら、それによって、プロセッサパイプラインの実行ユニットの利用率が増加し得るからである。こうした性能の向上は、複数の異なるスレッドがパイプラインの実行ステージ(例えば、実行ステージ250)を共有している間、機密命令が現在実行されていないことが分かっている場合に、セキュリティを実質的に損なうことなく達成され得る。
【0119】
説明を簡略化するために、手法400は、一連のブロック、段階、または動作として描写および記載されている。しかしながら、本開示に係るブロック、段階、または動作は、様々な順序でおよび/または同時に起こり得る。更には、本明細書に提示および記載されていない他の段階または動作も使用され得る。更には、開示されている主題に係る手法を実装するために、示されている全ての段階または動作が必要とされるわけではないかもしれない。
【0120】
図5は、動的に指定された機密命令を特別に処理して命令を実行するための集積回路500の例のブロック図である。例えば、機密処理イネーブルインジケータが使用され得る。この例では、機密処理イネーブルインジケータは、単一のビットとして表されているが、他の例では、任意の数のビット、または他の情報表現を使用することができる。集積回路500は、プロセッサコア510を含む。プロセッサコア510は、プロセッサパイプライン104と、プロセッサメモリシステム108と、機密処理イネーブルビット522を含むプロセスステータスレジスタ520とを有する。機密処理イネーブルビット522は、関連付けられるプロセスが、当該プロセスが機密として指定している特定の命令(例えば、暗号命令)のための制約に従った特別な実行を利用することを許可されているかどうかを示すことができる。この制約によって、制約を呼び出すプロセスのセキュリティ(例えば、サイドチャネル攻撃からの保護)の強化と引き換えに、プロセッサコア510の性能が低下する場合がある。性能障害を低下させ、かつ、制約を悪用する攻撃を防止するために、機密処理イネーブルビット522の値は、集積回路500上で実行される優先度の高いプロセス(例えば、ハイパーバイザプロセス)により制御され得る。例えば、集積回路500は、
図6の手法600を実装するために使用され得る。
【0121】
集積回路500は、プロセッサパイプライン104を含み、プロセッサパイプライン104は、プロセッサパイプライン104の実行ユニットを使用して2つ以上のスレッドからの命令を並行して実行するように構成され得る。例えば、プロセッサパイプライン104は、同時マルチスレッディングプロセッサに含まれ得る。幾つかの実装では、この制約によって、プロセッサパイプライン104の実行ユニットにより機密命令が実行されている間、他のスレッドからの命令の並列実行が防止される。例えば、プロセッサパイプライン104は、
図2Aのプロセッサパイプライン220であり得る。例えば、プロセッサパイプライン104は、
図2Bのプロセッサパイプライン222であり得る。
【0122】
集積回路500は、機密処理イネーブルビット522を含むレジスタ520を有する。この例では、レジスタ520は、第1プロセスの状態を記憶するプロセス状態レジスタである。機密処理イネーブルビット522の値は、有効状態に対応する(すなわち、関連付けられるプロセスが制約に従った実行を許可される)か、または、無効状態に対応する(すなわち、関連付けられるプロセスが制約に従った実行を許可されない)ことができる。機密処理イネーブルビット522は、異なる実装においてアクティブローまたはアクティブハイとして解釈され得る。例えば、機密処理イネーブルビット522への書き込みアクセスは、優先度の高いプロセス(例えば、ハイパーバイザプロセスまたはオペレーティングシステムプロセス)に制限され得る。
【0123】
集積回路500は、レジスタ520にアクセスできるプロセッサコア510を含む。この例では、レジスタは、プロセッサコア510の一部である。プロセッサコアは、機密処理イネーブルビット522に基づく制約に従った特別な実行へのアクセスを制限するように構成され得る。プロセッサコア510は、個々の命令または命令シーケンスを機密命令として動的に指定できるように構成され得る。例えば、プロセッサコア510は、第1プロセスの第1命令が機密命令として指定されたことを検出し、機密処理イネーブルビットが有効になっているかどうかをチェックし、機密命令の検出および機密処理イネーブルビットの有効化に応答して、第1命令を実行するための制約を呼び出し、当該制約に従って第1命令を実行し、かつ、当該制約なしで第1プロセスの(例えば、機密として指定されなかった)第2命令を実行するように構成され得る。従って、許可されたプロセスによって、プロセッサコア510の性能へのいかなる悪影響も制限しながら、機密命令の特別な処理を慎重に適用してセキュリティを強化することが可能になり得る。
【0124】
幾つかの実装において、第1命令は、機密ビットを含み、プロセッサコア510は、第1命令の機密ビットを評価することにより、第1命令が機密命令として指定されたことを検出するように構成される。例えば、プロセッサコア510によりサポートされる命令セットは、命令セットの幾つかまたは全ての命令に機密ビットを含むことができ、命令セットを使用するソフトウェアは、アプリケーションのニーズに基づいて特定の命令の機密ビットを動的に設定することができる。例えば、プロセッサコア510は、第1命令をフェッチすることであって、命令は、第1命令が機密であることを示す機密ビットを含む、フェッチすることと、機密ビットと機密処理イネーブルビットの現在の値とに基づいて、第1命令を実行するための制約を呼び出すことと、当該制約に従って第1命令を実行することと、当該制約なしで(例えば、機密として指定されなかった)第2命令を実行することとを行うように構成され得る。
【0125】
幾つかの実装では、第1プロセスの命令シーケンスにおいて、第1命令の前には機密開始命令があり、第1命令の後には機密停止命令があり、プロセッサコア510は、機密開始命令の検出に基づいて、第1命令が機密命令として指定されたことを検出するように構成される。例えば、第1命令は、第1プロセスの命令シーケンスにおいて、直前に機密開始命令があり、かつ、直後に機密停止命令がある、命令サブシーケンスのメンバであってよく、プロセッサコア510は、制約に従って命令サブシーケンスの全てのメンバを実行するように構成され得る。例えば、
図7の手法700は、機密開始命令および機密停止命令を使用してソフトウェアにより指定される1つまたは複数の機密命令のサブシーケンスを検出するように実装され得る。
【0126】
プロセッサコア510は、第1プロセスよりも優先度の高い第2プロセスの命令に基づいて機密処理イネーブルビット522の値を更新するように構成され得る。例えば、第2プロセスは、ハイパーバイザプロセスであり得る。例えば、第2プロセスは、オペレーティングシステムプロセスであり得る。
【0127】
プロセッサコア510は、関連付けられる機密処理イネーブルビット522により示されるような許可がないプロセスについて、制約に従った実行の使用を防止することができる。例えば、許可がない第3プロセスの状態情報がレジスタ520にロードされると、第3プロセスが機密として指定した命令を、第3プロセスが制約を使用して実行するのを防止することができる。例えば、プロセッサコア510は、第3プロセスの第3命令が機密命令として指定されたことを検出し、機密処理イネーブルビット522が有効になっているかどうかをチェックし、かつ、機密処理イネーブルビット522の無効化に応答して、制約なしで第3プロセスの第3命令を実行するように構成され得る。
【0128】
図6は、動的に指定された機密命令を特別に処理して命令を実行する手法600の例のフローチャートである。手法600は、第1プロセスの第1命令が機密命令として指定されたことを検出する段階610と、機密処理イネーブルビットが有効になっているかどうかをチェックする段階620と、(段階625で)機密処理イネーブルビットが有効になっている場合は、機密命令の検出および機密処理イネーブルビットの有効化に応答して、第1命令を実行するための制約を呼び出す段階630と、当該制約に従って第1命令を実行する段階640と、当該制約なしで第1プロセスの第2命令を実行する段階660とを含む。例えば、手法600は、
図1の集積回路101を使用して実装され得る。例えば、手法600は、
図5の集積回路500を使用して実装され得る。
【0129】
手法600は、第1プロセスの第1命令が機密命令として指定されたことを検出する段階610を含む。例えば、第1命令は、暗号命令(例えば、AESシングルラウンド暗号化命令またはAESシングルラウンド復号命令)であり得る。幾つかの実装において、ソフトウェアは、命令の機密ビットを設定またはクリアすることにより、当該命令を機密として動的に指定することができる。例えば、第1命令が機密命令として指定されたことを検出する段階610は、第1命令に含まれる機密ビットを評価する段階を含み得る。幾つかの実装において、ソフトウェアは、制約に従って命令を実行する機密処理の開始および停止を示すための命令シーケンス内の特殊な命令(例えば、機密開始命令および機密停止命令)を使用して、命令サブシーケンスを機密として動的に指定することができる。例えば、第1プロセスの命令シーケンスにおいて、第1命令の前には機密開始命令があってよく、第1命令の後には機密停止命令があってよい。第1命令が機密命令として指定されたことは、機密開始命令の検出に基づいて検出610され得る。例えば、第1命令は、第1プロセスの命令シーケンスにおいて、直前に機密開始命令があり、かつ、直後に機密停止命令がある、命令サブシーケンスのメンバであってよく、制約に従って、命令サブシーケンスの全てのメンバが実行され得る。例えば、
図7の手法700は、第1プロセスの第1命令が機密命令として指定されたことを検出610するように実装され得る。
【0130】
手法600は、第1プロセスの状態を記憶するプロセス状態レジスタ内の機密処理イネーブルビットが有効になっているかどうかをチェックする段階620を含む。機密処理イネーブルビットの値は、有効状態に対応する(すなわち、関連付けられるプロセスが制約に従った実行を許可される)か、または、無効状態に対応する(すなわち、関連付けられるプロセスが制約に従った実行を許可されない)ことができる。幾つかの実装において、機密処理イネーブルビットは、アクティブローとして解釈され得る。幾つかの実装において、機密処理イネーブルビットは、アクティブハイとして解釈され得る。
【0131】
手法600は、(段階625で)機密処理イネーブルビットが有効になっている場合に、機密命令の検出および機密処理イネーブルビットの有効化に応答して、第1命令を実行するための制約を呼び出す段階630を含む。例えば、第1命令を実行するための制約を呼び出す段階630は、プロセッサコアのマイクロアーキテクチャ状態を更新して、プロセッサパイプライン(例えば、プロセッサパイプライン104)に、制約に従って第1命令を実行させる段階を含み得る。例えば、プロセッサパイプラインは、プロセッサパイプラインの実行ユニットを使用して2つ以上のスレッドからの命令を並行して実行するように構成されてよく、制約は、プロセッサパイプラインの実行ユニットにより第1命令が実行640されている間、他のスレッドからの命令の並列実行を防止することができる。
【0132】
手法600は、制約に従って第1命令を実行する段階640を含む。この制約によって、第1プロセスのセキュリティが強化される一方で、手法600を実装するプロセッサコアの性能が低下する場合がある。例えば、制約に従って第1命令を実行する段階640では、サイドチャネル攻撃(例えば、Portsmash攻撃)が防止または軽減され得る。
【0133】
手法600は、(段階625で)機密処理イネーブルビットが無効になっている場合に、第1プロセスに関連付けられる機密処理イネーブルビットの無効化に応答して、制約なしで第1プロセスの第1命令を実行する段階650を含む。例えば、制約なしで第1命令を強制的に実行する段階650では、手法600を実装するプロセッサコアの性能を保存し、かつ、命令の機密命令としての動的な指定を使用して悪意のあるプロセスによる攻撃を防止することができる。
【0134】
手法600は、制約なしで第1プロセスの第2命令(例えば、機密として指定されなかった命令)を実行する段階660を含む。制約なしで第2命令を実行する段階660では、手法600を実装する処理コアの性能が保存され得る。許可されたプロセスが個々の命令または命令サブシーケンスを機密として指定できるようにすることにより、手法600を実装する処理コアの性能が、機密のプロセスまたはスレッドの指定のみを可能にするプロセッサと比べて改善され得る。
【0135】
手法600は、第1プロセスよりも優先度の高い第2プロセスの命令に基づいて機密処理イネーブルビットの値を更新する段階670を含む。例えば、第2プロセスは、ハイパーバイザプロセスであり得る。例えば、第2プロセスは、オペレーティングシステムプロセスであり得る。例えば、第2プロセスは、
図8の手法800を実装して、制約に従った実行を利用するための許可の要求を管理することができる。
【0136】
説明を簡略化するために、手法600は、一連のブロック、段階、または動作として描写および記載されている。しかしながら、本開示に係るブロック、段階、または動作は、様々な順序でおよび/または同時に起こり得る。例えば、段階670は、第2プロセス(例えば、ハイパーバイザプロセス)からの命令に応答して非同期的に実行され得る。更には、本明細書に提示および記載されていない他の段階または動作も使用され得る。更には、開示されている主題に係る手法を実装するために、示されている全ての段階または動作が必要とされるわけではないかもしれない。
【0137】
図7は、プロセスの1つまたは複数の命令が機密命令として指定されたことを検出する手法700の例のフローチャートである。手法700は、機密開始命令をデコードする段階710と、当該機密開始命令に応答して、機密命令のための制約に従って実行が継続している間、前に機密開始命令がある1つまたは複数の命令を機密命令として識別する段階720とを含む。制約に従ったプロセスの命令の実行は、機密停止命令がデコード730されるまで継続し得る。手法700は、当該機密停止命令に応答して、制約なしでプロセスの命令の実行を継続する段階740を含む。例えば、プロセスの命令シーケンスは、直前に機密開始命令があり、かつ、直後に機密停止命令がある、命令サブシーケンス(例えば、コード領域)を含み得る。手法700は、プロセッサの性能への影響を制限しながらセキュリティを強化するために、制約なしで命令サブシーケンスの外側でプロセスの命令を実行しながら、制約に従って命令サブシーケンスの全てのメンバを実行するように実装され得る。例えば、手法700は、
図1の集積回路101を使用して実装され得る。例えば、手法700は、
図5の集積回路500を使用して実装され得る。
【0138】
図8は、優先度のより高いプロセスを使用してプロセスの命令を機密に処理するための許可を更新する手法800の例のフローチャートである。手法800は、機密命令処理(すなわち、指定された機密命令を制約に従って実行すること)を許可することの要求をプロセスから受信する段階810と、当該要求に応答して、セキュリティポリシに基づいてプロセスの機密命令処理を許可するかどうかを判断する段階820と、決定820に基づいて機密処理イネーブルビット(例えば、機密処理イネーブルビット522)の値を更新する段階830とを含む。例えば、機密処理イネーブルビットの値は、特殊な命令を使用して、および/または、書き込み許可が制限された集積回路のレジスタに書き込むことにより、更新830され得る。例えば、手法800は、集積回路(例えば、集積回路101または集積回路500)上で実行され、かつ、集積回路のハードウェアリソースへのアクセスを管理するために使用される、優先度の高いプロセス(例えば、ハイパーバイザプロセスまたはオペレーティングシステムプロセス)により実装され得る。指定された機密命令の制約に従った実行を利用しようとするプロセスは、プロセスが機密として動的に指定する命令を発行する前にこの特徴をアクティブにすべく、(例えば、プロセス間通信を引き起こすシステムコール関数を使用して)要求を送信することができる。幾つかの実装において、優先度の高いプロセスは、要求の承認を確認するか、または要求を拒否するメッセージで、プロセスに応答することができる。幾つかの実装において、優先度の高いプロセスは、要求が承認されたかどうかを示すフィードバックをプロセスに全く提供せず、これは、悪意のある幾つかのプロセスを妨害するのに役立ち得る。
【0139】
本明細書において、「例」という言葉は、例、事例、または例示として機能することを意味するために使用される。本明細書に「例」として記載されている態様または設計は何れも、必ずしも他の態様または設計よりも好ましいまたは有利であると解釈されるべきではない。むしろ、「例」という言葉の使用は、概念を具体的に提示することを意図している。本願で使用されるとき、「または」という用語は、排他的な「または」ではなく、包括的な「または」を意味することを意図している。すなわち、別段の指定がない限り、または、文脈により別段の明確な指示がない限り、「XはAまたはBを含む」という記述は、その自然な包括的順列の何れかを意味することを意図している。すなわち、XがAを含むか、XがBを含むか、またはXがAおよびBの両方を含む場合は、前述の場合の何れかの下で「XはAまたはBを含む」が満たされる。また、本願で使用される冠詞「1つの(a)」および「1つの(an)」、並びに添付の特許請求の範囲は、別段の指定がない限り、または、単数形を対象にする文脈により明確な指示がない限り、概して「1つまたは複数の」を意味するものと解釈されるべきである。更に、本開示を通じた「実装」という用語または「1つの実装」という用語の使用は、そのような記載がない限り、同じ実装を意味することを意図するものではない。
【0140】
集積回路101(および、その上に記憶される、および/または、それによって実行される、アルゴリズム、方法、命令など)の実装は、ハードウェア、ソフトウェア、またはそれらの任意の組み合わせで実現され得る。ハードウェアは、例えば、コンピュータ、知的財産(IP)コア、特定用途向け集積回路(ASIC)、プログラマブルロジックアレイ、光プロセッサ、プログラマブルロジックコントローラ、マイクロコード、マイクロコントローラ、サーバ、マイクロプロセッサ、デジタル信号プロセッサ、または任意の他の適切な回路を含み得る。特許請求の範囲において、「プロセッサ」という用語は、単独でまたは組み合わせて、前述のハードウェアの何れかを包含するものとして理解されるべきである。「信号」および「データ」という用語は、同じ意味で使用される。
【0141】
更には、本開示の実装の全部または一部が、例えば、コンピュータ使用可能媒体またはコンピュータ可読媒体からアクセス可能なコンピュータプログラム製品の形態を取ることができる。コンピュータ使用可能媒体またはコンピュータ可読媒体は、例えば、任意のプロセッサにより、または任意のプロセッサに関連して使用するために、プログラムを実体的に包含、記憶、伝達、または転送できる任意のデバイスであり得る。媒体は、例えば、電子デバイス、磁気デバイス、光学デバイス、電磁デバイス、または半導体デバイスであり得る。他の適切な媒体も利用可能である。
【0142】
上記の実装および他の態様は、本開示の容易な理解を促進するために記載されており、本開示を限定するものではない。それどころか、本開示は、添付の特許請求の範囲内に含まれる様々な修正および同等のアレンジを網羅することを意図するものであり、その範囲には、係る全ての修正および同等のアレンジを包含するように、法律の下で許可される最も広い解釈が与えられるべきである。