Skip to content

TEE Attestor 개발 및 AWS Nitro Enclaves 구성 가이드 #33

@hyuki0130

Description

@hyuki0130

개요

ProofPort에서 자체 zkTLS Attestor 서비스를 구축하기 위한 TEE(Trusted Execution Environment) 개발 가이드입니다.

상세 문서: docs/TEE_ATTESTOR_DEVELOPMENT.md


1. TEE 기본 개념

TEE (Trusted Execution Environment)

  • 메인 프로세서 내의 격리된 보안 영역
  • 코드와 데이터의 기밀성/무결성 보호
  • 외부 네트워크 접근 불가 (vsock만 사용)

Attestation 프로세스

[Enclave 내부]                    [AWS Nitro Hypervisor]
     │                                    │
     │  1. get-attestation-document       │
     │ ─────────────────────────────────► │
     │                                    │
     │  2. PCRs + Nonce + 추가 데이터     │
     │ ◄───────────────────────────────── │
     │       (서명된 CBOR/COSE)           │

Platform Configuration Registers (PCRs)

PCR 내용 용도
PCR0 Enclave 이미지 파일 (EIF) 해시 코드 무결성 검증
PCR1 Linux 커널 + 부트스트랩 런타임 환경 검증
PCR2 애플리케이션 앱 코드 검증
PCR8 서명 인증서 서명된 빌드 검증

2. Attestor 아키텍처

zkTLS Attestor의 역할

  1. TLS 프록시: Client ↔ Data Source 간 TLS 트래픽 중계
  2. 데이터 관찰: 복호화된 요청/응답 관찰 (읽기만)
  3. 증명 생성: "이 데이터가 특정 서버에서 왔음"을 증명
  4. 서명: TEE의 Attestation으로 신뢰성 보장

두 가지 구현 방식

방식 특징 ProofPort 권장
MPC-TLS (TLSNotary) 2PC로 세션키 분할, 프라이버시 강화, 복잡하고 느림
Proxy 모델 (zkPass/Reclaim) Attestor가 전체 트래픽 관찰, TEE 내부 복호화, 간단하고 빠름

3. AWS Nitro Enclaves 구성

지원 인스턴스 타입

  • 범용: M5, M5a, M5d, M6i, M6a (4+ vCPUs)
  • 컴퓨팅 최적화: C5, C5a, C6i, C6a (4+ vCPUs)
  • 권장 시작 인스턴스: c6a.xlarge (가장 저렴한 4 vCPU)

제한사항

  • ❌ Bare metal 인스턴스
  • ❌ Burstable 인스턴스 (T3, T4g 등)
  • ❌ 1 vCPU 인스턴스

인프라 구성

VPC
├── Public Subnet
│   └── Application Load Balancer (HTTPS:443)
│
└── Private Subnet
    ├── EC2 Instance (c6a.xlarge, Nitro Enclave 활성화)
    │   ├── Parent Instance
    │   │   ├── API Gateway
    │   │   └── vsock Proxy
    │   │
    │   └── Nitro Enclave
    │       ├── TLS Proxy Engine
    │       ├── Attestation Generator
    │       └── Signature Service
    │
    └── NAT Gateway

4. 개발해야 할 컴포넌트

Parent Instance (6개)

  1. API Gateway - 클라이언트 요청 수신, 인증/인가
  2. vsock Proxy - TCP ↔ vsock 변환
  3. Session Manager - 세션 상태 관리

Nitro Enclave (3개)

  1. TLS Proxy Engine - TLS 핸드셰이크, 데이터 복호화/관찰
  2. Attestation Generator - Nitro NSM API 호출, 증명 문서 생성
  3. Signature Service - ECDSA 서명, 개인키 관리

프로젝트 구조

proofport-attestor/
├── parent/           # Parent Instance 코드
│   ├── src/
│   │   ├── api/      # API 엔드포인트
│   │   └── proxy/    # vsock 프록시
│   └── Dockerfile
│
├── enclave/          # Enclave 코드
│   ├── src/
│   │   ├── tls_proxy.rs
│   │   ├── attestation.rs
│   │   └── signature.rs
│   └── Dockerfile.enclave
│
├── shared/           # 공유 코드 (프로토콜, 타입)
├── scripts/          # 빌드/배포 스크립트
└── terraform/        # 인프라 코드

5. API 엔드포인트

POST /api/v1/session/create     # 새 attestation 세션 생성
POST /api/v1/session/{id}/request  # TLS 프록시 요청
POST /api/v1/session/{id}/attest   # Attestation 생성
GET  /api/v1/verify             # Attestation 검증

6. 비용 분석

AWS 월 비용 (서울 리전)

항목 비용
EC2 (c6a.xlarge) ~$100
ALB ~$20
NAT Gateway ~$35
데이터 전송 (100GB) ~$9
Nitro Enclaves $0 (무료)
합계 ~$164/월

vs 외부 서비스 비교

서비스 예상 비용 (10만 건/월)
자체 운영 (AWS Nitro) ~$164/월 (고정)
zkPass 비공개 (추정 $500+)
Reclaim Protocol 비공개 (토큰 기반)

결론: 대량 처리 시 자체 운영이 비용 효율적

확장 비용

처리량 인스턴스 수 월 비용
~10만 건/월 1 ~$164
~100만 건/월 3 ~$400
~1000만 건/월 10 ~$1,200

7. 보안 고려사항

신뢰 경계 (Trust Boundary)

신뢰하지 않음 신뢰함
Host OS Nitro Hypervisor
AWS Operator Enclave 내부 코드
네트워크 AWS Root of Trust
Parent App

Enclave 보안 특성

  • 🔒 메모리 암호화
  • 🔒 디버거 접근 불가
  • 🔒 외부 네트워크 불가 (vsock만)
  • 🔒 영구 저장소 없음

위협 완화

위협 완화 방법
악의적인 Host OS TEE 격리, 메모리 암호화
MITM 공격 TLS, Attestation
리플레이 공격 Nonce 사용
코드 변조 PCR 검증, 서명된 빌드

8. 구현 로드맵

Phase 1: 환경 구축

  • AWS 계정 설정 (Nitro Enclave 지원 리전)
  • Terraform으로 기본 인프라 배포
  • EC2 인스턴스 + Nitro Enclaves CLI 설치

Phase 2: 기본 Enclave 개발

  • Hello World Enclave 빌드/실행
  • vsock 통신 테스트
  • Attestation Document 생성 테스트

Phase 3: TLS Proxy 구현

  • rustls 기반 TLS 프록시
  • SNI 추출 및 라우팅
  • 응답 데이터 파싱

Phase 4: Attestation 서비스 구현

  • NSM API 연동
  • 서명 서비스
  • API Gateway

Phase 5: 프로덕션 배포

  • Auto Scaling 설정
  • 모니터링/로깅
  • 보안 감사

참고 자료


Labels

  • documentation
  • research
  • infrastructure

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions