メインコンテンツまでスキップ

Enclave Key

Enclave KeyはEnclave内のKey Managerにより生成・管理される署名鍵である。ELCは、この鍵を用いてcommitmentに対してsignを行うことでcommitment proofとしてsignatureを生成する。このsignatureは、on-chainのLCP Clientにより検証される。 なお、この文書ではEnclave keyの公開鍵を特にpublic Enclave keyと呼ぶ。

Key generation

Enclave Keyの生成は、LCP Nodeの起動直後にAppによるInitEnclaveCommandの実行により行われる。生成されたEnclave KeyはLCP Node内でSGXが提供する]Sealing機能を用いて暗号化した上で保存される。Appの再起動時にはそれをUnsealingした上でメモリ上に再度読み込まれる。Sealing Policyとしては、MRENCLAVE policyを用いる。これにより、LCP Enclaveの更新後に再起動した際に以前のバージョンで暗号化されたEnclave Keyを再利用することを防ぐ。

Enclave Keyのsignature algorithmは変更可能であり、これによりEVMにおいて不要なprecompiled contractの追加を避けることができる。現在、signature algorithmとしてECDSA(secp256k1)をサポートしている。Seedには、sgx_read_rand(内部ではRDRAND op)を用いることで、Enclave外からは読み取りが不可能なseed値を得ることができる。このseedを元に、Enclave Keyを生成する。

Remote Attestation

LCP Clientは、ELCのcommitmentを検証するためにEnclave Keyをtrustlessに登録する必要がある。このために、public Enclave Keyを含むLCP Enclaveに対してのQuoteを生成し、Remote AttestationによりVerifiable Quoteを生成する。このVerifiable QuoteはQuoteに関連づくenclaveが生成したことを検証可能にする。つまり、検証されたVerifiable Quoteの中に含まれるreport dataは期待するenclaveにより生成された、妥当なEnclave Keyである。

このRemote Attestationの実行は、新規LCP Nodeの起動、またはEnclave Keyの更新ごとに行う必要がある。

次の図は、Enclave Keyを生成し、IASを利用してそれを含むQuoteに対するAttestation Verification Report(AVR. cf. https://api.trustedservices.intel.com/documents/sgx-attestation-api-spec.pdf)を得るフローである。

フローの各Stepの詳細は次のようになる

  1. AppはInitEnclaveCommandをEnclaveに送信する。
  2. Enclaveはseed値を生成し、その値を元にEnclave Keyを生成する。そして、それをsealingしてローカルに保存する。
  3. Enclaveはpublic Enclave KeyをReport Dataとして含めて自身のReportを作成する。
  4. EnclaveはAppにReportを返す。
  5. Appは、Quoting Enclave(QE)にReportを渡してQuoteの作成を要求する。
  6. QEは、自身のAttestation Keyを使ってReportに署名を行い、Quoteを作成し、Appに返す。

以下のステップは、IASをはじめとする外部のAttestation Serviceを利用する場合のみ必要なことに注意。DCAPを利用するECDSA Attestationの場合は、6で得られたQuoteを外部検証可能なVerifiable Quoteとする。

  1. Appは得られたQuoteをIASに送信する。
  2. IASは、Quoteの検証を行い、QuoteとEnclaveの検証結果で構成されるレポートに対して署名を生成する。そして、それらのデータと署名を含んだAttestation Verification Report(AVR)を返す。署名に用いられる鍵はIntelが公開する鍵によりcertifyされている。そのため、AVRは外部検証可能である。

この得られたVerifiable Quote(AVR)は、LCP Client上にpublic Enclave Keyを登録する際に用いられる。このプロセスの詳細はRegisterEnclaveKeyで述べる。