JP2023086670A - レガシ周辺デバイスを用いた暗号コンピューティング - Google Patents

レガシ周辺デバイスを用いた暗号コンピューティング Download PDF

Info

Publication number
JP2023086670A
JP2023086670A JP2022166576A JP2022166576A JP2023086670A JP 2023086670 A JP2023086670 A JP 2023086670A JP 2022166576 A JP2022166576 A JP 2022166576A JP 2022166576 A JP2022166576 A JP 2022166576A JP 2023086670 A JP2023086670 A JP 2023086670A
Authority
JP
Japan
Prior art keywords
memory
data
keys
encrypted
key
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
JP2022166576A
Other languages
English (en)
Inventor
トリカリノウ アンナ
Trikalinou Anna
バサク アブヒシェク
Basak Abhishek
エイチ. ヴァクハルワラ ルピン
H Vakharwala Rupin
ワイ. カカイヤ ウトカルシュ
Y Kakaiya Utkarsh
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 JP2023086670A publication Critical patent/JP2023086670A/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/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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/04Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
    • H04L63/0428Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
    • 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/82Protecting input, output or interconnection devices
    • G06F21/83Protecting input, output or interconnection devices input devices, e.g. keyboards, mice or controllers thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • 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/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • 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/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation 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/1483Protection against unauthorised use of memory or access to memory by checking the subject access rights using an access-table, e.g. matrix or list
    • 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/606Protecting data by securing the transmission between two devices or processes
    • 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/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6209Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
    • 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/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • 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/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1441Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
    • 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
    • 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/1491Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management

Landscapes

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

Abstract

Figure 2023086670000001
【課題】レガシ周辺デバイスを用いたセキュアメモリアクセスを実現する装置、方法及びプログラムを提供する。
【解決手段】CCIOエージェントは、は、読み取り要求を、相互接続にわたって周辺デバイスから受信する。読み取り要求は、プロセス識別子および暗号化された仮想アドレスを含む。さらに、1つまたは複数のキーを、読み取り要求のプロセス識別子に基づいて取得し、読み取り要求の暗号化された仮想アドレスを1つまたは複数のキーに基づいて復号化し、暗号化されていない仮想アドレスを取得し、暗号化されたデータを、暗号化されていない仮想アドレスに基づいてメモリから取得し、暗号化されたデータを1つまたは複数のキーに基づいて復号化し、平文データを取得し、取得した平文データを、相互接続にわたって周辺デバイスへ送信する。
【選択図】図4

Description

