개요
Attestation이란 소프트웨어가 지금 돌아가는 Hardware에서 Intel SGX나 Intel TDX와 같은 기능을 잘 제공하고 있는지 확인하기 위한 절차를 말한다. 인증에는 Local Attestation과 Remote Attestation이 있다. Local은 Encalve와 Encalve사이에서의 인증이고, Remote attestation은 Enclave와 Hardware사이의 인증이다. Intel SGX는 Local + Remote를 지원하며, Intel TDX와 같은 경우에는 OS만을 인증하면 됨으로 Local Attestation이 필요없다.
예시
Online game을 생각하면 이해하기 쉽다. 서버입장에서 각각의 플레이어들은 반드시 조작되지 않은 클라이언트를 이용해서 서버에 접근해야 한다. 이때 Remote attestation은 서버가 클라이언트가 조작되지 않음을 증명하도록 각 클라이언트에 요청하는 단계이다. Local Attestation은 라이브러리 함수들을 생각할 수 있다. 각각의 라이브러리 함수가 따로 Enclave안에서 돌고 있을때 Local attestation은 각각의 Enclave가 서로 Attestation을 유지하면서 돌고 있음을 증명해준다. 이를 통해서 서로다른 Enclave를 신뢰하게 할 수 있다.
Intel SGX
Intel SGX에서 Enclave란 Trusted Application Code를 말한다.
- MRENCLAVE: 우선 Encalve Identity (256-bit hash)는 모든 Enclave에 대해서 Intel이 생성한다. 이 키는 Enclave의 Code, data, stack, heap 와 일부 필수적인 Security flag들을 Secure hash를 떠서 MRENCLAVE라는 위치에 보관한다.
- REPORT: REPORT라는 자료구조는,
EREPORT
라는 Instruction을 통해서 User가 획득할 수 있다. 이 자료구조에는 Enclave에 대한 Hash값 (MRENCLAVE), REPORT KEY값이 진짜 REPORT에 해당하는지 확인하기 위한 MAC(Message authentication code)값이 저장되어 있다. 또한 REPORT에는 User data field가 있어서, User가 원하는 데이터를 임의로 넣을 수 있다. - REPORT KEY:
EREPORT
가 Valid한지 확인하기 위해서 사용하는 특정 Report에 대한 key값이다. - EGETKEY: REPORT KEY를 주어진 REPORT에 대해서 생성한다.
Local Attestation
여러개의 Enclave들이 서로 신뢰하기 위해서는 서로 Authenticate를 진행해야 한다. 이를 위해서 Intel SGX는 Local Attestation을 제공한다. 우선 Application A와 Application B가 있을 경우에, 서로 어떻게 Local Attestation을 진행하는지 알아보자.
- 우선 서로 어떤 방법으로든 통신할 수 있는 채널을 만든다. 이 채널은 신뢰할 필요가 없다.
- Application B는 MRENCLAVE값을 위 채널을 통해서 Application A에게 보낸다.
- A는 Application B의 MRENCLAVE를 사용해서 EREPORT를 CPU에 요청해 REPORT를 생성한다. 그리고 이 리포트를 B에게 다시 보낸다.
- B는 EGETKEY를 통해서 A가 생성한 REPORT에 해당하는 REPORT KEY를 생성한다. 이때 EGETKEY는 Harware specific한 정보를 가지고 REPORT KEY를 생성하며, 만약 REPORT가 같은 하드웨어가 아니면 REPORT KEY가 생성되지 않는다. 따라서 B는 A가 같은 하드웨어에 있는지 파악할 수 있다.
- B는 A가 보낸 REPORT에는 A의 MRENCLAVE값이 있는데, 이 값을 이용해서 EREPORT로 REPORT를 REPORT를 만들어 Application A에게 보낸다.
- 같은 방식을 통해서 서로 Valid한지를 확인하고 REPORT의 User data field에 Diffie-Hellman Key와 같은 Secure key값을 주고 받아서 Secure channel을 만들어 통신한다.
Remote Attestation
Remote attestation은 Intel SGX장치가 진짜 Intel CPU위에서 특정 Version을 만족시키면서 돌고 있다는 것을 보장하는 절차이다. 이러한 절차를 위해서 인텔은 Enhanced Privacy ID (EPID)란 플랫폼의 Integrity를 보장하는 Protocol을 개발하였다. EPID를 위해서 Intel은 하드웨어에서 제공하는 Enclave인 Provisioning Enclave (PvE)를 제공한다. PvE는 Intel의 Online remote attestation server와 Provisioning processs를 수행하는 역활을 한다.
Intel SGX와 Intel TDX는 유사한 Remote attestation방식을 제공함으로, 이 문서에서는 Intel TDX기반으로 설명한다. <내용 추가 필요>