JP2023514484A - マルチテナント環境における暗号コンピューティング - Google Patents

マルチテナント環境における暗号コンピューティング Download PDF

Info

Publication number
JP2023514484A
JP2023514484A JP2022540601A JP2022540601A JP2023514484A JP 2023514484 A JP2023514484 A JP 2023514484A JP 2022540601 A JP2022540601 A JP 2022540601A JP 2022540601 A JP2022540601 A JP 2022540601A JP 2023514484 A JP2023514484 A JP 2023514484A
Authority
JP
Japan
Prior art keywords
key
code
data
memory
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2022540601A
Other languages
English (en)
Inventor
エム. ダーハム、デイビッド
ディー. レメイ、マイケル
スルタナ、サルミン
エス. グレワル、カランヴィル
イー. コウナヴィス、マイケル
デウチュ、セルゲジュ
ジェームズ ウェイラー、アンドリュー
バサク、アビーシェク
バウム、ダン
ゴッシュ、サントシュ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2023514484A publication Critical patent/JP2023514484A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1466Key-lock mechanism
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1466Key-lock mechanism
    • G06F12/1475Key-lock mechanism in a virtual system, e.g. with translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/79Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0631Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/34Encoding or coding, e.g. Huffman coding or error correction

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Power Engineering (AREA)
  • Storage Device Security (AREA)
  • Advance Control (AREA)

Abstract

プロセッサ、システム、機械可読媒体、および方法である。プロセッサは、第1の回路であって、第1のコードキーを使用して第1のコードイメージを暗号化することと、暗号化された第1のコードイメージを、プロセッサ上で動作するオペレーティングシステムによって第1のコードイメージのためにメモリ内に割り当てられたメモリ領域にロードすることと、第1のコードキーに対応する代替キーをオペレーティングシステムに送信することであって、第1のコードキーは、オペレーティングシステムから隠蔽されている、ことと、を行う、第1の回路と、制御回路を有する命令キャッシュと、命令キャッシュに結合された第2の回路であって、第2の回路は、オペレーティングシステムから代替キーを受信することと、第1のコードイメージを実行して第1のプロセスをインスタンス化するためのオペレーティングシステムからの第1の要求に応答して、ハードウェアキーを使用して第1の暗号化関数を実行して、代替キーから第1のコードキーを生成することと、第1のコードキーを用いて命令キャッシュの制御回路をプログラムして、第1のコードキーを使用して第1のコードイメージが解読されることを可能にすることと、を行う、第2の回路と、を備える。

Description

関連出願の相互参照
本出願は、2020年12月7日に出願された「Cryptographic Computing including Metadata Stored Outside of an Address Pointer」と題する米国仮特許出願第63/122,444号、および2020年2月13日に出願された「Security Check Systems And Methods For Memory Allocations」と題する米国仮特許出願第62/976,319号の利益および優先権を主張し、それらの開示全体が参照により本明細書に組み込まれる。
本開示は、概してコンピュータシステムの分野に関し、より詳細には、メモリ動作における暗号コンピューティングに関する。
コンピュータシステム内のメモリをソフトウェアのバグおよびセキュリティの脆弱性から保護することは、重大な懸念事項である。バッファオーバーフローは、プログラムがバッファにデータを書き込み、隣接するメモリ位置が上書きされるようにバッファの境界を上書きするときに発生し、メモリの安全性に影響を及ぼす可能性がある。同様に、バッファの最後を過ぎて別のページに読み込むと、アクセス違反またはアクセス障害がトリガされる可能性がある。別のメモリ安全性違反は、ダングリングポインタと称されるものである。ダングリングポインタは、有効な宛先に解決されない参照のことである。これは、割り当て解除された(または解放された)メモリへの既存のポインタの値を修正することなくメモリが割り当て解除されたときに発生する可能性がある。システムが解放されたメモリを再割り当てし、ダングリングポインタが再割り当てされたメモリにアクセスするために使用される場合、システム障害を含む予測不可能な挙動が発生する可能性がある。
現在のコンピューティング技術(例えば、プロセス/カーネル分離のためのページテーブル、仮想マシンマネージャ、マネージドランタイムなど)は、データ保護を提供するためにアーキテクチャおよびメタデータを使用している。例えば、以前のソリューションでは、プロセッサは、ルックアップテーブルを使用して、所有権、メモリサイズ、位置、タイプ、バージョンなどのデータに関するポリシーまたはデータを符号化している。メタデータを動的に記憶し、ロードするには、追加のストレージ(メモリオーバーヘッド)が必要であり、特に、細かい粒度のメタデータ(サービスとしての機能(FaaS)のワークロードまたはオブジェクトごとの境界情報など)、特にマルチテナント環境では、性能に影響を及ぼす。
本開示ならびにその特徴および利点のより完全な理解を提供するために、同様の参照番号が同様の部分を表す添付の図面と併せて以下の説明が参照される。
少なくとも1つの実施形態による例示的な暗号コンピューティング環境を示すブロック図である。
少なくとも1つの実施形態による例示的なプロセッサを示すブロック図である。
特定の実施形態による例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
特定の実施形態による、プロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。
少なくとも1つの実施形態による例示的なコンピュータアーキテクチャのブロック図である。
本開示の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。
本開示の少なくとも1つの実施形態による、セキュアメモリアクセス論理を用いて構成された例示的なコンピューティングデバイスの簡略ブロック図である。
本開示の少なくとも1つの実施形態による、図6のセキュアメモリアクセス論理の適用を示す簡略化された環境図である。
少なくとも1つの実施形態による、コンピューティングデバイス内のハードウェア、ソフトウェアユニット、およびデータフローの可能な例示的な詳細の簡略ブロック図である。
少なくとも1つの実施形態による、種々の暗号コンピューティング動作のための例示的な命令および論理を実装するための可能なシステムの簡略ブロック図である。
一部の実施形態によるクラウドネットワークの概略図である。
例示的なマルチテナントソフトウェアアーキテクチャを示す簡略ブロック図である。
一実施形態による例示的なマルチテナント初期化プロセスを示す簡略ブロック図である。
一実施形態による例示的なマルチテナントランタイムプロセスを示す簡略ブロック図である。
一実施形態による、共有ライブラリを用いた別の例示的なマルチテナントランタイムプロセスを示す簡略ブロック図である。
一実施形態による、暗号コンピューティングベースのコンテナセキュリティのための例示的なマルチテナントシステムアーキテクチャのブロック図である。
一実施形態による例示的な初期化プロセスのフロー図である。 一実施形態による例示的な初期化プロセスのフロー図である。
一実施形態による例示的なブートストラッププロセスのフロー図である。
一実施形態による共有ライブラリを使用する例示的なコンテナプロセスのフロー図である。 一実施形態による共有ライブラリを使用する例示的なコンテナプロセスのフロー図である。 一実施形態による共有ライブラリを使用する例示的なコンテナプロセスのフロー図である。
一実施形態による、共有ライブラリを呼び出すプロセスのためのデータおよびコードのための可能なメモリレイアウトのブロック図である。
一実施形態による、共有ライブラリを呼び出すプロセスのためのデータおよびコードのための別の可能なメモリレイアウトのブロック図である。
一実施形態による、共有ライブラリを呼び出すプロセスのためのデータおよびコードのためのさらに別の可能なメモリレイアウトのブロック図である。
一実施形態による、呼び出しコンテナのための共有ライブラリコードイメージをロードすることに関連付けられた例示的なプロセスのフロー図である。
図15のマルチテナントシステムアーキテクチャのマルチテナントプラットフォームの追加の可能な詳細のブロック図である。
一実施形態による、ユーザ割り込み中に使用され得る情報の選択された部分のブロック図である。
一実施形態によるコンテナプロセス間のプロセス間通信のフロー図を示す。
一実施形態による、例示的な非同期イベント/割り込み処理のフロー図である。
一実施形態による別の例示的な非同期イベント/割り込み処理のフロー図である。
一実施形態による例示的なコンテナ移行プロセスのフロー図である。 一実施形態による例示的なコンテナ移行プロセスのフロー図である。
特定の実施形態による仮想アドレス暗号化技術の簡略ブロック図を示す。
特定の実施形態による、例示的な符号化ポインタを示す。
特定の実施形態による、犠牲者および敵対者のための例示的なメモリ割り当てを示す図である。
特定の実施形態による例示的な拡散技術の簡略ブロック図を示す。
特定の実施形態による別の例示的な拡散技術の簡略ブロック図を示す。
特定の実施形態によるプロセッサおよびメモリアーキテクチャの簡略ブロック図を示す。
特定の実施形態による、メモリ階層内のDCUと他のキャッシュユニットとの間で実行される拡散技術の簡略ブロック図を示す。
特定の実施形態による、サブキャッシュライン粒度でデータを修正および拡散するための例示的な技術の図を示す。
特定の実施形態による、キャッシュ階層内でマージの実行を可能にするための例示的な技術3700を示す。
特定の実施形態によるキャッシュウェイの例示的な構成を示す。
特定の実施形態による、メモリから/へのプロセッサのコアによる例示的な読み出し/書き込みを示す。 特定の実施形態による、メモリから/へのプロセッサのコアによる例示的な読み出し/書き込みを示す。 特定の実施形態による、メモリから/へのプロセッサのコアによる例示的な読み出し/書き込みを示す。 特定の実施形態による、メモリから/へのプロセッサのコアによる例示的な読み出し/書き込みを示す。 特定の実施形態による、メモリから/へのプロセッサのコアによる例示的な読み出し/書き込みを示す。 特定の実施形態による、メモリから/へのプロセッサのコアによる例示的な読み出し/書き込みを示す。
一実施形態によるメモリ割り当てセキュリティチェックシステムの概略図である。
一実施形態による例示的な符号化ポインタアーキテクチャの概略図である。
異なる範囲のスロットサイズに対する図9のメタデータの一実施形態の拡大図である。
一部の実施形態による、図41の線形メモリレイアウトとは別個のテーブルに記憶されたメタデータの図である。
一実施形態による、メタデータが同じページに記憶される同じサイズの割り当てを記憶するページの図である。
一実施形態による方法のフロー図である。
一実施形態による、ポインタの暗号化アドレスを解読することなく、暗号符号化されたポインタを使用して、メモリコンテンツにアクセスするためのフローオプションを示すフロー図である。
一実施形態による、ポインタの暗号化アドレスを解読することなく、暗号符号化されたポインタを使用して、メモリコンテンツにアクセスするフローを示すフロー図である。
一部の実施形態による、セキュリティメタデータミスの場合のキャッシュライン内のメモリコンテンツに関するコアによる読み出し要求のためのキャッシュコヒーレンシフローのフローチャートであり、アクセスを試みているコアのローカルキャッシュ内にアクセスされるメモリコンテンツの単一コピーが存在する。
一部の実施形態による、セキュリティメタデータミスの場合のキャッシュライン内のメモリコンテンツに対するコアによる読み出し要求のためのキャッシュコヒーレンシフローのフローチャートであり、種々のコアにおいて状態Sでアクセスされるメモリコンテンツの複数のコピーが存在する。
一部の実施形態による、キャッシュライン内のメモリコンテンツに対するコアによる読み出し要求のためのキャッシュコヒーレンシフローのフローチャートであり、アクセスを試みるコアのローカルキャッシュ内にアクセスされるメモリコンテンツの単一コピーが存在し、単一のコアは、メモリコンテンツに対して状態EまたはMにある。
一部の実施形態による、アクセスを試みているコアのローカルキャッシュ内にアクセスされるメモリコンテンツの複数のコピーが存在する場合、スヌーピングコアがメモリコンテンツに関して共有(S)にある場合(分岐B)、またはメモリコンテンツのコピーが存在しない場合(分岐A)の、読み出し要求のためのキャッシュコヒーレンシフローのフローチャートである。
一部の実施形態による、書き込み要求のためのキャッシュコヒーレンシフローのフローチャートである。
以下の開示は、暗号コンピューティングの実装形態のための種々の可能な実施形態または例を提供する。暗号コンピューティングは、コンピューティング業界における重要なトレンドであり、コンピューティング自体の基盤が根本的に暗号化されるようになっている。暗号コンピューティングは、システムセキュリティの根本的な見直しを意味し、産業界に大きな影響を与える大きな変革である。
本明細書で使用される場合、用語「上部」、「底部」、「最下部」、および「最上部」は、1または複数の要素に関連して使用されるとき、絶対的な物理的構成ではなく相対的な物理的構成を伝えることが意図される。したがって、デバイス内の「最上部の要素」または「上部の要素」として説明される要素は、代わりに、デバイスが反転されるとき、デバイス内の「最下部の要素」または「底部の要素」を形成してもよい。同様に、デバイス内の「最下部の要素」または「底部の要素」として説明される要素は、代わりに、デバイスが反転されると、デバイス内の「最上部の要素」または「上部の要素」を形成してもよい。
本明細書で使用される場合、「論理的に関連付けられた」という用語は、複数のオブジェクト、システム、または要素に関して使用されるとき、1つのオブジェクト、システム、または要素へのアクセスが、アクセスされたオブジェクト、システム、または要素との「論理的な関連付け」を有する残りのオブジェクト、システム、または要素を公開するように、オブジェクト、システム、または要素間の関係の存在を伝えることを意図している。例示的な「論理的な関連付け」は、第1のデータベース内の要素へのアクセスが、1または複数の追加のデータベースの1または複数の要素からの情報および/またはデータを提供し得るリレーショナルデータベース間に存在し、それぞれがアクセスされた要素と識別された関係を有している。別の例では、「A」が「B」と論理的に関連付けられている場合、「A」にアクセスすることは、「B」からの情報および/またはデータを公開または別様で引き出すことになり、逆もまた同様である。
本明細書で使用される場合、用語「第1」、「第2」、および他の類似の序数は、複数の類似または同一の対象を区別することを意図しており、対象の特定のまたは絶対的な順序を示すことを意図していない。したがって、「第1のオブジェクト」および「第2のオブジェクト」は、第2のオブジェクトが空間または時間において第1のオブジェクトの前または前に現れる順序を含む任意の順序で現れてもよい。かかる構成は、本開示の範囲内に含まれるものと見なされるべきである。
以下の説明では、特定の構成要素が英数字の項目指定子を使用して指定されることに留意されたい。例えば、第1の要素は470Aと指定されてもよく、第2の要素は470Bと指定されてもよい。説明を容易にし、簡潔にするために、両方の要素に共通の特徴を説明するとき、英数字の指定子は省略される。したがって、かかる一般的な(すなわち、英数字でない)指定子が使用されるとき、説明される特徴は、共通の数字指定子を共有する全ての要素に適用可能であると理解されたい。例えば、「要素470」に関して説明される特徴は、全ての要素470A~470nに適用される。一方、「要素470A」に関して説明される特徴は、470Aと指定される要素に特に適用され、470B~470nと指定される要素には適用されない。
本出願および特許請求の範囲で使用される場合、「および/または」という用語によって結合される項目のリストは、列挙された項目の任意の組み合わせを意味することができる。例えば、「A、B、および/またはC」という句は、A、B、C、AおよびB、AおよびC、BおよびC、またはA、BおよびCを意味することができる。本出願および特許請求の範囲において使用される場合、「のうちの少なくとも1つ」という用語によって結合される項目のリストは、列挙された用語の任意の組み合わせを意味することができる。例えば、語句「A、B、またはCのうちの少なくとも1つ」は、A、B、C、AおよびB、AおよびC、BおよびC、またはA、B、およびCを意味することができる。
本明細書の任意の実施形態で使用されるように、用語「システム」または「モジュール」は、例えば、前述の動作のうちのいずれかを行うように構成される、ソフトウェア、ファームウェア、および/または回路を指し得る。ソフトウェアは、非一時的コンピュータ可読記憶媒体上に記録されたソフトウェアパッケージ、コード、命令、命令セット、および/またはデータとして具現化され得る。ファームウェアは、メモリデバイスにハードコードされた(例えば、不揮発性の)コード、命令または命令セットおよび/またはデータとして具現化され得る。本明細書の任意の実施形態で使用される回路は、例えば、単独でまたは任意の組み合わせで、ハードワイヤード回路、1または複数の個々の命令処理コアを含むコンピュータプロセッサなどのプログラマブル回路、状態機械回路、および/またはプログラマブル回路によって実行される命令を記憶するファームウェア、または例えば、超並列、アナログもしくは量子コンピューティング、ニューラルネットプロセッサなどのアクセラレータのハードウェア実施形態、および上記の非シリコン実装形態を含む将来のコンピューティングパラダイムを含んでもよい。回路は、より大きなシステム、例えば、集積回路(IC)、システムオンチップ(SoC)、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、サーバ、スマートフォンなどの一部を形成する回路として、集合的にまたは個別に具現化されてもよい。
本明細書で説明する動作のいずれも、1または複数のプロセッサによって実行されたときに方法を実行する命令を個別にまたは組み合わせて記憶した1または複数の媒体(例えば、非一時的記憶媒体)を含むシステムにおいて実装することができる。ここで、プロセッサは、例えば、サーバCPU、モバイルデバイスCPU、および/または他のプログラマブル回路を含み得る。また、本明細書で説明される動作は、2つ以上の異なる物理的位置における処理構造など、複数の物理的デバイスにわたって分散され得ることが意図される。記憶媒体は、任意の種類の有形媒体、例えば、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD-ROM)、コンパクトディスクリライタブル(CD-RW)、および光磁気ディスクを含む任意の種類のディスク、読み出し専用メモリ(ROM)などの半導体デバイス、ダイナミックおよびスタティックRAMなどのランダムアクセスメモリ(RAM)、消去可能プログラマブル読み出し専用メモリ(EPROM)、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)、フラッシュメモリ、ソリッドステートディスク(SSD)、エンベデッドマルチメディアカード(eMMC)、セキュアデジタル入力/出力(SDIO)カード、磁気もしくは光カード、または電子命令を記憶するのに適した任意の種類の媒体を含んでもよい。他の実施形態は、プログラマブル制御デバイスによって実行されるソフトウェアとして実装されてもよい。
本明細書で使用される場合、「メタデータ」は、一部の例を挙げると、タグ値またはバージョン番号(タグメタデータ)、有効範囲メタデータ、コンテキスト情報(例えば、メモリ割り当てサイズ(例えば、間接アドレスによって参照される割り当てメモリのバイト数)、データまたはコードのタイプ(例えば、プログラミング言語によって定義されるデータまたはコードのクラス)、許可(例えば、間接アドレスの読み出し、書き込み、および実行許可)、データまたはコードの位置(例えば、データまたはコードのサイズと組み合わされたアドレス)、データまたはコードの所有権、特権レベル(例えば、ユーザまたは監督者)、または暗号コンテキスト識別子(または暗号コンテキストID)(例えば、間接アドレスごとにランダム化されたまたは決定論的に一意の値)のうちの少なくとも1または複数を指す。本明細書で使用されるメタデータは、キー識別子(キーID)、トウィーク(tweak)、カウンタ、メモリアクセス制御(MAC)、または誤り訂正符号(ECC)を指すこともある。
本明細書で使用される場合、「割り当て」は、データまたはコードなどのオブジェクトが記憶されるメモリのアドレス指定可能な部分を指す。
本明細書で使用される場合、「境界情報」は、基準点に基づいて割り当ての開始および終了を決定するための情報を指す。基準点は、例えば、スロット、ブロック、ページ、またはメモリの任意の他の単位のいずれかの中間点、開始、終了を含み得る。
本明細書で使用される場合、「スロット」は、キャッシュライン内のメモリの単位を指す。
本明細書で使用される場合、「コンパートメント」とは、他のテナントから暗号隔離されたテナントを意味する。本明細書で使用される場合、「暗号隔離された」という用語は、異なるキーおよび/またはトウィークで暗号化されているメモリの異なるエリア(異なるコンパートメントまたはテナント)から生じる隔離を意味することが意図される。隔離されたメモリコンパートメント/テナントは、仮想マシン(VM)、アプリケーション、関数、またはスレッドのデータ構造および/またはコードから構成され得る。マルチテナント環境では、ページテーブルまたは拡張ページテーブルではなく、暗号化を使用してテナント間の隔離を実施することができる。
本明細書で使用される場合、「トウィーク」または「トウィーク関数」は、非暗号化データを物理メモリアドレスとバインドすることによって、ブロック暗号へのトウィークとして物理メモリアドレス(例えば、スクランブルされた、スクランブルされていないなど)の使用を可能にする関数を指す。トウィーク関数は、例えば、XTS(xor-暗号化-xor/XEXベースの暗号文盗用によるトウィークコードブックモード)アルゴリズム、Liskov、Rivest、およびWagner(LRW)アルゴリズムなど、またはそれらの組み合わせを含んでもよい。トウィーク関数は、例えば、元の物理メモリアドレスを拡散し、非暗号化データでアドレスをXORし、非暗号化データをアドレスにバインドするために、キーを用いて暗号器を通して結果を実行してもよい。一例では、攻撃が暗号文データを異なるメモリ位置にスワップすることを含む場合、解読器は、異なるメモリ位置に対応するメモリアドレスを用いて暗号文データを解読し、対応する非暗号化データ(例えば、平文データ)に複数のビットのランダム分布を含ませることができる。
A.暗号コンピューティング
以下の図1~10は、本明細書で説明される暗号コンピューティング実施形態の文脈で使用され得る一部の例示的なコンピューティングデバイス、コンピューティング環境、ハードウェア、ソフトウェア、ネットワーク、またはフローを提供する。
図1は、少なくとも1つの実施形態による例示的な暗号コンピューティング環境100を示すブロック図である。図示の例では、暗号アドレス化指定層110は、例示的な計算ベクトル中央処理装置(CPU)102、グラフィック処理ユニット(GPU)104、人工知能(AI)106、およびフィールドプログラマブルゲートアレイ(FPGA)108にわたって延在する。例えば、CPU102およびGPU104は、メモリ112に記憶されたデータのための同じ仮想アドレス変換を共有してもよく、暗号アドレスは、この共有仮想メモリ上に構築してもよい。それらは、所与の実行フローに対して同じプロセスキーを共有し、同じトウィークを計算して、同じ暗号アルゴリズムに従って、暗号符号化されたアドレスを解読し、かかる符号化されたアドレスによって参照されるデータを解読することができる。
組み合わせて、本明細書に記載の能力は、暗号コンピューティングを可能にし得る。メモリ112は、キャッシュの第1のレベルからキャッシュの最後のレベルまで、かつシステムメモリへと、メモリ階層の全てのレベルにおいて暗号化され得る。暗号アドレス符号化をデータ暗号化にバインドすることにより、非常に細かい粒度のオブジェクト境界およびアクセス制御が可能になり、細かい粒度のセキュアコンテナを個々の機能およびサービスとしての機能のオブジェクトまで可能にすることができる。また、コールスタック上の戻りアドレスを(それらの位置に応じて)暗号符号化することで、シャドウスタックメタデータを必要とせずに制御フロー完全性を可能にすることができる。したがって、データアクセス制御ポリシーおよび制御フローのいずれも、単に暗号アドレス化指定およびそれぞれの暗号データバインディングに依存して、暗号的に実行することができる。
図2~4は、本明細書に開示される実施形態に従って使用され得る例示的なコンピュータアーキテクチャのブロック図である。概して、プロセッサおよびコンピューティングシステムのための当技術分野で知られている任意のコンピュータアーキテクチャ設計を使用することができる。一例では、ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、タブレット、エンジニアリングワークステーション、サーバ、ネットワークデバイス、サーバ、アプライアンス、ネットワークハブ、ルータ、スイッチ、組込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、スマートフォン、モバイルデバイス、ウェアラブル電子デバイス、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および種々の他の電子デバイスのための当技術分野で知られているシステム設計および構成も、本明細書で説明するコンピューティングシステムの実施形態に適している。概して、本明細書に開示される実施形態に適したコンピュータアーキテクチャは、図2~4に示される構成を含み得るが、これらに限定されない。
図2は、一実施形態によるプロセッサの例示的な図である。プロセッサ200は、本明細書で示され説明される実装形態(例えば、プロセッサ102)に関連して使用され得るハードウェアデバイスの種類の一例である。プロセッサ200は、マイクロプロセッサ、組込みプロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、マルチコアプロセッサ、シングルコアプロセッサ、またはコードを実行する他のデバイスなど、任意の種類のプロセッサであり得る。図2には1つのプロセッサ200のみが示されているが、処理要素は、代替的に、図2に示される複数のプロセッサ200を含んでもよい。プロセッサ200は、シングルスレッドコアであってもよく、または、少なくとも1つの実施形態では、プロセッサ200は、コアごとに2つ以上のハードウェアスレッドコンテキスト(または「論理プロセッサ」)を含み得るという点でマルチスレッドであってもよい。
図2はまた、一実施形態によるプロセッサ200に結合されたメモリ202を示している。メモリ202は、当業者に既知であるかまたは別様で利用可能であるような(メモリ階層の種々の層を含む)多種多様なメモリのいずれかであり得る。かかるメモリ要素は、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、フィールドプログラマブルゲートアレイ(FPGA)の論理ブロック、消去可能プログラマブル読み出し専用メモリ(EPROM)、および電気的消去可能プログラマブルROM(EEPROM)を含み得るが、これらに限定されない。
プロセッサ200は、本明細書に詳述されるアルゴリズム、プロセス、または動作に関連付けられた任意の種類の命令を実行することができる。概して、プロセッサ200は、要素または物品(例えば、データ)を1つの状態または物から別の状態または物に変換することができる。
コード204は、プロセッサ200によって実行される1または複数の命令であってもよく、メモリ202に記憶されてもよく、またはソフトウェア、ハードウェア、ファームウェア、もしくはそれらの任意の好適な組み合わせに、または任意の他の内部もしくは外部の構成要素、デバイス、要素、もしくはオブジェクトに、必要に応じて、特定の必要性に基づいて記憶されてもよい。一例では、プロセッサ200は、コード204によって示される命令のプログラムシーケンスに従うことができる。各命令は、フロントエンド論理206に入り、1または複数のデコーダ208によって処理される。デコーダは、その出力として、所定のフォーマットの固定幅マイクロ動作などのマイクロ動作を生成することができ、または元のコード命令を反映する他の命令、マイクロ命令、もしくは制御信号を生成することができる。フロントエンド論理206はまた、レジスタリネーミング論理210およびスケジューリング論理212を含み、これらは概して、リソースを割り当て、実行のために命令に対応する動作をキューに入れる。
プロセッサ200はまた、実行ユニット216a、216b、216nなどのセットを有する実行論理214を含み得る。一部の実施形態は、特定の機能または機能のセットに専用の複数の実行ユニットを含み得る。他の実施形態は、1つのみの実行ユニット、または特定の機能を実行することができる1つの実行ユニットを含み得る。実行論理214は、コード命令によって指定された動作を実行する。
コード命令によって指定された動作の実行の完了後、バックエンド論理218は、コード204の命令をリタイアすることができる。一実施形態では、プロセッサ200は、アウトオブオーダ実行を可能にするが、命令のインオーダリタイアメントを必要とする。リタイアメント論理220は、種々の既知の形態(例えば、リオーダバッファなど)を取り得る。このようにして、プロセッサ200は、コード204の実行中に、少なくとも、デコーダによって生成される出力、レジスタリネーミング論理210によって利用されるハードウェアレジスタおよびテーブル、ならびに実行論理214によって修正される任意のレジスタ(図示せず)に関して変換される。
図2には示されていないが、処理要素は、プロセッサ200を有するチップ上に他の要素を含み得る。例えば、処理要素は、プロセッサ200とともにメモリ制御論理を含んでもよい。処理要素は、I/O制御論理を含んでもよく、かつ/またはメモリ制御論理と統合されたI/O制御論理を含んでもよい。処理要素はまた、1または複数のキャッシュを含んでもよい。一部の実施形態では、不揮発性メモリ(フラッシュメモリまたはヒューズなど)も、プロセッサ200とともにチップ上に含まれ得る。
図3Aは、本開示の1または複数の実施形態による、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図3Bは、本開示の1または複数の実施形態による、プロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。図3A~図3Bの実線のボックスは、インオーダパイプラインおよびインオーダコアを示し、破線のボックスの所望による追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示している。インオーダ態様がアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様について説明する。
図3Aにおいて、プロセッサパイプライン300は、フェッチステージ302、長さ復号ステージ304、復号ステージ306、割り当てステージ308、リネーミングステージ310、スケジュール(ディスパッチまたは発行としても知られる)ステージ312、レジスタ読み出し/メモリ読み出しステージ314、実行ステージ316、書き戻し/メモリ書き込みステージ318、例外処理ステージ322、およびコミットステージ324を含む。
図3Bは、実行エンジンユニット350に結合されたフロントエンドユニット330を含むプロセッサコア390を示し、両方ともメモリユニット370に結合されている。プロセッサコア390およびメモリユニット370は、本明細書で図示および説明される実装形態(例えば、プロセッサ102、メモリ120)に関連して使用され得るタイプのハードウェアの例である。コア390は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替コアタイプであり得る。さらに別のオプションとして、コア390は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、グラフィックスコアなどの専用コアであってもよい。加えて、プロセッサコア390およびその構成要素は、論理プロセッサおよびそれらのそれぞれの構成要素を実装するために使用され得る例示的なアーキテクチャを表す。
フロントエンドユニット330は、命令キャッシュユニット334に結合された分岐予測ユニット332を含み、命令キャッシュユニットは、命令トランスレーションルックアサイドバッファ(TLB)ユニット336に結合され、これは命令フェッチユニット338に結合され、これは復号ユニット340に結合される。復号ユニット340(またはデコーダ)は、命令を復号し、出力として、元の命令から復号されるか、別様で元の命令を反映するか、または元の命令から導出される、1または複数のマイクロ動作、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を生成し得る。復号ユニット340は、種々の異なるメカニズムを使用して実装することができる。好適なメカニズムの例は、ルックアップテーブル、ハードウェア実装形態、プログラマブル論理アレイ(PLA)、マイクロコード読み出し専用メモリ(ROM)などを含むが、これらに限定されない。一実施形態では、コア390は、マイクロコードROM、または特定のマクロ命令のためのマイクロコードを(例えば、復号ユニット340または別様でフロントエンドユニット330内に)記憶する他の媒体を含む。復号ユニット340は、実行エンジンユニット350内のリネーム/アロケータユニット352に結合される。
実行エンジンユニット350は、リタイアメントユニット354および1または複数のスケジューラユニット(複数可)356のセットに結合されたリネーム/アロケータユニット352を含む。スケジューラユニット(複数可)356は、予約ステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット(複数可)356は、物理レジスタファイル(複数可)ユニット(複数可)358に結合される。物理レジスタファイル(複数可)ユニット358の各々は、1または複数の物理レジスタファイルを表し、そのうちの異なるものは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行すべき次の命令のアドレスである命令ポインタ)などの1または複数の異なるデータタイプを記憶する。一実施形態では、物理レジスタファイル(複数可)ユニット358は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタ(GPR)を提供することができる。本明細書で説明する少なくとも一部の実施形態では、レジスタファイル(複数可)ユニット358は、本明細書で図示および説明される実装形態(例えば、レジスタ112)に関連して使用され得るタイプのハードウェアの例である。レジスタリネーミングおよびアウトオブオーダ実行が実装され得る種々の方法(例えば、リオーダバッファ(複数可)およびリタイアメントレジスタファイル(複数可)を使用して、フューチャファイル(複数可)、ヒストリバッファ(複数可)、およびリタイアメントレジスタファイル(複数可)を使用して、レジスタマップおよびレジスタのプールを使用してなど)を示すために、物理レジスタファイル(複数可)ユニット(複数可)358はリタイアメントユニット354によって重複される。リタイアメントユニット354および物理レジスタファイル(複数可)ユニット(複数可)358は、実行クラスタ(複数可)360に結合される。実行クラスタ(複数可)360は、1または複数の実行ユニット362のセットと、1または複数のメモリアクセスユニット364のセットとを含む。実行ユニット362は、種々の演算(例えば、シフト、加算、減算、乗算)を、種々のタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行することができる。一部の実施形態は、特定の機能または機能のセットに専用の複数の実行ユニットを含み得るが、他の実施形態は、1つの実行ユニットのみ、または全てが全ての機能を実行する複数の実行ユニットを含み得る。実行ユニット362はまた、メインメモリ(例えば、メモリユニット370)およびページミスハンドラ(PMH)にアクセスするためにコアによって使用されるアドレスを計算するためのアドレス生成ユニット(例えば、822)を含み得る。
スケジューラユニット(複数可)356、物理レジスタファイル(複数可)ユニット(複数可)358、および実行クラスタ(複数可)360は、複数である可能性があるものとして示されている。なぜなら、一部の実施形態が一部のタイプのデータ/動作のために別個のパイプライン(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインであって、それぞれが自身のスケジューラユニット、物理レジスタファイル(複数可)ユニット、および/または実行クラスタを有するものである。別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット(複数可)364を有する特定の実施形態が実装される)を作成するからである。別個のパイプラインが使用される場合、これらのパイプラインのうちの1または複数がアウトオブオーダ発行/実行であり、残りがインオーダであり得ることも理解されたい。
メモリアクセスユニット364のセットは、メモリユニット370に結合され、メモリユニット370は、データTLBユニット372を含み、データTLBユニット372は、レベル2(L2)キャッシュユニット376に結合されたデータキャッシュユニット374に結合されている。例示的な一実施形態では、メモリアクセスユニット(複数可)364は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含むことができ、その各々は、メモリユニット370内のデータTLBユニット372に結合される。命令キャッシュユニット334は、メモリユニット370内のレベル2(L2)キャッシュユニット376にさらに結合される。L2キャッシュユニット376は、1または複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。加えて、データTLBユニット372内に一致が見つからない場合にページテーブル内のアドレスマッピングをルックアップするために、ページミスハンドラ(例えば、ページミスハンドラ826)もコア390内に含まれ得る。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン300を以下のように実装することができる。すなわち、1)命令フェッチユニット338がフェッチステージ302および長さ復号ステージ304を実行し、2)復号ユニット340が復号ステージ306を実行し、3)リネーム/アロケータユニット352が割り当てステージ308およびリネーミングステージ310を実行し、4)スケジューラユニット(複数可)356がスケジュールステージ312を実行し、5)物理レジスタファイル(複数可)ユニット(複数可)358およびメモリユニット370がレジスタ読み出し/メモリ読み出しステージ314を実行し、実行クラスタ(複数可)360が実行ステージ316を実行し、6)メモリユニット370および物理レジスタファイル(複数可)ユニット(複数可)358が書き戻し/メモリ書き込みステージ318を実行し、7)種々のユニットが例外処理ステージ322に関与し得、ならびに8)リタイアメントユニット354および物理レジスタファイル(複数可)ユニット(複数可)358がコミットステージ324を実行する。
コア390は、本明細書で説明される命令(複数可)を含む、1または複数の命令セット(例えば、x86命令セット(より新しいバージョンで追加された一部の拡張を有する)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスのARM命令セット(NEONなどの所望による追加の拡張を有する))をサポートすることができる。一実施形態では、コア390は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートする論理を含み、それによって、多くのマルチメディアアプリケーションによって使用される動作がパックドデータを使用して実行されることを可能にする。
コアは、マルチスレッディング(動作またはスレッドの2つ以上の並列セットを実行する)をサポートすることができ、タイムスライスマルチスレッディング、同時マルチスレッディング(単一の物理コアが、物理コアが同時にマルチスレッディングされるスレッドの各々のための論理コアを提供する)、またはそれらの組み合わせ(例えば、Intel(登録商標)ハイパースレッディング技術などにおけるタイムスライスフェッチおよび復号、ならびにその後の同時マルチスレッディング)を含む種々の方法でサポートし得ることを理解されたい。したがって、少なくとも一部の実施形態では、マルチスレッドエンクレーブをサポートすることができる。
レジスタリネーミングはアウトオブオーダ実行の文脈において説明されるが、レジスタリネーミングはインオーダアーキテクチャにおいて使用され得ることを理解されたい。プロセッサの図示された実施形態は、別個の命令キャッシュユニット334およびデータキャッシュユニット374ならびに共有L2キャッシュユニット376を含むが、代替的な実施形態は、例えば、レベル1(L1)内部キャッシュ、または複数レベルの内部キャッシュなど、命令およびデータの両方のための単一の内部キャッシュを有してもよい。一部の実施形態では、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含み得る。代替的に、キャッシュの全ては、コアおよび/またはプロセッサの外部にあり得る。
図4は、一実施形態によるポイントツーポイント(PtP)構成で構成されたコンピューティングシステム400を示している。特に、図4は、プロセッサ、メモリ、および入力/出力デバイスが、複数のポイントツーポイントインタフェースによって相互接続されるシステムを示している。概して、本明細書で説明されるコンピューティングシステムまたはコンピューティングデバイス(例えば、コンピューティングデバイス100)のうちの1または複数は、コンピューティングシステム400と同一または類似の方法で構成することができる。
プロセッサ470および480は、シングルコアプロセッサ474aおよび484aまたはマルチコアプロセッサ474a~474bおよび484a~484bとして実装することができる。プロセッサ470および480はそれぞれ、それらのそれぞれの1または複数のコアによって使用されるキャッシュ471および481を含み得る。共有キャッシュ(図示せず)は、いずれかのプロセッサ内または両方のプロセッサの外部に含まれてもよいが、P-P相互接続を介してプロセッサに接続されて、その結果、プロセッサが低パワーモードに置かれた場合、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶されてもよい。本明細書で説明される1または複数の実施形態は、コンピューティングシステム400などのコンピューティングシステムにおいて実装され得ることに留意されたい。さらに、プロセッサ470および480は、本明細書で示され説明される実装形態(例えば、プロセッサ102)に関連して使用され得るタイプのハードウェアの例である。
プロセッサ470および480はまた、それぞれのプロセッサにローカルに取り付けられたメインメモリの部分であり得るメモリ要素432および434と通信するために、統合メモリコントローラ論理(IMC)472および482をそれぞれ含み得る。代替的な実施形態では、メモリコントローラ論理472および482は、プロセッサ470および480とは別個のディスクリート論理であってもよい。メモリ要素432および/または434は、本明細書で概説される動作および機能を達成する際にプロセッサ470および480によって使用される種々のデータを記憶することができる。
プロセッサ470および480は、他の図に関連して説明したような任意の種類のプロセッサであり得る。プロセッサ470および480は、ポイントツーポイントインタフェース回路478および488をそれぞれ使用して、ポイントツーポイント(PtP)インタフェース450を介してデータを交換することができる。プロセッサ470および480はそれぞれ、ポイントツーポイントインタフェース回路476、486、494、および498を使用して、個々のポイントツーポイントインタフェース452および454を介して入力/出力(I/O)サブシステム490とデータを交換することができる。I/Oサブシステム490はまた、PtPインタフェース回路であり得るインタフェース回路492を使用して、高性能グラフィックスインタフェース439を介して高性能グラフィックス回路438とデータを交換することができる。一実施形態では、高性能グラフィックス回路438は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、埋め込みプロセッサなどの専用プロセッサである。I/Oサブシステム490はまた、人間のユーザが見ることができるデータを表示するためのディスプレイ433と通信することができる。代替的な実施形態では、図4に示すPtPリンクのいずれかまたは全てを、PtPリンクではなくマルチドロップバスとして実装することができる。
I/Oサブシステム490は、インタフェース回路496を介してバス410と通信することができる。バス410は、バスブリッジ418、I/Oデバイス414、および1または複数の他のプロセッサ415など、それを介して通信する1または複数のデバイスを有することができる。バス420を介して、バスブリッジ418は、ユーザインタフェース422(キーボード、マウス、タッチスクリーン、もしくは他の入力デバイスなど)、通信デバイス426(モデム、ネットワークインタフェースデバイス、またはコンピュータネットワーク460を通して通信し得る他のタイプの通信デバイスなど)、オーディオI/Oデバイス424、および/またはデータ記憶デバイス428などの他のデバイスと通信することができる。データ記憶デバイス428は、プロセッサ470および/または480によって実行され得るコードおよびデータ430を記憶することができる。代替的な実施形態では、バスアーキテクチャの任意の部分は、1または複数のPtPリンクを用いて実装することができる。
コード430などのプログラムコードを入力命令に適用して、本明細書で説明する機能を実行し、出力情報を生成することができる。出力情報は、既知の方法で1または複数の出力デバイスに適用することができる。本出願の目的のために、処理システムは、コンピューティングシステム400の一部であってもよく、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコード(例えば、430)は、処理システムと通信するために、高水準手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装することができる。プログラムコードは、必要に応じて、アセンブリ言語または機械語で実装されてもよい。実際に、本明細書で説明されるメカニズムは、範囲において、任意の特定のプログラミング言語に限定されない。いずれの場合も、言語は、コンパイラ型言語またはインタープリタ型言語であってよい。
少なくとも1つの実施形態の1または複数の態様は、プロセッサ内の種々の論理を表す機械可読媒体上に記憶された代表的な命令によって実装されてもよく、この命令は、機械によって読み出されると、機械に、本明細書で説明する技術のうちの1または複数を実行するための論理を作成させる。「IPコア」として知られるかかる表現は、有形の機械可読媒体上に記憶され、種々の顧客または製造施設に供給されて、論理またはプロセッサを実際に作製する製作機械にロードされ得る。
かかる機械可読記憶媒体は、ハードディスク、フロッピーディスクを含む任意の他のタイプのディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD-ROM)、コンパクトディスクリライタブル(CD-RW)、および光磁気ディスク、読み出し専用メモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)などのランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブル読み出し専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)、相変化メモリ(PCM)、磁気もしくは光カード、または電子命令を記憶するのに適した任意の他のタイプの媒体などの記憶媒体を含む、機械またはデバイスによって製造または形成される物品の非一時的な有形の構成を含み得るが、これらに限定されない。
したがって、本開示の実施形態には、本明細書で説明される構造、回路、装置、プロセッサ、および/またはシステム特徴を定義するハードウェア記述言語(HDL)などの命令を含むか、または設計データを含む、非一時的有形機械可読媒体も含まれる。かかる実施形態は、プログラム製品と称されることもある。
図4に示されるコンピューティングシステムは、本明細書で説明される種々の実施形態を実装するために利用され得るコンピューティングシステムの一実施形態の概略図である。図4に示されるシステムの種々の構成要素は、システムオンチップ(SoC)アーキテクチャにおいて、または本明細書で提供される例および実装形態の機能および特徴を達成することが可能な任意の他の好適な構成において組み合わされ得ることが理解されよう。
一部の場合では、命令コンバータを使用して、命令をソース命令セットからターゲット命令セットに変換することができる。例えば、命令コンバータは、命令を、コアによって処理されるべき1または複数の他の命令に変換(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)、モーフィング、エミュレート、または別様で変換することができる。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装されてもよい。命令コンバータは、プロセッサ上にあってもよいし、プロセッサ外にあってもよいし、一部がプロセッサ上にあり一部がプロセッサ外にあってもよい。
図5は、本開示の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。図示された実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの種々の組み合わせで実装されてもよい。図5は、少なくとも1つのx86命令セットコアを有するプロセッサ516によってネイティブに実行され得るx86バイナリコード506を生成するために、x86コンパイラ504を使用してコンパイルされ得る高水準言語502のプログラムを示している。少なくとも1つのx86命令セットコアを有するプロセッサ516は、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ結果を達成するために、(1)Intel x86命令セットコアの命令セットのかなりの部分、または(2)少なくとも1つのx86命令セットコアを有するIntelプロセッサ上で実行することを対象とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを、互換的に実行または別様で処理することによって、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。x86コンパイラ504は、追加のリンケージ処理の有無にかかわらず、少なくとも1つのx86命令セットコアを有するプロセッサ516上で実行され得るx86バイナリコード506(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図5は、少なくとも1つのx86命令セットコアを有さないプロセッサ514(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行するコア付きプロセッサ、および/またはカリフォルニア州サニーベールのARMホールディングスのARM命令セットを実行するコア付きプロセッサ)によってネイティブに実行され得る代替命令セットバイナリコード510を生成するために、代替命令セットコンパイラ508を使用して高水準言語502のプログラムがコンパイルされ得ることを示している。命令コンバータ512は、x86バイナリコード506を、x86命令セットコアを有さないプロセッサ514によってネイティブに実行され得るコードに変換するために使用される。この変換されたコードは、代替命令セットバイナリコード510と同じである可能性は低い。その理由は、これを可能にする命令コンバータを作成することが困難だからである。しかしながら、変換されたコードは、一般的な動作を達成し、代替命令セットからの命令で構成される。したがって、命令コンバータ512は、エミュレーション、シミュレーション、または任意の他のプロセスを通して、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがx86バイナリコード506を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
B.暗号アドレス化指定
一部の実施形態によれば、線形アドレスは、メモリ内のオブジェクト(またはオブジェクト内の何らか)のベースアドレスである。ベースアドレスのスライスまたはセグメントは、暗号化されてポインタに埋め込まれ得る複数のビットを含む。ベースアドレススライスは、秘密アドレスキーと、コンテキスト情報(例えば、メモリ割り当てサイズ、オブジェクトのタイプ、許可など)および/またはポインタ内に符号化されたメタデータを含むトウィークとに基づいて暗号化(および解読)することができる。ベースアドレススライスを正しく解読して線形アドレスを生成するために、ポインタにアクセスするときに同じコンテキスト情報(および符号化されたメタデータ)を供給することができる。データ暗号化およびポインタのバインディングは、ポインタベースのトウィークおよび秘密データキーを使用してメモリ位置でデータ(またはコード)を暗号化することによって達成することができる。データを暗号化(および解読)するためのポインタベースのトウィークは、符号化ポインタおよび潜在的に追加のコンテキスト情報から導出することができる。特に、データのためのポインタベースのトウィークは、ベースアドレスの解読されたスライス、および一部の場合では符号化ポインタ内のメタデータに少なくとも部分的に基づいて作成することができる。少なくとも一部の実施形態では、ポインタとは別個に記憶されたコンテキスト情報もまた、トウィークに含まれ得る。
1または複数の実施形態では、ポインタに埋め込まれるベースアドレスのスライスを暗号化および解読するための異なるトウィークの変形形態が可能である。例えば、種々のタイプのメタデータ、暗号コンテキスト識別子、平文ベースアドレスの部分、またはそれらの任意の好適な組み合わせなどの異なるおよび/または付加的コンテキスト情報が、ポインタ内のメモリアドレスのスライスを暗号化/解読するために使用されるトウィーク内で使用されてもよい。同様に、符号化されたポインタによって参照されるデータを暗号化および解読するためのトウィークの変形形態も可能である。他の実施形態では、符号化ポインタの追加の部分がポインタベースのトウィークで使用されてもよく、または符号化ポインタ全体がポインタベースのトウィークとして使用されてもよい。さらに、少なくとも一部の実施形態では、メタデータ、暗号コンテキスト識別子、平文アドレスのスライス、またはそれらの任意の好適な組み合わせなどの異なるおよび/または追加のコンテキスト情報もまた、符号化ポインタによって参照されるデータを暗号化/解読するために使用されるトウィークにおいて使用されてもよい。
データおよびコードは、間接アドレス(本明細書では「ポインタ」とも称される)によって参照され得ることが理解されるが、説明を簡単にするために、本明細書の説明は、ポインタによって参照され、ポインタに暗号的にバインドされた(コードではなく)データのみに言及し得ることに留意されたい。しかしながら、概して、かかるデータのメモリアクセスおよび暗号化/解読に関する説明は、コードにも適用可能であることが意図されていることを理解されたい。さらに、本明細書における「オブジェクト」という用語の使用は、ポインタによって参照されるメモリ内の値もしくは情報、または値もしくは情報のグループを意味することを意図している。例えば、オブジェクトは、ヒープ割り当て、ローカル変数またはグローバル変数、関数、コードなどであり得る。
暗号コンピューティングにおけるベースアドレス暗号化の複数の実施形態を例示する目的で、データ保護およびメモリ安全性に関連する動作および活動を最初に理解することが重要である。したがって、以下の基礎的な情報は、本開示を適切に説明し得るための基礎として見なされ得る。
暗号コンピューティングは、前述の問題の多く(およびそれ以上)を軽減または解決することができる。暗号コンピューティングは、基本的に新しい細かい粒度の保護モデルを用いて、プロセス分離、ユーザ空間、およびカーネルのレガシーモードを冗長にすることができる。暗号コンピューティングでは、保護は暗号化であり、プロセッサおよびアクセラレータも同様に秘密キーおよび暗号を利用して、さらに細かい粒度でアクセス制御および分離を提供する。さらに、現在のシステムにおける仮想マシンおよびプロセスの分離の代わりに、暗号コンピューティングを用いて、個々の機能が境界となり、暗号化されたポインタを介してオブジェクトを共有することができ、暗号化されたポインタおよびキーは、個々のデータオブジェクトへの制御されたアクセスを提供する。
本明細書で開示される暗号コンピューティングの実施形態は、暗号アドレス化指定層の概念を活用することができ、プロセッサは、コンテキスト情報(例えば、暗黙的メタデータおよび明示的メタデータ、暗号コンテキスト識別子、ポインタ内で符号化されたメタデータなど)に基づいて、ソフトウェア割り当てメモリベースアドレス(線形/仮想アドレス空間、「ポインタ」と称されることもある)を解読する。本明細書で使用される場合、「トウィーク」は、特に、通常の平文または暗号文の入力およびキー(例えば、秘密キー616(1))に加えて、ブロック暗号への追加の入力を指し得る。トウィークには、値を表す1または複数のビットが含まれる。1または複数の実施形態では、トウィークは、ブロック暗号のための初期化ベクトル(IV)の全部または一部を構成することができる。ベースアドレススライスの解読が実行されるとき、トウィークを作成するために使用される情報(例えば、コンテキスト情報)が、メモリアロケータ(例えば、ソフトウェア割り当て方法)によるメモリアドレスの元の割り当てに対応する場合、プロセッサは、ベースアドレススライスを正しく解読し、完全な平文ベースアドレスを生成することができる。別様で、ランダムアドレス結果が障害を引き起こし、プロセッサによって捕捉される可能性がある。
暗号符号化されたポインタから生成された完全な平文ベースアドレスは、それが参照するデータ(暗号符号化されたポインタによって参照されるデータ)を暗号化/解読するために使用されるデータ暗号化暗号へのトウィークの少なくとも一部としてプロセッサによって使用され、暗号アドレス化指定層とデータ/コード暗号化との間の暗号バインディングを作成することができる。他の実施形態では、暗号アドレス(またはアドレススライス)は、データ暗号化暗号のためのトウィークの少なくとも一部として使用され得る。メモリアドレスを暗号化/解読するためにブロック暗号への入力として使用されるトウィークは、本明細書では「アドレストウィーク」とも称されることに留意されたい。同様に、データを暗号化/解読するためにブロック暗号への入力として使用されるトウィークは、本明細書では「データトウィーク」とも称される。
メタデータをアドレスおよびそれらの参照データに暗号符号化することによって、暗号コンピューティングは、ポリシーおよびコンテキスト情報/メタデータを提供するための余分な別個のメモリ/ストレージの必要性を低減または排除することができる。これは、メタデータのみの削減により、コンピューティング業界において(例えば、ダイナミックランダムアクセスメモリ(DRAM)費用において)最大数十億ドルを節約することができる。顧客は、暗号コンピューティングに関して望むセキュリティ、安全性、およびエラーのない機能を得ながら、これらのメモリコストの節約を得ることができる。安全な推測を可能にすることによって、暗号コンピューティングの基本的な暗号分離ポリシーは、プロセッサが自由に推測し、向上した性能を提供することを可能にし得る。
データセキュリティが基本的に暗号メモリアドレス指定にリンクされる暗号コンピューティングでは、データへの処理および細かい粒度の暗号アクセス制御が重要である。暗号コンピューティングは、全ての計算ベクトルをCPUからGPUに、アクセラレータからFPGAなどに変換する。暗号コンピューティングでは、保護は暗号化であり得、プロセッサおよびアクセラレータも同様に秘密キーおよび暗号を利用して、さらに細かい粒度でアクセス制御および分離を提供する。さらに、仮想マシンおよびプロセスの分離の代わりに、個々の機能が境界となり得、ポインタが暗号化されている間にアドレス空間が共有され、キーが個々のデータオブジェクトへの制御されたアクセスを与える。したがって、暗号動作に絡んで、システムのあらゆるレベルでバッファオーバーフロー、タイプ混同、および時間的(例えば、ユースアフターフリー(use-after-free)な脆弱性を防止しながら、データオブジェクトへの粒度の細かいアクセス制御を提供することができる。暗号コードは、メモリおよびタイプの安全性を提供するために、ネイティブに、安全に実行することができ、かつインタープリタまたは管理されたランタイムを必要としない。メモリは、隔離されたドメインおよびコンテナから、データが暗号アクセス制御メカニズムに基づいてアクセス可能であるグローバルに共有されたメモリモデルに移動することができ、分散許可、ページング、および関連する制御構造を拡大縮小することは困難である。ファイルであっても、メモリ(例えば、不揮発性デュアルインラインメモリモジュール(NVDIMM)のような不揮発性メモリモジュール)に直接安全に記憶することができ、個別に暗号化され、暗号的にサイズ設定され、ソフトウェアエラーから破損されない。これは、機能的安全性、信頼性、およびマルチテナントに影響を及ぼす可能性があり、処理性能を改善するためのより多くの推測を潜在的に可能にする。
暗号はより速く、より軽くなり続けている。例えば、高度暗号化標準(AES)は、128ビットブロック暗号を使用して、数十年にわたってデータ暗号化の主流であった。一方、メモリアドレス指定は、今日では通常64ビットである。本明細書の実施形態は、64個のコンピュータのための64ビットメモリアドレス指定を参照して図示および説明され得るが、開示される実施形態は、そのように限定されることを意図するものではなく、32ビット、128ビット、またはポインタのための任意の他の利用可能なビットサイズに適応するように容易に適合され得る。同様に、本明細書の実施形態は、種々のサイズのブロック暗号(例えば、Simon、Speck、トウィーク可能K暗号、PRINCE、または任意の他のブロック暗号を使用して、64ビット、48ビット、32ビット、16ビットなど)に対応するようにさらに適合され得る。
近年、ポインタ暗号化に適した軽量暗号が登場している。例えば、PRINCE暗号は、10nmプロセスにおいてわずか799μmの面積しか必要としない3クロックで実装することができ、シリコン面積の10分の1でAESのレイテンシの半分を提供する。暗号コンピューティングは、これらの新しい暗号、ならびに他の暗号を利用して、新規のコンピュータアーキテクチャ概念を導入し得るものであり、これには、(i)暗号アドレス化指定、すなわち、参照されたデータに関するコンテキスト情報(例えば、ポインタおよび/または外部メタデータに埋め込まれたメタデータ)、アドレス自体のスライス、またはそれらの任意の好適な組み合わせをトウィークとして使用する、プロセッサにおけるデータポインタの暗号化、ならびに(ii)暗号符号化されたポインタまたはその部分、暗号符号化されていないポインタまたはその部分(複数可)、参照されたデータに関連付けられたコンテキスト情報、またはそれらの任意の好適な組み合わせをデータ暗号化のためのトウィークとして使用する、コアにおけるデータ自体の暗号化が含まれるが、これらに限定されない。メタデータ(例えば、カウンタモード(CTR)およびXOR-暗号化-XOR(XEX)ベースの暗号文盗用によるトウィークコードブックモード(XTS))を含めるために、トウィーク可能な種々の暗号化モードを使用することができる。データ機密性を提供する暗号化に加えて、その暗黙的な完全性により、プロセッサが、正しいキーストリームおよびトウィークを使用してデータが適切に解読されているかどうかを判定することができる。一部のブロック暗号暗号化モードでは、ブロック暗号により、キーストリームが作成され、次いで、キーストリームにより、入力ブロックと組み合わせて(例えば、XOR演算を使用して)、暗号化または解読されたブロックが生成される。一部のブロック暗号では、キーストリームは、次の入力ブロックの暗号化または解読を実行するために次のブロック暗号に供給される。
「メタデータウォール」とは、アクセス制御、オブジェクトタイプ/サイズ、およびバージョンなどのメモリ動作に関するメタデータを追加的にフェッチする問題を指し得る。今日のコンピュータアーキテクチャは、メモリアクセスが許可されるかどうかを判定するために、プロセッサがメタデータまたはデータに関するデータをルックアップすることを必要とする。メタデータのための追加のメモリアクセスは、性能に影響を与える可能性があり、メタデータのための追加のストレージが必要とされ、メタデータ自体は、セキュリティを提供するために保護される必要がある。ハードウェアがバッファオーバーフローを検出するために使用する境界テーブルの形態でメタデータを追加する一部の現在のソリューションは、一部のワークロードに対して400%のメモリオーバーヘッドを伴う最大4倍の性能への影響を有することが示されている。同様に、シャドウスタックメタデータは、制御フロー実施技術を可能にし、メモリタグ付けは、バージョニングのためにメタデータを使用し、能力では、データタイプを検証するためにメタデータを追加する。メモリタグ付けは、タイプ混同を軽減すること、および初期化されていない使用変数から保護することには適していない。加えて、メモリタグ付けのオーバーヘッドは、誤り訂正符号ビットを使用して低減され得るが、それにもかかわらず、追加のデバイスを必要とする可能性があり、これはコストを増加させる可能性がある。能力マシンはまた、ファットポインタを使用して、セキュリティメタデータをポインタとインラインで埋め込むことができ、ポインタサイズを2倍にすることにより、大きなメモリオーバーヘッド(例えば、ポインタヘビーアプリケーションにおいて25%)を課す。
対照的に、暗号コンピューティングの一部の実施形態は、暗号アドレス化指定およびデータ、暗号アドレス化指定およびコード、またはそれらの組み合わせに対するトウィークとして体系化されたコンテキスト情報(例えば、ポインタで符号化されたメタデータ、外部メタデータ)を提供して、かかるメタデータを含めることによって引き起こされる潜在的な性能およびメモリオーバーヘッドを排除することができる。特に、暗号コンピューティングにおけるベースアドレス暗号化は、メモリ安全性の脆弱性の主要なカテゴリを軽減すると同時に、コンパイラが静的に計算されたコンテキスト情報をプログラムコードに埋め込むことを可能にして、メタデータを動的にロードすることからの時間およびメモリオーバーヘッドを低減する。かかるオーバーヘッドは、動的メタデータのみに依存する過去の手法では相当大きいものであった。結果として得られる暗号化ベースアドレススライスは、秘密キーを超える追加の保護を必要とせず、データと同じメモリの再利用を可能にし得る。機能安全規格は、ますます重要になってきており、例えば、データ破損、アウトオブバウンドアクセス、制御フロー違反、およびアクセス許可違反などの脆弱性に対処するためにメモリ安全機構を使用することが必要となる。本明細書でさらに説明または示されるように、暗号化ベースアドレスを使用する暗号コンピューティングは、メモリの代わりに計算を使用して、同じ統一されたメカニズムで無数のかかるメモリ安全性の脆弱性を解決することができる。
図6を参照すると、図6は、本開示の少なくとも1つの実施形態による、セキュアメモリアクセス論理を用いて構成された例示的なコンピューティングデバイス600の簡略ブロック図である。図示の例では、コンピューティングデバイス600は、セキュアメモリアクセス論理650のセットおよび複数のレジスタ612を有するプロセッサ602を含む。セキュアメモリアクセス論理650は、間接アドレス614についてのメタデータを利用し、このメタデータは、間接アドレス614の未使用ビット(例えば、64ビットアドレスの非標準ビット、またはアドレス範囲内の対応する上位ビットがメタデータを記憶するために使用され得るように例えばオペレーティングシステムによって確保されたアドレス範囲)に符号化されて、間接アドレス614によって指し示されるメモリ位置をセキュアにし、かつ/またはアクセス制御を提供する。例えば、セキュアメモリアクセス論理650によって提供されるメタデータ符号化および復号により、間接アドレス614が操作されてバッファオーバーフローを引き起こすことを防止することができ、かつ/またはプログラムコードが、アクセスする許可を有していないメモリにアクセスすることを防止することができる。セキュアメモリアクセス論理650のアドレス符号化論理652は、メモリが(例えば、オペレーティングシステムによってヒープに)割り当てられ、複数の異なる方法のいずれかでプログラムを実行するために提供されるときに呼び出され、これには、malloc、alloc、もしくはnewなどの関数を使用すること、またはローダを介して暗黙的に、もしくはコンパイラによってメモリを静的に割り当てることなどが含まれる。その結果、割り当てメモリを指す間接アドレス614は、アドレスメタデータで符号化される。
アドレスメタデータは、タグ値またはバージョン番号を含み得る。タグ値は、メモリ割り当てのために生成されたランダム化ビットを含み得る。ランダム化されたビットは、メモリ割り当てに対して一意となるように生成され得る。バージョン番号は、参照される割り当てメモリの現在の所有権を時間内に決定するシーケンシャル番号など、決定論的に異なる値とすることができる。シーケンシャル番号は、間接アドレスが新たに割り当てられたメモリに対して作成されるたびに、所定の量だけインクリメントされ得る。タグ/バージョンは、間接アドレスに符号化されたベースアドレススライスを暗号化および解読するためのトウィークの一部として使用することができる。タグ/バージョンは、ベースアドレスが参照するデータまたはコードを暗号化および解読するためのトウィークの一部として使用することもできる。
アドレスメタデータはまた、有効範囲メタデータを含み得る。有効範囲メタデータは、実行プログラムが有効範囲内で間接アドレス614の値を操作することを可能にするが、メモリが有効範囲を超えて間接アドレス614を使用してアクセスされる場合、間接アドレス614を破損する可能性がある。代替的または追加的に、有効範囲メタデータは、有効コード範囲、例えば、プログラムコードがアクセスすることを許可されるメモリの範囲を識別するために使用され得る(例えば、符号化された範囲情報は、レジスタ上に明示的な範囲を設定するために使用され得る)。アドレスメタデータ内に符号化され得る他の情報は、間接アドレス614に対するアクセス(または許可)制限(例えば、間接アドレス614が、参照されたメモリを書き込む、実行する、または読み出すために使用され得るかどうか)を含む。
本明細書でさらに説明される少なくとも一部の他の実施形態では、他のメタデータ(またはコンテキスト情報)は、メモリ割り当てサイズ(例えば、間接アドレスによって参照される割り当てメモリのバイト数)、データまたはコードのタイプ(例えば、プログラミング言語によって定義されるデータまたはコードのクラス)、および/または許可(例えば、間接アドレスの読み出し、書き込み、および実行許可)、データまたはコードの位置(例えば、データまたはコードのサイズと組み合わされたアドレス)、ポインタ自体が記憶されるメモリ位置、データまたはコードの所有権、特権レベル(例えば、ユーザまたは監督者)、暗号コンテキスト識別子(または暗号コンテキストID)(例えば、各間接アドレスについてランダム化されたまたは決定論的に一意の値)などの間接アドレス614の未使用ビットに符号化され得る。他の実施形態では、かかるコンテキスト情報は、間接アドレスにおいて符号化されなくてもよいが、代わりに、コードストリームに埋め込まれるときに静的にアクセスされてもよく、またはメモリ内のテーブルルックアップを介して動的にアクセスされてもよい。一部の実施形態では、アドレスメタデータは、敵対者に対してタグを予測不可能にするために、間接アドレスに関連付けられたランダム化されたビットのタグを含み得る。敵対者は、ポインタによって参照されるメモリにアクセスすることができるようにタグ値を推測しようと試みる可能性があり、タグ値をランダム化すると、タグ値を生成するための決定論的手法と比較して、敵対者が値をうまく推測する可能性を低くすることができる。一部の実施形態では、ポインタは、バージョン番号を含み得、バージョン番号は、ランダム化されたタグ値の代わりに、またはそれに加えて、参照された割り当てデータの現在の所有権を時間内に決定する。例えばバージョン番号を生成するためのアルゴリズムが予測可能であるために、敵対者がメモリ領域の現在のタグ値またはバージョン番号を推測することができる場合であっても、敵対者は、後にポインタのその部分を解読するために使用されるキーにアクセスできないために、ポインタの対応する暗号化部分を正しく生成することができない場合がある。
アドレス復号論理662は、MOVなどのプロセッサ命令を利用するメモリ読み出しおよび書き込み動作において、符号化されたメタデータを検証する。ここで、汎用レジスタは、メモリから値を読み出す(例えば、ロード)またはメモリに値を書き込む(例えば、ストア)ためのメモリアドレスとして使用され、メモリの「使用」を伴う他の動作(例えば、メモリオペランドを有する算術命令、例えば、ADD、および制御転送命令、例えば、CALL/JMPなど)においても同様である。これらはメモリオペランドと見なされ、プロセッサ命令がその動作を実行するためにアクセスするメモリ内の位置を指定することができる。データメモリオペランドは、操作されるデータのメモリ内の位置を指定することができ、制御転送メモリオペランドは、制御転送のための宛先アドレスが記憶されるメモリ内の位置を指定することができる。アドレス復号論理662はまた、間接アドレスによって参照されるデータまたはコードをロードするための新しい命令、および間接アドレスによって参照されるデータまたはコードを記憶するための別の新しい命令について、符号化されたメタデータを検証するために呼び出され得る。これらの命令は、間接アドレスに埋め込まれたベースアドレススライスを解読するためのトウィークの一部として使用され得るコンテキスト情報とともに、パラメータとして間接アドレス(またはポインタ)を提供することができる。
例示的なセキュアメモリアクセス論理650は、プロセッサ命令の一部として(例えば、プロセッサ命令セットアーキテクチャの一部として)、またはマイクロコード(例えば、読み出し専用メモリに記憶され、プロセッサ602によって直接実行される命令)として具現化される。他の実施形態では、セキュアメモリアクセス論理650の部分は、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせとして(例えば、コンピューティングデバイス600の特権システム構成要素642によって実行されるプログラミングコードとして)具現化されてもよい。例えば、セキュアメモリアクセス論理650は、本明細書に開示されるような符号化されたアドレスを利用して命令論理をエミュレートする命令セットエミュレータ(例えば、PINツールなどのバイナリインストルメンテーションツール)としてソフトウェアで具現化されてもよい。
セキュアメモリアクセス論理650は、例えば、コンピューティングデバイス600によるプログラム(ユーザ空間ソフトウェアアプリケーションなど)の実行中に、間接アドレス「インライン」にセキュリティを提供するために、コンピューティングデバイス600によって実行可能である。本明細書で使用される場合、「間接アドレス」および「ポインタ」という用語はそれぞれ、特に、他のデータまたは命令が記憶されるメモリ位置のベースアドレスなどのアドレス(例えば、仮想アドレスまたは線形アドレス)を指し得る。一例では、データまたはコードが記憶されるメモリ位置の符号化メモリアドレスを記憶するレジスタは、ポインタとして機能し得る。したがって、間接アドレス614は、例えば、データポインタ(データの位置を指す)、コードポインタ(実行可能コードの位置を指す)、命令ポインタ、またはスタックポインタとして具現化され得る。したがって、間接アドレスは、「ポインタ」、「アドレスポインタ」、または「ポインタアドレス」など、他の用語で称されることがある。本明細書で使用される場合、「メタデータ」は、特に、有効データ範囲、有効コード範囲、ポインタアクセス許可、平文アドレススライスのサイズ(例えば、ビットの累乗として符号化される)、メモリ割り当てサイズ、データまたはコードのタイプ、データまたはコードの位置、データまたはコードの所有権、間接アドレスのバージョン、ランダム化されたビットのタグ、バージョン、ソフトウェアの特権レベル、暗号コンテキスト識別子など、間接アドレス614についてのまたはそれに関係する情報を指し得る。
本明細書で使用される場合、「メモリアクセス命令」は、特に、「MOV」もしくは「LOAD」命令、またはデータを1つの記憶位置、例えばメモリにおいて読み出し、コピーさせ、もしくは別様でアクセスさせ、別の記憶位置、例えばレジスタに移動させる任意の他の命令(「メモリ」は、メインメモリもしくはキャッシュ、例えばランダムアクセスメモリの形態を指すことがあり、「レジスタ」は、プロセッサレジスタ、例えばハードウェアを指し得る)、またはメモリにアクセスするもしくはメモリを操作する任意の命令を指し得る。また、本明細書で使用されるように、「メモリストア命令」は、特に、「MOV」もしくは「STORE」命令、またはデータが1つの記憶位置、例えば、レジスタにおいて読み出され、コピーされ、もしくは別様でアクセスされ、別の記憶位置、例えば、メモリに移動されるようにする任意の他の命令、またはメモリにアクセスもしくは操作する任意の命令を指し得る。本明細書の1または複数の実施形態では、暗号化ベースアドレススライスで符号化ポインタを使用してデータまたはコードをロードするための新しい命令(例えば、「LdEP」命令)、および暗号化ベースアドレススライスで符号化ポインタを使用してデータまたはコードを記憶するための新しい命令(例えば、「StEP」命令)が、本明細書でさらに説明される。
しかしながら、本明細書で開示される間接アドレス符号化/復号技術は、MOVまたはロード/ストア命令に限定されない。例えば、コール命令およびジャンプ命令などの制御転送命令は、MOV命令に関して本明細書で説明したのと同様の方法で符号化された間接アドレスを処理するように適合させることができ、コードは有効アドレス範囲内で実行される。同様に、命令ポインタ(例えば、レジスタ)は、制御転送命令(例えば、JMP/CALL)によって指定された符号化アドレスを所与として範囲境界とすることができ、結果として、符号化アドレスが命令ポインタに使用され、したがって、有効なプログラム実行を有効なアドレス範囲(効果的には、プログラムカウンタは、符号化範囲の終わりに達するまで正しくインクリメントすることができる)内に制限する。さらに、一部のアーキテクチャでは、任意の数のプロセッサ命令が、間接アドレスの形態のメモリオペランドを有してもよい(例えば、ADD、SUB、MUL、AND、OR、XORなどの算術演算は、間接アドレスの形態のソース/宛先メモリ参照を有してもよく、かつ/またはソース/宛先レジスタオペランドを有してもよい)。しかしながら、他のアーキテクチャでは、メモリオペランドのフォーマットは異なってもよい。例えば、レジスタは、有効アドレスを生成するために何らかの方法で(例えば加算によって)組み合わされてもよい。さらに、レジスタ値のうちの1つ(例えば、インデックス)を乗算するスケーリング係数、および/または直接加算される命令に埋め込まれた一定の変位値など、他のパラメータが所望により含まれ得る。さらに、例示的な実施形態は「命令」に言及しているが、かかる命令は、例えば、プロセッサ命令、オペレーティングシステムルーチン、または他の形態のコンピュータプログラムコードとして具現化され得ることに留意されたい。
例示的なセキュアメモリアクセス論理650は、アドレス符号化論理652(メタデータ符号化論理656およびアドレス暗号化論理658を含む)と、アドレス復号論理662(アドレス解読論理664およびアドレス形成論理666を含む)とを含む。セキュアメモリアクセス論理650はまた、暗号化ポインタ命令論理672(「EncryptBaseAddr」命令)と、特殊化ポインタ命令論理674(「SpecializePtr」命令)と、暗号化ポインタからのロード命令論理676(「LdEP」命令)と、暗号化ポインタへの記憶命令論理678(「StEP」命令)と、レガシーメモリアクセス命令論理(例えば、MOV命令)とを含む。アドレス符号化論理652およびアドレス復号論理662は、プロセッサ命令(例えば、672、674、676、678)において、または別個の命令もしくは一連の命令として、またはオペレーティングシステムカーネルもしくは仮想マシンモニタなどの特権システム構成要素によって実行される高レベルコードとして、または命令セットエミュレータとして具現化され得る。以下でより詳細に説明するように、アドレス符号化論理652およびアドレス復号論理662はそれぞれ、メモリ割り当て/アクセスレベルで間接アドレス614を保護するために、メタデータ(例えば、有効範囲、許可メタデータ、メモリ割り当てサイズ、タイプ、位置、所有権、バージョン、タグ値、特権レベル(例えば、ユーザまたは監督者)、暗号コンテキストIDなどのうちの1または複数)および秘密キー(例えば、秘密キー616(1))を使用して間接アドレス614に対して動作する。また、以下でより詳細に説明されるように、データ暗号化論理(図7に示される)およびデータ解読論理(図7に示される)は、データ/コード暗号化を間接アドレスにバインドすることによって、間接アドレス614によって参照されるメモリ位置におけるデータまたはコードをセキュアにするために、間接アドレスの少なくとも一部および秘密キー(例えば、秘密キー616(2))を使用して、データまたはコード(間接アドレス614によって参照される)に対して動作し得る。
例示的な間接アドレス614は、レジスタ612(例えば、プロセッサ602の汎用レジスタ)として具現化される。例示的な秘密キー616(1)~616(N)は、特権システム構成要素642のキー作成モジュール648によって生成され、レジスタ612(例えば、専用レジスタまたは機械固有レジスタ(MSR))のうちの1つ、またはプロセッサ602によって読み出し可能な別のメモリ位置に記憶され得る。一部の実施形態では、秘密キー616(1)~616(N)は、プロセッサによってのみ読み出し可能な位置に記憶され得る。他の実施形態では、間接アドレス、データ、およびコードをセキュアにするために使用される秘密キー616(1)~616(N)は、ファームウェア、データ記憶デバイス626もしくは別のデータ記憶デバイスのセキュア部分、または本明細書で説明する機能を実行するのに適した別の形態のメモリなど、別のメモリ位置に記憶することができる。一部の実施形態では、秘密キー616(1)~616(N)は、セキュアな通信チャネルを介して送信され、実行者(オペレーティングシステムまたは仮想マシンモニタなど、例えば、以下で説明する特権システム構成要素642)によって復元され得る。仮想マシンが1つのマシンから別のマシンに移行される仮想化環境において、かつ/または、間接アドレスおよび参照されるデータおよび/またはコードが秘密キーを使用して保護された後にコンピューティングデバイス600上で実行される仮想マシン、プロセス、またはプログラムがスリープ/休止モードを開始し、その後再開する場合において、秘密キーを回復および復元する必要がある。これらの場合、秘密キーは、スリープ/休止モードの前に、(セキュアな)通信チャネルを介して記憶または送信され、その後、実行者(オペレーティングシステムまたは仮想マシンモニタなど、例えば、特権システム構成要素642)によって取り出され/復元され得る。
本明細書で説明される実施形態は、任意の数の秘密キーが特定のプログラムに使用されることを可能にすることに留意されたい。一例では、同じ秘密キーが、プログラム内で使用される全ての間接アドレスに使用されてもよい。別の例では、異なるメモリ割り当てに関連付けられた各間接アドレスに対して、または異なるメモリ割り当てに関連付けられたメモリアドレスの各事前定義されたグループに対して、異なる秘密キーが使用されてもよい。さらに別の実施形態では、アドレス暗号化/解読に使用される同じ秘密キーを、そのアドレスにバインドされたデータを暗号化するために使用することもできる。他の実施形態では、1つの秘密キーがアドレス暗号化/解読に使用されてもよく、異なる秘密キーがそのアドレスにバインドされたデータの暗号化/解読に使用されてもよい。説明を容易にするために、本明細書でさらに説明される実施形態は、メモリアドレスの暗号化および解読動作における秘密キーの使用を指す「秘密アドレスキー」または「アドレスキー」を指し、データを暗号化および解読する動作における秘密キーの使用を指す「秘密データキー」または「データキー」を指す。同様に、本明細書で使用される「秘密コードキー」または「コードキー」への言及は、コードを暗号化および解読するための動作における秘密キーの使用を指すことが意図される。
メモリ割り当て動作(例えば、「malloc」)において(またはその間)、メモリ割り当て論理646は、バッファのためにメモリの範囲を割り当て、間接アドレス614およびメタデータ(例えば、範囲、許可メタデータ、メモリ割り当てサイズ、タイプ、位置、所有権、バージョン、タグ、特権レベル、暗号コンテキストIDなどのうちの1または複数)を返す。例えば、メモリ割り当て論理646は、間接アドレス614内の(例えば、未使用/非標準ビット内の)ランダム化されたビットまたはバージョン番号を有するタグを符号化するか、またはメタデータを1または複数の別個のパラメータとして命令に供給することができ、パラメータ(複数可)は、範囲、コード許可情報、メモリ割り当てサイズ、タイプ、位置、所有権、バージョン、タグ、特権レベル(例えば、ユーザまたは監督者)、暗号コンテキストID、またはそれらの何らかの好適な組み合わせを指定する。例示的に、メモリ割り当て論理646は、特権システム構成要素642のメモリマネージャモジュール644において具現化される。メモリ割り当て論理646は、アドレス符号化論理652を開始する。アドレス符号化論理652は、メタデータ符号化論理656を含み、これは、タグなどのメタデータを用いて、または他の符号化の変形形態(例えば、範囲、許可メタデータ、メモリ割り当てサイズ、タイプ、位置、所有権、バージョン、タグ値、特権レベル、暗号コンテキストID、それらの何らかの好適な組み合わせなど)における他のメタデータを用いて間接アドレス614を符号化する。アドレス符号化論理652は、間接アドレス614の未使用部分(例えば、64ビットアドレスの非標準ビット)にメタデータを記憶し得る。一部のメタデータまたはメタデータの組み合わせに対して、間接アドレス614は、メタデータまたはメタデータの組み合わせのサイズを収容するために、より大きなアドレス空間(例えば、628ビットアドレス、256ビットアドレス)において符号化されてもよい。
一実施形態では、アドレス符号化論理652は、間接アドレス614において暗号化および符号化されるベースアドレスの部分(またはスライス)を選択する。他の実施形態では、暗号化されるベースアドレスのスライスは、事前に知られていてもよい(例えば、下位32ビットなど)。アドレス暗号化論理658は、以下でさらに説明するように、秘密アドレスキー616(1)およびアドレストウィークを使用して、ベースアドレスの選択されたスライスを暗号化する。
メモリアクセス動作(例えば、読み出し、書き込み、または実行動作)時に、アドレス復号論理662は、以前に符号化された間接アドレス614を復号する。これを行うために、アドレス解読論理664は、以下でさらに説明するように、秘密キー616(1)およびアドレストウィークを使用して、間接アドレス614内に符号化ベースアドレスの暗号化スライスを解読する。暗号化対象のスライスの一部として含まれないベースアドレスの上位アドレスビット(UAB)は、テーブル(例えば、ポインタコンテキストテーブル621)またはレジスタ(例えば、オブジェクトコンテキスト618)に外部から記憶されてもよい。一部の平文オフセットビット(例えば、25)は、間接アドレス614の下位ビットに符号化される。少なくとも1つの実施形態では、それらはゼロに初期化され得る。
間接アドレス614は、間接アドレス614の元の値(例えば、真の元の線形メモリアドレス)を復元するために、適切な演算(例えば、アドレス復号論理662)に基づいて、その元の(例えば、標準の)形式に戻される。少なくとも1つの可能な実施形態においてこれを行うために、アドレス復号論理662は、間接アドレス614の未使用ビットに符号化されたアドレスメタデータ(例えば、タグ)を排除する(例えば、未使用ビットを元の形式に戻す)ことができる。暗号化スライスは、解読され、上位アドレスビットと連結され得る。結果は、オフセットに基づいて調整することができる。間接アドレス614が正常に復号された場合、メモリアクセス動作は正常に完了する。しかしながら、符号化された間接アドレス614が、その値が範囲メタデータによって示される有効範囲外になる(例えば、バッファをオーバーフローさせる)ように(例えば、ソフトウェアによって、不注意に、または攻撃者によって)操作された場合、間接アドレス614は、アドレス解読論理664によって実行される解読プロセスの結果として破損する。破損した間接アドレスは、障害(例えば、アドレスがページング構造/ページテーブルから存在するようにマッピングされない場合、一般的な保護障害またはページ障害)を引き起こす。障害が生成されることにつながり得る1つの条件は、疎なアドレス空間である。このシナリオでは、破損したアドレスが、マッピングされていないページに到着して、ページ障害を生成する可能性がある。このようにして、セキュアメモリアクセス論理650は、コンピューティングデバイス600が、バッファオーバーフロー攻撃および同様のエクスプロイトに対する間接アドレスセキュリティを提供することを可能にする。本明細書に開示される間接アドレスセキュリティ技術の実施形態はまた、ソフトウェアデバッギング目的のために、またはソフトウェアが許可を有しないメモリの領域にソフトウェアがアクセスすることを防止するためのアクセス制御メカニズムとして使用され得る。加えて、他のバッファオーバーフロー軽減技術と比較して、開示される間接アドレスセキュリティ技術の実施形態は、バイナリ修正なしに、またはレガシーコードを再コンパイルする必要なしに動作することができる。一部のシナリオでは、本明細書で開示される間接アドレス命令は、いかなる追加のメモリ読み出し/書き込みもなしに、またはいかなる追加の命令もなしに動作することができる。さらに、開示された技術の実施形態は、メモリを読み出してポインタ値を上書きすることができる敵対者、ならびに任意のポインタ値を作成/選択することができる敵対者に応答する。さらに、開示された技術の実施形態は、非常に小さいメモリ範囲から非常に大きいメモリ範囲までスケーリングすることができ、または異なる符号化ポインタを使用することによって他のメモリ範囲内でメモリ範囲をカスケードすることができる。またさらに、開示される技術の実施形態は、(例えば、範囲符号化ポインタをインラインでプログラム的に作成する能力に起因して)動的メモリ割り当てに有効である。加えて、開示される技術の実施形態は、データへのコードブロック(コード位置)アクセス制御を提供するように拡張され得る。さらに、開示される技術の実施形態は、x86命令セットの64ビットバージョン、ならびにARM、MIPS、PowerPC、およびアドレスを含むメタデータのためのアドレス範囲を予約することによって、より広い(例えば、64ビットより大きい)アドレスビットアーキテクチャおよびより小さい(例えば、32ビット)アーキテクチャを含む他のプロセッサアーキテクチャと互換性がある。
暗号コンピューティングは、データおよびコードに適用されてもよく、少なくとも一部の実施形態では、異なるキーが、データおよびコードの暗号化/解読のために使用されてもよい。データおよびコードに対する異なるキーの使用に対応するための1つの可能なアプローチは、別個のキャッシュを実装することである。したがって、暗号化された命令のための1または複数のキャッシュおよび暗号化データのための1または複数のキャッシュは、暗号コンピューティングにおいてコードおよびデータのために別個のキーが使用された場合に提供され得る。例えば、「コードキー」は、命令キャッシュに記憶され、特定のプロセスに関連付けられたコードを暗号化および解読するようにプログラムすることができ、「データキー」は、データキャッシュに記憶され、特定のプロセスに関連付けられたデータを暗号化および解読するようにプログラムすることができる。異なるプロセスに関連するコードおよびデータに対して、異なるコードキーおよびデータキーをプログラムすることができる。
図6の例では、プロセッサ602は、命令キャッシュ682(図3Bの命令キャッシュ334、図4のキャッシュ471もしくは481またはメモリ432もしくは434と同様であり得る)と、データキャッシュ684(図3Bのデータキャッシュユニット374、図4のキャッシュ471もしくは481またはメモリ432もしくは434と同様であり得る)とを含む。少なくとも1つの実施形態では、命令キャッシュ682およびデータキャッシュ684は、L1キャッシュであり得る。命令キャッシュ682は、暗号化されたコードを記憶し、プロセスごとに制御回路にプログラムされたコードキーを用いて暗号化されたコードの解読を可能にする制御回路を含み得る。データキャッシュ684は、暗号化データを記憶し、プロセスごとに制御回路にプログラムされたデータキーを用いて暗号化データの解読を可能にする制御回路を含み得る。命令キャッシュおよびデータキャッシュの制御回路(図4のIMC472、482と同様であり得る)は、メモリコントローラ回路(例えば、472、482)と組み合わされてもよく、または(全体的にもしくは部分的に)別個であってもよい。
1または複数の実施形態では、暗号コンピューティングにおいてキーを保護するためのセキュリティエンジン692およびキー管理ハードウェア694が、コンピューティングデバイス600内に構成され得る。セキュリティエンジン692およびキー管理ハードウェア694は、論理的に別個のエンティティであってもよく、または1つの論理的および物理的エンティティとして組み合わされてもよい。このエンティティは、コード(もしくはデータキー)を解読することができる暗号化キー、またはコードキー(もしくはデータキー)を導出することができる一意のキー識別子の形態で、コードキーおよびデータキーを提供するように構成される。セキュリティエンジン692およびキー管理ハードウェア694は、回路、ファームウェア、ソフトウェア、またはそれらの任意の好適な組み合わせとして具現化され得る。少なくとも一部の実施形態では、セキュリティエンジン692および/またはキー管理ハードウェア694は、プロセッサ602の一部を形成することができる。少なくとも一部の実施形態では、セキュリティエンジン692および/またはキー管理ハードウェア694は、特権状態で実行されるトラステッドファームウェア構成要素として具現化され得る。
一部の実施形態では、キーを記憶するために補助ハードウェア(HW)メモリ696も提供され得る。一部の例では、補助HWメモリ696は、新しいキャッシュまたはコンテンツアドレス指定可能メモリ(CAM)として実装され得る。1または複数の実装形態では、補助HWメモリ696は、少なくともキーが命令キャッシュ682およびデータキャッシュ684のキャッシュ回路に現在プログラムされていない場合、暗号化されたコードキーおよびデータキーまたは導出コードキーおよびデータキーを記憶するために使用され得る。
開示される技術の一部の実施形態は、以下で説明されるように、レガシーコード互換性をサポートするためにアドレス復号論理の態様を利用する。本明細書で使用される場合、「レガシーコード」は、以前の、または現在陳腐化している、またはもはやサポートされていないコンピュータアーキテクチャ上で動作するように設計されたコンピュータコードのバージョンを指し得る。例えば、レガシーコードは、元々は32ビットプロセッサ用に開発されたが、現在は64ビットプロセッサ上で実行されているソフトウェアを含んでもよい。レガシーコードはまた、本明細書で説明されるような間接アドレスを符号化および暗号化するための専用命令を使用することなく、またはそれらを使用するように適合されることなく設計されたコンピュータコードのバージョンを指す。
ここで図6をより詳細に参照すると、コンピューティングデバイス600は、本明細書で説明される機能を実行するための任意の種類の電子デバイスとして具現化され得る。例えば、コンピューティングデバイス600は、限定はしないが、スマートフォン、タブレットコンピュータ、ウェアラブルコンピューティングデバイス、ラップトップコンピュータ、ノートブックコンピュータ、モバイルコンピューティングデバイス、セルラー電話、ハンドセット、メッセージングデバイス、車両テレマティクスデバイス、サーバコンピュータ、ワークステーション、分散コンピューティングシステム、マルチプロセッサシステム、コンシューマ電子デバイス、および/または本明細書で説明する機能を実行するように構成された任意の他のコンピューティングデバイスとして具現化され得る。図6に示すように、例示的なコンピューティングデバイス600は、セキュアメモリアクセス論理650とともに具現化された少なくとも1つのプロセッサ602を含む。
コンピューティングデバイス600はまた、メモリ620、入力/出力サブシステム624、データ記憶デバイス626、表示デバイス628、ユーザインタフェース(UI)サブシステム630、通信サブシステム632、少なくとも1つのユーザ空間アプリケーション634、および特権システム構成要素642(例示的に、メモリマネージャモジュール644およびキー作成モジュール648を含む)を含む。コンピューティングデバイス600は、他の実施形態では、モバイルコンピュータおよび/または固定コンピュータ(例えば、種々のセンサおよび入力/出力デバイス)において概して見られるものなどの他のまたは追加の構成要素を含み得る。加えて、一部の実施形態では、例示的な構成要素のうちの1または複数は、別の構成要素に組み込まれてもよく、または別様で別の構成要素の部分を形成してもよい。コンピューティングデバイス600の構成要素の各々は、ソフトウェア、ファームウェア、ハードウェア、またはソフトウェアとハードウェアの組み合わせとして具現化され得る。
プロセッサ602は、本明細書で説明する機能を実行することが可能な任意の種類のプロセッサとして具現化され得る。例えば、プロセッサ602は、マルチコアプロセッサ、他のマルチCPUプロセッサもしくは処理/制御回路、または複数の多様な処理ユニットもしくは回路(例えば、CPUおよびGPUなど)として具現化されてもよい。プロセッサ602は、汎用レジスタ(GPR)、専用レジスタ(SPR)、および/またはモデル固有レジスタ(MSR)を含む複数のレジスタ612を有する。間接アドレス614および秘密キー616(1)~616(N)は、レジスタ612に記憶され得る。オブジェクトコンテキスト618はまた、レジスタに記憶されてもよい。オブジェクトコンテキスト618は、最上位ビットまたは「上位アドレスビット」(例えば、57ビット間接アドレス中の上位22ビット)のスライスを含み得、それは、オブジェクトのための間接アドレス(例えば、614)中で符号化されない。本明細書でさらに説明されるように、このシナリオでは、間接アドレスは、静的にアドレス指定可能なメモリ領域(例えば、クイックアクセスメモリ622)に記憶されたデータを参照することができる。データが静的にアドレス指定可能なメモリ領域に記憶される一部のシナリオでは、例えば、動的にアクセス可能なテーブルから上位アドレスビットまたは他のコンテキスト情報を動的に取得することなく、間接アドレスからデータの線形アドレスを生成することができる。代わりに、上位アドレスビットをレジスタから取得することができ、他のコンテキスト情報はプログラムコード内で静的に提供することができる。したがって、静的にアドレス指定可能なメモリ領域に記憶されたデータは、コンテキスト情報の動的ルックアップが必要とされる他のメモリに記憶されたデータよりも迅速にアクセスすることができる。しかしながら、データが静的にアドレス指定可能な領域に記憶されている場合であっても、他のコンテキスト情報が動的に取り出される場合もある。これは、静的にアドレス指定可能な領域に特定のオブジェクトを記憶することが望ましいが、コンパイラがそれらのオブジェクトのコンテキスト情報を静的に供給することができない場合に起こり得る。
プロセッサキー617(本明細書では「ハードウェアキー」とも称される)は、種々の暗号化、解読、および/またはハッシュ演算のために使用されてもよく、プロセッサ602のハードウェア内のセキュアキーとして構成されてもよい。プロセッサキー617は、例えば、ヒューズに記憶されてもよく、読み出し専用メモリに記憶されてもよく、またはランダム化されたビットの一貫したセットを生成する物理的に複製不可能な関数によって生成されてもよい。概して、プロセッサキー617は、ハードウェアで構成され、プロセッサ602には知られているが、特権ソフトウェア(例えば、オペレーティングシステム、仮想マシンマネージャ(VMM)、ファームウェア)または非特権ソフトウェアには知られていないか、または別様で利用可能ではない。
コンピューティングデバイス600のメモリ620は、本明細書で説明される機能を実行し得る任意の種類の揮発性もしくは不揮発性メモリまたはデータストレージとして具現化され得る。動作中、メモリ620は、コンピューティングデバイス600の動作中に使用される種々のデータおよびソフトウェア、ならびにオペレーティングシステム、アプリケーション、プログラム、ライブラリ、およびドライバを記憶することができる。1または複数の実施形態では、メモリ620は、複数のテーブルエントリを含み得るポインタコンテキストテーブル621を含む。ポインタコンテキストテーブル621の位置は、例えば、モデル固有レジスタ(MSR)などのレジスタによって定義される物理的にアドレス指定可能なテーブルベースとして示すことができる。各テーブルエントリは、メモリ内のオブジェクトへの暗号符号化されたポインタに関連するコンテキスト情報を含み得る。一実施形態では、コンテキスト情報は、サイズメタデータ(例えば、オブジェクトのメモリ割り当てサイズを示す値)、タイプメタデータ(例えば、オブジェクトのタイプまたはクラス)、および許可メタデータ(例えば、オブジェクトへのポインタの許可)を含み得る。1または複数のテーブルエントリはまた、暗号符号化されたポインタに関連付けられた上位アドレスビット(UAB)を含み得る。1または複数の他のテーブルエントリは、例えば、上位アドレスビットがレジスタ(例えば、618)に記憶されている場合、暗号符号化されたポインタに関連付けられた上位アドレスビットのゼロを符号化することができる。少なくとも1つの実施形態では、ポインタコンテキストテーブル621は、オブジェクトへの暗号符号化されたポインタの暗号化スライスによってインデックス付けされ得る。各テーブルエントリは、それぞれの暗号符号化されたポインタの暗号化スライスによってインデックス付けされ得る。しかしながら、他の実施形態では、インデックス、他のポインタ、ハッシュテーブル、またはテーブルエントリとそれらのそれぞれのポインタとの間の関係、接続、リンク、もしくは関連付けを表す任意の他の技術を含むが、必ずしもこれらに限定されない、任意の好適な技術が、テーブルエントリをそれらのそれぞれのポインタにインデックス付けまたは別様でマッピングするために使用されてもよい。また、他のインデックスを用いてもよい。例えば、十分に一意である暗号符号化されたポインタの任意の部分を使用して、ポインタコンテキストテーブルにインデックス付けを行ってもよい。例えば、ポインタコンテキストテーブル621は、ベースアドレスの暗号化スライス、ベースアドレスにタグ部分を加えた暗号化スライス、暗号符号化されたポインタ全体など、暗号符号化されたポインタの少なくとも一部分によってインデックス付けされ得るが、ポインタがソフトウェアによって修正されない限り、暗号符号化されたポインタ全体がインデックスとして好適であり得ることに留意されたい。例えば、ソフトウェアがオブジェクト内のフィールドを指すようにポインタ内のオフセットを更新すると、ポインタは変化する。この場合、ポインタ全体によってテーブルにインデックスを付けることは、テーブルエントリが見つからない可能性がある。テーブルは、本明細書でさらに説明するように、新しい命令セットアーキテクチャ(ISA)を使用してユーザ空間から管理することができる。しかしながら、テーブル内の衝突が起こり得るので、オペレーティングシステムは、本明細書でさらに説明するように、かかる発生を処理する責任を負う。
メモリ620の一部の領域は、クイックアクセスメモリ622として定義され得る。クイックアクセスメモリ622は、レジスタ(例えば、612)が領域の上位アドレスビットを指定することができるメモリの領域を表す。例えば、4GBのメモリ領域は、4GBのデータ(またはコード)を記憶し得るクイックアクセスメモリとして指定されてもよく、メモリアクセスは、適切なコンテキスト情報(例えば、メモリ割り当てサイズ、タイプ、許可)を供給し、メモリ内のテーブル(例えば、ポインタコンテキストテーブル621)ではなくレジスタ(例えば、オブジェクトコンテキスト618)から上位アドレスビットをプルする命令によって実行することができる。クイックアクセスメモリ領域は、図示のように4GBであり得るが、特定の必要性および実装形態に従って、任意の他の好適なメモリサイズをクイックアクセスメモリとして指定することができる。例えば、オブジェクトが8バイト境界に整列されている場合、クイックアクセスメモリ領域は32GBであってもよい。
メモリ620は、例えば、I/Oサブシステム624を介して、プロセッサ602に通信可能に結合される。I/Oサブシステム624は、プロセッサ602、メモリ620、およびコンピューティングデバイス600の他の構成要素との入力/出力動作を容易にする回路および/または構成要素として具現化され得る。例えば、I/Oサブシステム624は、メモリコントローラハブ、入力/出力制御ハブ、ファームウェアデバイス、通信リンク(すなわち、ポイントツーポイントリンク、バスリンク、ワイヤ、ケーブル、ライトガイド、プリント回路基板トレースなど)、および/または入力/出力動作を容易にするための他の構成要素およびサブシステムとして具現化されてもよく、または別様でこれらを含んでもよい。一部の実施形態では、I/Oサブシステム624は、システムオンチップ(SoC)の部分を形成してもよく、プロセッサ602、メモリ620、および/またはコンピューティングデバイス600の他の構成要素とともに、単一の集積回路チップ上に組み込まれてもよい。
データ記憶デバイス626は、例えば、メモリデバイスおよび回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブ、フラッシュメモリもしくは他の読み出し専用メモリ、読み出し専用メモリとランダムアクセスメモリとの組み合わせであるメモリデバイス、または他のデータ記憶デバイスなどの、データの短期ストレージまたは長期ストレージのために構成された任意の種類の物理デバイスまたは複数のデバイスとして具現化されてもよい。
表示デバイス628は、液晶ディスプレイ(LCD)、発光ダイオード(LED)、プラズマディスプレイ、陰極線管(CRT)、または他のタイプの表示デバイスなど、デジタル情報を表示することが可能な任意の種類のディスプレイとして具現化することができる。一部の実施形態では、表示デバイス628は、コンピューティングデバイス600とのユーザ対話を可能にするために、タッチスクリーンまたは他のヒューマンコンピュータインタフェースデバイスに結合され得る。表示デバイス628は、ユーザインタフェース(UI)サブシステム630の一部であり得る。ユーザインタフェースサブシステム630は、コンピューティングデバイス600とのユーザ対話を容易にするために、物理的もしくは仮想制御ボタンもしくはキー、マイクロフォン、スピーカ、単方向もしくは双方向スチルカメラおよび/もしくはビデオカメラ、ならびに/または他のものを含む、複数の追加のデバイスを含み得る。ユーザインタフェースサブシステム630はまた、コンピューティングデバイス600を伴う種々の他の形態の人間の対話を検出し、キャプチャし、処理するように構成され得る、モーションセンサ、近接センサ、および視線追跡デバイスなどのデバイスを含み得る。
コンピューティングデバイス600は、コンピューティングデバイス600と他の電子デバイスとの間の通信を可能にし得る任意の通信回路、デバイス、またはそれらの集合として具現化され得る通信サブシステム632をさらに含む。通信サブシステム632は、任意の1または複数の通信技術(例えば、無線または有線通信)および関連付けられたプロトコル(例えば、イーサネット(登録商標)、Bluetooth(登録商標)、Wi-Fi(登録商標)、WiMAX(登録商標)、3G/LTEなど)を使用して、かかる通信を達成するように構成され得る。通信サブシステム632は、無線ネットワークアダプタを含むネットワークアダプタとして具現化され得る。
例示的なコンピューティングデバイス600はまた、ユーザ空間アプリケーション634および特権システム構成要素642などの複数のコンピュータプログラム構成要素を含む。ユーザ空間アプリケーション634は、例えば、表示デバイス628またはUIサブシステム630を介して、エンドユーザと直接的または間接的に対話する、任意のコンピュータアプリケーション(例えば、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせ)として具現化されてもよい。ユーザ空間アプリケーション634の一部の例は、ワードプロセッシングプログラム、ドキュメントビューア/リーダ、ウェブブラウザ、電子メールプログラム、メッセージングサービス、コンピュータゲーム、カメラおよびビデオアプリケーションなどを含む。特に、特権システム構成要素642は、ユーザ空間アプリケーション634とコンピューティングデバイス600のハードウェア構成要素との間の通信を容易にする。特権システム構成要素642の部分は、Microsoft CorporationによるWINDOWS(登録商標)、Google,Inc.によるANDROID(登録商標)、および/またはその他のバージョンなど、本明細書で説明される機能を実行することが可能な任意のオペレーティングシステムとして具現化され得る。代替的または追加的に、特権システム構成要素642の部分は、本明細書で説明される機能を実行し得る任意の種類の仮想マシンモニタ(例えば、タイプIまたはタイプIIハイパーバイザ)として具現化され得る。
例示的な特権システム構成要素642は、メモリマネージャモジュール644およびキー作成モジュール648など、複数のコンピュータプログラム構成要素を含む。特権システム構成要素642の構成要素の各々は、ソフトウェア、ファームウェア、ハードウェア、またはソフトウェアとハードウェアの組み合わせとして具現化され得る。例えば、特権システム構成要素642の構成要素は、オペレーティングシステムカーネル、仮想マシンモニタ、またはハイパーバイザのモジュールとして具現化されてよい。メモリマネージャモジュール644は、コンピューティングデバイス600上で実行される種々のプロセスにメモリ620の部分を割り当てる(例えば、仮想メモリアドレスの範囲として)。メモリマネージャモジュール644は、例えば、ローダ、メモリマネージャサービス、またはヒープ管理サービスとして具現化される。キー作成モジュール648は、秘密キー616(1)~616(N)(例えば、秘密アドレスキー、秘密データキー、秘密コードキー)を作成し、それらをプロセッサ602が読み出しアクセスを有する1または複数のレジスタ(例えば、専用レジスタ)に書き込む。秘密キーを作成するために、キー作成モジュール648は、例えば、乱数発生器、または本明細書で説明する機能を実行し得る秘密キーを生成することが可能な別のアルゴリズムを実行することができる。
本明細書で開示される実施形態のキーを生成または取得するために、無数の手法を使用することができることに留意されたい。例えば、キー作成モジュール648がコンピューティングデバイス600の一部として示されているが、1または複数の秘密キーは、キーをコンピューティングデバイス600に安全に通信するために任意の好適な認証プロセスを使用して任意の好適な外部ソースから取得することができ、これには、これらのプロセスの一部としてキーを生成することが含まれ得る。さらに、特権システム構成要素642は、トラステッド実行環境(TEE)、仮想マシン、プロセッサ602、コプロセッサ(図示せず)、またはコンピューティングデバイス600内の、もしくはコンピューティングデバイス600にセキュアに接続された任意の他の好適なハードウェア、ファームウェア、もしくはソフトウェアの一部であり得る。さらに、キーは「秘密」であってもよく、これは、その値が隠されているか、アクセス不可能であるか、難読化されているか、または別様で不正な行為者(例えば、ソフトウェア、ファームウェア、機械、無関係なハードウェア構成要素、および人間)から保護されていることを意味するように意図されている。
図7は、本開示の少なくとも1つの実施形態による、図6のセキュアメモリアクセス論理の適用を示す簡略化された環境図である。一部の実施形態では、コンピューティングデバイス600は、動作中に環境700(例えば、ネイティブおよび/または仮想ランタイムまたは「実行」環境)を確立することができる。例示的な環境700に示される種々のモジュールは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせとして具現化され得る。環境700において、ユーザ空間アプリケーション634(または、例えばユーザ空間アプリケーション634をロードする際の特権システム構成要素642)は、コンピューティングデバイス600の動作中に、随時、メモリ割り当て702を発行することができる。メモリ割り当て702は、プロセッサ602に渡される前に、必要に応じて、特権システム構成要素642のメモリ割り当て論理646によって変換(例えば、コンパイルまたは解釈)され得る。
プロセッサ602において、アドレス符号化論理652は、メモリ割り当て702に応答して(例えば、従来の「malloc」命令/関数呼び出しの代わりに)実行される。1または複数の実施形態では、メモリマネージャモジュール644(またはメモリアロケータ)は、暗号化ポインタ命令(EncryptBaseAddr)を実行するヒープアロケータまたはスタックアロケータを含むことができ、これは、オブジェクトが割り当てられる領域の境界に対するオブジェクトのサイズに関する追加のチェック、および一部のシナリオにおいてコンテキスト情報を記憶するためのテーブル管理ととともに、アドレス符号化論理652を実行する。加えて、特殊化ポインタ命令(SpecializePtr)は、オブジェクトが別のポインタによって割り当てられたメモリ内に含まれていること、および特殊化ポインタに与えられた許可が他のポインタに与えられた許可よりも大きくないことを保証するための追加のチェックとともに、アドレス符号化論理652を実行することもできる。
従来のmalloc命令が単にメモリを割り当て、(セキュアでない)ポインタを返すのに対して、アドレス符号化論理652は、ランダム化されたビットのタグなどのメタデータ705を含む間接アドレス704を符号化し、または他の符号化では、他のメタデータ(例えば、範囲許可情報、メモリ割り当てサイズ、タイプ、位置、所有権、バージョン、特権レベル、暗号コンテキストIDもしくはキー、またはそれらの任意の組み合わせなど)が含まれてもよく、符号化された間接アドレス706を返す。メタデータは、平文フォーマットで間接アドレスまたはポインタ(例えば、標準64ビットレジスタ、またはより多くのメタデータに適合する628ビットもしくは756ビットなどの拡大レジスタ)に埋め込まれてもよく、ポインタ暗号化/解読命令およびデータアクセス命令に提供される別のオペランド内に埋め込まれてもよく、メモリ内もしくは制御レジスタ内のテーブルに記憶されてもよく、またはそれらの任意の組み合わせを介して提供されてもよい。例えば、タグ値はポインタに埋め込まれてもよく、暗号コンテキストIDは制御レジスタに記憶されてもよい。
同様に、ユーザ空間アプリケーション634または特権システム構成要素642は、随時、メモリストア711を発行することができ、これは、レジスタ612(または他の記憶ユニット)から読み出し、間接アドレス614を使用してメモリ620またはキャッシュに書き込むプロセッサ命令(例えば、STORE、MOV命令)としてプロセッサ602によって処理することができる。一例としてSTORE命令を使用すると、メモリストア命令論理670は、符号化された間接アドレス706を復号するためにアドレス復号論理662を正常に実行した後にのみデータを記憶し、また、間接アドレス704によって指し示されるメモリ位置に記憶されるデータを暗号化するために、データトウィークおよび秘密データキー616(2)に基づいてデータ暗号化論理679を正常に実行した後にもデータを記憶する。アドレス復号論理662の実行の成功は、アドレス解読論理664の実行の成功に基づいており、アドレストウィークおよび秘密アドレスキー616(1)を使用して、符号化された間接アドレス706の暗号化アドレススライスを解読する。
同様に、ユーザ空間アプリケーション634または特権システム構成要素642は、随時、メモリロード720を発行することができ、これは、間接アドレス614(例えば、LdEPまたはMOV命令)を使用してメモリ620から読み出し、レジスタ612に書き込むプロセッサ命令としてプロセッサ102によって処理することができる。暗号化ポインタからのロード(LdEP)命令を一例として使用すると、暗号化ポインタからのロード命令論理676は、符号化された間接アドレス706を復号するためにアドレス復号論理662を正常に実行した後にのみメモリアクセスを実行する。アドレス復号論理662の実行の成功は、アドレス解読論理664の実行の成功に基づいており、アドレストウィークおよび秘密アドレスキー616(1)を使用して、符号化された間接アドレス706の暗号化アドレススライスを解読する。間接アドレス704が返され、間接アドレス704によって指し示されるメモリ位置からデータをロードするためにメモリ620がアクセスされると、ロードされたデータは、データトウィークおよび秘密データキー616(2)に基づいてデータ解読論理677を実行することによって解読することができる。データ解読論理677の実行の成功は、データを解読するためのデータトウィークを作成するために使用される間接アドレスの部分、およびデータトウィークを作成するために使用される追加メタデータ(もしあれば)が、間接アドレスによって指し示されるメモリ位置の元の割り当てに対応するかどうかに依存する。
アドレス復号論理662は、図7において、暗号化ポインタへの記憶命令論理678および暗号化ポインタからのロード命令論理676とは別個のモジュールとして示されているが、アドレス復号論理662は、命令論理678および/または676に組み込むことができ、または別個の命令セットとして具現化され得ることを理解されたい。さらに、アドレス復号論理662は、LdEP、StEP、およびMOV命令(例えば、メモリオペランド、呼び出し、JMPなどを有する算術命令)の代わりに、またはそれに加えて、他のタイプの命令に組み込まれるか、またはそれによって参照され得ることを理解されたい。例えば、callおよびJMPなどの制御転送命令は、実行するコードの符号化ポインタアドレスをプロセッサのプログラムカウンタレジスタ(例えば、命令ポインタ)(例えば、RIPであり、RIPは64ビットコードの命令ポインタレジスタである)にロードすることができる。次いで、命令ポインタレジスタは、プロセッサによって照会することができ、その結果、現在のプログラムカウンタアドレスは、符号化された形式(現在のプログラムカウンタ位置へのオフセット)になる。
アドレス復号論理662が、符号化された間接アドレス706の復号に成功した場合(これは、アドレス解読論理664が符号化された間接アドレス内の暗号化アドレススライスの解読に成功したことを含む)、元の間接アドレス704が特権システム構成要素642に返され、メモリアクセスが完了するか、またはプログラム実行が新しいプログラムカウンタ位置で始まる(制御フローが変更された場合)。符号化された間接アドレス706が正常に復号されない場合、障害が発生する。メモリストア711の成功した完了または失敗に基づいて、適切な検証または障害信号713がユーザ空間アプリケーション634に返される。同様に、メモリロード720の成功した完了または失敗に基づいて、適切な検証または障害信号722がユーザ空間アプリケーション634に返される。
暗号化ベースアドレス(EBA)フォーマットの暗号符号化されたポインタ
図8は、暗号化ベースアドレス(EBA)フォーマットに暗号符号化されたポインタを使用するメモリ割り当ておよびアクセスに関連するソフトウェアユニット、ハードウェア、およびデータフローの追加の詳細を示す簡略化されたフロー図800である。EBAフォーマットを有するポインタは、ベースアドレスの暗号化スライスと、ベースアドレスに記憶されたデータに関連付けられたメタデータの少なくとも1つの項目とを用いて符号化される。1または複数の実施形態では、コンピューティングデバイス600などのコンピューティングデバイスは、ソフトウェアユニット810、ハードウェア820、およびデータフロー830を含む。ソフトウェアユニット810は、メモリアロケータ812、メモリアロケータ呼び出し関数814、およびメモリアクセス関数816を含む。ハードウェア820は、ポインタ暗号および符号化ユニット822、データキャッシュユニット824、およびデータ暗号ユニット826を含む。データフロー830は、生ポインタ831、非型付きコンテキスト832、暗号化された非型付きポインタ833、型付きコンテキスト834、暗号化された型付きポインタ835、暗号化データ837、および解読データ838を含む。
暗号化ポインタ(EncryptBaseAddr)命令802は、メモリアロケータ812によって呼び出すことができる。例えば、メモリアロケータ呼び出し関数814は、オブジェクト(例えば、malloc命令)のメモリを要求することによってメモリアロケータ812を呼び出してもよく、メモリアロケータ812は、EncryptBaseAddr命令802を呼び出すヒープアロケータまたはスタックアロケータを含んでもよい。EncryptBaseAddr命令802は、ポインタ暗号および符号化ユニット822に、非型付きコンテキスト832を使用して生ポインタ831のスライスを暗号化させる。生ポインタ831は、EncryptBaseAddr命令802のレジスタオペランドとして渡され、オブジェクトが記憶される割り当てメモリのための平文ベースアドレスを表す。暗号化されるベースアドレスのスライスは、アドレス内の所定のビット(例えば、ビット3~34)を含む。ベースアドレス中の上位ビットは、外部に(例えば、メモリ中のテーブルまたはレジスタ中に)記憶され得る。非型付きコンテキスト832はまた、レジスタオペランドとして渡され、例えば、オブジェクトに対するメモリ割り当てサイズおよび許可メタデータなどのコンテキスト情報を含んでもよい。非型付きコンテキスト832は、オブジェクトに対する型メタデータを含まない。非型付きコンテキスト832は、生ポインタ831のスライス(例えば、平文ベースアドレス)を暗号化するための暗号化アルゴリズム(例えば、ブロック暗号)へのトウィーク入力として使用され得る。ポインタ暗号および符号化ユニット822はまた、ベースアドレススライスのためのトウィークの一部として使用され得る、ランダム化されたビットのタグを生成することができる。少なくとも1つの実施形態では、ポインタ暗号および符号化ユニット822は、タグ、暗号化ベースアドレススライス、およびポインタ833内のオフセットを連結することによって、暗号化された非型付きポインタ833を生成する。オフセットは、ゼロに初期化され得る。
メモリアロケータ呼び出し関数814は、暗号化された非型付きポインタ833などの以前に符号化されたポインタに基づいて、特殊化ポインタ命令804(SpecializePtr)を呼び出すことができる。少なくとも1つの実施形態では、暗号化された非型付きポインタ833、非型付きコンテキスト832、および型付きコンテキスト834は、SpecializePtr命令804のレジスタオペランドとして渡され得る。SpecializePtr命令804は、ポインタ暗号および符号化ユニット822に、元のコンテキスト(例えば、非型付きコンテキスト832)を使用して、暗号化された非型付きポインタ833の暗号化ベースアドレススライスを解読させる。ベースアドレスの上位アドレスビットは、取り出され、解読されたベースアドレススライスと連結され得る。解読されたベースアドレススライスが元のベースアドレスのビット3~34を表す場合(すなわち、アドレスが8バイト整列されているためにそれを表す場合)、「0」に初期化された3ビットが解読されたベースアドレススライスの末尾に連結されて元のベースアドレスが取得される。暗号化された非型付きポインタ833のオフセットを元のベースアドレスに加算して、特殊化ポインタが生成される割り当てメモリ内のサブ領域(または割り当てメモリの同じ領域)に対する特殊化ベースアドレスを取得することができる。例えば、オフセットが変化した場合、特殊アドレスは、割り当てメモリ内の位置を指す。オフセットが変化していない場合、特殊アドレスは元のベースアドレスと同じ位置を指す。これは、例えば、同じオブジェクトへの制限されたアクセスが所望される場合、特殊アドレスに対する許可を減らすことができるため、望ましい場合がある。特殊アドレスが計算されると、新しいコンテキスト(例えば、型付きコンテキスト834)は、特殊アドレスのスライスを暗号化するために、暗号化アルゴリズム(例えば、ブロック暗号)へのトウィーク入力として使用され得る。少なくとも1つの実施形態では、型付きコンテキスト834は、メモリ割り当てサイズ、許可、およびオブジェクトのタイプを含む。型付きコンテキスト834におけるメモリ割り当てサイズは、非型付きコンテキスト832におけるメモリ割り当てサイズと同じであるか、またはそれよりも小さくてもよい。型付きコンテキスト834内の許可メタデータは、非型付きコンテキスト832内の許可メタデータと同じであるか、またはそれよりも小さくてもよい。ポインタ暗号および符号化ユニット822はまた、特殊アドレススライスのためのトウィークの一部として使用され得る、ランダム化されたビットのタグを生成し得る。メモリの同じ領域にアクセスするために使用されるポインタのタグは、正しいデータ解読を保証するために一致する必要がある。他の実施形態では、暗号化された非型付きポインタ833において符号化されたタグが代わりに使用され得る。少なくとも1つの実施形態では、ポインタ暗号および符号化ユニット822は、タグ(新たに生成されたタグまたはポインタ835内で符号化された元のタグのいずれか)、暗号化された特殊アドレススライス、およびポインタ833内のオフセットを連結することによって、暗号化された型付きポインタ835を生成する。オフセットは、ゼロに初期化され得る。
ポインタが、ベースアドレススライスまたは特殊アドレススライス、メタデータ(例えば、タグ)、およびオフセットを用いて暗号符号化された後、暗号符号化されたポインタは、ポインタによって参照されるメモリ位置に記憶されたオブジェクトにアクセスするために使用され得る。したがって、暗号化された非型付きポインタ833および暗号化された型付きポインタ835の両方を使用して、それぞれの許可に基づいてそれぞれの位置でメモリにアクセスすることができる。説明のために、図8は、暗号化された型付きポインタ835などの特殊化ポインタがメモリにアクセスするためにどのように使用され得るかをさらに示している。例えば、メモリアクセス関数816は、暗号化された型付きポインタ835などの以前に符号化されたポインタに基づいて、暗号化ポインタからのロード命令806(LdEP)を呼び出すことができる。少なくとも1つの実施形態では、暗号化された型付きポインタ835および型付きコンテキスト834は、LdEP命令806のレジスタオペランドとして渡され得る。LdEP命令806は、ポインタ暗号および符号化ユニット822に、型付きコンテキスト834をトウィークとして使用して、暗号化された型付きポインタ835の暗号化された特殊アドレススライスを解読させ、生ポインタ836を生成させる。(ベースアドレスの上位アドレスビットと同じである)特殊アドレスの上位アドレスビットは、取り出され、解読された特殊アドレススライスと連結され得る。解読された特殊アドレススライスが元の特殊アドレスのビット3~34を表す場合(すなわち、特殊アドレスが8バイト整列されているためにそれを表す場合)、「0」に初期化された3ビットが解読された特殊アドレススライスの末尾に連結されて元の特殊アドレスが取得される。暗号化された型付きポインタ835のオフセットは、アクセスされるメモリ内の位置である生ポインタ836を取得するために、元の特殊アドレスに加算され得る。オフセットが存在しない場合、生ポインタ836は元の特殊アドレスを表す。
生ポインタ836が生成されると、LdEP命令806は、境界および許可などのアクセス制御チェックを実行する。アクセス制御チェックが成功した場合、所望のメモリ位置からのオブジェクト(またはデータ)が宛先オペランドにロードされ、解読される。生ポインタ836は、データキャッシュユニット824などのメモリからレジスタにデータをロードするために使用される。少なくとも1つの実施形態では、アクセスされているデータは、暗号化された型付きポインタ835をデータにバインドするトウィークを使用して暗号化される。例えば、データを暗号化するために使用されるトウィークは、生ポインタ836と、暗号化された型付きポインタ835に符号化されたタグとを含んでもよい。1または複数の実施形態では、例えば、暗号コンテキスト識別子(または暗号コンテキストID)(例えば、ポインタに割り振られた64ビットランダムまたは決定論的に一意の値)および/または他の可変長メタデータ(例えば、範囲、位置、所有権、バージョン、特権レベルなど)を含む追加のコンテキストも、トウィークにおいて使用され得る。LdEP命令806は、データ暗号ユニット826に、同じトウィークを使用して暗号化データ837を解読させて、解読データ838を生成させる。アドレスメタデータは、敵対者に対してタグを予測不可能にするために、間接アドレスに関連付けられたランダム化されたビットのタグを含み得る。敵対者は、ポインタによって参照されるメモリにアクセスすることができるようにタグ値を推測しようと試みる可能性があり、タグ値をランダム化すると、タグ値を生成するための決定論的手法と比較して、敵対者が値をうまく推測する可能性を低くすることができる。一部の実施形態では、間接アドレスは、バージョン番号(または他の決定論的な値)を含み得、バージョン番号は、ランダム化されたタグ値の代わりに、またはそれに加えて、参照された割り当てデータの現在の所有権を時間内に決定する。例えばバージョン番号を生成するためのアルゴリズムが予測可能であるために、敵対者がメモリ領域の現在のタグ値またはバージョン番号を推測することができる場合であっても、敵対者は、後にポインタのその部分を解読するために使用されるキーにアクセスできないために、ポインタの対応する暗号化部分を正しく生成することができない場合がある。
本開示の一部の実施形態は、種々の暗号コンピューティング動作のための命令および処理論理を含む。図9は、本開示の実施形態による、種々の暗号コンピューティング動作のための命令および論理のためのシステム900のブロック図である。
暗号コンピューティング(CC)中央処理装置(CPU)は、コードを暗号化/解読し、メモリキャッシュとの間で転送されるデータを暗号化/解読し、ポインタを符号化/復号し、コードおよびデータの完全性を認証するための複数の暗号化エンジンを有し得る。これらのエンジンは、ユーザアプリケーションおよび一部の場合ではオペレーティングシステム(OS)などのトラステッドコンピューティングベース(TCB)の外部への公開を防止するためにセキュアに記憶される必要がある暗号キーおよび/またはトウィークを必要とする場合がある。例えば、暗号キーおよび/またはトウィークは、内部ハードウェアレジスタに記憶されてもよい。1または複数の実施形態では、これらのキーは、テナント間のデータ漏洩を回避するために、同じハードウェア上で実行される各アプリケーションテナント(例えば、アプリケーション)に対して一意であるべきである。ハードウェアは、どのテナントが実行されているかに基づいて正しいキーでプログラムされる。各並列ハードウェアユニット(例えば、コア)は、それ自体のキーレジスタのセットを有することができる。
システム900は、1または複数のコアを有するプロセッサ、SoC、集積回路、または他のメカニズムを含み得る。例えば、システム900は、コア904を有するプロセッサ901を含んでもよい。図9ではコア904が一例として示され説明されているが、プロセッサ901内の複数のコアを含む任意の好適なメカニズムが使用されてもよい。コア904は、暗号コンピューティング動作を実行するための任意の好適なメカニズムを含むことができ、これには、128ビットポインタキー、データキー、およびコードキーをプログラムすること、プロセス間でキーを切り替えること、ルーティング可能なポインタを作成すること、ポインタを圧縮/解凍すること、オブジェクトのポインタ所有権を転送すること、ならびに1つのアドレスから異なるアドレスにデータをメモリ移動/反転することを伴うものが含まれる。一実施形態では、かかるメカニズムは、ハードウェアで実装され得る。コア904は、図1~8で説明された要素によって完全にまたは部分的に実装され得る。
コア904上で実行される命令は、命令ストリーム902内に含まれ得る。命令ストリーム902は、例えば、コンパイラ、ジャストインタイムインタープリタ、または他の好適なメカニズム(システム900に含まれる場合も含まれない場合もある)によって生成されてもよく、または命令ストリーム902をもたらすコードのドラフタによって指定されてもよい。例えば、コンパイラは、アプリケーションコードを取得し、命令ストリーム902の形態で実行可能コードを生成してもよい。命令は、命令ストリーム902からコア904によって受信され得る。命令ストリーム902は、任意の好適な方法でコア904にロードされ得る。例えば、コア904によって実行される命令は、ストレージから、他のマシンから、またはメインメモリ930などの他のメモリからロードされてもよい。命令は、RAMなどの常駐メモリに到着し、そこで利用可能であってもよく、命令は、コア904によって実行されるようにストレージからフェッチされる。命令は、例えば、プリフェッチャまたはフェッチユニット(命令フェッチユニット908など)によって常駐メモリからフェッチされ得る。
一実施形態では、命令ストリーム902は、それぞれの命令定義に基づく特定のフォーマット932を有する命令セットアーキテクチャ(ISA)からの命令を含み得る。概して、ネイティブ命令は、CPUによって直接実行され、オペコードおよび1つ~3つのオペランドを含む。例示的な命令フォーマット932は、第1のオペコード-Aおよび1つのオペランドを有する第1の命令フォーマットと、第2のオペコード-Bおよび2つのオペランドを有する第2の命令フォーマットと、第3のオペコード-Cおよび3つのオペランドを有する第3の命令とを含み得る。オペコードは、どの動作が実行されるかをCPUに知らせる情報を含む。オペランドは、実行される動作においてどのデータが処理されるべきかをCPUに知らせる。オペランドの種類には、即値、レジスタ、およびメモリが含まれ得る。即値オペランドは、命令によって使用される定数値である。レジスタオペランドは、アクセスされるレジスタの名前/識別子であり得る。レジスタは、アクセスされるデータ、またはアクセスされるデータが記憶されているメモリ位置へのポインタを含み得る。メモリオペランドは、データを含むメモリ内の位置への参照、またはアクセスされるデータが記憶されるメモリ位置へのポインタであり得る。
本明細書で開示される1または複数の実施形態は、暗号コンピューティング動作を実行する命令を含む。例えば、命令ストリーム902は、セキュアなライブラリ呼び出しを可能にし、複数のプロセスによってセキュアに共有され得るメモリ内のライブラリコードの単一インスタンスに戻るための「KCALL」命令および「KRET」命令を含み得る。ライブラリコードのための暗号化プロセスキー(またはコードキー)は、実行のためにライブラリコード内の命令を解読するために使用されるように、呼び出しプログラムから命令キャッシュ(例えば、334、471、481、682)にオペランドとして渡され得る。実装され得る他の命令は、暗号化されたコードイメージの実行を要求するための「EnterSecureImage」命令、コードキーが有効であることを検証するための「VerifyHash」命令、および割り込みをプロセスからプロセッサに直接送信するための「SendUIPI」命令を含むが、必ずしもそれらに限定されない。これらの命令の各々に関して実行される種々のオペランドおよび特定の演算は、本明細書でさらに定義され、説明される。
コア904は、フロントエンド906を含み得、フロントエンド906は、命令フェッチパイプラインステージ(命令フェッチユニット908など)および復号パイプラインステージ(復号ユニット910など)を含み得る。フロントエンド906は、復号ユニット910を用いて命令ストリーム902から命令を受信してそれを復号し得る。復号された命令は、パイプラインの割り当てステージ(アロケータ914など)によって実行のためにディスパッチされ、割り当てられ、スケジュールされ、実行のために実行ユニット916に割り当てられ得る。
実行ユニット916は、暗号コンピューティング命令拡張が実行されることを可能にするために任意の好適な方法で、暗号コンピューティングエンジンおよび/またはマイクロコード917を用いて構成され得る。1つの非限定的な例では、コア904は、暗号コンピューティングプリミティブ(例えば、暗号符号化されたポインタの符号化/復号、暗号符号化されたポインタの暗号化/解読など)のための一部の専用実行ユニットを含み得るが、一部の実行ユニットは、全体的な暗号コンピューティング命令フローを達成するためのマイクロコードを含む。
コア904によって実行される1または複数の特定の暗号コンピューティング命令は、コア904による実行のために定義されたライブラリに含まれ得る。別の実施形態では、特定の暗号コンピューティング命令が、コア904の特定の部分によってターゲットにされ得る。例えば、コア904は、暗黙的に、または復号(例えば、復号ユニット910を介して)および前述の命令のうちの1つの実行もしくは試行された実行を通して、これらの拡張暗号コンピューティング動作のうちの1つが実行されるべきであることを認識してもよい。一部の実装形態およびシナリオでは、拡張暗号コンピューティング命令(または命令の特定の動作(複数可))は、命令(または命令の特定の動作(複数可))の実行のために実行ユニット916のうちの特定の1つに向けられてもよい。例えば、命令(または命令の特定の動作)は、特定の暗号プリミティブを実行する専用実行ユニットに向けられてもよい。
暗号コンピューティング命令を実行する実行ユニット916は、任意の好適な方法で実装することができる。一実施形態では、実行ユニット916は、1または複数の暗号コンピューティング動作を実行するのに必要な情報を記憶するために、レジスタ、補助プロセッサメモリ926、および他のメモリ要素を含んでもよく、またはそれらに通信可能に結合されてもよい。一実施形態では、実行ユニット916は、暗号コンピューティング動作を実行する回路を含み得る。
概して、暗号コンピューティング命令の実行中、典型的にはメモリに記憶されるデータへの、または追加の命令(メインメモリ930に常駐するデータまたは命令を含む)へのアクセスは、メモリサブシステム920を通して行われ得る。さらに、実行の結果をメモリサブシステム920に記憶し、その後、メインメモリ930または他の何らかのより長いストレージメモリに移動することができる。メモリサブシステム920は、例えば、メモリ、RAM、またはキャッシュ階層を含んでもよく、キャッシュ階層は、1または複数のレベル1(L1)キャッシュまたはレベル2(L2)キャッシュなどのキャッシュ924を含んでもよく、そのうちの一部は、複数のコア904またはプロセッサ901によって共有されてもよい。
暗号コンピューティング命令の実行はまた、暗号符号化されたポインタと、例えば、秘密キー、トウィーク、コンテキスト情報、および/または認証を必要とする情報のための認証情報などの暗号コンピューティング機能に関連する他の情報とを含み得る。暗号符号化されたポインタは、通常、レジスタ922に記憶される。レジスタ922は、コア904に含まれてもよく、暗号コンピューティングに関連する他の情報を記憶するために使用されてもよい。1または複数の実施形態では、コアごとの専用レジスタ923が、暗号動作のための秘密キーおよび/またはトウィークを記憶するためにプロビジョニングされ得る。プロセッサ901はまた、暗号コンピューティングに関連する情報の記憶専用であり得る、コンテンツアドレス指定可能メモリ(CAM)などの補助プロセッサメモリ926を含み得る。例えば、専用の補助プロセッサメモリ926は、ソフトウェアによってアクセス可能でない専用キャッシュであってもよい。したがって、キー、トウィーク、コンテキスト情報、認証情報、および/または一部の場合では暗号符号化されたポインタなどの情報は、専用の補助プロセッサメモリ926に記憶され得る。他の実施形態では、暗号符号化されたポインタ、データ、および/またはコード(および潜在的に暗号コンピューティングに関連する他の情報)をセキュアにするために使用されるキーは、ファームウェアなどの別のメモリ位置、メインメモリ930もしくは別の記憶デバイスのセキュアな部分、または本明細書で説明される機能を実行するのに適した任意の他の形態のセキュアメモリに記憶され得る。
実行ユニット916による実行後、命令は、リタイアメントユニット918内の書き戻しステージまたはリタイアメントステージによってリタイアすることができる。かかる実行パイプライン化の種々の部分は、1または複数のコアによって実行され得る。
図10は、説明のために、エッジコンピューティング環境の間で展開された分散コンピューティングの層のさらなる抽象化された概要を提供する。より一般的なレベルでは、エッジコンピューティングシステムは、クライアントおよび分散コンピューティングデバイスからの協調を提供する、エッジクラウド内で動作する任意の数の展開を包含するように説明され得る。
図10は、ネットワークの層全体に分散され、1または複数のクライアント計算ノード1002、1または複数のエッジゲートウェイノード1012、1または複数のエッジアグリゲーションノード1022、1または複数のコアデータセンタ1032、およびグローバルネットワーククラウド1042の間に分散された、マルチステークホルダエンティティにエッジサービスおよびアプリケーションを提供するためのエッジコンピューティングシステムを概して示している。エッジコンピューティングシステムの実装形態は、電気通信サービスプロバイダ(「telco」または「TSP」)、モノのインターネットサービスプロバイダ、クラウドサービスプロバイダ(CSP)、企業エンティティ、または任意の他の数のエンティティにおいて、またはそれらの代わりに提供され得る。
エッジコンピューティングシステムの各ノードまたはデバイスは、層1010、1020、1030、1040、1050に対応する特定の層に位置する。例えば、クライアント計算ノード1002はそれぞれエンドポイント層1010に位置し、エッジゲートウェイノード1012の各々は、エッジコンピューティングシステムのエッジデバイス層1020(ローカルレベル)に位置する。加えて、エッジアグリゲーションノード1022(および/または、フォグネットワーキング構成1026とともに、またはフォグネットワーキング構成1026の中で配置または動作される場合、フォグデバイス1024)の各々は、ネットワークアクセス層1030(中間レベル)に位置する。フォグコンピューティング(または「フォギング」)は、概して、典型的には協調分散ネットワークまたはマルチノードネットワークにおける、企業のネットワークのエッジへのクラウドコンピューティングの拡張を指す。一部の形態のフォグコンピューティングは、クラウドコンピューティング位置の代わりに、エンドデバイスとクラウドコンピューティングデータセンタとの間の計算、記憶、およびネットワーキングサービスの展開を提供する。フォグコンピューティングのかかる形態は、本明細書で説明されるようなエッジコンピューティングと一致する動作を提供し、本明細書で説明されるエッジコンピューティング態様の多くは、フォグネットワーク、フォギング、およびフォグ構成に適用可能である。さらに、本明細書で説明するエッジコンピューティングシステムの態様は、フォグとして構成されてもよく、またはフォグの態様は、エッジコンピューティングアーキテクチャに統合されてもよい。
コアデータセンタ1032は、コアネットワーク層1040(例えば、地域的または地理的な中心レベル)に位置し、グローバルネットワーククラウド1042は、クラウドデータセンタ層1050(例えば、全国的またはグローバル層)に位置する。図10の文脈における「コア」の使用は、複数のエッジノードまたは構成要素によってアクセス可能である、ネットワーク内のより深い集中ネットワーク位置のための用語として提供されるが、「コア」は、必ずしも、ネットワークの「中心」または最も深い位置を指定するものではない。したがって、コアデータセンタ1032は、エッジクラウド内に、エッジクラウドに、またはエッジクラウドの近くに位置し得る。
例示的な数のクライアント計算ノード1002、エッジゲートウェイノード1012、エッジアグリゲーションノード1022、コアデータセンタ1032、グローバルネットワーククラウド1042が図10に示されているが、エッジコンピューティングシステムは、各層においてより多くのまたはより少ないデバイスまたはシステムを含み得ることを理解されたい。加えて、図10に示されるように、各層1010、1020、1030、1040、1050の構成要素の数は、概して、各下位レベルにおいて(すなわち、エンドポイントに近づくにつれて)増加する。したがって、1つのエッジゲートウェイノード1012は、複数のクライアント計算ノード1002にサービスを提供することができ、1つのエッジアグリゲーションノード1022は、複数のエッジゲートウェイノード1012にサービスを提供することができる。
本明細書で提供される例と一致して、各クライアント計算ノード1002は、データのプロデューサまたはコンシューマとして通信することが可能な任意の種類のエンドポイント構成要素、デバイス、アプライアンス、または「物」として具現化することができる。さらに、エッジコンピューティングシステム1000で使用される「ノード」または「デバイス」というラベルは、かかるノードまたはデバイスがクライアントまたはエージェント/ミニオン/フォロワの役割で動作することを必ずしも意味しておらず、むしろ、エッジコンピューティングシステム1000内のノードまたはデバイスのいずれも、エッジクラウドを容易にするまたは使用するための個別のまたは接続されたハードウェアまたはソフトウェア構成を含む個々のエンティティ、ノード、またはサブシステムを指す。
したがって、エッジクラウドは、それぞれ層1020、1030のエッジゲートウェイノード1012およびエッジアグリゲーションノード1022によって動作されるネットワーク構成要素および機能的特徴から形成される。エッジクラウドは、クライアント計算ノード1002として図10に示される無線アクセスネットワーク(RAN)対応エンドポイントデバイス(例えば、モバイルコンピューティングデバイス、IoTデバイス、スマートデバイスなど)に近接して位置するエッジコンピューティングおよび/またはストレージリソースを提供する任意の種類のネットワークとして具現化され得る。換言すれば、エッジクラウドは、エンドポイントデバイスと、キャリアネットワーク(例えば、グローバル移動体通信システム(GSM(登録商標))ネットワーク、ロングタームエボリューション(LTE)ネットワーク、5Gネットワークなど)を含むサービスプロバイダコアネットワークへの入口ポイントとして機能する従来のモバイルネットワークアクセスポイントとを接続する一方で、記憶能力および/または計算能力も提供する「エッジ」として想定され得る。他のタイプおよび形態のネットワークアクセス(例えば、Wi-Fi、長距離ワイヤレスネットワーク)も、かかる3GPP(登録商標)キャリアネットワークの代わりに、またはそれと組み合わせて利用され得る。
一部の例では、エッジクラウドは、特定の機能を実行するためにリソースおよびサービスを分散させるシステムレベルの水平アーキテクチャおよび分散アーキテクチャとして具現化され得るフォグネットワーキング構成1026(例えば、詳細には示されていないフォグデバイス1024のネットワーク)内への、またはそれにわたる入口ポイントの部分を形成するか、または別様で提供することができる。例えば、フォグデバイス1024の協調分散ネットワークは、IoTシステム構成の文脈において、コンピューティング、記憶、制御、またはネットワーキング態様を実行してもよい。他のネットワーク化され、集約され、分散された機能が、クラウドデータセンタ層1050とクライアントエンドポイント(例えば、クライアント計算ノード1002)との間のエッジクラウドに存在してもよい。これらのうちの一部は、複数の利害関係者のために編成される仮想エッジおよび仮想サービスの使用を含む、ネットワーク機能またはサービス仮想化の文脈において、以下のセクションで説明される。
エッジゲートウェイノード1012およびエッジアグリゲーションノード1022は、協働して、種々のエッジサービスおよびセキュリティをクライアント計算ノード1002に提供する。さらに、各クライアント計算ノード1002は固定式または移動式であり得るので、各エッジゲートウェイノード1012は、対応するクライアント計算ノード1002が領域の周りを移動する際に、現在提供されているエッジサービスおよびセキュリティを伝搬するために他のエッジゲートウェイデバイスと協働することができる。そうするために、エッジゲートウェイノード1012および/またはエッジアグリゲーションノード1022の各々は、複数のサービスプロバイダおよび複数のコンシューマからの(またはそれらのためにホストされた)サービスが単一または複数の計算デバイスにわたってサポートおよび協調され得る、複数のテナンシおよび複数のステークホルダ構成をサポートすることができる。
ノード1002、1012、1022、または1032のいずれかは、例えば、図4のシステム400に対して示されるものと同様のアーキテクチャを含んでもよく、または図4のプロセッサ470または480のいずれかと同様のプロセッサを含んでもよい。
図11は、コンテナA 1120AおよびコンテナB 1120Bをサポートする単一のアドレス空間1110を含む例示的なマルチテナントソフトウェアアーキテクチャ1100を示す簡略ブロック図である。隔離は、暗号符号化されたポインタを使用してコンテナ間で実施される。アドレス空間1110は、コンテナ1120Aとコンテナ1120Bとの間のエミュレートされたプロセス間通信1132を容易にするトラステッドコンテナランタイム1130を含み得る。説明を簡単かつ容易にするために、図11には2つのコンテナのみが示されている。しかしながら、本明細書で説明する概念は、多くのコンテナを有するスケーリングされた実装形態に適用され得ることに留意されたい。
符号化ポインタは、例えば、線形アドレスの暗号化された部分を含まないが、区別するための他のコンテキスト情報を含む、暗号符号化されたポインタおよび潜在的に他の符号化ポインタに関連する、本明細書で以前に示され、説明された概念を使用して、マルチテナントソフトウェアアーキテクチャ(例えば、1100)において暗号隔離をインスタンス化するように実装することができる。第1に、コンテナは、生ポインタを入力としてポインタを生成することが許可されない。なぜなら、生ポインタは、コンテナが不正メモリにアクセスすることを可能にする可能性があるからである。通常、マルチテナント環境では、コンテナは、他のコンテナによって、またはトラステッドランタイムによって信頼されていない。各コンテナがアドレス空間のいずれかの部分にアクセスできる場合、悪意のあるコンテナが別のコンテナのデータまたはコードにアクセスし、別のコンテナのデータまたはコードを破損する可能性がある。したがって、単一アドレス空間の任意の部分への暗号化ポインタを生成する能力は制限される。加えて、コンテナは、コンテナがアクセスすることを許可されている既存のポインタによって既に供給されている許可を最大で提供するポインタを生成するための特別な命令を実行することを許可され得る。例えば、コンテナは、メモリ内の同じオブジェクト位置に対してより大きなサイズのポインタが与えられた場合に、より小さなサイズの符号化ポインタを生成するためのプロセッサ命令を使用して、既に割り振られたオブジェクトのサブセットであるオブジェクトのサイズを縮小することができる。
各コンテナは、その監督者(例えば、オペレーティングシステムまたはトラステッドランタイム)によってそのコンテナへの入力として提供されるポインタによってカバーされるメモリ領域のみに制限され得る。
1または複数の実施形態では、トラステッドランタイム1130は、コンテナによって信頼されるソフトウェアを含む。このソフトウェアは特権を与えられてもよいが、必ずしも特権を与えられる必要はない。トラステッドソフトウェアとともに、トラステッドランタイム1130は、実行されると、コンテナコードをメモリにロードすること、コンテナをスケジュールすること、ならびに各コンテナがアクセスを許可されたメモリに正確にアクセスすることを各コンテナに認可するようにプロセッサメモリアクセス制御機能を構成することを担当するファームウェア、セキュアソフトウェアモードおよび/またはハードウェアを任意の好適な組み合わせを含むこともできる。それはまた、コンテナに対するプライベートまたは共有メモリの領域の割り当てまたは割り当て解除、コンテナ間のメッセージの送信、コンテナの終了、および第1のコンテナへのアクセスを認可された1または複数の他のコンテナへの第1のコンテナの暗号キーの提供などのサービスを提供することができる。
マルチテナント環境では、トラステッドランタイム1130は、各コンテナをそれ自体の認可されたメモリ領域に制限する。トラステッドランタイム1130は、特定のコンテナがアクセスを認可されているが、他のコンテナはアクセスを認可されていない1または複数の「プライベート」メモリ領域を参照する1または複数のポインタを生成することができる。認可されたメモリ領域へのポインタは、適切な命令を使用して、生ポインタを用いてトラステッドランタイム1130によって生成することができる。さらに、トラステッドランタイムは、ロードされているときにコンテナコードを暗号化し、コンテナコードへのポインタを生成する。トラステッドランタイム1130によって生成されたポインタは、コンテナコードが開始されるときに、または実行中に、例えば、メッセージが別のコンテナから受信されるときに、コンテナコードに提供され得る。1つの例示的な説明では、トラステッドランタイム1130がコンテナA 1120Aを開始するとき、トラステッドランタイム1130は、コンテナA 1120Aがアクセスすることを認可されている特定のメモリ領域をカバーする暗号符号化されたポインタを生成し、次いで、その実行中に使用されるコンテナA 1120Aに暗号的ポインタを提供する。認可されたメモリ領域は、それ自体のポインタを含み得るメモリ領域内のサブ領域を含み得ることに留意されたい。加えて、トラステッドランタイム1130は、単一アドレス空間内の全てのコンテナがアクセスすることを許可されるか、または単一アドレス空間内のコンテナのサブセットがアクセスすることを許可される1または複数の「共有」メモリ領域を参照する1または複数のポインタを生成することもできる。
通常、秘密暗号キーは、一部の暗号符号化されたポインタ(例えば、拡張ベースアドレス(EBA)ポインタ)のベースアドレススライス、または他の暗号符号化されたフォーマットを使用するポインタ内の他のアドレススライスを暗号化し、ポインタによって参照されるデータまたはコードを暗号化するために使用される。マルチテナント環境では、キーはコンテナ(本明細書では「テナント」とも称される)間で切り替えられてもよく、その結果、各コンテナは、そのポインタのための暗号化ベースアドレススライス(および他の暗号符号化フォーマットを使用するポインタ内のアドレススライス)を生成するために、かつポインタによって参照されるデータまたはコードを暗号化するために、他のコンテナとは異なるキーを使用する。切り替えキーにより、トランスレーションルックアサイドバッファ(TLB)追い出し、キャッシュ追い出し、または従来のページテーブル切り替えにおけるように追加のオーバーヘッドを課す他のアクションを必要とすることなく、隔離を強化することができる。実施形態はまた、コンテナ1122間でメモリアクセスを切り替えることを可能にし、1つのコンテナは、別のコンテナが第2のコンテナのコードおよびデータにアクセスし得るように制御を転送する。第1のコンテナ(例えば、コンテナA 1120A)は、アクセスされているコンテナのデータおよびコードに正常にアクセスするために、アクセスされているコンテナ(例えば、コンテナB 1120B)のキーを使用のためにアクティブ化させることができる。
1100などのマルチテナントソフトウェアアーキテクチャをホストするために、種々の計算ストラテジが使用される。多くの場合、仮想システムは、別個の仮想マシンで実行されるコンテナコードを用いて実装され得る。これはコンテナコードの隔離を提供するが、仮想化されたマルチテナント環境に付随する大きな性能オーバーヘッドが存在する。同じホストオペレーティングシステム上でコンテナコードを実行することは、システム性能の利点を提供することができるが、コンテナコードの隔離およびセキュリティが依然として必要である。
暗号コンピューティングは、プロセスの構成要素を互いから保護し、コンテナコードを他のコンテナコードから隔離しながら、コンテナコードが同じホストオペレーティングシステム上で動作することを可能にし得る。しかしながら、トラステッドコンピューティングベースの一部であり得る特定の特権エンティティは、暗号符号化されたポインタに関連付けられた暗号化および解読において使用される秘密キー、ならびにそれらのポインタによって参照される対応するデータおよびコードへのアクセスを取得することができる。例えば、通常、オペレーティングシステムは、いつどのプロセスを切り替えるかを決定するために、マルチテナント環境で変更するプロセスを完全に制御する。プロセスを切り替えるために、MOV cr3などの命令を使用して、特定のアーキテクチャに応じてページテーブル、ページディレクトリのベースへのポインタ、または適切なページマップレベル(例えば、4または5)で制御レジスタ3を満たすことによって、ページテーブルを切り替えることができる。プロセス変更が発生すると、秘密キーは、トラステッドランタイム(例えば、1110)および/またはワークロードの動作に参加する他の特権エンティティ(例えば、グラフィック処理ユニット(GPU))に公開され得る。しかしながら、かかる特権エンティティは、攻撃に対して脆弱であり得、そのため、秘密キーがそれらのエンティティに公開された場合に、暗号コンピューティング保護を潜在的に損なう。秘密キーが、例えば、悪用された、または別様で欠陥のあるオペレーティングシステムに公開された場合、オペレーティングシステムは、特定のプロセスのコードまたはデータを操作するワークロードを潜在的に改竄する可能性がある。同様に、クラウドサービスプロバイダ、管理者、または機器への物理的アクセスを有する個人などのサードパーティプロバイダは、特権ソフトウェアを危険にさらすか、または外部ストレージもしくはメモリを改竄する可能性がある。そのため、マルチテナント環境のための暗号コンピューティングにおいて使用されるキーのためのセーフガードが必要である。
信頼できるオペレーティングシステム(または他の特権ソフトウェア)に依存する場合、アプリケーションおよびライブラリの署名検証において他の問題が生じる可能性がある。1つの一般的なシナリオでは、サーバ内のファイルシステムは、何らかのネットワーク(例えば、インターネット、ローカルネットワークなど)を介して、署名されたパッケージを受信して、そのサーバ上でホストされるアプリケーションおよび/またはライブラリをインストールおよび/または更新することができる。オペレーティングシステムは、ダウンロードされたパッケージ上の署名を検証するために、オペレーティングシステムアップデータを用いて構成することができる。しかし、ダウンロードされたアプリケーションおよびライブラリのバイナリイメージは、サーバ上でインストール/更新されると署名されない可能性がある。アプリケーションおよびライブラリは、名前に従ってルックアップされ得るが、名前は、特定のバイナリイメージに対して一意でない場合があり、偽造される可能性がある。例えば、あるバージョンのglibcの多くの異なるコンパイルされた変形形態が、異なるベンダによって配布される可能性がある。したがって、選択されたバージョンが実際に予想されるソフトウェアの最新バージョンであるという何らかの検証メカニズムなしに適切なバージョンを選択するようにオペレーティングシステムを信頼することは、期限切れのバイナリまたは修正されたバイナリの実行、および結果として生じるデータ破損または妥協のリスクを冒すことになる。オペレーティングシステム、仮想マシンマネージャなどの特権ソフトウェアをシステムのトラステッドコンピューティングベースから排除することにより、かかる特権ソフトウェアが正しくないライブラリにアクセスすること、および/またはプロセスに関連付けられたコードもしくはデータを操作することを防止することができる。
本明細書に開示されるように、暗号サブプロセスオブジェクト粒度マルチテナントシステムにより、これらの問題を解決することができる。本明細書の実施形態は、コンテナアプリケーションのためのメモリ内データおよびコードの機密性および完全性を保護するために、セキュリティエンジン(例えば、692)を備えた暗号コンピューティングを提供する。埋め込みセキュリティ(例えば、692)エンジンおよびキー管理ハードウェア(例えば、694)は、コンテナごとのデータおよびコードキーを生成および管理することができ、特定のコンテナプロセスのコードキーおよびデータキーは一意である。1または複数の実施形態では、セキュリティエンジンおよびキー管理ハードウェアは、オペレーティングシステム(例えば、ゲストオペレーティングシステム、ホストオペレーティングシステム)または他の特権ソフトウェア(例えば、仮想マシンマネージャ、他の特権ファームウェアおよびソフトウェア)により見ることなくコンテナごとのデータおよびコードキーを生成するように協調する。その結果、特権ソフトウェアは、暗号符号化されたポインタの部分ならびにポインタによって参照されるデータおよびコードを暗号化/解読するための暗号コンピューティング計算において使用される非暗号化キーへの直接アクセスを防止することによって、トラステッドコンピューティングベースから排除される。加えて、セキュリティエンジンおよびキー管理ハードウェアは、これらの符号化ポインタおよびキーに基づいて、コンテナアプリケーションコードランタイム機密性、完全性、および証明を提供する。
図12を参照すると、図12は、一実施形態によるマルチテナント初期化プロセス1200を示す簡略ブロック図である。マルチテナント初期化プロセス1200は、ブートプロセス中にコンテナごとにそれぞれのプロセスキーを確立することを含む。プロセスキーは、コードキーおよびデータキーを含むことができ、コードキーは、各コンテナコードイメージ、ならびにそのコンテナコードイメージおよび対応するプロセスに関連付けられたデータごとに一意である。ライブラリコード1214に対して別個のライブラリキーを生成することができる。マルチテナントブートプロセス1210は、オペレーティングシステムのような特権ソフトウェアが実行される前に、コンピュータがブートまたは電源オンされたときに起動手順を実行するために使用されるシステム管理モード(SMM)および/または基本入力/出力システム(BIOS)プログラムまたは他のファームウェアを含み得る。一例では、セキュリティエンジン(例えば、692)または他の好適なセキュアモード(例えば、Intel(登録商標)トラストドメイン拡張のセキュアアービトレーションモード(SEAM)など)またはセキュリティプロセッサ(例えば、Intel(登録商標)統合セキュリティ管理エンジン(CSME)など)を使用して、プロセスキーを生成し、コンテナコード1216および関連データの暗号化にプロセスキーを使用し、プロセッサ/ハードウェアキーを使用して、マルチテナント環境で実行され得るコンテナコード1216およびライブラリコード1214に関連するプロセスキーを暗号化することができる。1または複数の例において、セキュリティエンジンは、トラステッドコードが独立して(例えば、オペレーティングシステムの干渉なしに)実行され得る安全な場所として構成され、署名キーはハードウェアによって保護される。オペレーティングシステムがブートすると、コンテナコード1216およびライブラリコード1214のためにメモリを割り当てることができる。コンテナコード1216は、テナントコード、顧客コード、コンシューマコード、またはコードが特権ソフトウェアを含む他のコードによる操作からセキュアであるマルチテナント環境で実行されるコードを表す任意の他の好適な用語と称されることもある。
一例では、プロセスキーは、特定のコードイメージに割り振ることができ、メモリ内のコードイメージを暗号化(および解読)するために使用され得るコードキーを含む。コードイメージは、任意の種類のコード(例えば、アプリケーション、プログラム、ライブラリ、または実行可能もしくは実行のためにコンパイル可能な他のコード)を含み得る。一部のシナリオでは、コードイメージは、コードのみを含むことができ、他のシナリオでは、コードイメージは、例えば、グローバル変数および/または定数などのコードおよびデータを含み得る。しかしながら、本明細書で使用されるように、「コードキー」は、概して、コンテナプロセスのアプリケーションまたはプログラムを暗号化および解読するために使用されるキーを指し、一方、「ライブラリキー」は、概して、ライブラリイメージを暗号化および解読するために使用されるキーを指す。プロセスキーはまた、特定のコードイメージに関連付けられたデータ(例えば、コンテナによって使用され、他のコンテナと共有されないデータ、またはコンテナによって生成されるデータ)に割り振られ得るデータキーを含み得る。複数のコンテナプロセスによって共有されるデータは、共有データキーによって暗号化され得る。コードキーおよびライブラリキーを使用して、コンテナコード1216およびライブラリコード1214をそれぞれ、それらの線形(または論理)アドレスをそれらの暗号化に対するトウィークとして使用して暗号化することができる。加えて、メモリ内のコンテナコード1216のハッシュおよびライブラリコード1214のハッシュを生成することができ、各ハッシュをそれぞれのコードキーで暗号化することができる。一部の例では、ハッシュはセキュリティエンジンによって署名され得る。コードイメージに割り振られたコードキーで暗号化イメージハッシュは、どの暗号化コードキーが、メモリ内で暗号化されたどのコードイメージに対応するかを示すことができ、したがって、特定のキーが有効である(すなわち、メモリ内のコードイメージを暗号化するために使用された)ことを保証する。概して、ハッシュは、入力値を変換し、固定長の出力値を異なるサイズで返すアルゴリズムである。ハッシュアルゴリズムは、キー(例えば、MACまたはメッセージ認証コード)を使用してもしなくてもよい。本明細書で説明する実施形態では、任意の好適なハッシュアルゴリズムを使用することができる。使用され得るハッシュアルゴリズムの例には、セキュアハッシュアルゴリズム(例えば、SHA1、SHA2、SHA3)またはメッセージダイジェスト5(MD5)が含まれるが、必ずしもそれらに限定されない。
実行されるコードが事前に知られている一部のシナリオでは、オペレーティングシステム(または他の特権ソフトウェア)が実行される前に、プロセスキー1212を確立して暗号化することができ、コンテナコードおよびライブラリコードを測定して暗号化することができ、これらは、将来の時点で実行するためにオペレーティングシステムによって後でロードすることができる。
オペレーティングシステムロードプロセス1220の一例では、オペレーティングシステムは、コンテナコード1216およびライブラリコード1214の暗号化イメージ、ならびに暗号化プロセスキーを受信することができる。オペレーティングシステムは、コンテナコード1216の暗号化されたコードイメージを第1のプロセス1226のためのメモリにロードし、ライブラリコード1214の暗号化されたコードイメージを第2のプロセス1222および第3のプロセス1224のためのメモリにロードすることができる。これにより、ページテーブルをセットアップすることによって線形-物理マッピングが作成される。認証プロセスを使用して、そのコード(例えば、1216)がロードされていることをテナントに証明することができる。他の実施形態は、セキュリティイメージによって暗号化されたコードイメージに注入された秘密キーを使用して、テナントの秘密の知識、および秘密を使用してのみ生成され得るメッセージを検証する能力(例えば、秘密値を使用してMACを生成することによって)を考慮して、予期されるコードが実行されていることをテナントに証明することができる。
オペレーティングシステム切り替えプロセス1230の一例では、オペレーティングシステムは、第1のプロセス1226から別のプロセスに切り替えることができる。これは、例えば、MOV cr3命令によって達成することができる。少なくとも1つの実施形態では、マルチテナントブートプロセス1210において確立され、コンテナコード1216およびライブラリコード1214の暗号化されたコードイメージを生成するために使用された暗号化プロセスキーを介してプロセスキーを設定するために、新しい命令を提供することができる。プロセスキーは、ハードウェアには知られているがオペレーティングシステムには知られていない秘密で暗号化されているので、新しい命令により、オペレーティングシステムは、プロセスキーを見ることなくプロセスキーを設定することが可能となる。他の実施形態は、導出キーを同様に使用することができ、ここで、プロセスキーは導出キーである。オペレーティングシステムは依然としてプラットフォームを制御することができるが、コードイメージが別のエンティティ(例えば、セキュリティエンジン692)によって暗号化されているためにプロセス内で実行されているコードを見ることができない場合、信頼チェーンを作成することができる。
コードイメージの暗号化は、線形(または論理)アドレスマッピング(例えば、物理アドレスではなく)に基づいて実行されるため、線形アドレスへのバインディングは、オペレーティングシステムが物理ページを追跡すること、またはページングのための任意の追加のハードウェアサポートを提供することを必要としない。したがって、オペレーティングシステムは、ページング動作の全てを依然として制御することができる(例えば、物理メモリをディスクまたは他の形態のストレージにページングして戻す、物理メモリをメインメモリにページングするなど)。
図13は、一実施形態によるマルチテナントランタイムプロセス1300を示す簡略ブロック図である。マルチテナントランタイムプロセス1300は、ランタイム中にコードイメージのためのそれぞれのプロセスキーを確立することを含み、プロセスキーは、各コードイメージおよび対応するプロセスに対して一意である。マルチテナントランタイムプロセス1310中に、オペレーティングシステムは、セキュリティエンジン(例えば、SEAM、セキュアモード、セキュリティエンジン、セキュアモードなど)を呼び出して、新しいプロセスキー1312を、プロセッサハードウェアおよびセキュリティエンジンのみに知られているキーで暗号化することによってロックすることができる。新しいプロセスキー1312は、第1のコンテナコード1316のための第1のキーと、他のコンテナコード1314のための他のキーとを含み得る。加えて、コード暗号化キーは、各コンテナのデータ暗号化キーと異なり得る。一例では、新しいプロセスキー1312は、プロセッサ(例えば、602)およびセキュリティエンジンのみが利用可能なプロセッサまたはハードウェアキーを使用して暗号化することができる。したがって、暗号化キーは、オペレーティングシステムによって直接解読することはできないが、その代わりに、例えばセキュリティエンジンによって、または新しいプロセッサ命令によって呼び出されたときに、プロセッサハードウェアによって解読することができる。
セキュリティエンジンは、第1のコンテナコード1316および他のコンテナコード1314の平文をロードすることができる。少なくとも1つの実施形態では、コンテナコード(本明細書では「コードイメージ」とも称される)の各インスタンスは、コードイメージの証明を可能にするように固定することができる。例えば、秘密キーをコードイメージに注入して、この方法を受けたことを証明することができる。加えて、暗黙的な完全性は、コードイメージ内に無操作(「NOP」)命令を周期的に挿入してコードセクションが実行中に修正されていないことを検証することと、解読されたイメージ、またはMAC、別個のMACテーブル、または他の完全性メカニズムにNOPが依然として存在することを検証することと、によって実装できる。第1のコンテナコード1316および他のコンテナコード1314のフィックスアップされたコードイメージは、それらのそれぞれのプロセスキーおよびそれぞれの重複しない線形アドレス(すなわち、位置)またはリベース可能な論理アドレスを暗号化におけるトウィークとして使用して(例えば、XTSなどのトウィーク可能暗号モードを使用して)暗号化することができる。少なくとも一部の実施形態では、実行許可を示すメタデータをトウィークとして使用することもできる。加えて、各コードイメージは、プロセスキー1312のうちのそのそれぞれのプロセスキーを用いてハッシュされ、プロセスキーを用いて署名または暗号化され、オペレーティングシステムに返され得る。
オペレーティングシステムロードプロセス1320の一例では、オペレーティングシステムは、第1のコンテナコード1316および他のコンテナコード1314の暗号化されたコードイメージ、ならびに暗号化プロセスキーをセキュリティエンジンから受信することができる。オペレーティングシステムは、第1のコンテナコード1316の暗号化されたコードイメージを第1のプロセス1326としてメモリにロードすることができ(またはセキュリティエンジンは、暗号化されたコードイメージをメモリに既にロードしてもよい)、他のコンテナコード1314の暗号化されたコードイメージを第2のプロセス1322および第3のプロセス1324としてメモリにロードすることができる。OSは、ページテーブルをセットアップすることによって線形-物理マッピングを作成する。プロセスは、プロセスキー(例えば、それぞれのライブラリイメージに対応するライブラリキー)を使用して、実行可能コードを拡張し(例えば、ライブラリをロードし)、初期状態を設定することができる。テナントのコード(例えば、1314、1216)がロードされていることをテナントに証明するために、認証プロセスを使用することができる。コードイメージまたは他の秘密に注入された証明キーを使用して、リモートパーティを証明することができる。
オペレーティングシステム切り替えプロセス1330の一例では、オペレーティングシステムは、第1のプロセス1326から第2のプロセス1322などの別のプロセスに切り替えることができる。これは、例えば、MOV cr3命令によって達成することができる。少なくとも1つの実施形態では、オペレーティングシステムは、汎用レジスタ(GPR)、制御レジスタ、またはMSRであり得るプロセスキーレジスタへの新しい暗号化キー設定命令を介して、第2のプロセス1322のためのプロセスキー(例えば、コードキーおよびデータキー)を設定することができる。このキーは、プロセッサキーを使用して暗号化することができる。プロセッサは、暗号化プロセスキーを解読して、第2のプロセス1322のコードキーおよびデータキーを取得することができる。コードキーおよびデータキーは、メモリからロードして実行する際に、第2のプロセス1322のコードおよびデータをそれぞれ解読するために使用することができる。プロセス1322は、既知のコード経路からプロセス制御エントリを常に提供するために、ユーザ割り込みエントリポイントを使用して入ることができる。
図14は、一実施形態によるマルチテナントランタイムプロセス1400を示す簡略ブロック図である。マルチテナントランタイムプロセス1400は、共有ライブラリ呼び出しサブプロセスを示しており、コンテナコードおよび共有ライブラリのためのそれぞれのプロセスキーを使用することを含む。マルチテナントランタイムプロセス1410において、オペレーティングシステムは、セキュリティエンジン(例えば、SEAM、セキュアモード、セキュリティエンジン、セキュアモードなど)を呼び出して、暗号化によって新しいプロセスキー1412をロックすることができる。新しいプロセスキー1412は、コンテナコード1416のための第1のコードキーと、共有ライブラリ1414のための他のコードキー(本明細書ではライブラリキーとも称される)とを含み得る。一例では、新しいプロセスキー1412は、プロセッサ(例えば、602)およびセキュリティエンジンのみが利用可能なプロセッサキーを使用して暗号化することができる。したがって、暗号化キーは、オペレーティングシステムによって直接解読することはできないが、その代わりに、例えばセキュリティエンジンによって呼び出されたときにプロセッサによって解読することができる。
セキュリティエンジンは、コンテナコード1416および共有ライブラリ1414の平文をロードすることができる。マルチテナントランタイムプロセス1410の一実施形態では、セキュリティエンジン(例えば、692)は、複数のプロセス間で共有される異なる線形領域において、重複しない共有ライブラリを作成することができる。各コードイメージ(例えば、コンテナコードおよび各共有ライブラリコード)は、コードイメージの証明を可能にするために固定され得る。例えば、秘密キーをコードイメージに注入することができる。加えて、コードセクションが実行中に修正されていないことを検証するために、コードイメージに無操作(「NOP」)命令を周期的に挿入することによって、暗黙的な完全性を実装することができ、またはイメージのMACテーブルを構築することができる。コンテナコード1416のフィックスアップされたコードイメージおよび共有ライブラリ1414のフィックスアップされたイメージは、暗号化におけるトウィークとして、それらのそれぞれのプロセスキーおよびそれぞれの重複しない線形アドレス(すなわち、位置)または論理アドレスを使用して暗号化することができる。少なくとも一部の実施形態では、実行許可を示すメタデータをトウィークとして使用することもできる。加えて、各コードイメージは、そのそれぞれのプロセスキー1412を用いてハッシュされ得、各ハッシュは、プロセスキーを用いて署名または暗号化され、オペレーティングシステムに返され得る。
オペレーティングシステムロードプロセス1420の一例において、オペレーティングシステムは、それぞれがそれぞれのプロセスキーで暗号化されたコンテナコード1416および共有ライブラリ1414の暗号化コードイメージを受信することができる。オペレーティングシステムはまた、セキュリティエンジンから、各共有ライブラリイメージの線形アドレスまたは論理アドレスおよび暗号化プロセスキーを受信することができ、初期状態を設定することができる。暗号化ライブラリイメージは、それらの重複しない線形またはリベース可能な論理アドレス範囲でメモリにロードされ得る。オペレーティングシステムは、第1のプロセス1426として、コンテナコード1416の暗号化されたコードイメージをメモリにロードすることもできる。次いで、OSは、プロセスの線形アドレス空間内に適切な共有ライブラリ物理メモリ位置を含むようにページテーブルを設定することによって、線形-物理マッピングを作成することができる。
この例では、第1のプロセス1426は、共有ライブラリのうちの1つであるライブラリコード1432を第2のプロセス1424と共有している。例えば、ライブラリコード1432は、コンテナコード1416および一部の他の信頼されていないエンティティによって必要とされるライブラリであり得るが、物理メモリ内のそのライブラリの複数のコピーは望ましくない(例えば、glibc)。このシナリオでは、共有ライブラリコード1432を一意のプロセスキー(例えば、ライブラリキー)で暗号化し、共有ライブラリコード1432をラインごとに(ブロックごとに)そのそれぞれの線形アドレスに(暗号化に対するトウィークとして)暗号的にバインディングすることにより、ライブラリコードを暗号化し、複数のプロセスによって共有することが可能になる。このシナリオでは、ライブラリコードは、ライブラリコードにアクセスするコンテナコード(または別のプロセスのコード)とは異なるプロセスキーに関連付けられ、ライブラリコードを解読するためのキースイッチを必要とする。
ライブラリ呼び出しおよび戻り命令1430などの新しい命令は、コンテナコード1416が起動されると、コンテナコード1416によって実行することができる。これらの命令はまた、ライブラリコード1432のための暗号化ライブラリキーを使用し得る。一例では、コンテナコード1416は、OSを介してライブラリコード1432をロードし、ライブラリに関する署名されたメッセージ認証コード(MAC)または暗号化されたハッシュおよび暗号化キーを取得し、MACまたは暗号化されたハッシュおよび暗号化キーがライブラリコード1432に対応することを検証することができる。コンテナコード1416は、次いで、ライブラリの暗号化キーを使用して、ライブラリ呼び出し(例えば、KCALL)命令を実行することができる。したがって、ライブラリの暗号化キーは、プロセッサ(例えば、390、470、480、602)の命令キャッシュ(例えば、334、471、482、682)のためのライブラリ呼び出し命令上の命令キャッシュキーとして設定される。プロセッサは、暗号化キーを解読し、解読されたキーを使用して命令キャッシュ内の命令の解読を開始することができる。ライブラリコード1432が実行を終了すると、ライブラリ戻り命令(例えば、KRET)は、命令キャッシュのための命令キャッシュキーを、呼び出し元の(例えば、コンテナコード1416)コードキーにリセットすることができる。しかし、ライブラリコードは呼び出し元のデータキー(プロセスキー)を使用することができるので、データはプロセスに関連付けられた異なるキーを使用することができる。すなわち、ライブラリコードは、第1のプロセス1426によって呼び出されたときにコンテナコード1436に関連付けられたデータキーを使用する。しかしながら、ライブラリコードが第2のプロセス1424によって呼び出されると、異なるデータキーがデータキャッシュにプログラムされ、ライブラリコードはその新しいデータキーを使用する。ライブラリが任意の書き込み可能なデータセクション(例えば、グローバル変数などの修正され得るデータセクション)を有する場合、これらの書き込み可能なデータセクションは、ライブラリを呼び出しているプロセスのためにプロセスメモリにコピーされ得る。したがって、修正可能なライブラリデータは、適切な(プロセスごとの)データキーを使用して暗号化および解読することができる。
異なるテナントコードまたは異なる顧客コードを有する他のプロセスが、同じ種類の呼び出し(例えば、KCALLおよびKRET)を使用して、同じ暗号化キーを有する同じライブラリコード1432を実行している可能性があることに留意されたい。したがって、暗号化され、物理メモリに記憶されたライブラリを、必ずしも互いに信頼しないプロセス、および信頼できない可能性があるオペレーティングシステムにわたって共有することができる。この技術は、異なる構成要素間の安全なコールおよび戻りフローシーケンスを可能にし、ライブラリコードの1つのコピーのみがメモリにおいて必要とされる。全てのプロセスは、同じ線形アドレスまたは論理アドレスにマッピングされた同じ物理メモリを共有することができる。
図15を参照すると、一実施形態による、暗号コンピューティングベースのコンテナセキュリティのための例示的なマルチテナントシステム1500のブロック図が示されている。マルチテナントシステム1500は、検証済みプラットフォーム(例えば、1540)上で暗号化されたコードイメージを有するコンテナを起動し、メモリ内のコードおよびデータを保護し、コンテナプロセス(例えば、第1のコンテナプロセス1540Aおよび第2のコンテナプロセス1550)間の非同期イベントおよび通信を安全に処理するように構成される。例示的なマルチテナントシステム1500は、イメージレジストリ1560およびマルチテナントプラットフォーム1510を含み得る。一例では、イメージレジストリ1560は、クラウドサービスプロバイダによって維持することができ、コードイメージ1562などのコンテナ用のコードイメージが、コンテナプロセスを起動するためにマルチテナントプラットフォーム1510などのマルチテナントコンピューティングプラットフォームによって公開され、取り出されることを可能にするように構成される。一例では、ソフトウェア開発者またはユーザは、署名され、一部の場合では暗号化されたコードであり得るコードイメージ1562を公開することができる。コードイメージ1562を公開するソフトウェア開発者またはユーザは、コードイメージ1562を起動するための要求をマルチテナントプラットフォーム1510(またはその関連付けられたサービスプロバイダ)に発行し得るテナント1570などのテナントに関連付けることができる。テナント1570は、イメージレジストリ1560およびマルチテナントプラットフォーム1510への通信のために構成され、マルチテナントプラットフォーム1510上で起動されるコンテナコード(例えば、第1のコンテナプロセス1540)を要求するために使用され得るコンピューティングデバイスまたはシステムを表す。1または複数の他のテナントはまた、マルチテナントプラットフォーム1510上で起動されるコンテナコード(例えば、第2のコンテナプロセス1550)を要求するために、マルチテナントプラットフォーム1510への通信のために構成され得る。一部のシナリオでは、テナント所有者は、マルチテナントプラットフォームにコンテナを起動するように要求するために、ユーザインタフェースを介してコマンドを与えてもよく、他のシナリオでは、テナント1570は、マルチテナントプラットフォーム1510上でコンテナコードを起動するために自動化されてもよい。
マルチテナントプラットフォーム1510は、暗号コンピューティングベースのコンテナセキュリティを用いて複数のコンテナを実行するように構成されたコンピューティングプラットフォームとして実装され得る、1または複数の実施形態による1つの例示的なマルチテナントアーキテクチャを表す。一例では、プラットフォームは、それがトラステッドプラットフォームであることを検証するために、そのハードウェアの証明をテナントに提供する。プラットフォームはまた、例えば、そのハードウェア、ブート、オペレーティングシステムを証明することができる。任意の好適な証明インフラストラクチャを利用して、プラットフォーム証明(例えば、Intel PTTにおけるTPM2、SGX/TDX、セキュリティエンジンなど)を提供することができる。マルチテナントプラットフォーム1510は、(必ずしもこれらに限定されないが)本明細書に記載の種々のアーキテクチャ(例えば、102、104、106、108、200、390、470、480)に従って実装され得る(例えば、中央処理装置(CPU)、グラフィック処理ユニット(GPU)など)プロセッサ1520を含み得る。
セキュリティエンジン1530およびキー管理ハードウェア1532は、マルチテナントプラットフォーム1510において、特定のコンテナに関連付けられたコードおよびデータを暗号化および解読するために使用され得るコンテナごとのプロセスキーを生成および記憶するように構成され得る。プロセスキーは、コンテナコードイメージを実行することによってインスタンス化されるプロセスのためのコードキーと、プロセスに関連付けられたデータのためのデータキーとを含み得る。セキュリティエンジン1530およびキー管理ハードウェア1532は、(図15に示されるように)論理的に別個のエンティティであってもよく、または1つの論理的および物理的エンティティとして組み合わせられてもよく、任意の好適なセキュアモード(例えば、Intel(登録商標)トラストドメイン拡張、ESEなどのセキュアアービトレーションモード(SEAM))またはセキュリティプロセッサ(例えば、Intel(登録商標)統合セキュリティ管理エンジン(CSME)など)を使用して、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の好適な組み合わせで実装されてもよい。
一実施形態では、セキュリティエンジン1530は、マルチテナントプラットフォーム1510のトラステッドファームウェア構成要素である。一部の実施形態では、トラステッドファームウェアを実行する別個の組込みプロセッサとして構成されてもよい。セキュリティエンジン1530は、Intel(登録商標)Virtual Machine eXtensions(VMX)ルート、リングレベル-1、または別の仮想化ルートモードと同様の特権状態で実行することができる。一部の実施形態では、セキュリティエンジンは完全にハードウェア回路であってもよい。セキュリティエンジンは、オペレーティングシステム(例えば、1522)などの他のドメインへの定義されたインタフェースを確立することができる。セキュリティエンジンは、ハードウェアによって(例えば、プロセッサ1520によって)測定することができるファームウェアライブラリとして具現化され得る。セキュリティエンジン1530は、コードイメージおよびライブラリイメージを測定および暗号化することができ、暗号化プロセスキーを生成することもできるトラステッドコンピューティングベース(TCB)の一部である。セキュリティエンジン1530およびプロセッサ1520は、統合されてもよく、または論理的および/もしくは物理的に分離されてもよいが、プロセッサ1520がアクセスすることができるプロセッサ/ハードウェアキーを使用して、プロセスキーに関連付けられた暗号化および解読を実行するように協調するように構成されてもよい。
プロセッサ1520はまた、命令キャッシュ(iCache)1580(図3Bの命令キャッシュ334、図4のキャッシュ471、481もしくはメモリ432、434、または図6の命令キャッシュ682と同様であり得る)およびデータキャッシュ(dCache)1586(図3Bのデータキャッシュユニット374、図4のキャッシュ471、481もしくはメモリ432、434、または図6のデータキャッシュ684と同様であり得る)を含み得る。命令キャッシュ1580は、暗号化されたコードを記憶し、各プロセスのために制御回路にプログラムされた異なるコードキーを用いて暗号化されたコードの解読を可能にするために、制御回路1582に結合されるか、またはそれを含み得る。データキャッシュ684はまた、暗号化データを記憶し、各プロセスのために制御回路内にプログラムされた異なるデータキーを用いて暗号化データの解読を可能にするために、制御回路1588に結合されるか、またはそれを含み得る。制御回路1582および1588は、組み合わせられてもよく、または別個であってもよく、IMC472、482と同様であってもよい。一部の実施形態は、個々のキャッシュラインのために使用されるコードキーおよびデータキーを区別するために、タグまたは他のコンテキスト識別子を伴う共有コードおよびデータキャッシュを使用することができる。
iCache1580は、その論理(例えば、制御回路1582)においてコードキーをプログラムするように構成することができ、暗号化されたコードイメージからの命令の各キャッシュラインが、実行中にメモリからiCache1580にロードされると、キャッシュラインは、プログラムされたコードキーと、命令の線形アドレスの少なくとも一部および潜在的に他のメタデータを含み得るトウィークとを使用して解読することができる。同様に、dCache1586は、その論理(例えば、制御回路1588)においてデータキーをプログラムするように構成されることができ、暗号化データがdCache1586にロードされると、暗号化データは、プログラムされたデータキーと、データの線形アドレスの少なくとも一部および潜在的に他のメタデータを含み得るトウィークとを使用して解読することができる。これらのキャッシュは、プロセススイッチ、プロセスキースイッチ上でプロセッサによってフラッシュされてもよく、あるいは別様で、異なるプロセスに属するキャッシュラインを区別し、それらの関連するプロセスと排他的に使用されるタグ付けメカニズムを使用してもよい。
マルチテナントプラットフォーム1510で実行されるホストオペレーティングシステム1522は、セキュリティエンジン1530およびキー管理ハードウェア1532と協調して、コンテナランタイム1524を介して複数のコンテナの実行を管理するように構成することができる。ホストオペレーティングシステム1522は、非仮想化環境におけるホストオペレーティングシステムであってもよい。他の実施形態では、マルチテナントプラットフォーム1510は、仮想化環境として実装されてもよく、ホストオペレーティングシステム1522は、1または複数の仮想マシンのためのゲストオペレーティングシステムであってもよい。このシナリオでは、仮想マシンマネージャはまた、ハードウェア(例えば、プロセッサ1520)上に実装されてもよい。
図15の例では、マルチテナントプラットフォーム1510は、第1のコンテナプロセス1540および第2のコンテナプロセス1550を含む2つのワークロードをホストしている。第1のコンテナプロセス1540は、アプリケーション1542と、ライブラリA 1544、ライブラリB 1546、およびライブラリC 1548を含む3つのライブラリファイルとを含む。第2のコンテナプロセス1550は、アプリケーション1552およびライブラリA 1544を含む。ライブラリA 1544は、共有ライブラリであり、ライブラリの1つのコピーのみがメモリに記憶され得るが、各コンテナ内のアプリケーション1542および1552の両方とも、本明細書で開示されるような暗号コンピューティングベースのコンテナセキュリティを使用して、共有ライブラリA 1544をセキュアに呼び出すことができる。
暗号コンピューティングベースのコンテナセキュリティの例示的な一般的なフローが、マルチテナントシステム1500について図15に示されている。この例示的な一般的なフローでは、1501において、テナント(またはユーザ)1570は、コードイメージ1562などのコードイメージをイメージレジストリ1560上に公開することができる。コードイメージ1562は、ノード上でコンテナプロセスとして起動および実行するためのコードであってもよい。イメージレジストリ1560において公開されるコードは、暗号化および署名されてもよく、部分的に暗号化および署名されてもよく、または暗号化(1または複数の入力を含む)および署名されてもよい。他の実施形態では、署名は使用されなくてもよい。1または複数の実施形態では、コードイメージ1562は暗号化され、署名されてもよい。他の実施形態では、コードは、平文であり、署名されてもよい。少なくとも1つの実施形態では、公開されたコードに適用される署名は、指定されたバージョンを有するアプリケーション(またはライブラリ)の特定の変形形態であるデジタル署名された証明書であってもよい。証明書に含まれ得るメタデータフィールドは、公開されたコードの供給者の識別子(例えば、一意の完全修飾ドメイン名)、アプリケーションまたはライブラリ名、アプリケーションまたはライブラリのバージョン、公開されたコードに関連付けられたバイナリコードおよび定数データのハッシュ、公開されたコードに関連付けられた書き込み可能データの初期値のハッシュのうちの少なくとも1つを含み得る。
コードイメージが公開されると、1502において、要求/コマンドがクラウドサービスプロバイダに送信されて、コンテナを起動し、例えば、コードイメージ1562を実行することができる。プロバイダは、ワークロードを、プロバイダのトラステッドプラットフォームであり得るマルチテナントプラットフォーム1510などのワーカーノードに割り振ることができる。1502において、セキュリティエンジン1530は、前述したように、それが信頼できることをテナント1570に証明することができる。テナント1570がプラットフォーム1510の証明によって満たされると、1503において、セキュリティエンジン1530は、イメージレジストリ1560からコードイメージ1562をプルまたは受信し、コードイメージを測定し、コードイメージが暗号化されている場合はそれを解読し、次いでプロセスごとのコードキーを用いてそれを暗号化することができる。イメージが、イメージレジストリ1560から引き出されたときにテナントキーで既に暗号化されている場合、セキュリティエンジン1530は、セキュアキー交換を実行して、テナント1570からキーを取得し、コードイメージを解読し、次いで、コードキーでそれを再暗号化することができる。一部の実装形態では、テナント提供キーは、コードイメージの再暗号化のために使用され得る。
コードイメージ1562を暗号化する前に、プロセッサ1520は、セキュリティエンジン1530を使用して、テナント1570による後続のイメージ証明のために、イメージ証明キーをコードイメージ1562または他の秘密(複数可)に注入して、例えば、暗号的に安全なコードイメージからインスタンス化されたコンテナプロセス(例えば、第1のコンテナプロセス1540)への安全なチャネルを確立することができる。さらに、セキュリティエンジン1530は、あるブロック粒度でコードイメージ内に無操作(「NOP」または「no-op」)命令を周期的に挿入することができ、プロセッサは、解読時にそれらの存在を検証する。これらのno-opは、実際には実行されないコード内の低エントロピー命令として機能することができるが、コードイメージが実行時に解読されると、プロセッサ1520は、no-opが何らかのブロック境界に存在するかどうかを検出し、NOPが解読時に存在する場合にコードが修正されていないことを(例えば、暗黙的な完全性によって)保証することができる。コードが何らかの方法で修正された場合(例えば、物理的な敵対者または意図的でない修正)、no-opは、ガベージに解読されるため正しく解読されない。これは、コードの改竄として推測することができ、適切なアクション(例えば、例外の発生)を取ることができる。他の実施形態は、MACをイメージに注入するか、またはプロセッサによって使用されるMACテーブルをセットアップして、解読時にイメージの完全性を検証することができる。セキュリティエンジン1530はまた、イメージのハッシュを生成することができ、これは、イメージ証明キーとともにテナントに送信される。
1504において、セキュリティエンジン1530は、コードイメージに基づいてインスタンス化される第1のコンテナプロセス1540のために(コードおよびデータのための)プロセスキーが確立されることを要求する。キー管理ハードウェア1532は、コンテナごとにプロセスキー(データおよびコード)を生成するように構成することができ、1505において、プロセスキーをセキュリティエンジン1530に提供することができる。キー管理ハードウェア1532は、図15においてセキュリティエンジン1530とは別個のエンティティとして示されているが、一部の実装形態では、キー管理ハードウェア1532およびセキュリティエンジン1530は、1つの論理的エンティティおよび物理的エンティティとして組み合わせることができる。コンテナプロセスのためのプロセスキーは、コンテナプロセスに対応するコードイメージバイナリを暗号化および解読するためのコードキーと、コンテナプロセスに関連付けられたインメモリおよび静止データ用に別個のデータキーとを含み得る。
本明細書でさらに説明される拡散に関する一実施形態では、セキュリティエンジン1530は、トウィーク可能ブロック暗号を使用して、拡散のための暗号キャッシュ(例えば、L1データキャッシュ、L1命令キャッシュ、L2キャッシュ、またはL3キャッシュなど)のためのテナント(またはコンテナ)キーを生成することができる。セキュリティエンジン1530は、キーをプロセッサ/ハードウェアキーおよびハッシュなどの完全性表示でラップして、キーの任意の修正または改竄が検出され得ることを保証することができる。拡散のための暗号キャッシュ用のこれらのテナントキーは、オペレーティングシステムに送信され得るか、または命令セットアーキテクチャからの別個の命令を使用してプロセッサに直接プログラムされ得る。
1または複数の実施形態では、プロセスキーは対称であってもよく、コード(またはデータ)を暗号化し、次いで同じキーを使用して解読することができる。限定はしないが、ブロック暗号および一部の場合では他のタイプの暗号化など、本明細書で前述した種々の例を含む、任意の好適なタイプの対称アルゴリズムを実装することができる。他の例では、非対称キーペアが使用されてもよい。この例では、命令キャッシュおよびデータキャッシュは、データおよびコードの解読、ならびにそれがもはや必要とされなくなった後のデータおよびコードの後続の暗号化を可能にするために、プロセスの暗号化キーおよび解読キーの両方を設定することができる。代替的に、必要に応じてキーペアの正しいキーを取り出すために追加の通信が実装されてもよい。Rivest-Shamir-Adleman(RSA)またはDiffie-Hellmanを含むがこれらに限定されない任意の好適なタイプの非対称アルゴリズムを実装することができる。
プロセスキーを生成するための任意の好適な技術が実装され得る。一例では、テナント1570は、それ自体のプロセスキー(複数可)を提供し、ラップされたキーとしてマルチテナントプラットフォーム1510に送信することができる。このシナリオでは、セキュリティエンジン1530およびテナント1570は、解読キーを共有するために通信して、セキュリティエンジン1530がラップされたテナントキー(複数可)を解読することを可能にし得る。これは、次いで、プロセスキーとして使用され、必要に応じて再暗号化され得る。
別の例では、プロセスキーは、ルート(またはマスタ)キーから導出され、オペレーティングシステムに渡される前にラップ(すなわち、暗号化)され得る。このキーラップメカニズムでは、各キー(例えば、コードキーおよびデータキー)は、プロセッサ1520(およびセキュリティエンジン1530)がアクセスすることができるが、ソフトウェア構成要素がアクセスすることができないハードウェアから記憶および/または生成されるキーを使用して暗号化され得る。このハードウェア(またはプロセッサ)キーは、オペレーティングシステム1522または仮想化環境内の仮想マシンマネージャなどの特権ソフトウェアを含むソフトウェアから隠されたままである。例として、ハードウェアキーは、ヒューズに記憶されるか、ROMに記憶されるか、またはランダム化されたビットの一貫したセットを生成する物理的に複製不可能な関数によって生成されてもよい。データキーおよびコードキーは、ハードウェアキーで別々にラップされてもよい。キーラップメカニズムは、テナント供給プロセスキーにも同様に使用され得る。
別の例では、プロセスキーは導出キーを使用することができる。この例では、(コードキーおよびデータキーではなく)一意のキー識別子が、コードおよびデータのコンテナプロセスごとに生成され得る。キー識別子は、一意である何らかの数、例えば、新しいものが割り振られるたびに増加する単原子カウンタ値であり得る。一意のキー識別子からコードキー(またはデータキー)を取得するために、一意のキー識別子は、何らかの定数値(例えば、ソルト)とともに、ハードウェアキー(例えば、プロセッサキー)を用いて暗号化され得る。秘密キーを用いて一意の識別子をハッシュ(例えば、SHA3)して、導出キーとして使用され得る値を生成するなど、他のキー導出方法も使用され得る。したがって、特権ソフトウェアは、コンテナプロセスのための実際のコードキーまたはデータキーを導出することができないので、一意のキー識別子を特権ソフトウェアに渡すことができる。実施形態は、異なるハードウェアプラットフォームにわたる仮想マシンの移行を可能にするために、仮想マシンごとに移行可能なハードウェアキーを提供することができ、移行されたイメージのためのキーの正しい導出を可能にする。
一意のキー識別子(コードキーまたはデータキーを導出するための)および暗号化コードキーまたはデータキーは、本質的に、それが表す実際のコードキーまたはデータキーを隠蔽する「代替キー」であることに留意されたい。したがって、実際のコードキーまたはデータキーは特権(または他の)ソフトウェアによって確認可能ではないので、代替キーは、オペレーティングシステムなどの特権(または他の)ソフトウェアと共有され得る。代替キーからコードキー(またはデータキー)の実際の値を取得するために、適切な暗号化関数は、ハードウェアキー(例えば、プロセッサキー)を使用して、代替キーによって表される実際のコードキー(またはデータキー)を取得または生成することができる。しかしながら、使用される暗号化関数のタイプは、代替キーが一意のキー識別子であるか暗号化キーであるかによって異なる。代替キーが一意のキー識別子である場合、適用される暗号化関数は暗号化アルゴリズムであり得るが、代替キーが暗号化キーである場合、適用される暗号化関数は解読アルゴリズムであり得る。例えば、代替キーが暗号化キーである場合、プロセッサは、ハードウェアキーを使用して暗号化キーを解読して、コードまたはデータの暗号化/解読に使用され得るコードキーまたはデータキーを取得または生成することができる。代替キーが一意のキー識別子である場合、プロセッサは、ハードウェアキーを使用して一意のキー識別子(および所望により何らかの定数値)を暗号化して、コードまたはデータの暗号化/解読に使用され得るコードキーまたはデータキーを取得または生成することができる。本明細書で説明される実施形態(例えば、図11~28B)の全ては、キー(例えば、コードキー、データキー、ライブラリキー、割り込みキー、移行キー)がキー管理ハードウェアによって生成され、次いで、第1および/または第2のコンテナプロセスに渡される前に、ハードウェアキーで暗号化される実施形態を参照して説明されることに留意されたい。しかしながら、他の実施形態では、キー(例えば、コードキー、データキー、ライブラリキー、割り込みキー、移行キー)は、本明細書で先に説明したように導出することができる。この他の実施形態では、一意のキー識別子が生成され、実際の共有代替キーは、ハードウェアキーを使用して、一部の場合では何らかの定数データとともに一意のキー識別子を暗号化することによって導出することができる。したがって、暗号化キーとして具現化された代替キーではなく、一意のキー識別子として具現化された代替キーが、説明されている特定の機能に応じて適切なコンテナプロセス(複数可)に渡される。
ラップされたキーおよび一意のキー識別子は、本明細書で開示される1または複数の実施形態において使用され得る2つの可能な技術である。概して、コードの実行を管理することを可能にするのに十分な情報をオペレーティングシステムに与えながら、コードおよびデータをそれぞれ暗号化/解読するための暗号コードキーおよびデータキーの実際の値をオペレーティングシステム1522から隠蔽することを可能にする任意の技術を使用することができる。特に、ハードウェアアクセスがいつどのプロセスに提供されるべきかを判定する役割である。本明細書で使用されるように、ラップされたプロセスキー技術(例えば、暗号化コードキーおよび暗号化データキー)を使用するとき、または一意のプロセスキー識別子技術(例えば、一意のコードキー識別子および一意のデータキー識別子)を使用するとき、オペレーティングシステムに渡される情報はまた、本明細書では、本質的に、プロセスのコードおよびデータを暗号化および解読するために必要とされる実際のコードキーおよびデータキーの代替である、「代替コードキー」および「代替データキー」と称され得る。
セキュリティエンジン1530は、コードキーと、コードイメージに割り当てられた線形アドレスの少なくとも一部とをトウィークとして使用して、取り出されたコードイメージ1562を暗号化することができる。セキュリティエンジン1530は、コードキーを使用してイメージハッシュを暗号化することもできる。通常のコードキーおよびデータキー(すなわち、導出キーではない)の場合、セキュリティエンジン1530は、ハードウェアキーを使用してコードキーおよび/またはデータキーを暗号化することができる。ハードウェアキーは、プロセッサ1520にアクセス可能であってもよいが、ソフトウェアにはアクセス可能でなくてもよい。セキュリティエンジン1530は、暗号化イメージハッシュ、暗号化コードキー、および暗号化データキーをホストオペレーティングシステム1522に送信することができる。加えて、セキュリティエンジン1530は、拡散のために暗号キャッシュ用のテナントキーを生成し、これらのキーをCPUキー(およびそれらが改竄されないことを保証するための完全性)でラップし、ホストオペレーティングシステム1522に送信するか、または別個のISA命令(複数可)を使用してこれらをプロセッサ1520に直接プログラムすることができる。
導出キーを使用する実装形態では、一意のコードキー識別子は、何らかの定数値とともに、導出コードキーを生成するためにハードウェアキーで暗号化され得ることに留意されたい。セキュリティエンジン1530は、導出コードキーと、コードイメージに割り当てられた線形アドレスの少なくとも一部とをトウィークとして使用して、コードイメージ1562を暗号化することができる。セキュリティエンジン1530は、導出コードキーを使用してイメージハッシュを暗号化することもできる。セキュリティエンジン1530は、導出コードキーを暗号化しなくてもよいが、代わりに、暗号化イメージハッシュ、一意のコードキー識別子、および一意のデータキー識別子をホストオペレーティングシステム1522に送信する。
オペレーティングシステム1522は、コードイメージの実行をスケジューリングする際にその通常の機能を実行することができる。オペレーティングシステム1522は、暗号化コードキーをどのように解読するか(または一意のコードキー識別子からコードキーを導出するか)を知らないため、オペレーティングシステムがコードイメージを解読し、潜在的にコードを操作することが防止される。1または複数の実施形態では、オペレーティングシステム1522が、暗号化されたコードイメージを実行することによって第1のコンテナプロセス1540をインスタンス化する準備ができると、オペレーティングシステムは、新しい命令を実行して、暗号化プロセスキー(または一意のプロセスキー識別子)を命令キャッシュ(iCache)1580に渡すことができる。iCache1580は、暗号化コードキー(または一意のコードキー識別子)が暗号化されたコードイメージにバインドされていることを検証することができる。
検証が成功した場合、暗号化されたコードイメージは、iCache1580によって解読され、実行され得る。通常のコードキーおよびデータキーが使用される場合、暗号化されたコードイメージが解読されて実行される前に、プロセッサは、命令キャッシュ1580およびデータキャッシュ1586をフラッシュし、命令キャッシュおよびデータキャッシュのためのコードキーおよびデータキーをそれぞれセットアップし、キャッシュ内の制御回路1582および1588を適切なキーでプログラムし、コードキーおよびデータキーをレジスタにロードし、次いで、例えば、第1のコンテナプロセス1540としてインスタンス化されたコードイメージを実行することができることに留意されたい。導出プロセスキーを使用する実装形態では、一意のコードキー識別子が各キャッシュライン上のタグとして挿入され得るので、暗号キャッシュは、キャッシュラインがどのコンテナプロセスに属するかを知ることになるので、命令キャッシュおよびデータキャッシュはフラッシュされる必要がない場合がある。加えて、キャッシュ内の暗号化回路は、何らかのコードまたはデータを暗号化または解読する準備ができているときに、コードキー(またはデータキー)をオンザフライで導出する。両方の実装形態において、第1のコンテナプロセス1540は、コードイメージを見て潜在的にコードを操作することができる特権ソフトウェアまたは他のソフトウェアなしでインスタンス化することができる。
実行中、コンテナがコンテキストスイッチアウトされると、コードキーおよびデータキーを含むレジスタおよび他の状態は、何らかの完全性情報とともにプロセッサキーを使用してラップされ、メモリに保存され、XSAVE/XRESTORE命令などの既存のコンテキストスイッチ命令を含むがこれらに限定されない任意の好適なコンテキストスイッチ方法が使用され得る。代替的に、この情報は、オペレーティングシステムおよび仮想マシンマネージャなどの信頼できないソフトウェアにアクセス可能でない予約メモリに記憶されてもよい。
また、一部のシナリオでは、1507において、プロセス間通信が、第1のコンテナプロセス1540と第2のコンテナプロセス1550との間で確立され得る。加えて、第1のコンテナプロセス1540に関連付けられたデータが取り出され、かつ/または記憶ユニット1512に記憶され得る。
図16A~16Bを参照すると、図16A~16Bは、一実施形態によるマルチテナントシステム(例えば、1500)におけるコンテナコードのプロセスキーを確立するための初期化プロセスに関連付けられた動作の例示的なフロー図の1600A~1600Bを示している。フロー図の1600A~1600Bの1または複数の動作は、マルチテナントシステム1500などのマルチテナントシステムのハードウェア、ファームウェア、および/またはソフトウェアによって実行され得る。この例では、1または複数の動作は、テナント1570などのテナント、セキュリティエンジン1530などのセキュリティエンジン、iCache1580などの命令キャッシュを含むプロセッサ1520などのプロセッサ、ホストオペレーティングシステム1522などのオペレーティングシステム、および/または第1もしくは第2のコンテナプロセス1540もしくは1550などのコンテナプロセスによって実行することができる。マルチテナントシステム1500の特定のエンティティを参照して特定の動作および通信が図の1600A~1600Bに示されているが、これは例示の目的で行われており、特定の実装形態および必要性に基づいてマルチテナントシステム1500の種々の他の構成が可能であり、一部の実施形態および実装形態では、命令および/または動作が組み合わされてもよく、分離されてもよく、または異なるエンティティによって実行されてもよいことを理解されたい。
1602において、テナントは、マルチテナントプラットフォーム1510などのリモートマシンのためのコードイメージを選択および/または準備することができる。テナント公開キーは、リモートマシンに送信され、リモートマシンのオペレーティングシステムに渡されて、テナント公開キーに関連付けられた特定のコンテナが実行されることを要求することができる。加えて、1604で、テナントは、実行されるコンテナのコードイメージ、テナント公開キー、およびタイムスタンプを記憶することができる。
1606において、オペレーティングシステムは、実行されるコードイメージのためにメモリを割り当てる。1608において、オペレーティングシステムは、コードイメージに割り当てられたメモリ位置をセキュリティエンジンに通知することができる。加えて、オペレーティングシステムは、テナントによる実行のためにどのコードイメージが選択され要求されたかをセキュリティエンジンに通信することができる。
1610において、セキュリティエンジン1530は、実行される選択済みのコードイメージを取得することができる。例えば、セキュリティエンジンは、1604において、イメージレジストリまたはテナントからコードイメージを取得してもよい。セキュリティエンジンは、コードイメージをロードしてフィックスアップすることができる。少なくとも1つの実施形態では、セキュリティイメージは、例えば、コードイメージを開始するテナントによる後続のイメージ証明のために、証明キーをコードイメージに注入することができる。一例では、証明キーは、マルチテナントプラットフォーム1510において生成されてもよい。例えば、証明キーは、セキュリティエンジン1530、キー管理ハードウェア1532、またはマルチテナントプラットフォーム1510の任意の他の好適な構成要素によって生成され、セキュリティエンジン1530に提供されてもよい。加えて、no-op命令は、あるブロック粒度でコードイメージに挿入することができ、その結果、ランタイムプロセッサ1520は、既知のブロック境界にno-opが存在する場合にコードイメージが修正されていないという暗黙的な完全性によって保証することができる。コードイメージが修正されている場合、no-op命令は、iCache1580内のガベージに解読される。
1612において、フィックスアップされたコードイメージについてイメージハッシュを生成することができる。一例では、セキュアハッシュアルゴリズム(例えば、SHA-3、SHA-2など)またはメッセージダイジェスト(例えば、MD4、MD5)を含むが、必ずしもこれらに限定されない、任意の好適な一方向ハッシュ関数が、イメージハッシュを生成するために使用されてもよい。
また、1612において、メッセージ認証コード(MAC)が、証明キーを使用してコードイメージのために生成され得る。MACはまた、任意の好適な一方向ハッシュ関数(例えば、SHA1-3、MD4-5など)を使用して生成され得る。一例では、証明キーおよびタイムスタンプを使用して、更新されたイメージ上にMACを生成する。証明キーは、テナント公開キーで暗号化され、セキュリティエンジンの秘密キー(例えば、プロセッサキーまたはセキュリティエンジンの他の秘密キー)を使用して、暗号化された証明キーに対してデジタル署名が生成される。1614において、MAC、暗号化された証明キー、およびセキュリティエンジンによる署名がテナント1570に送信される。このスキームは、証明キーおよびイメージMACをテナントに送信し、それがセキュリティエンジンにバインドされることを保証するために使用される。
1616において、セキュリティエンジン1530および/またはキー管理ハードウェア1532は、コードイメージに関連付けられたコードおよびデータのためのプロセスキーを生成することができる。プロセスキーは、コードイメージを暗号化および解読するためのコードキーと、コードイメージに関連付けられたデータを暗号化および解読するためのデータキーとを含み得る。1616において、セキュリティエンジン1530は、コードキーと、コードイメージに割り当てられたメモリの線形アドレスの少なくとも一部を含み得るトウィーク(例えば、各キャッシュラインの線形アドレスが、キャッシュラインごとにコードを暗号化するために使用され得る)と、一部の場合では追加のメタデータとを用いて、フィックスアップされたコードイメージを暗号化することができる。一例では、実行許可メタデータは、トウィークに含まれてもよく、または追加のトウィークとして提供されてもよい。これは、実行されるコードイメージが有効に実行可能である(例えば、単なるデータではなく実行可能コードである)ことを保証するのに有用であり得る。ページテーブルは通常、どのコードが実行可能であるかをマークするので、実行許可トウィークを使用することにより、ページテーブルが悪意を持ってまたは不注意に使用されて、有効に実行可能でない何らかのイメージを実行しようと試みることができないことが保証される。セキュリティエンジン1530は、コードキーを使用してイメージハッシュを暗号化し、暗号化イメージハッシュを生成することもできる。これは、平文コードイメージを表すイメージハッシュを、メモリ内のそのコードイメージを暗号化するために使用されたキー(すなわち、コードキー)にバインドすることができる。イメージハッシュは、イメージを含む後続の各キャッシュラインがセキュリティイメージ(例えば、セキュリティエンジンは、平文イメージの次のラインをメモリから読み出し/ロードし、実行中のセキュアハッシュをそのラインで更新し、次いで、そのアドレスでトウィークされたキャッシュラインを暗号化し、それをメモリに書き戻し/記憶し、イメージサイズまでラインごとに繰り返す)によって連続的に暗号化されるので、キャッシュラインごとに計算することができる。
コードイメージがコードキーおよび適切なトウィークで暗号化されると、暗号化イメージは、1620に示されるように、プロセス1540として実行されるように割り当てられたメモリにロードされる。加えて、プロセスの実行を可能にするために、暗号化イメージハッシュ、証明キー、およびコードイメージへのエントリポイントもメモリにロードされる。しかしながら、記憶された暗号化コードイメージが実行される前に、制御がオペレーティングシステムに戻されて、記憶された暗号化コードイメージを実行するためのハードウェアリソースのタイミングおよび割り当てを管理する。
図16Bを参照すると、1618において、セキュリティエンジン1530は、プロセッサキーを使用して、メモリに記憶されたコードイメージを暗号化するために使用され、非暗号化コードイメージのイメージハッシュを暗号化するためにも使用されたコードキーを暗号化することができる。記憶された暗号化コードイメージの実行を開始するために制御がオペレーティングシステムに戻されるときに、暗号化キーおよび暗号化イメージハッシュの両方をオペレーティングシステム1522に提供することができる。1622において、オペレーティングシステムは、暗号化キーおよび暗号化イメージハッシュ(および一部の場合では暗号化されていないイメージハッシュ)を記憶することができる。
オペレーティングシステム1522がコンテナプロセス1540を開始する準備ができている場合、1624において、オペレーティングシステムは、セキュリティエンジン1530から受信した暗号化イメージハッシュを検証するために、暗号化イメージハッシュが修正されたかどうかを検証する命令VerifyHashを実行することができる。VerifyHash命令は、検証のために、暗号化キー、イメージハッシュ、および暗号化イメージハッシュをプロセッサ1520に渡すことができる。1626において、プロセッサ1520は、暗号化コードキーをプロセッサキーで解読し、暗号化イメージハッシュをコードキーで解読することができる。1628において、オペレーティングシステムからオペランドとして受信されたイメージハッシュと、解読されたイメージハッシュとを比較することができる。それらが一致しない場合、1630において、エラーがオペレーティングシステム1522に返され得る。代替的に、セキュアプロセスまたはコンテナプロセス1540は、VerifyHash命令を呼び出して、実行したい別のプロセスまたはライブラリイメージの内容を検証することができる。
1628において検証が成功した場合、オペレーティングシステム1522(または代替的にコンテナプロセス1540)は、1632において、EnterSecureImageなどの別の命令を発行することができる。暗号化キーはプロセッサ1520に返され得る。代替的に、1628において検証が成功した場合、プロセッサ1520は、1626において生成された解読キーを保存またはキャッシュして、オペレーティングシステムが1632においてコードイメージを実行するようにプロセッサ1520に命令した後に再び解読する必要性を回避することができる。
命令が発行されると、制御は1631でプロセッサ1520に渡される。1634において、解読されたコードキーが1626において保存されなかった場合、1632において命令で渡された暗号化キーは、プロセッサキーを用いて解読することができる。1634において、プロセッサ1520は、任意の現在記憶されている命令の命令キャッシュ1580をフラッシュし、かつ/または任意の現在記憶されているデータのデータキャッシュをフラッシュすることができる。命令キャッシュ1580の論理(例えば、制御回路1582)は、コードキーを使用して、暗号化イメージを解読し、プロセッサパイプラインにおいて実行され得る解読されたコード(または命令)を取得するように設定またはプログラムされ得る。加えて、データキャッシュ1586はまた、フラッシュされてもよく、その論理(例えば、制御回路1588)はまた、暗号化イメージ(例えば、1540)を実行することによってインスタンス化されるプロセスに関連付けられたデータキーを使用するように設定されてもよい。1636において、命令キャッシュ1580は、1620においてメモリに保存されたエントリポイントにおいて暗号化イメージの解読を開始し、プロセス1540をインスタンス化する。代替的に、コードイメージのエントリポイントは、暗号化キーで暗号化され、イメージへの複数のエントリポイントの選択を可能にするEnterSecureImage命令の一部として渡されてもよい(事実上、アドレス命令へのセキュアジャンプJMPになる)。
図17は、テナント(例えば、1570)がコンテナプロセスにアクセスするためにノード(例えば、マルチテナントプラットフォーム1510)とのセキュアチャネルを確立できるブートストラッププロセスの例示的なフロー図1700を示している。コンピュータネットワーク上で通信セキュリティを提供するように設計された任意の好適な暗号プロトコルを使用して、実装形態の特定のニーズに応じてテナント1570とプラットフォームとの間にセキュアチャネルを確立することができる。一例では、インターネットプロトコルスイートの一部であるトランスポート層セキュリティ(TLS)を使用することができる。非対称(例えば、公開/秘密)キーペアに基づく認証情報を含む、任意のセキュアな技術を使用して、TLSチャネルを確立することができる。
1702において、テナント1570は、マルチテナントプラットフォーム1510上の第1のコンテナプロセス1540と通信し、コードイメージまたは既知のコードイメージを識別するメッセージ(例えば、名前、バージョン、および/またはテナントがアクセスしたいコンテナプロセスに対応する特定のコードイメージを識別する任意の他の情報)を送信することができる。証明キーは、1612で説明したようにセキュリティエンジン1530によって生成され、1620でセキュリティエンジンによってイメージがロードされたときに注入されてもよい。証明キーはまた、マルチテナントプラットフォームに送信されてもよい。第1のコンテナプロセス1540は、TLSチャネルを介してテナント1570からメッセージまたはコードイメージを受信することができる。1704において、暗号化されたコードイメージ、証明キー(コードイメージが暗号化される前にコードイメージに注入された)、およびイメージエントリポイントが取得される。1706において、暗号化されたコードイメージに注入された証明キーがテナント1570からのメッセージ(またはコードイメージ)を解読する場合、1708において、プラットフォーム1510とテナント1570との間にセキュアセッションを確立することができる。証明プロセス1536は、証明キーをテナント1570に送信することができる。受信した証明キーが、テナント1570によって以前に記憶された証明キーと一致する場合(例えば、1614を参照)、1712において、テナント1570と、1714においてコードイメージを実行しているコンテナプロセスとの間にセキュアセッションが確立される。プロセスが1714で実行されると、コードおよびデータが線形アドレスならびにコードキーおよびデータキーにそれぞれ暗号的にバインドされるので、コードイメージを安全に実行することができる。
別の実施形態では、証明キーは、セキュリティエンジン1530によって署名された公開キー証明書とすることができ、秘密キーは暗号化イメージに対して秘密のままである。セキュリティエンジンのデジタル署名を使用して、セキュアプロセスイメージの公開キーを用いてTLSセッションを確立することができる。証明書はまた、動的リンカーおよびアプリケーションバイナリのハッシュを含んでもよい。
図18A~18Cは、一実施形態による、コンテナプロセスによって使用される共有ライブラリの初期化および共有ライブラリを呼び出すコンテナプロセスの例示的なフロー図1800A~1800Cを示している。フロー図1800A~1800Cの1または複数の動作は、マルチテナントプラットフォーム1510などのマルチテナントプラットフォームのハードウェア、ファームウェア、および/またはソフトウェアによって実行され得る。この例では、1または複数の動作は、セキュリティエンジン(例えば、1530)、iCache(例えば、1580)などの命令キャッシュを含むプロセッサ(例えば、1520)、オペレーティングシステム(例えば、1522)、コンテナプロセス(例えば、1540)、およびライブラリプロセス(例えば、1544)によって実行され得る。マルチテナントプラットフォーム1510の特定のエンティティを参照して特定の動作および通信が図18A~18Cに示されているが、これは例示の目的で行われており、マルチテナントプラットフォーム1510の種々の他の構成が可能であり、命令および/または動作は、一部の実施形態および実装形態において、異なるエンティティによって組み合わされ、分離され、または実行され得ることを理解されたい。
概して、この例示的なフローでは、第1のコンテナプロセス1540は、共有ライブラリ1544を呼び出す。セキュリティエンジン1530が、複数のプロセスによって共有される異なる線形領域において重複しない共有ライブラリを作成することができるように、コードが線形アドレスにバインドされる暗号コンピューティングの線形バインディングを活用することができる。代替的に、論理アドレスを使用して、指定されたベースアドレスに対して暗号化/解読されるリベース可能なイメージを作成し、イメージを線形メモリ内で再配置可能にすることができる。したがって、共有ライブラリイメージの書き込み不能コードおよび書き込み不能データは、複数のコンテナプロセス(例えば、第2のコンテナプロセス1545)が呼び出すために1回だけロードすることができる。各コンテナプロセスは、同じライブラリキーを使用して、特定の共有ライブラリのコードを解読する。さらに、特定のライブラリコードイメージを暗号化するために使用されたライブラリキーは、その特定のライブラリを呼び出すコンテナプロセスのコードを暗号化および解読するために使用されるコードキー(「コンテナコードキー」またはプロセスキーとも称される)とは異なる。例えば、共有ライブラリを呼び出す特定のコンテナコードイメージを暗号化および解読するために使用されるコンテナコードキーは、その特定のライブラリコードイメージを暗号化および解読するために使用されるライブラリキーとは異なる。しかしながら、コンテナプロセスに関連付けられたデータを暗号化および解読するために使用されるプロセスキー(「データキー」)は、ライブラリコードがコンテナプロセスによって呼び出されたときにこのデータキーが変更されない(かつEnterSecureImage命令を介して変更される)ので、呼び出されたライブラリコードによってデータキャッシュ(例えば、1586)を介して暗黙的に使用される。
次に、フロー図1800A~1800Cについて説明する。フローは、第1のコンテナプロセス1540などのコンテナプロセスによって呼び出され得る複数のライブラリに適用され得ることに留意されたい。しかしながら、簡単にするために、フロー図1800A~1800Cは、通常、単一のライブラリを参照して説明される。加えて、簡略化のために、コンテナアプリケーションまたはコードイメージの初期化は、本明細書で前述したので、説明しない。アプリケーション(またはコンテナ)コードイメージの初期化は、ライブラリイメージの初期化と同時に行われ得ることに留意されたい。
1802において、メモリにロードされる必要がある新しいコードイメージおよびライブラリイメージごとに、オペレーティングシステム1522はメモリを割り当てる。新しいコードイメージの実行時にインスタンス化される1または複数のコンテナプロセスによって呼び出され得るライブラリイメージが、セキュリティエンジン1530に提供される。ライブラリイメージは、ライブラリコードおよび一部の定数データを含み得る。1804において、セキュリティエンジン1530は、ライブラリイメージのハッシュを生成することができる。一例では、必ずしも限定されないが、セキュアハッシュアルゴリズム(例えば、SHA-3、SHA-2など)またはメッセージダイジェスト(例えば、MD4、MD5)を含む、任意の好適な一方向ハッシュ関数が、ライブラリイメージハッシュを生成するために使用されてもよく、イメージがラインごとに読み出されるにつれてハッシュ値を蓄積する。
一部の実施形態では、セキュリティエンジンは、ライブラリイメージの発行者(例えば、開発者、会社など)からのデジタル署名を検証することによって、使用されているライブラリが正しいイメージであることを保証することができる。これは、パッチ更新が共有ライブラリに対して行われ、更新の発行者によって署名されるシナリオにおいて特に有用であり得る。この実施形態では、ライブラリイメージのデジタル署名もセキュリティエンジン1530に提供することができる。1804において、オペレーティングシステム1522から受信されたデジタル署名が、受信されたライブラリイメージに対するセキュリティエンジン1530による信頼できる発行者のデジタル署名と一致するかどうかについての判定が行われる。署名が一致しない場合、エラーが返され得る。
1806において、または1804と同時に、セキュリティエンジン1530および/またはキー管理ハードウェア1532は、ライブラリイメージに関連付けられたコードおよび定数データを暗号化および解読するためのライブラリキーを生成することができる。1806において、セキュリティエンジン1530は、ライブラリキーと、ライブラリイメージに割り当てられたメモリの線形アドレスの少なくとも一部を含み得るトウィーク(例えば、各キャッシュラインの線形アドレスが、キャッシュラインごとにコードを暗号化するために使用され得る)と、一部の場合では追加のメタデータとを用いて、ライブラリイメージ(例えば、ライブラリコードおよび、もしあれば、何らかの定数データ)を暗号化することができる。代替的に、リベース可能な論理アドレスが使用されてもよい。ライブラリイメージがライブラリキーおよび適切なトウィークで暗号化されると、暗号化ライブラリイメージは、コンテナプロセス1540などのコンテナプロセスによって呼び出されたときに実行されるように割り当てられたメモリにロードされる。
1808において、セキュリティエンジン1530は、ライブラリキーを使用してライブラリイメージハッシュを暗号化し、暗号化ライブラリイメージハッシュを生成することができる。これは、ライブラリイメージを表すライブラリイメージハッシュを、メモリ内のそのライブラリイメージを暗号化するために使用されたキー(すなわち、ライブラリキー)にバインドすることができる。加えて、セキュリティエンジン1530は、プロセッサキーを使用して、メモリに記憶されたライブラリイメージを暗号化するために使用され、非暗号化ライブラリイメージのライブラリイメージハッシュを暗号化するためにも使用されたライブラリキーを暗号化することができる。暗号化ライブラリキーと暗号化ライブラリイメージハッシュの両方は、制御がオペレーティングシステムに戻されて、共有ライブラリコードイメージを呼び出し、ページテーブルマッピングを使用してライブラリの物理ページをコンテナコードプロセスの線形アドレス空間にロードするコンテナコードイメージの実行を管理するときに、オペレーティングシステム1522に提供することができる。1または複数の実施形態では、暗号化ライブラリキーおよびライブラリイメージハッシュは、暗号化ライブラリキーおよびライブラリイメージハッシュを一緒に暗号化することによって生成され得るキーハンドルとして提供され得る。
1810において、オペレーティングシステム1522は、暗号化ライブラリキーおよび暗号化ライブラリイメージハッシュ(および一部の場合では暗号化されていないライブラリイメージハッシュ)を記憶することができる。1814に示されるように、セキュリティエンジンによって署名され得るライブラリ名および暗号化ライブラリキーは、ライブラリを呼び出すコンテナプロセス(例えば、1540)に提供される(または記憶される)。
ライブラリイメージおよびライブラリキーの暗号化を実行することに加えて、セキュリティエンジン1530は、図16A~16Bの1610~1618を参照して説明したように、コンテナコードイメージも準備することに留意されたい。しかしながら、共有ライブラリを呼び出すコンテナプロセスが既にインスタンス化されている場合、セキュリティエンジン1530は、ライブラリイメージおよびライブラリキーの暗号化およびハッシュ化を実行する必要はない。すなわち、コンテナプロセスが、他のコンテナによって既にロードされている共有ライブラリから関数を呼び出すとき、ライブラリは既にセットアップされている。このシナリオでは、コードキーが既に生成されており、ライブラリがプロセスによって最初に必要とされたときにライブラリイメージが既に暗号化されてロードされている。したがって、現在のコンテナプロセスはライブラリを使用するだけである。セキュリティエンジン1530は、暗号化ライブラリキーおよび暗号化ライブラリイメージをオペレーティングシステム1810に依然として送信することができる。
暗号化ライブラリキーがオペレーティングシステム1522によって記憶されると、オペレーティングシステム1522は、1812において、第1のコンテナプロセス1540などのセキュアコンテナプロセスを起動するためにEnterSecureImageなどの別の命令を発行することができる。実行される暗号化コンテナイメージの暗号化コードキーは、EnterSecureImage命令においてプロセッサ1520に渡されてもよい。図18Aには示されていないが、検証は、図16Bの1624~1630に示されるように、コンテナプロセス1540を起動する前に実行されてもよい。
命令が発行されると、制御は1820でプロセッサ1520に渡される。1822において、暗号化コンテナコードキーは、プロセッサキーを用いて解読することができる。また、プロセッサ1520は、任意の現在記憶されている命令の命令キャッシュ1580をフラッシュすることができる。命令キャッシュ1580の論理(例えば、制御回路1582)は、コンテナコードキーを使用して、暗号化コンテナコードイメージを解読し、プロセッサパイプラインにおいて実行され得る解読されたコンテナコード(または命令)を取得するように設定またはプログラムされ得る。加えて、データキャッシュ1586はまた、フラッシュされてもよく、その論理(例えば、制御回路1588)はまた、暗号化コンテナコードイメージを実行することによってインスタンス化されるプロセスに関連付けられたデータキーを使用するように設定されてもよい。1824において、命令キャッシュ1580は、そのエントリポイントにおいて暗号化コンテナコードイメージの解読を開始し、第1のコンテナプロセス1540をインスタンス化する。
1830において、ライブラリの書き込み可能領域は、ライブラリを呼び出し得るコンテナプロセスのアドレス空間にコピーされる。ライブラリおよびアプリケーションは、特定のデータセクション(例えば、変数)と、一部の場合では、ライブラリまたはアプリケーションの実行全体を通して更新され得るそれらのバイナリ内の他のセクションとを含み得る。したがって、これらの書き込み可能なセクションは、異なるコンテナプロセスによって共有されないが、その代わりに、ライブラリまたはアプリケーションを呼び出し得る各コンテナプロセスのアドレス空間に書き込まれる。したがって、1830において、第1のコンテナプロセス1540は、ライブラリコードイメージ(例えば、バイナリ)の書き込み可能データセクション(および、もしあれば、書き込み可能である他のセクション)を、第1のコンテナプロセス1540、およびライブラリを呼び出す任意の他のコンテナプロセスのアドレス空間にコピーすることができる。書き込み可能なデータセクションがコピーされると、プロセスごとのメモリにわたってハッシュを計算することができる。
1832において、ライブラリイメージを検証することができる。キーハンドルからのライブラリイメージハッシュは、1830において計算された対応する書き込み可能データハッシュとともに読み出され得る。キーハンドルが暗号化されている場合、ライブラリイメージハッシュを読み出すことができるように、キーハンドルを解読することができる。ルックアップは、トラステッドライブラリハッシュリストにおいて実行され得る。ライブラリイメージハッシュまたは書き込み可能データハッシュが見つからない場合、ライブラリコードイメージは実行されず、エラーを返すか、またはプログラムをクラッシュさせることができる。VerifyHash命令1624は、ライブラリキーがライブラリイメージのハッシュを暗号化するために使用された場合に、予期されるイメージハッシュが暗号化ライブラリキーに対応することを検証するために使用され得る。
代替的に、ライブラリイメージまたはアプリケーションの発行者のデジタル署名を検証に使用することができる。ライブラリイメージ(またはアプリケーション)のデジタル署名が書き込み可能データセクションの初期値のハッシュと一致する場合、ライブラリイメージ(またはアプリケーション)が検証される。そうでない場合、エラーを返すことができる。
1832における検証が成功した場合、1834において、プロセス1540は、どのライブラリコードイメージがロードされるべきかを識別することができ、識別されたライブラリコードイメージのための仮想テーブル(vtable)に検証された暗号化ライブラリキーをコピーすることができ、これは、識別されたライブラリコードイメージが信頼できることを示す。
図18Cを参照すると、1840において、共有ライブラリは、メモリアドレス(例えば、暗号化ライブラリイメージのメモリ位置の線形アドレスおよび/またはライブラリがロードされる場所の論理ベースアドレス)および暗号化ライブラリキーを渡す新しい命令(例えば、KCall)を使用して呼び出すことができる。命令が発行されると、制御は1842でプロセッサ1520に渡される。1844において、1840における命令において渡された暗号化ライブラリキーは、プロセッサキーを用いて解読することができる。加えて、戻りアドレスおよび呼び出し元の暗号化コードキーのアドレス(例えば、第1のコンテナプロセス1540のための暗号化コードキーのアドレス、または暗号化コードキー自体がコールスタック上に記憶され得る)が、スタックメモリ上にプッシュされ得る。また、共有ライブラリのコードキーをレジスタに記憶することができ、命令ポインタは、ロードされたライブラリコードイメージの供給されたメモリアドレスにジャンプすることができる。
1844において、プロセッサ1520は、任意の現在記憶されている命令の命令キャッシュ1580をフラッシュすることができるが、コンテナプロセスおよび共有ライブラリからの両方のコードは、アドレスによって区別されるので、命令キャッシュ内に共存することができる。命令キャッシュ1580の論理(例えば、制御回路1582)は、ライブラリキーを使用して、暗号化ライブラリイメージを解読し、プロセッサパイプラインにおいて実行され得る解読されたライブラリコード(または命令)を取得するように設定またはプログラムされ得る。ライブラリコードは、データキーが生成されたプロセスによって呼び出されたときにアクセスおよび/または操作するデータを暗号化および解読するために同じデータキーを使用するので、データキャッシュ1586のためにプログラムされたデータのプロセスキーは変更されない。
1846において、命令キャッシュ1580は、暗号化ライブラリイメージの解読を開始する。命令キャッシュ1580は、ライブラリコードイメージ内のコードを解読するために、その論理にプログラムされたライブラリキーを使用する。データキャッシュ1586は、その実行中にライブラリコードによってアクセスおよび/または操作されるデータを解読および暗号化するために、プロセスのためのデータキーを使用する。
共有ライブラリが実行を終了すると、制御は、新しい命令(例えば、KRet)を使用して、呼び出し元(例えば、第1のコンテナプロセス1540)に戻され得る。1850において、戻りアドレスおよび呼び出し元の暗号化キーがスタックから取得される。命令キャッシュ1580の論理(例えば、制御回路1582)は、プロセスのコードキーを使用するように設定またはプログラムすることができ、これは、プロセッサキーを使用して呼び出し元の暗号化キーを解読することによって取得することができる。データキャッシュ1586のために既にプログラムされているプロセスのデータキーは変更されず、データは、プロセスが実行されている間、同じデータキーを使用して解読および暗号化を続けることができる。
図19、20および21は、それぞれ、同じ共有ライブラリを呼び出す2つの同時プロセスに関連するデータおよびコードのための種々の可能なメモリレイアウトを示すブロック図である。図19は、2つのコンテナプロセスAおよびBが共有ライブラリXを呼び出し、ライブラリコードのみが2つのプロセスAおよびBの間で共有されるシナリオにおけるデータおよびコードのための可能なメモリレイアウト1900のブロック図である。2つのコンテナプロセスのために割り当てられたメモリは、プロセスAのための第1の線形空間1910と、プロセスBのための第2の線形空間1920とを含む。ライブラリX1930は、両方のプロセスによって呼び出されるが、ライブラリXのコードのみが共有される(例えば、ライブラリXに属するデータは共有されなくてもよい)。ライブラリXに関連付けられたコードは、暗号化されたコード1932として物理レベルで記憶され、ライブラリXについて生成された(または導出された)ライブラリコードキーを使用して暗号化および解読される。
図19の例では、プロセスAの暗号化データ1912は、プロセスBと共有されず、.rodata1914、.data1915、.bss1916、ヒープ1917、およびスタック1918によって示されるように、プロセスA線形空間1910にのみマッピングされ得る。プロセスBの暗号化データ1922は、プロセスAと共有されず、.rodata1924、.data1925、.bss1926、ヒープ1927、およびスタック1928によって示されるように、プロセスB線形空間1920にのみマッピングされ得る。しかしながら、この例では、ライブラリXの暗号化されたコード1932の同じコピーが、.text(code)1933Aおよび1933Bによって示されるように、プロセスAおよびプロセスBによって共有され得る。
全てのデータアクセスは、データがそれぞれ記憶され、取り出される場合に、データを暗号化および解読するために現在のプロセスごとのデータキーを使用する。例えば、物理レベルでは、プロセスAに関連付けられたデータは、暗号化データ1912として記憶され、プロセスAのために生成された(または導出された)データキーを使用して暗号化される。プロセスBに関連付けられたデータは、暗号化データ1922として記憶され、プロセスBのために生成された(または導出された)データキーを使用して暗号化される。この例では、「.rodata」と示される定数データは、プログラムバイナリからの値でそれぞれ初期化される読み出し専用グローバル割り当てを含み、「.bss」と示される非初期化データは、プログラムが開始するときにゼロにされたグローバル割り当てを含む。また、各プロセスは、図19に示されるもの以外のコードおよびデータも含むことに留意されたい。
図20は、2つのコンテナプロセスCおよびDが共有ライブラリYを呼び出すシナリオにおけるデータおよびコードのための可能なメモリレイアウト2000のブロック図である。ライブラリコードおよびグローバル変数は、2つのプロセスCとDとの間で共有される。2つのコンテナプロセスに割り当てられたメモリは、プロセスCのための第1の線形空間2010と、プロセスDのための第2の線形空間2020とを含む。ライブラリY2030は、両方のプロセスによって呼び出され、ライブラリYに関連付けられたコードおよびグローバル変数の両方が共有される。ライブラリYに関連するコードおよびグローバル変数は、暗号化されたコードおよびデータ2032として物理レベルで記憶され、ライブラリYに対して生成された(または導出された)ライブラリコード/データキーを使用して暗号化および解読される。
図20の例では、プロセスCの暗号化データ2012は、プロセスDと共有されず、.data2015、.bss2016、ヒープ2017、およびスタック2018によって示されるように、プロセスC線形空間2010にのみマッピングされ得る。プロセスDの暗号化データ2022は、プロセスCと共有されず、.data2025、.bss2026、ヒープ2027、およびスタック2028によって示されるように、プロセスD線形空間2020にのみマッピングされ得る。しかしながら、この例では、ライブラリYのコードおよびデータ(すなわち、グローバル変数)の両方が、プロセスCおよびプロセスDによって共有される。ライブラリYの暗号化コード2032の同じコピーは、.text(code)2033Aおよび2033Bによって示されるように、プロセスCおよびプロセスDによって共有されてもよく、グローバル変数の同じコピーは、.rodata2034Aおよび2034Bによって示されるように、プロセスCおよびプロセスDによって共有されてもよい。
この例では、.rodataグローバル割り当てへのデータアクセス(例えば、ページテーブル内の読み出し専用許可を有するRIP(命令ポインタレジスタ)相対アクセスを使用するもの)は、ライブラリ固有コード/rodataキーを自動的に使用する。ライブラリ特有のコード/rodataキーがデータアクセスのためにいつ使用されるべきかをプロセッサに示す代替の方法は、.rodataセクションの範囲をプロセッサに、例えばライブラリのためのキーハンドルに記憶された範囲指定から初期化されるレジスタに示すことである。RIP関連アクセスが常に実行されることをコンパイラが保証できないように、ポインタが一定のグローバル変数に対して生成される場合、コンパイラは、正しい機能をサポートするために、例えば、.dataにポインタを移動させることができる。ページ許可は、オペレーティングシステムの制御下にあり、この場合、誤ったキーが使用される可能性があるが、ページ許可は、依然として、この手法を使用してデータにアクセスおよび/またはデータを操作することができない。
他のデータアクセスは、データがそれぞれ記憶され、取り出される場合に、データを暗号化および解読するために現在のプロセスごとのデータキーを使用する。例えば、物理レベルでは、プロセスCに関連付けられたデータは、暗号化データ2012として記憶され、プロセスCのために生成された(または導出された)データキーを使用して暗号化される。プロセスDに関連付けられたデータは、暗号化データ2022として記憶され、プロセスDのために生成された(または導出された)データキーを使用して暗号化される。
図21は、2つのコンテナプロセスEおよびFが共有ライブラリZを呼び出すシナリオのための可能なメモリレイアウト2100のブロック図である。ライブラリコードおよびグローバル変数は、2つのプロセスEおよびFの間で共有される。したがって、ライブラリZの暗号化されたコードブロック2132の同じコピーは、.text(code)2133Aおよび2133Bによって示されるように、プロセスEおよびプロセスFによって共有されてもよく、グローバル変数の同じコピーは、.rodata2134Aおよび2134Bによって示されるように、プロセスEおよびプロセスFによって共有されてもよい。2つのコンテナプロセスに割り当てられたメモリは、プロセスEのための第1の線形空間2110と、プロセスFのための第2の線形空間2120とを含む。ライブラリZ2130は、両方のプロセスによって呼び出され、ライブラリZに関連付けられたコードおよびグローバル変数の両方が共有される。
しかしながら、このシナリオでは、位置に依存しない暗号バインディングがライブラリコンテンツに使用される。したがって、ライブラリZに関連付けられたコードおよびグローバル変数は、コードおよびデータの各ブロックの暗号化が絶対線形アドレスではなくライブラリの先頭からの線形オフセットにバインドされる物理レベルで記憶される。プロセスEがライブラリZを呼び出すと、プロセスEにおけるライブラリZのベースアドレス2112が新しいレジスタ(例えば、KLinBaseレジスタ)に記憶される。同様に、プロセスFがライブラリZを呼び出すと、プロセスFにおけるライブラリZのベースアドレス2122が新しいレジスタ(例えば、KLinBaseレジスタ)に記憶される。本明細書で前述した新しい命令(例えば、KCallおよびKRet)を使用して、新しいレジスタ(例えば、KLinBaseレジスタ)を更新することができる。
図22は、一実施形態による、呼び出しコンテナプロセスのための共有ライブラリコードイメージをロードすることに関連付けられた例示的なプロセスを示す例示的なフロー図2200である。フロー図2200に対応する1または複数の動作は、マルチテナントシステム1500などのマルチテナントシステムのハードウェア、ファームウェア、および/またはソフトウェアによって実行され得る。この例では、1または複数の動作は、マルチテナントプラットフォーム1510内のセキュリティエンジン1530のセキュアローダ1523などのセキュアローダによって実行され得る。一例では、フロー図2200の動作は、コンテナプロセスがマルチテナントシステム内の共有ライブラリを呼び出すことを試みるときに実行されてもよい。
2202において、セキュアローダは、共有ライブラリをロードするための要求をコンテナプロセス(例えば、1540)から受信することができる。ライブラリロード要求は、ライブラリイメージハッシュ(例えば、1804)などの信頼できる暗号識別情報を含み得る。2204において、セキュアローダは、メモリに記憶され得る暗号化ライブラリコードイメージをファイルシステムから取り出す。2206において、取り出されたコンテンツ(例えば、暗号化ライブラリコードイメージ)がライブラリ要求内の暗号識別情報(例えば、ライブラリイメージハッシュ)と一致するかどうかについての判定が行われる。一例では、暗号化ライブラリキーは、プロセッサキーによって解読され、解読されたライブラリキーは、取り出された暗号化ライブラリコードイメージを解読するために使用される。ライブラリの暗号識別情報は、ライブラリバイナリのデジタル署名証明書に基づいて検証することができる。バイナリの作成者は、供給者(例えば、一意の完全修飾ドメイン名)、ライブラリ名、バージョン、バイナリコードおよび定数(すなわち、読み出し専用)データのハッシュ、書き込み可能データの初期値のハッシュなどのメタデータに対して計算されたデジタル署名証明書を提供することができる。セキュリティエンジンは、ライブラリに関連付けられたデジタル署名を検証することができる。
取り出されたコンテンツがライブラリ要求内の暗号識別情報と一致しない場合、2208で適切なエラーコードを返すことができ、ライブラリイメージをロードすることはできない。取り出されたコンテンツがライブラリ要求内の暗号識別情報と一致しない場合、2210において、セキュアローダは、ライブラリコードページを他のプロセスと共有されるものとしてマッピングすることができる。複数のデータキーがサポートされる場合、定数データ(例えば、rodata)である。加えて、セキュアローダは、プロセス固有のデータキーを使用して他のライブラリページを作成する。
図23を参照すると、一実施形態によるマルチテナントプラットフォーム1510の追加の可能な詳細とともにブロック図が示されている。マルチテナントプラットフォーム1510は、セキュアユーザ割り込み機能を含む。マルチテナントプラットフォーム1510は、アプリケーション1542を実行している第1のコンテナプロセス1540と、アプリケーション1552を実行している第2のコンテナプロセス1550とを示している。簡単にするために、ライブラリは図示されず、暗号キャッシュ1580および1586は示されていない。しかしながら、ユーザ割り込みモジュール2320は、セキュリティエンジン1530の一部として示されている。加えて、第1のコンテナプロセス1540は、被呼び出しプロセス(または受信者)として示されており、第2のコンテナプロセス1550は、呼び出しプロセス(または送信者)として示されている。したがって、被呼び出しプロセスとして、第1のコンテナプロセス1540は、ユーザ割り込み(UI)ハンドラ2342および一意のプロセス識別子2344を含む。第2のコンテナプロセス1550は、呼び出しプロセスとして、ユーザ割り込み(UI)ハンドラ2352と、ユーザ割り込みターゲットテーブル(UITT)2354とを含む。少なくとも一部の実施形態では、第1のコンテナプロセス1540および第2のコンテナプロセス1550のコードイメージは、本明細書でさらに説明されるように、非同期割り込みを処理するためのセキュアハンドラ2340および2350をそれぞれ含み得る。
コンテナ間の安全な通信を保証するために、ユーザ割り込み機能の一実施形態は、割り込みをユーザ空間に直接配信することを可能にする。これは、2つのプロセス(例えば、第1のコンテナプロセス1540と第2のコンテナプロセス1550)間の直接通信を可能にする。それはまた、必要とせずにデバイスとプロセスとの間の直接通信を可能にする。これらの直接通信は、ホストオペレーティングシステム1522などのオペレーティングシステムによる介入を必要としない。オペレーティングシステムは、ユーザ割り込みをセットアップするための何らかの初期サポートを提供することができる。少なくとも1つの実施形態では、ユーザ割り込み機能は、セキュリティエンジン1530の一部として構成され得るユーザ割り込みモジュール2320を使用して初期化され得る。
マルチテナントプラットフォーム1510におけるユーザ割り込みの例示的な一般的なフローが図23に示されている。この例示的な一般的フローでは、プロセスごとのコードキーおよびデータキー(および、もしあれば、ライブラリキー)は、本明細書で前述したように既に確立されている。第1のコンテナが起動されると、2301Aにおいて、通信のために第1のコンテナプロセス1540とセキュリティエンジン1530との間にセキュアユーザ割り込みチャネルが確立される。同様に、2301Bにおいて、第2のコンテナが起動されると、通信のために第2のコンテナプロセス1540とセキュリティエンジン1530との間にセキュアユーザ割り込みチャネルが確立される。第1のコンテナプロセス1540が第2のコンテナプロセス1550とのプロセス間通信を開始すると、2302で、第1のコンテナプロセスは、プロセス間通信(IPC)割り込み登録要求をサブミットして、自身を割り込み受信者として登録する。登録の一部として、割り込み受信者(例えば、1540)は、UIハンドラコードの線形アドレスをレジスタ(例えば、MSR)に記憶することによって、ユーザスレッドごとの割り込みハンドラ2342をプログラムする。割り込みハンドラ2342は、割り込みが送信者によってトリガされるときはいつでも割り込みを処理する。
2303において、IPC割り込み登録要求を受信すると、セキュアプロセッサは、通信コンテナプロセス(例えば、1540および1550)間で使用される共有割り込みキーを生成するようにキー管理ハードウェア1532に要求する。キー管理ハードウェア1532は、割り込みキー(または割り込みキーのためのキーハンドル)をセキュリティエンジン1530に送信する。セキュリティエンジンは、ハードウェアキーを用いて割り込みキーを暗号化して、暗号化割り込みキーを生成する。
2304において、セキュリティエンジン1530は、暗号化された割り込みキーをIPC割り込み受信者(例えば、第1のコンテナプロセス1540)と共有する。セキュリティエンジン1530は、割り込み受信者(例えば、第1のコンテナプロセス1540)のためのメモリ内の一意のプロセス割り込み記述子(UPID)を割り当て、初期化する。例えば、暗号化された割り込みキーは、UPID内の、ユーザ割り込み通知処理中に現在予約および/または無視されているビット位置に記憶されてもよい。セキュリティエンジン1530はまた、モデル固有レジスタ(MSR)などのユーザ割り込み関連レジスタをポピュレートしてもよい。一例では、IA32_UINTR_HANDLER、IA32_UINTR_STACKADJUST、およびIA32_UINTR_MISCなどのMSRがポピュレートされてもよい。
Figure 2023514484000002
2305において、割り込み送信者(例えば、第2のコンテナプロセス1550)は、割り込み登録を通知される。2306において、割り込み送信者(例えば、第2のコンテナプロセス1550)は、IPC割り込みのために自身をセキュリティエンジン1530に登録する。割り込み送信者を登録するために、セキュリティエンジン1530は、送信者のスレッドごとのターゲットテーブル(UITT)2354内に割り込みに関する新しいエントリを追加する。UITTエントリは、受信者のUPIDの線形アドレスと、送信されるIPC割り込みのユーザベクトルとを含む。加えて、暗号化された割り込みキーは、UITTエントリに記憶されてもよい。セキュリティエンジンは、2301Bにおいて、共有割り込みキー(または潜在的にハードウェアキー)を用いてUITTエントリを暗号化し、UITTエントリインデックス、第2のプロセスが開始し得る割り込みを第2のプロセスが開始する他の割り込みから区別する割り込み番号などの割り込み識別子、受信者プロセス(例えば、第1のコンテナプロセス1540)に関する情報などを、初期設定された通信チャネルを介して送信者に返す。例示的な一実装形態では、UITTテーブル内のUITTエントリは、以下と同じまたは同様のフォーマットおよび情報を有することができる。
Figure 2023514484000003
2307において、送信者は、SENDUIPI(UITT_INDEX)などの割り込み命令を使用することによって、IPC割り込み要求を生成することができる。プロセッサ1520は、UITTエントリが有効であることを検証することができ、次いで、UITTエントリ内に記憶された受信者の線形アドレスに基づいて受信者のUPIDを特定することができる。次に、プロセッサ1520は、受信者のUIハンドラを呼び出すことができ、受信者および送信者は、プロセス間通信を開始することができる。共有割り込みキーは、プロセス間通信が確立されている間、受信者と送信者との間の通信に使用することができる。例えば、共有割り込みキーは、プロセス間で共有されるメッセージまたは他のデータを暗号化および解読するために使用されてもよい。
図24は、ユーザ割り込み中に使用される情報の選択された部分を示すブロック図である。割り込み送信者がプロセッサ2420内のセキュリティエンジンに登録すると、プロセッサは、送信者ユーザ割り込みターゲットテーブル(UITT)2410にエントリ2430を追加して、割り込み送信者によって必要とされる情報を提供し、割り込みを正常に発行し、特定のコンテナプロセスとのプロセス間通信を確立することができる。プロセスは、UITTアドレス2402を使用して、UITTエントリ2430を適切なメモリ位置に記憶することができる。他の情報に加えて、UITTエントリ2430は、割り込み受信者のユーザプロセス割り込み記述子(UPID)2436の線形アドレス、ハードウェアキーによって暗号化された共有割り込みキー2434(または共有割り込みキー用のキーハンドル)、およびユーザベクトル2432を含み得る。ユーザベクトル2432は、送信者を識別することができ、送信者の割り込みハンドラ2352のメモリ位置を含み得る。受信者のUPID2436は、割り込み後要求(PIR)2440に記憶することができる。
図25は、一実施形態によるマルチテナント環境におけるコンテナプロセス間のプロセス間通信に関連付けられた例示的な動作のフロー図2500を示している。フロー図2500の1または複数の動作は、マルチテナントプラットフォーム1510などのマルチテナントプラットフォームのハードウェア、ファームウェア、および/またはソフトウェアによって実行され得る。この例では、1または複数の動作は、セキュリティエンジン(例えば、1530)、iCache(例えば、1580)などの命令キャッシュを含むプロセッサ(例えば、1520)、第1のコンテナプロセス(例えば、1540)、および第2のコンテナプロセス(例えば、1550)によって実行することができる。マルチテナントプラットフォーム1510の特定のエンティティを参照して特定の動作および通信が図25に示されているが、これは例示の目的で行われており、マルチテナントプラットフォーム1510の種々の他の構成が可能であり、命令および/または動作は、一部の実施形態および実装形態において、異なるエンティティによって組み合わされ、分離され、または実行され得ることを理解されたい。
2502に示すように、第1のコンテナプロセス1540は、マルチテナントプラットフォーム1510上で実行されている。また、2504に示すように、第2のコンテナプロセス1550は、マルチテナントプラットフォーム1510上で実行されている。コンテナプロセス1540および1550は、本明細書で前述したように、暗号コンピューティングを使用して、プロセスごとのキーで構成され得る。
2506において、第1のコンテナプロセス1540は、第2のコンテナプロセス1550からのプロセス間通信(IPC)割り込みのための割り込み受信者としてプロセッサ1520に登録する。この登録は、第1のコンテナプロセス1540が登録要求をセキュリティエンジンに送信する際に、セキュリティエンジン1530を介して処理される。2508において、セキュリティエンジンは、第1のコンテナプロセス1540のためのメモリ内のプロセスごとの一意のプロセス割り込み記述子(UPID)(例えば、2344)を割り当て、初期化する。加えて、セキュリティエンジン1530はまた、第1のコンテナプロセス1540のために、ユーザ割り込み関連レジスタ(例えば、MSR)およびプロセスごとユーザ割り込みハンドラ(例えば、2342)をプログラムすることができる。
2510において、セキュリティエンジン1530は、例えば、キー管理ハードウェア(例えば、1532)を介して、第1のコンテナプロセスおよび第2のコンテナプロセス1540および1550のための共有割り込みキーを生成することができる。セキュリティエンジン1530は、ハードウェアキー(例えば、プロセッサキー)を用いて割り込みキーを暗号化することができる。2512において、暗号化された共有割り込みキーは、第1のコンテナプロセス1540に渡され得る。
2500の図は、共有割り込みキーがキー管理ハードウェアによって生成され、次いで、第1のコンテナプロセスおよび第2のコンテナプロセスに渡される前にハードウェアキーで暗号化される一実施形態を説明することに留意されたい。他の実施形態では、本明細書で前述したように、割り込みキーを導出することができる。この他の実施形態では、一意のキー識別子が生成され、実際の共有割り込みキーは、ハードウェアキーを使用して、一部の場合では何らかの定数データとともに一意のキー識別子を暗号化することによって導出することができる。したがって、暗号化された割り込みキーではなく、一意のキー識別子が、第1のコンテナプロセスおよび第2のコンテナプロセス1540および1550に渡される。
2514において、セキュリティエンジンは、第2のコンテナプロセス1550のUITTのエントリを作成することができる。エントリは、第1のコンテナプロセスのUPIDの線形アドレスおよび暗号化された共有割り込みキー(または暗号化された共有割り込みキーのためのキーハンドル)を含み得る。エントリは、特定の割り込みを識別する番号であり得る割り込み番号も含み得る。一実施形態では、暗号化された共有割り込みキーは、エントリの先頭またはその付近に記憶することができ、エントリの残りは、(暗号化される前に)共有割り込みキーで暗号化することができる。別の実施形態では、エントリ全体をハードウェアキーで暗号化することができる。セキュリティエンジン1530は、第2のコンテナプロセス1550のためのUITTテーブルにUITTエントリを記憶することができる。
2516において、セキュリティエンジン1530は、第2のコンテナプロセス1550に割り込み登録を通知する。第2のコンテナプロセスは、自身をIPC割り込みの割り込み送信者として登録することができる。2518において、セキュリティエンジンは、UITTエントリインデックス、割り込み番号、および第1のコンテナプロセス1540に関する情報を、以前に確立されたセキュアな通信チャネルを介して第2のコンテナプロセス1550に返すことができる。
2520において、第2のコンテナプロセス1550は、命令を介して、第1のコンテナプロセス1540のためにプロセッサによって割り込みが呼び出されることを要求することができる。命令は、プロセッサ1520が、どの割り込みを呼び出すべきか、どのエンティティが割り込み受信者であるか、およびどのコードが呼び出されるべきか(例えば、UIハンドラ2342)を決定するためにUITTエントリを見つけることができるように、UITTインデックスをパラメータとして含み得る。例えば、命令はSENDUIPI(UITT_INDEX)であってもよい。命令に応答して、2522において、プロセッサ1520は、UITTインデックスパラメータを使用して、送信者のUITT(例えば、2354)内のUITTエントリを見つけることができる。プロセッサは、受信者のUPIDの線形アドレスをUITTエントリから引き出し、線形アドレスを使用して受信者のUPIDを読み出すことができる。UPID内の情報は、どの割り込みを呼び出すか、どのプロセスが割り込みを受信しているか、およびどのコードを実行するかを示す。2524において、第1のコンテナプロセス1540は、それ自体のUIハンドラ(例えば、2342)を呼び出して、割り込みを処理する。したがって、割り込みは、特権ソフトウェア(例えば、オペレーティングシステム割り込みハンドラ)を必要とせずに安全に達成される。代わりに、受信者コンテナプロセスは、それ自体のUIハンドラを実行する。さらに、第1のコンテナプロセスおよび第2のコンテナプロセスがデータを共有する場合、データは、第1のコンテナプロセスおよび第2のコンテナプロセス以外のソフトウェアから隠蔽された共有割り込みキーを使用して暗号化および解読することができる。ハードウェアキーによって暗号化された(または、割り込みキーを導出するためにハードウェアキーによる暗号化を必要とする一意のキー識別子である)共有割り込みキーの使用は、ホストオペレーティングシステム1522などの特権ソフトウェアが共有データにアクセスしたり、またはアクセスされた場合に共有データを理解したりすることを防止する。
図26は、一実施形態によるマルチテナント環境における非同期イベント/割り込み処理に関連する動作の例示的なフロー図2600を示している。ハードウェアデバイス2601およびマルチテナントプラットフォーム(例えば、1510)の種々のエンティティは、コードおよびデータを特権ソフトウェアに公開することなく、第1のコンテナプロセス1540がハードウェアデバイス2601からのイベント/割り込みを処理することを可能にするために通信し、動作を実行することができる。フロー図2600の1または複数の動作は、マルチテナントプラットフォーム1510などのマルチテナントプラットフォームのハードウェア、ファームウェア、および/またはソフトウェアによって実行され得る。この例では、1または複数の動作は、ハードウェアデバイス(例えば、2601)、セキュリティエンジン(例えば、1530)、iCache(例えば、1580)などの命令キャッシュを含むプロセッサ(例えば、1520)、およびコンテナプロセス(例えば、1540)によって実行することができる。マルチテナントプラットフォーム1510の特定のエンティティを参照して特定の動作および通信が図26に示されているが、これは例示の目的で行われており、マルチテナントプラットフォーム1510の種々の他の構成が可能であり、命令および/または動作は、一部の実施形態および実装形態において、異なるエンティティによって組み合わされ、分離され、または実行され得ることを理解されたい。
概して、非同期割り込みは、ハードウェアデバイスによって生成され、プロセッサによって検出される電気信号に対応するイベントであり得、プロセッサによって実行される命令のシーケンスは、それに応答して変更され得る。コンテナが実行されているとき、コンテキストスイッチ、コンテナのためのデバイス入力/出力(I/O)などを引き起こし得るタイマ割り込みを含む非同期イベントが発生し得る。ユーザ割り込みプロセスは、マルチテナント環境において、特権ソフトウェアを含む他のソフトウェアからデータおよびコードを保護するように構成され得る。用途には、汎用タイマおよびデバイスI/O割り込み(デバイスがユーザ割り込みを生成し得ると仮定する)、またはI/Oスタック(例えば、ユーザ空間ネットワーキングおよびトランスポート)のためのイベント駆動型ディスパッチが含まれ得るが、必ずしもそれらに限定されない。
2602に示すように、第1のコンテナプロセス1540は、マルチテナントプラットフォーム1510上で実行されている。第1のコンテナプロセス1540は、本明細書で前述したように、暗号コンピューティングを使用してプロセスごとのキーで構成され得る。
2604において、第1のコンテナプロセス1540は、ハードウェアデバイス2601からのデバイス割り込みに対する割り込み受信者としてプロセッサ1520に登録する。この登録は、第1のコンテナプロセス1540が登録要求をセキュリティエンジンに送信する際に、セキュリティエンジン1530を介して処理される。2606において、セキュリティエンジンは、第1のコンテナプロセス1540のためのメモリ内のプロセスごとの一意のプロセス割り込み記述子(UPID)(例えば、2344)を割り当て、初期化する。加えて、セキュリティエンジン1530はまた、第1のコンテナプロセス1540のために、ユーザ割り込み関連レジスタ(例えば、MSR)およびプロセスごとユーザ割り込みハンドラ(例えば、2342)をプログラムすることができる。
2608において、セキュリティエンジン1530は、例えば、キー管理ハードウェア(例えば、1532)を介して、第1のコンテナプロセス1540およびハードウェアデバイス2601のためのプロセス-デバイス共有割り込みキーを生成することができる。セキュリティエンジン1530は、ハードウェアキー(例えば、プロセッサキー)を用いてプロセス-デバイス共有割り込みキーを暗号化することができる。2610において、暗号化されたプロセス-デバイス共有割り込みキーは、第1のコンテナプロセス1540に渡され得る。
2600の図は、プロセス-デバイス共有割り込みキーがキー管理ハードウェアによって生成され、次いで第1のコンテナプロセスに渡される前にハードウェアキーで暗号化される一実施形態を説明しているが、他の実施形態では、本明細書で前述したように、割り込みキーを導出することができる。この他の実施形態では、一意のキー識別子が生成され、実際のプロセス-デバイス共有割り込みキーは、ハードウェアキーを使用して、一部の場合では何らかの定数データとともに一意のキー識別子を暗号化することによって導出することができる。したがって、暗号化されたプロセス-デバイス共有割り込みキーではなく、一意のキー識別子が、第1のコンテナプロセス1540およびハードウェアデバイス2601に渡される。
2612において、セキュリティエンジンは、ハードウェアデバイス2601のUITTのエントリを作成することができる。エントリは、第1のコンテナプロセスのUPIDの線形アドレスおよび暗号化されたプロセス-デバイス共有割り込みキー(または暗号化されたプロセス-デバイス共有割り込みキーのためのキーハンドル)を含み得る。エントリは、特定の割り込みを識別する番号であり得る割り込み番号も含み得る。一実施形態では、暗号化された共有割り込みキーは、エントリの先頭またはその付近に記憶することができ、エントリの残りは、(暗号化される前に)共有割り込みキーで暗号化することができる。別の実施形態では、エントリ全体をハードウェアキーで暗号化することができる。セキュリティエンジン1530は、UITTエントリをハードウェアデバイス2601のUITTテーブルに記憶することができる。
2614において、セキュリティエンジン1530は、ハードウェアデバイス2601に割り込み登録を通知する。ハードウェアデバイス2601は、デバイス割り込みの割り込み送信者として自身を登録することができる。2616において、セキュリティエンジンは、UITTエントリインデックス、割り込み番号、および第1のコンテナプロセス1540に関する情報をハードウェアデバイス2601に返すことができる。
2618で、ハードウェアデバイス2601は、命令を介して、第1のコンテナプロセス1540のためにプロセッサによって割り込みが呼び出されることを要求することができる。命令は、プロセッサ1520が、どの割り込みを呼び出すべきか、どのエンティティが割り込み受信者であるか、およびどのコードが呼び出されるべきか(例えば、UIハンドラ2342)を決定するためにUITTエントリを見つけることができるように、UITTインデックスをパラメータとして含み得る。例えば、命令はSENDUIPI(UITT_INDEX)であってもよい。命令に応答して、2620において、プロセッサ1520は、UITTインデックスパラメータを使用して、送信者のUITT(例えば、ハードウェアデバイスのUITT)内のUITTエントリを見つけることができる。プロセッサは、受信者のUPIDの線形アドレスをUITTエントリから引き出し、線形アドレスを使用して受信者のUPIDを読み出すことができる。UPID内の情報は、どの割り込みを呼び出すか、どのプロセスが割り込みを受信しているか、およびどのコードを実行するかを示す。2622において、第1のコンテナプロセス1540は、それ自体のUIハンドラ(例えば、2342)を呼び出して、割り込みを処理する。したがって、割り込みは、オペレーティングシステムの割り込みハンドラなどの特権ソフトウェアを関与させることなく安全に達成される。代わりに、受信者コンテナプロセスは、それ自体のUIハンドラを実行する。さらに、第1のコンテナプロセスおよび第2のコンテナプロセスがデータを共有する場合、データは、第1のコンテナプロセスおよび第2のコンテナプロセス以外のソフトウェアから隠蔽された共有割り込みキーを使用して暗号化および解読することができる。ハードウェアキーによって暗号化された(または、割り込みキーを導出するためにハードウェアキーによる暗号化を必要とする一意のキー識別子である)共有割り込みキーの使用は、ホストオペレーティングシステム1522などの特権ソフトウェアが共有データにアクセスしたり、またはアクセスされた場合に共有データを理解したりすることを防止する。
図27は、代替的な実施形態によるマルチテナント環境における例示的な非同期イベント/割り込み処理に関連する動作のフロー図2700を示している。フロー図2700の1または複数の動作は、マルチテナントプラットフォーム1510などのマルチテナントプラットフォームのハードウェア、ファームウェア、および/またはソフトウェアによって実行され得る。この例では、1または複数の動作は、iCache(例えば、1580)などの命令キャッシュ、オペレーティングシステム(例えば、1422)、および第1のコンテナプロセス(例えば、1540)を含むプロセッサ(例えば、1520)によって実行することができる。マルチテナントプラットフォーム1510の特定のエンティティを参照して特定の動作および通信が図27に示されているが、これは例示の目的で行われており、マルチテナントプラットフォーム1510の種々の他の構成が可能であり、命令および/または動作は、一部の実施形態および実装形態において、異なるエンティティによって組み合わされ、分離され、または実行され得ることを理解されたい。
2702に示すように、第1のコンテナプロセス1540は、マルチテナントプラットフォーム1510上で実行されている。第1のコンテナプロセス1540は、本明細書で前述したように、暗号コンピューティングを使用してプロセスごとのキーで構成され得る。
2704において、非同期イベント/割り込みは、本明細書で前述したように、プロセッサ1520によって受信され得る。一実施形態では、2706において非同期イベントを検出したことに応答して、プロセッサ1520は、例えば、第1のコンテナプロセス1540によって使用されている汎用レジスタ(GPR)、および第1のコンテナプロセスによって影響を受けやすいかまたは必要とされる任意の他のレジスタまたはデータを含む状態を保存することができる。この実施形態では、状態は、第1のコンテナプロセスのためのデータキーを使用して、データキャッシュ(例えば、1586)を介して暗号化され、暗号化形式でスタックに保存され得る。
別の実施形態では、非同期イベントを検出したことに応答して、制御は第1のコンテナプロセス1540に移り、2708において、セキュアハンドラ(例えば、2340)は、現在実行中のプロセスのエントリポイントで実行することができる。このセキュアハンドラは、第1のコンテナプロセス1540に関連付けられたコンテナコードイメージ内に提供され得る。少なくとも1つの実施形態では、このセキュアハンドラは、ユーザレベル割り込みとして呼び出すことができる。2710において、セキュアハンドラは、第1のコンテナプロセス1540によって使用されるなど、コンテナコードイメージに関連付けられた任意の状態、および第1のコンテナプロセスによって影響を受けやすいかまたは必要とされる任意の他のレジスタまたはデータを保存することができる。1つのシナリオでは、第1のコンテナプロセス1540は、非セキュア命令を使用して、状態情報を暗号化し、それをメモリに(例えば、スタックに)保存することができる。別の実施形態では、非セキュア保存命令は、メモリに記憶される前にデータを暗号化するように強化することができる。このシナリオでは、セキュアハンドラは、保存される状態を識別し、データが記憶される前にデータを暗号化する修正された命令を使用して状態情報を保存することができる。これらの実施形態では、実行プロセスの状態は、オペレーティングシステム1522ではなく、プロセス自体によって保存される。代替的な実施形態では、セキュアハンドラは、プロセッサが状態情報を暗号化し、それをスタックに保存するために、プロセッサ1520に状態情報を提供することができる。
セキュアハンドラが状態情報を保存した後(または、非同期イベントが検出されてから所定の時間が経過した後)、2712において、プロセッサ1520は、セキュアハンドラが正常に実行を終了したかどうかを判定することができる。そうでない場合、2714において、プロセッサは、状態をクリアする(例えば、GPRをクリアする)ことができ、2716において、エラーをオペレーティングシステム1522に返すことができる。
セキュアハンドラが正常に実行された場合、2718において、プロセッサ1520は、第1のコンテナプロセス1540の任意の秘密(例えば、キャッシュなど)をフラッシュすることができる。一例では、プロセッサ1520は、任意の現在記憶されている命令の命令キャッシュ1580をクリアすることができる。導出キーが使用され、各キャッシュラインがタグ(例えば、一意のキー識別子)を有する場合、暗号キャッシュをフラッシュすることは、単にキャッシュタグを切り替え、修正し、または別様で不明瞭にすることによって達成することができる。第1のコンテナプロセス1540に関連付けられたコードキーを用いてプログラムされる命令キャッシュ1580の論理(例えば、制御回路1582)は、オペレーティングシステム1522が第1のコンテナプロセス1540のコンテナイメージからコードを解読することができないように、クリアされてもよい。加えて、データキャッシュ1586もフラッシュされてもよく、第1のコンテナプロセスに関連付けられたデータキーを用いてプログラムされるその論理(例えば、制御回路1588)もクリアされてもよい。
暗号キャッシュがフラッシュされるか、または別様でクリアされると、プロセッサ1520は、オペレーティングシステム1522に制御を戻して、第1のコンテナプロセス1540の秘密をオペレーティングシステムに公開することなく非同期イベントを処理することができる。したがって、オペレーティングシステムは、トラステッドコンピューティングベースの外部に保持される。
非同期イベントを処理した後、オペレーティングシステムは、第1のコンテナプロセス1540のセキュアコードイメージに制御を戻すことができる。2722において、第1のコンテナプロセス1540のセキュアな実行を再開する命令は、オペレーティングシステムによって実行され得る。例えば、EnterSecureImageなどの命令が実行されてもよく、暗号化コードキーがパラメータとしてプロセッサ1520に渡されてもよい。2724において、プロセッサ1520は、本明細書で前述したように、セキュアコードイメージが実行を再開するためにハードウェアを準備することができる。例えば、実行を再開することは、第1のコンテナプロセスのための適切なコードキーおよびデータキーを用いて暗号キャッシュを再プログラムすることを含んでもよい。
図28A~28Bは、一実施形態によるマルチテナント環境におけるコンテナ移行プロセスに関連する動作の例示的なフロー図2800A~2800Bを示している。少なくとも1つの実施形態では、動作の1または複数のセットは、フロー図2800A~2800Bのアクティビティに対応する。図28Aは、コンテナコードイメージが移行されるソースノード2700A上の例示的な動作ならびに制御およびデータフローを示している。図28Bは、コンテナコードイメージが移行されるターゲットノード2820B上で発生し得る例示的な動作ならびに制御およびデータフローを示している。ソースノード2820Aおよびターゲットノード2820Bは、本明細書に図示および説明されるもの(例えば、1510、1100)などのマルチテナントプラットフォームアーキテクチャを表す。この例では、ソースノード2820Aは、セキュリティエンジン2830A、プロセッサ2840A(命令キャッシュおよびデータキャッシュを含む)、オペレーティングシステム2850A、およびコンテナプロセス2860Aを含み得る。ターゲットノード2820Bは、セキュリティエンジン2830B、プロセッサ2840B(命令キャッシュおよびデータキャッシュを含む)、オペレーティングシステム2850B、およびコンテナプロセス2860Bを含み得る。プロセッサ2840Aおよび2840Bは、本明細書で説明される他のプロセッサ(例えば、1520、602)と同一または類似の方法で構成されてもよく、セキュリティエンジン2830Aおよび2830Bは、本明細書で説明される他のセキュリティエンジン(例えば、1530)と同一または類似の方法で構成されてもよい。オペレーティングシステム2850Aおよび2850Bは、本明細書に開示される他のオペレーティングシステム(例えば、1522)と同一または類似の方法で構成されてもよく、概して、マルチテナントプラットフォームにおいて動作するように構成されてもよい。コンテナプロセス2860Aは、ターゲットノード2820Bに移行されるコンテナコードイメージの実行からソースノード2820A上でインスタンス化された例示的なプロセスである。コンテナプロセス2860Bは、ソースノード上のコンテナコードイメージがターゲットノードに移行された後にターゲットノード2820B上でインスタンス化された例示的なプロセスである。ソースノード2820Aおよびターゲットノード2820Bの特定のエンティティを参照して、特定の動作および通信が図28Aおよび28Bに示されているが、これは例示の目的で行われており、ノードの種々の他の構成が可能であり、命令および/または動作は、一部の実施形態および実装形態において、異なるエンティティによって組み合わされ、分離され、または実行され得ることを理解されたい。
1または複数の実施形態では、セキュリティエンジン2830Aおよび2830Bは、本明細書でさらに説明されるように、セキュアな移行動作を実行するように構成することができる。他の実施形態では、セキュアな移行エージェントは、ソースノードおよびターゲットノードにおいて、それらの対応するセキュリティエンジン2830Aおよび2830Bとは別個のエンティティとして構成され得る。例えば、セキュアな移行エージェントは、プロセッサ2840Aの一部として構成されてもよいが、セキュリティエンジン2830Aとは別個であり、セキュアな移行エージェントは、プロセッサ2840Bの一部として構成されてもよいが、セキュリティエンジン2830Bとは別個である。
この例では、データキーおよびコードキーを含むプロセスキーは、コンテナプロセス2860Aのために生成されている(または、そのために生成された一意のキー識別子から導出することができる)。プロセスキーは、例えば、図16A~16Bを参照して、本明細書で前述されるように生成されてもよい。コードキーは、コンテナプロセス2860Bに対応するコードイメージのコードを暗号化および解読するために使用される。データキーは、コンテナプロセス2860Aに関連付けられたデータを暗号化および解読するために使用される。
コンテナ移行プロセスは、図28A~28Bに示されるように、3つの主要な動作を含む。第1に、ソースノード2820Aは、実行中のプロセス(例えば、コンテナプロセス2860A)の状態を保存し、これは、実行中のプロセスのためのプロセスキー(コードキー)で暗号化される。第2に、ソースノード2820Aおよびターゲットノード2820Bは、セキュアなTLSセッションを確立するときに、互いを認証し、移行キーを交換する。第3に、コンテナ状態は、確立されたTLS接続を介してターゲットノード2820Bに転送される。ターゲットノード2820Bは、図16A~16Bを参照して説明したような初期化プロセスを実行して、例えば、コンテナの実行状態をロードおよび復元し、ターゲットノード上での実行を再開する。
図28Aを参照すると、2802で示されるように、コンテナプロセス2860Aがソースノード2820A上で実行されている。2804において、オペレーティングシステム2850Aは、移行要求を受信する。2806において、オペレーティングシステムは、コンテナプロセス2860Aの実行を一時停止する。一例では、新しい命令がオペレーティングシステムによって実行されて、コンテナプロセス2860Aに対応するコードイメージをソースノード2820Aからターゲットノード2820Bに移行するようにプロセッサ2840Aに命令することができる。命令の一例は、InitMigration([IN]EncryptedKey)である。コンテナプロセス2860Aのための暗号化コードキーは、命令内のパラメータとして渡され得る。
2808において、プロセッサ2840Aは、オペレーティングシステムからパラメータとして渡された暗号化コードキーを、ハードウェアキー(例えば、プロセッサキー)を用いて解読する。加えて、プロセッサ2840Aは、レジスタおよび一部の場合では他のメモリを含む実行状態のスナップショットを取ることもできる。概して、コンテナプロセス2860Aが実行されている間に変更された可能性がある任意の動的メモリは、スナップショット内にキャプチャされ得る。プロセッサ2840Aは、解読されたコードキーを使用してスナップショットを暗号化し、次いで、暗号化されたスナップショットを保存することができる。
図28Aの2810および図28Bの2811に示されるように、ソースノード2820Aおよびターゲットノード2820B上のセキュリティエンジン(または別個の移行エージェント)は、それらの公開キー証明書を使用して互いを認証し、TLSセッションを確立することができる。ソースノードおよびターゲットノードは、TLSセッションが通信のために確立されるときに、移行キー(Km)を交換することができる。
2812において、ソースセキュリティエンジン2830Aは、コンテナ情報をターゲットノード2820Bに送信する。一例では、コンテナ情報(Ci)は、証明キー、初期コンテナコードイメージ、実行状態、ならびにコードキーおよびデータキーを含み得る。初期コンテナコードイメージは、ソースノード2820Aにロードされた元のコンテナコードイメージであり得る。コンテナ情報(Ci)は、移行キー(Km)を用いて暗号化することができる。加えて、SHA3ハッシュは、完全性検証のために使用されるコンテナ情報(Ci)に対して計算され得る。
コンテナ情報を受信すると、2815において、ターゲットノード2820Bのセキュリティエンジン2830Bは、移行キー(Km)を使用してコンテナ情報を解読し、コンテナ情報にわたって生成されたハッシュを使用して移行されたコンテナの完全性を検証する。ターゲットホスト上でコンテナの実行を再開するために、ターゲットホストは、図16A~16Bを参照して本明細書で前述したように初期化手順に従うことができる。例えば、2817において、オペレーティングシステム2850Bは、コンテナコードイメージのためにメモリを割り当てる。2819において、コンテナコードイメージは、(必要に応じて)固定され、コードキーを使用して暗号化され、線形アドレスの少なくとも一部をトウィークとして使用して割り当てられたメモリにロードされ得る。2814において、ソースノード2820Aのオペレーティングシステム2850Aは、ソースコンテナプロセス2860Aに関連付けられたプロセスメモリおよび状態をクリアすることができる。
上述したように、少なくとも1つの実施形態では、ソースノード2820Aは、コードキーを使用して暗号化コンテナコードイメージおよび実行状態をターゲットノード2820Bに送信する。代替的に、ソースセキュリティエンジン(またはソース移行エージェント)は、ソースコードキーおよびデータキーを送信することなく、解読されたコンテナコードイメージおよび実行状態を送信してもよい。この実装形態では、ターゲットノード2820Bは、コンテナコードイメージのためのコードキーおよびデータキーの新しいセットを生成することができる。これは、ラップされたキーの代わりに、キー導出関数が、オンデマンドでコードおよびデータ暗号化キーを生成するために使用されるときに望ましい場合がある。キーを導出するためのマスタシークレットはプラットフォームに結び付けられ得るので、このシークレットはソースノードとターゲットノードとの間で共有されなくてもよい。
少なくとも一部のシナリオでは、暗号コンピューティングポインタ符号化方式は、フラットアドレス空間を仮定することができる。しかしながら、アプリケーションは、非ゼロセグメントベースでスレッドローカルストレージを参照するために、特定のオペレーティングシステムに応じて、FS相対アクセスおよびGS相対アクセスを使用する。したがって、スレッドローカルストレージを暗号化するために暗号コンピューティングポインタ符号化方式を使用することは、スレッドローカル割り当ておよび非スレッドローカル割り当てのための暗号化されたポインタ表現の間、ならびに異なるセグメントベースアドレスを使用する異なるスレッドにわたるスレッドローカル割り当ての間の衝突を潜在的にもたらす可能性がある。かかる衝突を回避するために、セグメントベースアドレスをポインタ暗号化トウィークに組み込むことができる。例えば、セグメントベースアドレスは、パディングされた固定アドレスビットに追加され得、ブロック暗号は、十分に大きいトウィーク入力をサポートするために修正される必要があり得る。
C.暗号コンピューティングにおけるカウンタモード脆弱性への対処
カウンタモード暗号化は、データが所与のポインタ位置に対して変化しないと仮定して、データを保護する完全な前方秘匿性を提供する。例えば、一部の暗号コンピューティング(CC)の実施形態では、平文データは、メモリ階層に記憶される暗号文を取得するために、カウンタ動作モードでキーストリームとXORされてもよく、敵対者は、暗号文のみから平文または平文に関する情報を取得することができない。しかし、プログラム実行中に、各ポインタのデータが初期値から更新されることがある。敵対者は、犠牲者データにおける変化(例えば、ビットフリップ)を観察することによって犠牲者を利用し得る可能性がある。例えば、平文がキーストリームとのXOR演算を受けて暗号文「A」を取得し、平文の修正されたバージョンが同じキーストリームとのXOR演算を受けて暗号文「A*」を取得する場合、敵対者は、(例えば、キーストリームを「キャンセル」するために2つをXOR演算することによって)AとA*との間の差を観察して、潜在的に基礎となる平文についての情報を取得することができる。
この脆弱性に対処する1つの方法は、例えば、電子コードブック(ECB)、xor-暗号化-xor(XEX)、XEXベースの暗号文盗用によるトウィークコードブックモード(XTS)などの完全データ拡散暗号化モードを使用することである。本明細書で説明する手法は、拡散を伴う暗号コンピューティング(CC)と称されることがある。このようにして、本開示の実施形態は、上述したものまたは本明細書で説明する他のものなどのカウンタモード脆弱性を軽減することができる。例えば、同じアドレス上のクロス割り当てリプレイは、拡散を伴うCCによって軽減される。加えて、拡散を伴うCCは、割り当て粒度において符号化ポインタから来る認証されたセキュリティコンテキストをサポートすることができる。さらに、拡散を伴うCCは、割り当ての粒度であるキードメインよりも細かい粒度で保護することができる。
図29は、特定の実施形態による仮想アドレス暗号化技術380の簡略ブロック図を示している。図示の例では、仮想アドレス390は、メモリ内のデータオブジェクト間の暗号隔離を提供するために暗号符号化される。これにより、実施形態は、攻撃者の仮想アドレスが犠牲者の仮想アドレスとごくわずかな確率で衝突する可能性があるという暗号化保証を提供することができる。図示の例では、仮想アドレス390は、複数のゼロビット391、上位アドレスビット392、下位アドレスビット393、およびオフセット394を含む。上位アドレスビット392は、非標準ビット%115と組み合わされ、平文入力としてカウンタモード暗号2930に提供され、仮想アドレス390の下位アドレスビット393およびサイズフィールド2920は、トウィーク入力として暗号2930に提供される。暗号2930は、例えば、米国特許出願公開第2020/01455187号に開示されるようなPRINCE暗号、Simon暗号、またはK暗号などの32ビットのトウィーク可能ブロック暗号であってもよい。サイズフィールド2920は、メモリ割り当てサイズを示し得る。例えば、サイズフィールド2920は、2の累乗(Po2)ビットメモリ割り当てのための指数を示すことができ、ここで、割り当てられるビットの数は、サイズフィールドによって示される数の2の累乗に等しい(すなわち、割り当てられるビット=2size)。暗号2930によって生成された暗号文は、図示のように、仮想アドレス390の下位アドレスビット393およびサイズフィールド2920と組み合わされて、暗号化アドレス2940を構築する。
図30は、特定の実施形態による例示的な符号化ポインタ3000を示している。例示的な符号化ポインタ3000は、図29の暗号化アドレス2940と同様に符号化することができる。図示の例では、符号化ポインタ3000は、スロット境界を調整するための調整ビット3001(例えば、調整ビット3001が1に等しいとき、符号化ポインタアドレスは、サイズフィールド2920またはパワーサイズフィールド3002によって示されるように、2の累乗のバウンディングボックスのサイズの半分だけ増加または減少されるはずである)と、図29のサイズフィールド2920に関して上述したようなメモリ割り当てのサイズを示すパワーサイズフィールド3002と、バージョンフィールド3003、カナリアフィールド3004、および暗号化アドレスビット3005を含む32個の暗号化ビットと、固定アドレスビット3006(例えば、図29に示されるように、仮想アドレスの下位アドレスビットであってもよい)と、オフセット3007(例えば、図29に示されるように、仮想アドレスのオフセットであってもよい)とを含む。一部の実施形態では、各メモリ割り当ては、サイズが2の累乗である一意のバウンディングボックスに関連付けられることを理解されたい。これは、割り当てを含むバイナリプレフィックスによって記述される最小のメモリ領域である。割り当てごとに一意であるこのバウンディングボックスは、ポインタ符号化に存在する暗号秘密を生成するために使用される。
図29に関して上記で説明したように、固定アドレスビット3006およびパワーサイズ(PS)ビット3002は、57から26までのビットを暗号化するためのトウィークとして使用することができる。同じサイズの隣接割り当てを得るために、敵対者のポインタは、ターゲット犠牲者の割り当てと異なる固定アドレスビット3006内の少数の下位ビットのみを有する。かかる隣接ポインタによって犠牲者の割り当てにアクセスするために、敵対者は、(1)固定アドレスビットを変更して対応する犠牲者のビットと一致させること、および(2)暗号化された32ビットを操作して、解読された32ビット(ビット57~26)が犠牲者のポインタ内の対応するビットと一致するようにすることの2つのことを行う必要がある。これを行うために、敵対者は、ポインタ暗号化アルゴリズムを破る必要がある。
図31は、特定の実施形態による、犠牲者および敵対者のための例示的なメモリ割り当てを示している。一部の例では、各メモリ割り当ては、2nバイトのバウンディングボックス(ここで、n=1、2、...)を与えられ得る。暗号コンピューティング(CC)環境では、各データオブジェクトはカウンタモードで暗号化されてもよく、カウンタ値は、対応する割り当ての暗号化された仮想アドレスによってトウィークされる。例えば、犠牲者のポインタへのxバイト(2k-1<x<2k)割り当て3115は、図31に示されるように、2kバイトのバウンディングボックス3110によって境界付けられてもよい。犠牲者は、犠牲者固有のCCキーストリームを生成することができ、バウンディングボックス3110内の任意の場所で読み出し/書き込み動作を実行することができる。しかしながら、そのポインタAに対する敵対者のyバイト(2k<y<2k+1)割り当て3125は、2k+1バイトのバウンディングボックス3120によって境界付けられてもよく、これは、図示のように犠牲者のバウンディングボックス3110と重複する。敵対者は、敵対者固有のキーストリームを生成し、図示のように犠牲者のバウンディングボックス3110に重なるバウンディングボックス3120全体において読み出し/書き込み動作を実行することができる。したがって、敵対者は、犠牲者のバウンディングボックス3110内で読み出し/書き込み動作を実行し得る。結果として、敵対者は、以下の読み出しシーケンスを通じて犠牲者割り当てのデータ3115にアクセスすることができる。
Read1<-Data1 XOR{Victim Keystream}XOR{Adversary Keystream}
Read2<-Data2 XOR{Victim Keystream}XOR{Adversary Keystream}
ここで、Data1およびData2は、犠牲者のバウンディングボックス3110内のデータを指す。次いで、敵対者は、各読み出しをXORすることができ(すなわち、Read1 XOR Read2)、これは、Read1およびRead2の各々における犠牲者キーストリームおよび敵対者キーストリームを相殺し、敵対者がData1 XOR Data2を取得することを可能にする。この取得された値は、犠牲者の実行に関する意味のある情報を搬送することができ、したがって、敵対者による利用のための潜在的な手段を提供することができる。
以下の説明では、犠牲者よりも多くの特権を有さないリング3敵対者、ランダムに一様に分散された秘密(例えば、キー)を抽出することを目的とするプロセス内敵対者、犠牲者のデータに関する任意の情報を抽出することを目的とするプロセス内敵対者、任意のデータを抽出するプロセス間敵対者、物理的敵対者(例えば、コールドブートまたはインターポーザを介して)、および結託敵対者(例えば、ソフトウェアプロセス間+物理的)を含む、複数のタイプの敵対者が考慮される。全てがリング3の敵対者であり、これは、それらが犠牲者よりも多くの特権を有していないことを意味する。第1に、プロセス内敵対者は、ランダムで均一に分散された秘密(例えば、キー)を抽出することを目的とし得る。第2に、プロセス内敵対者は、任意のデータを抽出することを目的とし得る。第3に、プロセス間の敵対者は、異なるプロセスのデータを抽出することを目的とし得る。最後に、敵対者は、VMMまたはインターポーザと結託する可能性がある(すなわち、ソフトウェアインタープロセスおよび物理的敵対者の両方であり得る)。
ランダムデータをターゲットとするプロセス間敵対者は決して成功し得ないことが分かる。これは、ランダムに一様に分散されたデータは、定義上、漏洩できないためである。例えば、敵対者が{Random Data1}XOR{Random Data2}の形式の量を抽出する場合、敵対者は、{Random Data1}のビットまたは{Random Data2}のビットを決定することができない。重複するバウンディングボックス以外の任意の割り当てを利用するプロセス内敵対者は、犠牲者のデータにアクセスするための正しい仮想アドレスを暗号的に生成することができないことも分かるであろう。しかしながら、プロセス内敵対者が重なり合うバウンディングボックス内の任意のデータをターゲットとする場合、上述の問題が存在する可能性がある。
以下の説明は、中間レベルキャッシュ(MLC)、最終レベルキャッシュ(LLC)、またはDRAMメモリのより近く(例えば、PRINCE暗号化が使用される場合)において実行され得る追加の暗号化ステージ(「拡散」と称されることがある)に基づくソリューションを提供する。一部の実施形態では、拡散は、ポインタ符号化のサイズフィールド(例えば、図29のサイズフィールド2920または図30のパワーサイズフィールド3002)によってトウィークされ得る。サイズフィールドが異なる場合、敵対的なアウトオブバウンドアクセスが常に二重拡散されるので、本明細書で提供されるソリューションは効果的である。データがLLCまたはDRAMメモリに存在する場合、データは書き込み時に拡散され、読み出し時に再び拡散される。データがL1データキャッシュ(データキャッシュユニット(DCU)と称されることもある)上に存在するとき、敵対者は、異なるサイズフィールドを用いて犠牲者にアクセスする。物理アドレス(PA)が異なるので、アクセスはDCUミスとして扱われ得る。したがって、書き込みの前にメモリからの読み出しが行われ、データは二重に拡散される。
図32は、一部の実施形態による例示的な拡散技術の簡略ブロック図3200を示している。特に、図示の例は、異なるキー(キー2)を用いてカウンタモード暗号化データに対して実行される追加の暗号化ステージ(「拡散」によっても示される)を含む。図示の技術は、図33に示されるような重複するバウンディングボックスを伴うプロセス間敵対者に対して犠牲者のデータ更新(例えば、ビットフリップ)を観察することから保護することができる。図示の技術は、読み出し動作および書き込み動作の両方に使用され、二重拡散法を提供することができる。
図示の例では、入力データ3205(暗号化動作では平文、解読動作では暗号文であり得る)は、データ3205とキーストリーム/トウィーク3215とのXOR演算3220を実行することによって、カウンタ動作モードを介して暗号化/解読される。使用されるカウンタモードは、一部の例では、完全24ラウンドGimli置換を伴う暗号化/解読の前方秘密保護カウンタモードであり得る。キーストリーム/トウィーク3215は、暗号アドレス3201(例えば、図29の暗号化アドレス2940または図30のポインタ3000)およびキー1 3202を入力として使用する暗号化および切り捨て関数3210から生成される。一部の実装形態では、暗号化および切り捨て関数3210は、暗号ポインタおよびキーを、キーストリームとも称される擬似ランダムビット列に変換するGimli置換を使用する。次に、カウンタモードは、暗号化されるべきデータの長さと同じ数の連続ビットをこのキーストリームから選択し、キーストリームの選択されたビットをデータの選択されたビットとXORして暗号文を生成する。
一部の実施形態では、キー1 3202の値は、暗号アドレス3201のフィールドに基づき得る。例えば、暗号アドレス3201のメタデータ(例えば、サイズフィールド)は、以下で説明されるように、キーテーブルからキー1 3202を選択するためのキーセレクタとして使用されてもよい。他の実施形態では、拡散ステージが3230で実行される前に、暗号化/解読の他の手段がデータ3205に対して実行されてもよい。暗号化/解読ステージは、プロセッサコアの回路によって、例えば、プロセッサコアのロードおよびストアバッファデータ経路において実行されてもよい。
次に、拡散3230が、キー2 3203をトウィークとして使用するブロック暗号暗号化モードを介してカウンタモードの出力3225に対して実行される。拡散3230は、その入力(例えば、図示の例における3225および3203)のビットを完全に混合する任意の関数を実装し得る。一部の例として、拡散3230は、例えば、米国特許出願公開第2020/01455187号に開示されているPRINCE暗号、K暗号、または別の軽量ブロック暗号などの軽量(例えば、ラウンド縮小された)ブロック暗号によって実行され得る。一部の実施形態では、キー2 3203の値は、図29のサイズフィールド2920または図30のパワーサイズフィールド3002などの符号化ポインタのサイズ/パワーフィールドに基づいてもよく、またはそれを含んでもよい。キー2 3203の値はまた、他の値に基づき得る。次いで、拡散の出力3235は、例えば、暗号化/書き込み動作時にメモリに(例えば、図33の割り当て3315に)記憶されてもよく、または例えば、解読/読み出し動作における計算または他の動作において使用されてもよい。拡散ステージは、プロセッサ内の任意の好適な位置にある拡散エンジンの回路によって実行され得る。拡散エンジンは、図34に示され、拡散エンジン3450に関して以下でさらに説明されるようなオプションのうちの1つに位置していてもよい。
図32に示されるような拡散技術を実装することによって、データは、実行される読み出し動作および書き込み動作を介して二重に拡散することができる。したがって、図33に示されるような重複するバウンディングボックスを通して犠牲者のデータを抽出するための敵対的なアウトオブバウンドアクセスは、上記で説明されるように有意な情報が漏れることができないので、失敗する可能性がある。これは、以下のアウトオブバウンドアクセスシナリオにおいて示される。図33に示され、上記で説明されたものと同じ例示的な重複バウンディングボックスシナリオを使用するが、拡散技術が読み出し/書き込みに対しても実行される場合、敵対者は、以下の読み出しを実行する。
Read1<-Diff2(Diff1(Data1 XOR{Victim Keystream}))XOR{Adversary Keystream}
Read2<-Diff2(Diff1(Data2 XOR{Victim Keystream}))XOR{Adversary Keystream}
ここで、Diff1はメモリへのデータの書き込みに対して実行される拡散を指し、Diff2はメモリからの読み出しに対して実行される拡散を指す。したがって、Read1 XOR Read 2は、(Diff2(Diff1(Data1 XOR{Victim Keystream})))XOR(Diff2(Diff1(Data2 XOR{Victim Keystream})))を返し、このことから、攻撃者は、犠牲者のデータに関するいかなる情報も観察することができない。これは、犠牲者のデータがLLCまたはDRAMメモリに存在するとき、データが書き込み時に拡散され(犠牲者のサイズフィールドによってトウィークされ)、敵対者による読み出し中に再び拡散される(敵対者の重複バウンディングボックスサイズによってトウィークされる)ためである。犠牲者のデータが犠牲者読み出しを介してもたらされたDCU上に存在する場合、敵対者のアクセスは異なるサイズのフィールドを有する。したがって、物理アドレス(PA)が異なり、アクセスはDCUミスとして扱われる。
図33は、一部の実施形態による別の例示的な拡散技術の簡略ブロック図3300を示している。特に、図示の例は、図32に示され、上述されたものと同じ拡散技術を含む(すなわち、データ3305は、図32のデータ3205と同様に実装されてもよく、暗号化および切り捨て関数3310は、図32の暗号化および切り捨て関数3210と同様に実装されてもよく、XOR3320は、図32のXOR3220と同様に実装されてもよく、拡散3330は、図32の拡散3230と同様に実装されてもよい)が、拡散3330の出力に対して実行される追加のXOR3340を有する。このようにして、示された技術は、暗号化のXEXモードを使用することができる。最後のXOR3340は、拡散3335の出力とトウィーク値3304との間で実行され、これは、特定のデータの所有者に関するコンテキスト情報、例えば、カウンタモードの暗号化のために生成されたキーストリーム、暗号化された仮想アドレス、および最後のXOR演算をトウィークする符号化ポインタの少なくともサイズフィールドに基づき得る。データ出力3345は、図32のデータ3235に関して上述したのと同じ方法で利用することができる。
特定の実施形態は、第1のカウンタモード暗号化ステージ(例えば、図32の3210および3220、または図33の3310および3320)は、コアとDCU/L1キャッシュユニットとの間で実行することができる。例えば、コアは、DCU/L1キャッシュに記憶する前にキーストリームとXORすることによってデータを暗号化してもよく、データを使用する前にデータをキーストリームとXORすることによってDCU/L1キャッシュに記憶されたデータを解読してもよい。追加の拡散(例えば、図32の拡散3230または図33の拡散3330およびXOR3340)は、メモリ階層内の任意の好適な位置で実行されてもよい。以下の説明では、拡散が起こり得る種々の位置について考察する。
図34は、特定の実施形態によるプロセッサおよびメモリアーキテクチャ3400の簡略ブロック図を示している。例示的なアーキテクチャ3400は、2つのプロセッサコア3410とメモリ階層とを含み、メモリ階層は、各コア3410のためのそれぞれのレベル1(L1)キャッシュ3411、3412(データキャッシュユニット(DCU)と称されることもある)と、共有レベル2(L2)キャッシュ3420(ミッドレベルキャッシュ(MLC)と称されることもある)と、共有レベル3(L3)キャッシュ3430(ラストレベルキャッシュ(LLC)と称されることもある)と、メインメモリ3440とを含む。各コア3410は、それぞれのレベル1データキャッシュ(L1D)3411と、レベル1命令キャッシュ(L1I)3412とを有する。拡散エンジン3450は、例えば、以下の考慮事項に基づいて、オプション1、2、3、および4によって示される位置のうちの1つに配置することができる。拡散エンジン3450は、例えば、図32の拡散3230または図33の拡散3330およびXOR3340に関して上述したように、暗号化データに対して拡散を実行することができる。
追加の拡散によって導入されるであろう利用可能なレイテンシ(すなわち、性能オーバーヘッド)に応じて、拡散は、図32に示されるオプションのうちの1つにおいて実行され得る。コアに近いほど、必要とされるハードウェアおよび/またはプロトコルの変更が少なくてもよいが、拡散を実行するためのシリアルなレイテンシのために追加の性能オーバーヘッドを導入する可能性もある。実行される暗号RTL合成に基づいて、拡散レイテンシは、約4GHzのクロック周波数を目標とする場合、3サイクル~6サイクルまで変化し得る。一部の場合では、拡散は、コア3410とDCU3411、3412との間のロード/ストアパイプラインにおいて実行されてもよく(図32においてオプション1として示される)、性能オーバーヘッドが大きくなり得る各読み出し/書き込み動作に拡散レイテンシ全体を追加してもよい。この場合、XOR-with-keystream暗号化モードは、完全拡散をサポートする暗号化モード(例えば、XTSモードにおけるAES)と置き換えられてもよい。この手法の一部の利点としては、キャッシュハードウェアに対する影響がないこと、高度なセキュリティ機能(例えば、結託する敵対者に対する保護)をサポートすること、および実装が困難ではないことが挙げられる。しかしながら、この手法の1つの欠点は、一部の潜在的なシリアル化されたレイテンシのコストを伴うことである。
対照的に、L3キャッシュ3430(図32のオプション3として示される)またはメモリコントローラを介したメモリ3440(図34のオプション4として示される)からのロード/その中への記憶の前に拡散を実行することは、ページングの複雑さを伴う。L2キャッシュ3420からのロード/L2キャッシュ3420への記憶の前に拡散を実行すること(図34においてオプション2として示される)は、コア内で実行されている拡散を維持する一方で、比較的小さいサイズ(例えば、管理すべきキャッシュラインのより少ない数)も維持するため、他のオプションよりも比較的少ない性能オーバーヘッドを有することが期待され得る。このオプション2の1つの利点は、データ経路待ち時間に直接的な影響がないことであり、一方、この手法の1つの欠点は、キャッシュハードウェアを考慮するときにある程度の複雑さがあることである。
以下では、(i)レガシーバイナリ互換性、(ii)キャッシュコヒーレンシのためのMESIプロトコルに対する変更がほとんどないか、または大幅な変更がないこと、(iii)キャッシュに記憶されるメタデータの量が可能な限り少ないこと、および(iv)例えば、メタデータなどによるキャッシュ容量の拡張を回避することなど、キャッシュHWに対する「実行可能な」変更の必要性によって導かれる例示的な実施形態について説明する。
図35は、特定の実施形態による、DCU3520とメモリ階層内の他のキャッシュユニットとの間で実行される拡散技術の簡略ブロック図を示している。図示の例では、ロードおよびストアバッファデータ経路3510はDCU3520に接続され、DCU3520は拡散エンジン3530に接続される。拡散エンジン3530は、L2/LCおよびL3/LLCキャッシュユニット(例えば、それぞれ図34のL2/MLC3420およびL3/LLC3430)などの階層内の他のキャッシュユニットに接続する。
拡散エンジン3530は、それぞれ図32、33に関して上述した拡散ステージ3230、3330を実行するように構成されたハードウェア、ファームウェア、またはその両方を含み得る。すなわち、拡散エンジンは、暗号化論理3545を介してデータ3540を暗号化/解読することができ、暗号化/解読は、データ3540の物理アドレス(PA)3570内に存在するかまたはそれに付加されたメタデータ3560によってトウィークされる。例えば、特定の実施形態では、図35に示されるように、メタデータ3560は、PA3570内に存在する、またはそれに付加されるサイズフィールド(例えば、図29のサイズフィールド2920または図30のパワーサイズフィールド3002)を含んでもよく、サイズフィールドは、キーストアまたはテーブルから適切なキー/トウィーク値3550を選択するためのキーセレクタとして使用されてもよい。他の実施形態は、以下でさらに説明するように、キーまたはトウィークを明示的に記憶する必要性を完全に回避することができる。例えば、他の実施形態は、PA3570のメタデータ3560を使用してオンザフライキーを計算することができ、かかる計算は、拡散エンジン3530の暗号化論理3545を使用することができる。
本明細書の実施形態によって提供されるセキュリティは、アドレス内のサイズフィールド(例えば、2920の図のサイズフィールド2920または図30のパワーサイズフィールド3002)を使用することから生じ得る。小さなオブジェクト割り当ての場合であっても、誤ったサイズフィールドで読み出された場合、コンテンツは二重拡散される。拡散自体は、電子コードブック(ECB)モードであっても、任意のモードで行うことができる。一部の実施形態では、拡散は、PRINCEなどの軽量ブロック暗号によって使用される典型的なブロック長である8バイト(すなわち、64ビット)の粒度で実行される。例えば、メモリから2バイトを読み出したい場合、最初に、読み出したい量を含む8バイト整列「グラニュール」の拡散を逆にする必要がある。
図36は、一部の実施形態による、サブキャッシュライン粒度でデータを修正および拡散するための例示的な技術3600の図を示している。通常、書き戻しにより、図36の左側に示すように、キャッシュラインの全てのバイトが更新され、キャッシュライン3602は、コア3620からメモリ3610への書き戻し中にその全体が置換される。しかしながら、複数のコアが同じキャッシュラインの異なるエンティティを変更することを許可された場合、部分的なキャッシュライン書き戻しが必要になる場合がある。例えば、図36の右側に図示した例では、メタデータ3606は、キャッシュライン3604のどの部分がメモリ3610への書き戻し時に修正されるべきかを示している。この技術は、「マージ」と称されることがある。メタデータ3606は、メタデータによって示されるキャッシュラインの特定の部分(「グラニュール」によっても示される)のみを修正する以前の書き込み動作から生成され得る。キャッシュライン3602、3604は、コードキャッシュラインまたはデータキャッシュラインであり得ることが理解されるであろう。
1つの手法は、メモリコントローラレベルで常にデータをマージすることである。この場合、読み出しは常に部分的な書き戻しに先行する。しかしながら、このアプローチは性能を犠牲にする。さらに、マージメタデータは、配線を介してメモリコントローラに伝搬する必要がある。かかるアプローチは実行不可能ではない。拡散メタデータはPAから取り除かれ、マージメタデータによって置き換えられる。別のファミリの実施形態では、マージは、拡散が実行されるキャッシュユニットにおいて(例えば、DCUにおいて)行われ得る。これにより、メモリコントローラレベルでの全ての複雑さが回避される。かかる手法は、同じ物理的位置への変更を記述する全てのキャッシュラインが同じコアに対してローカルであるという仮定に基づいて機能する。また、このソリューションは、CPUのキャッシュコヒーレンシプロトコル(例えば、MESIプロトコル)に対する実質的な変更を回避するので有用である。第3のより単純なオプションは、もちろん、異なるサイズのフィールドを有するアクセスをDCUミスアクセスとして扱うことである。
図37は、特定の実施形態による、マージがキャッシュ階層内で実行されることを可能にするための例示的な技術3700を示している。特に、図37は、マージメタデータがキャッシュ内で使用され得る方法を示している。本質的に、かかるメタデータは、どのように拡散し、どのようにマージするかについての命令として機能することができる。図37には、キャッシュラインデータ3703、LRUカウンタ3702、およびタグビット3701を含むセットアソシアティブキャッシュが示されている。キャッシュラインデータ3703からのどのグラニュールが修正されたか(例えば、「関連性がある」)を示すビットベクトル3710も(例えば、キャッシュユニットの各セットの状態で)存在する。ビットベクトル3710は、キャッシュラインデータ3703中にあるバイトと同じ数のビットを含み得る。例えば、図37に示す例ではキャッシュラインが8個のグラニュールを含むので、ビットベクトル3710は長さ8である。
図38は、特定の実施形態によるキャッシュウェイの例示的な構成を示している。特に、図38は、同じ物理アドレス3802を示すが異なるサイズフィールド3801を示すタグを有する複数のキャッシュラインが同じセットのウェイに配置される、キャッシュユニットの単一のセット3800を示している。これは、キャッシュハードウェアによって実施されるデータ配置ポリシーであり得る。したがって、キャッシュは、異なるサイズのフィールドを有するにもかかわらず、同じセット上の同じ物理アドレスに関連付けられたエントリを常に配置することができる。
以下では、同じ物理的位置の異なるキャッシュラインを含むセットを指すために「複合キャッシュライン」という用語を使用する。複合キャッシュラインの全てのキャッシュラインは、キャッシュコヒーレンシプロトコルを機能させる方法に関して単一のキャッシュラインとして扱われるべきである。これは、ラストレベルキャッシュ(LLC)にサイズフィールドが存在しないためである。したがって、複合キャッシュラインの全てのキャッシュラインが同時に修正され、同時に無効状態に遷移し、同時に排他的になり、または同時に追い出される。このようにして、1つのコアのみが、複合キャッシュラインの最新のコピーを毎回有し、LLCは、キャッシュラインが複合キャッシュラインであるという事実さえ認識しない。複合キャッシュラインのキャッシュラインが追い出されようとしているとき、各キャッシュラインのグラニュールビットベクトルが読み出される。これらのビットベクトルは、どのサイズフィールドを使用してどのグラニュールが拡散されるように選択されるべきかを示す。次いで、拡散されたグラニュールは、メモリ階層の他のレベルに伝搬される単一のキャッシュラインにマージされる。修正されていないグラニュールは、複合キャッシュラインから任意のサイズのフィールドを使用して拡散することができる。これは、この場合の拡散演算が、読み出し時にこれらのグラニュールに対して実行される対応する解読を正しく反転させるためである。一例が、図39A~39Fに関して以下に示されている。
セットアソシアティブキャッシュの各セットにグラニュールビットベクトルを明示的に記憶することは高価であり得る。しかしながら、このコストを克服する方法がある。例えば、セットを複合キャッシュラインに変える必要性が決定されると、単一のウェイが切り出され、マージメタデータを記憶するために使用され得る。LRUカウンタ上の不可能な値を利用して、これがその状況であることを示すことができる。もちろん、複合キャッシュラインを完全に回避する最も単純なソリューションも存在し、サイズフィールドのみを一度に修正することができ、コアにキャッシュすることができる。異なるサイズのフィールドを有するアクセスは、DCUミスとして扱われる。これは、より頻繁な追い出しに由来する性能コストの影響を受ける。
図39A~39Fは、特定の実施形態による、プロセッサのコア3920によるメモリ3910からの/への例示的な読み出し/書き込みを示している。図示の例では、メモリ3910(コアの外側のメモリ階層内の任意の位置のメモリ、例えば、L1、L2、もしくはL3キャッシュ、またはメインメモリであり得る)は、各々が異なるサイズフィールド(S1、S2、S3)を有する3つのグラニュール3911、3912、3913を含むキャッシュライン3915を記憶する。図39Aでは、いずれのコア3920も、キャッシュライン3915をロードするために読み出しを実行していない。メモリ3910内の3つのグラニュール3911、3912、3913の各々は、上述したように完全に拡散される(例えば、図32および33に関して説明したように暗号化および拡散される)。
図39Bを参照すると、キャッシュライン3915は、本明細書に説明される拡散の実施形態(例えば、図32および33に関して説明されるもの)に従って、S2サイズフィールドを使用して、コア3920A上で実行される第1の関数によってアクセス/読み出される。その結果、コア3920Aは、グラニュール3912を正しく拡散させるが、グラニュール3911、3913は異なるサイズの場を有するので、それらを拡散させない。結果は、コア3920A内のキャッシュライン3915'に示されている(ハッチングされたグラニュールは、不適切な拡散を示す)。キャッシュライン3915'のグラニュール3912はもはや拡散されないが、暗号化されたままであることが理解されよう。
図39Cを参照すると、キャッシュライン3915は、本明細書で説明される拡散の実施形態(例えば、図32および33に関して説明されるもの)に従って、S3サイズフィールドを使用してコア3920Aを実行する第2の関数によってアクセス/読み出される。その結果、コア3920Aは、グラニュール3913を正しく拡散させるが、グラニュール3911、3912は異なるサイズの場を有するので、それらを拡散させない。結果は、コア3920A内のキャッシュライン3915''に示されている(ハッチングされたグラニュールは、不適切な拡散を示す)。キャッシュライン3915''のグラニュール3913はもはや拡散されないが、暗号化されたままであることが理解されよう。
図39Dを参照すると、適切に拡散されたグラニュールは、コア3920Aによって解読され、それらにアクセスするそれぞれの関数によって修正され、次いで、コア3920AのDCUに記憶される前に再暗号化される。修正されたグラニュールは、グラニュール3912'および3913'によって示される。
図39Eを参照すると、修正されたグラニュール3912'および3913'がメモリ3910に書き戻される。修正されたグラニュールのみがメモリ3910内のキャッシュライン3915に書き戻されるように、修正されたグラニュールを書き戻すことができる。一例として、それらは、上述したようなメタデータ(例えば、サイズフィールド)を使用して選択的に書き戻されてもよい。
図39Fを参照すると、キャッシュライン3915は、本明細書に説明される拡散の実施形態(例えば、図32および33に関して説明されるもの)に従って、S1サイズフィールドを使用して、コア3920Bを実行する関数によってアクセス/読み出される。その結果、コア3920Bは、グラニュール3911を正しく拡散させるが、グラニュール3912、3913は異なるサイズの場を有するので、それらを拡散させない。結果は、コア3920B内のキャッシュライン3915'''に示されている(ハッチングされたグラニュールは、不適切な拡散を示す)。キャッシュライン3915'''のグラニュール3911はもはや拡散されないが、暗号化されたままであることが理解されよう。
ユースアフターフリー(Use After Free)
一部の例では、プロセス内敵対者は、犠牲者が使用して解放されたのと全く同じ割り当てを得ることができる。かかる敵対者がこのシナリオを利用することを防止するために、図30の符号化ポインタ3000内のバージョンフィールド3003が使用され得る。特に、CCシーム層は、最初の4ビットバージョン番号で始まる全ての割り当てを追跡し、全てのUAF割り当てにおいてそれを増加させることができる。バージョンフィールドにおけるこの小さな変更により、ポインタ3000の暗号化された32ビットフィールドは、その前の暗号化された値とは完全に異なる乱数に変換される。ここで、このポインタを使用して、敵対者は、(その位置にいくらかの残余データを残している可能性がある)犠牲者によって以前に使用された同じ割り当てにアクセスすることができる。しかしながら、新しいポインタの暗号化された部分が完全に異なるので、敵対者の読み出しは、犠牲者の暗号化された残余データとXORされる完全に異なるキーストリームを生成し、それにより、敵対者は、その非暗号化値に関するいかなる手がかりも得ることができない。
プロセス間敵対者
一部の場合では、プロセス間敵対者も、図31に示すものと同じポインタおよび対応する割り当てを取得できる可能性がある。したがって、プロセス間敵対者は、犠牲者の割り当てにおけるデータ変更(ビットフリップ)を観察することができる。プロセス内敵対者を軽減するための上述した同様の拡散メカニズムは、潜在的に、プロセス間敵対者も軽減することができる。例えば、一部の実施形態では、プロセス間敵対者から保護するために、拡散は、サイズフィールドおよびプロセスIDの両方によってトウィークされてもよく、プロセスIDは、暗号隔離されたテナントを識別し、CPU、特権ソフトウェア(VMMまたはOS)、または両方によって設定されてもよい。
物理的敵対者
CCにおける暗号化のカウンタモードは、前方秘匿性およびライトワンス秘匿性を提供するために、概してコールドブートおよびインターポーザに対する保護を提供する。ただし、インターポーザは、同じ位置上のデータ更新のハミング距離およびビットフリップを観測することができる。図32および33に関して説明した拡散の実施形態は、ビットフリップを観察するために物理インターポーザを保護することもできる。
物理、VMM、OS敵対者の結託
このタイプの敵対者は、VMMを結託することによって、またはインターポーザを結託することによって支援されるソフトウェアまたはハードウェアのバイパス読み出しおよび書き込みを実行することができる。このタイプの結託する敵対者は、図32に関して説明される拡散メカニズムを用いても、犠牲者の潜在的なビットフリップを明らかにすることができる。例えば、物理的攻撃またはCCバイパス読み出し/書き込み能力のいずれかによって、敵対者が何らかの犠牲者の暗号文を読み出し、この暗号文を自身の割り当てに書き込むことができると仮定する。その後、敵対者は、VMM/OSを結託することによってCCモードに切り替え、自身の割り当てから暗号文を読み出す。ここで、敵対者のサイズフィールドが犠牲者のサイズフィールドと同じである場合(例えば、1/32以上の確率を有する場合)、後続の読み出し動作は拡散を逆転させる。そして、敵対者は以下を取得する。
{Key stream of adv.}XOR{Key stream of victim}XOR{data of victim}。
2回繰り返すと、{Data1 of victim}XOR{Data2 of victim}が返され、データ1とデータ2との間のハミング距離(ビットフリップ)が明らかになる。暗号化の観点から、カウンタモード暗号化+拡散は、標準的なXOR暗号化XOR(XEX)モードではなくXOR+暗号化(XE)のように機能するため、この脆弱性が存在する。しかしながら、この潜在的な脆弱性は、図33に関して上述したように、拡散によって軽減され得る。
マルチテナントの考慮事項
拡散エンジン実装形態はまた、各々が異なるキーに関連付けられた複数のテナントの存在を考慮に入れることができる。キャッシュ階層内でデータを暗号化および解読する場合、テナントキーごとに効率的にアクセスする必要がある。
第1のオプションでは、拡散エンジン(例えば、3440)によってサポートされる明示的なキーストアが存在する。キーをキーストアにロードするためのデータ経路も存在する。拡散エンジンは、キーストアにアクセスし、読み出しまたは書き込み動作に関連付けられた物理アドレス内に存在するメタデータビットに基づいて最も適切なキーを選択する。一実施形態では、これらのメタデータビットはテナントのIDを示す。かかるIDは、「PASSID」と称されることもある。この実施形態の変形形態では、テナントIDは物理アドレスから取得されず、代わりに別個のデータ経路を介して拡散エンジンに通信される。
第2のオプションは、上記の第1のオプションと比較して、拡散エンジン内にキーを記憶または生成する必要性を排除することができる。このオプションによれば、キーは、読み出しまたは書き込み動作ごとに拡散エンジン(例えば、3450)に通信され得る。
第3のオプションは、オンザフライでキーを生成することができる。例えば、物理アドレスの一部であるか、または専用配線を介して通信されるテナントID(例えば、PASSID)は、PRINCEまたはSimon暗号化エンジンなどの軽量のオンザフライキー生成メカニズムへのシードとして使用され得る。
これらのマルチテナント実施形態のいずれにおいても、キャッシュ階層のユニットからのエントリは、新しい「選択的無効化」メッセージに含まれるテナントIDの値に基づいてフラッシュされ得る。これは、追い出されるキャッシュラインに関連付けられた全ての必要な書き戻しを1つずつ実行する新規のシーケンサ論理、ならびに選択的無効化メッセージをキャッシュの全てのエントリにブロードキャストするための適切な配線を伴うことができる。
ポインタのパワーフィールド/サイズフィールドは、拡散をトウィークするために使用され得るメタデータの単なる一例であることに留意されたい(例えば、バージョン番号のように、キャッシュラインごとに複数存在する可能性がある)。本開示の他の態様では、導出キーは、プロセスキーIDおよび/もしくは共有ライブラリキーID、ならびに/または種々のデータキーIDを処理するために使用され得る。これらの項目は、キャッシュラインごとに1つだけであることが予想されるが、これらの項目のいずれかまたは全ては、対応するキーを導出し、次いでそれを用いてデータを暗号化/解読するために、タグとしてキャッシュを介して暗号化回路に渡される導出キー識別子とすることができる。
D.線形インラインメタデータ(LIM)、アウトオブバンドテーブルに記憶されたメタデータ、およびページ内メタデータ
一部の実施形態によれば、上述の暗号符号化されたポインタおよび/または暗号アドレス化指定は、LIM、アウトオブバンドテーブルに記憶されたメタデータ、およびページ内メタデータを含むこのセクションで説明する実施形態とともに使用されてもよいが、実施形態はそのように限定されず、メタデータの一部または全部がメモリに記憶されていてもよい。
メモリタグ付け技術は、バッファオーバーラン、オーバーフロー、およびフリーエクスプロイト後の使用を防止するように設計されたメモリ安全メカニズムを提供する。現在の技術は、メモリ空間内の全てのデータブロックに対して反復メモリタグを使用している。例えば、16バイトのメモリブロックを使用するシステムでは、1バイトのタグが各メモリブロックに関連付けられる。したがって、16GBのメモリ割り当ては、単にタグデータを記憶するために追加の1GBを必要とする場合があり、タグメタデータを取り出すための複数の冗長メモリアクセスにより、数ギガバイトの無駄なメモリおよび性能への影響が生じる。
このセクションでは、「メタデータ」は、一部の例を挙げると、タグ値またはバージョン番号(タグメタデータ)、有効範囲メタデータ、コンテキスト情報(例えば、メモリ割り当てサイズ(例えば、間接アドレスによって参照される割り当てメモリのバイト数)、データまたはコードのタイプ(例えば、プログラミング言語によって定義されるデータまたはコードのクラス)、許可(例えば、間接アドレスの読み出し、書き込み、および実行許可)、データまたはコードの位置(例えば、データまたはコードのサイズと組み合わされたアドレス)、データまたはコードの所有権、特権レベル(例えば、ユーザまたは監督者)、または暗号コンテキスト識別子(または暗号コンテキストID)(例えば、間接アドレスごとにランダム化されたまたは決定論的に一意の値)のうちの少なくとも1または複数を指す。本明細書で使用されるメタデータは、キー識別子(キーID)、トウィーク(tweak)、カウンタ、メモリアクセス制御(MAC)、または誤り訂正符号(ECC)を指すこともある。本明細書で使用されるメタデータは、オブジェクトのコンパートメントIDおよび/または境界情報を指すこともある。
このセクションでは、「割り当て」は、データまたはコードなどのオブジェクトが記憶されるメモリのアドレス指定可能な部分を指す。
このセクションでは、「境界情報」は、基準点に基づいて割り当ての開始および終了を決定するための情報を指す。基準点は、例えば、スロット、ブロック、ページ、またはメモリの任意の他の単位のいずれかの中間点、開始、終了を含み得る。
このセクションでは、「スロット」は、キャッシュライン内のメモリの単位を指す。
このセクションでは、「コンパートメント」によって本明細書で意味するものは、そのコンパートメント識別子(ID)によって他のテナントから区別可能なテナントである。例えば、テナントは、一実施形態によれば、別のテナントから暗号隔離されてもよいが、暗号隔離されたテナントは単に例を提供し、「コンパートメント」の定義に関して限定することを意図しない。本明細書で使用される場合、「暗号隔離」という用語は、異なるキーおよび/またはトウィークで暗号化されているメモリの異なるエリア(異なるコンパートメントまたはテナント)から生じる隔離を意味することが意図される。隔離されたメモリコンパートメント/テナントは、仮想マシン(VM)、アプリケーション、関数、またはスレッドのデータ構造および/またはコードから構成され得る。マルチテナント環境では、ページテーブルまたは拡張ページテーブルではなく、暗号化を使用してテナント間の隔離を実施することができ、コンパートメントは、メモリ浪費および不要なデータコピーを低減するために、オブジェクト粒度の共有をサポートするメモリ割り当ての文脈において定義することができる。ほとんどの既存のソリューションはページ粒度であり、その粒度はプログラミング言語の粒度と一致しない。一部のソリューションは、ページよりも小さい固定粒度を使用するが、かかるソリューションは、依然として、オブジェクト粒度共有との不一致を提示する。オブジェクト粒度のメタデータを効率的に記憶し、位置特定するための代替的な手法が必要とされる。コンパートメントは、マルチテナント環境において使用され、各テナントは、それ自体のプライベートオブジェクト(単数または複数)へのアクセスを有し、少なくとも一部のテナントは、他のテナントによるそれらのプライベートオブジェクトへのアクセスを委任する能力を有し得る。
本明細書で使用される場合、「トウィーク」は、特に、通常の平文または暗号文の入力およびキー(例えば、秘密キー116(1))に加えて、ブロック暗号への追加の入力を指し得る。トウィークには、値を表す1または複数のビットが含まれる。
メモリ割り当てセキュリティチェックシステムが本明細書で提供される。一部の実施形態によるシステムは、メモリ割り当てセキュリティチェックシステムであって、メモリコントローラ回路と、メモリコントローラ回路に結合され、メモリ回路に結合されたプロセッサ回路と、を備え、プロセッサ回路は、メモリ割り当て要求に応答して、メモリ回路内のオブジェクトのためのメモリ割り当てを取得することを含むメモリ割り当て動作を実行することと、メモリ割り当てのための境界情報およびオブジェクトにアクセスすることが許可されたコンパートメントを識別するコンパートメント識別情報(ID)のうちの少なくとも1つを含む第1のメタデータをメモリ割り当てに割り振ることと、メモリ回路のメモリ位置にオブジェクトを記憶することと、メモリ位置またはメモリ位置とは別個のテーブルのうちの1つにメタデータを記憶することと、プログラムに対応するメモリ動作要求に応答して、メモリ回路内の第1のメタデータの位置を識別するためのデータを含むポインタを使用して第1のメタデータにアクセスすることであって、第1のメタデータは、プログラムから隠されている、ことと、メモリコントローラ回路による第1のメタデータと第2のメタデータとの間の一致の判定に応答して、メモリ動作要求に対応するメモリ動作を実行することと、を行う、メモリ割り当てセキュリティチェックシステムを含み得る。
非一時的または一時的な記憶デバイスまたは記憶媒体が提供される。記憶媒体は、プロセッサ回路によって実行されると、プロセッサ回路に、メモリ割り当て要求に応答して、メモリ回路内のオブジェクトのためのメモリ割り当てを取得することを含むメモリ割り当て動作を実行することと、メモリ割り当てのための境界情報およびオブジェクトにアクセスすることが許可されたコンパートメントを識別するコンパートメント識別情報(ID)のうちの少なくとも1つを含む第1のメタデータをメモリ割り当てに割り振ることと、メモリ回路のメモリ位置にオブジェクトを記憶することと、メモリ位置またはメモリ位置とは別個のテーブルのうちの1つにメタデータを記憶することと、プログラムに対応するメモリ動作要求に応答して、メモリ回路内の第1のメタデータの位置を識別するためのデータを含むポインタを使用して第1のメタデータにアクセスすることであって、第1のメタデータは、プログラムから隠されている、ことと、第1のメタデータと第2のメタデータとの間の一致の判定に応答して、メモリ動作要求に対応するメモリ動作を実行することと、を含む動作を実行させる機械可読命令を含む。
メモリ割り当てセキュリティチェック方法は、メモリ割り当て要求に応答して、メモリ回路内のオブジェクトのためのメモリ割り当てを取得することを含むメモリ割り当て動作を実行することと、メモリ割り当てのための境界情報およびオブジェクトにアクセスすることが許可されたコンパートメントを識別するコンパートメント識別情報(ID)のうちの少なくとも1つを含む第1のメタデータをメモリ割り当てに割り振ることと、メモリ回路のメモリ位置にオブジェクトを記憶することと、メモリ位置またはメモリ位置とは別個のテーブルのうちの1つにメタデータを記憶することと、プログラムに対応するメモリ動作要求に応答して、メモリ回路内の第1のメタデータの位置を識別するためのデータを含むポインタを使用して第1のメタデータにアクセスすることであって、第1のメタデータは、プログラムから隠されている、ことと、第1のメタデータと第2のメタデータとの間の一致の判定に応答して、メモリ動作要求に対応するメモリ動作を実行することと、を含む。
オブジェクトメタデータの一部としてコンパートメントIDを提供する一部の実施形態は、インラインで記憶されるか、または別個のメタデータテーブル内に記憶されるかにかかわらず、例えば、ブラウザおよびデータセンタ内のサービスとしての機能(FaaS)ワークロードの文脈において、特に有用なソリューションを提供する。
本明細書で説明する一部のシステムおよび方法は、スロットの中間点におけるメモリ割り当てに関連付けられたメタデータを記憶する命令を含むシステム、方法、およびコンピュータ可読媒体を提供する。一実施形態によれば、スロットはまた、境界情報またはコンパートメントIDのうちの少なくとも1つとともに、メモリ割り当て(メタデータが関係する割り当てを含む所与のキャッシュライン内のインライン)を含み得る。さらなる実施形態によると、割り当ては、全体的または部分的であってもよく、すなわち、少なくとも部分的に、その関連メタデータとは異なるキャッシュラインであってもよい。
16Gバイトの例を使用すると、従来のタグメタデータを使用することは、割り当て内に含まれる各16Byteブロックについて4ビットタグメタデータを繰り返し記憶するために0.5Gバイトの追加のメモリ空間を必要とする。本明細書で開示される一部のシステムおよび方法は、このメモリ要件を、キャッシュスロットなどのスロット内の中間点メモリアドレス(または中間点)に位置し、メモリ割り当て、例えばその同じスロット内のメモリ割り当てに対応する(例えば、割り当て内に含まれる16バイトスロット内の1バイトのメタデータに対応する)1または複数のバイトに有利に低減する。かかるメカニズムは、例えば、タグメタデータを記憶するのに必要なメモリを10億分の1に減少させることができる。
次いで、メタデータは、1または複数のコア474/484などのシステムプロセッサ回路によってソフトウェア(すなわち、プログラム)から隠されてよく、スロット内のメモリ割り当ての範囲にわたって論理アドレスまたはインデックスをインクリメントするときに連続メモリを提供し、プロセッサはメタデータをスキップし、それに応じて線形/仮想アドレスを調整する。
メモリ割り当てバウンディングボックスの中間点(オブジェクトが割り当て内に記憶される所与のスロットサイズに対応する)は、一実施形態によれば、2つのポインタ符号化の最良適合累乗、またはバウンディングボックスの中間点がメタデータを搬送するために指定され得る任意の他の符号化を使用して、メモリコントローラ回路(図4の統合メモリコントローラ論理(IMC)472など)によって決定され得る。メタデータは、メモリ割り当てごとに1回だけ符号化され、割り当てのバウンディングボックスの中間点に位置してもよく、メモリ回路が符号化ポインタを使用してソフトウェアに対して連続割り当てとして見えるように、プロセッサ回路によって隠されてもよい。本明細書で開示される一部のシステムおよび方法は、ポインタ符号化を使用して、メモリ割り当てのバウンディングボックスの中間点を決定する。メモリ割り当て全体に関連付けられたメタデータは、決定された中間点位置について記憶され、関連する割り当てとともにプロセッサにアクセス可能であるようにポインタによってアクセスされてもよい。メモリアロケータライブラリのC++New演算子またはCmalloc関数(または同様のもの)は、メタデータサイズを考慮に入れ、それに応じてメモリ割り当てを調整(増加)して、メタデータサイズおよび割り当ての真のサイズなどの任意の追加のメタデータを収容することができる。メタデータはスロットの中間点に(予測可能な参照位置に)記憶されるので、プロセッサ回路は、ポインタを介してメモリ回路にアクセスするとき、ポインタ符号化に基づいて、メタデータを確実にスキップし、中間点を過ぎたメモリアクセス線形/仮想アドレスにメタデータのサイズを追加することによって、タグメタデータの存在を隠すことができる。一方、プロセッサは、ポインタ符号化に基づく割り当てとともにメタデータの位置をインラインで直接決定することができる。
本明細書で開示する一部のシステムおよび方法は、割り当てサイズの2の累乗の符号化が、常にメモリ割り当てとともに位置する最良適合バウンディングボックス(またはスロット)中間点値を与え得るという認識から利益を得る。有利には、複数のメモリスロットは、より大きいメモリスロットの2の累乗のサイズ内で重複し得るが、より小さいメモリスロットの各々は、異なる中間点アドレスを有し、より小さいメモリスロットの中間点値の各々は、より大きいメモリスロットの中間点値とは異なる。
ポインタは、2の累乗のスロットサイズを識別するための複数のビット(例えば、64ビットポインタに対して6ビット)と、一実施形態では、ユースアフターフリー(UAF)を防止するためのバージョニングのためのタグ値とを含み得る。実際の割り当てられたメモリ境界(例えば、オフセットおよびアレイサイズ、またはバウンディングボックス中間点の左への実際の割り当てサイズ(下限またはLB)および右への割り当てサイズ(上限またはUB))も、中間点メタデータの一部として符号化され、プロセッサ回路によってチェックされて、所与のメモリアクセスが現在のメモリ割り当ての境界アドレス内でのみ実行されることを保証することができる。これらの境界は、メモリ使用を最適化するためにポインタのサイズフィールド値によって識別される2の累乗(Po2)のバウンディングボックスサイズ(スロットサイズのPo2インクリメントが使用される場合)に従ってサイズ決定することができ、より小さいバウンディングボックスは、割り当ての真の境界を符号化するためにより少ないバイトを必要とするのに対して、より大きい割り当ては、より大きい割り当ての真の境界を符号化するために追加のバイトを必要とする。
メタデータ4050内の任意のタグデータは、ポインタ4080によって参照されている記憶位置(割り当てのスロット)に関連付けられてもよい。
有益には、本明細書で開示される一部のシステムおよび方法は、性能最適化を提供しながら、メタデータを記憶するためのメモリオーバーヘッドを低減する。プロセッサ回路が割り当てを含む各メモリブロック(16B)ごとに1つのタグを記憶することができる最新技術のメモリタグ付け技術とは異なり、本明細書で開示するシステムおよび方法の一部は、割り当てごとに境界およびコンパートメントIDのうちの少なくとも1つを含むものなどのメタデータを代わりにキャッシュすることができるプロセッサを提供し、キャッシュなどのメモリ位置内のスロットなどの所定の参照位置からメタデータをフェッチすることによって、キャッシングをはるかに効率的にし、メモリルックアップを低減し、参照位置は、例えば割り当てのバウンディングボックスの中間点に対応する。メモリ割り当て(オブジェクト)は、オブジェクトと同じメモリ位置(キャッシュ、キャッシュライン、またはスロット)にメタデータを有することができ、別個のメタデータタグテーブル(別名、データ破損検出DCD)からの余分なメモリルックアップが必要とすることを完全に回避する。
メモリを割り当てるとき、一実施形態によれば、malloc()/newは、単にバウンディングボックスの中間点におけるメタデータを考慮し、割り当てサイズを(例えば、バウンディングボックスのサイズおよび関連付けられたメタデータサイズに応じて1バイト、または2バイト、またはそれ以上)増加させ、メモリ割り当てのバウンディングボックスの中間点にメタデータを設定することができる。次いで、論理(mallocなど)は、サイズフィールド内のバウンディングボックスのサイズとともに同じメタデータを有するポインタを返すことができる。プロセッサが、この符号化ポインタフォーマットでメモリ(キャッシュなど)にアクセスしているとき、プロセッサ回路は、割り当てのバウンディングボックスの中間点からメタデータ値を調べ、ポインタメタデータ値と比較し、一致があればメモリアクセスを可能にし、一致が無ければ障害または例外をトリガする。malloc free()は、次いで、メタデータの少なくとも一部など、メモリメタデータをリセットするために使用され得る。同様に、プロセッサは、メタデータ内の境界情報を使用して、メモリアクセスが正しい割り当て境界内にあること、例えば、バウンディングボックス中間点(LB)の左からX1バイト(または最小割り当てサイズの他の単位)内にあり、バウンディングボックス中間点(UB)の右からX2バイト(または最小割り当てサイズの他の単位)内にあることを検証することができる。ここで、タグ、X1、およびX2は、中間点メタデータの別個のフィールドである。
図40は、プロセッサ回路(例えば、図4のコア474または484と同様)およびメモリコントローラ回路4020(図4のIMC472または482と同様)とともにメモリ割り当てに対するセキュリティチェックを可能にする例示的なメモリ回路/キャッシュ回路471(図4のキャッシュ471または481またはメモリ432または434と同様)の概略図である。実施形態はそのように限定されないが、図40の示される実施形態では、メモリ回路/キャッシュ回路471は、本明細書に説明される少なくとも1つの実施形態による、それぞれの中間点アドレス4042が、スロット4040内のそれぞれのメモリ割り当て4054に関連付けられるそれぞれの一意のメタデータ4050を含む、1または複数の2の累乗(すなわち、2~2)スロット4040に配分されてもよい。
一部の実施形態では、プロセッサ回路(図4のコア474/484など)にメモリ動作を実行させる命令は、メモリコントローラ回路(図4のIMC472/482など)に、メモリ動作のためのアドレス4082を表すデータと、メモリアドレス4082に対応するそれぞれのメモリ割り当て4040に関連付けられたメタデータ4084とを少なくとも含むポインタ4080を使用して、メモリ回路/キャッシュ回路471にアクセスさせる。メタデータ4084は、それぞれのメモリ割り当て4040の中間点アドレス4042に記憶されたメタデータ4050と比較される。ポインタメタデータ4084がメモリ割り当て4040内の記憶されたメタデータ4050と一致する場合、指定されたメモリアドレス4082における動作が許可される。ポインタメタデータ4084がメモリ割り当て4040内の記憶されたメタデータ4050と一致しない場合、例外がプロセッサ470に返される。
メタデータの比較がこのセクションで説明されるとき、比較とは、限定的に見られることを意味するものではなく、ポインタ内のメタデータ(タグデータ、コンパートメントIDなど)の全部または一部と、アクセス制御が実装されるオブジェクトに関連付けられたメタデータとの比較を包含することを意味することに留意されたい。
図40のメモリ回路/キャッシュ回路471の実施形態では、各オブジェクト4054は、所与のスロットに完全に割り振られ(すなわち、スロットごとに1つのオブジェクトおよびオブジェクトごとに1つのスロット)、このようにして、中間点におけるメタデータ4050が、それが属するオブジェクトに容易に関連付けられ得ることを保証する。しかしながら、実施形態はそのように限定されず、それらの範囲内に、メタデータが関係するオブジェクトのいずれも、一部、または全部も含まないキャッシュラインにおけるメタデータ、コンパートメントID、および境界情報の暫定を含む。オブジェクト4054は、図40において、図の下部に一度示されており、それぞれのスロット4040自体の中の両矢印によって対応して表されている。オブジェクト4054が割り当て自体よりも大きいスロット内にあっても、割り当ては、一実施形態によれば、より大きいスロット内に配置するためにパディングを必要としない場合がある。一部の実施形態によれば、オブジェクトは、利用可能なスロットおよびオブジェクトのセットが与えられると、オブジェクトに最も密接に適合するスロットに割り当てられ得る。図40に示す実施形態では、例えば、32Bオブジェクト4054は32Bスロット4040に割り当てられ、56Bオブジェクトは128Bスロット4040に割り当てられ、48Bオブジェクトは256Bスロットに割り当てられ、24Bオブジェクトは32Bスロットに割り当てられ、96Bオブジェクトは128Bスロットに割り当てられる。図40に示す例では、48Bオブジェクトは2つのスロット内で位置合わせ境界を横切っているので、より大きい128Bスロットに割り振られる。図40の図示の例は、オブジェクトが連続して(密に詰め込まれて)スロットに跨るように示しているが、明らかに、実施形態はそのように限定されず、スロットの中間点アドレスがオブジェクトによって横切られる限り、それぞれの専用メモリスロットへのオブジェクトの割り当て方式をそれらの範囲内に含んでおり、一部のスロットは、特に、例えば、ダングリングポインタが関与するUAFシナリオにおいて、空であってもよい。一部の実施形態によれば、オブジェクトサイズは、スロットに割り振られたときに中間点を横切る(すなわち、少なくとも部分的にカバーする)ために、最小スロットの幅の半分以上であってもよい。
各オブジェクトが専用スロットに一意に割り振られ、スロット中間点を横切る上記の割り当て方式に基づいて、プロセッサがメタデータを決定するために別個のテーブルまたはメモリ位置に行く必要なく、それを迅速に見つけることを可能にするために、メタデータ4050は、スロットの中間点アドレスに位置し得る。現在の手法では、メタデータを各割り当ての前に、典型的には2の累乗でない方式で配置し、各ポインタ内に、割り当ての開始からのポインタアドレスの距離を指定する場合がある。しかしながら、ポインタは限られた数のビットを有し、後者の距離を指定する必要性がある場合、ポインタが収容できる距離よりも距離が大きい場合、すなわち、割り当てがポインタ内のビットが収容できる割り当てよりも大きい場合に、ポインタの範囲を超過する可能性がある。一実施形態による使用される2の累乗(Po2)アプローチは、各オブジェクトのPo2スロットへの一意のマッピングを可能にし、スロットは、その中の各オブジェクトを一意に符号化および暗号化する可能性を提供するために使用される。一部の実施形態によれば、メタデータ4050も暗号化され得る。
上述したような割り当ての開始からの距離/オフセットが長すぎるという問題を克服するために、代わりに、一部の実施形態は、ポインタのサイズフィールドにおいて、アドレス指定されるオブジェクトが収まるポインタのサイズフィールドにおけるサイズ指数としてスロットのPo2サイズなどのスロットのサイズを指定するだけである。サイズは、参照されているスロットを決定するためにプロセッサによって参照される特定のアドレスビットを決定する。特定のスロットを識別すると、プロセッサは、境界情報またはコンパートメントIDのうちの少なくとも1つ、および一部の場合ではタグデータなどの他のメタデータを含むメタデータを読み出すために、識別されたスロットの中間点アドレスに直接進むことができる。しかしながら、実施形態は、スロットのためのPo2方式に限定されず、連続的に増加するサイズのスロットの利用可能性が2以外の整数の累乗に基づき得る、または任意の他の方式に基づき得る方式を含んでもよい。
オブジェクトが常に中間点を横切ることが知られているメタデータ4050の一部として記憶された境界情報は、LBおよびUBの基準点として中間点を有するLBおよびUBとして表現されてもよく、スロットのサイズにかかわらず、特に、バッファオーバーフローの検出を可能にするために使用され得る。有利には、示された実施形態における境界情報は、スロット内のオブジェクトとともに記憶されるので(実施形態はそのように限定されないが)、オブジェクト自体と実質的に同時に、プロセッサに利用可能にすることができ、このようにしてメモリ動作を従来技術のメモリ動作よりも効率的にする。一部の実施形態によれば、境界情報は、スロットおよび/または割り当て自体が大きい場合、特に、ポインタ内のビット数が割り当ての開始からのポインタ値の距離をサポートするのに十分でない可能性がある場合に、ポインタ内の多数のビットを占有する必要なしに、既知の中間点参照に基づいて割り当ての位置の決定を可能にする。図40に例として示されるPo2方式は、ポインタ値から参照されるオブジェクトの先頭までの距離情報の提供によって提供される線形スケーリングの代わりに、ポインタのサイズ指数フィールドに値が追加されるたびに、参照されるスロットサイズが2倍にされるコンパクト符号化方式を提供する。したがって、Po2方式では、限られたサイズのフィールドを使用して、従来技術の方式よりもはるかに大きいスロットサイズおよびオブジェクトを指定することができる。
メモリコントローラ回路472/482は、プロセッサ回路470とは別個のボックスとして図40に示されているが、一部の実施形態では、プロセッサ回路470/480は、メモリコントローラ回路472/482の全部または一部を含み得る。
メモリアクセス動作を引き起こす命令の実行に応答して、プロセッサ回路470は、動作に関与するメモリアドレス4082を表すデータと、メモリアドレス4082に対応するメモリ割り当て4040に関連付けられたメタデータ4084を表すデータとを少なくとも含む符号化ポインタ4080を生成する。符号化ポインタ4080は、図41に関して以下で詳細に説明するように、メモリ割り当て4040のサイズを表すデータおよびポインタ算術などの追加の情報を含み得る。
一部の実施形態では、コア474/484は、メモリ割り当て4040の中間点アドレス4042に記憶されたメタデータ4084とともに、符号化ポインタ4080によって搬送されるメタデータ4050を含み得る。コア474/484は、メモリ位置に記憶されたメタデータ4050を使用して、境界チェックおよび/またはコンパートメントIDチェックをさらに実行することができる。符号化ポインタ4080によって搬送されるメタデータ4084が、スロット4040の中間点アドレス4042に記憶されたメタデータ4050と一致する場合、さらに、アドレス4082を境界情報と比較する境界検査、および/またはメタデータ4043/4050に記憶されたコンパートメントIDと現在のコンパートメントIDレジスタの内容とを比較するコンパートメントID検査が一致を示す場合、コア474/484は、要求された動作を完了する。符号化ポインタ4080によって搬送されるメタデータ4084が、スロット4040の中間点アドレス4042に記憶されたメタデータ4050と一致しない場合、ならびに/またはアドレスに対する境界検査および/もしくはコンパートメントID検査が一致を返さない場合、コアは、例外をプロセッサ回路470に返す。
メモリ回路/キャッシュ回路471は、情報および/またはデータを記憶することが可能な任意の数および/または組み合わせの電気構成要素、半導体デバイス、光記憶デバイス、量子記憶デバイス、分子記憶デバイス、原子記憶デバイス、および/または論理要素を含み得る。メモリ回路/キャッシュ回路471の全部または一部は、RAM、DRAM、SRAM、または同様のものなどの一時メモリ回路を含み得る。メモリ回路/キャッシュ回路471の全部または一部は、光記憶媒体、磁気記憶媒体、NANDメモリなどの非一時的メモリ回路を含み得る。メモリ回路/キャッシュ回路471は、任意の記憶容量を有する1または複数の記憶デバイスを含み得る。例えば、メモリ回路/キャッシュ回路471は、約512キロバイト以上、1メガバイト(MB)以上、100MB以上、1ギガバイト(GB)以上、100GB以上、1テラバイト(TB)以上、または約100TB以上の記憶容量を有する1または複数の記憶デバイスを含んでもよい。
図40の示された実施形態では、IMC472/482は、メモリ回路/キャッシュ回路471をスロット4040の2の累乗の任意の数に配分する。一部の実施形態では、IMC472/482は、メモリ回路/キャッシュ回路471を単一のメモリスロット4040(すなわち、システムメモリ全体がカバーされることになるmの値に対して、2の累乗=2)に配分することができる。他の実施形態では、IMC472/482は、メモリ回路/キャッシュ回路471を2つのメモリスロット4040(すなわち、2の累乗=2m-1)に配分することができる。他の実施形態では、IMC472/482は、メモリ回路/キャッシュ回路471を4つのメモリスロット4040(すなわち、2の累乗=2m-2)に配分することができる。他の実施形態では、IMC472/482は、メモリ回路/キャッシュ回路471を「n」個のメモリ割り当て4040(すなわち、メモリ空間を「n」個のスロットに分割することになる値kに対して2の累乗=2)に配分することができる。重要なことに、メモリスロット4040の各々における中間点アドレス4042は、他のメモリスロットにおける中間点アドレスと整列せず、それによって、それぞれのメモリスロット4040に固有のメタデータ4050の記憶が許可されることに留意されたい。一部の実施形態では、メタデータ4050は、任意の数のビットを含み得る。例えば、メタデータ4050は、2ビット以上、4ビット以上、6ビット以上、8ビット以上、16ビット以上、または32ビット以上を含んでもよい。
符号化ポインタ4080は、メモリ動作(フェッチ、ストアなど)を実行するためのメモリアドレス4082を含む。メモリアドレス4082は、任意の数のビットを含み得る。例えば、メモリアドレス4082は、8ビット以上、16ビット以上、32ビット以上、48ビット以上、または64ビット以上、128ビット以上、256ビット以上、512ビット以上、現在の動作モードに対する線形アドレス幅の2乗まで、例えば、アドレス指定されるスロットサイズに関するユーザ線形アドレス幅ビットを含んでもよい。実施形態では、符号化ポインタ4080によって搬送されるメタデータ4084は、任意の数のビットを含み得る。例えば、メタデータ4084は、4ビット以上、8ビット以上、16ビット以上、または32ビット以上を含んでもよい。実施形態では、符号化ポインタ4080によって搬送されるアドレスおよび/またはタグデータの全部または一部を暗号化することができる。実施形態では、メタデータ4050A~4050nは、キャッシュライン(例えば、32バイトブロック、64バイトブロック、または128バイトブロック、256バイトブロック以上、512バイトブロック、または2バイトの累乗に等しいブロックサイズ)としてプロセッサキャッシュ回路4012にロードされ得る。かかる実施形態では、プロセッサキャッシュ回路471/481に記憶されたデータに対してメモリ動作を実行する際に、IMC472/482、または例えばプロセッサ回路470内の他の論理は、メタデータ4084と、アドレス4082および現在のコンパートメントIDレジスタの内容などの他の関連情報とを、要求されたメモリアドレスを含むキャッシュライン上に記憶されたメタデータ4050と比較する。
割り当て4040の中間点アドレス4042(すなわち、メタデータ4050内のタグデータを含む「隠された」アドレス)の前のメモリアドレスで行われるメモリ動作の場合、メモリ割り当て4040に関連付けられたメタデータ4084によるメタデータ4050の検証が成功すると、ポインタ4080は、単に、示されたメモリアドレス4082で動作を実行することができる。割り当て4040の中間点アドレス4042の後のメモリアドレスにおいて行われるメモリ動作の場合、符号化ポインタ4080は、メモリ割り当て4040に記憶されたメタデータ4050のサイズに基づいてオフセットされ得る。したがって、メタデータ4050の存在は、符号化ポインタ4080を使用してメタデータへのアクセスを有するソフトウェアから、プロセッサ回路によって「隠される」。
図41は、例示的な符号化ポインタアーキテクチャ4100の概略図であり、符号化ポインタ4080は、マルチビットメモリ割り当てサイズフィールド4110、マルチビットオプショナルメタデータフィールド4120(タグデータフィールドなど)、マルチビットアドレスフィールド4130、およびマルチビットポインタ算術フィールド4140を含む。図41に示すように、符号化ポインタ4080は、例えば、64ビットポインタ、または128ビットポインタ、または128ビットより大きいポインタなど、任意のサイズのポインタを含み得る。符号化ポインタは、一実施形態では、x86アーキテクチャポインタを含み得る。符号化ポインタ4080は、より大きい(例えば、128ビット)、またはより小さい(例えば、16ビット、32ビット)数のビットを含み得る。実施形態では、アドレスフィールド4130において使用されるビット数は、サイズフィールド4110において表現されるように、それぞれのメモリ割り当て4040のサイズに基づき得る。例えば、概して、より大きなメモリ割り当て(2)は、より小さなメモリ割り当て(2~2)よりも少ない数のアドレスビットを必要とし得る。アドレスフィールド4130は、任意の数のビットを含み得るが、図40の示される実施形態では、サイズ数は、実際には、Po2スロットサイズに対応しないことに留意されたい。例えば、アドレスフィールド4130は、8ビット以上、16ビット以上、32ビット以上、48ビット以上、64ビット以上、128ビット以上を有するメモリアドレスを収容してもよい。
引き続き図41を参照すると、サイズフィールド4110は、アドレスフィールド4130内の情報と組み合わせて、プロセッサが所与のスロットの中間点を見つけることを可能にする。アドレスフィールド4130内の特定のアドレスビットは、サイズフィールド内に示されるサイズによって決定される。サイズフィールドがサイズ指数情報を含むPo2方式では、サイズ指数が大きくなるにつれて(スロットが大きいほど)、特定のスロットを識別するのに必要なアドレスビットが(スロットが大きいほど、識別するスロットが少なくなるため)少なくなる。かかる場合、ポインタ算術フィールド240内のポインタの末尾のビットのより多くを使用して、所与のスロット内を範囲指定することができる。後者は、アドレスフィールドの縮小をもたらす。
前述したように、メタデータフィールド4120およびその中のタグデータの使用は所望によりある。ポインタ内のタグデータは、スロットにアクセスするために使用されているポインタバージョンが実際にそのスロットにアクセスする権利を有するポインタであることを依然として保証しながら、ポインタの複数のバージョンが同じスロットを指して使用されることを可能にする。タグデータの使用は、例えば、UAF攻撃を軽減するのに有用であり得る。ダングリングポインタが含まれるが、タグデータが使用される場合、ポインタの各バージョンでタグを変更すると、ダングリングポインタによってアクセスしようとする割り当てとの不一致が生じ、エラーが生じ、したがって新しい割り当てがダングリングポインタによる不正アクセスから保護される。
ポインタ内のタグデータは、例えば、完全性チェックが使用される場合など、オブジェクトにアクセスするためのポインタの権利を保証するために他のメカニズムが使用される場合、回避され得る。例えば、完全性チェックは、データなどのオブジェクトの少なくとも一部分の完全性を、それが解読および/または解凍された後にチェックする際に使用するための尺度を提供してもよい。より具体的には、オブジェクトが圧縮および/または暗号化されてスロットに記憶される前に、まず、完全性値を含む尺度をオブジェクトの少なくとも一部に関連付けることができる。例えば、完全性値は、完全性チェック値(ICV)(例えば、ハッシュ)、メッセージ認証コード(MAC)(例えば、同じメッセージ、秘密キー、および初期化ベクトルが使用されるときに生成される同じMAC)、メッセージ完全性コード(MIC)(例えば、同じアルゴリズムが使用される場合に生成される同じMIC)、署名(例えば、キーペアの秘密キーを使用して生成される)、ハッシュメッセージ認証コード/HMAC(例えば、SHA3HMAC)など、またはそれらの組み合わせを含み得る。所与のスロット内のオブジェクトの後続の解読および/または圧縮解除の後、再現されたオブジェクトについて同じタイプの測定を行い、元のオブジェクトについて最初に行ったタイプの測定と比較して、記憶されている元のオブジェクトが、ストレージ内に記憶されてから何らかの形で変更されたかどうかを判定することができる。
別の実施形態によれば、アクセスされたときに、データに対応するメモリ位置が解放されるか割り当てられるかを示す値が、データの一部として記憶されてもよい。後者のメカニズムは、メタデータ4050内のタグ情報との比較を必要とするタグデータなど、ポインタ内の追加情報を必要としない。
実施形態では、サイズデータフィールド4110は、任意の数のビットを含み得る。例えば、サイズデータは、2ビット以上、4ビット以上、6ビット以上、または8ビット以上を含んでもよい。サイズデータフィールド4110は、メモリ割り当て4040のサイズの表示を提供する。メタデータフィールド4120は、存在する場合(タグフィールドは実施形態によれば所望によりあることに留意されたい)、任意の数のビットを含み得る。例えば、サイズデータフィールド4110は、4ビット以上、6ビット以上、8ビット以上、16ビット以上、または32ビット以上を含んでもよい。符号化ポインタ4060は、許容ポインタ算術フィールド4140も含む。許容ポインタ算術フィールド4140は、任意の数のビットを含み得る。例えば、ポインタ算術フィールド4140は、4ビット以上、6ビット以上、8ビット以上、16ビット以上、または32ビット以上を含んでもよい。
図41に示されるように、メモリ動作を含む命令の実行時に、一実施形態によれば、プロセッサ回路470および/またはIMC472/482は、4150において、メタデータフィールド4120に含まれるメタデータ4084、アドレス4130、および/または現在のコンパートメントIDレジスタの内容を、メモリ割り当て4040の中間点アドレス4042に記憶されたメタデータ4050と比較する。メタデータフィールド4120に含まれるメタデータ4084がメモリ割り当て4040の中間点アドレス4042に記憶されたメタデータ4050と一致し、他のメタデータチェックも成功した場合、プロセッサ回路470および/またはIMC472/482は、動作270において、メモリ回路/キャッシュ回路471において要求されたメモリ動作を完了する。一部の実施形態によれば、メタデータ4050は、境界情報およびメタデータに関連付けられたオブジェクトにアクセスする許可を有するテナントに対応するコンパートメントIDのうちの少なくとも1つを含み得る。メタデータフィールド4120に含まれるメタデータ4084が、メモリ割り当て4040の中間点アドレス4042に記憶されたメタデータ4050と一致しない場合、IMC472/482は、エラー、障害、または例外4160をプロセッサ回路470に報告する。一部の実施形態では、割り当て境界メタデータは、メタデータ4050に含まれ得る。かかる実施形態では、IMC472/482は、メモリアクセスが指定された範囲内にあるかどうかをチェックすることもできる。境界情報は、メモリ割り当ての座標、例えば、オフセットおよびアレイサイズ、またはバウンディングボックス中間点の左への実際の割り当てサイズおよび右への割り当てサイズを含み得る。
ここで図42を参照すると、この図は、異なる範囲のスロットサイズに対するメタデータ4050の一実施形態の拡大図を提供している。図示の例では、32~64バイトのスロットサイズは、中間点4042の一方の側に隣接してタグデータ、LBおよびUBを含み、コンパートメントIDが使用されない場合には1バイトがLIMに割り当てられ、コンパートメントIDが使用される場合には2バイトがLIMに割り当てられる。この場合のLIMは、4ビットのタグデータと、LBおよびUBに対してそれぞれ2ビットと、一部の場合ではコンパートメントIDに対して4ビットとを含む。図示の例では、128~256バイトのスロットサイズは、中間点4042の両側およびそれに隣接するタグデータ、LBおよびUBを含み、コンパートメントIDが使用されない場合、2バイトがLIMに割り当てられ、コンパートメントIDが使用される場合、4バイトがLIMに割り当てられる。この場合の2バイトのLIMは、中間点を跨ぐ8ビットのタグデータと、LBおよびUBの各4ビットと、コンパートメントIDの合計16ビットとを含む。図示の例では、512Bを超えるスロットサイズは、中間点4042の両側およびそれに隣接するタグデータ、LBおよびUBを含み、10バイトがLIMに割り当てられ(8ビットのタグデータが中間点に跨り、コンパートメントIDが使用されないLBおよびUBについてそれぞれ60ビット、コンパートメントIDが使用されるLBおよびUBについてそれぞれ52ビット、コンパートメントIDが使用される中間点の各側で1バイトである)、コンパートメントIDについて合計16ビットが割り当てられる。メタデータは、通常のメモリアクセス、またはメタデータが更新されるスロットおよびメタデータの値を指定する入力オペランドを受け入れる特定の命令を使用して設定することができる。コンパートメントは、異なるコンパートメントのためのメタデータを更新することを許可されるべきではないため、プロセッサは、記憶されたメタデータのいずれかの更新を許可する前に、記憶されたメタデータ内のコンパートメントIDの以前の値が現在のコンパートメントIDレジスタの値と一致することを最初にチェックすべきである。特権ソフトウェアまたは非特権ソフトウェアの信頼できる部分は、コンパートメントIDの以前の値のチェックをオーバーライドすることが許可され得る。
図40~42のLIMメタデータの実施形態では、一態様によれば、メタデータは、したがって、図42の記憶フォーマットで示唆されるように、メタデータの少なくとも一部(図示される場合では、タグメタデータおよびコンパートメントIDメタデータなど)がスロット中間点の周りで複製されるように記憶することができる。メタデータのためのこの複製されたフォーマットは、(中間点がキャッシュラインまたはページ境界と一致する場合を参照して)ポインタがキャッシュラインまたはページ境界の一方の側にアクセスすることを可能にし、キャッシュラインまたはページ境界の他方の側にアクセスする必要なしにメタデータに対して1または複数のチェックを実行する。したがって、複製により、プロセッサが、特に、より大きい割り当ての場合、複数のキャッシュラインまたはページ内のメタデータをルックアップする必要性を回避することができる。メタデータは、存在する場合にはタグデータを含むが、いずれにしても境界情報またはコンパートメントIDのうちの少なくとも1つを含み、一実施形態によれば、暗号化されてもよい。一実施形態では、メタデータ4050の一部のみ、例えば、存在する場合はタグデータのみ、または境界情報のみ、またはメタデータの他の部分のみが暗号化されてもよい。
境界情報は、完全性チェック(完全性値が上述のように使用される場合)または他のアクセス制御メカニズムがスロット内の割り当ての実際の範囲に基づいて実行されることを可能にする。プロセッサに提供される境界情報により、プロセッサは、スロット内の所与の位置を指定するポインタ内のオフセットが、アクセス制御が実行されるスロットに割り振られたオブジェクトの境界内にあることを保証することができる。
境界情報は、少なくとも、他の割り当てが複数のスロットをカバーする同じメモリ範囲に重複している可能性があるので、有用である。スロットに対応する境界ポインタは、境界情報において指定されたメモリの特定の範囲のみを使用することが許可される。境界情報は、完全性チェックなどのアクセス制御メカニズムの概念にも関連する。完全性値が計算されているとき、境界情報は、完全性値が計算されているメモリ内のオブジェクトの範囲をプロセッサが決定することを可能にする。
一実施形態によれば、図42に示すように、割り当てごとに保持される境界情報の1つのコピーが存在する。現在のメカニズムは、境界情報をポインタにパックするが、一部の実施形態は、境界情報を割り当てとともにメモリスロットに入れる。境界情報をメタデータの一部として割り当てとともにメモリスロットに記憶することにより、ポインタを拡張したり、境界情報がポインタ自体に記憶される場合に境界情報を複数コピーしたりする必要がなくなるので有利である。後者では、不利なことに、拡張されたポインタをもたらし、ポインタを記憶するために必要なメモリの量を増加させ、処理オーバーヘッドを増加させ、レジスタ状態を拡張する必要性が増加する。ポインタは、オブジェクトおよび関連付けられたメタデータを見つけることに関するオフセットのみを含む必要があるが、メタデータ自体を含む必要はなく、メタデータを含むポインタは、通常、能力と称されることに留意されたい。境界情報は、一実施形態によれば、スロットに記憶されるときに暗号変換を経る(暗号化される)ことができる。
引き続き図42を参照すると、一実施形態によれば、コンパートメント識別情報(コンパートメントID)情報は、暗号隔離されたコンパートメントにわたるゼロコピーデータ共有をサポートするために、メタデータの一部として追加され得る。
したがって、図42の実施形態では、隔離は、例えば、仮想マシン間の隔離、アプリケーション間の隔離、機能間の隔離、スレッド間の隔離、またはデータ構造(例えば、数バイト構造)間の隔離など、任意のレベルの粒度でサポートすることができる。コンパートメントIDは、各テナントがそれ自体のプライベートオブジェクトへのアクセスを有し、少なくとも一部のテナントが他のテナントによるプライベートオブジェクトへのアクセスを委任する能力を有するマルチテナント環境において有用である。プロセッサは、メタデータ4050内でアクセスされたコンパートメントIDを、コア474b/484b内に位置するものなどの専用レジスタ内の現在のコンパートメントID値と比較することができ、または汎用レジスタを介して比較することができるが、一部の実施形態によれば、専用レジスタが好ましい場合がある。専用レジスタは、ユーザモードなどからより容易にアクセス可能な汎用レジスタとは対照的に、オペレーティングシステム(OS)によって変更可能であることに加えて、所望によりプロセス/プログラム自体によって変更可能なモデル固有レジスタ(MSR)に類似していてもよい。MSRは通常、OSまたはVMMなどの特権ソフトウェアからのみアクセス可能であるが、一部の実施形態は、非特権ソフトウェアによってアクセス可能なコンパートメントIDを記憶するためのMSRタイプの専用レジスタ(複数可)を有することを企図している。一部の実施形態によれば、専用レジスタは、1または複数の専用レジスタを含み得る。ポインタによってアクセスされたコンパートメントIDが、専用レジスタ内の現在のコンパートメントID値に対してチェックされると、一致した場合、テナントはポインタを使用して、所与のコンパートメントIDを含むメタデータに関連付けられたオブジェクトにアクセスできる。一致しない場合、テナントは、メタデータに関連付けられたオブジェクトにアクセスすることができない。コンパートメントIDは、メモリスロット内のオブジェクトにアクセスするときに、それらのテナント間でオブジェクトの共有を可能にするために、種々のテナント間で共有され得る。コンパートメントIDを使用することで、マルチテナントの使用が可能となり、コアは、オブジェクトがテナント間で交換されるように、相互に信頼できないテナントによる同じオブジェクトへのアクセスを可能にすることができる。
一部の実施形態では、サイズフィールド4110に割り当てられたポインタビットについて競合が生じた場合、例えば、6ビットをサイズ指数に割り当てることができない場合、プロセッサは、最初に利用可能なサイズビットを使用し、その後、残りのビットについて異なる値を試みることによってスロットサイズについて残りのビットの値を推測し、推測された値がメタデータ4050中の値と一致するかどうかを判定することによって、失われたサイズビットの値を推測するように構成することができる。一致した場合、メタデータに対応するオブジェクトへのアクセスが許可される。オブジェクトへのポインタアクセスを得るためにサイズビットのうちの一部を推測することを伴うメカニズムでは、攻撃者がオブジェクトを偽造する可能性がある確率を増加させることで、セキュリティが低下する。
ここで図43を参照すると、一実施形態によれば、オブジェクトに対応するメタデータは、図42に示される線形メモリレイアウト(スロット)とは別のテーブルに記憶され得る。図43の示されたメタデータテーブル4300では、各オブジェクトのメタデータは、メモリスロット内のオブジェクトとインラインではなく、専用メタデータテーブル内に記憶され、テーブルフォーマット4302は、記憶されたメタデータが関係するオブジェクトの関連する粒度に基づく粒度4304に対応する。図43の実施形態で表される粒度4304は、16バイト、32バイト、64バイト、128バイト、256バイト、512バイト、1キロバイト、2キロバイト、および4キロバイトを含む2の累乗の粒度を含むが、実施形態はそのように限定されず、粒度変化の任意の特定の順序に関係なく粒度の異なるセットの提供をその範囲内に含む。図43の実施形態では、メタデータはキャッシュメモリスロット内のオブジェクトとインラインで記憶されないが、ポインタ自体がメタデータを搬送する代わりに、ポインタを依然として使用してメタデータを記憶する位置を参照することができ、このようにして、上述した図42の有利な実施形態と同様に、ポインタとともにメタデータをコピーする必要性を回避する。
前述のように、現在、ポインタが、8バイト粒度の境界を含む16バイト粒度のメタデータテーブル内のメタデータ(境界情報またはコンパートメントIDを含まない)にアクセスする場所を識別することを可能にするために、一部のメカニズムが提供されている。しかしながら、既存のメカニズムは、固定サイズのメタデータテーブル内に16バイトのグラニュールごとにメタデータを記憶することを必要としており、各グラニュールに関係するメタデータをルックアップするときに性能およびメモリ使用のオーバーヘッドにつながる。既存の手法は、パディングオブジェクトをページ粒度(例えば、4K)までパディングすることを必要とし、その結果、パディングに起因して大量のメモリが無駄になるか、または小さいデータグラニュールのためにメモリを複製し(例えば、データの16Bごとに複製)、その結果、複製されたメタデータに起因して大量のメモリが無駄になっている。これは、コンパートメントID(例えば、16ビットのメタデータ)を含むようにメタデータを拡張するときに特に深刻となる。
図43に示す実施形態では、固定サイズのグラニュールを提供するメタデータテーブルは、それぞれのメモリスロットサイズ/グラニュールに従って対応するテーブルフォーマットでメタデータを記憶するように構成された複数のメタデータテーブルを代わりに提供することによって有利に回避され、メタデータテーブルのフォーマットの基礎として使用される各スロットサイズは、メタデータに対応する割り当てが記憶されるメモリスロットサイズに対応する。
引き続き図43を参照すると、図42のLIMオプションと図43のメタデータテーブルオプションとの間の共通性は、メタデータテーブルオプションは、各スロットサイズまたは粒度に対応するビット数が粒度とともに増加または減少し得ることである。一部の実施形態によれば、メタデータの記憶フォーマットは、図42において例として示されるようなインラインメタデータのうちの一部の記憶フォーマットについての実施形態とは対照的に、メモリ内の中間点位置についての情報の複製を必ずしも含まなくてもよい。
一部の実施形態によれば、ポインタは、メタデータテーブルにおいてメタデータがアクセスされる所与のオブジェクトについての粒度を、例えば、そのサイズフィールド4110に同じものを提供することによって、またはその線形アドレス空間4130に範囲情報を提供することによって示すことができ、所与の範囲内の全てのオブジェクトは、所与の粒度に対応することが知られている(図41)。この範囲は、モデル固有レジスタ(MSR)などのレジスタに記憶されてもよい。かかる場合、プロセッサは、ポインタアドレス情報を使用して、MSRに記憶された対応する範囲を見つけて決定し、次いで、決定された範囲に基づいて、例えばテーブルを参照することによって、その範囲に対応するサイズ指数を決定することができる。サイズ指数(スロットサイズ)が決定されると、対応するメタデータテーブルが、決定されたスロットサイズとのその相関に基づいてメタデータのために選択され得る。
図12の実施形態においてメタデータテーブルが選択される方法にかかわらず、サイズフィールド内のビットによって、またはポインタの線形アドレスフィールド内で識別される範囲によって、図43の実施形態は、キャッシュライン内のオブジェクトを読み出すときに、プロセッサがそれらのオブジェクトに関するインラインメタデータをスキップする必要性を有利に回避するため、オブジェクトにアクセスするために使用されるアドレスは、それに応じて調整される必要がなく、それにより、プロセッサ動作を簡略化する。メタデータがキャッシュスロット内のオブジェクトとインラインで記憶される場合、プロセッサはメタデータに基づいてアクセス権をチェックする責任があるエンティティであるため、プロセッサは、プログラムがメタデータに直接アクセスすることを提示するために、プログラムがキャッシュライン内のオブジェクトにアクセスするための線形アドレスを生成するときにメタデータのサイズを追加することができる。図43の実施形態は、プロセッサがインラインまたは選択されたメタデータテーブルのうちの少なくとも1つのメタデータにアクセスするように構成され得るという点で、図42の実施形態とともに使用され得ることに留意されたい。選択可能なメタデータが図43の例に示されるように使用される場合、プロセッサは、メタデータがインラインで記憶される1つの動作の代わりに、オブジェクトインラインにアクセスすることと、選択されたメタデータテーブル内のメタデータにアクセスすることとの2つの動作を経る必要がある。一部の実施形態によれば、プロセッサは、両方のモダリティを同時に使用して機能し、一部のオブジェクトのメタデータインラインにアクセスする一方で、他のオブジェクトの選択されたメタデータテーブル内のメタデータにアクセスするように構成されてもよい。ポインタフォーマット自体は、メタデータを記憶するためにインラインメタデータフォーマットまたはメタデータテーブルフォーマットのいずれかを使用するときに同じであってもよいが、ポインタ内に符号化された情報は、それぞれについて異なってもよい。スロットサイズおよびオブジェクトサイズが、オブジェクトがページ境界をオーバーランし得るようなものであり得る場合、性能の低下を回避するために、インラインメタデータオプションと対照的に、メタデータテーブルオプションを使用することが有利であり得る。後者のシナリオにおける懸念は、メタデータを挿入することによって、別様でページに収まるはずのオブジェクトが、もはやページに収まらなくなる可能性があることである。
図43の実施形態は、インラインメタデータテーブルと同様にメモリ内のメタデータをレイアウトし、またはメモリの連続範囲内の各スロットサイズについてメタデータをグループ化するレイアウトを使用することができる。インラインメタデータテーブルを使用して記憶され得る任意の種類のメタデータ、例えば、タグ、境界、コンパートメントID、キーID、トウィーク、カウンタ、MAC、ECCなどが、代替として、図43の実施形態に記憶され得る。
図40~42のインラインメタデータオプションは、メタデータテーブルの場合のような2つの別個のメモリ動作ではなく、単一のメモリ動作において、メタデータが関係するオブジェクトとともに、プロセッサによって有利にアクセスされてもよく、このようにして、より良好な性能をもたらす。加えて、インラインメタデータ手法は、オブジェクトおよび対応するメタデータをプロセッサに実質的に同時に利用可能にし、それにより、(オブジェクトにアクセスする前にオブジェクトに対してアクセス制御を実行するために必要な情報の全てを有していないことによって)特にプロセッサが投機攻撃を受ける可能性がある場合、オブジェクトおよびメタデータが異なる時間にプロセッサに到着することから生じる可能性があるセキュリティ問題を軽減する。図40~42の実施形態に関連してインライン記憶について上述した任意のメタデータは、図43の実施形態に関連して説明したようなメタデータテーブルフォーマットで記憶することができる。加えて、実施形態によるメタデータテーブルは、任意のサイズのメタデータをサポートすることができる。
一部の実施形態によれば、インラインメタデータに関連する実施形態が使用されるか、またはメタデータテーブルに関連する実施形態が使用されるかにかかわらず、隠しインラインメタデータがオブジェクトに使用されてもよく、オブジェクトに関連するメタデータは全てのキャッシュラインで繰り返される。隠しインラインメタデータは、オブジェクトが単一のキャッシュラインによって収容されるには大きすぎる(例えば、複数のページに及ぶ)場合に特に有用であり得る。かかる場合、プロセッサは、例として、タグチェックまたは完全性チェックを通してなど、ローカルメタデータを使用して、オブジェクトに対してアクセス制御を実行することができ、ローカルアクセス制御が一致をもたらさない場合、プロセッサは、次いで、中間点にアクセスし、オブジェクトの境界を見つけることができる。上記の2ステップ動作は、非常に大きいオブジェクト(例えば、メモリの1ページを超えるオブジェクト)がキャッシュライン上に記憶される稀な場合に起こり得る。
ここで図44を参照すると、参照されているオブジェクトへのポインタにメタデータを記憶することなくメタデータにアクセスするための代替的な実施形態が示されている。図44の実施形態では、メモリアロケータは、同じサイズの割り当て4402を対応するページにパックし、代わりに、アクセスされる各ページ4400について、ページの最初に均一割り当てサイズ4404を示し、所望により、境界情報、コンパートメントID4406のうちの少なくとも1つを含むメタデータ4406をページの最初に良好な局所性で緊密にパックすることによって、割り当てに関係する境界を記憶するオーバーヘッドを回避することができる。図44の実施形態は、オブジェクトを搬送するキャッシュラインにおいて直接インラインではないものの、メタデータを関連するオブジェクトにより近い状態に保持することによって、図40~42の線形インラインメタデータと図43のメタデータテーブルとの間のハイブリッドを提供する。図44の実施形態では、全てのメタデータは、それが属するオブジェクトと同じページ上にある。図44の実施形態は、メタデータがオブジェクトを記憶するページとは異なるページ上にある可能性が高く、対応するメタデータに対してオブジェクトのアドレス変換をルックアップするために複数のページブロックが必要とされる可能性があり、複数のトランスレーションルックアサイドバッファ(TLB)を必要とする可能性がある別個のテーブルにメタデータを有することに関連するオーバーヘッドを回避する。図44の実施形態は、オブジェクトおよびそのメタデータを位置特定するために単一のTLBエントリが必要とされ得るメカニズムを有利に提供するが、これら2つは、最終的には異なるキャッシュライン上に記憶され得る。図44のフォーマットを達成するために、メモリアロケータは、ページのサイズを取得し、それからメタデータのサイズを減算し、得られた値を、そのページ内に収まり得る均一なサイズの割り当ての数で除算することができる。図44の実施形態によれば、ページ内の割り当ては均一なサイズを有するので、境界情報はメタデータにおいて必要とされず、サイズ情報はメタデータおよび対応する割り当てにアクセスするためのポインタにおいて必要とされない。しかしながら、インラインメタデータテーブルを使用して記憶され得る任意の種類のメタデータ、例えば、タグ、境界、コンパートメントID、キーID、トウィーク、カウンタ、MAC、ECCなどが、図44の実施形態において代替的に記憶され得る。図44の実施形態の利点は、メモリページの始めに均一な割り当てサイズを代わりに示すことによって、さらに、タグが使用される場合、ページの始めにタグの緊密なパッキングを可能にすることによって、境界を記憶するオーバーヘッドを回避することである。
図45は、一実施形態によるプロセス4500のフロー図である。動作4502において、プロセス4500は、メモリ割り当て要求に応答して、メモリ回路内のオブジェクトのためのメモリ割り当てを取得することを含むメモリ割り当て動作を実行することと、メモリ割り当てのための境界情報およびオブジェクトにアクセスすることが許可されたコンパートメントを識別するコンパートメント識別情報(ID)のうちの少なくとも1つを含む第1のメタデータをメモリ割り当てに割り振ることと、メモリ回路のメモリ位置にオブジェクトを記憶することと、メモリ位置またはメモリ位置とは別個のテーブルのうちの1つにメタデータを記憶することと、を含む。動作4504において、プロセス4500は、プログラムに対応するメモリ動作要求に応答して、メモリ回路内の第1のメタデータの位置を識別するためのデータを含むポインタを使用して第1のメタデータにアクセスすることであって、第1のメタデータは、プログラムから隠されている、ことを含む。動作4506において、プロセス4500は、第1のメタデータと第2のメタデータとの間の一致の判定に応答して、メモリ動作要求に対応するメモリ動作を実行することを含む。
E.暗号キャッシュを使用した暗号コンピューティングレイテンシ低減
このセクションにおける実施形態は、暗号アドレス化指定のための最適化を提供する。
このセクションで言及されるように、「キャッシュ」は、当業者によって理解されるようなキャッシュメモリ、またはメモリ階層内の任意の迅速にアクセス可能なメモリ要素を指し得る。
本明細書で言及されるように、コンテンツアドレス指定可能メモリ(CAM)回路は、暗号化された線形アドレス-線形アドレスのペアを記憶する文脈で言及されるが、実施形態は、ペアを記憶するためのCAM回路の提供に限定されない。したがって、相関情報のルックアップテーブルを記憶するように適合された任意のメモリ回路は、実施形態の範囲内である。
本明細書で言及されるように、トランスレーションルックアサイドバッファ(TLB)は、メモリ位置にアクセスするのにかかる時間を短縮するために使用されるメモリレジスタまたはキャッシュである。これは通常、チップのメモリ管理ユニット(MMU)の一部である。TLBは、線形アドレスから物理アドレスへの最近の変換を記憶し、アドレス変換キャッシュと称することができる。TLBの例は、図3Bのメモリユニット370において、データTLBユニット372の形態で与えられる。
全ての算術演算および論理演算のためのオペランドは、レジスタに含まれ得る。メインメモリ内のデータを操作するために、データは最初にレジスタにコピーされる。ロード動作は、例えばデータがキャッシュにコピーされる前に、データをメインメモリからレジスタまたはロードバッファにコピーする。ストアオペレーションは、データをレジスタまたはストアバッファからメインメモリに、例えばキャッシュからコピーする。ロードバッファおよびストアバッファは、このセクションでは上記の文脈で言及されている。
図46および47は、それぞれ、第1および第2の実施形態によるフローの図を提供する。図46および47は、連続的な動作に関してフローを示しているが、実施形態は、それらの範囲内に、実行可能な範囲で互いに並列な動作の実行を含む。
一部の実施形態は、近い将来に同様のポインタの解読を回避するために、暗号文-平文ペアの形態などで、以前に解読されたポインタを記憶するために、専用キャッシュなどの専用内容アドレス指定可能メモリ回路(CAM回路)を提供する。一部の実施形態は、暗号コンピューティング環境におけるアクセス待ち時間を有利に低減する。一部の実施形態は、以前に解読されたポインタを記憶するために専用ハードウェアの形態でマイクロアーキテクチャ機能を提供し、この専用ハードウェアは、図4のプロセッサ470/480のキャッシュ471/481などのプロセッサキャッシュ、および/または図6のプロセッサ602の命令キャッシュ682およびデータキャッシュ684などの命令キャッシュおよびデータキャッシュとは異なる。図3Bのメモリアクセスユニット364などのメモリアクセスユニット内のアドレス生成ユニットは、最近復号されたポインタに対してCAM(またはルックアップテーブル)を実装して、近い将来における同じ符号化ポインタへのアクセスレイテンシを短縮することができ、すなわち、プロセッサのキャッシュ内でアクセスされるデータに対して動作する将来の命令に対してCAMを実装することができる。このセクションで説明されるような改善は、例えば、図1の暗号アドレス化指定層110および図3Bのメモリアクセスユニット364において実装され得る。
本明細書の一部の実施形態によるCAM回路は、例えば、図6の補助ハードウェア(HW)メモリ696と同様に実装されてもよい。本明細書では「専用」CAM回路に言及しているものの、このセクションの実施形態は、ポインタアドレスに対応する暗号文-平文ペアを記憶することができるが、加えて、キーまたはトウィークなどの他のデータを記憶するために使用され得る、プロセッサキャッシュとは別個のCAM回路も包含し得る。
実施形態は、例えば、「暗号アドレス化指定」および「暗号化ベースアドレス(EBA)フォーマットの暗号符号化されたポインタ」と題されたセクションおよび図8のフロー図の文脈で上述されたものなどの、暗号符号化されたポインタの使用に関する。一部の実施形態は、プロセッサ470/480のキャッシュ471/481内のメモリコンテンツにアクセスする状況において、図3Bのコア390、または図4のコンピューティングシステム400のコア474/484のいずれかなどのハードウェアによって実装され得る。図8のソフトウェアユニット810およびハードウェア820のうちの一部は、一部の実施形態を実装するために使用され得る。
実施形態は、クライアントまたはサーバのCPUまたはプロセッサにおいて使用され得る。暗号キャッシュは、CPU/プロセッサ内に、具体的にはコアの一部として実装され、内部信号はプロセッサの外部からアクセス可能ではない。しかしながら、データ読み出しレイテンシに対する暗号キャッシュの影響を間接的に測定することができる。
一部の実施形態では、非暗号化の(生の)線形アドレス(LA)への符号化線形アドレス(eLA)の解読は、コアがそのキャッシュ内のデータにアクセスする前にバイパスされてもよく、加えて、コアは、解読の前、解読なし、または解読と同時に、データに対する動作(すなわち、データに対する命令の実行)を開始することが可能であってもよい。コアは、(eLAに対応する暗号文と、LAに対応する平文とを有する)ポインタeLAのLAへの以前の解読に対応する暗号文-平文ペアがCAM回路内に存在するかどうかを判定することによって、暗号符号化されたポインタからのeLAからLAへの解読を待たずに、キャッシュデータへの容易なアクセスを取得することが可能であり得る。以前の解読は、キャッシュへの以前のアクセス要求からのeLAがコアによってLAに解読され、CAM回路に記憶されたときに生じた可能性がある。
一部の実施形態によれば、コアは、暗号符号化されたポインタアドレスがLAに復号されるたびに、または以下でさらに説明するように、現在のポインタのサイズフィールドなどのポインタパラメータに基づいて選択的に、CAM回路内に以前に記憶され、現在のeLA(すなわち、現在のポインタからのeLA)に対応するeLA-LAペアを探すことができる。
CAM回路内に、ペアのeLA(以下、eLACAM)が現在のeLAと一致するeLA-LAペアが存在する場合、コアは、eLA-LAペア(以下、LACAM)からのLAが使用されるべき正しいLAであると仮定し、LACAMの変換から物理アドレス(PA)を取得することができ、変換は、例えばTLBによって実行され、コアによって取得され、このようにして取得されたPAに対応するメモリ位置でプロセッサデータキャッシュ内のデータにアクセスすることができる。上記の動作は、eLAからLAへの解読およびLAからPAへの変換の通常のパイプラインの代わりに、またはそれと同時に行われ得る。
本明細書で使用される場合、eLACAMと現在のeLAとの間の「一致」は、eLACAMと現在のeLAと、または同じもしくは類似のもの、例えば互いに比較してわずかに異なるオフセットを有するが、それぞれの暗号化部分が同じであることを意味することができる。
このセクションにおける実施形態の利点は、データアクセスレイテンシを最適化することによる暗号メモリアドレス指定における性能改善である。eLAからLAへの解読は、典型的には、複数のサイクルを要し得るので、キャッシュデータ上で命令を迅速に実行することができるようにするためにそれをバイパスすることは、メモリアクセスのレイテンシを低減することに関して著しい利点をもたらすことができる。複数のサイクルは、eLAの一致およびその中に記憶される対応するeLA-LAペアを探すために、CAM回路内で暗号キャッシュテーブルルックアップを行う単一動作によって置換されてもよい。
このセクションにおける一部の実施形態によれば、CAM回路は、コアがCAM回路に記憶することによってeLA-LAペアがポピュレートされてもよく、ポインタから対応するLAを取得するためにeLAを解読した後、解読の結果得られたeLA-LAペアをポピュレートすることができる。コアは、解読ごとに、またはポインタサイズなどのポインタパラメータに基づいて選択的に、eLA-LAペアを記憶することができる。
CAM回路の記憶位置は、CAM回路の空間制約に基づいて、かつ時間の関数として上書きすることができる。1または複数のeLA-LAペアがCAM回路に記憶されると、コアは、前述したように、eLACAMが現在のeLAと一致するかどうかを判定するためにCAM回路に最初にアクセスすることによって、次の暗号符号化されたポインタを復号するときにこれを利用することができる。
CAM回路は、プロセッサまたはCPUのセキュリティ境界内に存在することになるので、セキュリティ違反の可能性を低減して非暗号化アドレスをそこに記憶することができる。この意味で、非暗号化LAのCAM回路ストレージは、非暗号化PAのTLBのストレージに類似している。したがって、一部の実施形態によれば、CAM回路は、データキャッシュおよび命令キャッシュなどのコアおよびキャッシュと同じ物理チップ上に配置することができる。一部の実施形態によれば、セキュリティ境界は、CAM回路、コア、およびキャッシュが同じセキュリティ境界内に存在する限り、特に、チップ上の他の回路が暗号文メッセージを介してキャッシュに通信可能に接続されない限り、物理チップの範囲より小さくてもよい。
一部の実施形態によれば、上述したように、コアは、全ての解読されたeLA-LAペアをCAM回路に記憶することができる。一部の他の実施形態によれば、コアは、例えばポインタパラメータに基づいて、CAM回路に記憶するためのeLA-LAペアを選択することができる。全ての解読されたeLA-LAが記憶されている場合、一部のeLA-LAペアのみがCAM回路に記憶されるシナリオと比較して、新しいエントリを収容するために、CAM回路の既存のエントリのより多くのオーバーライドが存在する。
記憶すべきeLA-LAペアの選択がある場合、コアは、CAM回路に移行されるeLA-LAペアを選択するためのアルゴリズムを実装することができる。アルゴリズムは、例えば、閾値より大きいポインタ内の非暗号化サイズフィールドに関連付けられたeLA-LAペアを選択してもよい。より大きいeLAサイズは、メモリ内のポインタによって指し示されるより大きいデータオブジェクトと相関し、したがって、ポインタが再使用されるより大きい確率と相関するので、典型的には、同じeLAを有する将来のアクセス要求のより大きい確率と相関する。概して、アルゴリズムは、将来の命令による将来のアクセス要求の確率に基づいて、eLA-LAペアを予測的に選択することができる。
一部の実施形態によれば、CAM回路は、スタックアクセスおよびヒープアクセスの両方のためのeLA-LAペアを記憶することができる。代替の実施形態によれば、スタックアクセスおよびヒープアクセスのためにそれぞれ別個のCAM回路が存在してもよい。
このセクションにおける実施形態の特徴は、eLAおよびその解読されたLAがCAM回路に記憶されるだけでなく、それらの相関も同様に記憶されること(したがって、「ペア」が記憶されるという言及)であり、このようにして、CAM回路は、ルックアップテーブルの機能を有する。一部の実施形態によれば、解読プロセスは、CAM回路におけるeLA-LAペアの記憶と同時に起こり得る。eLA-LAペアの記憶は、例えば、所与の数のポインタ/命令に対して記憶され、その後上書きされ得るという点で、一時的であってもよい。
したがって、ポインタを検出した後、コアは、CAM回路にアクセスして、検出されたポインタ内のeLAと、前のポインタの文脈においてポインタ内に記憶されたeLACAMとの間の相関を決定することができる。したがって、一部の実施形態によれば、CAM回路内のeLA-LAペアの記憶は、その生成および記憶をもたらした命令よりも長く存続する。このようにして、次の命令は、アクセス待ち時間を低減するために同じことを利用することができる。
ここで図46を参照すると、一部の実施形態によるフローオプションのフロー図が示されている。最初に、破線で示された図46の経路(1)~(6)は、示された実施形態の変形形態による所望による経路であり、後でさらに詳細に説明されることに留意されたい。加えて、図46のフロー、判定、およびアクションは全て、それぞれに関してこのセクションで説明されるオプションおよび変形形態に従うものであり、このセクションの可能な実施形態に関して限定するものとして解釈されることを意図していない。
一実施形態によれば、動作4602において、コアは、暗号符号化されたポインタを検出することができる。動作4604において、コアは、ポインタに関連付けられたeLAを決定し得る。その後、4606において、コアは、前のポインタからの少なくとも1つのeLA-LAペアを記憶するCAM回路にアクセスすることができる。動作4608において、コアは、ペア(eLACAM)内のeLAがポインタに関連付けられたeLAと一致するeLA-LAペアがCAM回路内に存在するかどうかを判定することができる。
一致した場合、コアは、動作4610において、eLACAMと相関するペア内のLA(LACAM)を決定し、4612において、LACAMに関連付けられたPA(PACAM)を取得することができる。コアは、例えば、コアによって維持されるキャッシュに関連付けられたTLBからPACAMを取得することができる。動作4614において、コアは、PACAMに対応するメモリ位置におけるデータにアクセスし、データに対して動作する、すなわち、データに対して命令を実行することができる。動作4616において、コアは、命令の実行の完了後に、4614においてアクセスされたデータをメインメモリにリタイアさせるか、または別様でコアの実行パイプラインから破棄させてもよい。
一致しない場合、コアは、動作4618において、ポインタからのeLAを解読し、動作4618と同時に、またはその後に、解読から生じるeLA-LAペアをCAM回路に記憶することができる。コアは、動作4622において、解読から取得されたLAに関連付けられたPAを取得することができる。コアは、例えば、コアによって維持されるキャッシュに関連付けられたTLBからPAを取得してもよい。動作4624において、コアは、PAに対応するメモリ位置におけるデータにアクセスし、データに対して動作する、すなわち、データに対して命令を実行することができる。動作4616において、コアは、命令の実行の完了後に、4624においてアクセスされたデータをメインメモリにリタイアさせるか、または別様でコアの実行パイプラインから破棄させてもよい。
図46の所望による実施形態によれば、CAM回路にアクセスする動作4606、およびポインタeLAとeLACAMとの間に一致が存在するかどうかを判定する動作4608は、ポインタeLAを解読してLAを取得する動作4618(対応するeLA-LAペアをCAM回路に記憶する動作4620とともに)、またはLAから変換されたPAを取得する動作4622のうちの1または複数と同時に起こり得る。この所望による実施形態は、破線で示される図46の追加のフロー経路(1)~(6)を含む。
この所望による実施形態によれば、eLA-eLACAMの一致が存在するかどうかを判定するためにコアがCAM回路にアクセスしているとき、コアは、フロー経路(1)を使用して、4618においてポインタeLAを解読してLAを取得し、4620において、このようにして取得されたeLA-LAペアをCAM回路に記憶することもできる。コアはまた、4622において、解読から取得されたLAからPAを取得し得る。コアは、動作4618、解読動作、および/または動作4622、PAを取得する動作中の任意の時間に、それぞれフロー経路(2)および(3)を経由して、4608において、eLA-eLACAMの一致が存在するかどうかを判定してもよい。
フロー経路(1)および(2)/(3)に基づいて一致が存在しない場合、コアは、それぞれ経路(5)/(6)において継続し、4622においてLAからPAを取得し、PAのメモリ位置におけるデータにアクセスし、4624においてデータ上で動作し、次いで、命令の実行の終了時に4616においてデータをリタイアするか、またはコアパイプラインからデータを排除することができる。
一致が存在する場合、フロー経路(1)および(2)/(3)に基づいて、コアは、経路(4)に進み、動作4630において、動作4618および/または4622に関連する任意のデータを解読パイプラインから排除し、上記でさらに詳細に説明したように、動作4610~4616に進むことができる。
このセクションの別の実施形態によれば、CAM回路の使用の代わりにおよび/またはそれに加えて、eLAからLAへの解読および/またはLAからPAへの変換は、キャッシュデータがコアに返される前に別の方法でバイパスされてもよい。CAM回路に依存しないこの第2の実施形態によれば、コアは、PAを使用せずに、ポインタeLAまたは関連するLAを直接使用して、キャッシュ内のメモリコンテンツにアクセスすることができる。この第2の実施形態は、TLBによるTLBルックアップ動作、およびPAを取得するための関連する動作を節約することができる。この実施形態によれば、コアは、PAを待たずにロードバッファデータ経路およびストアバッファデータ経路への直接アクセスを開始することができ、eLAが、LAとは対照的にキャッシュに直接アクセスするために使用される場合、コアは、返されたデータに対する命令の実行を開始する前に、上述のようにeLAからLAへの解読を待つことをさらにバイパスすることができる。
この第2の実施形態によれば、キャッシュは、eLAまたはLAによって直接線形にアドレス指定可能であってもよく、すなわち、キャッシュは、eLAおよび/またはLAアドレス指定可能である(eLA/LA直接ルックアップのために設計される)ように構成されてもよい。コアは、解読および/またはLAからPAへの変換の直前に、キャッシュからデータを取得することができる。
第2の実施形態の以下の説明は、キャッシュのeLAアドレス指定を参照するが、実施形態は、その範囲内に、eLAからLAへの解読、およびキャッシュを直接アドレス指定するためのLAの使用を包含する。
この第2の実施形態によれば、キャッシュ自体を使用して、コアがeLAを直接使用してキャッシュデータにアクセスするのと並行して、PAへのeLAの変換を取得することができる。このようにして、キャッシュは、コアが返されたデータに対して命令の実行を開始するために、データをコアに即座に戻すことができ、一方で、並行して、コアは、通常のeLA-LA解読動作および通常の動作を並行して行う。
かかるシナリオでは、正しいまたは意図されたデータ(意図されたPAを取得するためのeLAからLAへの解読および後続のLAからPAへの変換から生じたであろうPAに対応するデータ)を取得する確率は、比較的高く(例えば、95%~99%)、したがって、コアは、eLAに基づいて返されたデータが意図されたデータであると推測することができ、このようにして、メモリアクセスレイテンシは、eLAアドレス指定可能キャッシュによって大幅に低減することができる。しかしながら、特定の例では、衝突が存在する場合があり、すなわち、キャッシュにアクセスするためにeLAを使用してコアによってアクセスされるデータが、意図されたデータではない場合があり、したがって、意図されたPAに対応しない場合があるシナリオがあり得る。したがって、一部の実施形態は、eLAを直接使用してキャッシュにアクセスするだけでなく、アクセスされたデータが意図されたデータであるかどうかを検証するメカニズムを提供する。一部の実施形態はまた、キャッシュラインへのアクセスを進める前に、アクセスされているキャッシュラインに関連付けられたeLAのアドレス空間識別子(ASID)が、アクセスを要求する命令のASIDと一致することを検証してもよい。
第2の実施形態は、キャッシュが共有リソースであると仮定すると、1つのeLAの異なるPAへの複数のマッピングが存在し得るという前提に部分的に基づく。複数のPAは、異なるプロセスを同じeLAにマッピングし得るプロセスにわたって使用されてもよく、それは、次いで、eLAアドレス指定可能キャッシュ内の衝突をもたらし得る。キャッシュ内のeLAデータルックアップは、所与の命令に対して返されたデータをもたらし得るが、返されたデータは、現在検出されたポインタに対応する命令に対応せず、別の命令に完全に対応する可能性があり、したがって、誤ったデータである場合がある。それでも、多くの時間、アプリケーションが現在使用しているeLAは、意図されたデータをキャッシュから直接もたらす可能性が非常に高く、したがって本明細書で言及される最適化の利点をもたらす可能性が非常に高い。
この第2の実施形態による検証メカニズムは、コアがeLAを直接使用してキャッシュにアクセスし、返されたデータに対して動作するのと並行して、コアがさらにeLAをLAに解読し、LAの変換からPAを取得し(例えばTLBによって)、このように取得されたPAを返されたデータに対応するPAと比較して、eLAルックアップから返されたデータが意図されたデータに対応することを保証することを含み得る。
LAの変換から取得されたPA、および返されたデータに対応するPAのルックアップが不一致をもたらした場合、コアは、返されたデータが意図されたデータであるという推測を停止し、返されたデータをその実行パイプラインから破棄することができる。
TLBプロセスからのPAの戻り、ならびに並列eLAベースのキャッシュアクセスは、コアが、操作されているデータが意図されたデータであることを確認することを可能にし、コアがより高い命令に進み、データを確認することを可能にし得る。
不一致の場合、コアは、「パイプラインヌーク(pipeline nuke)」を実行して、そのレジスタの全て、および返されたデータに関連するそのパイプライン内の全ての変更を、そのデータが返されなかったかのように戻すことができる。したがって、eLAアドレス指定可能キャッシュは、返されたデータのPAが意図されたデータのPAに対応するかどうかに関する検証が行われるまで、コアメモリアクセス動作が推測ベースで進行する可能性を提供する。この第2の実施形態によれば、返されたデータがメインメモリに戻される前に検証動作が行われる限り、パイプラインヌーク動作を実行することができる。返されたデータがプロセッサパイプライン内にある限り、コアは常に、検証動作から生じる不一致に応答して、データに対する動作を巻き戻しまたは逆転することができる。
パイプラインヌークの後、返されたデータが意図されたデータではないとコアが判定し、パイプラインヌークによって、返されたデータが決して返されなかったかのようにその古いレジスタを復元すると、キャッシュが誤ったデータを返したので(キャッシュミス)、コアは、意図されたデータにアクセスするためにメインメモリにアクセス要求を発行することができる。
実施形態の1つの特徴は、eLAが、キャッシュによって返され、eLAによって参照されるデータを解読するために搬送される必要があり得るため、コアが、そのレジスタにeLAの値を記憶し得ることであり、ここで、eLAは、データに暗号的にバインドされていた。コアは、メインメモリまたは階層内のより高いレベルのキャッシュから入ってくるデータを適切に解読して拡散するために、eLAの内容または値を知る必要がある。
ここで図47を参照すると、一部の実施形態によるフローオプションのフロー図が示されている。図47のフロー、判定、およびアクションは全て、それぞれに関してこのセクションで説明されるオプションおよび変形形態に従うものであり、このセクションの可能な実施形態に関して限定するものとして解釈されることを意図していない。
一実施形態によれば、動作4702において、コアは、暗号符号化されたポインタを検出することができる。動作4704において、コアは、ポインタに関連付けられたeLAを決定し得る。その後、4706において、コアは、eLAに対応するメモリ位置におけるデータにアクセスすることができ(このようにして、「返されたデータ」を取得することができ)、返されたデータに対して動作することができる。動作4708において、コアは、返されたデータが意図されたデータに対応するかどうかを判定することができる(検証動作)。検証動作は、ポインタeLAに対応するLAの変換から取得されたPAと、返されたデータに対応するPAとの間の比較を伴い得る。
一致した場合、動作4712において、コアは、命令の実行の完了後に、4706においてアクセスされた返されたデータをメインメモリにリタイアさせるか、または別様でコアの実行パイプラインから破棄させ得る。
不一致の場合、コアは、動作4710において、パイプライン(複数可)をヌーク(nuke)することができ、すなわち、コアは、「パイプラインヌーク」を実行して、そのレジスタの全て、および返されたデータに関連するそのパイプライン内の全ての変更を、そのデータが返されなかったかのように戻し、命令の実行を停止することができる。その後、動作4730において、コアは、メモリから意図されたデータを取得するためにメインメモリにアクセス要求を発行することができる。
動作4706および4708と同時に、コアは、動作4714において、ポインタからeLAを解読することができる。コアは、動作4718において、解読から取得されたLAに関連付けられたPAを取得することができる。コアは、例えば、コアによって維持されるキャッシュに関連付けられたTLBからPAを取得してもよい。コアは、上述したように、動作4718から動作4708および4710または4712のフローに移動することができる。
代替的な実施形態によれば、コアは、ポインタeLAに対応するキャッシュにデータがない場合にのみ、動作4714および4718を実行することができ、その場合、フローは、4708における検証動作なしに、動作4706から動作4712に直接移動する。かかる場合、少数のケースでは、コアは、検証なしに誤ったデータに対して動作することになる。
一部の実施形態によると、以下に説明されるように最適化が提供され得る。
1つのオプションでは、コアは、有効な暗号符号化されたポインタフォーマットに一致するキャッシュから読み出されたデータを推測的に復号することができる。データが正常に復号された場合、コアは、変換をそのキャッシュに記憶させることができる。上記の1つの特徴によれば、レジスタは、現在の値が、キャッシュ内で利用可能な有効な変換を有する有効なCCポインタであるかどうかを示す「有効な暗号コンピューティング(CC)ポインタ」ビットを含み得る。次いで、コアは、許容された範囲内でポインタ算術上の「有効CCポインタ」ビットを伝搬することができる。関連する特徴によれば、レジスタは、レジスタ値が有効なCCポインタを示す場合、変換キャッシュエントリを直接指すためのインデックスを含み得る。メモリアクセス時に、コアは、(レジスタからの関連するオフセットと組み合わされた)暗号キャッシュからの復号されたバージョンを有利に使用することができる。
F.ポリシーおよびセキュリティメタデータ認識キャッシュコヒーレンシ
キャッシュとしても知られているメモリデータユニットには注釈が付けられる。メモリが階層的に編成され、例えばL1キャッシュなどのキャッシュがメモリ階層のうちのアクセスが最も速い部分を表すアーキテクチャでは、技術的問題が生じる。一部の現在のコンピューティングアーキテクチャは、別個のコンピューティングコアおよび種々の関連付けられたキャッシュを含み、同じキャッシュが別個のコアによってアクセス可能であり得る。メモリ階層は、部分にアクセスすることが徐々に大きくなり、またはより困難になり、メインメモリで終わることを含み得る。メモリ階層アーキテクチャは、少なくともスケーラビリティおよび使用のために有用である。
本明細書で対処される技術的問題は、コアに関連付けられた専用キャッシュ内で発生する変更が既知になり、他のコアにシームレスに伝播することを保証する方法である。コアは、メモリコンテンツ(すなわち、データ)を変更している可能性があり、別のコアは、別のキャッシュライン内のメモリコンテンツの別のバージョンを変更している可能性がある。最後に、1つのコアが他のコアによって行われた変更を無効化する場合、キャッシュライン間に一貫性またはコヒーレンシがなく、それらの種々のキャッシュ間に記憶されたメモリコンテンツに関して競合が生じる。後者は、1つのキャッシュ内の一部のデータ/メモリコンテンツ変更が他のキャッシュにシームレスに伝搬しない場合に起こり得る。
実施形態の目的は、同じデータまたはメモリコンテンツに対して独立して行われた変更間の一貫性およびコヒーレンシを保証することである。
現在のキャッシュコヒーレンシプロトコルが存在しており、その目的は、キャッシュ内のデータに対して行われた全ての変更が、コアが種々のキャッシュ内の変更を認識するように行われることを保証することであり、それにより、1つのコアが同じデータに関して別のコアによって行われた変更をオーバーライドするかどうかに関する選択が可能である。最もよく知られているかかるプロトコルの1つは、MESIであり、これは、修正(M)、排他的(E)、共有(S)、および無効(I)を表す。MESIの現行バージョンでは、修正、排他的、共有、および無効は以下の意味を有する。
1)修正(M)は、現在のキャッシュ内にのみ存在し、ダーティである、すなわち、メインメモリ内の値から修正されているキャッシュラインデータを指す。キャッシュは、(もはや有効でない)メインメモリ状態の任意の他の読み出しが許可される前に、将来のある時点でダーティデータをメインメモリに書き戻すように要求される。
2)排他的(E)は、現在の専用キャッシュ内にのみ存在し、クリーンである、すなわち、メインメモリに一致するキャッシュラインを指す。読み出し要求に応答していつでも共有状態に変更されてもよく、代替的に、書き込まれるときに修正状態に変更されてもよい。
3)共有(S)は、他のキャッシュに記憶することができ、クリーンである、すなわち、メインメモリに一致するキャッシュラインを指す(共有状態では、誰もメモリコンテンツの修正を開始しておらず、修正が1つのコアによって行われる場合、他の全てのコアに通知され、それらの内容をダーティとして無効化することができる)。ラインはいつでも破棄され得る(無効状態に変更され得る)。
4)無効(I)は、無効、すなわち未使用のキャッシュラインを示す。
MESIの背後にある1つの考えは、キャッシュラインの強制が4つの状態、すなわち、排他的、修正、共有および無効だけであることを可能にすることである。MESIによれば、通信はスヌーピングを含むことができ、ハードウェア実装形態に関して、コアはスヌーピングエージェントを有することができ、スヌーピングエージェントは、1つのオプションでは、他のコアによる読み出し要求または書き込み要求を傍受し、アクセスされているキャッシュを維持しているコアが修正されたメモリコンテンツを他のコアが読み出しを試みているかどうかを判定し、修正されたメモリコンテンツがメインメモリに伝搬して戻ることを保証し、読み出し要求を停止するための応答を送信させることができる。キャッシュメモリコンテンツを修正したコアは、修正されたコンテンツをメインメモリに書き戻すことができ、他のコアは、最新のコンテンツにアクセスするために別の読み出し要求を再び発行する。
このセクションで使用される「書き戻し」は、コアなどのコンピューティング要素がメインメモリ内のメモリコンテンツのみを更新する手順を指し、更新動作では、メインメモリ内に存在するメモリコンテンツが、書き戻しを実行するコアのローカルコピーのメモリコンテンツによって置き換えられる。書き戻しプロセスの一部として、所望により、セキュリティメタデータが追加の暗号化と結び付けられている場合、コアによって書き戻しされているメモリコンテンツは、メインメモリに逆拡散される可能性があり、これは、書き戻しされるときに暗号化され得ることを意味する。セキュリティメタデータは、例えば、キーセレクタまたはトウィークとして使用されてもよい。特定のキーのためのセレクタは、コンテンツのさらなる処理(拡散を通してなど)のために使用されてもよく、セレクタは、キャッシュラインに関連付けられた物理アドレス内の数ビットの形態で使用されて、キャッシュ内のあるコンテンツ(あるバイトなど)を拡散する方法を伝えることができる。
実施形態によって対処される問題は、キャッシュコヒーレンシのコンテキストにおけるキャッシュライン内のセキュリティメタデータの使用に関する。キャッシュラインは、セキュリティメタデータでアノテートされ得る。セキュリティメタデータは、4~5ビットなどの数ビットであってよい。セキュリティメタデータサイズを暗号コンピューティングのフレームワーク全体と結び付けるために、セキュリティメタデータのビット数は、拡散が実装される関連キャッシュライン内のメモリ割り当てのサイズフィールドと相関してもよい。あるビットベクトルを介したセットビットは、どのグラニュールが拡散の一部として変更されるべきかをさらに示すことができる。
キャッシュラインがセキュリティメタデータで注釈付けされる場合、キャッシュコヒーレンシは特別な問題を引き起こす。例えば、コアが読み出しまたは書き込みを開始する場合、コンテンツに正常にアクセスできるようにするために、アドレス指定されるメモリコンテンツのアドレスだけでなく、キャッシュライン内のコンテンツに関連付けられたセキュリティメタデータも考慮する必要がある。一部の実施形態は、アクセス要求(すなわち、読み出し要求または書き込み要求)がメモリコンテンツに対するものであるが、読み出し要求が、アクセスしようとするキャッシュラインが注釈付けされるセキュリティメタデータとは異なるセキュリティメタデータ(暗号色、または上記のようなキーセレクタ、またはトウィーク値としても知られる)を含む状況に対処する。
このセクションにおける一部の実施形態は、キャッシュライン内のメモリコンテンツに注釈を付けるために使用されるセキュリティメタデータと一致しないセキュリティメタデータを使用しながら、メモリコンテンツに対するアクセス要求(例えば、読み出し要求または書き込み要求)に関して取られ得る異なる手法に関するものであり、この状況は、本明細書では「競合」または「不一致」と称され、キャッシュラインがアクセスされるキャッシュを維持するコアによって検出され得る。本明細書で使用される「競合」または「不一致」は、「違反」とは区別されるべきであり、「違反」とは、例えばバギーソフトウェアから、または誤ったセキュリティメタデータを有するデータにアクセスしようとするプリフェッチャによる試みからではなく、悪意のある攻撃から生じる「競合」または「不一致」を指す。
実施形態は、所与のデバイスに対してローカルであるコアによる、かつ/またはセキュリティメタデータを使用してリモートであるコアによる読み出しおよび書き込みアクセスのコンテキストにおけるキャッシュコヒーレンシを包含する。リモートアクセスは、リモートデバイス、すなわち、ローカルコアおよびそのローカルキャッシュを収容するデバイスとは別個のデバイス、例えば、図10に示すようなクラウドネットワークを介してローカルコアおよびそのローカルキャッシュを収容するデバイスに通信可能に接続されたデバイスによるアクセスを指す。
より単純な実施形態は、アクセスされることが求められるキャッシュ(以下、「アクセスされるキャッシュ」)を維持するコアが、セキュリティメタデータを、キャッシュにアクセスしようと試みるコア(以下、「アクセスコア」)からのアクセス要求に関連付けられた物理アドレスの一部として扱い、何もしないこと、すなわち、アクセスされることが求められるメモリコンテンツの物理アドレスと一致しない物理アドレスを含むものと同様の読み出し/書き込み要求を扱うことができる。
代替的に、積極的な手法に関連する一実施形態は、コアが、競合の検出に応答して、例えば読み出し動作または書き込み動作の後に、メインメモリへの更新を引き起こし、アクセスされるキャッシュ内でアクセスされることが求められているメモリコンテンツを無効化することを含み得る。
別の実施形態による代替手法は、コアのスヌーピングエージェントの使用を含み得る。スヌーピングエージェントは、スヌーピングエージェントを有するコアのアクセスされるキャッシュ内の所与のメモリコンテンツに関連付けられたセキュリティメタデータとは異なるセキュリティメタデータを使用してアクセスを試みる別のコアを検出することができ、次いで、メインプログラムの実行に割り込み、競合を処理する例外ハンドラを用いて例外を呼び出すことができる。かかる状況では、競合は完全性違反として扱われ得る。一部のオプションによれば、コアは例外を発生させることができ、かつ/または例外ハンドラは、呼び出された例外の数に応じて異なる形で競合を処理することができる。例として、コアは、検出された競合の数が所与の閾値以上である場合に例外ハンドラを呼び出してもよい。
一部の実施形態によれば、キャッシュライン全体とは対照的に、キャッシュラインのグラニュールのセットは、互いに対して異なるセキュリティメタデータで注釈を付けされてもよい。例えば、コアは、8バイトのセット、または所与の数のビットのセット、またはアクセスされるキャッシュ内のキャッシュラインの所与の数のビット第1のセキュリティメタデータで注釈付けし、別の所与のビット数を第2のセキュリティメタデータで注釈付けしてもよい。
一実施形態によれば、別のコアが、第2のセキュリティメタデータでアノテートされたキャッシュラインのグラニュールの異なるセットにアクセスしようと試みる場合、キャッシュラインを維持するコアは、他のコアが、アクセスされるキャッシュの同じキャッシュライン内でアクセスしようとするメモリコンテンツに対して異なるセキュリティメタデータで動作し、他のコアによるキャッシュラインのアクセスに反応せず、他のコアが別のキャッシュラインからメモリコンテンツにアクセスしているかのように動作する、すなわち、他のコアがそれ自体のセキュリティポリシーで異なるキャッシュラインへのアクセスであるかのように、他のコアによるキャッシュラインのグラニュールの異なるセットへのアクセスを許可することができると判定することができる。アクセスされるキャッシュを維持するコアは、例えば、他のコアによって使用される異なるセキュリティメタデータに関するコアへの通信によって、アクセスされるキャッシュのキャッシュライン内のデータにアクセスするために、他のコアが異なるセキュリティメタデータで動作すると判定することができる。後者の通信は、MESIプロトコルの更新または改訂に対応してもよい。かかる例では、コアは、第1のセキュリティメタデータ(第1のセキュリティポリシー)を使用して、アクセスされるキャッシュのキャッシュライン内のそれ自体のグラニュール(複数可)においてそれ自体のアクセスを実行し、別のコアが、第1のセキュリティメタデータとは異なる第2のセキュリティメタデータ(第2のセキュリティポリシー)を使用して、同じキャッシュライン内の1または複数の他のグラニュール(複数可)にアクセスしようと試みていると判定するように構成される。
キャッシュラインの個々のグラニュールにそれぞれのメタデータで注釈を付けるように適合されたコアは、異なるセキュリティメタデータを有し、異なるセキュリティドメインに対応するグラニュールが異なるコアによってアクセスされている間に、同じキャッシュラインへの変更が同時にかつ独立して行われることを可能にする。後者の機能は、異なるコア間で多大な性能上の利点を提供する。
本セクション内の実施形態の文脈において本明細書で説明される閾値ポリシーの目的は、無害なアクセスを検出することである。攻撃者はより高い頻度で所与の時間内にメモリの特定の領域に対する正しいセキュリティメタデータを推測しようとするので、脅威またはマルウェア/攻撃の場合に発生する不一致の数は、通常、不一致につながる無害なアクセスと比較して高い。後者は、メモリアクセスに関連付けられたウィンドウの概念、およびその時間ウィンドウ内で試行されたメモリアクセスの数に関する。ヒューリスティックスは、バグの多いソフトウェアによって引き起こされる違反と、永続的であり得る攻撃者によって引き起こされる違反との間の区別を可能にする。閾値に対する違反の時間的な数を超えた場合、より耐性のあるポリシーに従って、コアは、アクセスに割り込み、例外を引き起こすことができる。
アクセス要求が、メモリコンテンツのコピーを無効化する積極的ポリシーを使用して、攻撃者から、またはバグのあるソフトウェアを実装するコアからのものである場合、競合の判定は、ソフトウェア内に何らかのバグがあることを示す可能性がある。かかる場合、アクセスを試みるコアは、そのローカルコピーを無効化し、メインメモリに対して再度読み出すための読み出し要求を再発行し、正しいセキュリティメタデータを有する正しいコピーを取得する。メインメモリからの後続の読み出し要求が再び競合をもたらす場合、コード内に永続的なバグが存在する可能性があり、その場合、アクセスの数が所与の(事前設定された、所定の)閾値を超え、例外をもたらす可能性があり、このプロセスはコード内のバグを捕らえるのに役立ち得る。
より耐性のあるポリシーは、別のコアが異なるセキュリティメタデータを有するメモリコンテンツにアクセスしている可能性がある場合であっても、メモリコンテンツのローカルコピーを用いて作業を継続することである。耐性のあるポリシーのこのバージョンでは、バグとは対照的に、ソフトウェア/コードにバグが存在しないと仮定して、所与の閾値に対して競合を追跡することができる。コアは、別のコアが、異なるセキュリティメタデータを有するメモリコンテンツへのアクセスを試み、それ自体の競合を解決することを可能にしながら、そのローカルセキュリティメタデータを含むそのローカルコピー内のメモリコンテンツを用いて作業し続けることができる。後者のアプローチは、そのローカルコピーおよび使用されるコード(セキュリティメタデータ)に関して、コアにおける信頼性を示唆する。
使用される種々のポリシーは、例えばビットベクトルの形態で、例えばコアごとに1つずつ、専用レジスタ、モデル固有レジスタ(MSR)などのポリシーレジスタに記憶され、種々のコアによってアクセスされて、それらのポリシーを設定し、それに応じて構成されてもよい。代替的に、ポリシーは、ブート時にコアにおいて実装されてもよい。
積極的ポリシーは、上述したように、コアがセキュリティメタデータの異なる値を用いて読み出しまたは書き込みを試みる(競合の検出)たびに、コアがアクセスを試みていたメモリコンテンツを直ちにバックオフし、本質的に無効化することができることを意味する。耐性のあるポリシーによれば、コアは、それが正しいコード/正しいセキュリティメタデータを有し、別のコアが異なるセキュリティメタデータを有する同じメモリコンテンツを読み出そうと試みる場合、それはガベージを読み出し、それ自体のコヒーレンシ競合を処理すると考える。これは、異なるセキュリティメタデータを有する同じメモリコンテンツの複数のコピーが異なるキャッシュに存在することを意味する。
一部の実施形態によれば、積極的ポリシーでは、排他的、修正、および共有の概念は、上記のように、現在のMESIプロトコルと同じ意味を有するが、耐性のあるポリシーでは、排他的、修正、および共有の概念は、下記のように異なる意味を有する。
1)排他的
a)MESIの現在のバージョンによれば、ローカルコピーとして1つのコアのみがあり、このコアは修正されていない。
b)本セクションの一部の実施形態によれば、
i)積極的ポリシーが保持される場合、排他的とは、1つのコアのみがコピーを有し、このコアが修正されていないことを意味する。
ii)より耐性のあるポリシーが保持される場合、排他的とは、1つのコアのみが同じセキュリティメタデータでアノテートされたコピーを有し、このコピーが修正されていないことを意味する。
2)(メインメモリ内の値に基づいた)修正
a)MESIの現在のバージョンによれば、ローカルコピーとして1つのコアのみが修正されている。
b)本セクションの一部の実施形態によれば、
i)積極的ポリシーが保持される場合、修正とは、1つのコアのみがコピーを有し、このコアが修正されていることを意味する。
ii)より耐性のあるポリシーが保持される場合、修正とは、1つのコアのみが同じセキュリティメタデータで注釈付けされたコピーを有し、このコピーが修正されていることを意味する。しかしながら、異なるメタデータで注釈付けされた他のコピーが存在してもよい。
3)共有
a)MESIの現在のバージョンによれば、2つ以上のコアがローカルコピーを有し、このコピーは各コアにおいて同じである。
b)本セクションの一部の実施形態によれば、
i)積極的ポリシーが保持される場合、共有とは、複数のコアが、同じセキュリティメタデータでアノテートされた同じコピーを有し、他のセキュリティメタデータでアノテートされた他のコピーがローカルコアキャッシュに存在しないことを意味する。
ii)より耐性のあるポリシーが保持される場合、共有とは、複数のコアが同じセキュリティメタデータでアノテートされた同じコピーを有するが、他のセキュリティメタデータでアノテートされた他のコピーがローカルコアキャッシュ内に存在することを意味する。
符号化に戻ると、ポリシーは、ビットベクトル符号化の形態であってもよく、ビットベクトル符号化は、各コアのMSRなどのレジスタに記憶されてもよい。ビットベクトルの第1の実施形態によれば、
1)第1のビットは、セキュリティメタデータ認識コヒーレンシがキャッシュラインのグラニュールに対して動作するか、またはキャッシュライン全体に対して動作するかを示し得る。例えば、グラニュールが複雑すぎて実装できない場合があり、または特定のスキューがグラニュールをオフに切り替えた場合があり、その場合、第1のビットは0に設定されることになる。セキュリティメタデータがグラニュールに対して動作することを示すように設定される場合、ポリシービットベクトルは、どのグラニュールがアクセスされるかを示す別のビットベクトルを伴うことができる。
2)第2のビットは、キャッシュラインの同じグラニュールにアクセスするときにセキュリティメタデータ不一致が検出された場合に、無効化するか否かを指示することができる。第2のビットは、ポリシーが積極的であるか耐性であるかを判定する。セキュリティメタデータおよび対応するグラニュールに関連付けられた読み出し要求は、ブロードキャストすることができ、コアは、セキュリティメタデータが共有されるか修正されるかにかかわらず、そのスヌーピングエージェントを介して、アクセスが異なるセキュリティメタデータを有する同じグラニュールに対するものであると判定することができる。したがって、第2のビットは、コアが、かかる場合に、ローカルセキュリティメタデータでアノテートされたそのローカルコピーを無効化し、メモリコンテンツを書き戻す(例えば、ビットが1に設定される)か、または代替として、それは、読み出しのためにメモリコンテンツを書き戻すことができるが、このコピーを無効化せずに保持し、それを排他的に保持する(例えば、ビットが0に設定される)かどうかを判定する。
3)第3のビットは、キャッシュラインの異なるグラニュールにアクセスするときにセキュリティメタデータ不一致が検出された場合に、無効化するか否かを指示することができる。第3のビットは、第1のビットが1に設定される場合にのみ1に設定され得るが、第2のビットは、1または0に設定され得る。
4)第4のビットは、各キャッシュコヒーレンシエージェントが過去の不一致の状態情報を維持するかどうかを示すことができる。
5)第5のビットは、不一致の場合に例外ハンドラを呼び出すかどうかを指示することができる。したがって、ビット4は、競合または不一致の検出に対するソフトウェアソリューションを提供することができる。ビット4が1に設定されている場合、例えば、競合が検出されるたびに、例外ハンドラを呼び出すことができ、この例外ハンドラは、このようにして、不一致に関してさらなるステップを行わせることができる。
6)第6ビットは、例外ハンドラを呼び出すためのポリシーを示すことができる。これは、不一致が検出されたとき、またはある特定の値を有する1または複数のカウンタを含むキャッシュコヒーレンシエージェントによって維持される状態が検出されたときに直ちに行われ得る。
例えば、上記の例示的な実施形態におけるビット4、5、および6におけるビットベクトルは、コアキャッシュコヒーレンシエージェントが、例外ハンドラを呼び出してメインソフトウェアの動作に割り込むことによってメインソフトウェアの実行に影響を及ぼす可能性を設定してもよい。
ビットベクトルの例が上記の説明で提供されているが、実施形態はそのように限定されず、上記のまたは本明細書で説明されるポリシーのいずれかを示すための任意の数のビットのビットベクトルの提供をその範囲内に含む。
一実施形態によれば、(競合検出の閾値が時間ウィンドウ内に到達したかどうかを判定する)カウンタは、ポリシーレジスタ(MSRなど)の一部であってもよい。
本明細書で説明されるキャッシュコヒーレンシプロトコルおよびポリシーに関連して説明されるものなど、このセクションにおける実施形態は、図10のコンピューティングノードのいずれかに関連付けられるものなど、分散メモリシステムに非常によく適している。
実施形態は、複数のコアおよびキャッシュ(コアは、CPU、GPU、xPU、または任意の他のコアであり得る)を含む図4のコンピューティングシステム400などの、SoCなどの単一システム内のコア間で展開することができる。実施形態はさらに、メモリが図10のノード1002、1012、1022、および1032などの異なるエッジコンピューティングノード間で分散される、分散メモリシステムにおいて展開することができる。分散メモリ展開の場合、ポリシーレジスタは、コントローラノードに存在してもよく、図10のネットワークなどのエッジコンピューティングネットワーク内の1または複数のノードの1または複数のコア(この場合、図4のコア474/484などのコンピューティングコア)のためのキャッシュコヒーレンシポリシーを記憶してもよい。コントローラノードは、本明細書で説明されるものなど、そのポリシーレジスタに記憶されたキャッシュコヒーレンシポリシーを、エッジコンピューティングネットワーク内の他のノードのコンピューティングコアに送信するように適合させることができる。コントローラノードは、それに結合されたノードのコンピューティングコアごとに競合の履歴を追跡し、各コンピューティングコアに関連付けられた競合の履歴に基づいてメモリを割り当てる方法かに関する決定を行うためのカウンタをさらに含み得る。代替的に、またはコントローラノードと併せて、図10のエッジコンピューティングネットワークに関連付けられたものなどの分散メモリシステムでは、そのノードの各コンピューティングコアのための各別個のノード内にポリシーレジスタが存在し得る。
一部の実施形態によれば、キャッシュコヒーレンシポリシーは、競合の検出時のコアの挙動を規定することができる。これらのポリシーの例は、以下で、および図48~52の文脈で対処される。図48~52では、EヒットおよびEミスは、それぞれ、コアのローカルキャッシュのメモリコンテンツの物理アドレスに対する、読み出し要求または書き込み要求のいずれかにおける物理アドレスの一致を指す。図48~52は、アクセスが読み出しアクセスであるか書き込みアクセスであるか、ローカルキャッシュ上にEヒットを有するかEミスを有するか、さらにローカルキャッシュ内のデータに関してセキュリティメタデータが一致するか不一致であるか(すなわち、ローカルキャッシュ内のメモリコンテンツのセキュリティメタデータとアクセス動作に関連付けられたセキュリティメタデータとの間に不一致があるか)に基づくフローを提示する。
図48は、Eヒットおよびセキュリティメタデータミスの場合であって、アクセスを試みるコアのローカルキャッシュ内にアクセスされるメモリコンテンツの単一コピーがある場合の読み出し要求に関する。コアが読み出しを試みている場合、その後、読み出されるべきコンテンツがそのコアのローカルキャッシュ内にある(Eヒット)という判定が行われ、読み出し要求に関連付けられたセキュリティメタデータがヒットであるかミスであるかに関するさらなる判定が行われる。セキュリティメタデータミスの場合(図48)、コアは、4802において、メインメモリ読み出し要求を発行することができる。
その後、共有(S)状態のメモリコンテンツの複数のコピーが複数のコアに存在する場合、フローは、図49に示されるフローに移動する。
コアのローカルキャッシュにおけるメモリコンテンツの単一コピー(以下、「コピー」)の場合、フローは、そのコピーが排他的(E)状態または修正(M)状態のいずれであるかに関する判定に進む。コピーが状態Eである場合、ローカルコアは、4822においてそのコピーを無効化し、状態を無効(I)に設定し、4824においてメインメモリ値をそのキャッシュに記憶し、4826において新しいストアの状態をEに設定する。コピーが修正された状態のものである場合、メインメモリアクセスは、4810でローカルコアにおいて中断され、ローカルコアは、4812で修正されたバージョンをメインメモリに書き戻し、4814でコピーの状態をEからIに設定し、4816でメインメモリアクセスを再発行し、4818でコンテンツのメインメモリ値をそのローカルキャッシュに記憶し(この場合、セキュリティメタデータが正しくない場合、メインメモリからのメモリエントリは間違ったキーで解読され、メモリコンテンツはランダムに見える)、最後にその状態をEに設定する。
引き続き図48を参照すると、一部の実施形態によれば、動作4822または4810で開始する分岐の各々において、読み出し要求を発行するローカルコアは、示されたものとは異なるポリシー(したがって、それらの動作に対応するブロックを囲む破線)を実装することができる。図48に示すように、読み出し要求を発行するコアは、動作4822または4810で開始する分岐の関連する動作(したがって、動作の分岐に使用される破線)に加えて、それとともに、および/またはその代わりに、以下のポリシーのいずれかを実装することができる。
1)ローカルコピーを無効化し、例えば異なるセキュリティメタデータ値を有するキャッシュライン内の同じグラニュールにアクセスしている場合、図48のフローに従って進み、
2)(図示せず)異なるセキュリティメタデータ値を有する異なるグラニュールにアクセスする場合、不一致を無視し、かつ/または、
3)(図示せず)現在検出された不一致の数が閾値を超えるかどうかを判定するためにチェックし、閾値を超える場合、例えば、異なるセキュリティメタデータ(SM)を有するキャッシュライン内の同じグラニュールにアクセスするとき、例外を発生させ、例外ハンドラを呼び出してソフトウェアに割り込む。
このセクションにおける実施形態の文脈において不一致を無視することは、自身のメモリコンテンツを無効化しないことを意味する。無視することは、一部のオプションにおいて、特定の時間ウィンドウ内の不一致を追跡するためにカウンタを使用すること、および例えば、不一致に基づいてさらなるアクションを取るために例外ハンドラを呼び出すことを含み得る。カウンタを保持するこの後者のオプションは、キャッシュライン内の同じグラニュールがコアによってアクセスされることが求められるが、スヌーピングコア(複数可)のセキュリティメタデータとは異なるセキュリティメタデータを有する場合に適用することができ、この場合、例えば、カウンタ数が所定の閾値を超えると違反が発生する可能性がある。
このセクションの実施形態による無視または無効化の各場合において、問題のコアは、そのローカルキャッシュ内のメモリコンテンツをメインメモリに書き戻すことができる。
一部の実施形態では、このセクションにおいてメモリコンテンツの状態を変更することに続いて、メモリコンテンツの新しい状態を示す信号を他のコアに送信することができる。
図49は、Eヒットおよびセキュリティメタデータミスの場合であって、種々のコアにおいて状態Sでアクセスされるメモリコンテンツの複数のコピーが存在する場合の読み出し要求に関する。図49は、コアによるメインメモリ読み出し要求の発行後の図48のフローの分岐の続きであり、それに基づいて、種々のコアにおいて、状態Sまたは共有(同じセキュリティメタデータを有する同じコピー)において読み出されることが求められるメモリコンテンツの複数のコピーが存在するという判定である。この場合、スヌーピングコアまたはスヌーピングコアのキャッシュコヒーレンシエージェントが、メモリコンテンツおよび関連するセキュリティメタデータに関して読み出し要求が発行されたことを判定することを可能にするために、キャッシュコヒーレンシプロトコルを使用して、直接またはメインメモリなどの仲介物を介してコアに読み出し要求をブロードキャストすることができる。
図49では、全てのスヌーピングコアおよびローカルコアは、4902において、メモリコンテンツの状態をSからIに設定することができ、ローカルコアは、4904において、メモリコンテンツのメインメモリ値をそのローカルキャッシュに記憶することができ、その後、4906において、その状態をEに設定することができる。
引き続き図49を参照すると、一部の実施形態によれば、動作4904において、スヌーピングコアは、示されたものとは異なるポリシー(したがって、動作4902および4904に対応するブロックを囲む破線)を実装することができる。したがって、図49に示すように、スヌーピングコアは、動作4902で開始する分岐の関連する動作(したがって、動作の分岐に使用される破線)に加えて、それとともに、および/またはその代わりに、以下のポリシーのいずれかを実装することができる。
1)例えば、ローカルコアが異なるセキュリティメタデータ値を有するキャッシュライン内の同じグラニュールにアクセスしている場合、ローカルコピーを無効化(Q202)し、
2)ローカルコアが同じグラニュールにアクセスしているが、ポリシーがそのように指示する場合、不一致を無視し、
3)同じキャッシュライン内の異なるグラニュールにアクセスする場合、不一致を無視し、ならびに/あるいは、
4)現在検出されている不一致の数が閾値を超えているかどうかを判定するためにチェックし、閾値を超えている場合、例えば、上記の(1)、(2)、または(3)が成立する場合、例外を発生させ、例外ハンドラを呼び出してソフトウェアに割り込む。
図50は、Eミスを伴う読み出し要求(読み出し要求の一部として使用される物理アドレスが、読み出されることが求められるメモリコンテンツにつながらない)の場合の一実施形態に関し、アクセスを試みるコアのローカルキャッシュ内にアクセスされるメモリコンテンツの単一コピーが存在し、単一のコアがメモリコンテンツに関して状態EまたはMにある。メモリコンテンツのコピーが存在しない場合、およびメモリコンテンツの複数のコピーが存在する場合は、図51のAおよびBで対処され、その説明は後述する。
コアが読み出しを試みている場合、その後、読み出されるコンテンツがそのコアのローカルキャッシュ内にない(Eミス)という判定が行われる。Eミスの場合、コアは、5002において、読み出し要求をブロードキャストし、他のコアのスヌーピングエージェントが読み出し要求の存在を知ることを可能にするために、メインメモリ読み出し要求を発行することができる。その後、いずれかのコアにゼロコピーが存在する場合、または共有(S)状態のメモリコンテンツの複数のコピーが複数のコアに存在する場合、フローは図51に示されるフローに移動する。
コアのローカルキャッシュにおけるメモリコンテンツの単一コピーの場合、フローは、そのコピーが排他的(E)状態または修正(M)のいずれであるかに関する判定に進む。コピーが状態Eのものである場合、スヌーピングコア(複数可)と読み出しを試みるローカルコアとの間にセキュリティメタデータの不一致または競合が存在するかどうかに関する判定が行われる。
不一致がない場合、ローカルコアは、5010において、そのメインメモリアクセスを中断し、スヌーピングコアは、5012において、メモリコンテンツのそのコピーをバス上に置き(または別様でそれをローカルコアと共有し)、スヌーピングおよびローカルコアは、5014において、その状態をSに設定する。
不一致の場合、積極的な実施形態によれば、スヌーピングコアは、その状態をEからIに設定し、5016においてそのコピーを無効化する(この場合、メインメモリへの書き戻しは必要とされない)。5018でローカルコアは、5018でメインメモリコピーをそのキャッシュに記憶し、5020で新しいストアの状態をEに設定する。
コピーが状態Mのものである場合、メインメモリアクセスは、5022でローカルコアにおいて中断され得る。次いで、スヌーピングコア(複数可)と読み出しを試みるローカルコアとの間にセキュリティメタデータの不一致または競合が存在するかどうかについての判定が行われる。
不一致がない場合、スヌーピングコアは、5024において、メモリコンテンツのそのコピーをバス上に置き(または別様でそれをローカルコアと共有し)、スヌーピングおよびローカルコアは、5026において、その状態をSに設定する。
不一致の場合、5028において、そのセキュリティメタデータを含むメモリコンテンツの修正バージョンがメインメモリにコピーバックされ、5032において、スヌーピングコアがそのコピー状態をIに設定し、5036において、ローカルコアがそのメインメモリアクセスを再発行し、5030において、メモリコンテンツのメインメモリ値およびその関連メタデータをそのキャッシュに記憶し、5034において、その状態をEに設定する。
引き続き図50を参照すると、一部の実施形態によれば、動作5016または5028で開始する分岐の各々において、スヌーピングコアは、示されたものとは異なるポリシー(したがって、それらの動作に対応するブロックを囲む破線)を実装することができる。
図50に示すように、スヌーピングコアは、動作5016で開始する分岐の関連する動作(したがって、動作の分岐に使用される破線)に加えて、それとともに、および/またはその代わりに、以下のポリシーのいずれかを実装することができる。
1)異なるセキュリティメタデータ値を用いて、キャッシュライン(Q316)内の最初の読み出し要求を発行するコアと同じグラニュールにアクセスする場合、そのローカルコピーを無効化し、この場合、ポリシー2)は、以下のポリシー4)とともに使用され得、
2)同じグラニュールにアクセスするが、ポリシーがそのように指示する場合(この場合、5018および5020は起こらない可能性があり、ローカルコアは、スヌーピングコアのメモリコンテンツをそのローカルキャッシュに記憶し、その状態をSに設定することができる)、不一致を無視し、この場合、ポリシー1)は、以下のポリシー4)とともに使用され得、
3)異なるセキュリティメタデータ値を有する異なるグラニュールにアクセスする場合(この場合、5018および5020は起こらない可能性があり、ローカルコアは、スヌーピングコアのメモリコンテンツをそのローカルキャッシュに記憶し、その状態をSに設定することができる)、不一致を無視し、ならびに/あるいは、
4)現在検出された不一致の数が閾値を超えるかどうかを判定するためにチェックし、上記の1)または2)が成立する場合に例外を発生させる(この場合、5018および5020は発生しない可能性があり、例外ハンドラが次のステップを判定することができる)。
ポリシー2)および3)の場合、スヌーピングコアは、ローカルコアに応答しない場合がある。上記のポリシー2)の場合、ローカルコアがスヌーピングコアと同じグラニュールにアクセスしようとしている場合、スヌーピングコアは不一致を無視することができる。ポリシー2)、3)および4)のいずれにおいても、スヌーピングコアは、そのローカルコピーに対して作業を継続することができ、一方、状態Iのために、ローカルコアは、スヌーピングコアキャッシュをゼロコピーを有するものとして認識し、メインメモリ(Q318)自体から読み出そうとするメモリコンテンツを取得しようと試みることができる。この後者の動作は、ローカルコアがメインメモリからガベージを読み出すことになる可能性があり、メタデータの不一致を伴ってそれを読み出している場合、この競合は、オペレーティングシステム(OS)または別のハンドラによって対処され得るさらなる例外を引き起こす可能性がある。ポリシー3)の場合、スヌーピングコアは、バス上にコピーを置くことによってローカルコアに応答することができる。
図50に示すように、スヌーピングコアは、動作5028で開始する分岐の関連する動作(したがって、動作の分岐に使用される破線)に加えて、それとともに、および/またはその代わりに、以下のポリシーのいずれかを実装することができる。
1)そのコピーをメインメモリに書き戻し、次いで、ローカルコアによる読み出しアクセスが、異なるセキュリティメタデータ値を有するキャッシュライン内の同じグラニュールに対するものである場合、そのローカルコピーを無効化し、
2)そのコピーをメインメモリに書き戻し、次いで、ローカルコアによる読み出しアクセスが同じグラニュールに対するものであるが、ポリシーがそのように指示する場合、不一致を無視し、
3)ローカルコアによる読み出しアクセスが異なるセキュリティメタデータ値を有する異なるグラニュールに対するものである場合、そのコピーをメインメモリに書き戻しせず、不一致を無視し、ならびに/あるいは、
4)現在検出されている不一致の数が閾値を超えているかどうかを判定するためにチェックし、上記の1)または2)が成立する場合に例外を発生させる。
上記のポリシー2)~4)では、スヌーピングコアは、異なるセキュリティメタデータがローカルコアによって使用されて同じセキュリティメタデータを読み出そうとしていることを知って、状態Mでアクセスされることが求められるそのメモリコンテンツを保持し続けることができる。
ポリシー2)は、同じグラニュールにアクセスするが、ローカルコアのセキュリティメタデータとは異なるセキュリティメタデータを有するコアのグループに適用することができる。この場合、それらは、スヌーピングコアのセキュリティメタデータが有効なものであるという仮定の下で、不一致を無視することができる。
図51は、Eミスを伴う読み出し要求(読み出し要求の一部として使用される物理アドレスが、読み出されることが求められるメモリコンテンツにつながらない)の場合の一実施形態に関し、アクセスを試みるコアのローカルキャッシュ内にアクセスされるメモリコンテンツの複数のコピーが存在し、スヌーピングコアがメモリコンテンツに関して状態Sにあり(分岐B)、またはメモリコンテンツのコピーは存在しない(分岐A)。図51は、図50の続きであり、その中のAおよびBへのオフページ参照で示される。
ローカルコアが読み出しを試みている場合、その後、読み出されるコンテンツがそのコアのローカルキャッシュ内にない(Eミス)という判定が行われる。Eミスの場合、コアは、5002において、読み出し要求をブロードキャストし、他のコアのスヌーピングエージェントが読み出し要求の存在を知ることを可能にするために、メインメモリ読み出し要求を発行することができる。その後、いずれかのコアにゼロコピーが存在する場合、フローは分岐Aに移動し、共有(S)状態のメモリコンテンツの複数のコピーが複数のコアに存在し、フローは分岐Bに移動する。
スヌーピングコアのどこにもメモリコンテンツのコピーがない場合、分岐Aにおいて、フローは、5104においてメインメモリコピーをそのキャッシュに記憶し、5106において新しいストアの状態をEに設定するローカルコアに移動する。
状態Sでスヌーピングコアにおけるメモリコンテンツの複数のコピーの場合、フローの分岐Bに進み、スヌーピングコアとローカルコアとの間にセキュリティメタデータの不一致があるかどうかを判定する。これは、複数のスヌーピングコアがコピーを所有し、コピーが同じセキュリティメタデータ、したがって状態Sに関連付けられている場合である。
不一致がない場合には、ローカルコアは、5108において、そのメインメモリアクセスを中断し、5110において、任意のスヌーピングコアが、メモリコンテンツのそのコピーをバス上に置き(または別様でそれをローカルコアと共有し)、5112において、ローカルコアは、その状態をSに設定する。
不一致の場合、積極的な実施形態によれば、スヌーピングコアは、その状態をSからIに設定し、5114においてそれらのコピーを無効化する(この場合、メインメモリへの書き戻しは必要とされない)。5116において、ローカルコアは、メインメモリコピーをそのキャッシュに格納し、5118で、新しいストアの状態をEに設定する。
引き続き図51を参照すると、一部の実施形態によれば、動作5114で開始する分岐の各々において、スヌーピングコアは、示されたものとは異なるポリシー(したがって、それらの動作に対応するブロックを囲む破線)を実装することができる。
図51に示すように、スヌーピングコアは、動作5114で開始する分岐の関連する動作(したがって、動作の分岐に使用される破線)に加えて、それとともに、および/またはその代わりに、以下のポリシーのいずれかを実装することができる。
1)異なるセキュリティメタデータを有するキャッシュライン内の同じグラニュールにアクセスする場合、ローカルコピーを無効化する。
2)同じグラニュールにアクセスするが、ポリシーがそのように指示する場合、不一致を無視する。
3)異なるセキュリティメタデータを有する異なるグラニュールにアクセスする場合、不一致を無視する。
4)現在検出されている不一致の数が閾値を超えているかどうかを判定するためにチェックし、1)または2)が成立する場合に例外を発生させる。
図52は、左分岐上のEヒット、または右分岐上のEミス(読み出し要求の一部として使用される物理アドレスが、読み出されることが求められるメモリコンテンツにつながらない)を伴う書き込み要求の場合の一実施形態に関する。
図52では、ローカルコアは、そのローカルキャッシュ内に存在し、M、E、またはSのいずれかの状態にある、あるメモリコンテンツへの書き込みを開始しようと試みる。M状態にある場合、ローカルコアが既にこのメモリコンテンツへの書き込みを開始しており、そのセキュリティメタデータに関してメインメモリコンテンツとは異なることを意味する。それがE状態にある場合、これは、以前に読み出されたが、決して書き込まれなかったことを意味する。S状態にある場合、これは、ローカルコアがそれを読み出すが、複数の他のコアがそれを読み出し、コアは全て正確に同じコピー(同じメモリコンテンツおよびそのコンテンツに対する同じセキュリティメタデータ)を有することを意味する。
Eヒットの場合、ローカルコア状態がM、E、またはSのいずれであるかが判定される。図52のフローはさらに、書き込み要求と、書き込まれるキャッシュ上のメモリコンテンツコピー(存在する場合)との間にセキュリティメタデータの不一致があると仮定する。不一致は、単なる例として、ユースアフターフリー(use-after-free)バグまたは悪意のある攻撃によって引き起こされ得る。
ローカルコアがM状態にある場合、ローカルコアは、5220において、書き込まれることが求められているメモリコンテンツにその関連付けられたセキュリティメタデータを書き込むことによってそのキャッシュラインを更新し、状態はMのままである。
ローカルコアがE状態にある場合、ローカルコアは、5222において、書き込まれることが求められるメモリコンテンツをその関連付けられたセキュリティメタデータで書き込み、5224において状態をEからMに変更することによって、そのキャッシュラインを更新する。
ローカルコアがS状態にある場合、積極的な手法によれば、ローカルコアは、5230において、メモリコンテンツの状態をSからIに設定するための送信をブロードキャストし、スヌーピングコアは、5232において、それらのメモリコンテンツのエントリ状態をSからIに設定する。次いで、5226において、ローカルコアは、書き込まれることが求められるメモリコンテンツをその関連付けられたセキュリティメタデータで書き込むことによって、およびそのエントリ状態をSからMに設定することによって、5226においてそのキャッシュラインを更新する。
Eミス(ローカルコアが、修正したいメモリコンテンツのコピーを有しておらず、一部の場合では、1または複数の他のコアが修正する)の場合、ローカルコアは、5202において、修正意図あり読み出し(RWITM)メッセージを他のコアにブロードキャストし、その後、読み出され、修正されることが求められているメモリコンテンツのコピーがあるかどうかに関する判定が行われる。
コピーが存在しない場合、ローカルコアは、5204において、値をメインメモリからそのキャッシュに記憶し、それをそれ自体のセキュリティメタデータで修正し、その状態をMに設定する。
コピーが存在する場合、スヌーピングコア状態がM、E、またはSのいずれであるかが判定される。
状態がMである場合、RWITMは5206においてブロックされ、スヌーピングコアは、5208において、メモリコンテンツの修正されたバージョンをメインメモリに書き戻し、5210において、状態をIに設定する。その後、5212において、ローカルコアは別のRWITMメッセージを再発行し、5214において、ローカルコアは、メインメモリからのメモリコンテンツおよび関連付けられたセキュリティメタデータをそのキャッシュに記憶し、それを修正し、その状態をMに設定する。
状態がEまたはSである場合、スヌーピングコアは、5216において、RWITMに応答して、積極的な手法でその状態をIに設定し、5218において、ローカルコアは、メインメモリからのメモリコンテンツおよび関連するセキュリティメタデータをそのキャッシュに記憶し、それを修正し、その状態をMに設定する。
引き続き図52を参照すると、一部の実施形態によれば、動作5114で開始する分岐の各々において、スヌーピングコアは、示されたものとは異なるポリシー(したがって、それらの動作に対応するブロックを囲む破線)を実装することができる。
図52に示されるように、ローカルコアは、動作5220または5222で開始する分岐の関連する動作(したがって、動作の分岐に使用される破線)に加えて、それとともに、および/またはその代わりに、以下のポリシーのいずれかを実装することができ、ローカルコアは、そのコピーの唯一の所有者である。
1)異なるセキュリティメタデータ値を有するキャッシュライン内の同じグラニュールにアクセスする場合、不一致カウンタを増加させる。
2)異なるtv値を有する異なるグラニュールにアクセスする場合、不一致を無視する。
3)現在検出されている不一致の数が閾値を超えているかどうかをチェックし、(1)が成立する場合に例外を発生させる。
図52に示されるように、ローカルコアは、動作(したがって、動作の分岐に使用される破線)5230(複数のコアがコピーを所有し、全てが共有状態にある)で開始する分岐の関連する動作(したがって、動作の分岐に使用される破線)に加えて、それとともに、および/またはその代わりに、以下のポリシーのいずれかを実装することができる。
1)異なるセキュリティメタデータ値を有するキャッシュライン内の同じグラニュールにアクセスする場合、不一致カウンタを増加させる。
2)異なるセキュリティメタデータ値を有する異なるグラニュールにアクセスする場合、不一致を無視する。
3)現在検出されている不一致の数が閾値を超えているかどうかをチェックし、(1)が成立する場合に例外を発生させる。
スヌーピングコアは、動作5230で開始する分岐の関連する動作(したがって、動作の分岐に使用される破線)に加えて、それとともに、および/またはその代わりに、以下のポリシーのいずれかを実装することができる。
1)異なるtv値を有するキャッシュライン内の同じグラニュールにアクセスする場合、それらのローカルコピーを無効化する。
2)同じグラニュールにアクセスするが、ポリシーがそのように指示する場合、無効なブロードキャストおよび不一致を無視し、その場合、スヌーピングコアは、それらのグラニュールをメインメモリに書き戻すことができ、またはそうでなくてもよい。
3)異なるtv値を有する異なるグラニュールにアクセスする場合、無効なブロードキャストおよび不一致を無視する。
4)現在検出された不一致の数が閾値を超えるかどうかを判定するためにチェックし、1)または2)が成立する場合、例外を発生させる。
本開示は、一部の実装形態および概して関連する方法に関して説明されたが、これらの実装形態および方法の変更形態および置換形態は、当業者には明らかであろう。例えば、本明細書で説明される動作は、説明されたものとは異なる順序で実行されてもよく、それでも望ましい結果を達成することができる。一例として、添付の図面に示されたプロセスは、所望の結果を達成するために、示された特定の順序または連続した順序を必ずしも必要としない。一部の実装形態では、マルチタスキングおよび並列処理が有利であり得る。他の変形形態は、以下の特許請求の範囲内である。
本明細書に提示されるアーキテクチャは、例としてのみ提供され、非排他的かつ非限定的であることが意図される。さらに、開示された種々の部分は、論理的な分割のみを意図しており、必ずしも物理的に別個のハードウェアおよび/またはソフトウェア構成要素を表す必要はない。一部のコンピューティングシステムは、単一の物理メモリデバイス内にメモリ要素を提供することができ、他の場合には、メモリ要素は、多くの物理デバイスにわたって機能的に分散され得る。仮想マシンマネージャまたはハイパーバイザの場合、機能の全部または一部は、開示された論理機能を提供するために仮想化層上で動作するソフトウェアまたはファームウェアの形態で提供され得る。
本明細書で提供される例では、対話は単一のコンピューティングシステムに関して説明され得ることに留意されたい。しかしながら、これは、明確さおよび例示のためだけに行われている。一部の場合では、単一のコンピューティングシステムのみを参照することによって、所与のフローのセットの機能のうちの1または複数を説明することがより容易であり得る。さらに、深層学習およびマルウェア検出のためのシステムは、容易に拡張可能であり、多数の構成要素(例えば、複数のコンピューティングシステム)、ならびにより複雑な/洗練された配置および構成にわたって実装され得る。したがって、提供される例は、無数の他のアーキテクチャに潜在的に適用されるコンピューティングシステムの範囲を限定するべきではなく、またはコンピューティングシステムの広範な教示を妨げるべきではない。
本明細書で使用される場合、反対のことが明示的に述べられない限り、「のうちの少なくとも1つ」という句の使用は、指定された項目、要素、条件、または活動の任意の組み合わせを指す。例えば、「X、Y、およびZのうちの少なくとも1つ」は、以下の、1)少なくとも1つのXであるが、Yではなく、Zではない、2)少なくとも1つのYであるが、Xではなく、Zではない、3)少なくとも1つのZであるが、Xではなく、Yではない、4)少なくとも1つのXおよび少なくとも1つのYであるが、Zではない、5)少なくとも1つのXおよび少なくとも1つのZであるが、Yではない、6)少なくとも1つのYおよび少なくとも1つのZであるが、Xではない、または7)少なくとも1つのX、少なくとも1つのY、および少なくとも1つのZ、のいずれかを意味することが意図される。
さらに、反対のことが明示的に述べられていない限り、「第1」、「第2」、「第3」などの用語は、それらが修飾する特定の名詞(例えば、要素、条件、モジュール、アクティビティ、動作、請求項要素など)を区別することを意図しているが、修飾された名詞の任意の種類の順序、ランク、重要性、時間的シーケンス、または階層を示すことを意図していない。例えば、「第1のX」および「第2のX」は、2つの要素の任意の順序、ランク、重要性、時間的シーケンス、または階層によって必ずしも限定されない2つの別個のX要素を指定することが意図される。
本明細書における「一実施形態(one embodiment)」、「一実施形態(an embodiment)」、「一部の実施形態(some embodiments)」などへの言及は、説明される実施形態(複数可)が特定の特徴、構造、または特性を含み得るが、全ての実施形態がその特定の特徴、構造、または特性を含んでもよく、または必ずしも含まなくてもよいことを示す。さらに、かかる語句は、必ずしも同じ実施形態に言及しているわけではない。
本明細書は、多くの具体的な実装形態の詳細を含むが、これらは、任意の実施形態または請求され得るものの範囲に対する限定として解釈されるべきではなく、むしろ、特定の実施形態に特有の特徴の説明として解釈されるべきである。別個の実施形態の文脈において本明細書に記載されている特定の特徴は、単一の実施形態において組み合わせて実装することもできる。逆に、単一の実施形態の文脈で説明された種々の特徴は、複数の実施形態で別々に、または任意の好適なサブコンビネーションで実装することもできる。さらに、特徴は、特定の組み合わせで作用するものとして上記で説明され、最初にそのように請求されてもよいが、請求される組み合わせからの1または複数の特徴は、一部の場合では、組み合わせから削除することができ、請求される組み合わせは、サブコンビネーションまたはサブコンビネーションの変形形態を対象とすることができる。
同様に、上述の実施形態における種々のシステム構成要素およびモジュールの分離は、全ての実施形態においてかかる分離を必要とすると理解されるべきではない。説明されたプログラム構成要素、モジュール、およびシステムは、概して、単一のソフトウェア製品に一緒に統合され得るか、または複数のソフトウェア製品にパッケージ化され得ることを理解されたい。
以上、本発明の特定の実施形態について説明した。他の実施形態は、本開示の範囲内である。多数の他の変更、置換、変形、変更、および修正が当業者に確認されてもよく、本開示は、添付の特許請求の範囲内に入るような全てのかかる変更、置換、変形、変更、および修正を包含することが意図される。
以下の実施例は、本明細書による実施形態に関する。システム、装置、方法、および機械可読記憶媒体の実施形態は、以下の実施例のうちの1つまたは組み合わせを含み得る。
実施例AA1は、プロセッサであって、第1の回路であって、第1のコードキーを使用して第1のコードイメージを暗号化することと、暗号化された第1のコードイメージを、プロセッサ上で動作するオペレーティングシステムによって第1のコードイメージのためにメモリ内に割り当てられたメモリ領域にロードすることと、第1のコードキーに対応する代替キーをオペレーティングシステムに送信することであって、第1のコードキーは、オペレーティングシステムから隠蔽されている、ことと、を行う、第1の回路と、制御回路を有する命令キャッシュと、命令キャッシュに結合された第2の回路であって、第2の回路は、オペレーティングシステムから代替キーを受信することと、第1のコードイメージを実行して第1のプロセスをインスタンス化するためのオペレーティングシステムからの第1の要求に応答して、ハードウェアキーを使用して第1の暗号化関数を実行して、代替キーから第1のコードキーを生成することと、第1のコードキーを用いて命令キャッシュの制御回路をプログラムして、第1のコードキーを使用して第1のコードイメージが解読されることを可能にすることと、を行う、第2の回路と、を備える、プロセッサを提供する。
実施例AA2は、実施例AA1の主題を含み、代替キーは、第1のコードキーの暗号化バージョンである。
実施例AA3は、実施例AA2の主題を含み、第1の回路は、第1のコードキーを用いて第1のコードイメージを暗号化する前に、ルートキーから第1のコードキーを生成することと、ハードウェアキーを使用して、第1のコードキーに対して第2の暗号化関数を実行して代替キーを生成することであって、第2の暗号化関数は、暗号化アルゴリズムを含む、ことと、をさらに行う。
実施例AA4は、実施例AA1の主題を含み、代替キーは、一意のキー識別子である。
実施例AA5は、実施例AA4の主題を含み、第1の回路は、第1のコードキーを用いて第1のコードイメージを暗号化する前に、一意のキー識別子を生成することと、ハードウェアキーを使用して、一意のキー識別子に対して第1の暗号化関数を実行して第1のコードキーを取得することと、ハードウェアキーを使用して、第1のコードキーに対して第2の暗号化関数を実行して代替キーを生成することであって、第2の暗号化関数は、解読アルゴリズムを含む、ことと、をさらに行う。
実施例AA6は、実施例AA1~AA5のいずれか1つの主題を含み、第1の回路は、第1のコードイメージを暗号化する前に、第1のコードイメージに証明キーを注入することと、第1のコードイメージにアクセスすることを認可されたユーザに証明キーを送信することと、をさらに行う。
実施例AA7は、実施例AA1~AA6のいずれか1つの主題を含み、第1の回路は、第1のコードイメージを暗号化する前に、所与のブロック粒度で第1のコードイメージに複数の無操作命令を注入することをさらに行い、第2の回路は、第1のコードイメージの解読された命令を実行する前に、解読された命令に基づいて第1のコードイメージが修正されたかどうかを判定することをさらに行う。
実施例AA8は、実施例AA1~AA7のいずれか1つの主題を含み、第2の回路は、第1のコードイメージを実行する前に、第1のコードキーが有効であるかどうかを判定することをさらに行い、第1のコードキーが有効であると判定することは、第1のコードキーが第1のプロセスのために確立されたと判定することを含む。
実施例AA9は、実施例AA1~AA8のいずれか1つの主題を含み、第1の回路は、第1のプロセスに関連付けられたデータを暗号化および解読するために使用されるデータキーを確立することをさらに行う。
実施例AA10は、実施例AA1~AA9のいずれか1つの主題を含み、第2の回路は、トウィークに部分的に基づいて、第1のコードイメージを暗号化することをさらに行い、トウィークは、第1のコードイメージが記憶されるメモリ領域に対応する線形アドレスの少なくとも一部を含む。
実施例AA11は、実施例AA10の主題を含み、トウィークは、第1のコードイメージが実行許可を有するかどうかを示す実行許可メタデータをさらに含む。
実施例AA12は、実施例AA1~AA11のいずれか1つの主題を含み、ハードウェアキーは、プロセッサのヒューズに記憶されるか、プロセッサに結合された読取り専用メモリ(ROM)に記憶されるか、またはプロセッサに結合された物理的に複製不可能な関数によって生成される。
実施例AA13は、実施例AA1~AA12のいずれか1つの主題を含み、ハードウェアキーは、プロセッサ上で動作するオペレーティングシステムにアクセス不可能である。
実施例AA14は、実施例AA1~AA13のいずれか1つの主題を含み、第1のコードイメージは、第1のコードイメージをメモリ領域にロードするための初回要求をオペレーティングシステムから受信することに応答して暗号化される。
実施例AA15は、実施例AA1~AA14のいずれか1つの主題を含み、プロセッサは、データキャッシュ制御回路を含むデータキャッシュをさらに有し、第2の回路は、第1のプロセスに関連付けられた第1のデータキーを用いて、データキャッシュ制御回路をプログラムすることを行い、第1のプロセスのためにデータキャッシュに記憶された第1のデータは、データキャッシュ制御回路にプログラムされた第1のデータキーを使用して解読される。
実施例AA16は、実施例AA15の主題を含み、第1のデータは、第1のデータの線形アドレスの少なくとも一部を含むトウィークに部分的に基づいて解読される。
実施例AA17は、実施例AA15~AA16のいずれか1つの主題を含み、第2の回路は、オペレーティングシステムから第2の代替キーを受信することと、ライブラリイメージを実行してライブラリプロセスをインスタンス化するための第1のプロセスからの第2の要求に応答して、ハードウェアキーを使用して第1の暗号化関数を実行して、第2の代替キーからライブラリキーを生成することと、ライブラリキーを用いて命令キャッシュのための制御回路をプログラムして、ライブラリキーを使用してライブラリイメージが解読されることを可能にすることと、を行う。
実施例AA18は、実施例AA17の主題を含み、ライブラリプロセスのためにデータキャッシュに記憶された第2のデータは、データキャッシュ制御回路にプログラムされた第1のデータキーを使用して解読される。
実施例AA19は、実施例AA17~AA18のいずれか1つの主題を含み、第2の回路は、オペレーティングシステムから第3の代替キーを受信することと、第2のコードイメージを実行して第1のプロセスと同時に実行される第2のプロセスをインスタンス化するためのオペレーティングシステムからの第3の要求に応答して、ハードウェアキーを使用して第1の暗号化関数を実行して、第3の代替キーから第2のコードキーを生成することと、第2のコードキーを用いて命令キャッシュの制御回路をプログラムして、第2のコードキーを使用して第2のコードイメージが解読されることを可能にすることと、をさらに行う。
実施例AA20は、実施例AA19の主題を含み、第2の回路は、ライブラリイメージを実行するための第2のプロセスからの第4の要求に応答して、ライブラリキーを用いて命令キャッシュのための制御回路をプログラムして、ライブラリキーを使用してライブラリイメージが解読されることを可能にすることをさらに行う。
実施例AM1は、方法であって、第1のコードキーを使用して第1のコードイメージを暗号化することと、暗号化された第1のコードイメージを、メモリに結合されたプロセッサ上で動作するオペレーティングシステムによって第1のコードイメージのためにメモリ内に割り当てられたメモリ領域にロードすることと、第1のコードキーに対応する代替キーをオペレーティングシステムに送信することであって、第1のコードキーは、オペレーティングシステムから隠蔽されている、ことと、プロセッサにおいて、オペレーティングシステムから代替キーを受信することと、第1のコードイメージを実行して第1のプロセスをインスタンス化するためのオペレーティングシステムからの第1の要求に応答して、ハードウェアキーを使用して第1の暗号化関数を実行して、代替キーから第1のコードキーを生成することと、第1のコードキーを用いてプロセッサ内の命令キャッシュの制御回路をプログラムして、第1のコードキーを使用して第1のコードイメージの解読を可能にすることと、を含む、方法を提供する。
実施例AM2は、実施例AM1の主題を含み、代替キーは、第1のコードキーの暗号化バージョンである。
実施例AM3は、実施例AM2の主題を含み、方法は、第1のコードキーを用いて第1のコードイメージを暗号化する前に、ルートキーから第1のコードキーを生成することと、ハードウェアキーを使用して、第1のコードキーに対して第2の暗号化関数を実行して代替キーを生成することであって、第2の暗号化関数は、暗号化アルゴリズムを含む、ことと、をさらに含む。
実施例AM4は、実施例AM1の主題を含み、代替キーは、一意のキー識別子である。
実施例AM5は、実施例AM4の主題を含み、方法は、第1のコードキーを用いて第1のコードイメージを暗号化する前に、一意のキー識別子を生成することと、ハードウェアキーを使用して、一意のキー識別子に対して第1の暗号化関数を実行して第1のコードキーを取得することと、ハードウェアキーを使用して、第1のコードキーに対して第2の暗号化関数を実行して代替キーを生成することであって、第2の暗号化関数は、解読アルゴリズムを含む、ことと、をさらに含む。
実施例AM6は、実施例AM1~AM5のいずれか1つの主題を含み、方法は、第1のコードイメージを暗号化する前に、第1のコードイメージに証明キーを注入することと、第1のコードイメージにアクセスすることを認可されたユーザに証明キーを送信することと、をさらに含む。
実施例AM7は、実施例AM1~AM6のいずれか1つの主題を含み、方法は、第1のコードイメージを暗号化する前に、所与のブロック粒度で第1のコードイメージに複数の無操作命令を注入することをさらに含み、第2の回路は、第1のコードイメージの解読された命令を実行する前に、解読された命令に基づいて第1のコードイメージが修正されたかどうかを判定することをさらに行う。
実施例AM8は、実施例AM1~AM7のいずれか1つの主題を含み、方法は、第1のコードイメージを実行する前に、第1のコードキーが有効であるかどうかを判定することをさらに含み、第1のコードキーが有効であると判定することは、第1のコードキーが第1のプロセスのために確立されたと判定することを含む。
実施例AM9は、実施例AM1~AM8のいずれか1つの主題を含み、方法は、第1のプロセスに関連付けられたデータを暗号化および解読するためのデータキーを確立することをさらに含む。
実施例AM10は、実施例AM1~AM9のいずれか1つの主題を含み、方法は、トウィークに部分的に基づいて、第1のコードイメージを暗号化することをさらに含み、トウィークは、第1のコードイメージが記憶されるメモリ領域に対応する線形アドレスの少なくとも一部を含む。
実施例AM11は、実施例AM10の主題を含み、トウィークは、第1のコードイメージが実行許可を有するかどうかを示す実行許可メタデータをさらに含む。
実施例AM12は、実施例AM1~AM11のいずれか1つの主題を含み、ハードウェアキーは、プロセッサのヒューズに記憶されるか、プロセッサに結合された読み出し専用メモリ(ROM)に記憶されるか、またはプロセッサに結合された物理的に複製不可能な関数によって生成される。
実施例AM13は、実施例AM1~AM12のいずれか1つの主題を含み、ハードウェアキーは、プロセッサ上で動作するオペレーティングシステムにアクセス不可能である。
実施例AM14は、実施例AM1~AM13のいずれか1つの主題を含み、第1のコードイメージは、第1のコードイメージをメモリ領域にロードするための初回要求をオペレーティングシステムから受信することに応答して暗号化される。
実施例AM15は、実施例AM1~AM14のいずれか1つの主題を含み、方法は、第1のプロセスに関連付けられた第1のデータキーを用いて、データキャッシュに結合されたデータキャッシュ制御回路をプログラムすることをさらに含み、ことであって、第1のプロセスのためにデータキャッシュに記憶された第1のデータは、データキャッシュ制御回路にプログラムされた第1のデータキーを使用して解読される。
実施例AM16は、実施例AM15の主題を含み、第1のデータは、第1のデータの線形アドレスの少なくとも一部を含むトウィークに部分的に基づいて解読される。
実施例AM17は、実施例AM15~AM16のいずれか1つの主題を含み、方法は、オペレーティングシステムから第2の代替キーを受信することと、ライブラリイメージを実行してライブラリプロセスをインスタンス化するための第1のプロセスからの第2の要求に応答して、ハードウェアキーを使用して第1の暗号化関数を実行して、第2の代替キーからライブラリキーを生成することと、ライブラリキーを用いて命令キャッシュのための制御回路をプログラムして、ライブラリキーを使用してライブラリイメージが解読されることを可能にすることと、をさらに含む。
実施例AM18は、実施例AM17の主題を含み、ライブラリプロセスのためにデータキャッシュに記憶された第2のデータは、データキャッシュ制御回路にプログラムされた第1のデータキーを使用して解読される。
実施例AM19は、実施例AM17~AM18のいずれか1つの主題を含み、方法は、オペレーティングシステムから第3の代替キーを受信することと、第2のコードイメージを実行して第1のプロセスと同時に実行される第2のプロセスをインスタンス化するためのオペレーティングシステムからの第3の要求に応答して、ハードウェアキーを使用して第1の暗号化関数を実行して、第3の代替キーから第2のコードキーを生成することと、第2のコードキーを用いて命令キャッシュの制御回路をプログラムして、第2のコードキーを使用して第2のコードイメージの解読を可能にすることと、をさらに含む。
実施例AM20は、実施例AM19の主題を含み、方法は、ライブラリイメージを実行するための第2のプロセスからの第4の要求に応答して、ライブラリキーを用いて命令キャッシュのための制御回路をプログラムして、ライブラリキーを使用してライブラリイメージの解読を可能にすることをさらに含む。
実施例BP1は、プロセッサであって、暗号化データを記憶するメモリ階層と、コアと、回路と、を含み、回路は、符号化ポインタに基づいて暗号化データにアクセスすることと、カウンタモードブロック暗号を使用して暗号化データを解読することと、解読の出力に対して拡散演算を実行することであって、拡散演算は、解読の出力のビットとトウィーク値とを完全に混合する、ことと、によって、暗号化データから平文データを取得し、コアは、平文データを使用して命令を実行する、プロセッサに関する。
実施例BP2は、実施例BP1の主題を含み、トウィーク値は、符号化ポインタ内のフィールドに基づく。
実施例BP3は、実施例BP2の主題を含み、符号化ポインタ内のフィールドは、暗号化データのためのメモリ割り当てサイズを示すサイズフィールドである。
実施例BP4は、実施例BP1~BP3のいずれか1つの主題を含み、拡散演算は、ブロック暗号を含む。
実施例BP5は、実施例BP4の主題を含み、ブロック暗号は、PRINCE暗号またはK暗号のうちの1つである。
実施例BP6は、実施例BP4の主題を含み、拡散演算は、ブロック暗号の出力および第2のトウィーク値に対してXOR演算を実行することをさらに含む。
実施例BP7は、実施例BP1~BP6のいずれか1つの主題を含み、カウンタモードブロック暗号の暗号化データを解読することは、暗号化データおよびキーストリームに対してXOR演算を実行することを含む。
実施例BP8は、実施例BP7の主題を含み、キーストリームは、符号化ポインタおよびキーに基づいて生成される。
実施例BP9は、実施例BP8の主題を含み、キーは、符号化ポインタのフィールドに基づく。
実施例BP10は、実施例BP1~BP9のいずれか1つの主題を含み、暗号化データは、レベル1(L1)キャッシュ、レベル2(キャッシュ)、およびレベル3(L3キャッシュ)のうちの1つに記憶される。
実施例BP11は、実施例BP1~BP10のいずれか1つの主題を含み、符号化ポインタは、暗号化データのためのメモリ割り当てサイズを示すサイズフィールドと、暗号化ビットのセットと、非暗号化ビットのセットとを含む。
実施例BP12は、実施例BP11の主題を含み、回路は、符号化ポインタを復号して暗号化データのメモリアドレスを取得することによって暗号化データにアクセスすることを行い、復号することは、サイズフィールドおよび非暗号化ビットに基づいて符号化ポインタの暗号化ビットを解読することと、解読ビットおよび非暗号化ビットからメモリアドレスを取得することと、メモリアドレスを使用してメモリ階層内の暗号化データにアクセスすることと、を含む。
実施例BP13は、実施例BP1~BP12のいずれか1つの主題を含み、命令を実行することは、平文データに基づいて修正データを生成することを含み、回路は、修正データに対して拡散演算を実行することと、カウンタモードブロック暗号を使用して拡散演算の出力を暗号化することと、暗号化の出力をメモリ階層に記憶することと、をさらに行う。
実施例BP14は、実施例BP13の主題を含み、回路は、修正されたキャッシュラインのグラニュールを示すビットベクトルに基づいて、キャッシュラインのサブセットをメモリ階層に選択的に記憶することを行う。
実施例BM1は、方法であって、プロセッサコアによって、符号化ポインタに基づいて、メモリ階層に記憶された暗号化データにアクセスすることと、カウンタモードブロック暗号を使用して暗号化データを解読することと、解読の出力に対して拡散演算を実行することであって、拡散演算は、解読の出力のビットとトウィーク値とを完全に混合する、ことと、プロセッサコアによって、拡散演算の出力を使用して命令を実行することと、を含む方法に関する。
実施例BM2は、実施例BM1の主題を含み、トウィーク値は、符号化ポインタ内のフィールドに基づく。
実施例BM2は、実施例BM2の主題を含み、符号化ポインタ内のフィールドは、暗号化データのためのメモリ割り当てサイズを示すサイズフィールドである。
実施例BM4は、実施例BM1~BM3のいずれか1つの主題を含み、拡散演算は、ブロック暗号を含む。
実施例BM5は、実施例BM4の主題を含み、ブロック暗号は、PRINCE暗号またはK暗号のうちの1つである。
実施例BM6は、実施例BM4の主題を含み、拡散演算は、ブロック暗号の出力および第2のトウィーク値に対してXOR演算を実行することをさらに含む。
実施例BM7は、実施例BM1~BM6のいずれか1つの主題を含み、カウンタモードブロック暗号の暗号化データを解読することは、暗号化データおよびキーストリームに対してXOR演算を実行することを含む。
実施例BM8は、実施例BM7の主題を含み、キーストリームは、符号化ポインタおよびキーに基づいて生成される。
実施例BM9は、実施例BM8の主題を含み、キーは、符号化ポインタのフィールドに基づく。
実施例BM10は、実施例BM1~BM9のいずれか1つの主題を含み、暗号化データは、レベル1(L1)キャッシュ、レベル2(キャッシュ)、またはレベル3(L3キャッシュ)からアクセスされる。
実施例BM11は、実施例BM1~BM10のいずれか1つの主題を含み、符号化ポインタは、暗号化データのためのメモリ割り当てサイズを示すサイズフィールドと、暗号化ビットのセットと、非暗号化ビットのセットとを含む。
実施例BM12は、実施例BM11の主題を含み、暗号化データにアクセスすることは、符号化ポインタを復号して暗号化データのメモリアドレスを取得することを含み、復号することは、サイズフィールドおよび非暗号化ビットに基づいて符号化ポインタの暗号化ビットを解読することと、解読ビットおよび非暗号化ビットからメモリアドレスを取得することと、メモリアドレスを使用してメモリ階層内の暗号化データにアクセスすることと、を含む。
実施例BM13は、実施例BM1~BM12のいずれか1つの主題を含み、命令を実行することは、拡散演算の出力に基づいて修正されたデータを生成することを含み、方法は、修正データに対して拡散演算を実行することと、カウンタモードブロック暗号を使用して拡散演算の出力を暗号化することと、暗号化の出力をメモリ階層に記憶することと、をさらに含む。
実施例BM14は、実施例BM13の主題を含み、暗号化の出力を記憶することは、修正されたキャッシュラインのグラニュールを示すビットベクトルに基づいて、キャッシュラインのサブセットをメモリ階層に選択的に記憶することを含む。
実施例CA1は、装置、システム、プロセッサ、機械可読媒体、方法、および/またはハードウェアベース、ファームウェアベース、および/またはソフトウェアベースの論理を提供し、実施例A1は、メモリ割り当てセキュリティチェックシステムであって、メモリコントローラ回路と、メモリコントローラ回路に結合され、メモリ回路に結合されたプロセッサ回路と、を備え、プロセッサ回路は、メモリ割り当て要求に応答して、メモリ回路内のオブジェクトのためのメモリ割り当てを取得することを含むメモリ割り当て動作を実行することと、メモリ割り当てのための境界情報およびオブジェクトにアクセスすることが許可されたコンパートメントを識別するコンパートメント識別情報(ID)のうちの少なくとも1つを含む第1のメタデータをメモリ割り当てに割り振ることと、メモリ回路のメモリ位置にオブジェクトを記憶することと、メモリ位置またはメモリ位置とは別個のテーブルのうちの1つにメタデータを記憶することと、プログラムに対応するメモリ動作要求に応答して、メモリ回路内の第1のメタデータの位置を識別するためのデータを含むポインタを使用して第1のメタデータにアクセスすることであって、第1のメタデータは、プログラムから隠されている、ことと、メモリコントローラ回路による第1のメタデータと第2のメタデータとの間の一致の判定に応答して、メモリ動作要求に対応するメモリ動作を実行することと、を行う、メモリ割り当てセキュリティチェックシステムを含む。
実施例CA2は、実施例CA1の主題を含み、所望により、第2のメタデータは、ポインタのメタデータフィールド内にあるか、またはポインタ以外のメモリ位置に記憶されるかのうちの少なくとも1つである。
実施例CA3は、実施例CA1の主題を含み、所望により、メモリ回路は、キャッシュ回路に対応し、メモリ位置は、メモリ回路のキャッシュライン内のスロットを含み、プロセッサ回路は、スロット内にオブジェクトを記憶することと、スロットの中間点アドレスに第1のメタデータを記憶することと、を行い、メモリ位置における第1のメタデータの位置を識別するデータは、中間点アドレスの位置を識別するデータを含む。
実施例CA4は、実施例CA3の主題を含み、所望により、プロセッサ回路は、メモリ動作要求に応答して、ポインタを生成することと、プログラムがオブジェクトにアクセスしている間、メモリ割り当てにわたる物理アドレスまたは仮想アドレスのインクリメントを調整して、第1のメタデータをプログラムから隠すことと、を行う。
実施例CA5は、実施例CA1の主題を含み、所望により、第1のメタデータは、タグデータをさらに含む。
実施例CA6は、実施例CA3の主題を含み、所望により、境界情報は、メモリ位置の上位ビットに対応する中間点アドレスの一方の側のメモリ割り当ての範囲に関する上限情報と、メモリ位置の下位ビットに対応する中間点アドレスの他方の側のメモリ割り当ての範囲に関する下限情報と、を含み、メモリコントローラ回路は、上限情報および下限情報に基づいてメモリ割り当ての境界を決定する。
実施例CA7は、実施例CA1の主題を含み、所望により、メモリコントローラ回路は、メモリ回路を1または複数の2の累乗のメモリ割り当てとして割り当て、メモリ割り当ては、1または複数の2の累乗のメモリ割り当てのうちの1つに対応する。
実施例CA8は、実施例CA1の主題を含み、所望により、メモリコントローラ回路は、コンパートメントIDとポインタに対応する現在のコンパートメントIDとの間に一致が存在するかどうかを判定し、現在のコンパートメントIDは、専用のコンパートメントIDレジスタに記憶される。
実施例CA9は、実施例CA3の主題を含み、所望により、スロット内にオブジェクトを記憶することは、スロットごとに1つのオブジェクトを記憶することを含む。
実施例CA10は、実施例CA1の主題を含み、所望により、メモリコントローラ回路は、第1のメタデータを記憶する前に、第1のメタデータの全部または一部を暗号化する。
実施例CA11は、実施例CA3の主題を含み、所望により、位置を見つけるためのデータは、スロットのサイズに関する情報を含むポインタのサイズフィールド内のデータと、ポインタのアドレスフィールド内のデータと、を含む。
実施例CA12は、実施例CA1の主題を含み、所望により、メモリコントローラ回路は、メモリ動作要求に対応するメモリ動作を実行する前に、オブジェクトの完全性値チェックを実行する。
実施例CA13は、実施例CA3の主題を含み、所望により、メモリ回路は、キャッシュラインとは異なり、スロットのサイズに基づいて複数の専用メタデータテーブルのうちの選択可能な1つのフォーマットで第1のメタデータを記憶するように適合された複数の専用メタデータテーブルを含む。
実施例CA14は、実施例CA1の主題を含み、所望により、メモリ回路は、ページを含むアウトオブバンドテーブルを含み、メモリ位置は、アウトオブバンドテーブルのページに対応し、ページは、同じサイズのメモリ割り当てのみを記憶するものであり、オブジェクトをメモリ回路のメモリ位置に記憶し、メタデータをメモリ位置のうちの1つまたはメモリ位置とは異なるテーブルに記憶することは、オブジェクトおよびメタデータをページに記憶することを含む。
実施例CA15は、実施例CA1の主題を含み、所望により、メタデータの少なくとも一部は、メモリ位置の中間点アドレスについて複製される。
実施例CA16は、実施例CA1の主題を含み、所望により、メモリコントローラ回路は、第2のメタデータが第1のメタデータと一致しないという判定に応答して例外を生成することをさらに行う。
実施例CA17は、実施例CA1の主題を含み、所望により、本明細書では、第1のメタデータは、タグ、暗号キー、キー識別子、トウィーク値、カウンタ値、集約暗号メディアアクセス制御(MAC)値、および誤り訂正符号(ECC)のうちの少なくとも1つである。
実施例CM1は、メモリ割り当てセキュリティチェック方法を含み、方法は、メモリ割り当て要求に応答して、メモリ回路内のオブジェクトのためのメモリ割り当てを取得することを含むメモリ割り当て動作を実行することと、メモリ割り当てのための境界情報およびオブジェクトにアクセスすることが許可されたコンパートメントを識別するコンパートメント識別情報(ID)のうちの少なくとも1つを含む第1のメタデータをメモリ割り当てに割り振ることと、メモリ回路のメモリ位置にオブジェクトを記憶することと、メモリ位置またはメモリ位置とは別個のテーブルのうちの1つにメタデータを記憶することと、プログラムに対応するメモリ動作要求に応答して、メモリ回路内の第1のメタデータの位置を識別するためのデータを含むポインタを使用して第1のメタデータにアクセスすることであって、第1のメタデータは、プログラムから隠されている、ことと、第1のメタデータと第2のメタデータとの間の一致の判定に応答して、メモリ動作要求に対応するメモリ動作を実行することと、を含む。
実施例CM2は、実施例CM1の主題を含み、所望により、第2のメタデータは、ポインタのメタデータフィールド内にあるか、またはポインタ以外のメモリ位置に記憶されるかのうちの少なくとも1つである。
実施例CM3は、実施例CM1の主題を含み、所望により、メモリ回路は、キャッシュ回路に対応し、メモリ位置は、メモリ回路のキャッシュライン内のスロットを含み、方法は、スロット内にオブジェクトを記憶することと、スロットの中間点アドレスに第1のメタデータを記憶することと、をさらに含み、メモリ位置における第1のメタデータの位置を識別するデータは、中間点アドレスの位置を識別するデータを含む。
実施例CM4は、実施例CM3の主題を含み、所望により、メモリ動作要求に応答して、ポインタを生成することと、プログラムがオブジェクトにアクセスしている間、メモリ割り当てにわたる物理アドレスまたは仮想アドレスのインクリメントを調整して、第1のメタデータをプログラムから隠すことと、をさらに含む。
実施例CM5は、実施例CM1の主題を含み、所望により、第1のメタデータは、タグデータをさらに含む。
実施例CM6は、実施例CM3の主題を含み、所望により、境界情報は、メモリ位置の上位ビットに対応する中間点アドレスの一方の側のメモリ割り当ての範囲に関する上限情報と、メモリ位置の下位ビットに対応する中間点アドレスの他方の側のメモリ割り当ての範囲に関する下限情報と、を含み、方法は、上限情報および下限情報に基づいてメモリ割り当ての境界を決定することをさらに含む。
実施例CM7は、実施例CM1の主題を含み、所望により、メモリ回路を1または複数の2の累乗のメモリ割り当てとして割り当てることをさらに含み、メモリ割り当ては、1または複数の2の累乗のメモリ割り当てのうちの1つに対応する。
実施例CM8は、実施例CM1の主題を含み、所望により、コンパートメントIDとポインタに対応する現在のコンパートメントIDとの間に一致が存在するかどうかを判定することであって、現在のコンパートメントIDは、専用のコンパートメントIDレジスタに記憶される、ことをさらに含む。
実施例CM9は、実施例CM3の主題を含み、所望により、スロット内にオブジェクトを記憶することは、スロットごとに1つのオブジェクトを記憶することを含む。
実施例CM10は、実施例CM1の主題を含み、所望により、第1のメタデータを記憶する前に、第1のメタデータの全部または一部を暗号化することをさらに含む。
実施例CM11は、実施例CM3の主題を含み、所望により、位置を見つけるためのデータは、スロットのサイズに関する情報を含むポインタのサイズフィールド内のデータと、ポインタのアドレスフィールド内のデータと、を含む。
実施例CM12は、実施例CM1の主題を含み、所望により、メモリ動作要求に対応するメモリ動作を実行する前に、オブジェクトに対して完全性値チェックを実行することをさらに含む。
実施例CM13は、実施例CM3の主題を含み、所望により、メモリ回路は、キャッシュラインとは異なり、スロットのサイズに基づいて複数の専用メタデータテーブルのうちの選択可能な1つのフォーマットで第1のメタデータを記憶するように適合された複数の専用メタデータテーブルを含む。
実施例CM14は、実施例CM1の主題を含み、所望により、メモリ回路は、ページを含むアウトオブバンドテーブルを含み、メモリ位置は、アウトオブバンドテーブルのページに対応し、ページは、同じサイズのメモリ割り当てのみを記憶するものであり、オブジェクトをメモリ回路のメモリ位置に記憶し、メタデータをメモリ位置のうちの1つまたはメモリ位置とは異なるテーブルに記憶することは、オブジェクトおよびメタデータをページに記憶することを含む。
実施例CM15は、実施例CM1の主題を含み、所望により、第1のメタデータの少なくとも一部は、メモリ位置の中間点アドレスについて複製される。
実施例CM16は、実施例CM1の主題を含み、所望により、第2のメタデータが第1のメタデータと一致しないという判定に応答して例外を生成することをさらに含む。
実施例CM17は、実施例CM1の主題を含み、所望により、本明細書では、第1のメタデータは、タグ、暗号キー、キー識別子、トウィーク値、カウンタ値、集約暗号メディアアクセス制御(MAC)値、および誤り訂正符号(ECC)のうちの少なくとも1つである。
実施例DA1は、コンピューティングシステムの装置を含み、装置は、メモリ要素と、メモリ要素に結合されたコアと、を含み、コアは、暗号符号化されたポインタを検出することと、ポインタからの暗号化アドレスを使用して、暗号化アドレスを解読することなくメモリ要素内のメモリコンテンツにアクセスすることと、メモリコンテンツ上で命令を実行することと、を行う。
実施例DA2は、実施例DA1の主題を含み、メモリコンテンツは、返されたメモリコンテンツに対応し、コアは、命令を実行しながら、暗号化アドレスを解読して、暗号化アドレスから非暗号化アドレスを取得することと、返されたメモリコンテンツと命令に関連付けられた意図されたメモリコンテンツとの間に一致があるかどうかを判定することと、一致が存在しないという判定に応答して、命令の実行を停止することと、をさらに行う。
実施例DA3は、実施例DA2の主題を含み、コアは、解読後に、非暗号化アドレスの変換に対応する物理アドレスを取得することをさらに行い、一致があるかどうかを判定することは、物理アドレスを返されたメモリコンテンツの物理アドレスと比較することを含む。
実施例DA4は、実施例DA2~DA3のいずれか1つの主題を含み、一致が存在するという判定に応答して、返されたメモリコンテンツを、一致が存在するかどうかを判定した後、かつ命令の実行の完了後に、メインメモリにリタイアさせる。
実施例DA5は、実施例DA1の主題を含み、暗号化アドレスは、ポインタ暗号化アドレスであり、暗号化アドレスを解読せずに使用することは、メモリ要素とは別個のアドレス指定可能メモリ(CAM)回路内の情報にアクセスすることであって、情報は、CAM暗号化アドレス-CAM非暗号化アドレスペアを含み、CAM非暗号化アドレスは、CAM暗号化アドレスの非暗号化バージョンに対応する、ことと、CAM暗号化アドレスとポインタ暗号化アドレスとの間に一致が存在するかどうかを判定することと、一致が存在するという判定に応答して、CAM非暗号化アドレスを使用してメモリコンテンツにアクセスすることと、を含む。
実施例DA6は、実施例DA5の主題を含み、CAM非暗号化アドレスを使用してメモリコンテンツにアクセスすることは、CAM非暗号化アドレスの変換に対応するCAM物理アドレスを取得することと、CAM物理アドレスを使用してメモリコンテンツにアクセスすることと、を含む。
実施例DA7は、実施例DA5の主題を含み、コアは、一致が存在しないという判定に応答して、ポインタ暗号化アドレスを解読して、ポインタ暗号化アドレスからポインタ非暗号化アドレスを取得することと、ポインタ非暗号化アドレスを使用してメモリコンテンツにアクセスすることと、をさらに行う。
実施例DA8は、実施例DA7の主題を含み、ポインタ非暗号化アドレスを使用してメモリコンテンツにアクセスすることは、ポインタ非暗号化アドレスの変換に対応するポインタ物理アドレスを取得することと、ポインタ物理アドレスを使用してメモリコンテンツにアクセスすることと、を含む。
実施例DA9は、実施例DA5の主題を含み、コアは、CAM回路内の情報にアクセスすること、またはCAM暗号化アドレスとポインタ暗号化アドレスとの間に一致が存在するかどうかを判定することのうちの少なくとも1つの間に、ポインタ暗号化アドレスを解読して、ポインタ暗号化アドレスからポインタ非暗号化アドレスを取得することと、CAM暗号化アドレスとポインタ暗号化アドレスとの間に一致が存在しないという判定に応答して、ポインタ非暗号化アドレスを使用してメモリコンテンツにアクセスすることと、をさらに行う。
実施例DA10は、実施例DA5の主題を含み、暗号符号化されたポインタは、第2の暗号符号化されたポインタであり、暗号化アドレスは第2の暗号化アドレスであり、コアは、第2の暗号符号化されたポインタを検出する前に、第1の暗号化アドレスを含む第1の暗号符号化されたポインタを検出することと、第1の暗号化アドレスを解読して、第1の暗号化アドレスから第1の非暗号化アドレスを取得することと、第1の暗号化アドレスおよび第1の非暗号化アドレスをCAM回路に記憶することであって、第1の暗号化アドレスおよび第1の非暗号化アドレスは、CAM暗号化アドレス-CAM非暗号化アドレスペアに対応する、ことと、をさらに行う。
実施例DM1は、コンピューティングシステムの装置において実行される方法を含み、方法は、暗号符号化されたポインタを検出することと、ポインタからの暗号化アドレスを使用して、暗号化アドレスを解読することなく装置のメモリ要素内のメモリコンテンツにアクセスすることと、メモリコンテンツ上で命令を実行することと、を含む。
実施例DM2は、実施例DM1の主題を含み、メモリコンテンツは、返されたメモリコンテンツに対応し、方法は、命令を実行しながら、暗号化アドレスを解読して、暗号化アドレスから非暗号化アドレスを取得することと、返されたメモリコンテンツと命令に関連付けられた意図されたメモリコンテンツとの間に一致があるかどうかを判定することと、一致が存在しないという判定に応答して、命令の実行を停止することと、をさらに含む。
実施例DM3は、実施例DM2の主題を含み、方法は、解読後に、非暗号化アドレスの変換に対応する物理アドレスを取得することをさらに含み、一致があるかどうかを判定することは、物理アドレスを返されたメモリコンテンツの物理アドレスと比較することを含む。
実施例DM4は、実施例DM2~DM3のいずれか1つの主題を含み、一致が存在するという判定に応答して、返されたメモリコンテンツを、一致が存在するかどうかを判定した後、かつ命令の実行の完了後に、メインメモリにリタイアさせることをさらに含む。
実施例DM5は、実施例DM1の主題を含み、暗号化アドレスは、ポインタ暗号化アドレスであり、暗号化アドレスを解読せずに使用することは、メモリ要素とは別個のアドレス指定可能メモリ(CAM)回路内の情報にアクセスすることであって、情報は、CAM暗号化アドレス-CAM非暗号化アドレスペアを含み、CAM非暗号化アドレスは、CAM暗号化アドレスの非暗号化バージョンに対応する、ことと、CAM暗号化アドレスとポインタ暗号化アドレスとの間に一致が存在するかどうかを判定することと、一致が存在するという判定に応答して、CAM非暗号化アドレスを使用してメモリコンテンツにアクセスすることと、を含む。
実施例DM6は、実施例DM5の主題を含み、CAM非暗号化アドレスを使用してメモリコンテンツにアクセスすることは、CAM非暗号化アドレスの変換に対応するCAM物理アドレスを取得することと、CAM物理アドレスを使用してメモリコンテンツにアクセスすることと、を含む。
実施例DM7は、実施例DM5の主題を含み、方法は、一致が存在しないという判定に応答して、ポインタ暗号化アドレスを解読して、ポインタ暗号化アドレスからポインタ非暗号化アドレスを取得することと、ポインタ非暗号化アドレスを使用してメモリコンテンツにアクセスすることと、をさらに含む。
実施例DM8は、実施例DM7の主題を含み、ポインタ非暗号化アドレスを使用してメモリコンテンツにアクセスすることは、ポインタ非暗号化アドレスの変換に対応するポインタ物理アドレスを取得することと、ポインタ物理アドレスを使用してメモリコンテンツにアクセスすることと、を含む。
実施例DM9は、実施例DM5の主題を含み、CAM回路内の情報にアクセスすること、またはCAM暗号化アドレスとポインタ暗号化アドレスとの間に一致が存在するかどうかを判定することのうちの少なくとも1つの間に、ポインタ暗号化アドレスを解読して、ポインタ暗号化アドレスからポインタ非暗号化アドレスを取得することと、CAM暗号化アドレスとポインタ暗号化アドレスとの間に一致が存在しないという判定に応答して、ポインタ非暗号化アドレスを使用してメモリコンテンツにアクセスすることと、をさらに含む。
実施例DM10は、実施例DM5の主題を含み、暗号符号化されたポインタは、第2の暗号符号化されたポインタであり、暗号化アドレスは第2の暗号化アドレスであり、方法は、第2の暗号符号化されたポインタを検出する前に、第1の暗号化アドレスを含む第1の暗号符号化されたポインタを検出することと、第1の暗号化アドレスを解読して、第1の暗号化アドレスから第1の非暗号化アドレスを取得することと、第1の暗号化アドレスおよび第1の非暗号化アドレスをCAM回路に記憶することであって、第1の暗号化アドレスおよび第1の非暗号化アドレスは、CAM暗号化アドレス-CAM非暗号化アドレスペアに対応する、ことと、をさらに含む。
実施例DAA1は、コンピューティングシステムの装置を含み、装置は、メモリ要素と、コンテンツアドレス指定可能メモリ(CAM)回路と、メモリ要素およびCAM回路に結合されたコアを、を含み、コアは、暗号化アドレスを含む暗号符号化されたポインタを検出することと、暗号化アドレスを解読して、暗号化アドレスから非暗号化アドレスを取得することと、暗号化アドレスおよび非暗号化アドレスを相関ペアとしてCAM回路に記憶することと、を行う。
実施例DAA2は、実施例DAA1の主題を含み、暗号符号化されたポインタは、第1の暗号符号化されたポインタであり、暗号化アドレスは、第1の暗号化アドレスであり、非暗号化アドレスは、第1の非暗号化アドレスであり、コアは、相関ペアを記憶した後、第2の暗号化アドレスを含む第2の暗号符号化されたポインタを検出することと、CAM内の相関ペアにアクセスし、相関ペアからの第2の暗号化アドレスと第1の暗号化アドレスとの間に一致が存在するかどうかを判定することと、一致が存在するとの判定に応答して、第1の非暗号化アドレスを使用してメモリコンテンツにアクセスし、メモリコンテンツに対して命令を実行することと、をさらに行う。
実施例DAA3は、実施例DAA2の主題を含み、第1の非暗号化アドレスを使用してメモリコンテンツにアクセスすることは、第1の非暗号化アドレスの変換に対応する第1の物理アドレスを取得することと、第1の物理アドレスを使用してメモリコンテンツにアクセスすることと、を含む。
実施例DAA4では、実施例DAA2からDAA3の主題を含み、コアは、一致が存在しないという判定に応答して、第2の暗号化アドレスを解読して、第2の暗号化アドレスから第2の非暗号化アドレスを取得することと、第2の非暗号化アドレスを使用してメモリコンテンツにアクセスすることと、をさらに行う。
実施例DAA5は、実施例DAA4の主題を含み、第2の非暗号化アドレスを使用してメモリコンテンツにアクセスすることは、第2の非暗号化アドレスの変換に対応する第2の物理アドレスを取得することと、第2の物理アドレスを使用してメモリコンテンツにアクセスすることと、を含む。
実施例DAA6は、実施例DAA2の主題を含み、コアは、相関ペアにアクセスすること、または第1の暗号化アドレスと第2の暗号化アドレスとの間に一致が存在するかどうかを判定することのうちの少なくとも1つの間に、第2の暗号化アドレスを解読して、第2の暗号化アドレスから第2の非暗号化アドレスを取得することと、第1の暗号化アドレスと第2の暗号化アドレスとの間に一致が存在しないという判定に応答して、第2の非暗号化アドレスを使用してメモリコンテンツにアクセスすることと、をさらに行う。
実施例DMM1は、コンピューティングシステムの装置において実行される方法を含み、方法は、暗号化アドレスを含む暗号符号化されたポインタを検出することと、暗号化アドレスを解読して、暗号化アドレスから非暗号化アドレスを取得することと、暗号化アドレスおよび非暗号化アドレスを相関ペアとして装置のアドレス指定可能メモリ(CAM)回路に記憶することと、を含む。
実施例DMM2は、実施例DMM1の主題を含み、暗号符号化されたポインタは、第1の暗号符号化されたポインタであり、暗号化アドレスは、第1の暗号化アドレスであり、非暗号化アドレスは、第1の非暗号化アドレスであり、方法は、相関ペアを記憶した後、第2の暗号化アドレスを含む第2の暗号符号化されたポインタを検出することと、CAM内の相関ペアにアクセスし、相関ペアからの第2の暗号化アドレスと第1の暗号化アドレスとの間に一致が存在するかどうかを判定することと、一致が存在するとの判定に応答して、第1の非暗号化アドレスを使用してメモリコンテンツにアクセスし、メモリコンテンツに対して命令を実行することと、をさらに含む。
実施例DMM3は、実施例DMM2の主題を含み、第1の非暗号化アドレスを使用してメモリコンテンツにアクセスすることは、第1の非暗号化アドレスの変換に対応する第1の物理アドレスを取得することと、第1の物理アドレスを使用してメモリコンテンツにアクセスすることと、を含む。
実施例DMM4は、実施例DMM2~DMM3のいずれか1つの主題を含み、方法は、一致が存在しないという判定に応答して、第2の暗号化アドレスを解読して、第2の暗号化アドレスから第2の非暗号化アドレスを取得することと、第2の非暗号化アドレスを使用してメモリコンテンツにアクセスすることと、をさらに含む。
実施例DMM5は、実施例DMM4の主題を含み、第2の非暗号化アドレスを使用してメモリコンテンツにアクセスすることは、第2の非暗号化アドレスの変換に対応する第2の物理アドレスを取得することと、第2の物理アドレスを使用してメモリコンテンツにアクセスすることと、を含む。
実施例DMM6は、実施例DMM2の主題を含み、方法は、相関ペアにアクセスすること、または第1の暗号化アドレスと第2の暗号化アドレスとの間に一致が存在するかどうかを判定することのうちの少なくとも1つの間に、第2の暗号化アドレスを解読して、第2の暗号化アドレスから第2の非暗号化アドレスを取得することと、第1の暗号化アドレスと第2の暗号化アドレスとの間に一致が存在しないという判定に応答して、第2の非暗号化アドレスを使用してメモリコンテンツにアクセスすることと、をさらに含む。
実施例EA1は、コンピューティングシステムの装置を含み、装置は、キャッシュと、ローカルキャッシュに結合されたコアと、を含み、コアは、アクセス要求に対応する第1のセキュリティメタデータと、キャッシュのキャッシュライン内のメモリコンテンツに対応する第2のセキュリティメタデータとの間の競合を検出することと、競合を検出したことに応答して、キャッシュライン内のメモリコンテンツを無効化すること、またはキャッシュライン内のメモリコンテンツを無効化しないことによって競合を無視して、アクセス要求がキャッシュライン内のメモリコンテンツにアクセスすることを許可することのうちの少なくとも1つを実行することと、を行う。
実施例EA2は、実施例EA1の主題を含み、コアは、競合を検出したことに応答して、アクセス要求がコアによってアクセスされているキャッシュラインの同じグラニュールに対するものであるか、コアによってアクセスされているキャッシュラインの異なるグラニュールに対するものであるかを判定することと、アクセス要求が同じグラニュールに対するものであるとの判定に応答して、キャッシュライン内のメモリコンテンツを無効化しないことによって競合を無視し、検出された競合の数が閾値を超えるかどうかを判定するために、そのキャッシュ内のメモリコンテンツをメインメモリに書き戻しすること、またはカウンタを維持することのうちの少なくとも1つを行うことと、アクセス要求が異なるグラニュールに対するものであるとの判定に応答して、キャッシュライン内のメモリコンテンツを無効化しないことによって競合を無視することと、を行う。
実施例EA3は、実施例EA1~EA2のいずれか1つの主題を含み、キャッシュは、互いに比較して異なるセキュリティメタデータで注釈付けされたグラニュールと、複数の他のコアによるグラニュールの同時アクセスおよび変更とをサポートする。
実施例EA4は、実施例EA1~EA2のいずれか1つの主題を含み、コアは、検出された競合の数が閾値を超えるかどうかを判定するためにカウンタを維持し、検出された競合の数が閾値を超えるという判定に応答して、例外ハンドラを呼び出してコア上のソフトウェアの動作に割り込む。
実施例EA5は、実施例EA1~EA4のいずれか1つの主題を含み、アクセス要求は、コアからの読み出し要求であり、キャッシュライン内のメモリコンテンツの物理アドレスは、アクセス要求に関連付けられた物理アドレスに対応し、コアは、競合を検出したことに応答して、キャッシュライン内のメモリコンテンツを無効化することと、キャッシュライン内のメモリコンテンツのメインメモリバージョンを記憶することと、を行う。
実施例EA6は、実施例EA1~EA4のいずれか1つの主題を含み、アクセス要求は、別のコアからの読み出し要求であり、キャッシュライン内のメモリコンテンツの物理アドレスは、アクセス要求に関連付けられた物理アドレスに対応し、コアは、競合を検出したことに応答して、キャッシュライン内のメモリコンテンツを無効化することと、キャッシュライン内のメモリコンテンツのメインメモリバージョンを記憶することと、を行う。
実施例EA7は、実施例EA1~EA4のいずれか1つの主題を含み、アクセス要求は、別のコアからの読み出し要求であり、キャッシュライン内のメモリコンテンツの物理アドレスは、アクセス要求に関連付けられた物理アドレスに対応せず、コアは、競合を検出したことに応答して、キャッシュライン内のメモリコンテンツを無効化することと、キャッシュライン内のメモリコンテンツのメインメモリバージョンを記憶することと、を行う。
実施例EA8は、実施例EA7の主題を含み、キャッシュライン内のメモリコンテンツがメモリコンテンツのメインメモリバージョンと比較して修正される場合、コアは、競合を検出したことに応答して、そのキャッシュ内のメモリコンテンツをメインメモリに書き戻すことと、キャッシュライン内のメモリコンテンツを無効化した後にメインメモリアクセスを再発行することと、キャッシュライン内のメモリコンテンツのメインメモリバージョンを記憶することと、を行う。
実施例EA9は、実施例EA1~EA4のいずれか1つの主題を含み、アクセス要求は、コアからの書き込み要求であり、キャッシュライン内のメモリコンテンツの物理アドレスは、アクセス要求に関連付けられた物理アドレスに対応し、コアは、競合を検出したことに応答して、無効化メッセージを他のコアにブロードキャストして、コンピューティングシステムの他のコアにそれぞれのメモリコンテンツを無効化することと、キャッシュライン内のメモリコンテンツを無効化することと、書き込み要求に基づいて、そのキャッシュを更新されたメモリコンテンツで更新することと、を行う。
実施例EA10は、実施例EA1~EA4のいずれか1つの主題を含み、アクセス要求は、別のコアからの書き込み要求であり、キャッシュライン内のメモリコンテンツの物理アドレスは、アクセス要求に関連付けられた物理アドレスに対応せず、キャッシュライン内のメモリコンテンツは、キャッシュラインに排他的であるか、または該別のコアと共有され、コアは、該別のコアからの修正意図付き読み出し(RWITM)ブロードキャストメッセージを検出することと、RWITMの検出に応答して、キャッシュライン内のメモリコンテンツを無効化することと、を行う。
実施例EA11は、実施例EA1~EA4のいずれか1つの主題を含み、アクセス要求は、別のコアからの書き込み要求であり、キャッシュライン内のメモリコンテンツの物理アドレスは、アクセス要求に関連付けられた物理アドレスに対応せず、キャッシュライン内のメモリコンテンツは、メモリコンテンツのメインメモリバージョンと比較して修正され、コアは、該別のコアからの修正意図付き読み出し(RWITM)ブロードキャストメッセージを検出することと、RWITMメッセージをブロックし、メモリコンテンツをメインメモリに書き戻すことと、キャッシュライン内のメモリコンテンツを無効化することと、を行う。
実施例EA12は、実施例EA1~EA11のいずれか1つの主題を含み、コアは、キャッシュコヒーレンシポリシービットベクトルを記憶するポリシーレジスタを含み、ビットベクトルは、キャッシュラインがそれぞれの別個のセキュリティメタデータに関連付けられたグラニュールに対するアクセス要求をグラニュールごとにサポートするかどうか、またはキャッシュラインがそのセキュリティメタデータに関連付けられたキャッシュライン全体に対するアクセス要求をサポートするかどうかを示すビットと、アクセス要求がコアによってアクセスされているキャッシュラインの同じグラニュールに対するものである場合に、競合の検出に応答して、キャッシュライン内のメモリコンテンツを無効化するか否かを示すビットと、アクセス要求がコアによってアクセスされているキャッシュラインの異なるグラニュールに対するものである場合に、競合の検出に応答して、キャッシュライン内のメモリコンテンツを無効化するか否かを示すビットと、時間ウィンドウ内の過去の不一致の数に関する情報を維持するかどうかを示すビットと、競合の検出に応答して例外ハンドラを呼び出すかどうかを示すためのビットと、あるいは、競合の検出直後に例外ハンドラを呼び出すかどうか、またはカウンタによって維持されるような閾値数の不一致が検出されたときに例外ハンドラを呼び出すかどうかを含む、例外ハンドラを呼び出すためのポリシーを示すビットと、のうちの少なくとも1つを含み、コアは、ビットベクトルによって設定されるキャッシュコヒーレンシポリシーを用いて構成されるようにビットベクトルを復号することをさらに行う。
実施例EA13は、実施例EA1~EA12のいずれか1つの主題を含み、別のコアは、コンピューティングシステム、または無線もしくは有線ネットワークを通じてコンピューティングシステムに通信可能に結合される別のコンピューティングシステムのものである。
実施例EM1は、コンピューティングシステムのプロセッサにおいて実行される方法を含み、方法は、プロセッサのコアへのアクセス要求に対応する第1のセキュリティメタデータと、プロセッサのキャッシュのキャッシュライン内のメモリコンテンツに対応する第2のセキュリティメタデータとの間の競合を検出することであって、キャッシュは、コアに結合されている、ことと、競合を検出したことに応答して、キャッシュライン内のメモリコンテンツを無効化すること、またはキャッシュライン内のメモリコンテンツを無効化しないことによって競合を無視して、アクセス要求がキャッシュライン内のメモリコンテンツにアクセスすることを許可することのうちの少なくとも1つを実行することと、を含む。
実施例EM2は、実施例EM1の主題を含み、競合を検出したことに応答して、アクセス要求がコアによってアクセスされているキャッシュラインの同じグラニュールに対するものであるか、コアによってアクセスされているキャッシュラインの異なるグラニュールに対するものであるかを判定することと、アクセス要求が同じグラニュールに対するものであるとの判定に応答して、キャッシュライン内のメモリコンテンツを無効化しないことによって競合を無視し、検出された競合の数が閾値を超えるかどうかを判定するために、そのキャッシュ内のメモリコンテンツをメインメモリに書き戻しすること、またはカウンタを維持することのうちの少なくとも1つを行うことと、アクセス要求が異なるグラニュールに対するものであるとの判定に応答して、キャッシュライン内のメモリコンテンツを無効化しないことによって競合を無視することと、をさらに含む。
実施例EM3は、実施例EM1~EM2のいずれか1つの主題を含み、キャッシュは、互いに比較して異なるセキュリティメタデータで注釈付けされたグラニュールと、複数の他のコアによるグラニュールの同時アクセスおよび変更とをサポートする。
実施例EM4は、実施例EM1~EM2のいずれか1つの主題を含み、は、検出された競合の数が閾値を超えるかどうかを判定するためにカウンタを維持し、検出された競合の数が閾値を超えるという判定に応答して、例外ハンドラを呼び出してコア上のソフトウェアの動作に割り込むことをさらに含む。
実施例EM5は、実施例EM1~EM4のいずれか1つの主題を含み、アクセス要求は、コアからの読み出し要求であり、キャッシュライン内のメモリコンテンツの物理アドレスは、アクセス要求に関連付けられた物理アドレスに対応し、方法は、競合を検出したことに応答して、キャッシュライン内のメモリコンテンツを無効化することと、キャッシュライン内のメモリコンテンツのメインメモリバージョンを記憶することと、をさらに含む。
実施例EM6は、実施例EM1~EM4のいずれか1つの主題を含み、アクセス要求は、別のコアからの読み出し要求であり、キャッシュライン内のメモリコンテンツの物理アドレスは、アクセス要求に関連付けられた物理アドレスに対応し、方法は、競合を検出したことに応答して、キャッシュライン内のメモリコンテンツを無効化することと、キャッシュライン内のメモリコンテンツのメインメモリバージョンを記憶することと、をさらに含む。
実施例EM7は、実施例EM1~EM4のいずれか1つの主題を含み、アクセス要求は、別のコアからの読み出し要求であり、キャッシュライン内のメモリコンテンツの物理アドレスは、アクセス要求に関連付けられた物理アドレスに対応せず、方法は、競合を検出したことに応答して、キャッシュライン内のメモリコンテンツを無効化することと、キャッシュライン内のメモリコンテンツのメインメモリバージョンを記憶することと、をさらに含む。
実施例EM8は、実施例EM7の主題を含み、キャッシュライン内のメモリコンテンツがメモリコンテンツのメインメモリバージョンと比較して修正される場合、方法は、競合を検出したことに応答して、そのキャッシュ内のメモリコンテンツをメインメモリに書き戻すことと、キャッシュライン内のメモリコンテンツを無効化した後にメインメモリアクセスを再発行することと、キャッシュライン内のメモリコンテンツのメインメモリバージョンを記憶することと、をさらに含む。
実施例EM9は、実施例EM1~EM4のいずれか1つの主題を含み、アクセス要求は、コアからの書き込み要求であり、キャッシュライン内のメモリコンテンツの物理アドレスは、アクセス要求に関連付けられた物理アドレスに対応し、方法は、競合を検出したことに応答して、無効化メッセージを他のコアにブロードキャストして、コンピューティングシステムの他のコアにそれぞれのメモリコンテンツを無効化することと、キャッシュライン内のメモリコンテンツを無効化することと、書き込み要求に基づいて、そのキャッシュを更新されたメモリコンテンツで更新することと、をさらに含む。
実施例EM10は、実施例EM1~EM4のいずれか1つの主題を含み、アクセス要求は、別のコアからの書き込み要求であり、キャッシュライン内のメモリコンテンツの物理アドレスは、アクセス要求に関連付けられた物理アドレスに対応せず、キャッシュライン内のメモリコンテンツは、キャッシュラインに排他的であるか、または該別のコアと共有され、方法は、該別のコアからの修正意図付き読み出し(RWITM)ブロードキャストメッセージを検出することと、RWITMの検出に応答して、キャッシュライン内のメモリコンテンツを無効化することと、をさらに含む。
実施例EM11は、実施例EM1~EM4のいずれか1つの主題を含み、アクセス要求は、別のコアからの書き込み要求であり、キャッシュライン内のメモリコンテンツの物理アドレスは、アクセス要求に関連付けられた物理アドレスに対応せず、キャッシュライン内のメモリコンテンツは、メモリコンテンツのメインメモリバージョンと比較して修正され、方法は、該別のコアからの修正意図付き読み出し(RWITM)ブロードキャストメッセージを検出することと、RWITMメッセージをブロックし、メモリコンテンツをメインメモリに書き戻すことと、キャッシュライン内のメモリコンテンツを無効化することと、をさらに含む。
実施例EM12は、実施例EM1~EM11のいずれか1つの主題を含み、キャッシュコヒーレンシポリシービットベクトルを記憶することをさらに含み、ビットベクトルは、キャッシュラインがそれぞれの別個のセキュリティメタデータに関連付けられたグラニュールに対するアクセス要求をグラニュールごとにサポートするかどうか、またはキャッシュラインがそのセキュリティメタデータに関連付けられたキャッシュライン全体に対するアクセス要求をサポートするかどうかを示すビットと、アクセス要求がコアによってアクセスされているキャッシュラインの同じグラニュールに対するものである場合に、競合の検出に応答して、キャッシュライン内のメモリコンテンツを無効化するか否かを示すビットと、アクセス要求がコアによってアクセスされているキャッシュラインの異なるグラニュールに対するものである場合に、競合の検出に応答して、キャッシュライン内のメモリコンテンツを無効化するか否かを示すビットと、時間ウィンドウ内の過去の不一致の数に関する情報を維持するかどうかを示すビットと、競合の検出に応答して例外ハンドラを呼び出すかどうかを示すためのビットと、あるいは、競合の検出直後に例外ハンドラを呼び出すかどうか、またはカウンタによって維持されるような閾値数の不一致が検出されたときに例外ハンドラを呼び出すかどうかを含む、例外ハンドラを呼び出すためのポリシーを示すビットと、のうちの少なくとも1つを含み、方法は、ビットベクトルによって設定されるキャッシュコヒーレンシポリシーを用いて構成されるようにビットベクトルを復号することをさらに含む。
実施例EM13は、実施例EM1~EM13のいずれか1つの主題を含み、該別のコアは、コンピューティングシステム、または無線もしくは有線ネットワークを通じてコンピューティングシステムに通信可能に結合される別のコンピューティングシステムのものである。
実施例FA1は、装置であって、セキュリティエンジンを実行する第1の回路を含むプロセッサを備え、セキュリティエンジンは、第1のプロセスのためにメモリ内に割り込み記述子を作成することと、第1のプロセスと第2のプロセスとの間の通信に使用される第1の割り込みキーに対応する代替割り込みキーを生成することと、代替割り込みキーを第1のプロセスおよび第2のプロセスに通信することと、割り込み記述子の暗号化メモリアドレスを第2のプロセスに提供することと、を行い、第1の回路は、第2のプロセスから、第1のプロセスに割り込むための第1の割り込み要求を受信することと、第1の割り込み要求によって示される割り込み記述子の暗号化メモリアドレスを、第1の割り込みキーを使用して解読することと、第1の割り込み要求によって割り込み記述子を更新することと、をさらに行う、装置を提供する。
実施例FA2は、実施例FA1の主題を含み、第1の回路は、セキュリティエンジンを実行して、代替割り込みキーを割り込み記述子に記憶することをさらに行う。
実施例FA3は、実施例FA1~FA2のいずれか1つの主題を含み、第1の回路は、セキュリティエンジンを実行して、第2のプロセスのユーザ割り込みターゲットテーブルのためのエントリを作成することであって、エントリは、代替割り込みキーを含む、ことと、ユーザ割り込みターゲットテーブルをエントリで更新することと、をさらに行う。
実施例FA4は、実施例FA3の主題を含み、第1の回路は、セキュリティエンジンを実行して、ユーザ割り込みターゲットテーブルを更新する前に、エントリを第1の割り込みキーで暗号化することをさらに行う。
実施例FA5は、実施例FA4の主題を含み、第1の割り込み要求内の割り込み記述子の暗号化メモリアドレスを解読することは、ユーザ割り込みターゲットテーブル内の暗号化されたエントリへのインデックスを受信することと、インデックスに基づいてユーザ割り込みターゲットテーブルから暗号化されたエントリを取り出すことと、第1の割り込みキーを使用して暗号化されたエントリを解読することと、を含む。
実施例FA6は、実施例FA3~FA5のいずれか1つの主題を含み、エントリは、第2のプロセスが第1のプロセスに割り込むために第1の割り込み要求に含めるための割り込み識別子を含む。
実施例FA7は、実施例FA3~FA6のいずれか1つの主題を含み、エントリは、割り込み記述子のためのメモリ位置の指示をさらに含む。
実施例FA8は、実施例FA1~FA7のいずれか1つの主題を含み、第1の回路は、セキュリティエンジンを実行して、第1の割り込みキーを生成させることと、ハードウェアキーを用いて第1の割り込みキーを暗号化して、代替割り込みキーを生成することと、をさらに行う。
実施例FA9は、実施例FA1~FA8のいずれか1つの主題を含み、第1の回路は、セキュリティエンジンを実行して、一意のキー識別子を代替割り込みキーとして生成させることと、ハードウェアキーを用いて代替割り込みキーを暗号化して、第1の割り込みキーを生成することと、をさらに行う。
実施例FA10は、実施例FA1~FA9のいずれか1つの主題を含み、第1の回路は、セキュリティエンジンを実行して、第1のプロセスのためにメモリ内に第2の割り込み記述子を作成することと、第1のプロセスとハードウェアデバイスとの間の通信に使用される第2の割り込みキーに対応する第2の代替割り込みキーを生成することと、第2の代替割り込みキーを第1のプロセスおよび第2のプロセスに通信することと、第2の割り込み記述子の暗号化メモリアドレスをハードウェアデバイスに提供することと、をさらに行い、第1の回路は、ハードウェアデバイスから、第1のプロセスに割り込むための第2の割り込み要求を受信することと、第2の割り込み要求によって示される第2の割り込み記述子の暗号化メモリアドレスを、第2の割り込みキーを使用して解読することと、第2の割り込み要求によって第2の割り込み記述子を更新することと、をさらに行う。
実施例FA11は、実施例FA1~FA10のいずれか1つの主題を含み、(それらの方法ステップが実施例FA1~FA10の方法ステップと重複しない限り)実施例AA1~AA10のいずれか1つの特徴をさらに含む。
実施例FM1は、方法であって、第1のプロセスのためにメモリ内に割り込み記述子を作成することと、第1のプロセスと第2のプロセスとの間の通信に使用される第1の割り込みキーに対応する代替割り込みキーを生成することと、代替割り込みキーを第1のプロセスおよび第2のプロセスに通信することと、割り込み記述子の暗号化メモリアドレスを第2のプロセスに提供することと、第2のプロセスから、第1のプロセスに割り込むための第1の割り込み要求を受信することと、第1の割り込み要求によって示される割り込み記述子の暗号化メモリアドレスを、第1の割り込みキーを使用して解読することと、第1の割り込み要求によって割り込み記述子を更新することと、を含む、方法を提供する。
実施例FM2は、実施例FM1の主題を含み、代替割り込みキーを割り込み記述子に記憶する。
実施例FM3は、実施例FM1~FM2のいずれか1つの主題を含み、方法は、第2のプロセスのユーザ割り込みターゲットテーブルのためのエントリを作成することであって、エントリは、代替割り込みキーを含む、ことと、ユーザ割り込みターゲットテーブルをエントリで更新することと、をさらに含む。
実施例FM4は、実施例FM3の主題を含み、方法は、ユーザ割り込みターゲットテーブルを更新する前に、エントリを第1の割り込みキーで暗号化することをさらに含む。
実施例FM5は、実施例FM4の主題を含み、第1の割り込み要求内の割り込み記述子の暗号化メモリアドレスを解読することは、ユーザ割り込みターゲットテーブル内の暗号化されたエントリへのインデックスを受信することと、インデックスに基づいてユーザ割り込みターゲットテーブルから暗号化されたエントリを取り出すことと、第1の割り込みキーを使用して暗号化されたエントリを解読することと、を含む。
実施例FM6は、実施例FM3~FM5のいずれか1つの主題を含み、エントリは、第2のプロセスが第1のプロセスに割り込むために第1の割り込み要求に含めるための割り込み識別子を含む。
実施例FM7は、実施例FM3~FM6のいずれか1つの主題を含み、エントリは、割り込み記述子のためのメモリ位置の指示をさらに含む。
実施例FM8は、実施例FM1~FM7のいずれか1つの主題を含み、方法は、第1の割り込みキーを生成させることと、ハードウェアキーを用いて第1の割り込みキーを暗号化して、代替割り込みキーを生成することと、をさらに含む。
実施例FM9は、実施例FM1~FM8のいずれか1つの主題を含み、方法は、一意のキー識別子を代替割り込みキーとして生成させることと、ハードウェアキーを使用して代替割り込みキーを暗号化して第1の割り込みキーを生成することと、をさらに含む。
実施例FM10は、実施例FM1~FM9のいずれか1つの主題を含み、方法は、第1のプロセスのためにメモリ内に第2の割り込み記述子を作成することと、第1のプロセスとハードウェアデバイスとの間の通信に使用される第2の割り込みキーに対応する第2の代替割り込みキーを生成することと、第2の代替割り込みキーを第1のプロセスおよび第2のプロセスに通信することと、第2の割り込み記述子の暗号化メモリアドレスをハードウェアデバイスに提供することと、ハードウェアデバイスから、第1のプロセスに割り込むための第2の割り込み要求を受信することと、第2の割り込み要求内の第2の割り込み記述子の暗号化メモリアドレスを、第2の割り込みキーを使用して解読することと、第2の割り込み要求によって第2の割り込み記述子を更新することと、をさらに含む。
実施例FM11は、実施例FM1~FM10のいずれか1つの主題を含み、実施例AM1~AM10のいずれか1つの方法のステップをさらに含む(これらの方法ステップが、実施例FM1~FM10の方法ステップと重複しない限り)。
コンピュータ関連方法、ミーンズプラスファンクション、および一般的な複数の従属実施例
実施例G1は、実施例AM1~AM20、BM1~BM14、CM1~CM17、DM1~DM10、DMM1~DMM6、EM1~EM13、およびFM1~FM10のいずれか1つの方法の1または複数の要素を実行する手段を備える装置を含む。
実施例G2は、電子デバイスの1または複数のプロセッサによる命令の実行時に、電子デバイスに、実施例AM1~AM20、BM1~BM14、CM1~CM17、DM1~DM10、DMM1~DMM6、EM1~EM13およびFM1~FM10のいずれか1つの方法の1または複数の要素を実行させる命令を含む1または複数の非一時的コンピュータ可読媒体を含む。
実施例G3は、実行されたときに、実施例AM1~AM20、BM1~BM14、CM1~CM17、DM1~DM10、DMM1~DMM6、EM1~EM13、およびFM1~FM10のいずれか1つの方法を実施する機械可読命令を含む機械可読ストレージを含む。
実施例G4は、1または複数のプロセッサと、1または複数のプロセッサによって実行されたときに、1または複数のプロセッサに、実施例AM1~AM20、BM1~BM14、CM1~CM17、DM1~DM10、DMM1~DMM6、EM1~EM13、およびFM1~FM10のいずれか1つの方法を実行させる命令を含む1または複数のコンピュータ可読媒体とを備える装置を含む。
実施例G5は、実施例AA1~AA20、BA1~BA14、およびFA1~FA10のいずれか1項に記載のプロセッサを含み、プロセッサに結合されたメインメモリをさらに含むシステムを含む。
実施例G6は、請求項CA1~CA17、DA1~DA10、DAA1~DAA6、およびEA1~EA13のいずれか1項に記載の装置を含み、装置に結合されたメインメモリをさらに含むシステムを含む。
実施例G7は、実施例G5およびG6のいずれか1つのシステムを含み、入力/出力サブシステムをさらに含む。
実施例G8は、実施例AA1~AA20のいずれか1つの装置を含み、請求項BA1~BA14、CA1~CA17、DA1~DA10、DAA1~DAA6、EA1~EA13、およびFA1~FA10のいずれか1つの特徴をさらに含む(これらの特徴が実施例AA1~AA20の特徴と重複しない限り)。
実施例G9は、実施例AM1~AM20のいずれか1つの方法を含み、さらに、請求項BM1~BM14、CM1~CM17、DM1~DM10、DMM1~DMM6、EM1~EM13、およびFM1~FM10のいずれか1つの特徴を含む(これらの特徴が実施例AA1~AA20の特徴と重複しない限り)。
実施例G10は、実施例AM1~AM20、BM1~BM14、CM1~CM17、DM1~DM10、DMM1~DMM6、EM1~EM13およびFM1~FM10、ならびにKM1~KM7のいずれかにおいて説明される、またはそれらに関連する方法、あるいは本明細書において説明される任意の他の方法またはプロセスの1または複数の要素を実行するための論理、モジュール、または回路を備える装置を含む。
実施例G11は、実施例AM1~AM20、BM1~BM14、CM1~CM17、DM1~DM10、DMM1~DMM6、EM1~EM13、およびFM1~FM10のいずれか、またはそれらの部分もしくは一部に記載される、またはそれらに関連する方法、技術、またはプロセスを含む。
実施例G12は、1または複数のプロセッサと、1または複数のプロセッサによって実行されたときに、実施例AM1~AM20、BM1~BM14、CM1~CM17、DM1~DM10、DMM1~DMM6、EM1~EM13、およびFM1~FM10、またはそれらの一部のいずれかに記載されたまたは関連する方法、技術、またはプロセスを1または複数のプロセッサに実行させる命令を含む1または複数のコンピュータ可読媒体とを備える装置を含む。
実施例G13は、本明細書の実施例のいずれかに記載されるか、もしくは関連する信号、またはその部分もしくは一部を含む。
実施例G14は、本明細書の実施例のいずれかに記載もしくは関連するデータグラム、パケット、フレーム、セグメント、プロトコルデータユニット(PDU)、またはメッセージ、またはそれらの部分もしくは一部、あるいは別様で本開示に記載される他のものを含む。
実施例G15は、本明細書の実施例のいずれかにおいて説明されるか、もしくはそれらに関連するデータ、またはそれらの部分もしくは一部、あるいは本開示において別様で説明されるデータで符号化された信号を含む。
実施例G16は、本明細書の実施例のいずれかに記載もしくは関連するデータグラム、パケット、フレーム、セグメント、プロトコルデータユニット(PDU)、またはメッセージ、またはそれらの部分もしくは一部、あるいは別様で本開示に記載される他のもので符号化された信号を含む。
実施例G17は、コンピュータ可読命令を搬送する電磁信号を含み、1または複数のプロセッサによるコンピュータ可読命令の実行は、1または複数のプロセッサに、実施例AM1~AM20、BM1~BM14、CM1~CM17、DM1~DM10、DMM1~DMM6、EM1~EM13、およびFM1~FM10、またはそれらの一部のいずれかに記載される、またはそれらに関連する方法、技術、またはプロセスを実行させることである。
実施例G18は、命令を含むコンピュータプログラムを含み、処理要素によるプログラムの実行は、処理要素に、実施例AM1~AM20、BM1~BM14、CM1~CM17、DM1~DM10、DMM1~DMM6、EM1~EM13、およびFM1~FM10、またはそれらの一部のいずれかに記載された、またはそれらに関連する方法、技術、またはプロセスを実行させることである。
その他の可能な請求項
(項目1)
プロセッサであって、
第1の回路であって、
第1のコードキーを使用して第1のコードイメージを暗号化することと、
前記暗号化された第1のコードイメージを、前記プロセッサ上で動作するオペレーティングシステムによって前記第1のコードイメージのためにメモリ内に割り当てられたメモリ領域にロードすることと、
前記第1のコードキーに対応する代替キーを前記オペレーティングシステムに送信することであって、前記第1のコードキーは、前記オペレーティングシステムから隠蔽されている、ことと、
を行う、第1の回路と、
制御回路を有する命令キャッシュと、
前記命令キャッシュに結合された第2の回路であって、前記第2の回路は、
前記オペレーティングシステムから前記代替キーを受信することと、
前記第1のコードイメージを実行して第1のプロセスをインスタンス化するための前記オペレーティングシステムからの第1の要求に応答して、ハードウェアキーを使用して第1の暗号化関数を実行して、前記代替キーから前記第1のコードキーを生成することと、
前記第1のコードキーを用いて前記命令キャッシュの前記制御回路をプログラムして、前記第1のコードキーを使用して前記第1のコードイメージが解読されることを可能にすることと、
を行う、第2の回路と、
を備える、プロセッサ。
(項目2)
前記第1の回路は、
前記第1のコードキーを用いて前記第1のコードイメージを暗号化する前に、ルートキーから前記第1のコードキーを生成することと、
前記ハードウェアキーを使用して、前記第1のコードキーに対して第2の暗号化関数を実行して前記代替キーを生成することであって、前記第2の暗号化関数は、暗号化アルゴリズムを含む、ことと、
をさらに行う、項目1に記載のプロセッサ。
(項目3)
前記第1の回路は、
前記第1のコードキーを用いて前記第1のコードイメージを暗号化する前に、前記一意のキー識別子を生成することと、
前記ハードウェアキーを使用して、前記一意のキー識別子に対して前記第1の暗号化関数を実行して前記第1のコードキーを取得することと、
前記ハードウェアキーを使用して、前記第1のコードキーに対して第2の暗号化関数を実行して前記代替キーを生成することであって、前記第2の暗号化関数は、解読アルゴリズムを含む、ことと、
をさらに行う、項目1に記載のプロセッサ。
(項目4)
前記第1の回路は、
前記第1のコードイメージを暗号化する前に、前記第1のコードイメージに証明キーを注入することと、
前記第1のコードイメージにアクセスすることを認可されたユーザに前記証明キーを送信することと、
をさらに行う、項目1に記載のプロセッサ。
(項目5)
前記第2の回路は、
前記第1のコードイメージを実行する前に、前記第1のコードキーが有効であるかどうかを判定することをさらに行い、前記第1のコードキーが有効であると判定することは、前記第1のコードキーが前記第1のプロセスのために確立されたと判定することを含む、
項目1に記載のプロセッサ。
(項目6)
前記第2の回路は、
トウィークに部分的に基づいて、前記第1のコードイメージを暗号化することをさらに行い、前記トウィークは、前記第1のコードイメージが記憶される前記メモリ領域に対応する線形アドレスの少なくとも一部を含む、
項目1に記載のプロセッサ。
(項目7)
前記トウィークは、前記第1のコードイメージが実行許可を有するかどうかを示す実行許可メタデータをさらに含む、項目6に記載のプロセッサ。
(項目8)
前記ハードウェアキーは、前記プロセッサのヒューズに記憶されるか、前記プロセッサに結合された読み出し専用メモリ(ROM)に記憶されるか、または前記プロセッサに結合された物理的に複製不可能な関数によって生成される、項目1から7のいずれか一項に記載のプロセッサ。
(項目9)
前記ハードウェアキーは、前記プロセッサ上で動作する前記オペレーティングシステムにアクセス不可能である、項目1から7のいずれか一項に記載のプロセッサ。
(項目10)
前記プロセッサは、
データキャッシュ制御回路を含むデータキャッシュをさらに有し、前記第2の回路は、
前記第1のプロセスに関連付けられた第1のデータキーを用いて、前記データキャッシュ制御回路をプログラムすることを行い、前記第1のプロセスのために前記データキャッシュに記憶された第1のデータは、前記データキャッシュ制御回路にプログラムされた前記第1のデータキーを使用して解読される、
項目1から7のいずれか一項に記載のプロセッサ。
(項目11)
前記第2の回路は、
前記オペレーティングシステムから第2の代替キーを受信することと、
ライブラリイメージを実行してライブラリプロセスをインスタンス化するための前記第1のプロセスからの第2の要求に応答して、前記ハードウェアキーを使用して前記第1の暗号化関数を実行して、前記第2の代替キーからライブラリキーを生成することと、
前記ライブラリキーを用いて前記命令キャッシュのための前記制御回路をプログラムして、前記ライブラリキーを使用して前記ライブラリイメージが解読されることを可能にすることと、
を行う、項目10に記載のプロセッサ。
(項目12)
前記ライブラリプロセスのために前記データキャッシュに記憶された第2のデータは、前記データキャッシュ制御回路にプログラムされた前記第1のデータキーを使用して解読される、項目11に記載のプロセッサ。
(項目13)
前記第2の回路は、
前記オペレーティングシステムから第3の代替キーを受信することと、
第2のコードイメージを実行して前記第1のプロセスと同時に実行される第2のプロセスをインスタンス化するための前記オペレーティングシステムからの第3の要求に応答して、前記ハードウェアキーを使用して前記第1の暗号化関数を実行して、前記第3の代替キーから第2のコードキーを生成することと、
前記第2のコードキーを用いて前記命令キャッシュの前記制御回路をプログラムして、前記第2のコードキーを使用して前記第2のコードイメージが解読されることを可能にすることと、
をさらに行う、項目11に記載のプロセッサ。
(項目14)
前記第2の回路は、
前記ライブラリイメージを実行するための前記第2のプロセスからの第4の要求に応答して、前記ライブラリキーを用いて前記命令キャッシュのための前記制御回路をプログラムして、前記ライブラリキーを使用して前記ライブラリイメージが解読されることを可能にすること
をさらに行う、項目13に記載のプロセッサ。
(項目15)
方法であって、
第1のコードキーを使用して第1のコードイメージを暗号化することと、
前記暗号化された第1のコードイメージを、前記メモリに結合されたプロセッサ上で動作するオペレーティングシステムによって前記第1のコードイメージのためにメモリ内に割り当てられたメモリ領域にロードすることと、
前記第1のコードキーに対応する代替キーを前記オペレーティングシステムに送信することであって、前記第1のコードキーは、前記オペレーティングシステムから隠蔽されている、ことと、
前記プロセッサにおいて、前記オペレーティングシステムから前記代替キーを受信することと、
前記第1のコードイメージを実行して第1のプロセスをインスタンス化するための前記オペレーティングシステムからの第1の要求に応答して、ハードウェアキーを使用して第1の暗号化関数を実行して、前記代替キーから前記第1のコードキーを生成することと、
前記第1のコードキーを用いて前記プロセッサ内の命令キャッシュの制御回路をプログラムして、前記第1のコードキーを使用して前記第1のコードイメージの解読を可能にすることと、
を含む、方法。
(項目16)
前記第1のコードキーを用いて前記第1のコードイメージを暗号化する前に、ルートキーから前記第1のコードキーを生成することと、
前記ハードウェアキーを使用して、前記第1のコードキーに対して第2の暗号化関数を実行して前記代替キーを生成することであって、前記第2の暗号化関数は、暗号化アルゴリズムを含む、ことと、
をさらに含む、項目15に記載の方法。
(項目17)
トウィークに部分的に基づいて、前記第1のコードイメージを暗号化することをさらに含み、前記トウィークは、前記第1のコードイメージが記憶される前記メモリ領域に対応する線形アドレスの少なくとも一部を含む、
項目15に記載の方法。
(項目18)
前記ハードウェアキーは、前記プロセッサ上で動作する前記オペレーティングシステムにアクセス不可能である、項目15から17のいずれか一項に記載の方法。
(項目19)
前記第1のプロセスに関連付けられた第1のデータキーを用いて、データキャッシュに結合されたデータキャッシュ制御回路をプログラムすることをさらに含み、前記第1のプロセスのために前記データキャッシュに記憶された第1のデータは、前記データキャッシュ制御回路にプログラムされた前記第1のデータキーを使用して解読される、
項目15から18のいずれか一項に記載の方法。
(項目20)
前記オペレーティングシステムから第2の代替キーを受信することと、
ライブラリイメージを実行してライブラリプロセスをインスタンス化するための前記第1のプロセスからの第2の要求に応答して、前記ハードウェアキーを使用して前記第1の暗号化関数を実行して、前記第2の代替キーからライブラリキーを生成することと、
前記ライブラリキーを用いて前記命令キャッシュのための前記制御回路をプログラムして、前記ライブラリキーを使用して前記ライブラリイメージの解読を可能にすることと、
をさらに含む、項目19に記載の方法。
(項目21)
プロセッサによって実行されると、前記プロセッサに動作を実行させる命令を含む機械可読記憶媒体であって、前記動作は、
第1のコードキーを使用して第1のコードイメージを暗号化することと、
前記暗号化された第1のコードイメージを、前記メモリに結合されたプロセッサ上で動作するオペレーティングシステムによって前記第1のコードイメージのためにメモリ内に割り当てられたメモリ領域にロードすることと、
前記第1のコードキーに対応する代替キーを前記オペレーティングシステムに送信することであって、前記第1のコードキーは、前記オペレーティングシステムから隠蔽されている、ことと、
前記プロセッサにおいて、前記オペレーティングシステムから前記代替キーを受信することと、
前記第1のコードイメージを実行して第1のプロセスをインスタンス化するための前記オペレーティングシステムからの第1の要求に応答して、ハードウェアキーを使用して第1の暗号化関数を実行して、前記代替キーから前記第1のコードキーを生成することと、
前記第1のコードキーを用いて前記プロセッサ内の命令キャッシュの制御回路をプログラムして、前記第1のコードキーを使用して前記第1のコードイメージの解読を可能にすることと、
を含む、機械可読記憶媒体。
(項目22)
前記動作は、
前記第1のコードキーを用いて前記第1のコードイメージを暗号化する前に、前記一意のキー識別子を生成することと、
前記ハードウェアキーを使用して、前記一意のキー識別子に対して前記第1の暗号化関数を実行して前記第1のコードキーを取得することと、
前記ハードウェアキーを使用して、前記第1のコードキーに対して第2の暗号化関数を実行して前記代替キーを生成することであって、前記第2の暗号化関数は、解読アルゴリズムを含む、ことと、
をさらに含む、項目21に記載の機械可読記憶媒体。
(項目23)
前記動作は、
前記第1のプロセスに関連付けられた第1のデータキーを用いて、データキャッシュに結合されたデータキャッシュ制御回路をプログラムすることをさらに含み、前記第1のプロセスのために前記データキャッシュに記憶された第1のデータは、前記データキャッシュ制御回路にプログラムされた前記第1のデータキーを使用して解読される、
項目21または22に記載の機械可読記憶媒体。
(項目24)
前記動作は、
前記オペレーティングシステムから第2の代替キーを受信することと、
ライブラリイメージを実行してライブラリプロセスをインスタンス化するための前記第1のプロセスからの第2の要求に応答して、前記第2の代替キーからライブラリキーを生成するために前記ハードウェアキーを使用して前記第1の暗号化関数を実行することと、
前記ライブラリキーを使用して前記ライブラリイメージの解読を可能にするために前記ライブラリキーを用いて前記命令キャッシュのための前記制御回路をプログラムすることと、
をさらに含む、項目23に記載の機械可読記憶媒体。
(項目25)
前記動作は、
前記オペレーティングシステムから第3の代替キーを受信することと、
第2のコードイメージを実行して前記第1のプロセスと同時に実行される第2のプロセスをインスタンス化するための前記オペレーティングシステムからの第3の要求に応答して、前記ハードウェアキーを使用して前記第1の暗号化関数を実行して、前記第3の代替キーから第2のコードキーを生成することと、
前記第2のコードキーを用いて前記命令キャッシュの前記制御回路をプログラムして、前記第2のコードキーを使用して前記第2のコードイメージの解読を可能にすることと、
をさらに含む、項目24に記載の機械可読記憶媒体。
(項目26)
プロセッサであって、
暗号化データを記憶するメモリ階層と、
コアと、
回路と、を備え、前記回路は、
符号化ポインタに基づいて前記暗号化データにアクセスすることと、
カウンタモードブロック暗号を使用して前記暗号化データを解読することと、
前記解読の出力に対して拡散演算を実行することであって、前記拡散演算は、前記解読の前記出力のビットとトウィーク値とを完全に混合する、ことと、によって、
前記暗号化データから平文データを取得し、
前記コアは、前記平文データを使用して命令を実行する、
プロセッサ。
(項目27)
メモリ割り当てセキュリティチェックシステムであって、
メモリコントローラ回路と、
前記メモリコントローラ回路に結合され、メモリ回路に結合されたプロセッサ回路と、を備え、前記プロセッサ回路は、
メモリ割り当て要求に応答して、前記メモリ回路内のオブジェクトのためのメモリ割り当てを取得することを含むメモリ割り当て動作を実行することと、前記メモリ割り当てのための境界情報および前記オブジェクトにアクセスすることが許可されたコンパートメントを識別するコンパートメント識別情報(ID)のうちの少なくとも1つを含む第1のメタデータを前記メモリ割り当てに割り振ることと、前記メモリ回路のメモリ位置に前記オブジェクトを記憶することと、前記メモリ位置または前記メモリ位置とは別個のテーブルのうちの1つに前記メタデータを記憶することと、
プログラムに対応するメモリ動作要求に応答して、前記メモリ回路内の前記第1のメタデータの位置を識別するためのデータを含むポインタを使用して前記第1のメタデータにアクセスすることであって、前記第1のメタデータは、前記プログラムから隠されている、ことと、
前記メモリコントローラ回路による前記第1のメタデータと第2のメタデータとの間の一致の判定に応答して、前記メモリ動作要求に対応するメモリ動作を実行することと、
を行う、メモリ割り当てセキュリティチェックシステム。
(項目28)
コンピューティングシステムの装置であって、前記装置は、
メモリ要素と、
前記メモリ要素に結合されたコアと、を含み、前記コアは、
暗号符号化されたポインタを検出することと、
前記ポインタからの暗号化アドレスを使用して、前記暗号化アドレスを解読することなく前記メモリ要素内のメモリコンテンツにアクセスすることと、
前記メモリコンテンツ上で命令を実行することと、
を行う、装置。
(項目29)
コンピューティングシステムの装置であって、
キャッシュと、
前記キャッシュに結合されたコアと、を含み、前記コアは、
アクセス要求に対応する第1のセキュリティメタデータと、前記キャッシュのキャッシュライン内のメモリコンテンツに対応する第2のセキュリティメタデータとの間の競合を検出することと、
前記競合を検出したことに応答して、前記キャッシュライン内の前記メモリコンテンツを無効化すること、または前記キャッシュライン内の前記メモリコンテンツを無効化しないことによって前記競合を無視して、前記アクセス要求が前記キャッシュライン内の前記メモリコンテンツにアクセスすることを許可することのうちの少なくとも1つを実行することと、
を行う、装置。
(項目30)
装置であって、
セキュリティエンジンを実行する第1の回路を含むプロセッサを備え、前記セキュリティエンジンは、
第1のプロセスのためにメモリ内に割り込み記述子を作成することと、
前記第1のプロセスと第2のプロセスとの間の通信に使用される第1の割り込みキーに対応する代替割り込みキーを生成することと、
前記代替割り込みキーを前記第1のプロセスおよび前記第2のプロセスに通信することと、
前記割り込み記述子の暗号化メモリアドレスを前記第2のプロセスに提供することと、
を行い、
前記第1の回路は、
前記第2のプロセスから、前記第1のプロセスに割り込むための第1の割り込み要求を受信することと、
前記第1の割り込み要求によって示される前記割り込み記述子の前記暗号化メモリアドレスを、前記第1の割り込みキーを使用して解読することと、
前記第1の割り込み要求によって前記割り込み記述子を更新することと、
をさらに行う、装置。

Claims (26)

  1. プロセッサであって、
    第1の回路であって、
    第1のコードキーを使用して第1のコードイメージを暗号化することと、
    前記暗号化された第1のコードイメージを、前記プロセッサ上で動作するオペレーティングシステムによって前記第1のコードイメージのためにメモリ内に割り当てられたメモリ領域にロードすることと、
    前記第1のコードキーに対応する代替キーを前記オペレーティングシステムに送信することであって、前記第1のコードキーは、前記オペレーティングシステムから隠蔽されている、ことと、
    を行う、第1の回路と、
    制御回路を有する命令キャッシュと、
    前記命令キャッシュに結合された第2の回路であって、前記第2の回路は、
    前記オペレーティングシステムから前記代替キーを受信することと、
    前記第1のコードイメージを実行して第1のプロセスをインスタンス化するための前記オペレーティングシステムからの第1の要求に応答して、ハードウェアキーを使用して第1の暗号化関数を実行して、前記代替キーから前記第1のコードキーを生成することと、
    前記第1のコードキーを用いて前記命令キャッシュの前記制御回路をプログラムして、前記第1のコードキーを使用して前記第1のコードイメージが解読されることを可能にすることと、
    を行う、第2の回路と、
    を備える、プロセッサ。
  2. 前記代替キーは、前記第1のコードキーの暗号化バージョンである、請求項1に記載のプロセッサ。
  3. 前記第1の回路は、
    前記第1のコードキーを用いて前記第1のコードイメージを暗号化する前に、ルートキーから前記第1のコードキーを生成することと、
    前記ハードウェアキーを使用して、前記第1のコードキーに対して第2の暗号化関数を実行して前記代替キーを生成することであって、前記第2の暗号化関数は、暗号化アルゴリズムを含む、ことと、
    をさらに行う、請求項2に記載のプロセッサ。
  4. 前記代替キーは、一意のキー識別子である、請求項1から3のいずれか一項に記載のプロセッサ。
  5. 前記第1の回路は、
    前記第1のコードキーを用いて前記第1のコードイメージを暗号化する前に、前記一意のキー識別子を生成することと、
    前記ハードウェアキーを使用して、前記一意のキー識別子に対して前記第1の暗号化関数を実行して前記第1のコードキーを取得することと、
    前記ハードウェアキーを使用して、前記第1のコードキーに対して第2の暗号化関数を実行して前記代替キーを生成することであって、前記第2の暗号化関数は、解読アルゴリズムを含む、ことと、
    をさらに行う、請求項4に記載のプロセッサ。
  6. 方法であって、
    第1のコードキーを使用して第1のコードイメージを暗号化する段階と、
    前記暗号化された第1のコードイメージを、メモリに結合されたプロセッサ上で動作するオペレーティングシステムによって前記第1のコードイメージのために前記メモリ内に割り当てられたメモリ領域にロードする段階と、
    前記第1のコードキーに対応する代替キーを前記オペレーティングシステムに送信する段階であって、前記第1のコードキーは、前記オペレーティングシステムから隠蔽されている、段階と、
    前記プロセッサにおいて、前記オペレーティングシステムから前記代替キーを受信する段階と、
    前記第1のコードイメージを実行して第1のプロセスをインスタンス化するための前記オペレーティングシステムからの第1の要求に応答して、ハードウェアキーを使用して第1の暗号化関数を実行して、前記代替キーから前記第1のコードキーを生成する段階と、
    前記第1のコードキーを用いて前記プロセッサ内の命令キャッシュの制御回路をプログラムして、前記第1のコードキーを使用して前記第1のコードイメージの解読を可能にする段階と、
    を含む、方法。
  7. 前記代替キーは、前記第1のコードキーの暗号化バージョンである、請求項6に記載の方法。
  8. 前記第1のコードキーを用いて前記第1のコードイメージを暗号化する前に、ルートキーから前記第1のコードキーを生成する段階と、
    前記ハードウェアキーを使用して、前記第1のコードキーに対して第2の暗号化関数を実行して前記代替キーを生成する段階であって、前記第2の暗号化関数は、暗号化アルゴリズムを含む、段階と、
    をさらに含む、請求項7に記載の方法。
  9. 前記第1のコードイメージを暗号化する前に、前記第1のコードイメージに証明キーを注入する段階と、
    前記第1のコードイメージにアクセスすることを認可されたユーザに前記証明キーを送信する段階と、
    をさらに含む、請求項6に記載の方法。
  10. 前記第1のコードイメージを暗号化する前に、所与のブロック粒度で前記第1のコードイメージに複数の無操作命令を注入する段階をさらに含み、第2の回路が、
    前記第1のコードイメージの解読された命令を実行する前に、前記解読された命令に基づいて前記第1のコードイメージが修正されたかどうかを判定すること
    をさらに行う、請求項6に記載の方法。
  11. 前記第2の回路は、
    前記第1のコードイメージを実行する前に、前記第1のコードキーが有効であるかどうかを判定する段階をさらに行い、前記第1のコードキーが有効であると判定する段階は、前記第1のコードキーが前記第1のプロセスのために確立されたと判定する段階を含む、
    請求項10に記載の方法。
  12. 前記第1のプロセスに関連付けられたデータを暗号化および解読するためのデータキーを確立する段階
    をさらに含む、請求項6から11のいずれか一項に記載の方法。
  13. トウィークに部分的に基づいて、前記第1のコードイメージを暗号化する段階をさらに含み、前記トウィークは、前記第1のコードイメージが記憶される前記メモリ領域に対応する線形アドレスの少なくとも一部を含む、
    請求項6から11のいずれか一項に記載の方法。
  14. 前記トウィークは、前記第1のコードイメージが実行許可を有するかどうかを示す実行許可メタデータをさらに含む、請求項13に記載の方法。
  15. 前記ハードウェアキーは、前記プロセッサのヒューズに記憶されるか、前記プロセッサに結合された読み出し専用メモリ(ROM)に記憶されるか、または前記プロセッサに結合された物理的に複製不可能な関数によって生成される、請求項6から11のいずれか一項に記載の方法。
  16. 前記ハードウェアキーは、前記プロセッサ上で動作する前記オペレーティングシステムにアクセス不可能である、請求項6から11のいずれか一項に記載の方法。
  17. 前記第1のコードイメージは、前記第1のコードイメージを前記メモリ領域にロードするための初回要求を前記オペレーティングシステムから受信することに応答して暗号化される、請求項6から11のいずれか一項に記載の方法。
  18. 前記第1のプロセスに関連付けられた第1のデータキーを用いて、データキャッシュに結合されたデータキャッシュ制御回路をプログラムする段階をさらに含み、前記第1のプロセスのために前記データキャッシュに記憶された第1のデータは、前記データキャッシュ制御回路にプログラムされた前記第1のデータキーを使用して解読される、
    請求項6から11のいずれか一項に記載の方法。
  19. 前記第1のデータは、前記第1のデータの線形アドレスの少なくとも一部を含むトウィークに部分的に基づいて解読される、請求項18に記載の方法。
  20. 前記オペレーティングシステムから第2の代替キーを受信する段階と、
    ライブラリイメージを実行してライブラリプロセスをインスタンス化するための前記第1のプロセスからの第2の要求に応答して、前記ハードウェアキーを使用して前記第1の暗号化関数を実行して、前記第2の代替キーからライブラリキーを生成する段階と、
    前記ライブラリキーを用いて前記命令キャッシュのための前記制御回路をプログラムして、前記ライブラリキーを使用して前記ライブラリイメージの解読を可能にする段階と、
    をさらに含む、請求項18に記載の方法。
  21. 前記ライブラリプロセスのために前記データキャッシュに記憶された第2のデータは、前記データキャッシュ制御回路にプログラムされた前記第1のデータキーを使用して解読される、請求項20に記載の方法。
  22. 前記オペレーティングシステムから第3の代替キーを受信する段階と、
    第2のコードイメージを実行して前記第1のプロセスと同時に実行される第2のプロセスをインスタンス化するための前記オペレーティングシステムからの第3の要求に応答して、前記ハードウェアキーを使用して前記第1の暗号化関数を実行して、前記第3の代替キーから第2のコードキーを生成する段階と、
    前記第2のコードキーを用いて前記命令キャッシュの前記制御回路をプログラムして、前記第2のコードキーを使用して前記第2のコードイメージの解読を可能にする段階と、
    をさらに含む、請求項20に記載の方法。
  23. 前記ライブラリイメージを実行するための前記第2のプロセスからの第4の要求に応答して、前記ライブラリキーを用いて前記命令キャッシュのための前記制御回路をプログラムして、前記ライブラリキーを使用して前記ライブラリイメージの解読を可能にする段階
    をさらに含む、請求項22に記載の方法。
  24. 実行されると、請求項6から23のいずれか一項に記載の方法を実施する機械可読命令を含むコンピュータプログラム。
  25. 請求項24に記載のコンピュータプログラムを格納する、コンピュータ可読記憶媒体。
  26. 請求項6から23のいずれか一項に記載の方法を実行する手段を備える装置。
JP2022540601A 2020-02-13 2020-12-26 マルチテナント環境における暗号コンピューティング Pending JP2023514484A (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202062976319P 2020-02-13 2020-02-13
US62/976,319 2020-02-13
US202063122444P 2020-12-07 2020-12-07
US63/122,444 2020-12-07
PCT/US2020/067072 WO2021162792A1 (en) 2020-02-13 2020-12-26 Cryptographic computing in multitenant environments

Publications (1)

Publication Number Publication Date
JP2023514484A true JP2023514484A (ja) 2023-04-06

Family

ID=77292605

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022540601A Pending JP2023514484A (ja) 2020-02-13 2020-12-26 マルチテナント環境における暗号コンピューティング

Country Status (5)

Country Link
US (1) US20230027329A1 (ja)
EP (1) EP4104087A4 (ja)
JP (1) JP2023514484A (ja)
CN (1) CN114902225A (ja)
WO (1) WO2021162792A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11216366B2 (en) 2020-02-13 2022-01-04 Intel Corporation Security check systems and methods for memory allocations
US11928472B2 (en) 2020-09-26 2024-03-12 Intel Corporation Branch prefetch mechanisms for mitigating frontend branch resteers
US11748211B2 (en) * 2020-12-17 2023-09-05 EMC IP Holding Company LLC Automatic update of network assets using gold images
US11972126B2 (en) 2021-03-26 2024-04-30 Intel Corporation Data relocation for inline metadata
FR3123469B1 (fr) * 2021-05-26 2023-09-01 Idemia France Contremesures par infection améliorées
US11874776B2 (en) * 2021-06-25 2024-01-16 Intel Corporation Cryptographic protection of memory attached over interconnects
US11954045B2 (en) 2021-09-24 2024-04-09 Intel Corporation Object and cacheline granularity cryptographic memory integrity
US20230098640A1 (en) * 2021-09-26 2023-03-30 Ceremorphic, Inc. Core Processor and Redundant Branch Processor with Control Flow Attack Detection
US11853574B1 (en) * 2022-06-21 2023-12-26 Dell Products L.P. Container flush ownership assignment
CN116185310B (zh) * 2023-04-27 2023-07-14 中茵微电子(南京)有限公司 一种存储器数据读写调度方法及装置
CN116611527B (zh) * 2023-05-22 2023-11-21 北京百度网讯科技有限公司 量子电路处理方法、装置及电子设备

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9374228B2 (en) * 2012-10-12 2016-06-21 International Business Machines Corporation Verifying a geographic location of a virtual disk image executing at a data center server within a data center
US10425229B2 (en) * 2016-02-12 2019-09-24 Microsoft Technology Licensing, Llc Secure provisioning of operating systems
US10326744B1 (en) * 2016-03-21 2019-06-18 EMC IP Holding Company LLC Security layer for containers in multi-tenant environments
US10460124B2 (en) * 2016-06-20 2019-10-29 Netapp, Inc. Per-volume tenant encryption and external key manager
US10708247B2 (en) * 2018-09-27 2020-07-07 Intel Corporation Technologies for providing secure utilization of tenant keys

Also Published As

Publication number Publication date
CN114902225A (zh) 2022-08-12
EP4104087A4 (en) 2024-04-10
WO2021162792A1 (en) 2021-08-19
EP4104087A1 (en) 2022-12-21
US20230027329A1 (en) 2023-01-26

Similar Documents

Publication Publication Date Title
US20230027329A1 (en) Cryptographic computing in multitenant environments
US11416624B2 (en) Cryptographic computing using encrypted base addresses and used in multi-tenant environments
US11403234B2 (en) Cryptographic computing using encrypted base addresses and used in multi-tenant environments
JP7118767B2 (ja) 信頼ドメインを用いた、仮想化されたシステムにおける分離の提供
US11934843B2 (en) Secure arbitration mode to build and operate within trust domain extensions
EP3614284A1 (en) Secure public cloud using extended paging and memory integrity
US11748146B2 (en) Scalable virtual machine operation inside trust domains within the trust domain architecture
US20220382885A1 (en) Cryptographic computing using encrypted base addresses and used in multi-tenant environments
CN111353158A (zh) 信任域架构与多密钥总存储器加密技术在服务器中的共存
US20190147192A1 (en) Method and apparatus for trust domain creation and destruction
KR20170033891A (ko) 보호 영역에서의 메모리 초기화
EP3547200B1 (en) Supporting memory paging in virtualized systems using trust domains
EP4020299A1 (en) Memory address bus protection for increased resilience against hardware replay attacks and memory access pattern leakage

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230901