本開示は、概してコンピュータシステムの分野に関し、より詳細には、メモリ動作における暗号コンピューティングに関する。
本開示は、概して、コンピュータシステムの分野に関し、より具体的には、暗号コンピューティングに関する。
暗号コンピューティングは、プロセッサコンポーネントの内部の暗号メカニズムを使用して、コンピューティングシステムにより格納されるデータを保護するコンピュータシステムセキュリティソリューションを指し得る。暗号メカニズムは、キー、トウィークまたは他のセキュリティメカニズムを用いてデータ自体および/またはデータのポインタを暗号化するために用いられ得る。暗号コンピューティングは、コンピューティング業界における重要なトレンドであり、コンピューティング自体の基盤が基本的に暗号化されるようになっている。暗号コンピューティングは、著しい変貌を表しており、システムセキュリティの根本的な再考という、産業界に大きな影響を与えるものである。
本開示ならびにその特徴および利点のより完全な理解を提供するために、同様の参照番号が同様の部分を表す添付図面と併せて、以下の説明を参照する。
本開示の少なくとも1つの実施形態による、セキュアメモリアクセスロジックを用いて構成された例示的なコンピューティングデバイスの簡略ブロック図である。
本開示の少なくとも1つの実施形態による、一般化済みのエンコードされたポインタをそのポインタにより参照されるデータの暗号化へバインドするプロセスを示すフロー図である。
本開示の少なくとも1つの実施形態による、一般化済みのエンコードされたポインタへバインドされたデータを復号化するプロセスを示すフロー図である。
特定の実施形態による、IOデバイスに暗号コンピューティングを提供する例示的なシステムの簡略ブロック図を示す。
本開示の実施形態による読み取りプロセスの例示的なフロー図を示す。
本開示の実施形態による書き込みプロセスの例示的なフロー図を示す。
本開示の実施形態による、CCキーを格納するために用いられ得る1つの例示的な階層構造を示す。
相互接続アーキテクチャを含むコンピューティングシステムの一実施形態を示す。
階層型スタックを含む相互接続アーキテクチャの一実施形態を示す。
CXLリンクを利用した例示的なシステムを示す簡略ブロック図を示す。
CXLリンクを実装するために利用される1つの例示的なポートアーキテクチャを示す簡略ブロック図を示す。
少なくとも1つの実施形態による例示的な暗号コンピューティング環境を示すブロック図である。
少なくとも1つの実施形態による例示的なプロセッサを示すブロック図である。
特定の実施形態による例示的なインオーダパイプラインおよび例示的なレジスタリネーミングアウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
特定の実施形態による、プロセッサに含まれるインオーダキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミングアウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。
少なくとも1つの実施形態による例示的なコンピュータアーキテクチャのブロック図である。
本開示の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令へ変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。
本開示は、暗号コンピューティングの文脈において用いられ得るメモリ書き込み命令を実装するための様々な可能な実施形態または例を提供する。概して、暗号コンピューティングは、プロセッサコンポーネントの内部の暗号メカニズムを計算の一部として使用するコンピュータシステムセキュリティソリューションを指し得る。いくつかの暗号コンピューティングシステムは、暗号化されたメモリアクセス命令を用いた、プロセッサコア内のポインタアドレス(またはそれらの複数の部分)、キー、データおよびコードの暗号化および復号化を実装し得る。したがって、プロセッサコアのマイクロアーキテクチャパイプラインは、そのような暗号化および復号化オペレーションをサポートするように構成され得る。
本願において開示される実施形態は、メモリ内のメモリ領域の暗号分離を実現しつつメモリへの領域外アクセスを事前にブロックすることに関する。暗号分離は、1つまたは複数の異なるパラメータを用いて暗号化されているメモリの異なる領域またはエリアから生じる隔離を指し得る。パラメータは、キーおよび/またはトウィークを含み得る。分離されたメモリ領域は、ソフトウェアエンティティ(例えば、仮想マシン(VM)、アプリケーション、機能、スレッド)のデータ構造および/またはコードを含むオブジェクトから構成され得る。したがって、隔離は、例えば、仮想マシン間の隔離、アプリケーション間の隔離、機能間の隔離、スレッド間の隔離またはデータ構造(例えば、少数のバイト構造)間の隔離など、任意のレベルの粒度でサポートされ得る。
特定のメモリ領域に関連付けられたデータまたはコードの暗号化オペレーションおよび復号化オペレーションは、暗号アルゴリズムにより、そのメモリ領域に関連付けられたキーを用いて実行され得る。少なくともいくつかの実施形態において、暗号アルゴリズムはまた(または代替的に)、トウィークを入力として用い得る。概して、「キー」および「トウィーク」などのパラメータは、入力値を示すように意図されている。入力値は、秘密および/または一意であってよく、かつ、暗号化された出力値または復号化された出力値をそれぞれ生成するために暗号化プロセスまたは復号化プロセスにより用いられるキーは、少なくとも、暗号分離されているメモリ領域またはサブ領域中の一意の値であってよい。キーは、例えば、命令セット拡張を通じてアクセス可能であるプロセッサレジスタまたはプロセッサメモリ(例えば、プロセッサキャッシュ、連想メモリ(CAM)等)のいずれかにおいて維持され得る。トウィークは、エンコードされたポインタ(例えば、内部に埋め込まれたセキュリティコンテキスト情報)から、暗号化/復号化されているデータまたはコードが格納されているか格納されるべきメモリアドレスへ導出されてよく、少なくともいくつかのシナリオでは、メモリ領域に関連付けられたセキュリティコンテキスト情報も含み得る。
読み取りオペレーションと書き込みオペレーションとを含む、本明細書において開示される少なくともいくつかの実施形態は、データまたはコードのメモリ位置のポインタがタグおよび/または他のメタデータ(例えば、セキュリティコンテキスト情報)を用いてエンコードされ、データまたはコード暗号(例えば、暗号化および復号化)アルゴリズムへのトウィーク入力の少なくとも一部分を導出するために用いられ得る、ポインタベースのデータ暗号化および復号化に関する。したがって、暗号アドレシング層とデータ/コード暗号化および復号化との間で、暗号バインドが作成され得る。これにより、境界が暗黙的に実現される。なぜなら、オブジェクト(例えば、データ)の端部を超えて浮遊するポインタが、その隣接するオブジェクトに対して不正確なタグ値を用いる可能性があるからである。1つまたは複数の実施形態において、ポインタは、線形アドレス(本明細書において、「メモリアドレス」とも称される)を用いてメモリ位置およびメタデータへエンコードされる。いくつかのポインタエンコードでは、ポインタ内のアドレスのスライスまたはセグメントが、複数のビットを含み、秘密アドレスキーと、メタデータに基づくトウィークとに基づいて暗号化(復号化)される。他のポインタは、平文メモリアドレス(例えば、線形アドレス)およびメタデータを用いてエンコードされ得る。
メモリ領域の暗号分離を実現しつつ領域外メモリアクセスを事前にブロックするためのいくつかの実施形態を例示する目的で、データ保護およびメモリ安全性に関連するオペレーションおよびアクティビティを最初に理解することが重要である。したがって、以下の基礎的な情報は、本開示が適切に説明され得る基礎として参照され得る。
既知のコンピューティング技術(例えば、プロセス/カーネル分離のためのページテーブル、仮想マシンマネージャ、マネージドランタイム等)は、アーキテクチャおよびメタデータを用いてデータの保護および隔離を提供してきた。例えば、以前のソリューションでは、CPU境界外のメモリコントローラは、メモリの暗号化および復号化を粗い粒度(例えば、アプリケーション)でサポートしており、暗号化されたデータの隔離は、アクセス制御を介して実現されている。典型的には、暗号化エンジンは、CPUコア外にあるメモリコントローラ内に配置される。暗号化されるべく、データは、キーが暗号化に用いられるべきある識別情報と共に、コアからメモリコントローラへ移動する。この識別情報は、物理アドレス内のビットを介して通信される。したがって、追加のキーまたはトウィークを提供するための何らかの逸脱があると、キーまたはトウィークの追加のインデックスまたは識別情報が物理アドレスで搬送されることを可能にするために、(例えば、新しいバスのための)費用が増加したり、追加ビットがアドレスバスから「盗まれ」たりし得る。アクセス制御がメタデータの使用を必要とし得るので、プロセッサは、ルックアップテーブルを用いて、所有権、メモリサイズ、位置、タイプ、バージョン等に関するデータについてのポリシーまたはデータをエンコードする。メタデータを動的に格納およびロードするには、追加のストレージ(メモリオーバーヘッド)が必要であり、性能、特に、細かい粒度のメタデータ(サービスとしての機能(FaaS)のワークロードまたはオブジェクト境界情報に関するものなど)に影響を及ぼす。
メモリコンパートメント(本明細書において、「メモリ領域」とも称される)の暗号分離により、前述の問題(その他)の多くが解決する。暗号分離は、基本的に新しい細かい粒度の保護モデルを用いて、プロセス分離、ユーザ空間およびカーネルのレガシモードを冗長にし得る。メモリコンパートメントの暗号分離では、保護は暗号であり、様々なタイプのプロセッサユニット(例えば、プロセッサおよびアクセラレータ)が同様に、秘密キー(ならびに任意選択的にトウィークおよび暗号)を利用して、アクセス制御および分離をますます高い粒度で提供する。実際には、隔離は、1バイトのオブジェクトと同じくらい小さいメモリコンパートメントから仮想マシン全体のためのデータおよびコードと同じくらい大きいメモリコンパートメントについてサポートされ得る。少なくともいくつかのシナリオでは、暗号分離によって、個々のアプリケーションまたは機能が境界になり、各アドレス空間が複数の別個のアプリケーションまたは機能を含むことが可能になり得る。オブジェクトは、ポインタを介して、隔離境界にわたって選択的に共有され得る。これらのポインタは、暗号エンコードまたは非暗号エンコードであり得る。さらに、1つまたは複数の実施形態において、暗号化および復号化は、プロセッサコア内部、コア境界内で発生する。L1キャッシュまたはメインメモリなど、コアの外部のメモリユニットにデータが書き込まれる前に暗号化が発生するので、キーまたはトウィーク情報を伝達するのに物理アドレスからビットを「盗む」必要はなく、任意で、多数のキーおよび/またはトウィークがサポートされ得る。
暗号分離は、暗号アドレシング層という概念を活用している。暗号アドレシング層において、プロセッサは、暗黙的および/または明示的なメタデータ(例えば、コンテキスト情報)および/または(例えば、トウィーク可能ブロック暗号(例えば、暗号文の盗みを用いたXOR-暗号化-XORベースのトウィーク済みコードブックモード(XTS))のトウィークとしての)メモリアドレス自体のスライスに基づいて、ソフトウェア割り当てメモリアドレス(線形/仮想アドレス空間内のアドレスであり、「ポインタ」とも称される)の少なくとも一部分を暗号化する。本明細書において用いられる場合、「トウィーク」は、とりわけ、通常の平文または暗号文の入力およびキーに加えて、ブロック暗号への追加の入力を指し得る。トウィークは、値を表す1つまたは複数のビットを含む。1つまたは複数の実施形態では、トウィークは、ブロック暗号のための初期化ベクトル(IV)の全部または一部を構成し得る。結果として生じる暗号エンコードされたポインタは、メモリアドレスの暗号化された部分(またはスライス)と、エンコードされたメタデータ(例えば、コンテキスト情報)のいくつかのビットとを含み得る。アドレスの復号化が実行される場合において、トウィークを作成するために用いられる情報(例えば、暗黙的および/または明示的なメタデータ、メモリアドレスの平文アドレススライス等)が、メモリアロケータによるメモリアドレスの元の割り当て(例えば、ソフトウェア割り当て方法)に対応しているときは、プロセッサは、このアドレスを正しく復号化できる。そうでなければ、ランダムアドレス結果が、障害を引き起こし、プロセッサによって捕捉されることになる。
これらの暗号エンコードされたポインタ(またはそれらの複数の部分)がさらに、プロセッサにより、参照したデータ(暗号エンコードされたポインタにより参照されたデータ)を暗号化/復号化するために用いられるデータ暗号化暗号へのトウィークとして用いられることで、暗号アドレシング層とデータ/コード暗号化との間に暗号バインドが作成され得る。いくつかの実施形態において、暗号エンコードされたポインタが復号化およびデコードされ、線形アドレスが取得され得る。線形アドレス(またはそれらの複数の部分)は、プロセッサにより、データ暗号化暗号へのトウィークとして用いられ得る。代替的に、いくつかの実施形態において、メモリアドレスは、暗号化されないことがあるが、ポインタは、依然として、ポインタの中の一意の値を表すいくつかのメタデータを用いてエンコードされ得る。本実施形態において、エンコードされたポインタ(またはその一部分)は、プロセッサにより、データ暗号化暗号へのトウィークとして用いられ得る。メモリアドレスを暗号化/復号化するためにブロック暗号への入力として用いられるトウィークは、本明細書では「アドレストウィーク」とも称されることに留意されたい。同様に、データを暗号化/復号化するためにブロック暗号への入力として用いられるトウィークは、本明細書では「データトウィーク」とも称される。
暗号エンコードされたポインタ(または非暗号エンコードされたポインタ)は、暗号化を介してデータを分離するために用いられ得るが、データの完全性は、依然として脆弱であり得る。例えば、暗号分離データの不正なアクセスにより、データが暗号化されているかどうかにかかわらずそのデータが格納されているメモリ領域が破損し、ビクティムが知らないうちにデータコンテンツが破損し得る。データ完全性は、メッセージ認証コード(MAC)のような完全性検証(またはチェック)メカニズムを用いて、もしくは復号化されたデータのエントロピー計測に暗黙的に基づいて、またはその両方により、サポートされ得る。一例において、MACコードは、キャッシュラインごとに格納されてよく、データが破損しているかどうかを判定するためにキャッシュラインが読み取られる度に評価されてよい。しかしながら、そのようなメカニズムでは、不正なメモリアクセスを事前に検出しない。代わりに、メモリの破損(例えば、境界越えアクセス)が、事前方式(例えば、データが書き込まれる前)ではなく、反応性方式(例えば、データが書き込まれた後)で検出され得る。例えば、メモリの破損は、ソフトウェアエンティティに対して境界越えであるメモリ位置において実行される書き込みオペレーションにより生じ得る。暗号コンピューティングでは、書き込みオペレーションは、メモリ位置について無効であるキーおよび/またはトウィークを用い得る。後続の読み取りオペレーションがそのメモリ位置で実行される場合、読み取りオペレーションは、破損したメモリに対して異なるキーを用いて破損を検出し得る。例えば、読み取りオペレーションが有効キーおよび/またはトウィークを用いる場合、取得されたデータは、適切に復号化せず、例えばメッセージ認証コードを用いて、または復号化されたデータにおける高水準のエントロピー(ランダム性)を検出することにより、破損が検出され得る(暗黙完全性)。
図1は、本開示の少なくとも1つの実施形態によるセキュアメモリアクセスロジックを用いてメモリ領域の暗号分離を実現しつつ、メモリへの領域外アクセスに対する事前ブロック技術を実装するための例示的なコンピューティングデバイス100の簡略ブロック図である。示される例において、コンピューティングデバイス100は、アドレス暗号ユニット104と、暗号コンピューティングエンジン108と、セキュアメモリアクセスロジック106と、キャッシュ170(例えば、L1キャッシュ、L2キャッシュ)および補助プロセッサメモリ180などのメモリコンポーネントとを有するプロセッサ102を含む。セキュアメモリアクセスロジック106は、様々なキーおよび/またはトウィークに基づいてデータを暗号化し、次に、読み取るべき暗号化されたデータおよび復号化ロードロジック160を格納し、次に、これらのキーおよび/またはトウィークに基づいてデータを復号化するための暗号化ストアロジック150を含む。暗号コンピューティングエンジン108は、様々なキーおよび/またはトウィークに基づいて、ロードオペレーションのためにデータまたはコードを復号化し、様々なキーおよび/またはトウィークに基づいて、格納オペレーションのためにデータまたはコードを暗号化するように構成され得る。アドレス暗号ユニット104は、線形アドレスにより参照されるデータまたはコードへのポインタ内でエンコードされた線形アドレス(または線形アドレスの一部分)を復号化および暗号化するように構成され得る。
プロセッサ102は、レジスタ110も含む。レジスタ110は、例えば、汎用レジスタおよび専用レジスタ(例えば、制御レジスタ、モデル固有レジスタ(MSR)等)を含み得る。レジスタ110は、メモリアドレスへのエンコードされたポインタ114など、1つまたは複数の実施形態において用いられ得る様々なデータを含み得る。エンコードされたポインタは、暗号エンコードまたは非暗号エンコードされ得る。エンコードされたポインタは、いくつかのメタデータを用いてエンコードされている。エンコードされたポインタが暗号エンコードである場合、アドレスビットの少なくとも一部分(またはスライス)が暗号化される。いくつかの実施形態において、アドレス、コードおよび/またはデータの暗号化および復号化に用いられるキー116が、レジスタ110に格納され得る。いくつかの実施形態において、アドレス、コードおよび/またはデータの暗号化および復号化に用いられるトウィーク117が、レジスタ110に格納され得る。
プロセッサキー105(本明細書において、「ハードウェアキー」とも称される)は、様々な暗号化、復号化および/またはハッシュ演算に用いられてもよく、プロセッサ102のハードウェア内のセキュアキーとして構成されてもよい。プロセッサキー105は、例えば、ヒューズに格納されてもよく、リードオンリメモリに格納されてもよく、ランダム化されたビットの一貫したセットを生成する物理的に複製不可能な関数により生成されてもよい。概して、プロセッサキー105は、ハードウェア内で構成され、プロセッサ102には認識されているが、特権ソフトウェア(例えば、オペレーティングシステム、仮想マシンマネージャ(VMM)、ファームウェア、システムソフトウェア等)または非特権ソフトウェアには認識されていないか、そうでなければ利用可能ではないことがある。
セキュアメモリアクセスロジック106は、エンコードされたポインタ114により指し示されるメモリ位置を保護し、かつ/またはこれらのメモリ位置にアクセス制御を提供すべく、エンコードされたポインタ114についてのメタデータを利用する。このメタデータは、エンコードされたポインタ114の未使用ビット(例えば、64ビットアドレスの非標準ビット、または、メタデータを格納するためにアドレス範囲の対応する上位ビットが用いられ得るように例えばオペレーティングシステムにより確保されたアドレスセット範囲)へエンコードされる。例えば、セキュアメモリアクセスロジック106によって提供される、メタデータのエンコードおよびデコードにより、エンコードされたポインタ114が操作されてバッファオーバーフローを引き起こすのを防ぐことができ、かつ/または、プログラムコードが、アクセスするための許可を有していないメモリにアクセスするのを防ぐことができる。ポインタは、メモリが(例えば、オペレーティングシステムによりヒープに)割り当てられ、複数の異なる態様のいずれかで実行プログラムに提供される場合にエンコードされてよく、これには、malloc、allocもしくはnewなどの関数の使用によるもの、または、ローダを介して暗黙的に行われるもの、もしくはコンパイラによりメモリを静的に割り当てること等を含む。結果として、割り当てられたメモリを指し示すエンコードされたポインタ114は、アドレスメタデータを用いてエンコードされる。
アドレスメタデータは、有効範囲メタデータを含み得る。有効範囲メタデータは、エンコードされたポインタ114の値を実行プログラムが有効範囲内で操作することを可能にするが、エンコードされたポインタ114を用いて有効範囲を超えてメモリがアクセスされる場合、エンコードされたポインタ114を破損させてしまう。代替的に、または追加的に、有効範囲メタデータは、有効コード範囲、例えば、プログラムコードがアクセスすることを許可されるメモリの範囲を識別するために用いられ得る(例えば、エンコードされた範囲情報は、レジスタ上に明示的な範囲を設定するために用いられ得る)。アドレスメタデータにおいてエンコードされ得る他の情報は、エンコードされたポインタ114に関するアクセス(または許可)制約(例えば、参照されたメモリを書き込んだり、実行したり、読み取ったりするために、エンコードされたポインタ114が用いられ得るかどうか)を含む。
少なくともいくつかの他の実施形態において、例えば、平文アドレススライスのサイズ(例えば、エンコードされたポインタに埋め込まれたメモリアドレスの平文スライスにおけるビットの数)、メモリ割り当てサイズ(例えば、エンコードされたポインタにより参照される割り当てられたメモリのバイト)、データまたはコードのタイプ(例えば、プログラム言語により定義される、データまたはコードのクラス)、許可(例えば、エンコードされたポインタの読み取り、書き込みおよび実行の許可)、データまたはコードの(例えば、データまたはコードが格納されている)位置、ポインタ自体が格納されるメモリ位置、データまたはコードの所有権、エンコードされたポインタのバージョン(例えば、新しく割り当てられたメモリについてエンコードされたポインタが作成される度にインクリメントされるシーケンス番号により、参照された割り当て済みメモリの現在の所有権が時間内に決定する)、(例えば、エンコードされたポインタとの関連付けのために生成される)ランダム化されたビットのタグ、特権レベル(例えば、ユーザまたはスーパバイザ)、暗号コンテキスト識別子(または暗号コンテキストID)(例えば、エンコードされたポインタの各々のランダム化されたか確定的に一意な値)等、他のメタデータ(またはコンテキスト情報)が、エンコードされたポインタ114の未使用ビットにエンコードされ得る。例えば、一実施形態において、アドレスメタデータは、エンコードされたポインタ内の平文アドレススライスのサイズをエンコードするサイズメタデータを含み得る。サイズメタデータは、実行プログラムにより修正され得るエンコードされたポインタ内の最下位ビットの数を指定し得る。サイズメタデータは、プログラムにより要求されるメモリの量に依存する。したがって、16バイトが要求される場合、サイズメタデータは、4(またはポインタの5つの上位ビットにおける00100)としてエンコードされ、ポインタの4つの最下位ビットは、メモリの要求された16バイトのアドレス指定を可能にするための修正可能ビットとして指定される。いくつかの実施形態において、アドレスメタデータは、敵対者に対してタグを予測不可能にするために、エンコードされたポインタに関連付けられたランダム化されたビットのタグを含み得る。敵対者は、ポインタにより参照されるメモリにアクセスできるようにタグ値の推測を試みることがあるが、タグ値をランダム化することにより、バージョン値を生成するための決定論的アプローチと比較して、敵対者がこの値を成功裏に推測する可能性を低くし得る。いくつかの実施形態において、ポインタは、バージョン番号(または他の確定的に異なる値)を含み得る。バージョン番号により、ランダム化されたタグ値の代わりに、またはそれに加えて、参照された割り当て済みデータの現在の所有権が時間内に決定する。例えばバージョン番号を生成するためのアルゴリズムが予測可能であるせいで敵対者がメモリ領域の現在のタグ値またはバージョン番号を推測することができる場合でも、敵対者は、後にポインタのその部分を復号化するために用いられるキーにアクセスできないことに起因して、ポインタの対応する暗号化された部分を依然として正しく生成できないことがある。
例示的なセキュアメモリアクセスロジック106は、プロセッサ命令の一部として(例えば、プロセッサ命令セットアーキテクチャの一部として)、またはマイクロコード(例えば、リードオンリメモリに格納され、プロセッサ102により直接実行される命令)として具現化される。他の実施形態において、セキュアメモリアクセスロジック106の複数の部分は、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせとして(例えば、コンピューティングデバイス100の特権システムコンポーネント142により実行されるプログラミングコードとして)具現化され得る。一例において、復号化ロードロジック160および暗号化ストアロジック150は、それぞれの復号化オペレーションおよび暗号化オペレーションを実行してメモリコンパートメントを分離する新しいロード(読み取り)および格納(書き込み)プロセッサ命令の一部として具現化される。復号化ロードロジック160および暗号化ストアロジック150は、新しいプロセッサ命令(例えば、MOVなどの既存のプロセッサ命令に相当するものであってよい)を利用したメモリ読み取りオペレーションおよびメモリ書き込みオペレーションに関し、エンコードされたメタデータを検証する。メモリから値を読み取る(例えば、ロード)ために、またはメモリに値を書き込む(例えば、格納)ために、汎用レジスタがメモリアドレスとして用いられる。
セキュアメモリアクセスロジック106は、例えばコンピューティングデバイス100によるプログラム(ユーザ空間アプリケーション134など)の実行中に、エンコードされたポインタ「インライン」のためのセキュリティを提供するために、コンピューティングデバイス100により実行可能である。本明細書において用いられる場合、「間接アドレス」および「ポインタ」という用語は各々、とりわけ、他のデータまたは命令が格納されるメモリ位置のアドレス(例えば、仮想アドレスまたは線形アドレス)を指し得る。一例では、データまたはコードが格納されるメモリ位置のエンコードメモリアドレスを格納するレジスタは、ポインタとして動作し得る。したがって、エンコードされたポインタ114は、例えば、データポインタ(データの位置を指す)、コードポインタ(実行可能コードの位置を指す)、命令ポインタまたはスタックポインタとして具現化され得る。本明細書において用いられる場合、「コンテキスト情報」は、「メタデータ」を含み、とりわけ、例えば、有効データ範囲、有効コード範囲、ポインタアクセス許可、平文アドレススライスのサイズ(例えば、ビットのべき乗としてエンコードされる)、メモリ割り当てサイズ、データまたはコードのタイプ、データまたはコードの位置、データまたはコードの所有権、ポインタのバージョン、ランダム化されたビットのタグ、バージョン、ソフトウェアの特権レベル、暗号コンテキスト識別子等、エンコードされたポインタ114についての、またはエンコードされたポインタ114に関連する情報を指し得る。
本明細書において用いられる場合、「メモリアクセス命令」は、とりわけ、「MOV」命令もしくは「ロード」命令、または、1つの格納位置、例えばメモリにおいてデータを読み取らせるか、コピーさせるか、そうでなければアクセスさせ、別の格納位置、例えばレジスタへ移動させる任意の他の命令(「メモリは、メインメモリまたはキャッシュ、例えばランダムアクセスメモリの形態を指すことがあり、「レジスタ」は、プロセッサレジスタ、例えばハードウェアを指すことがある)、もしくは、メモリにアクセスするかメモリを操作する任意の命令を指し得る。また、本明細書において用いられる場合、「メモリアクセス命令」は、とりわけ、「MOV」命令もしくは「STORE」命令、または、1つの格納位置、例えばレジスタにおいてデータを読み取らせるか、コピーさせるか、そうでなければアクセスさせ、別の格納位置、例えばメモリへ移動させる任意の他の命令、もしくは、メモリにアクセスするかメモリを操作する任意の命令を指し得る。
アドレス暗号ユニット104は、エンコードされたポインタのアドレスデコードを実行してデータ(またはコード)のメモリ位置の線形アドレスを取得するためのロジック(回路を含む)を含み得る。キーに、かつ/またはエンコードされたポインタから導出されるトウィークに少なくとも部分的に基づいて必要とされる場合(例えば、エンコードされたポインタが線形アドレスの暗号化された部分を含む場合)、アドレスデコードは、復号化を含み得る。同じキーに、かつ/またはエンコードされたポインタをデコードするために用いられる同じトウィークに少なくとも部分的に基づいて必要とされる場合、アドレス暗号ユニット104は、エンコードされたポインタのアドレスエンコード(暗号化を含む)を実行するためのロジック(回路を含む)も含み得る(例えば、エンコードされたポインタは、線形アドレスの暗号化された部分を含む)。アドレスエンコードは、ポインタの非標準ビットでメタデータを格納することも含み得る。アドレスエンコードおよびアドレスデコード(アドレスまたはその複数の部分の暗号化および復号化を含む)など、様々なオペレーションが、アドレス暗号ユニット104に関連付けられたプロセッサ命令、他のプロセッサ命令、もしくは、別個の命令もしくは一連の命令、もしくは、オペレーティングシステムカーネルもしくは仮想マシンモニタなどの特権システムコンポーネントによって実行される高レベルコードにより、または命令セットエミュレータとして、実行され得る。以下でより詳細に説明するように、アドレスエンコードロジックおよびアドレスデコードロジックは各々、エンコードされたポインタ114をメモリの割り当て/アクセスのレベルで保護すべく、メタデータ(例えば、有効範囲、許可メタデータ、サイズ(べき乗)、メモリ割り当てサイズ、タイプ、位置、所有権、バージョン、タグ値、特権レベル(例えば、ユーザまたはスーパバイザ)、暗号コンテキストID等のうちの1つまたは複数)と、秘密キー(例えば、キー116)とを用いて、エンコードされたポインタ114上で動作する。
暗号化ストアロジック150および復号化ロードロジック160は、暗号コンピューティングエンジン108を用いて、エンコードされたポインタ114により参照されるメモリ位置に格納されるか、エンコードされたポインタ114により参照されるメモリ位置から取得されるデータに対し、暗号オペレーションを実行できる。暗号コンピューティングエンジン108は、エンコードされたポインタからデータ(またはコード)のメモリ位置へ導出されるトウィークに少なくとも部分的に基づいてデータ(またはコード)復号化を実行するための、かつ、エンコードされたポインタからデータ(またはコード)のメモリ位置へ導出されるトウィークに少なくとも部分的に基づいてデータ(またはコード)暗号化を実行するためのロジック(回路を含む)を含み得る。エンジン108の暗号オペレーションは、エンコードされたポインタ114により参照されるメモリ位置におけるデータまたはコードを、エンコードされたポインタにデータ/コードの暗号化および復号化をバインドすることにより保護すべく、エンコードされたポインタ114の少なくとも一部分(またはエンコードされたポインタから生成される線形アドレス)を含むトウィーク、および/または秘密キー(例えば、キー116)を用い得る。
アドレス暗号ユニット104および暗号コンピューティングエンジン108を実装するために、様々な異なる暗号アルゴリズムが用いられ得る。概して、128ビットブロック暗号を用いる高度暗号化規格(AES)が、数十年にわたってデータ暗号化の要であり続けてきた。一方、メモリアドレス指定は今日、典型的には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演算または他のより複雑なロジックを用いて)キーストリームが入力ブロックと組み合わされて、暗号化または復号化されたブロックが生成される。いくつかのブロック暗号では、キーストリームは、暗号化または復号化を実行するために、次のブロック暗号へ供給される。
図1における例示的なエンコードされたポインタ114は、レジスタ110(例えば、プロセッサ102の汎用レジスタ)として具現化される。例示的な秘密キー116は、特権システムコンポーネント142のキー作成モジュール148により生成され、レジスタ110(例えば、専用レジスタ、またはモデル固有レジスタ(MSR)などの制御レジスタ)のうちの1つ、プロセッサ102により読み取り可能な別のメモリ位置(例えば、ファームウェア、データストレージデバイス126のセキュア部分等)、外部メモリ、または本明細書において説明される機能を実行するのに適した別の形態のメモリに格納され得る。いくつかの実施形態において、アドレス、データまたはコードを暗号化するためのトウィークは、暗号化または復号化のためにリアルタイムで計算され得る。トウィーク117は、レジスタ110、プロセッサ102により読み取り可能な別のメモリ位置(例えば、ファームウェア、データストレージデバイス126のセキュア部分等)、外部メモリ、または本明細書において説明される機能を実行するのに適した別の形態のメモリに格納され得る。いくつかの実施形態において、秘密キー116および/またはトウィーク117は、補助プロセッサメモリ180などのプロセッサによってのみ読み取り可能な位置に格納される。少なくとも1つの実施形態において、補助プロセッサメモリ180は、新しいキャッシュまたは連想メモリ(CAM)として実装され得る。1つまたは複数の実装において、補助プロセッサメモリ180は、キー、および潜在的にトウィーク、認証および/またはコンテキストIDなど、暗号分離に関連する情報を格納するために用いられ得る。
また、秘密キーは、ポインタ内でエンコードされたアドレス部分(またはスライス)を暗号化/復号化するために、生成され、暗号エンコードされたポインタに関連付けられ得る。これらのキーは、暗号エンコードされたポインタにより参照されるデータ(またはコード)に対してデータ(またはコード)の暗号化オペレーション/復号化オペレーションを実行するために、ポインタに関連付けられたキーと同じであってもよく、異なっていてもよい。説明を容易にするために、「秘密アドレスキー」または「アドレスキー」という用語は、メモリアドレスの暗号化オペレーションおよび復号化オペレーションにおいて用いられる秘密キーを指すために用いられることがあり、「秘密データキー」または「データキー」という用語は、データまたはコードを暗号化および復号化するためのオペレーションにおいて用いられる秘密キーを指すために用いられることがある。
メモリ割り当てオペレーション(例えば、「malloc」)において(またはその間)、メモリ割り当てロジック146は、バッファのためにメモリの範囲を割り当て、メタデータ(例えば、範囲、許可メタデータ、サイズ(べき乗)、メモリ割り当てサイズ、タイプ、位置、所有権、バージョン、タグ、特権レベル、暗号コンテキストID等のうちの1つまたは複数)と共にポインタを返す。一例において、メモリ割り当てロジック146は、エンコードされたポインタ114内の(例えば、暗号化前の未使用/非標準ビット)平文範囲情報をエンコードするか、メタデータを1つまたは複数の別個のパラメータとして命令に供給し得る。これらのパラメータは、範囲、コード許可情報、サイズ(べき乗)、メモリ割り当てサイズ、タイプ、位置、所有権、バージョン、タグ、特権レベル(例えば、ユーザまたはスーパバイザ)、暗号コンテキストIDまたはそれらの何らかの好適な組み合わせを指定する。例示的に、メモリ割り当てロジック146は、特権システムコンポーネント142のメモリマネージャモジュール144において具現化され得る。メモリ割り当てロジック146は、メタデータ(例えば、範囲、許可メタデータ、サイズ(べき乗)、メモリ割り当てサイズ、タイプ、位置、所有権、バージョン、タグ値、特権レベル、暗号コンテキストID、それらの何らかの好適な組み合わせ等)を用いてポインタ114がエンコードされるようにする。メタデータは、エンコードされたポインタ114の未使用部分(例えば、64ビットアドレスの非標準ビット)に格納され得る。いくつかのメタデータまたはメタデータの組み合わせについて、ポインタ114は、メタデータまたはメタデータの組み合わせのサイズに適応するように、より大きいアドレス空間(例えば、128ビットアドレス、256ビットアドレス)においてエンコードされ得る。
有効範囲メタデータを決定するために、例示的な範囲ルールロジックが、有効範囲メタデータを選択して、エンコードされたポインタ114により参照されるバッファのサイズの上限を示す。アドレス調整ロジックは、範囲メタデータにより示される有効範囲内のメモリ位置をエンコードされたポインタ114が参照しない限りアドレス範囲内のアドレスの上位アドレスビット(例えば、最上位ビット)が変化しないように、必要に応じて有効範囲メタデータを調整する。これにより、エンコードされたポインタ114は、(例えば、算術演算を実行するソフトウェア等により)操作されることが可能になる。ただし、これらの操作によってエンコードされたポインタ114が有効範囲外にならない(例えば、バッファをオーバーフローしない)限りにおいてである。
一実施形態において、有効範囲メタデータは、暗号化されるエンコードされたポインタ114の部分(またはスライス)を選択するために用いられる。他の実施形態において、暗号化されるエンコードされたポインタ114のスライスは、事前に知られていてよい(例えば、上位32ビット、下位32ビット等)。以下でさらに説明されるように、エンコードされたポインタ114の選択されたスライス(および、いくつかの実施形態において、調整)は、秘密アドレスキー(例えば、キー116)と、任意選択的にアドレストウィークとを用いて暗号化される。メモリアクセスオペレーション(例えば、読み取りオペレーション、書き込みオペレーションまたは実行オペレーション)時に、以前にエンコードされたポインタ114がデコードされる。これを行うために、以下でさらに説明されるように、エンコードされたポインタ114の暗号化されたスライス(および、いくつかの実施形態において、暗号化された調整)は、秘密アドレスキー(例えば、キー116)と、アドレストウィーク(暗号化においてアドレストウィークが用いられた場合)とを用いて復号化される。
エンコードされたポインタ114の元の値(例えば、真の元の線形メモリアドレス)を復元すべく、エンコードされたポインタ114は、適切なオペレーションに基づいて、その元の(例えば、カノニカル)形式へ戻される。少なくとも1つの可能な実施形態においてこれを行うために、エンコードされたポインタ114の未使用ビットにおいてエンコードされたアドレスメタデータは削除される(例えば、未使用ビットをその元の形式へ戻す)。エンコードされたポインタ114が正常にデコードされた場合、メモリアクセスオペレーションは、正常に完了する。しかしながら、エンコードされたポインタ114が、その値が範囲メタデータにより示される有効範囲外になる(例えば、バッファをオーバーフローさせる)ように(例えば、ソフトウェアにより不注意で、または攻撃者により)操作された場合、エンコードされたポインタ114は、ポインタ内の暗号化されたアドレスビットに対して実行される復号化プロセスの結果として破損し得る。破損したポインタは、障害(例えば、アドレスがページ構造/ページテーブルから存在するようにマッピングされない場合、一般的な保護障害、またはページ障害)を引き起こす。障害の発生につながり得る1つの条件は、疎なアドレス空間である。このシナリオでは、破損したアドレスが、マッピングされていないページに到着して、ページ障害を発生させる可能性がある。破損したアドレスがマッピングページに到着した場合でも、そのメモリ領域の許可されたトウィークまたは初期化ベクトルは、この場合にトウィークまたは初期化ベクトルとして供給され得る破損したアドレスとは異なっている可能性が高い。このように、コンピューティングデバイス100は、バッファオーバーフロー攻撃および同様のエクスプロイトに対するエンコードされたポインタセキュリティを提供する。
ここで図1をより詳細に参照すると、コンピューティングデバイス100は、本明細書において説明される機能を実行するための任意のタイプの電子デバイスとして具現化され得る。例えば、コンピューティングデバイス100は、限定されることはないが、スマートフォン、タブレットコンピュータ、ウェアラブルコンピューティングデバイス、ラップトップコンピュータ、ノートブックコンピュータ、モバイルコンピューティングデバイス、携帯電話、ハンドセット、メッセージングデバイス、車両テレマティクスデバイス、サーバコンピュータ、ワークステーション、分散コンピューティングシステム、マルチプロセッサシステム、消費者向け電子デバイス、および/または本明細書において説明される機能を実行するように構成された任意の他のコンピューティングデバイスとして具現化され得る。図1に示されるように、例示的なコンピューティングデバイス100は、セキュアメモリアクセスロジック106と、アドレス暗号ユニット104と、暗号コンピューティングエンジン108とを用いて具現化された少なくとも1つのプロセッサ102を含む。
コンピューティングデバイス100は、メモリ120、入力/出力サブシステム124、データストレージデバイス126、ディスプレイデバイス128、ユーザインタフェース(UI)サブシステム130、通信サブシステム132、アプリケーション134、特権システムコンポーネント142(例示的に、メモリマネージャモジュール144およびキー作成モジュール148を含む)も含む。他の実施形態において、コンピューティングデバイス100は、モバイルコンピュータおよび/または据え置き型コンピュータ(例えば、様々なセンサおよび入力/出力デバイス)内で一般的に見られるものなど、他のまたは追加のコンポーネントを含み得る。加えて、いくつかの実施形態では、例示的なコンポーネントのうちの1つまたは複数は、別のコンポーネントに組み込まれてもよく、そうでなければ別のコンポーネントの一部分を形成してもよい。コンピューティングデバイス100のコンポーネントの各々は、ソフトウェア、ファームウェア、ハードウェア、またはソフトウェアとハードウェアとの組み合わせとして具現化され得る。
プロセッサ102は、本明細書において説明される機能を実行することが可能な任意のタイプのプロセッサとして具現化され得る。例えば、プロセッサ102は、シングルコアまたはマルチコアの中央処理装置((CPU))、マルチCPUプロセッサもしくは処理/制御回路、または複数の多様な処理ユニットもしくは回路(例えば、CPUおよびグラフィクス処理ユニット(GPU)等)として具現化され得る。
プロセッサメモリは、コアの内部かつコア境界の外部に提供され得る。例えば、レジスタ110は、コア内に含まれてよく、データまたはコードおよびアドレスの暗号化および復号化のためのエンコードされたポインタ(例えば、114)、秘密キー116および場合によってはトウィーク117を格納するために用いられてよい。プロセッサ102は、例えばL1キャッシュおよび/またはL2キャッシュであってよいキャッシュ170も含み得る。キャッシュ170では、プロセッサ102によりフェッチされることを予期してメモリ120から取得される場合にデータが格納される。
プロセッサは、コア境界の外部の補助プロセッサメモリ180も含み得る。補助プロセッサメモリ180は、ソフトウェアにより直接アクセス可能ではない専用キャッシュであってよい。1つまたは複数の実施形態において、補助プロセッサメモリ180は、パラメータとその関連するメモリ領域との間のマッピング188を格納し得る。例えば、キーが、マッピング188内の対応するメモリ領域にマッピングされ得る。いくつかの実施形態において、キーとのペアであるトウィークも、マッピング188に格納され得る。他の実施形態において、マッピング188は、ソフトウェアにより管理され得る。
1つまたは複数の実施形態において、暗号コンピューティングにおいてキーを保護するためのハードウェアトラステッドエンティティ190およびキー管理ハードウェア192が、コンピューティングデバイス100において構成され得る。ハードウェアトラステッドエンティティ190およびキー管理ハードウェア192は、論理的に別個のエンティティであってもよく、1つの論理的かつ物理的なエンティティとして組み合わされてもよい。このエンティティは、コード、データもしくはポインタキーが復号化され得る暗号化されたキー、またはコード、データもしくはポインタキーが導出され得る一意のキーの形態でコードおよびデータキーを提供するように構成される。ハードウェアトラステッドエンティティ190およびキー管理ハードウェア192は、回路、ファームウェア、ソフトウェアまたはそれらの任意の好適な組み合わせとして具現化され得る。少なくともいくつかの実施形態において、ハードウェアトラステッドエンティティおよび/またはキー管理ハードウェア190は、プロセッサ102の一部を形成し得る。少なくともいくつかの実施形態において、ハードウェアトラステッドエンティティおよび/またはキー管理ハードウェア190は、特権状態で実行されるトラステッドファームウェアコンポーネントとして具現化され得る。ハードウェアトラステッドエンティティの例は、必ずしも限定されるわけではないが、Intel(登録商標)トラステッドドメイン拡張等、Intel(登録商標)集約セキュリティマネジメントエンジン(CSME)、埋め込みセキュリティプロセッサ、他のトラステッドファームウェア等のセキュア調停モード(SEAM)を含み得る。
概して、キーおよびトウィークは、特定のニーズおよびアーキテクチャ実装に基づいて、任意の好適な方式で処理され得る。第1の実施形態では、キーおよびトウィークの両方が暗黙的であってよく、したがって、プロセッサにより管理される。本実施形態において、キーおよびトウィークは、プロセッサにより内部で、またはセキュアプロセッサにより外部で生成され得る。第2の実施形態では、キーおよびトウィークの両方が明示的であり、したがって、ソフトウェアにより管理される。本実施形態において、キーおよびトウィークは、キーとトウィークとを参照するオペランドを含む命令を用いて、命令呼び出し時間で参照される。本実施形態において、キーおよびトウィークは、レジスタまたはメモリに格納され得る。第3の実施形態では、キーは、プロセッサにより管理されてよく、一方、トウィークは、ソフトウェアにより管理されてよい。
コンピューティングデバイス100のメモリ120は、本明細書において説明される機能を実行することが可能な任意のタイプの揮発性メモリもしくは不揮発性メモリまたはデータストレージとして具現化され得る。
揮発性メモリは、媒体により格納されているデータの状態を維持するために電力を必要とする記憶媒体である。揮発性メモリの例は、ダイナミックランダムアクセスメモリ(DRAM)またはスタティックランダムアクセスメモリ(SRAM)など、様々なタイプのランダムアクセスメモリ(RAM)を含み得る。メモリ内で用いられ得る1つの特定のタイプのDRAMが、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)である。特定の実施形態において、メモリ120のDRAMは、JESD79F for Double Data Rate(DDR)SDRAM、JESD79-2F for DDR2 SDRAM、JESD79-3F for DDR3 SDRAMまたはJESD79-4A for DDR4 SDRAM(これらの規格は、www.jedec.orgにおいて入手可能である)など、電子デバイス技術合同協議会(JEDEC)により公表されている規格に準拠している。不揮発性メモリは、媒体により格納されるデータの状態を維持するのに電力を必要としない記憶媒体である。不揮発性メモリの非限定的な例は、ソリッドステートメモリ(平面もしくは3DのNANDフラッシュメモリ、またはNORフラッシュメモリなど)、3Dクロスポイントメモリ、カルコゲナイド相変化材料(例えば、カルコゲナイドガラス)を用いたメモリデバイス、バイトアドレス指定可能不揮発性メモリデバイス、強誘電体メモリ、シリコン酸化膜窒化膜酸化膜シリコン(SONOS)メモリ、ポリマーメモリ(例えば、強誘電体ポリマーメモリ)、強誘電体トランジスタランダムアクセスメモリ(Fe-TRAM)、オボニックメモリ、ナノワイヤメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、他の様々なタイプの不揮発性ランダムアクセスメモリ(RAM)および磁気ストレージメモリのいずれかまたは組み合わせを含み得る。
いくつかの実施形態において、メモリ120は、デュアルインラインメモリモジュール(DIMM)など、1つまたは複数のメモリモジュールを含む。いくつかの実施形態において、メモリ120は、プロセッサ102を含む集積回路チップとは異なる1つまたは複数の集積回路チップ上に位置してもよく、プロセッサ102としての同じ集積回路チップ上に位置してもよい。メモリ120は、任意の好適なタイプのメモリを備え得ると共に、様々な実施形態において、メモリの特定の速度または技術に限定されない。
動作中、メモリ120は、コンピューティングデバイス100の動作中に用いられる様々なデータおよびコードならびにオペレーティングシステム、アプリケーション、プログラム、ライブラリおよびドライバを格納し得る。メモリ120は、プロセッサ102により実行される命令のシーケンスを含むデータおよび/またはコードを格納し得る。
メモリ120は、例えばI/Oサブシステム124を介して、プロセッサ102に通信可能に結合されている。I/Oサブシステム124は、プロセッサ102、メモリ120、およびコンピューティングデバイス100の他のコンポーネントとの入力/出力オペレーションを容易にするための回路および/またはコンポーネントとして具現化され得る。例えば、I/Oサブシステム124は、メモリコントローラハブ、入力/出力制御ハブ、ファームウェアデバイス、通信リンク(例えば、ポイントツーポイントリンク、バスリンク、ワイヤ、ケーブル、ライトガイド、プリント回路基板トレース等)、および/または入力/出力オペレーションを容易にするための他のコンポーネントおよびサブシステムとして具現化されてもよく、そうでなければそれらを含んでよい。いくつかの実施形態において、I/Oサブシステム124は、システムオンチップ(SoC)の一部分を形成してもよく、プロセッサ102、メモリ120、および/またはコンピューティングデバイス100の他のコンポーネントと共に単一の集積回路チップ上に組み込まれてもよい。
データストレージデバイス126は、例えば、メモリデバイスおよび回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブ、フラッシュメモリもしくは他のリードオンリメモリ、リードオンリメモリとランダムアクセスメモリとの組み合わせであるメモリデバイス、または他のデータストレージデバイスなど、データの短期または長期の格納のために構成された任意のタイプの物理デバイスまたは複数のデバイスとして具現化され得る。様々な実施形態において、メモリ120は、データストレージデバイス126に格納されたデータをキャッシュし得る。
ディスプレイデバイス128は、液晶ディスプレイ(LCD)、発光ダイオード(LED)、プラズマディスプレイ、陰極線管(CRT)または他のタイプのディスプレイデバイスなど、デジタル情報を表示することが可能な任意のタイプのディスプレイとして具現化され得る。いくつかの実施形態において、ディスプレイデバイス128は、コンピューティングデバイス100とのユーザインタラクションを可能にするために、タッチスクリーンまたは他のヒューマンコンピュータインタフェースデバイスに結合され得る。ディスプレイデバイス128は、ユーザインタフェース(UI)サブシステム130の一部であってよい。ユーザインタフェースサブシステム130は、物理もしくは仮想コントロールボタンもしくはキー、マイク、スピーカ、単方向もしくは双方向スチルカメラおよび/またはビデオカメラならびに/または他のものを含む、コンピューティングデバイス100とのユーザインタラクションを容易にするための複数の追加のデバイスを含み得る。ユーザインタフェースサブシステム130は、コンピューティングデバイス100を伴う様々な他の形態のヒューマンインタラクションを検出、キャプチャおよび処理するように構成され得るモーションセンサ、近接センサおよび視標追跡デバイスなどのデバイスも含み得る。
コンピューティングデバイス100は、コンピューティングデバイス100と他の電子デバイスとの間の通信を可能にし得る任意の通信回路、デバイスまたはそれらの集合として具現化され得る通信サブシステム132をさらに含む。通信サブシステム132は、任意の1つまたは複数の通信技術(例えば、無線通信または有線通信)と、関連付けられたプロトコル(例えば、イーサネット(登録商標)、Bluetooth(登録商標)、Wi‐Fi(登録商標)、WiMAX(登録商標)、3G/LTE等)とを用いてそのような通信を行うように構成され得る。通信サブシステム132は、無線ネットワークアダプタを含むネットワークアダプタとして具現化され得る。
例示的なコンピューティングデバイス100は、1つまたは複数のユーザ空間アプリケーション(例えば、アプリケーション134)および特権システムコンポーネント142など、複数のコンピュータプログラムコンポーネントも含む。ユーザ空間アプリケーションは、例えばディスプレイデバイス128またはUIサブシステム130を介してエンドユーザと直接または間接的にインタラクトする任意のコンピュータアプリケーション(例えば、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせ)として具現化され得る。ユーザ空間アプリケーションのいくつかの例は、ワードプロセッシングプログラム、ドキュメントビューア/リーダ、ウェブブラウザ、電子メールプログラム、メッセージングサービス、コンピュータゲーム、カメラおよびビデオアプリケーション等を含む。とりわけ、特権システムコンポーネント142は、コンピューティングデバイス100のユーザ空間アプリケーション(例えば、アプリケーション134)とハードウェアコンポーネントとの間の通信を容易にする。特権システムコンポーネント142の複数の部分は、Microsoft CorporationによるWINDOWS(登録商標)、Google, Inc.によるANDROID(登録商標)および/または他のもののバージョンなど、本明細書において説明される機能を実行することが可能な任意のオペレーティングシステムとして具現化され得る。代替的に、または追加的に、特権システムコンポーネント142の複数の部分は、本明細書において説明される機能を実行することが可能な任意のタイプの仮想マシンモニタ(例えば、タイプIまたはタイプIIのハイパーバイザ)として具現化され得る。
例示的な特権システムコンポーネント142は、ソフトウェア、ハードウェア、ファームウェア、またはソフトウェアとハードウェアとの組み合わせとして具現化され得るキー作成モジュール148を含む。例えば、キー作成モジュール148は、オペレーティングシステムカーネル、仮想マシンモニタまたはハイパーバイザのモジュールとして具現化され得る。キー作成モジュール148は、秘密キー116(例えば、秘密アドレスキーおよび秘密データキー)を作成し、プロセッサ102がアクセスを読み取った1つまたは複数のレジスタ(例えば、専用レジスタ)にそれらを書き込み得る。秘密キーを作成するために、キー作成モジュール148は、例えば、本明細書において説明される機能を実行できる秘密キーを生成することが可能な乱数発生器または別のアルゴリズムを実行し得る。他の実装において、秘密キーは、ソフトウェアにより直接アクセス可能ではない補助プロセッサメモリ180に書き込まれ得る。さらに他の実装において、秘密キーは、暗号化され、メモリ120に格納され得る。1つまたは複数の実施形態において、特定のソフトウェアエンティティに割り当てられたメモリ領域のためにデータキーが生成される場合、データキーは、暗号化されてよく、このソフトウェアエンティティには、暗号化されたデータキー、暗号化されたデータキーのポインタ、または暗号化されたキーまたは暗号化されたデータキーのポインタを含むデータ構造が設けられてよい。他の実装において、ソフトウェアエンティティには、プロセッサメモリに格納された暗号化されていないデータキーのポインタ、または暗号化されていないデータキーのポインタを含むデータ構造が設けられ得る。概して、データ(またはコード)の暗号化および復号化に用いられると共に、ポインタ内でエンコードされたメモリアドレス(またはそれらの複数の部分)の暗号化および復号化に用いられるセキュアキーを生成、格納および提供するための任意の好適なメカニズムが、本明細書において説明される実施形態において用いられ得る。
本明細書において開示される実施形態のキーを生成または取得するために無数のアプローチが用いられ得ることに留意されたい。例えば、キー作成モジュール148がコンピューティングデバイス100の一部として示されているが、キーをコンピューティングデバイス100へセキュアに通信するための任意の好適な認証プロセスを用いて、1つまたは複数の秘密キーが、任意の好適な外部ソースから取得され得る。これは、それらのプロセスの一部としてキーを生成することを含み得る。さらに、特権システムコンポーネント142は、トラステッド実行環境(TEE)、仮想マシン、プロセッサ102、コプロセッサ、またはコンピューティングデバイス100内の、もしくはコンピューティングデバイス100にセキュアに接続された任意の他の好適なハードウェア、ファームウェアもしくはソフトウェアの一部であってよい。さらに、キーは、「秘密」であってよく、これは、その値が隠されているか、アクセス不可能であるか、難読化されているか、そうでなければ不正な行為者(例えば、ソフトウェア、ファームウェア、機械、外部ハードウェアコンポーネントおよび人間)から保護されていることを意味するように意図されている。
図2Aは、エンコードされたポインタ210の実施形態に基づく暗号コンピューティングの汎用プロセス200Aを示す簡略フロー図である。プロセス200Aは、データの暗号化および復号化が少なくとも1つの実施形態によるポインタのコンテンツにバインドされる、エンコードされたポインタ210により示されるメモリアドレスにおけるメモリ領域へのデータの格納(例えば、書き込み)を示す。プロセス200Aの少なくともいくつかの部分は、コンピューティングデバイス100のハードウェア、ファームウェアおよび/またはソフトウェアにより実行され得る。示される例において、ポインタ210は、エンコードされたポインタ114の一例であり、メタデータ部分を含むエンコードされた線形アドレスとして具現化される。メタデータ部分は、あるタイプのコンテキスト情報(例えば、サイズ/べき乗メタデータ、タグ、バージョン等)であり、線形アドレスは、任意の数の可能な構成でエンコードされてよく、それらの少なくともいくつかが、本明細書において説明される。
エンコードされたポインタ210は、様々な実施形態による様々な構成を有し得る。例えば、エンコードされたポインタ210は、平文線形アドレスを用いてエンコードされてもよく、いくつかの平文線形アドレスビットおよびいくつかの暗号化された線形アドレスビットを用いてエンコードされてもよい。また、エンコードされたポインタ210は、特定の実施形態に応じて異なるメタデータを用いてエンコードされ得る。例えば、エンコードされたポインタ210内でエンコードされたメタデータは、必ずしも限定されるわけではないが、サイズ/べき乗メタデータ、タグ値またはバージョン番号のうちの1つまたは複数を含み得る。
概して、プロセス200Aは、データが格納されるメモリ220のメモリ領域のメモリアドレスを取得するために、かつ、格納されるデータをエンコードされたポインタ210から導出されるトウィークに少なくとも部分的に基づいて暗号化するためにエンコードされたポインタ210が用いられる暗号コンピューティングフローを示す。まず、アドレス暗号ユニット202が、エンコードされたポインタ210をデコードして、デコードされた線形アドレス212を取得する。デコードされた線形アドレス212は、変換ルックアサイドバッファ204またはページテーブル(不図示)を用いてメモリ220内の物理アドレス214を取得するために用いられ得る。少なくとも部分的に、エンコードされたポインタ210から、データトウィーク217が導出される。例えば、データトウィーク217は、エンコードされたポインタ全体、エンコードされたポインタの1つまたは複数の部分、デコードされた線形アドレスの一部分、デコードされた線形アドレス全体、エンコードされたメタデータおよび/または外部コンテキスト情報(例えば、ポインタ内でエンコードされていないコンテキスト情報)を含み得る。
ひとたびトウィーク217がエンコードされたポインタ210から導出されると、暗号コンピューティングエンジン270は、データキー216およびデータトウィーク217に基づいて暗号化されていないデータ222を暗号化することにより、暗号化されたデータ224を計算できる。少なくとも1つの実施形態において、暗号コンピューティングエンジン270は、特定のサイズ粒度(任意の好適なサイズ)で、AES-CTRモードブロック暗号272として具現化され得るキーストリーム生成器などの暗号化アルゴリズムを含む。本実施形態において、データトウィーク217は、初期化ベクトル(IV)として用いられてよく、エンコードされたポインタ210の平文オフセットは、カウンタ値(CTR)として用いられてよい。キーストリーム生成器は、データトウィーク217を暗号化してキーストリーム276を生成でき、次に、暗号化されたデータ224を生成すべく、暗号化されていないデータ222およびキーストリーム276に対し、暗号オペレーション(例えば、排他的論理和(XOR)などの論理関数274、または他のより複雑な演算)が実行され得る。キーストリーム276の生成は、物理アドレス214がエンコードされたポインタ210から取得されている間に開始され得ることに留意されたい。したがって、これらの並列処理により、暗号化されていないデータの暗号化の効率が上がり得る。暗号化されたデータは、メモリ220に格納される前に、またはいくつかの例では、メモリ220に格納される代わりに、キャッシュ(例えば、170)に格納され得ることに留意されたい。
図2Bは、エンコードされたポインタ210の実施形態に基づく暗号コンピューティングの汎用プロセス200Bを示す簡略フロー図である。プロセス200Bは、データの暗号化および復号化が少なくとも1つの実施形態によるポインタのコンテンツにバインドされる、エンコードされたポインタ210により参照されるメモリアドレスにおけるメモリ領域に格納されたデータの取得(例えば、読み取り、ロード、フェッチ)を示す。プロセス200Bの少なくともいくつかの部分は、コンピューティングデバイス100のハードウェア、ファームウェアおよび/またはソフトウェアにより実行され得る。
概して、プロセス200Bは、暗号化されたデータが格納されるメモリ220のメモリ領域のメモリアドレスを取得するために、かつ、ひとたび暗号化されたデータがメモリ領域からフェッチされると、暗号化されたデータをエンコードされたポインタ210から導出されるトウィークに少なくとも部分的に基づいて復号化するためにエンコードされたポインタ210が用いられる暗号コンピューティングフローを示す。まず、アドレス暗号ユニット202は、エンコードされたポインタ210をデコードして、232において示されるようにメモリからの暗号化されたデータ224をフェッチするために用いられるデコードされた線形アドレス212を取得する。少なくとも部分的に、エンコードされたポインタ210から、データトウィーク217が導出される。メモリからデータをロードする/読み取るためのこのプロセス200Bにおいて、データトウィーク217は、データをメモリに格納する/書き込むための逆のプロセス200Aと同じ方式で導出される。
ひとたびトウィーク217がエンコードされたポインタ210から導出されると、暗号コンピューティングエンジン270は、データキー216およびデータトウィーク217に基づいて暗号化されたデータ224を復号化することにより、復号化された(または暗号化されていない)データ222を計算できる。前述のように、この例では、暗号コンピューティングエンジン270は、特定のサイズ粒度(任意の好適なサイズ)で、AES-CTRモードブロック暗号272として具現化されるキーストリーム生成器などの暗号化アルゴリズムを含む。本実施形態において、データトウィーク217は、初期化ベクトル(IV)として用いられてよく、エンコードされたポインタ210の平文オフセットは、カウンタ値(CTR)として用いられてよい。キーストリーム生成器は、データトウィーク217を暗号化してキーストリーム276を生成でき、次に、復号化された(または暗号化されていない)データ222を生成すべく、暗号化されたデータ224およびキーストリーム276に対し、暗号オペレーション(例えば、排他的論理和(XOR)などの論理関数274、または他のより複雑な演算)が実行され得る。キーストリームの生成は、暗号化されたデータが232においてフェッチされている間に開始され得ることに留意されたい。したがって、これらの並列処理により、暗号化されたデータの復号化の効率が上がり得る。
レガシ非SVM(共有仮想メモリ)デバイスを用いた暗号コンピューティング
本明細書における実施形態は、暗号コンピューティングの利益のうちの1つまたは複数を入力/出力(IO)デバイスに提供し得る。例えば、特定の実施形態が、異種のワークロードにおいて、かつ、異なる計算要素にわたって(例えば、CPUとGPUとの間で)、バッファオーバーフローに対する保護、解放済みメモリ使用(use-after-free)等を含むメモリ安全性を実現できるアーキテクチャを実装し得る。このアーキテクチャは、レガシ非CCエンライテンドデバイスにより実装され得る。
特定の実施形態において、新しい暗号コンピューティングIO(CCIO)エージェントが、ホストシステム内に(例えば、プロセッサまたはシステムオンチップ(SoC)のアンコア内に)実装される。CCIOエージェントは、ポインタと、オブジェクトごとの粒度を有する関連付けられたデータとを一意に暗号化し得る。例えば、特定の実施形態において、データは、特定のプロセスアドレス空間識別子(PASID)に関連付けられたキーに基づいて暗号化されてよく、この暗号化は、データに関連付けられた暗号化されたポインタを用いてトウィークされてよい。また、いくつかの実施形態は、以下でさらに説明されるように、プロセスごとのデータおよびポインタキーのための特定の格納技術を定義し得る。これらの技術は、本明細書において概して、CCIOと称され得る。
本明細書において説明されるCCIOを実装する実施形態は、現在の保護技術を介して1つまたは複数の利点を提供し得る。特に、CCIOは、(1)デバイス内の攻撃および(2)デバイスにわたる攻撃という2つの主なクラスの攻撃に対して防御し得る。
デバイス内の攻撃は、攻撃者がワークロード内のメモリ脆弱性をエクスプロイトして、特権情報を破損させ、もしくは開示し、または実行の制御を得る特権エスカレーション攻撃(すなわち、サンドボックス/コンテナエスケープ)と、攻撃者がワークロード内のメモリ脆弱性をエクスプロイトして、情報を破損させ、もしくは開示し、または同じデバイス上で実行される異なるデバイスワークロードの制御を得るクロスプロセス攻撃とを含み得る。概して、デバイスセキュリティアーキテクチャおよびそのドライバは、デバイス境界内のプロセスごとの隔離の維持を担う。これは通常、デバイスインタフェース間の隔離を維持すること(デバイスがマルチテナントをサポートしている場合)、デバイス内メモリに対するメモリ分離を維持すること等により実装される。これらのタイプの攻撃のいくつかの例は、マインドコントロール攻撃(CUDA内のバッファオーバーフローをエクスプロイトして機械学習アルゴリズムの予測を変更する)と、GPGPUに対する動的バッファオーバーフロー検出(7個のベンチマークスーツ内に13個のバッファオーバーフローを見付けた)と、CUDAにおけるバッファオーバーフロー脆弱性とを含む。
デバイスにわたる攻撃の場合、主なセキュリティ脅威は、サンドボックス/コンテナエスケープを行うためにCPUワークロードを攻撃するデバイスワークロードからもたらされ得る。この攻撃は、デバイス使用に大きく依存し得る。例えば、メモリページおよびページテーブルの両方がデバイスとCPUとの間で共有される共有仮想メモリ(SVM)をデバイスがサポートしている場合、デバイスワークロードは、CPUプロセスアドレス空間全体にアクセスできる。この場合、悪意のあるデバイスワークロードが、用いるべきCPUのみを対象としたメモリ(例えば、戻りアドレス)を破損させて、攻撃者にCPU実行の制御を得させ得る。SVMがイネーブルされているので、メモリを分離したり、CPU対デバイスにより用いられるメモリに注釈を付けたりすることは現在無理である。共有仮想メモリがサポートされていない(またはイネーブルされていない)ので、デバイスワークロードとCPUワークロードとの間のメモリ分離が、ページ粒度で行われる。CPUプロセスは、プライマリリソースマネージャとして動作し、デバイスプロセスがアクセスしようとしているページを明示的に示す。この場合、バグの多いソフトウェアにより、共有が意図されていないリソースへのアクセスがデバイスに与えられ得る。
本明細書において説明されるCCIOの実施形態は、オブジェクトごとの粒度を有するメモリ機密性を提供でき、前述の攻撃の全てに対して保護できる。
図3は、特定の実施形態による、IOデバイスに暗号コンピューティングを提供する例示的なシステム300の簡略ブロック図を示す。例示的なシステム300において、ホストSoC310は、PCIeベース、CXLベースまたはUSBベースの相互接続315などの相互接続を介して、IOデバイスSoC320に結合されている。ホストSoC310は、プロセッサ318を含み、プロセッサ318による命令の実行に関連付けられたデータおよび/またはIOデバイスSoC320に関連付けられたデータを格納し得るメモリ330に結合されている。SoC301、320の各々は、追加の、示されるものよりも少ない、または示されているもの以外のコンポーネントを含んでもよく、示されているものとは異なる方式で構成された同じコンポーネントを含んでもよい。ホストSoC310は、IOデバイスSoC320をホストSoC310のプロセッサ318と、ホストSoC310に接続されたメモリ330とに相互接続するルートポート312を含む。いくつかの例において、ルートポート312は、PCIeルートコンプレックス(例えば、図7のコントローラハブ715)と同様に機能し得る。ルートポート312は、ホストSoC310に結合されたメモリ330へダイレクトメモリアクセス(DMA)対応I/Oバスを接続するメモリ管理ユニット(MMU)を含み得るIOMMU314を含む。ルートポート312は、本明細書において説明される1つまたは複数の暗号化/復号化機能(例えば、図4および図5に関して説明されるオペレーション)を実行し得るCCIOエージェント316も含む。
図3に示されるように、IOデバイスは、一意のPASIDに各々が関連付けられた2つの(またはそれよりも多くの)異なるプロセス321、322を実行し得る。各プロセスに関連付けられたデータ(それぞれ、331、332)は、一意のプロセスごとの(例えば、PASIDごとの)キーに基づいて暗号化され得る。暗号化は、メモリ330内のデータの位置に関連付けられたポインタによりトウィークされ得る。いくつかの例において、ポインタは、上述のようにエンコードまたは暗号化され得る。例えば、いくつかの実施形態において、ポインタは、それを用いてデータが暗号化されるプロセスごとの(例えば、PASIDごとの)キーに基づいて暗号化され得る。他の実施形態において、データ暗号化に用いられる第1のキー(データキーまたはCCデータキー)と、ポインタ暗号化に用いられる第2のキー(ポインタキーまたはCCポインタキー)とが存在し得る。別個のデータ暗号化キーおよびポインタ暗号化キーが存在する場合、これらのキーは、同じサイズ(例えば、128ビット)のものであってもよく、異なるサイズ(例えば、ポインタ暗号化の場合は128ビット、データ暗号化の場合は96ビット)のものであってもよい。
図4は、本開示の実施形態による読み取りプロセスの例示的なフロー図400を示す。示される例では、PCIeベースの相互接続が想定されている。しかしながら、図4に示される概念は、CXLベースの相互接続、USBベースの相互接続または他のタイプのIOプロトコルに適用され得ることが理解されよう。加えて、フロー400に示されているものよりも少ない追加の、または示されているもの以外のオペレーションが、CCIOの実施形態において含まれ得るか実装され得ることが理解されよう。
例示的なフロー400において、IOデバイス430はまず、PASIDと、バス/デバイス/機能(BDF)と、仮想アドレスとを含む読み取り要求を送信する。読み取り要求は、IOMMUがデバイスのBDFからもたらされるトランザクションについて第1のレベルのまたはネストされた変換を行うように構成されているかどうかに応じて、暗号化されたIO仮想アドレス(IOVA)または暗号化されたネストIOVA(eIOVA)のPCIe未翻訳要求である。デバイスがDMAを行う前に、このアプリケーションは、IOデバイス430により次にアクセスされるDRAM内のメモリページを既に割り当ててピン留めしていることに留意されたい。割り当て中に、修正されたglibcライブラリは、データおよび関連付けられたポインタを暗号化し得る。このアプリケーションは、デバイスワークロード内の暗号化されたポインタを用いて、例えばメモリマッピングIO(MMIO)を介して、ワークロードをデバイスへ送ることができる。
ホストデバイス内のCCIOエージェント420が未翻訳要求を受信した場合、422において、ホストは、このBDF+PASIDに関連付けられたCCキーを取得する。これは、データおよびポインタの暗号化に用いられる単一のキー、または別個のデータおよびポインタ暗号化キーを含み得る(以下の説明では、別個のキーが存在することを想定している)。次に、424において、CCIOエージェントは、CCポインタキーを用いてeIOVAを復号化して、IOVAを生じさせる。次に、CCIOエージェント420は、426において、必要な変換を行って、取得されたIOVAのホスト物理アドレス(HPA)を取得する。次に、CCIOエージェント420は、412において内部に格納された暗号化されたデータを取得する、メモリ410への読み取りトランザクションを開始し、暗号化されたデータ(eData)を読み取り完了インジケーションと共にCCIOエージェント420へ返す。
次に、CCIOエージェント420は、428において、eIOVAおよびCCデータキーを用いて、受信した暗号化されたデータを復号化し、平文データ(Data)を読み取り完了インジケーション(例えば、読み取り完了TLP)と共にIOデバイス430へ送信する。次に、IOデバイス430は、平文データを、この平文データが通常であればそうであるように、消費、修正するなどできる。
図5は、本開示の実施形態による書き込みプロセスの例示的なフロー図500を示す。示される例では、PCIeベースの相互接続が想定されている。しかしながら、図5に示される概念は、CXLベースの相互接続、USBベースの相互接続または他のタイプのIOプロトコルに適用され得ることが理解されよう。加えて、フロー500に示されているものよりも少ない追加の、または示されているもの以外のオペレーションが、CCIOの実施形態において含まれ得るか実装され得ることが理解されよう。
例示的なフロー500において、IOデバイス530はまず、平文データ(Data)、PASIDと、バス/デバイス/機能(BDF)と、暗号化された仮想アドレス(IOVA)とを含む書き込み要求を送信する。書き込み要求は、IOMMUがデバイスのBDFからもたらされるトランザクションについて第1のレベルのまたはネストされた変換を行うように構成されているかどうかに応じて、暗号化されたIO仮想アドレス(IOVA)または暗号化されたネストIOVA(eIOVA)の未翻訳要求であってよい。
ホストデバイス内のCCIOエージェント520が未翻訳要求を受信した場合、CCIOエージェントは、522において、このBDF+PASIDに関連付けられたCCキーを取得し、524において、取得したCCデータキーを用いて平文データを暗号化し(eIOVAは、トウィークとして用いられる)(eDataを生じさせる)、526において、CCポインタキーを用いてeIOVAを復号化して、IOVAを生じさせ、528において、必要な変換を行って、取得されたIOVAのホスト物理アドレス(HPA)を取得する。次に、CCIOエージェントは、HPAおよびeDataを用いてメモリ510への書き込みトランザクションを開始し、512において、メモリ510は、暗号化されたデータを格納する。
上の例において、CCIOエージェント(例えば、316、420または520)は、ホストデバイス内の任意の好適な位置に実装され得る。例えば、CCIOエージェントは、CCIOオペレーション(例えば、上述の暗号化/復号化等)を実行するために拡張され得るIOMMU(例えば、314)内に実装され得る。これは、CCキーがVTd PASIDテーブルエントリに格納される実施形態(以下のさらなる記載を参照されたい)について、または、CCキーがメモリに格納される実施形態に(以下のさらなる記載を参照されたい)ついて、好都合であり得る。他の実施形態において、CCIOエージェントは、専用コンポーネントとして実装され得る。例えば、CCIOエージェントは、ホストデバイスのルートポート内の別個のロジックコンポーネント(例えば、図3に示されるようなもの)として、またはホストデバイス内の専用知的財産(IP)ロジックチップ(例えば、図3におけるルートポート312の外部のもの)として実装され得る。この実装は、CCキーがCCIOエージェント内に位置する専用メモリに格納される実施形態(以下のさらなる記載を参照されたい)について好都合であり得る。アーキテクチャがIOVAをアウトバウンド完了(OTC)バッファに格納しない実装において、全てのOTCエントリのためにeIOVAを追加すると高価になり得る。なぜなら、これは、CCシナリオおよび非CCシナリオの両方について、全てのDMAトラフィックに影響を及ぼすであろうからである。したがって、新しいアウトバウンド完了バッファが、CCIOベースのアウトバウンドトランザクションのみのために、CCIOエージェントに実装され得る。CCIO OTCは、CCIO専用アウトバウンドトランザクションに予め割り当てられてよく、このトランザクションが完了した場合、CCIOエージェントは、eDataの復号化を進めることができる。
さらに、上述の例において、CCキー(CCデータキーおよびCCポインタキー)は、ホストデバイス内の任意の好適な位置に格納され得る。一例として、CCキーは、PASIDテーブルエントリ内に格納され得る。このアプローチでは、CCキーは、PASIDキャッシュ内にキャッシュされ得る。これにより、ページウォークを加速させることができる。PASIDキャッシュは、ページウォークを加速させるために実装されてよく、PASIDテーブルエントリがキャッシュされる。したがって、PASIDテーブルエントリが拡張される場合、対応するPASIDキャッシュも同様であり得る。
別の例として、CCキーは、専用メモリ(例えば、スタティックランダムアクセスメモリ(SRAM))内に格納され得る。そのような実施形態において、PASID空間の一部分(例えば、128個のPASID)がカーブアウトされてよく、ソフトウェアがこれらのPASIDをCCIOのために用い得る。それらのPASIDについては、関連付けられたCCキーを格納するために、(例えば、CCIOエージェント内に)専用SRAMを有し得る。この場合、ハードウェアは、CCIOを同時に用いて、IOMMU1つ当たり割り当てられた数(例えば、128)までのPASIDをサポートする。以下のテーブル1は、予約済みのPASIDエントリサイズおよびCCIOエントリサイズの異なる組み合わせに必要なMMIO空間の例示的な値を示す。
Figure 2023086670000002
表1
IOMMUがCC IOオペレーションを担うか、専用エージェントが担うかに応じて、ホストは、(例えば、新しいCCイネーブルビットを用いて、)CCIOがPASIDテーブルエントリからの特定のBDF+PASIDの組み合わせのために用いられることを検出する。CCがそのPASIDについてイネーブルされた場合、ホストは、最下位PASIDビット(例えば、最下位の8個または9個のビット)を用いてSRAMをルックアップして、CCキーを取得し、アドレス復号化を行う。データ暗号化/復号化が、同様の態様で行われ得る。
さらに別の例として、CCキーは、図3のメモリ330などのメモリ(例えば、ダイナミックランダムアクセスメモリ(DRAM))に格納され得る。これにより、拡張可能な実装が提供され得る。いくつかの例において、新しい階層構造がメモリ内に実装されてよく、ホストは、ページウォークの別の層を実行してキーを取得できる。
図6は、本開示の実施形態による、CCキーを格納するために用いられ得る1つの例示的な階層構造600を示す。例示的な構造600は、4つのレベルの暗号コンピューティングキーテーブル(CCKT)を含み、最終レベル(示されている例では、L4)は、CCキーを含む。これらのテーブルは、PASIDのビットに基づいてルックアップされる。例えば、示されている例では、第1のレベル1(L1)テーブル601が、複数のレベル2(L2)テーブルのうちの1つのポインタを含む複数のエントリを含む。PASIDビット17-19(最上位ビット)は、特定のL2テーブル602を指し示すL1テーブル601内の特定のエントリの位置を特定するために用いられ得る。次に、複数のL3テーブルのうちの特定のL3テーブル603を指し示すL2テーブル602内の特定のエントリの位置を特定するために、次のPASIDビット16-11が用いられ得る。次に、複数のL4テーブルのうちの特定のL4テーブル604を指し示すL3テーブル603内の特定のエントリの位置を特定するために、次のPASIDビット10-5が用いられ得る。最終的に、PASIDビット4-0(最下位ビット)は、PASIDに関連付けられたCCキーを含むL4テーブル604内のエントリの位置を特定するために用いられ得る。このアプローチは、非常に拡張可能であり得る。なぜなら、このアプローチは、ハードウェアが全てのIOプロセス(2^20個まで(100万個まで)のプロセスであり得る)のCCIOをサポートすることを可能にするからである。別の利益は、CCKテーブルルックアップが、通常のものとPASIDページウォークを用いて並列化され得るということである。いくつかの実施形態において、専用キャッシュは、ウォークを加速させるように定義され得る。
さらに別の例として、CCキーは、DRAMメモリに格納され得るが、PASIDテーブルは、メモリに格納されたCCキーを指し示すポインタを含むように拡張され得る。例えば、PASIDテーブルエントリ(例えば、PASID[255:199])の上位未使用ビットは、ポインタキー、データキー等を含み得る256ビットCCIOキー構造のポインタを格納するために用いられ得る。ホストソフトウェアは、CCキー構造を管理してよく、同じページ内に複数のCCIOキー構造(例えば、128個のCCIOキー構造まで)を配置してよい。
図7から図10は、本開示の態様が組み込まれ得る例示的な相互接続の実施形態を示す。
図7を参照すると、コンポーネントのセットを相互接続するポイントツーポイントリンクから構成されるファブリックの一実施形態が示されている。システム700は、コントローラハブ715に結合されたプロセッサ705およびシステムメモリ710を含む。プロセッサ705は、マイクロプロセッサ、ホストプロセッサ、埋め込みプロセッサ、コプロセッサまたは他のプロセッサなど、任意の処理要素を含む。プロセッサ705は、フロントサイドバス(FSB)706を通じてコントローラハブ715に結合されている。一実施形態において、FSB706は、後述のようなシリアルポイントツーポイント相互接続である。別の実施形態において、リンク706は、異なる相互接続規格に準拠するシリアル差動相互接続アーキテクチャを含む。いくつかの実装において、システムは、他の例示的な特徴の中でもとりわけ、複数のプロトコルスタックを実装するためのロジックと、共通物理層上で実行される代替的なプロトコルをネゴシエートするためのさらなるロジックとを含み得る。
システムメモリ710は、ランダムアクセスメモリ(RAM)、不揮発性(NV)メモリ、またはシステム700内のデバイスによりアクセス可能な他のメモリなど、任意のメモリデバイスを含む。システムメモリ710は、メモリインタフェース716を通じてコントローラハブ715に結合されている。メモリインタフェースの例は、ダブルデータレート(DDR)メモリインタフェース、デュアルチャネルDDRメモリインタフェースおよびダイナミックRAM(DRAM)メモリインタフェースを含む。
一実施形態において、コントローラハブ715は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIeまたはPCIe)相互接続階層内のルートハブ、ルートコンプレックスまたはルートコントローラである。コントローラハブ715の例は、チップセット、メモリコントローラハブ(MCH)、ノースブリッジ、相互接続コントローラハブ(ICH)、サウスブリッジおよびルートコントローラ/ハブを含む。チップセットという用語は多くの場合、2つの物理的に別個のコントローラハブ、すなわち、相互接続コントローラハブ(ICH)に結合されたメモリコントローラハブ(MCH)を指す。現在のシステムは多くの場合、プロセッサ705に組み込まれたMCHを含むが、コントローラ715は、後述のものと同様の方式でI/Oデバイスと通信することに留意されたい。いくつかの実施形態において、ピアツーピアルーティングが、ルートコンプレックス715を通じて任意選択的にサポートされる。
ここでは、コントローラハブ715は、シリアルリンク719を通じてスイッチ/ブリッジ720に結合されている。インタフェース/ポート717および721とも称され得る入力/出力モジュール717および721は、階層型プロトコルスタックを包含/実装して、コントローラハブ715とスイッチ720との間の通信を提供する。一実施形態において、複数のデバイスをスイッチ720に結合させることが可能である。
スイッチ/ブリッジ720は、パケット/メッセージをデバイス725の上流、すなわち、ルートコンプレックスに向かう階層の上方から、コントローラハブ715および下流、すなわち、ルートコントローラから離れた階層へ、プロセッサ705またはシステムメモリ710からデバイス725へルーティングする。一実施形態において、スイッチ720は、複数の仮想PCI間ブリッジデバイスの論理アセンブリと称される。デバイス725は、I/Oデバイス、ネットワークインタフェースコントローラ(NIC)、アドインカード、オーディオプロセッサ、ネットワークプロセッサ、ハードドライブ、ストレージデバイス、CD/DVD ROM、モニタ、プリンタ、マウス、キーボード、ルータ、ポータブルストレージデバイス、ファイヤワイヤデバイス、ユニバーサルシリアルバス(USB)デバイス、スキャナおよび他の入力/出力デバイスなど、電子システムに結合される任意の内部または外部のデバイスまたはコンポーネントを含む。PCIe用語では多くの場合、そのようなデバイスは、エンドポイントと称される。具体的に示されていないが、デバイス725は、レガシまたは他のバージョンのPCIデバイスをサポートするためのPCIe-PCI/PCI-Xブリッジを含み得る。PCIeにおけるエンドポイントデバイスは多くの場合、レガシ、PCIeまたはルートコンプレックス統合エンドポイントとして分類される。
グラフィックアクセラレータ730も、シリアルリンク732を通じてコントローラハブ715に結合されている。一実施形態において、グラフィックアクセラレータ730は、ICHに結合されたMCHに結合されている。次に、スイッチ720、およびしたがって、I/Oデバイス725が、ICHに結合されている。また、I/Oモジュール731および718は、グラフィックアクセラレータ730とコントローラハブ715との間で通信するための階層型プロトコルスタックを実装する。上記のMCHと同様に、グラフィックスコントローラまたはグラフィックアクセラレータ730自体が、プロセッサ705に統合されてよい。さらに、システムの1つまたは複数のリンク(例えば、723)は、例えば、リタイマ、リピータ等、1つまたは複数の拡張デバイス(例えば、750)を含み得る。
図8を参照すると、階層型プロトコルスタックの一実施形態が示される。階層型プロトコルスタック800は、Quick Pathインターコネクト(QPI)スタック、PCIeスタック、次世代高性能コンピューティングインターコネクトスタックまたは他の階層型スタックなど、任意の形態の階層型通信スタックを含む。以下の記載はPCIeスタックに関するが、同じ概念が他の相互接続スタックに適用され得る。一実施形態において、プロトコルスタック800は、トランザクション層805と、リンク層810と、物理層820とを含むPCIeプロトコルスタックである。図7におけるインタフェース717、718、721、722、726および731などのインタフェースが、通信プロトコルスタック800として表され得る。通信プロトコルスタックとしての表現は、プロトコルスタックを実装/包含するモジュールまたはインタフェースとも称され得る。
PCI Expressは、パケットを用いて、コンポーネント間で情報を通信する。パケットが、トランザクション層805およびデータリンク層810において形成され、送信コンポーネントから受信コンポーネントへ情報を搬送する。送信されたパケットが他の層を流れる際に、それらの層でパケットを処理するために必要な追加の情報によってパケットが拡張される。受信側において、リバース処理が発生し、パケットは、それらの物理層820表現からデータリンク層810表現へ、最終的に(トランザクション層パケットのため)受信デバイスのトランザクション層805によって処理され得る形態へと変換される。
トランザクション層
一実施形態において、トランザクション層805は、デバイスの処理コアと、データリンク層810および物理層820のような相互接続アーキテクチャとの間のインタフェースを提供する。これに関して、トランザクション層805の主な役割は、パケット(すなわち、トランザクション層パケットまたはTLP)のアセンブリおよびディスアセンブリである。変換層805は、典型的には、TLPのためのクレジットベースのフロー制御を管理する。PCIeは、分割トランザクション、すなわち、時間別の要求および応答があるトランザクションを実装することにより、ターゲットデバイスが応答のためのデータを収集している間に他のトラフィックを搬送するためのリンクを可能にする。
加えて、PCIeは、クレジットベースのフロー制御を利用する。このスキームにおいて、デバイスはトランザクション層805内の受信バッファの各々に対するクレジットの初期量を通知する。図7のコントローラハブ715のようなリンクの反対側における外部デバイスは、各TLPによって消費されるクレジット数をカウントする。トランザクションがクレジット限界を超えない場合、このトランザクションは、送信されて得る。応答を受信すると、クレジット量が回復される。クレジットスキームの利点は、クレジット限界が発生しなければ、クレジット返却のレイテンシが性能に影響しないことである。
一実施形態において、4つのトランザクションアドレス空間は、構成アドレス空間、メモリアドレス空間、入力/出力アドレス空間およびメッセージアドレス空間を含む。メモリ空間トランザクションは、メモリマップ位置へ/から、データを転送する読み取り要求および書き込み要求のうちの1つまたは複数を含む。一実施形態において、メモリ空間トランザクションは、例えば、32ビットアドレスなどの短いアドレスフォーマット、または64ビットアドレスなどの長いアドレスフォーマットといった2つの異なるアドレスフォーマットを使用可能である。構成空間トランザクションは、PCIeデバイスの構成空間にアクセスするために用いられる。構成空間に対するトランザクションは、読み取り要求および書き込み要求を含む。メッセージ空間トランザクション(または単にメッセージ)は、PCIeエージェント間の帯域内通信をサポートするために定義される。
したがって、一実施形態において、トランザクション層805は、パケットヘッダ/ペイロード806をアセンブルする。現在のパケットヘッダ/ペイロードのフォーマットは、PCIe仕様ウェブサイトにおけるPCIe仕様で見られ得る。
リンク層
データリンク層810とも称されるリンク層810は、トランザクション層805と物理層820との間の中間ステージとして動作する。一実施形態において、データリンク層810の役割は、リンク上の2つのコンポーネント間でトランザクション層パケット(TLP)を交換するための信頼性のあるメカニズムを提供することである。データリンク層810の一方側は、トランザクション層805によってアセンブルされたTLPを受け入れ、パケットシーケンス識別子811、すなわち識別番号またはパケット番号を適用し、エラー検出コード、すなわちCRC812を計算および適用し、物理デバイスから外部デバイスにわたる送信のため、修正されたTLPを物理層820に送信する。
物理層
一実施形態において、物理層820は、パケットを外部デバイスへ物理的に送信するための論理サブブロック821および電気サブブロック822を含む。ここで、論理サブブロック821は、物理層821の「デジタル」機能を担う。これに関して、論理サブブロックは、物理サブブロック822による送信のための発信情報を準備するための送信セクションと、受信情報をリンク層810に渡す前に受信情報を識別して準備する受信セクションとを含む。
物理ブロック822は、送信機および受信機を含む。送信機には、論理サブブロック821によってシンボルが供給され、送信機はそれらをシリアライズし、外部デバイスへと送信する。受信機には外部デバイスからのシリアライズされたシンボルが供給され、受信した信号をビットストリームに変換する。ビットストリームは、逆シリアル化され、論理サブブロック821に供給される。一実施形態において、8b/10b送信コードが使用され、ここでは10ビットシンボルが送信/受信される。ここでは、フレーム823を用いてパケットをフレーム化するために、特別なシンボルが用いられる。加えて、一例において、受信機は、着信シリアルストリームから復元されたシンボルクロックも提供する。
上述のように、PCIeプロトコルスタックの特定の実施形態を参照してトランザクション層805、リンク層810および物理層820を説明しているが、階層型プロトコルスタックは、そのように限定されない。実際には、任意の階層型プロトコルが包含/実装されてよい。一例として、階層型プロトコルとして表されるポート/インタフェースは、(1)パケットをアセンブルするための第1の層、すなわち、トランザクション層と、パケットを配列するための第2の層、すなわち、リンク層と、パケットを送信するための第3の層、すなわち、物理層とを含む。具体例として、共通標準インタフェース(CSI)階層型プロトコルが利用される。
様々な他の相互接続アーキテクチャおよびプロトコルは、本明細書において説明される概念を利用し得る。一例において、コンピュートエクスプレスリンク(CXL)が用いられ得る。CXLは、CPUメモリ空間と付属デバイス上のメモリとの間のメモリコヒーレンシを維持する。これにより、他の例示的な利点の中でもとりわけ、より高い性能のためのリソースシェアリングが可能になり、ソフトウェアスタックの複雑性が減り、システムコスト全体が下がる。CXLにより、ホストプロセッサ(例えば、CPU)とワークロードアクセラレータ(例えば、他の例の中でもとりわけ、グラフィクス処理ユニット(GPU)、フィールドプログラマブルゲートアレイ(FPGA)デバイス、テンソルおよびベクトルプロセッサユニット、機械学習アクセラレータ、特定用途向けアクセラレータソリューション)のセットとの間の通信が可能になる。
CXLリンクは、コヒーレンシプロトコル、メモリアクセスプロトコルおよび入力/出力(I/O)プロトコルの動的プロトコル多重化をサポートする、低レイテンシで高帯域幅の離散型またはオンパッケージ型リンクであってよい。他の用途の中でもとりわけ、CXLリンクにより、アクセラレータは、他の例の中でもとりわけ、キャッシングエージェントおよび/またはホストシステムメモリとしてのシステムメモリにアクセスすることが可能になり得る。CXLは、アクセラレータの莫大なスペクトルをサポートするように設計された動的マルチプロトコル技術である。CXLは、離散型またはオンパッケージ型リンクを介して、PCIe(CXL.io)と同様のI/Oセマンティクスと、キャッシュプロトコルセマンティクス(CXL.cache)と、メモリアクセスセマンティクス(CXL.mem)とを含むプロトコルの豊富なセットを提供する。特定のアクセラレータ使用モデルに基づいて、CXLプロトコルの全て、またはこれらのプロトコルのサブセットのみがイネーブルされ得る。いくつかの実装において、CXLは、十分に確立された、幅広く採用されているPCIeインフラストラクチャ(例えば、PCIe5.0)上に構築されてよく、PCIe物理および電気的インタフェースを活用してエリアに高度なプロトコルを提供することは、I/O、メモリプロトコル(例えば、ホストプロセッサがメモリをアクセラレータデバイスと共有することを可能にする)およびコヒーレンシインタフェースを含む。
図9を参照すると、CXLリンク950を利用した例示的なシステムを示す簡略ブロック図900が示される。例えば、リンク950は、ホストプロセッサ905(例えば、CPU)をアクセラレータデバイス910に相互接続し得る。この例では、ホストプロセッサ905は、1つまたは複数のプロセッサコア(例えば、915a、915b)および1つまたは複数のI/Oデバイス(例えば、918)を含む。ホストメモリ(例えば、960)には、(例えば、同じパッケージまたはダイ上の)ホストプロセッサが設けられ得る。アクセラレータデバイス910は、アクセラレータロジック920を含んでよく、いくつかの実装では、独自のメモリ(例えば、アクセラレータメモリ965)を含んでよい。この例では、ホストプロセッサ905は、コヒーレンス/キャッシュロジック925および相互接続ロジック(例えば、PCIeロジック930)を実装するための回路を含み得る。CXL多重化ロジック(例えば、955a、955b)も提供されることで、CXLプロトコル(例えば、I/Oプロトコル935a、935b(例えば、CXL.io)、キャッシュプロトコル940a、940b(例えば、CXL.cache)およびメモリアクセスプロトコル945a、945b(CXL.mem))の多重化が可能になり得る。これにより、ホストプロセッサ905とアクセラレータデバイス910との間のリンク950を介して、サポートされているプロトコル(例えば、935a、935b、940a、940b、945a、945b)のいずれか1つのデータを多重化方式で送信することが可能になる。
いくつかの実装において、Flex Bus(商標)ポートは、デバイスを多種多様な他のデバイス(例えば、他のプロセッサ、デバイス、アクセラレータ、スイッチ、メモリデバイス等)との相互接続へ柔軟に適合させるために、CXL準拠リンクと併せて利用され得る。Flex Busポートは、PCIeリンクまたはCXLリンク(また、潜在的に、他のプロトコルおよびアーキテクチャのリンク)のいずれかをサポートするように静的に構成されたフレキシブル高速ポートである。Flex Busポートにより、高帯域幅オフパッケージリンクを介してネイティブPCIeプロトコルまたはCXLのどちらを提供するか設計上選ぶことが可能になる。ポートにおいて適用されるプロトコルの選択は、自動ネゴシエーションを介してブート時間中に発生してよく、スロットへプラグ接続されたデバイスに基づいてよい。Flex Busは、PCIe電気回路を用いることでPCIeリタイマとの互換性を有するようになり、アドインカードについての規格であるPCIeフォームファクタを順守する。
図10は、CXLリンクを実装するために利用される1つの例示的なポートアーキテクチャ1000(例えば、Flex Bus)を示す簡略ブロック図を示す。例えば、Flex Busアーキテクチャは、ポートによりサポートされる複数のプロトコルを実装するための複数の層として編成され得る。例えば、ポートは、トランザクション層ロジック(例えば、1005)、リンク層ロジック(例えば、1010)、物理層ロジック(例えば、1015)(例えば、全部または一部が回路に実装される)を含み得る。例えば、トランザクション(またはプロトコル)層(例えば、1005)は、PCIeトランザクション層1055およびベースPCIeトランザクション層1055のCXLトランザクション層強化1060(CXL.io用)を実装するトランザクション層ロジック1025と、CXLリンクのためのキャッシュ(例えば、CXL.cache)プロトコルおよびメモリ(例えば、CXL.mem)プロトコルを実装するためのロジック1030とへ細分化され得る。同様に、リンク層ロジック1035は、PCIeデータリンク層1065の拡張バージョンを表すベースPCIeデータリンク層1065およびCXLリンク層(CXL.io用)を実装するために提供され得る。CXLリンク層1010は、キャッシュおよびメモリリンク層強化ロジック1040(例えば、CXL.cacheおよびCXL.mem)も含み得る。
図10の例を続けると、CXLリンク層ロジック1010は、他の例示的な実装の中でもとりわけ、2つのロジックストリーム(例えば、PCIe/CXL.ioおよびCXL.cache/CXL.mem)からトラフィックをインタリーブするCXL調停/多重化(ARB/MUX)ロジック1020とインタフェースし得る。リンクトレーニング中に、トランザクション層およびリンク層は、PCIeモードまたはCXLモードのいずれかで動作するように構成される。いくつかの例において、他の例の中でもとりわけ、ホストCPUは、PCIeモードまたはCXLモードのいずれかの実装をサポートし得るが、アクセラレータのような他のデバイスは、CXLモードのみをサポートし得る。いくつかの実装において、ポート(例えば、Flex Busポート)は、PCIe物理層(例えば、PCIe電気回路PHY1050)に基づいて、物理層1015を利用し得る。例えば、Flex Bus物理層は、リンクトレーニングプロセス中に代替的なモードネゴシエーションの結果に基づいてPCIeモードまたはCXLモードのいずれかで動作できる集中型論理物理層1045として実装され得る。いくつかの実装において、物理層は、複数のシグナリングレート(例えば、8GT/s、16GT/s、32GT/s等)および複数のリンク幅(例えば、x16、x8、x4、x2。x1等)をサポートし得る。PCIeモードでは、ポート1000により実装されるリンクは、ネイティブなPCIe特徴(例えば、PCIe仕様において定義される)に完全に準拠し得るが、CXLモードでは、このリンクは、CXLについて定義された全ての特徴をサポートする。したがって、他の例の中でもとりわけ、Flex Busポートは、ネイティブなPCIeプロトコルデータまたは動的マルチプロトコルCXLデータを送信して、PCIe電気回路を介してI/Oプロトコル、コヒーレンシプロトコルおよびメモリプロトコルを提供できるポイントツーポイント相互接続を提供し得る。
CXL/I/OプロトコルであるCXL.ioは、I/Oデバイスのための非コヒーレントロード/ストアインタフェースを提供する。CXL.ioにおけるトランザクションタイプ、トランザクションパケットフォーマット、クレジットベースのフロー制御、仮想チャネル管理およびトランザクション順序付けルールは、PCIe定義の全部または一部に従い得る。CXLキャッシュコヒーレンシプロトコルであるCXL.cacheは、デバイスとホストとの間のインタラクションを、少なくとも1つの関連付けられた応答メッセージおよび場合によってはデータ転送を各々が有する複数の要求として定義する。インタフェースは、各方向における、要求、応答およびデータという3つのチャネルから成る。
CXLメモリプロトコルであるCXL.memは、プロセッサとメモリとの間のトランザクションインタフェースであり、ダイにわたって通信する場合にCXLの物理層およびリンク層を用いる。他の例の中でもとりわけ、CXL.memは、メモリコントローラがホストCPU内に位置する場合、メモリコントローラがアクセラレータデバイス内にある場合、またはメモリコントローラがメモリバッファチップへ移動させられる場合を含む、複数の異なるメモリ取り付けオプションのために用いられ得る。他の例示的な特徴の中でもとりわけ、CXL.memは、異なるメモリタイプ(例えば、揮発性、永続的等)と構成(例えば、平坦、階層等)とを伴うトランザクションに適用され得る。いくつかの実装において、ホストプロセッサのコヒーレンシエンジンは、CXL.mem要求および応答を用いて、メモリとインタフェースし得る。この構成では、CPUコヒーレンシエンジンは、CXL.mem Masterとみなされ、Memデバイスは、CXL.Mem Subordinateとみなされる。CXL.mem Masterは、CXL.mem要求(例えば、読み取り、書き込み等)のソーシングを担うエージェントであり、CXL.Mem Subordinateは、CXL.mem要求(例えば、データ、完了等)への応答を担うエージェントである。Subordinateがアクセラレータである場合、CXL.memプロトコルは、デバイスコヒーレンシエンジン(DCOH)の存在を想定する。このエージェントは、CXL.memコマンドに基づくデバイスキャッシュのスヌープおよびメタデータフィールドの更新のようなコヒーレンシ関連機能の実装を担うことが想定されている。メタデータがデバイス取り付け型メモリによりサポートされる実装では、メタデータは、他の例示的な使用の中でもとりわけ、ホストにより、CPUソケット用の粗いスヌープフィルタを実装するために用いられ得る。
以下の図11から図12は、本明細書において説明される実施形態の文脈で用いられ得るいくつかの例示的なコンピューティングデバイス、コンピューティング環境、ハードウェア、ソフトウェアまたはフローを提供する。
図11は、少なくとも1つの実施形態による例示的な暗号コンピューティング環境1100を示すブロック図である。図示の例では、暗号アドレシング層1110は、例示的な計算ベクトル中央処理装置(CPU)1102、グラフィック処理ユニット(GPU)1104、人工知能(AI)1106およびフィールドプログラマブルゲートアレイ(FPGA)1108にわたって延在する。例えば、CPU1102およびGPU1104は、メモリ1112に格納されたデータのための同じ仮想アドレス変換を共有してもよく、暗号アドレスは、この共有仮想メモリ上に構築してもよい。それらは、所与の実行フローに対して同じプロセスキーを共有し、同じトウィークを計算して、同じ暗号アルゴリズムに従って、暗号エンコードされたアドレスを復号化し、そのようなエンコードされたアドレスによって参照されるデータを復号化し得る。
組み合わせて、本明細書において説明される能力は、暗号コンピューティングを可能にし得る。メモリ1112は、キャッシュの第1のレベルからキャッシュの最後のレベルまで、かつシステムメモリへと、メモリ階層の全てのレベルにおいて暗号化され得る。暗号アドレスエンコードをデータ暗号化にバインドすることにより、極めて細かい粒度のオブジェクト境界およびアクセス制御が可能になり、細かい粒度のセキュアコンテナを個々の機能およびサービスとしての機能のオブジェクトまで可能にし得る。また、コールスタック上の戻りアドレスを(それらの位置に応じて)暗号エンコードすることで、シャドウスタックメタデータを必要とせずに制御フロー完全性を可能にし得る。したがって、データアクセス制御ポリシーおよび制御フローのいずれも、単に暗号アドレシングおよびそれぞれの暗号データバインディングに依存して、暗号的に実行することができる。
図12から図14は、本明細書において開示される実施形態に従って用いられ得る例示的なコンピュータアーキテクチャのブロック図である。概して、プロセッサおよびコンピューティングシステムのための当技術分野において公知である任意のコンピュータアーキテクチャ設計が用いられ得る。一例では、ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、タブレット、エンジニアリングワークステーション、サーバ、ネットワークデバイス、サーバ、アプライアンス、ネットワークハブ、ルータ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、スマートフォン、モバイルデバイス、ウェアラブル電子デバイス、ポータブルメディアプレーヤ、ハンドヘルドデバイスおよび様々な他の電子デバイスのための当技術分野において公知であるシステム設計および構成も、本明細書において説明されるコンピューティングシステムの実施形態に適している。概して、本明細書で開示される実施形態に好適なコンピュータアーキテクチャは、限定されるわけではないが、図12から図14に示される構成を含み得る。
図12は、一実施形態によるプロセッサの一事例を示す図である。プロセッサ1200は、本明細書で示され説明される実装形態(例えば、プロセッサ102)に関連して用いられ得るハードウェアデバイスのタイプの一例である。プロセッサ1200は、任意のタイプのプロセッサであってよく、例えば、マイクロプロセッサ、埋め込みプロセッサ、デジタル信号プロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、マルチコアプロセッサまたはシングルコアプロセッサなどの、コードを実行する他のデバイスである。図12には1つのプロセッサ1200のみが示されているが、処理要素は代替的に、図12に示されるプロセッサ1200を2つ以上含んでもよい。プロセッサ1200は、シングルスレッドコアであってもよく、少なくとも1つの実施形態では、プロセッサ1200は、コアごとに2つ以上のハードウェアスレッドコンテキスト(または「論理プロセッサ」)を含み得るという点でマルチスレッドであってもよい。
図12はまた、一実施形態によるプロセッサ1200に結合されたメモリ1202を示している。メモリ1202は、当業者に知られているか、そうでなければ利用可能な多種多様なメモリ(メモリ階層構造の様々な層を含む)のうちのいずれかであってよい。そのようなメモリ素子には、限定するわけではないが、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、フィールドプログラマブルゲートアレイ(FPGA)のロジックブロック、消去可能プログラマブルリードオンリメモリ(EPROM)、および電気的消去可能プログラマブルROM(EEPROM)が含まれ得る。
プロセッサ1200は、本明細書で詳述するアルゴリズム、プロセス、またはオペレーションと関連付けられた任意のタイプの命令を実行することができる。概して、プロセッサ1200は、ある要素または品目(例えば、データ)を、ある状態または物から別の状態または物に変換できる。
プロセッサ1200により実行される1つまたは複数の命令であってよいコード1204が、必要に応じてかつ特定のニーズに基づいて、メモリ1202に格納されてもよく、ソフトウェア、ハードウェア、ファームウェア、またはその任意の好適な組み合わせ、あるいは任意の他の内部または外部のコンポーネント、デバイス、要素、もしくはオブジェクトに格納されてもよい。一例において、プロセッサ1200は、コード1204により示される命令のプログラムシーケンスに従うことができる。各命令はフロントエンドロジック1206に入り、1つまたは複数のデコーダ1208により処理される。デコーダは、その出力として、予め定義されたフォーマットの固定幅マイクロオペレーションなどのマイクロオペレーションを生成してもよく、元のコード命令を反映する他の命令、マイクロ命令、制御信号を生成してもよい。フロントエンドロジック1206は、レジスタリネーミングロジック1210およびスケジューリングロジック1212も含み、これらのロジックは概して、リソースを割り当て、命令に対応するオペレーションを実行のためにキューに入れる。
プロセッサ1200は、実行ユニット1216a、1216b、1216n等のセットを有する実行ロジック1214も含み得る。いくつかの実施形態では、特定の機能または機能のセットに特化した複数の実行ユニットを含んでもよい。他の実施形態では、実行ユニットを1つだけ含んでも、特定の機能を実行できる実行ユニットを1つ含んでもよい。実行ロジック1214は、コード命令が指定するオペレーションを実行する。
コード命令が指定するオペレーションの実行完了後に、バックエンドロジック1218がコード1204の命令をリタイアさせることができる。一実施形態において、プロセッサ1200はアウトオブオーダ実行を可能にするが、命令のインオーダリタイアメントが必要である。リタイアメントロジック1220は、様々な既知の形態(例えば、リオーダバッファ等)を取ってよい。このように、プロセッサ1200はコード1204の実行中に、少なくとも、デコーダにより生成される出力、レジスタリネーミングロジック1210により利用されるハードウェアレジスタおよびテーブル、ならびに実行ロジック1214により修正される任意のレジスタ(不図示)に関して変化する。
図12には示されていないが、処理要素には、チップ上にプロセッサ1200と共に他の要素が含まれてもよい。例えば処理要素には、プロセッサ1200と共にメモリ制御ロジックが含まれてよい。処理要素には、I/O制御ロジックが含まれてもよく、かつ/またはメモリ制御ロジックと統合されたI/O制御ロジックが含まれてもよい。処理要素には、1つまたは複数のキャッシュも含まれてよい。いくつかの実施形態では、不揮発性メモリ(フラッシュメモリまたはヒューズなど)もプロセッサ1200と共にチップ上に含まれてよい。
図13Aは、本開示の1つまたは複数の実施形態による例示的なインオーダパイプラインおよび例示的なレジスタリネーミングアウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図13Bは、本開示の1つまたは複数の実施形態による、プロセッサに含まれるインオーダキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミングアウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。図13Aから図13Bの実線のボックスは、インオーダパイプラインおよびインオーダコアを示し、破線のボックスの任意選択的な追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示している。インオーダの態様がアウトオブオーダの態様のサブセットであることを考慮して、アウトオブオーダの態様を説明する。
図13Aにおいて、プロセッサパイプライン1300は、フェッチステージ1302、長さデコードステージ1304、デコードステージ1306、割り当てステージ1308、リネーミングステージ1310、スケジューリング(ディスパッチまたは発行としても知られる)ステージ1312、レジスタ読み取り/メモリ読み取りステージ1314、実行ステージ1316、ライトバック/メモリ書き込みステージ1318、例外処理ステージ1322およびコミットステージ1324を含む。
図13Bは、実行エンジンユニット1350に結合されたフロントエンドユニット1330を含むプロセッサコア1390を示し、両方ともメモリユニット1370に結合されている。プロセッサコア1390およびメモリユニット1370は、本明細書で図示および説明される実装形態(例えば、プロセッサ102、メモリ120)に関連して用いられ得るタイプのハードウェアの例である。
コア1390は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってよい。さらに別のオプションとして、コア1390は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、グラフィックスコア等の専用コアであり得る。加えて、プロセッサコア1390およびそのコンポーネントは、論理プロセッサおよびそれらのそれぞれのコンポーネントを実装するために用いられ得る例示的なアーキテクチャを表す。
フロントエンドユニット1330は、命令キャッシュユニット1334に結合された分岐予測ユニット1332を含み、命令キャッシュユニットは、命令変換ルックアサイドバッファ(TLB)ユニット1336に結合され、これは命令フェッチユニット1338に結合され、これはデコードユニット1340に結合される。デコードユニット1340(またはデコーダ)は、命令をデコードし、出力として、1つまたは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の命令からデコードされる、またはそうでなければそれを反映するもしくはそれから導出される他の制御信号を生成し得る。デコードユニット1340は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例は、ルックアップテーブル、ハードウェア実装形態、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等を含むが、これらに限定されない。一実施形態において、コア1390は、(例えば、デコードユニット1340内またはそうでなければフロントエンドユニット1330内の)特定のマクロ命令のためのマイクロコードを格納するマイクロコードROMまたは他の媒体を含む。デコードユニット1340は、実行エンジンユニット1350内のリネーム/アロケータユニット1352に結合されている。
実行エンジンユニット1350は、リタイアメントユニット1354および1つまたは複数のスケジューラユニット1356のセットに結合されたリネーム/アロケータユニット1352を含む。スケジューラユニット1356は、予約ステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット1356は、物理レジスタファイルユニット1358に結合されている。物理レジスタファイルユニット1358の各々は1つまたは複数の物理レジスタファイルを表し、これらの異なるものは、例えば、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)等、1つまたは複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット1358は、ベクトルレジスタユニットと、書き込みマスクレジスタユニットと、スカラレジスタユニットとを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタ(GPR)を提供し得る。本明細書において説明される少なくともいくつかの実施形態では、レジスタユニット1358は、本明細書で図示および説明される実装形態(例えば、レジスタ110)に関連して用いられ得るタイプのハードウェアの例である。レジスタリネーミングおよびアウトオブオーダ実行が実装され得る様々な態様(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用いて、フューチャファイル、履歴バッファ、およびリタイアメントレジスタファイルを用いて、レジスタマップおよびレジスタのプールを用いて等)を示すために、物理レジスタファイルユニット1358はリタイアメントユニット1354によって重複される。リタイアメントユニット1354および物理レジスタファイルユニット1358は、実行クラスタ1360に結合されている。実行クラスタ1360は、1つまたは複数の実行ユニット1362のセットおよび1つまたは複数のメモリアクセスユニット1364のセットを含む。実行ユニット1362は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行し得る。いくつかの実施形態は、特定の機能または機能セットに専用の複数の実行ユニットを含み得るが、他の実施形態は、ただ1つの実行ユニット、または全てが全ての機能を実行する複数の実行ユニットを含み得る。実行ユニット1362はまた、メインメモリ(例えば、メモリユニット1370)およびページミスハンドラ(PMH)にアクセスするためにコアによって用いられるアドレスを計算するためのアドレス生成ユニットを含み得る。
特定の実施形態では、特定のタイプのデータ/演算に対して別個のパイプラインを作成するので(例えば、スカラ整数パイプライン、スカラ浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/または、メモリアクセスパイプラインが、それぞれ固有のスケジューラユニット、物理レジスタファイルユニット、および/または、実行クラスタを有し、また別個のメモリアクセスパイプラインの場合、特定の実施形態が実装され、その実施形態では、このパイプラインの実行クラスタのみがメモリアクセスユニット1364を有する)、独自のスケジューラユニット1356、物理レジスタファイルユニット1358および実行クラスタ1360は、場合によっては複数のものとして示されている。別個のパイプラインが用いられる場合、これらのパイプラインのうちの1つまたは複数がアウトオブオーダ発行/実行であり、残りがインオーダであり得ることも理解されたい。
メモリアクセスユニット1364のセットは、メモリユニット1370に結合され、メモリユニット1370は、データTLBユニット1372を含み、データTLBユニット1372は、レベル2(L2)キャッシュユニット1376に結合されたデータキャッシュユニット1374に結合されている。例示的な一実施形態において、メモリアクセスユニット1364は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、これらの各々は、メモリユニット1370内のデータTLBユニット1372に結合される。命令キャッシュユニット1334は、メモリユニット1370内のレベル2(L2)キャッシュユニット1376にさらに結合されている。L2キャッシュユニット1376は、1つまたは複数の他のレベルのキャッシュ、および最終的にはメインメモリに結合される。加えて、データTLBユニット1372内にマッチが見つからない場合にページテーブル内のアドレスマッピングをルックアップするために、ページミスハンドラもコア1390内に含まれ得る。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン1300を以下のとおり実装し得る。すなわち、1)命令フェッチユニット1338がフェッチステージ1302および長さデコードステージ1304を実行し、2)デコードユニット1340がデコードステージ1306を実行し、3)リネーム/アロケータユニット1352が割り当てステージ1308およびリネーミングステージ1310を実行し、4)スケジューラユニット1356がスケジューリングステージ1312を実行し、5)物理レジスタファイルユニット1358およびメモリユニット1370がレジスタ読み取り/メモリ読み取りステージ1314を実行し、実行クラスタ1360が実行ステージ1316を実行し、6)メモリユニット1370および物理レジスタファイルユニット1358がライトバック/メモリ書き込みステージ1318を実行し、7)様々なユニットが例外処理ステージ1322に関与してよく、ならびに8)リタイアメントユニット1354および物理レジスタファイルユニット1358がコミットステージ1324を実行する。
コア1390は、本明細書において説明される命令を含む、1つまたは複数の命令セット(例えば、x86命令セット(より新しいバージョンで追加されたいくつかの拡張を有する)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスのARM命令セット(NEONなどの任意選択的な追加の拡張を有する))をサポートし得る。一実施形態において、コア1390は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、パックドデータを用いて多くのマルチメディアアプリケーションによって用いられるオペレーションを実行できるようにする。
コアは、マルチスレッディング(オペレーションまたはスレッドの2つ以上の並列セットを実行する)をサポートしてよく、タイムスライスマルチスレッディング、同時マルチスレッディング(単一の物理コアが、物理コアが同時にマルチスレッディングされるスレッドの各々のための論理コアを提供する)、またはそれらの組み合わせ(例えば、Intel(登録商標)ハイパースレッディング技術などにおけるタイムスライスフェッチおよびデコード、ならびにその後の同時マルチスレッディング)を含む様々な方法でサポートし得ることを理解されたい。したがって、少なくともいくつかの実施形態では、マルチスレッドエンクレーブがサポートされ得る。
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで用いられてもよいことを理解されたい。図示のプロセッサの実施形態はまた、別々の命令キャッシュユニット1334/データキャッシュユニット1374と共有L2キャッシュユニット1376とを含むが、代替的な実施形態は、例えばレベル1(L1)内部キャッシュのように、命令とデータの両方に単一の内部キャッシュを、または複数レベルの内部キャッシュを含み得る。いくつかの実施形態では、システムは、コアおよび/またはプロセッサの外部にある内部キャッシュと外部キャッシュとの組み合わせを含み得る。代替的に、キャッシュの全てはコアおよび/またはプロセッサの外側にあり得る。
図14は、ポイントツーポイント(PtP)構成で配置された、一実施形態によるコンピューティングシステム1400を示している。特に、図14は、プロセッサ、メモリ、入力/出力デバイスが複数のポイントツーポイントインタフェースで相互接続されたシステムを示している。概して、本明細書において説明されるコンピューティングシステムまたはコンピューティングデバイスのうちの1つまたは複数は、コンピューティングシステム1400と同じまたは同様の方式で構成され得る。
プロセッサ1470および1480は、シングルコアプロセッサ1474aおよび1484aまたはマルチコアプロセッサ1474aおよび1474bならびに1484aおよび1484bとして実装され得る。プロセッサ1470および1480は各々、キャッシュ1471および1481を含んでよく、これらのキャッシュは、それぞれの1つまたは複数のコアにより用いられる。共有キャッシュ(不図示)が、いずれかのプロセッサの内部または両方のプロセッサの外部に含まれながらも、P-P相互接続を介してこれらのプロセッサと接続され得る。これにより、いずれかのまたは両方のプロセッサのローカルキャッシュ情報は、プロセッサが低電力モードへ置かれている場合、共有キャッシュに格納され得る。本明細書において説明される1つまたは複数の実施形態はコンピューティングシステム1400などのコンピューティングシステムに実装され得ることに留意されたい。さらに、プロセッサ1470および1480は、本明細書で示され説明される実装形態(例えば、プロセッサ102)に関連して用いられ得るタイプのハードウェアの例である。
プロセッサ1470および1480はまた、それぞれのプロセッサにローカルに取り付けられたメインメモリの部分であり得るメモリ素子1432および1434と通信するために、統合メモリコントローラロジック(IMC)1472および1482をそれぞれ含み得る。代替的な実施形態において、メモリコントローラロジック1472および1482は、プロセッサ1470および1480とは別のディスクリートロジックでもよい。メモリ素子1432および/または1434は、本明細書において概説されるオペレーションおよび機能の実現においてプロセッサ1470および1480により用いられる様々なデータを格納し得る。
プロセッサ1470および1480は、他の図に関連して説明されるものなど、任意のタイプのプロセッサであってよい。プロセッサ1470および1480は、ポイントツーポイント(PtP)インタフェース1450を介し、ポイントツーポイントインタフェース回路1478および1488をそれぞれ用いてデータを交換してよい。プロセッサ1470および1480は各々、ポイントツーポイントインタフェース回路1476、1486、1494および1498を用いて、個々のポイントツーポイントインタフェース1452および1454を介して、入力/出力(I/O)サブシステム1490とデータを交換し得る。I/Oサブシステム1490は、PtPインタフェース回路であり得るインタフェース回路1492を用いて、高性能グラフィックスインタフェース1439を介して高性能グラフィックス回路1438とデータを交換してもよい。一実施形態において、高性能グラフィックス回路1438は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、埋め込みプロセッサ等の特定用途向けプロセッサである。I/Oサブシステム1490は、人間のユーザが見ることができるデータを表示するためのディスプレイ1433と通信してもよい。代替的な実施形態において、図14に示されるPtPリンクのうちのいずれかまたは全てが、PtPリンクではなく、マルチドロップバスとして実装され得る。
I/Oサブシステム1490は、インタフェース回路1496を介してバス1410と通信し得る。バス1410は、バスブリッジ1418、I/Oデバイス1414、および1つまたは複数の他のプロセッサ1415など、それを介して通信する1つまたは複数のデバイスを有し得る。バス1420を介して、バスブリッジ1418は、ユーザインタフェース1422(キーボード、マウス、タッチスクリーン、もしくは他の入力デバイスなど)、通信デバイス1426(モデム、ネットワークインタフェースデバイス、またはコンピュータネットワーク1460を通して通信し得る他のタイプの通信デバイスなど)、オーディオI/Oデバイス1424、および/またはストレージユニット1428などの他のデバイスと通信し得る。ストレージユニット1428は、プロセッサ1470および/または1480によって実行され得るデータおよびコード1430を格納し得る。代替的な実施形態において、バスアーキテクチャの任意の部分が、1つまたは複数のPtPリンクを用いて実装され得る。
コード1430などのプログラムコードを入力命令に適用して、本明細書において説明される機能を実行し、出力情報を生成し得る。出力情報は、既知の方式で1つまたは複数の出力デバイスに適用され得る。本願の目的のために、処理システムは、コンピューティングシステム1400の一部であってもよく、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコード(例えば、1430)は、処理システムと通信するために、高水準手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装され得る。プログラムコードは、必要に応じて、アセンブリ言語または機械言語で実装されてもよい。実際には、本明細書において説明されるメカニズムの範囲は、いかなる特定のプログラミング言語にも限定されない。いずれの場合であっても、言語はコンパイルまたは解釈された言語であってもよい。
いくつかの場合に、命令コンバータを用いて、命令をソース命令セットからターゲット命令セットに変換し得る。例えば、命令コンバータは、命令を、コアによって処理されるべき1つまたは複数の他の命令に変換(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)、モーフィング、エミュレート、または別様で変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装され得る。命令コンバータは、プロセッサ上にあっても、プロセッサ外にあっても、または部分的にプロセッサ上かつ部分的にプロセッサ外にあってもよい。
図15は、本開示の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令へ変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。図示されている実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組み合わせとして実装され得る。図15は、高水準言語1502におけるプログラムが、少なくとも1つのx86命令セットコア1516でプロセッサによってネイティブに実行され得るx86バイナリコード1506を生成するためにx86コンパイラ1504を用いてコンパイルされ得ることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1516は、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ結果を実現すべく、(1)Intel x86命令セットコアの命令セットの大部分、または(2)少なくとも1つのx86命令セットコアを有するIntelプロセッサ上で実行することを対象とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを、互換的に実行または別様で処理することによって、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。x86コンパイラ1504は、追加のリンク処理を用いて、または用いることなく、少なくとも1つのx86命令セットコア1516を有するプロセッサ上で実行できるx86バイナリコード1506(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図15は、高水準言語1502におけるプログラムが、少なくとも1つのx86命令セットコアがないプロセッサ1514(例えば、カリフォルニア州サニーベールのMIPS TechnologyのMIPS命令セットを実行する、および/またはカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)によってネイティブに実行され得る代替的な命令セットバイナリコード1510を生成するために代替的な命令セットコンパイラ1508を用いてコンパイルされ得ることを示す。命令コンバータ1512は、x86バイナリコード1506をx86命令セットコアのないプロセッサ1514によってネイティブに実行され得るコードへ変換するために用いられる。この変換されたコードは、これを行うことが可能である命令コンバータを作成することが困難であるため、代替的な命令セットバイナリコード1510と同じではない可能性があるが、変換済みコードは全般的なオペレーションを実現し、かつ代替的な命令セットから命令を構成することになる。したがって、命令コンバータ1512は、エミュレーション、シミュレーション、または任意の他の処理によって、x86命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスがx86バイナリコード1506を実行できるようにする、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
少なくとも1つの実施形態の1つまたは複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上に格納された代表的な命令によって実装されてもよく、この命令は、機械によって読み取られた場合、機械に、本明細書において説明される技術のうちの1つまたは複数を実行するためのロジックを作成させる。そのような表現は、「IPコア」として知られており、有形の機械可読媒体上に格納され、ロジックまたはプロセッサを実際に作成する製造機械にロードするように様々な顧客または製造施設に供給され得る。
そのような機械可読記憶媒体は、ハードディスク、フロッピーディスクを含む任意の他のタイプのディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD-ROM)、コンパクトディスク・リライタブル(CD-RW)、および光磁気ディスク、リードオンリメモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)などのランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)、磁気もしくは光カード、または電子命令を格納するのに適した任意の他のタイプの媒体などの記憶媒体を含む、機械またはデバイスによって製造または形成される品目の非一時的な有形の構成を含み得るが、これらに限定されない。
したがって、本開示の実施形態には、本明細書において説明される構造、回路、装置、プロセッサ、および/またはシステム特徴を定義するハードウェア記述言語(HDL)などの命令を含むか、または設計データを含む、非一時的有形機械可読媒体も含まれる。そのような実施形態は、プログラム製品とも称され得る。
図14に示されるコンピューティングシステムは、本明細書において説明される様々な実施形態を実装するために利用され得るコンピューティングシステムの一実施形態の概略図である。図14に示されるシステムの様々なコンポーネントは、システムオンチップ(SoC)アーキテクチャにおいて、または本明細書において提供される例および実装形態の機能および特徴を実現することが可能な任意の他の好適な構成において組み合わされ得ることが理解されよう。
特定の実装例および概して関連する方法に関して本開示を説明してきたが、これらの実装例および方法の変更例および置換例が当業者には明らかであろう。例えば、本明細書において説明された動作は、説明されたものとは異なる順序で実行され、依然として、望ましい結果を実現できる。一例として、添付の図に示されたプロセスは、望ましい結果を実現するために、必ずしも図に示した特定の順序も、連続した順序も必要とするわけではない。特定の実装例では、マルチタスクおよび並列処理が有利であり得る。他の変形例が、以下の特許請求の範囲に含まれる。
本明細書に提示されるアーキテクチャは、例としてのみ提供され、非排他的かつ非限定的であるように意図されている。さらに、開示された様々な部分は、論理的な分割のみを意図しており、必ずしも物理的に別個のハードウェアおよび/またはソフトウェアコンポーネントを表す必要はない。特定のコンピューティングシステムは、単一の物理メモリデバイス内にメモリ素子を提供してよく、他の場合には、メモリ素子は、多くの物理デバイスにわたって機能的に分散されてよい。仮想マシンマネージャまたはハイパーバイザの場合、機能の全部または一部は、開示された論理機能を提供するために仮想化層上で動作するソフトウェアまたはファームウェアの形態で提供され得る。
本明細書において提供される例では、インタラクションは単一のコンピューティングシステムに関して説明され得ることに留意されたい。しかしながら、これは、明確さおよび例示の目的でのみ行われている。特定の場合には、単一のコンピューティングシステムのみを参照することによって、フローの所与のセットの機能のうちの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は、周辺デバイスと、プロセッサと、メモリとの間をインタフェースするための相互接続回路と、前記相互接続回路により前記周辺デバイスから受信される読み取り要求のプロセス識別子に基づいて、1つまたは複数のキーを取得し、前記1つまたは複数のキーに基づいて前記読み取り要求の暗号化された仮想アドレスを復号化して、暗号化されていない仮想アドレスを取得し、前記相互接続回路に、前記暗号化されていない仮想アドレスに基づいて前記メモリから暗号化されたデータを取得させ、前記1つまたは複数のキーに基づいて前記暗号化されたデータを復号化して、平文データを取得し、前記相互接続回路に、前記平文データを前記周辺デバイスへ送信させるための暗号コンピューティング回路とを備える装置を含む。
例2は、例1に記載の主題を含み、前記1つまたは複数のキーは、データキーおよびポインタキーを含み、前記暗号化された仮想アドレスの前記復号化は、前記ポインタキーに基づいており、前記暗号化されたデータの前記復号化は、前記データキーに基づいている。
例3は、例1または2に記載の主題を含み、前記暗号コンピューティング回路は、前記暗号化された仮想アドレスをトウィーク入力として用いて前記暗号化されたデータを復号化する。
例4は、例1から3のいずれか1つに記載の主題を含み、前記暗号コンピューティング回路は、前記プロセス識別子の前記ビットに基づいて、前記メモリ内の階層テーブル構造から前記1つまたは複数のキーを取得する。
例5は、例1から4のいずれか1つに記載の主題を含み、前記相互接続回路は、前記メモリから前記暗号化されたデータを取得し、前記平文データを前記周辺デバイスへ送信するための入力/出力メモリ管理ユニット(IOMMU)を有する。
例6は、例5に記載の主題を含み、前記暗号コンピューティング回路は、前記IOMMU内に実装される。
例7は、例5に記載の主題を含み、前記IOMMUは、前記暗号化されていない仮想アドレスに基づいて、前記メモリ内の物理アドレスを取得する。
例8は、例1から7のいずれか1つに記載の主題を含み、前記相互接続回路は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ベース相互接続を実装し、前記プロセス識別子は、プロセスアドレス空間識別子(PASID)である。
例9は、例8に記載の主題を含み、前記1つまたは複数のキーは、PASIDテーブルのエントリから取得される。
例10は、例8に記載の主題を含み、前記1つまたは複数のキーは、PASIDテーブルのエントリにおけるポインタに基づいて、前記メモリから取得される。
例11は、例8から10のいずれか1つに記載の主題を含み、前記読み取り要求は、バス/デバイス/機能(BDF)をさらに含み、前記1つまたは複数のキーはさらに、前記BDFに基づいて取得される。
例12は、暗号コンピューティングエージェントおよびホストデバイスにおいて、プロセス識別子と暗号化された仮想アドレスとを含む読み取り要求を相互接続にわたって周辺デバイスから受信する段階と、前記読み取り要求の前記プロセス識別子に基づいて、1つまたは複数のキーを取得する段階と、前記1つまたは複数のキーに基づいて前記読み取り要求の前記暗号化された仮想アドレスを復号化して、暗号化されていない仮想アドレスを取得する段階と、前記暗号化されていない仮想アドレスに基づいて、メモリから暗号化されたデータを取得する段階と、前記1つまたは複数のキーに基づいて前記暗号化されたデータを復号化して、平文データを取得する段階と、前記平文データを前記相互接続にわたって前記周辺デバイスへ送信する段階とを備える方法を含む。
例13は、例12に記載の主題を含み、前記1つまたは複数のキーは、データキーおよびポインタキーを含み、前記暗号化された仮想アドレスの前記復号化は、前記ポインタキーに基づいており、前記暗号化されたデータの前記復号化は、前記データキーに基づいている。
例14は、例12または13に記載の主題を含み、前記暗号化されたデータを復号化する段階は、前記暗号化された仮想アドレスをトウィーク入力として用いる段階を有する。
例15は、例12から14のいずれか1つに記載の主題を含み、前記キーは、前記プロセス識別子の前記ビットに基づいて、前記メモリ内の階層テーブル構造から取得される。
例16は、例12から15のいずれか1つに記載の主題を含み、前記暗号化されていない仮想アドレスに基づいて物理アドレスを取得する段階をさらに備える。
例17は、例12から16のいずれか1つに記載の主題を含み、前記相互接続は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ベース相互接続であり、前記プロセス識別子は、プロセスアドレス空間識別子(PASID)である。
例18は、例17に記載の主題を含み、前記1つまたは複数のキーは、PASIDテーブルのエントリから取得される。
例19は、例17に記載の主題を含み、前記1つまたは複数のキーは、PASIDテーブルのエントリにおけるポインタに基づいて、前記メモリから取得される。
例20は、例17から19のいずれか1つに記載の主題を含み、前記読み取り要求は、バス/デバイス/機能(BDF)をさらに含み、前記1つまたは複数のキーはさらに、前記BDFに基づいて取得される。
例21は、命令を備える1つまたは複数の非一時的コンピュータ可読媒体であって、前記命令は、電子デバイスの1つまたは複数のプロセッサによる前記命令の実行時に、プロセス識別子と暗号化された仮想アドレスとを含む読み取り要求を相互接続にわたって周辺デバイスから受信することと、前記読み取り要求の前記プロセス識別子に基づいて、1つまたは複数のキーを取得することと、前記1つまたは複数のキーに基づいて前記読み取り要求の前記暗号化された仮想アドレスを復号化して、暗号化されていない仮想アドレスを取得することと、前記暗号化されていない仮想アドレスに基づいて、メモリから暗号化されたデータを取得することと、前記1つまたは複数のキーに基づいて前記暗号化されたデータを復号化して、平文データを取得することと、前記平文データが前記相互接続にわたって前記周辺デバイスへ送信されるようにすることとを前記電子デバイスに実行させる、コンピュータ可読媒体を含む。
例22は、例21に記載の主題を含み、前記1つまたは複数のキーは、データキーおよびポインタキーを含み、前記暗号化された仮想アドレスの前記復号化は、前記ポインタキーに基づいており、前記暗号化されたデータの前記復号化は、前記データキーに基づいている。
例23は、例21または22に記載の主題を含み、前記命令は、前記暗号化された仮想アドレスをトウィーク入力として用いて前記暗号化されたデータを復号化する。
例24は、例21から23のいずれか1つに記載の主題を含み、前記命令は、前記プロセス識別子の前記ビットに基づいて、前記メモリ内の階層テーブル構造から前記1つまたは複数のキーを取得する。
例25は、例21から24のいずれか1つに記載の主題を含み、前記命令はさらに、前記暗号化されていない仮想アドレスに基づいて物理アドレスを取得する。
例26は、例21から25のいずれか1つに記載の主題を含み、前記相互接続は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ベース相互接続であり、前記プロセス識別子は、プロセスアドレス空間識別子(PASID)である。
例27は、例26に記載の主題を含み、前記1つまたは複数のキーは、PASIDテーブルのエントリから取得される。
例28は、例26に記載の主題を含み、前記1つまたは複数のキーは、PASIDテーブルのエントリにおけるポインタに基づいて、前記メモリから取得される。
例29は、例26から28のいずれか1つに記載の主題を含み、前記読み取り要求は、バス/デバイス/機能(BDF)をさらに含み、前記1つまたは複数のキーはさらに、前記BDFに基づいて取得される。
例30は、周辺デバイスと、プロセッサと、メモリとの間をインタフェースするための相互接続回路と、前記相互接続回路により前記周辺デバイスから受信される書き込み要求のプロセス識別子に基づいて、1つまたは複数のキーを取得し、前記1つまたは複数のキーに基づいて前記読み取り要求の暗号化された仮想アドレスを復号化して、暗号化されていない仮想アドレスを取得し、前記1つまたは複数のキーに基づいて、前記書き込み要求に関連付けられたデータを暗号化し、前記相互接続回路に、前記暗号化されたデータを格納のために前記メモリへ送信させるための暗号コンピューティング回路とを備える装置を含む。
例31は、例30に記載の主題を含み、前記1つまたは複数のキーは、データキーおよびポインタキーを含み、前記暗号化された仮想アドレスの前記復号化は、前記ポインタキーに基づいており、前記書き込み要求に関連付けられた前記データの前記暗号化は、前記データキーに基づいている。
例32は、例30または31に記載の主題を含み、前記暗号コンピューティング回路は、前記暗号化された仮想アドレスをトウィーク入力として用いて前記書き込み要求に関連付けられた前記データを暗号化する。
例33は、例30から32のいずれか1つに記載の主題を含み、前記暗号コンピューティング回路は、前記プロセス識別子の前記ビットに基づいて、前記メモリ内の階層テーブル構造から前記1つまたは複数のキーを取得する。
例34は、例30から33のいずれか1つに記載の主題を含み、前記相互接続回路は、前記相互接続回路に、前記暗号化されたデータを格納のために前記メモリへ送信させるための入力/出力メモリ管理ユニット(IOMMU)を有する。
例35は、例34に記載の主題を含み、前記暗号コンピューティング回路は、前記IOMMU内に実装される。
例36は、例34に記載の主題を含み、前記IOMMUは、前記暗号化されていない仮想アドレスに基づいて、前記メモリ内の物理アドレスを取得する。
例37は、例30-36のいずれか1つに記載の主題を含み、前記相互接続回路は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ベース相互接続を実装し、前記プロセス識別子は、プロセスアドレス空間識別子(PASID)である。
例38は、例37に記載の主題を含み、前記1つまたは複数のキーは、PASIDテーブルのエントリから取得される。
例39は、例37に記載の主題を含み、前記1つまたは複数のキーは、PASIDテーブルのエントリにおけるポインタに基づいて、前記メモリから取得される。
例40は、例37から39のいずれか1つに記載の主題を含み、前記読み取り要求は、バス/デバイス/機能(BDF)をさらに含み、前記1つまたは複数のキーはさらに、前記BDFに基づいて取得される。
例41は、暗号コンピューティングエージェントおよびホストデバイスにおいて、書き込まれるデータとプロセス識別子と暗号化された仮想アドレスとを含む書き込み要求を相互接続にわたって周辺デバイスから受信する段階と、前記書き込み要求の前記プロセス識別子に基づいて1つまたは複数のキーを取得する段階と、前記1つまたは複数のキーに基づいて前記書き込み要求の前記暗号化された仮想アドレスを復号化して、暗号化されていない仮想アドレスを取得する段階と、前記1つまたは複数のキーに基づいて、書き込まれる前記データを暗号化する段階と、前記暗号化されたデータをメモリに格納する段階とを備える方法を含む。
例42は、例41に記載の主題を含み、前記1つまたは複数のキーは、データキーおよびポインタキーを含み、前記暗号化された仮想アドレスの前記復号化は、前記ポインタキーに基づいており、書き込まれる前記データの前記暗号化は、前記データキーに基づいている。
例43は、例41または42に記載の主題を含み、書き込まれる前記データを暗号化する段階は、前記暗号化された仮想アドレスをトウィーク入力として用いる段階を有する。
例44は、例41から43のいずれか1つに記載の主題を含み、前記キーは、前記プロセス識別子の前記ビットに基づいて、前記メモリ内の階層テーブル構造から取得される。
例45は、例41から44のいずれか1つに記載の主題を含み、前記暗号化されていない仮想アドレスに基づいて物理アドレスを取得する段階をさらに備える。
例46は、例41から45のいずれか1つに記載の主題を含み、前記相互接続は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ベース相互接続であり、前記プロセス識別子は、プロセスアドレス空間識別子(PASID)である。
例47は、例46に記載の主題を含み、前記1つまたは複数のキーは、PASIDテーブルのエントリから取得される。
例48は、例46に記載の主題を含み、前記1つまたは複数のキーは、PASIDテーブルのエントリにおけるポインタに基づいて、前記メモリから取得される。
例49は、例46から48のいずれか1つに記載の主題を含み、前記読み取り要求は、バス/デバイス/機能(BDF)をさらに含み、前記1つまたは複数のキーはさらに、前記BDFに基づいて取得される。
例50は、命令を備える1つまたは複数の非一時的コンピュータ可読媒体であって、前記命令は、電子デバイスの1つまたは複数のプロセッサによる前記命令の実行時に、メモリに書き込まれるデータとプロセス識別子と暗号化された仮想アドレスとを含む書き込み要求を相互接続にわたって周辺デバイスから受信することと、前記書き込み要求の前記プロセス識別子に基づいて、1つまたは複数のキーを取得することと、前記1つまたは複数のキーに基づいて前記書き込み要求の前記暗号化された仮想アドレスを復号化して、暗号化されていない仮想アドレスを取得することと、前記1つまたは複数のキーに基づいて、書き込まれる前記データを暗号化することと、前記暗号化されたデータが格納のために前記メモリへ送信されるようにすることとを前記電子デバイスに実行させる、コンピュータ可読媒体を含む。
例51は、例50に記載の主題を含み、前記1つまたは複数のキーは、データキーおよびポインタキーを含み、前記暗号化された仮想アドレスの前記復号化は、前記ポインタキーに基づいており、書き込まれる前記データの前記暗号化は、前記データキーに基づいている。
例52は、例50または51に記載の主題を含み、前記命令は、前記暗号化された仮想アドレスをトウィーク入力として用いて、書き込まれる前記データを暗号化する。
例53は、例50から52のいずれか1つに記載の主題を含み、前記命令は、前記プロセス識別子の前記ビットに基づいて、前記メモリ内の階層テーブル構造から前記1つまたは複数のキーを取得する。
例54は、例50から53のいずれか1つに記載の主題を含み、前記暗号化されていない仮想アドレスに基づいて物理アドレスを取得する段階をさらに備える。
例55は、例50から54のいずれか1つに記載の主題を含み、前記相互接続は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ベース相互接続であり、前記プロセス識別子は、プロセスアドレス空間識別子(PASID)である。
例56は、例55に記載の主題を含み、前記命令は、PASIDテーブルのエントリから前記1つまたは複数のキーを取得する。
例57は、例55に記載の主題を含み、前記命令は、PASIDテーブルのエントリにおけるポインタに基づいて、前記メモリから前記1つまたは複数のキーを取得する。
例58は、例55から57のいずれか1つに記載の主題を含み、前記読み取り要求は、バス/デバイス/機能(BDF)をさらに含み、前記1つまたは複数のキーはさらに、前記BDFに基づいて取得される。
例59は、プロセッサと、メモリと、前記プロセッサおよびメモリを周辺デバイスと相互接続するための相互接続回路であって、前記メモリからの読み取りまたは前記メモリへの書き込みの要求を前記周辺デバイスから受信する、相互接続回路と、前記要求のプロセス識別子に基づいて1つまたは複数のキーを取得し、前記1つまたは複数のキーに基づいて前記要求の暗号化された仮想アドレスを復号化して、暗号化されていない仮想アドレスを取得し、前記メモリからのデータの読み取りの要求について、前記暗号化されていない仮想アドレスに基づいて、メモリから暗号化されたデータを取得し、前記1つまたは複数のキーに基づいて前記暗号化されたデータを復号化して、平文データを取得し、前記平文データが前記周辺デバイスへ送信されるようにし、前記メモリへのデータの書き込みの要求について、前記1つまたは複数のキーに基づいて、前記書き込み要求に関連付けられたデータを暗号化し、前記暗号化されたデータが前記メモリに格納されるようにするための暗号コンピューティング回路とを備えるシステムを含む。
例60は、例59に記載の主題を含み、前記1つまたは複数のキーは、データキーおよびポインタキーを含み、前記暗号化された仮想アドレスの前記復号化は、前記ポインタキーに基づいており、データの前記暗号化または前記復号化は、前記データキーに基づいている。
例61は、例59または60に記載の主題を含み、前記回路はさらに、前記メモリからのデータの読み取りの要求について、前記暗号化された仮想アドレスをトウィーク入力として用いて前記暗号化されたデータを復号化し、前記メモリへのデータの書き込みの要求について、前記暗号化された仮想アドレスをトウィーク入力として用いて前記データを暗号化する。
例62は、例59から61のいずれか1つに記載の主題を含み、前記暗号コンピューティング回路は、前記プロセス識別子の前記ビットに基づいて、前記メモリ内の階層テーブル構造から前記1つまたは複数のキーを取得する。
例63は、例59から62のいずれか1つに記載の主題を含み、前記相互接続回路は、前記メモリから読み取り要求に関連付けられた前記暗号化されたデータを取得し、書き込み要求に関連付けられた前記暗号化されたデータを前記メモリへの格納のために送信するための入力/出力メモリ管理ユニット(IOMMU)を有する。
例64は、例63に記載の主題を含み、前記暗号コンピューティング回路は、前記IOMMU内に実装される。
例65は、例63に記載の主題を含み、前記IOMMUは、前記暗号化されていない仮想アドレスに基づいて、前記メモリ内の物理アドレスを取得する。
例66は、例59から65のいずれか1つに記載の主題を含み、前記相互接続回路は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ベース相互接続を実装し、前記プロセス識別子は、プロセスアドレス空間識別子(PASID)である。
例67は、例66に記載の主題を含み、前記1つまたは複数のキーは、PASIDテーブルのエントリから取得される。
例68は、例66に記載の主題を含み、前記1つまたは複数のキーは、PASIDテーブルのエントリにおけるポインタに基づいて、前記メモリから取得される。
例69は、例66から68のいずれか1つに記載の主題を含み、前記読み取り要求は、バス/デバイス/機能(BDF)をさらに含み、前記1つまたは複数のキーはさらに、前記BDFに基づいて取得される。
[他の可能な項目]
(項目1)
周辺デバイスと、プロセッサと、メモリとの間をインタフェースするための相互接続回路と、
前記相互接続回路により前記周辺デバイスから受信される読み取り要求のプロセス識別子に基づいて、1つまたは複数のキーを取得し、
前記1つまたは複数のキーに基づいて前記読み取り要求の暗号化された仮想アドレスを復号化して、暗号化されていない仮想アドレスを取得し、
前記相互接続回路に、前記暗号化されていない仮想アドレスに基づいて前記メモリから暗号化されたものを取得させ、
前記1つまたは複数のキーに基づいて前記暗号化されたデータを復号化して、平文データを取得し、
前記相互接続回路に、前記平文データを前記周辺デバイスへ送信させる
ための暗号コンピューティング回路と
を備える装置。
(項目2)
前記1つまたは複数のキーは、データキーおよびポインタキーを含み、前記暗号化された仮想アドレスの前記復号化は、前記ポインタキーに基づいており、前記暗号化されたデータの前記復号化は、前記データキーに基づいている、項目1に記載の装置。
(項目3)
前記暗号コンピューティング回路は、前記暗号化された仮想アドレスをトウィーク入力として用いて前記暗号化されたデータを復号化する、項目1に記載の装置。
(項目4)
前記暗号コンピューティング回路は、前記プロセス識別子の前記ビットに基づいて、前記メモリ内の階層テーブル構造から前記1つまたは複数のキーを取得する、項目1に記載の装置。
(項目5)
前記相互接続回路は、前記メモリから前記暗号化されたデータを取得し、前記平文データを前記メモリへ送信するための入力/出力メモリ管理ユニット(IOMMU)を有する、項目1に記載の装置。
(項目6)
前記暗号コンピューティング回路は、前記IOMMU内に実装される、項目5に記載の装置。
(項目7)
前記IOMMUは、前記暗号化されていない仮想アドレスに基づいて、前記メモリ内の物理アドレスを取得する、項目5に記載の装置。
(項目8)
前記相互接続回路は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ベース相互接続を実装し、前記プロセス識別子は、プロセスアドレス空間識別子(PASID)である、項目1に記載の装置。
(項目9)
前記1つまたは複数のキーは、PASIDテーブルのエントリから取得される、項目8に記載の装置。
(項目10)
前記1つまたは複数のキーは、PASIDテーブルのエントリにおけるポインタに基づいて、前記メモリから取得される、項目8に記載の装置。
(項目11)
前記読み取り要求は、バス/デバイス/機能(BDF)をさらに含み、前記1つまたは複数のキーはさらに、前記BDFに基づいて取得される、項目8に記載の装置。
(項目12)
命令を備える1つまたは複数の非一時的コンピュータ可読媒体であって、前記命令は、電子デバイスの1つまたは複数のプロセッサによる前記命令の実行時に、
プロセス識別子と暗号化された仮想アドレスとを含む読み取り要求を相互接続にわたって周辺デバイスから受信することと、
前記読み取り要求の前記プロセス識別子に基づいて、1つまたは複数のキーを取得することと、
前記1つまたは複数のキーに基づいて前記読み取り要求の前記暗号化された仮想アドレスを復号化して、暗号化されていない仮想アドレスを取得することと、
前記暗号化されていない仮想アドレスに基づいて、メモリから暗号化されたデータを取得することと、
前記1つまたは複数のキーに基づいて前記暗号化されたデータを復号化して、平文データを取得することと、
前記平文データが前記相互接続にわたって前記周辺デバイスへ送信されるようにすることと
を前記電子デバイスに実行させる、
コンピュータ可読媒体。
(項目13)
前記1つまたは複数のキーは、データキーおよびポインタキーを含み、前記暗号化された仮想アドレスの前記復号化は、前記ポインタキーに基づいており、前記暗号化されたデータの前記復号化は、前記データキーに基づいている、項目12に記載のコンピュータ可読媒体。
(項目14)
前記命令は、前記暗号化された仮想アドレスをトウィーク入力として用いて、前記暗号化されたデータを復号化する、項目12に記載のコンピュータ可読媒体。
(項目15)
前記命令は、前記プロセス識別子の前記ビットに基づいて、前記メモリ内の階層テーブル構造から前記1つまたは複数のキーを取得する、項目12に記載のコンピュータ可読媒体。
(項目16)
前記相互接続は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ベース相互接続であり、前記プロセス識別子は、プロセスアドレス空間識別子(PASID)である、項目12に記載のコンピュータ可読媒体。
(項目17)
前記1つまたは複数のキーは、PASIDテーブルのエントリから取得される、項目16に記載のコンピュータ可読媒体。
(項目18)
前記1つまたは複数のキーは、PASIDテーブルのエントリにおけるポインタに基づいて、前記メモリから取得される、項目16に記載のコンピュータ可読媒体。
(項目19)
前記読み取り要求は、バス/デバイス/機能(BDF)をさらに含み、前記1つまたは複数のキーはさらに、BDFに基づいて取得される、項目16に記載のコンピュータ可読媒体。
(項目20)
プロセッサと、
メモリと、
前記プロセッサおよびメモリを周辺デバイスと相互接続するための相互接続回路であって、前記メモリからの読み取りまたは前記メモリへの書き込みの要求を前記周辺デバイスから受信する、相互接続回路と、
前記要求のプロセス識別子に基づいて1つまたは複数のキーを取得し、
前記1つまたは複数のキーに基づいて前記要求の暗号化された仮想アドレスを復号化して、暗号化されていない仮想アドレスを取得し、
前記メモリからのデータの読み取りの要求について、
前記暗号化されていない仮想アドレスに基づいて、メモリから暗号化されたデータを取得し、
前記1つまたは複数のキーに基づいて前記暗号化されたデータを復号化して、平文データを取得し、
前記平文データが前記周辺デバイスへ送信されるようにし、
前記メモリへのデータの書き込みの要求について、
前記1つまたは複数のキーに基づいて、前記書き込み要求に関連付けられたデータを暗号化し、
前記暗号化されたデータが前記メモリに格納されるようにする
ための暗号コンピューティング回路と
を備えるシステム。
(項目21)
前記1つまたは複数のキーは、データキーおよびポインタキーを含み、前記暗号化された仮想アドレスの前記復号化は、前記ポインタキーに基づいており、データの前記暗号化または前記復号化は、前記データキーに基づいている、項目20に記載のシステム。
(項目22)
前記回路はさらに、
前記メモリからのデータの読み取りの要求について、前記暗号化された仮想アドレスをトウィーク入力として用いて前記暗号化されたデータを復号化し、
前記メモリへのデータの書き込みの要求について、前記暗号化された仮想アドレスをトウィーク入力として用いて前記データを暗号化する、
項目20に記載のシステム。
(項目23)
前記暗号コンピューティング回路は、前記プロセス識別子の前記ビットに基づいて、前記メモリ内の階層テーブル構造から前記1つまたは複数のキーを取得する、項目20に記載のシステム。
(項目24)
前記相互接続回路は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ベース相互接続を実装し、前記プロセス識別子は、プロセスアドレス空間識別子(PASID)である、項目20に記載のシステム。
(項目25)
前記1つまたは複数のキーは、PASIDテーブルのエントリにおけるポインタに基づいて、PASIDテーブルのエントリから、または前記メモリから取得される、項目24に記載のシステム。

