Seal로 enclave secret 암호화하기
Seal-Nautilus pattern은 enclave binary에 대한 어떤 secret이든 암호화할 수 있는 enclave 애플리케이션용 안전한 secret 관리를 제공한다.
enclave의 지정된 Platform Configuration Register(PCR)로 구성된 Seal policy를 정의할 수 있다. 그런 다음 고정된 ID로 Seal을 사용해 데이터를 암호화한다. 주어진 PCR을 가진 enclave만 이를 복호화할 수 있다.
이 pattern은 자체 관리되는 TEE를 사용해 테스트되었다. Marlin Oyster deployments로는 테스트되지 않았다.
Components
Seal-Nautilus pattern을 보여주는 다음 예시는 다음 구성 요소를 사용한다:
-
AWS Nitro Enclave 내부에서 실행되는 Nautilus server(
src/nautilus-server/src/apps/seal-example): 이곳은 policy에 따라 Seal secret를 복호화할 수 있는 유일한 위치이다. 인터넷에는/get_attestation과/process_dataendpoint로 port 3000을 노출한다. 또한 enclave가 실행되는 host instance에서 key load 단계를 초기화하고 완료할 때만 사용할 수 있는 3개의/adminendpoint를 localhost에 port 3001로 노출한다. -
Seal CLI: 특히 이 예시에서는
encryptandfetch-keys를 사용한다. -
Move contract
move/seal-policy/seal_policy.move: enclave ephemeral key를 사용해 wallet public key에 commit된 signature를 검증하는seal_approvepolicy를 정의한다.
View the example's full source code.
Phase 1: Start and register the server
이 문맥에서 admin은 EC2 instance에 접근 권한이 있는 사람을 뜻한다. admin은 그 위에서 enclave binary를 빌드하고 실행할 수 있으며, EC2 instance의 localhost를 통해 admin 전용 enclave endpoint를 호출할 수 있다.
- admin은 게시된 Seal policy package ID와 Seal configuration으로
seal_config.yaml을 지정한다.
src/nautilus-server/src/apps/seal-example/seal_config.yaml. You probably need to run `pnpm prebuild` and restart the site.admin은 노출된 /get_attestation endpoint와 함께 enclave를 빌드하고 실행한다.
src/nautilus-server/src/apps/seal-example/endpoints.rs
src/nautilus-server/src/apps/seal-example/endpoints.rs. You probably need to run `pnpm prebuild` and restart the site.-
admin은 attestation response를 사용해 PCR과 enclave public key를 등록한다. 이 시점에는
SEAL_API_KEY가 아직 초기화되지 않았으므로/process_dataendpoint가 error를 반환한다. -
admin은 enclave를 온체인에 등록하고 enclave object ID와 initial shared version을 가져온다.
Phease 2: Initialize and complete key load
-
admin은 enclave object로
/admin/init_seal_key_load를 호출한다. enclave는 encodedFetchKeyRequest를 반환한다. -
admin은
FetchKeyRequest를 사용해 CLI를 호출하고 enclave의 encryption public key 아래에서 암호화된 Seal response를 가져온다. -
admin은 Seal response로
/admin/complete_seal_key_load를 호출한다. enclave는 모든 Seal key를 복호화해 이후 사용을 위해 memory에 cache한다.