web-dev-qa-db-ja.com

インテルSGXの詳細?

Intel SGXに関する情報はありますか?

私が理解していることから、すべての情報(コードとデータ)はRAMで暗号化されていますよね?強力なキー(128または256ビットのAES)などで暗号化されていますか?

また、リモート認証はどのように実行されますか?内部で実行されているプログラムが改ざんされていないことを証明するために、エンクレーブはどのような情報を送信しますか?

そしてもう1つ、SGXを使用するには、コンピューターがIntelサーバーに接続する必要がありますか?私はどこかでそういうケースを読んだことがありますが、それはかなり大きなプライバシー問題でしょう。しかし、私が読んだ記事に記載されている接続が、チップの製造中の1回限りの接続に関するものか、エンクレーブが作成または証明されるたびに確立する必要がある接続に関するものかはわかりません。

11
yaroslavl247

これらはIntel SGXに関する驚くほど深い質問なので、暗号化とプロトコルレベルの詳細をある程度までカバーして、概要を説明しようとしました。これが不明な場合は、フォローアップの質問をしてください!最後に参考文献のリストと追加のリソースを含めました。

メモリ暗号化

すべてのエンクレーブデータは、メモリ内で透過的に暗号化されます。これは、SGXメモリ暗号化エンジン(MEE)によって実行されます。 MEEは、マークルツリーの複雑な組み合わせ、AESカウンターモードの微調整バージョン、およびカーターウィグマンMAC構造を使用します。これは、128ビットの機密キー、56ビットのカウンター、128ビットの整合性キー(56ビットのMACタグを生成)、および512ビットのユニバーサルハッシュキー(MACの構築で使用)を使用します。これらは起動時に生成され、特別なMEEレジスタに配置され、システムのリセット時に破棄されます。 MEEは512ビットのキャッシュラインで動作するため、各暗号化には4つのAES操作が必要です。 (詳細については、[1、2、3]を参照してください。)

証明

各エンクレーブにはエンクレーブ証明書があり、これには想定される測定値、ベンダーID、製品ID、バージョン番号、およびいくつかのエンクレーブ属性が含まれています。

エンクレーブがセットアップされると(EADD/EEXTEND命令を使用して)、メモリーページのSHA-256ハッシュを取得することにより、その内容を測定します。これは、エンクレーブの初期化の時点で確定されます(すべての初期メモリーの内容がそのエンクレーブページにコピーされた後、EINIT命令を使用します)。このハッシュは、エンクレーブの測定値として機能します。これは、他のリモート認証手法と似ています。

エンクレーブは、ローカル認証プロセスを使用して、Quoting Enclaveと呼ばれる特別なIntelエンクレーブからそれ自体の署名付き証明書を取得します。最初に、エンクレーブは、EREPORT命令を使用してローカル認証レポートを要求します。 CPUは、エンクレーブの測定値と証明書でAES128-CMACタグを計算して、レポートを作成します。クォーティングエンクレーブはレポートのMACをチェックし、CPUのAttestation Key(クォーティングエンクレーブがアクセスするための特別な権限を持っている)を使用して署名に置き換えます。このシグネチャは、グループシグネチャスキームであるIntel Enhanced Privacy ID(EPID)スキーム[6,7,8]を使用します。つまり、有効な署名はそれがグループの一部であったことを証明しますが、それがどのメンバーであるかは明らかにしません。 Intelは、署名の検証を可能にするグループキーを保持しています。署名された証明書の引用はエンクレーブに返され、それを使用してリモートパーティを証明できます。

この署名された証明の見積もりは、リモートパーティに送信されます。エンクレーブの証明書(エンクレーブの測定値、製品ID番号、バージョン番号、ベンダーID、およびいくつかのエンクレーブ属性を含む)を証明します。リモートパーティはIntel Attestation Serviceに接続して、エンクレーブからの署名された証明書の引用を検証します。

リモート認証では、Intelが製造時にCPUに書き込む秘密(プロビジョニングシークレット)と、起動時にCPUに書き込む別の秘密(シーリングシークレット)を使用します。プロビジョニングシークレットはIntelと共有されます(証明サービス用にIntelデータベースに保存されます)。シーリングシークレットは、CPUの外部からはアクセスできません。

アテステーションキーはプロビジョニングエンクレーブに渡されます。プロビジョニングエンクレーブはプロビジョニングキー(プロビジョニングシークレットから派生)を使用して、正当であることをインテルサービスに証明します。アテステーションキーは、プロビジョニングシーリングキー(isはシーリングシークレットから派生)を使用してストレージに封印されます。保存された認証キーは、Intelサーバーにアクセスせずに繰り返し再利用できます。

インテルとの相互作用

SGX対応プロセッサーは、Intel認証サーバーとの通信を含む1回限りの初期化を行います。 [1、6、7]を参照してください。この初期化は、所有権の変更にも耐えます。

SGX対応プロセッサーは、証明キーを受け取るためにプロビジョニングエンクレーブを介してIntelサーバーに接続します。証明キーは封印および保管され、繰り返し使用して証明を作成できます。 Intelプロビジョニングサービスは、廃止されたSGXバージョンを検出し、新しい認証キーの発行を拒否できることに注意してください。

リモートパーティは、エンクレーブから署名された証明書の見積もりを確認するたびに、Intel Attestation Serviceに接続する必要があります。

参考文献

SGXの非常に詳細な扱いについては、「Intel SGX Explained」[1]をお勧めします。コンピューターアーキテクチャ、暗号化、低レベルの攻撃、およびその他の信頼されたコンピューティングハードウェア(SGXについて読みたいだけの場合や、これらのトピックに既に精通している場合はスキップできます)の背景が印象的です。この回答は、主に彼らのより詳細な説明の要約です。

MEEの詳細については、[2]と[3]をお勧めします。

もう1つの優れたドキュメント、特にSGXを使用して安全なサービスを実装する際に最新の技術に興味がある場合は、Jethro Beekmanによるこのテーマに関する論文[4]を参照してください。また、ソフトウェア実装者の観点からSGXに関する優れた背景を提供します。

Intel Resources Library [5]は、SGXの機能と実装に関するさまざまな詳細レベルのドキュメントを多数提供しています。

14
Chris Thompson