Claims (25)

  1. 周辺デバイスと、プロセッサと、メモリとの間をインタフェースするための相互接続回路と、
    前記相互接続回路により前記周辺デバイスから受信される読み取り要求のプロセス識別子に基づいて、1つまたは複数のキーを取得し、
    前記1つまたは複数のキーに基づいて前記読み取り要求の暗号化された仮想アドレスを復号化して、暗号化されていない仮想アドレスを取得し、
    前記相互接続回路に、前記暗号化されていない仮想アドレスに基づいて前記メモリから暗号化されたデータを取得させ、
    前記1つまたは複数のキーに基づいて前記暗号化されたデータを復号化して、平文データを取得し、
    前記相互接続回路に、前記平文データを前記周辺デバイスへ送信させる
    ための暗号コンピューティング回路と
    を備える装置。
  2. 前記1つまたは複数のキーは、データキーおよびポインタキーを含み、前記暗号化された仮想アドレスの前記復号化は、前記ポインタキーに基づいており、前記暗号化されたデータの前記復号化は、前記データキーに基づいている、請求項1に記載の装置。
  3. 前記暗号コンピューティング回路は、前記暗号化された仮想アドレスをトウィーク入力として用いて前記暗号化されたデータを復号化する、請求項1または2に記載の装置。
  4. 前記暗号コンピューティング回路は、前記プロセス識別子のビットに基づいて、前記メモリ内の階層テーブル構造から前記1つまたは複数のキーを取得する、請求項1または2に記載の装置。
  5. 前記相互接続回路は、前記メモリから前記暗号化されたデータを取得し、前記平文データを前記メモリへ送信するための入力/出力メモリ管理ユニット(IOMMU)を有する、請求項1または2に記載の装置。
  6. 前記暗号コンピューティング回路は、前記IOMMU内に実装される、請求項5に記載の装置。
  7. 前記IOMMUは、前記暗号化されていない仮想アドレスに基づいて、前記メモリ内の物理アドレスを取得する、請求項5に記載の装置。
  8. 前記相互接続回路は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ベース相互接続を実装し、前記プロセス識別子は、プロセスアドレス空間識別子(PASID)である、請求項1または2に記載の装置。
  9. 前記1つまたは複数のキーは、PASIDテーブルのエントリから取得される、請求項8に記載の装置。
  10. 前記1つまたは複数のキーは、PASIDテーブルのエントリにおけるポインタに基づいて、前記メモリから取得される、請求項8に記載の装置。
  11. 前記読み取り要求は、バス/デバイス/機能(BDF)をさらに含み、前記1つまたは複数のキーはさらに、前記BDFに基づいて取得される、請求項8に記載の装置。
  12. プロセス識別子と暗号化された仮想アドレスとを含む読み取り要求を相互接続にわたって周辺デバイスから受信する段階と、
    前記読み取り要求の前記プロセス識別子に基づいて、1つまたは複数のキーを取得する段階と、
    前記1つまたは複数のキーに基づいて前記読み取り要求の前記暗号化された仮想アドレスを復号化して、暗号化されていない仮想アドレスを取得する段階と、
    前記暗号化されていない仮想アドレスに基づいて、メモリから暗号化されたデータを取得する段階と、
    前記1つまたは複数のキーに基づいて前記暗号化されたデータを復号化して、平文データを取得する段階と、
    前記平文データを前記相互接続にわたって前記周辺デバイスへ送信する段階と
    を備える方法。
  13. 前記1つまたは複数のキーは、データキーおよびポインタキーを含み、前記暗号化された仮想アドレスの前記復号化は、前記ポインタキーに基づいており、前記暗号化されたデータの前記復号化は、前記データキーに基づいている、請求項12に記載の方法。
  14. 前記暗号化されたデータは、暗号化された仮想アドレスをトウィーク入力として用いて復号化される、請求項12または13に記載の方法。
  15. 前記1つまたは複数のキーは、前記プロセス識別子のビットに基づいて、前記メモリ内の階層テーブル構造から取得される、請求項12または13に記載の方法。
  16. 前記相互接続は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ベース相互接続であり、前記プロセス識別子は、プロセスアドレス空間識別子(PASID)である、請求項12または13に記載の方法。
  17. 前記1つまたは複数のキーは、PASIDテーブルのエントリから取得される、請求項16に記載の方法。
  18. 前記1つまたは複数のキーは、PASIDテーブルのエントリにおけるポインタに基づいて、前記メモリから取得される、請求項16に記載の方法。
  19. 前記読み取り要求は、バス/デバイス/機能(BDF)をさらに含み、前記1つまたは複数のキーはさらに、BDFに基づいて取得される、請求項16に記載の方法。
  20. 請求項12または13に記載の方法をプロセッサに実行させるコンピュータプログラム。
  21. プロセッサと、
    メモリと、
    前記プロセッサおよびメモリを周辺デバイスと相互接続するための相互接続回路であって、前記メモリからの読み取りまたは前記メモリへの書き込みの要求を前記周辺デバイスから受信する、相互接続回路と、
    前記要求のプロセス識別子に基づいて1つまたは複数のキーを取得し、
    前記1つまたは複数のキーに基づいて前記要求の暗号化された仮想アドレスを復号化して、暗号化されていない仮想アドレスを取得し、
    前記メモリからのデータの読み取りの要求について、
    前記暗号化されていない仮想アドレスに基づいて、メモリから暗号化されたデータを取得し、
    前記1つまたは複数のキーに基づいて前記暗号化されたデータを復号化して、平文データを取得し、
    前記平文データが前記周辺デバイスへ送信されるようにし、
    前記メモリへのデータの書き込みの要求について、
    前記1つまたは複数のキーに基づいて、前記書き込み要求に関連付けられたデータを暗号化し、
    前記暗号化されたデータが前記メモリに格納されるようにする
    ための暗号コンピューティング回路と
    を備えるシステム。
  22. 前記1つまたは複数のキーは、データキーおよびポインタキーを含み、前記暗号化された仮想アドレスの前記復号化は、前記ポインタキーに基づいており、データの前記暗号化または前記復号化は、前記データキーに基づいている、請求項21に記載のシステム。
  23. 前記暗号コンピューティング回路はさらに、
    前記メモリからのデータの読み取りの要求について、前記暗号化された仮想アドレスをトウィーク入力として用いて前記暗号化されたデータを復号化し、
    前記メモリへのデータの書き込みの要求について、前記暗号化された仮想アドレスをトウィーク入力として用いて前記データを暗号化する、
    請求項21または22に記載のシステム。
  24. 前記暗号コンピューティング回路は、前記プロセス識別子のビットに基づいて、前記メモリ内の階層テーブル構造から前記1つまたは複数のキーを取得する、請求項21または22に記載のシステム。
  25. 前記相互接続回路は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ベース相互接続を実装し、前記プロセス識別子は、プロセスアドレス空間識別子(PASID)である、請求項21または22に記載のシステム。
