Skip to main content

Attestations

Nitro-Attestation is a unique feature available to Nitro Enclaves. The enclave leverages the attestation process to prove its identity and build trust with an external service.

Components

  • AttestationVerifier: A specialized enclave responsible for taking attestation requests from other enclaves and generating a Solidity-verifiable attestation.
  • AttestationAuthor: A smart contract containing functions that verify the attestation produced by the AttestationVerifier.

How Enclave Attestations Are Verified On-Chain

In this process, the Enclave requests an attestation from the Operator. The Operator forwards the attestation to the AttestationVerifier for validation. Once activated, the AttestationVerifier confirms the attestation and returns a verified result back to the Operator. Finally, the Operator submits this verified attestation to the AttestationAuthor smart contract on-chain, thereby proving its identity and establishing trust.

2b. Get Verified Attestation

The verified attestation is the attestation message that has been signed by the Attestation Verifier, thereby proving the existence of the enclave on the smart contract. Let mm be the raw attestation message. The Attestation Verifier uses its private key skAVsk_{\text{AV}} to sign mm and produce the signature σtextAV\sigma_{text{AV}}:

σAV=SignskAV(m)\sigma_{\text{AV}} = \text{Sign}_{sk_{\text{AV}}}(m)

The verified attestation is then the tuple (m,σAV))( m, \sigma_{\text{AV}})), which can be validated on-chain using the Attestation Verifier's public key (pkAV)( pk_{\text{AV}}):

VerifypkAV(m,σAV)=True\text{Verify}_{pk_{\text{AV}}}(m, \sigma_{\text{AV}}) = \text{True}

3. Submit Verified Attestation and Prove Identity

To establish trust, the operator submits the verified attestation along with a proof of identity. Let (I)( I ) represent the operator's identity information. The operator signs (I)( I ) using its private key (skOP)( sk_{\text{OP}} ) to generate the signature (σOP)( \sigma_{\text{OP}}):

σOP=SignskOP(I)\sigma_{\text{OP}} = \text{Sign}_{sk_{\text{OP}}}(I)

The operator then submits the set ((m,σAV,I,σOP))( (m, \sigma_{\text{AV}}, I, \sigma_{\text{OP}})) to the Attestation Author contract. The contract verifies the Attestation Verifier's signature with (pkAV)( pk_{\text{AV}}) and the operator's signature with (pkOP)( pk_{\text{OP}}). Once both verifications succeed, trust is established on-chain.