ECDSA Attestation解説
Last updated
Last updated
SGXのRemote Attestationは、クラウドプラットフォーム上のSGXのハードウェアTCBとソフトウェアTCBを遠隔から評価できる機能である。は、SGXのRemote Attestation方式の一つである。
この方式では、Intel以外のサードパーティが、とに必要な環境構築を行う。プロビジョニングはECDSA Attestationを利用できるようにするための準備であり、鍵の生成等を行う。アテステーションでは、プラットフォームが評価のための証拠を生成し、それをユーザーが外部サービスを使って検証することで評価を行う。
DCAPは、サードパーティがECDSA Attestationの環境構築を簡単に行えるように、Intelがで配布しているプログラム及びソフトウェアである。これは改造して使っても良く、独自の環境を構築する場合は使わなくても良い。
EPID(Enhanced Privacy ID) Attestationは、従来SGXで採用されていたRemote Attestation方式である。プロビジョニングとアテステーションにはどちらもIntelのソフトウェアとサービスが利用されているが、EPIDの持つ匿名性により、Intelはプライバシーを侵害しないと主張している。 これに対してECDSA Attestationでは、ソフトウェアはサードパーティ製で改変可能であり、アテステーションもサードパーティに委任されている。Intelの関与は、保証すべき部分(例:正規CPUか否か)についての情報をAPIサービスを通して配布するに留まっている。
ECDSA Attestationは元々、以下のようなEPID Attestationが不都合なユースケースを想定して開発された。
ネットワークの大部分を、インターネットベースのサービスにアクセスできない環境(大規模イントラネット)で運用している事業者。
第三者に信頼性の判断を委託するリスクを嫌う事業者。
非常に分散して動作する特定のアプリケーションモデル(例:Peer-to-Peerネットワーク)。単一の検証ポイントを使用することは、このモデルにとって最適とは言えない。
EPIDが提供するプライバシー特性と相反する要求がある環境。
しかし、最新のSGXではEPIDが廃止されているため、これら以外のケースでもECDSA Attestationを使うことになる。
EnclaveはSGXで保護された領域であり、この中で動くプログラムや処理されるデータの機密性と完全性は保証される。その内容は誰でも作成でき、共有ライブラリ(.so)としてロードされる。ただし、作成者を示すための署名が必須である。
Enclaveの識別には2つのハッシュ値、MRENCLAVE、MRSIGNERが用いられる。これらは鍵の生成や証拠の検証に利用される。
Enclaveを一意に表す256bitハッシュ値である。Enclaveが初期化されてメモリ上に読み込まれると、SGXは以下を含む暗号化されたログを生成する。
内容:コード、データ、スタック、ヒープ
Enclave内の各ページの配置
使用中のセキュリティフラグ
これらのログの値に対する256bitハッシュ値がMRENCLAVEである。
Enclaveの署名に対応した公開鍵の256bitハッシュ値である。主にEnclaveの作成者を示す目的で使われる。MRENCLAVEよりも制約が弱くプラットフォームに値が依存しないため、デフォルトではこちらが検証で利用される。
dumpファイルには様々なメタデータが載っている。MRENCLAVEとMRSIGNERの項目は以下である。 MRENCLAVE: metadata->enclave_css.body.enclave_hash.m MRSIGNER: mrsigner->value
SGXではeFuseに焼き付けられた2種類のハードウェア鍵が利用され、これらがRoot of Trustになる。これらは主に派生鍵を生成するために利用され、eFuse外には出ない。
Root Provisioning Key (RPK) Intel Key Generation Facility (iKGF)と呼ばれるIntelが所有する安全なオフライン環境下で生成される共通鍵である。この鍵はCPU出荷時に埋め込まれ、Intelは生成された全てのRPKを把握している。また、RPKをセキュリティバージョンナンバー(SVN)の更新回数だけ疑似ランダム関数(PRF)でループさせることにより、TCBと紐づいた中間値を生成することができる。
Root Sealing Key (RSK) CPU内でランダムに生成される共通鍵である。Intelを含む誰もRSKの値は知らないため、この鍵から派生した鍵はそのプラットフォーム以外での模倣は非常に困難になる。
ここでは、ハードウェア鍵から派生して生成される鍵を紹介する。生成はSGX用の特殊命令であるEGETKEYで行う。全てEnclave、SVN、CPUに固有であり、同じ環境下であれば、何度呼び出しても同一の鍵を得られる。
Provisioning Certification Key (PCK) RPKから派生する秘密鍵。PCKに対応する証明書はRPKを所有するIntelのみが発行可能で、配布もしている。これによりCPUが本物でTCBが適切かどうかを確認できる。
Report Key RPKから派生する共通鍵。この鍵はEnclaveのメタデータであるReportを生成及び検証する際のCMACに利用される。
Seal Key RSKから派生する共通鍵。この鍵は生成するEnclaveのMRENCLAVEまたはMRSIGNERに固有の値になり、Enclaveのシーリング(二次記憶装置への保存)に利用される。
なお、鍵ではないがRPKから派生する構造体にEINIT Tokenがある。これはEnclaveの起動に必要なLaunch Tokenを生成及び取得するために利用されていたが、現在Launch Tokenはデフォルトで廃止され、代替として0埋めされた構造体が渡されている。
Attestation Keyは、プラットフォームが生成する証拠であるQuoteへの署名に使うECDSA秘密鍵である。プロビジョニングでは、この鍵に対してPCKにより証明書の役割を持つ構造体が発行される。
Local Attestationは、2つのEnclave間で特定の通信を行うことで、それらが同一プラットフォーム上にある事を証明する仕組みである。
この証明には、Reportと呼ばれる構造体を利用する。Reportは、Enclaveのメタデータが含まれる構造体であり、SGX独自の命令であるEREPORT命令により生成される。この命令では、自身以外のMRENCLAVEを入力できる。Reportには、命令を呼び出したEnclaveのMRENCLAVE及びMRSIGNER、SGXのセキュリティバージョン情報、任意のユーザーデータ、入力したMRENCLAVEのReport KeyによるCMACが含まれている。
Local Attestationの流れを以下に示す。ここでは、Enclave1がLocal Attestationを要求し、Enclave2がそれに応答する。
Enclave1はEnclave2に対してLocal Attestationを要求する。
Enclave2はEnclave1に対して自身のMRENCLAVEを送信する。
Enclave1はEnclave2のMRENCLAVEを入力として、EREPORT命令でReport構造体を生成する。その後、ReportはEnclave2に送信される。
Enclave2は渡されたReportのCMACを検証するため、EGETKEY命令でReport Keyを生成する。Report KeyはプラットフォームとEnclave毎に固有であるため、この検証によってEnclave2はEnclave1が同一プラットフォーム上にあることを確認できる。その後Enclave2は、Reportに含まれたEnclave1のMRENCLAVEを入力として、EREPORT命令で新たなReportを生成し、これをEnclave1に送信する。
Enclave1は受信したReportのCMACを検証するため、EGETKEY命令でReport Keyを生成する。これにより、Enclave1もEnclave2が同じプラットフォーム上にあることを確認し、Local Attestationが完了する。
ECDSA Attestationでは、特定の用途で使用される特殊なEnclaveが利用される。
Provisioning Certification Enclave (PCE) Intel署名付きである。PCKを生成及び利用できる唯一のEnclaveであり、プロビジョニングで利用される。中間認証局と似た役割を持ち、PCKを利用してAttestation Keyに対して証明書の役割を持つ構造体(Attestation Key Cert)を発行する。
Quoting Enclave (QE3) プラットフォームが生成する証拠であるQuoteを生成する役割を担い、そのためのAttestation Keyを生成及び利用するEnclaveである。なお、略称がQE3なのは、EPID AttestationのIntel製Quoting Enclaveと区別するためである。Intel署名のQE3が利用される事が多いが、サードパーティ製QE3を使う事もできる。
Quote Verification Enclave (QvE) ECDSA Attestationにおいて、Quoteを検証するために利用できるEnclaveである。QvEのアイデンティティ情報はPCSから取得できる。
Reference Launch Enclave (ref-LE) サードパーティが定めたホワイトリストやルールに基づいてEnclaveの起動可否を決めるためのEnclaveである。ref-LEはIntel以外のサードパーティが署名して利用する事ができ、その内容も変更する事ができる。ただし、現在デフォルトでは利用非推奨となっている。
Quoteは、プラットフォームが生成する評価のための証拠である。QuoteはQE3によって生成され、以下のような構造になっている。
Quoteには、Attestation KeyとPCKによる署名のチェーン、及びAttestation Key Certが含まれており、署名された内容にはQE3のReport及び検証対象のEnclaveのReportが含まれている。また、QE3とPCEのセキュリティバージョンナンバー(SVN)もヘッダーに含む。
プロビジョニングでは、アテステーションに使う鍵と証明書、つまりトラストチェーンの一部を構築する。これにはPCEとQE3を利用する。プロビジョニングフローを以下に示す。
QE3はAttestation Keyを生成する。
QE3はPCEとLocal Attestationを行った後、PCEのMRENCLAVEを入力としてReportを生成し、それとAttestation Keyを合わせてPCEに送信する。
PCEは受信したReportを検証した後、それらにPCKで署名する。この作成された構造体はAttestation Key Certと呼ばれ、Attestation Keyの証明書の役割を果たす。
PCEはAttestation Key CertをQE3に返送する。QE3はこれをEnclave内で保持する。
このフローにより、Attestation Key CertからPCK証明書、Intel CAのルート証明書までのトラストチェーンが確立され、実行時にはQuoteに対するAttestation Keyの署名からIntel CAまでのトラストチェーンを検証できるようになる。これはプラットフォーム内で完結しており、Intelの専用サービスとの通信を行うEPID Attestationのプロビジョニングとは異なる。
アテステーションによって、クラウドプラットフォーム上のSGXのハードウェアTCBとソフトウェアTCBを評価できる。具体的には、CPUが正規品であること、SGXのセキュリティバージョンが一定以上であること、及び検証対象のEnclaveのMRSIGNER及びMRENCLAVEを確認できる。アテステーションフローを以下に示す。
ApplicationはRelying Partyからアテステーションの要求を受信する。
ApplicationはEnclaveに対して、自身についてのQuoteを生成するよう依頼する。
EnclaveはQE3とLocal Attestationを行った後、EREPORT命令でQE3のMRENCLAVEを入力としたReportを生成し、それをQE3に送信する。
QE3はReportを検証した後、ReportとAttestation Key Certを合わせた構造体にAttestation Keyで署名することで、Quoteを生成する。
QuoteはApplicationを介してRelying Partyに送信される。
Relying Partyは受け取ったQuoteを検証するため、Verifierにこれを送信する。
Verifierは、Quoteの検証に必要な情報をPCCSから取得する。
Verifierは取得した情報を利用して、Quoteを検証する。
検証結果をRelying Partyに返信する。
Relying Partyは、検証結果を基にさらにRA対象EnclaveのMRENCLAVE等を確認出来る。
問題がなければECDSA Attestationが完了し、セキュアチャネルが確立される。
Intelは、以下の5つの項目の検証を行えば良いとしている。
QuoteからIntel CAまでの署名及び証明書のトラストチェーン(Intel CA-PCK-Attestation Key-Quote)は改ざんされていないか。
失効された署名鍵がトラストチェーンの途中に含まれていないか。
QE3がIntelが作成したものであり最新版か。
証明書に示されたTCBとQuoteのTCBは一致しているか。
検証対象のEnclaveがQuoteに示されたものと同様か。(VerifierではなくRelying Partyが確認する事もある)
なお、CPUが正規品である事、及びPCEが適切で最新である事は、トラストチェーンの検証により証明される。PCKはRPKとPCEに固有であり、その証明書はRPKを所有しているIntelのみが発行できる。このため、PCK証明書での署名検証によって、プラットフォームでCPUの正規品である事、及び適切なバージョンのPCEが使われている事を確認できる。
検証に必要な情報は、PCCS(Provisioning Certificate Caching Service)から取得する。
PCCSは、Intelが配布するデータをキャッシュするためのサーバである。これはDCAPに含まれており、サードパーティが自由に構築できる。IntelはQuoteの検証に必要な情報を配布するためにPCS(Provisioning Certification Service)を運営し、APIを公開している。このAPIを利用して取得されたデータがPCCSにキャッシュされる。PCCSがキャッシュ及び配布するデータ(つまり、PCSから取得できるデータ)は以下のとおりである。
PCK証明書
PCKの失効リスト
最低限必要なSGXのセキュリティバージョン
QE3のアイデンティティ情報
QvEのアイデンティティ情報
これらの値を調べるには、に含まれるツールであるsgx_signを利用する。調べたいEnclaveファイルに対してsgx_sign dump
コマンドでdumpファイルを作成することで、メタデータを取得できる。コマンドは例えば以下である。 /opt/intel/sgxsdk/bin/x64/sgx_sign dump -enclave enclave.signed.so -dumpfile dump.txt
アテステーションで検証されるQuoteの構成は、の項目で示した通りである。