JP2022166576A 2021-12-10 2022-10-18 レガシ周辺デバイスを用いた暗号コンピューティング Pending JP2023086670A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/548,170 2021-12-10
US17/548,170 US20220100911A1 (en) 2021-12-10 2021-12-10 Cryptographic computing with legacy peripheral devices

Publications (1)

Publication Number Publication Date
JP2023086670A true JP2023086670A (ja) 2023-06-22

Family

ID=80822578

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022166576A Pending JP2023086670A (ja) 2021-12-10 2022-10-18 レガシ周辺デバイスを用いた暗号コンピューティング

Country Status (4)

Country Link
US (1) US20220100911A1 (ja)
EP (1) EP4195054A1 (ja)
JP (1) JP2023086670A (ja)
CN (1) CN116260606A (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11874777B2 (en) * 2021-12-16 2024-01-16 International Business Machines Corporation Secure communication of virtual machine encrypted memory
US20240297854A1 (en) * 2023-03-01 2024-09-05 Nio Technology (Anhui) Co., Ltd. Distributed function-specific buffer arrangement in a communication layer
CN116760631B (zh) * 2023-08-09 2023-10-31 国网浙江省电力有限公司 基于调控云平台的多业务数据分级管控方法及系统

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10310990B2 (en) * 2016-06-24 2019-06-04 Hewlett Packard Enterprise Development Lp Direct memory access encryption with application provided keys
US11010067B2 (en) * 2018-12-28 2021-05-18 Intel Corporation Defense against speculative side-channel analysis of a computer system
US11580234B2 (en) * 2019-06-29 2023-02-14 Intel Corporation Implicit integrity for cryptographic computing
US11755500B2 (en) * 2020-12-26 2023-09-12 Intel Corporation Cryptographic computing with disaggregated memory
US11669625B2 (en) * 2020-12-26 2023-06-06 Intel Corporation Data type based cryptographic computing
WO2022139850A1 (en) * 2020-12-26 2022-06-30 Intel Corporation Cryptographic computing including enhanced cryptographic addresses
US11625337B2 (en) * 2020-12-26 2023-04-11 Intel Corporation Encoded pointer based data encryption
US11960723B2 (en) * 2022-05-27 2024-04-16 Samsung Electronics Co., Ltd. Method and system for managing memory associated with a peripheral component interconnect express (PCIE) solid-state drive (SSD)

Also Published As

Publication number Publication date
EP4195054A1 (en) 2023-06-14
US20220100911A1 (en) 2022-03-31
CN116260606A (zh) 2023-06-13

Similar Documents

Publication Publication Date Title
US11755500B2 (en) Cryptographic computing with disaggregated memory
EP3757856B1 (en) Cryptographic isolation of memory compartments in a computing environment
US11575504B2 (en) Cryptographic computing engine for memory load and store units of a microarchitecture pipeline
NL2029792B1 (en) Cryptographic computing including enhanced cryptographic addresses
EP3757858A1 (en) Memory write for ownership access in a core
US11625337B2 (en) Encoded pointer based data encryption
CN110659244A (zh) 内联编码能力
JP2023086670A (ja) レガシ周辺デバイスを用いた暗号コンピューティング
US20220121447A1 (en) Hardening cpu predictors with cryptographic computing context information
WO2023107212A1 (en) Cryptographic computing with context information for transient side channel security
CN115879176A (zh) 存储器辅助的内联加密/解密
US20240104027A1 (en) Temporal information leakage protection mechanism for cryptographic computing
EP4020273A1 (en) Cache line slot level encryption based on context information
US12032486B2 (en) Transient side-channel aware architecture for cryptographic computing