보안 엔클레이브(Secure Enclave)는 메인 프로세서 내에 격리된 실행 환경(TEE, Trusted Execution Environment)으로, 운영체제나 하이퍼바이저도 접근할 수 없는 보호 영역이다.
주요 TEE 기술 비교
| 기술 | 제조사 | 범위 | 특징 |
|---|
| Intel SGX | Intel | 사용자 공간 엔클레이브 | 코드·데이터 암호화, 원격 증명 |
| AMD SEV | AMD | VM 전체 메모리 암호화 | 하이퍼바이저 신뢰 불필요 |
| ARM TrustZone | ARM | Normal/Secure World 분리 | 모바일 SIM, DRM |
| Apple Secure Enclave | Apple | 별도 코프로세서 | Touch ID/Face ID 키 저장 |
Intel SGX 동작 원리
[일반 앱] [SGX 엔클레이브]
| |
|-- ecall() ----------> | 보호된 실행
| [EPC 메모리] ← 하드웨어 암호화
|<-- ocall() ---------- | OS 서비스 요청
|
OS/하이퍼바이저: 엔클레이브 메모리 접근 불가
원격 증명(Remote Attestation):
1. 엔클레이브가 Quote(서명된 측정값) 생성
2. Intel Attestation Service(IAS)에서 검증
3. 서버: 올바른 코드가 SGX에서 실행 중임을 확인
ARM TrustZone 구조
Normal World Secure World
(일반 OS/앱) (Trusted OS/TA)
| |
|-- SMC (Secure Monitor Call) -->|
| |
| [보안 부팅, 키 저장]
| [생체 데이터 처리]
| [DRM 콘텐츠 보호]
사용 예:
- 안드로이드 Keystore 키 보호
- 금융 앱 PIN 처리
- SIM 카드 인증
SGX 코드 예시
c
// 엔클레이브 내부 함수 (신뢰 코드)
// ecall_seal_data: 데이터를 엔클레이브에서 암호화 저장
sgx_status_t ecall_seal_data(
const uint8_t* plaintext,
size_t plaintext_len,
uint8_t* sealed_data,
size_t sealed_size)
{
// SGX sealing: 엔클레이브 고유 키로 암호화
return sgx_seal_data(
0, NULL,
plaintext_len, plaintext,
sealed_size, (sgx_sealed_data_t*)sealed_data
);
}
관련 문서
- •[[hardware-security-module|HSM]]
- •[[tpm|TPM]]
- •[[code-signing|코드 서명]]