신뢰할 수 없는 도메인에서 구조상 모든 데이터를 신뢰할 수 있는 도메인인 데이터(데이터 보호) 엔클레이브로 인텔® Software Guard Extensions 인텔® SGX 방법
엔클레이브 정의 언어(EDL) 파일에서 선언된 ecall:
구조 pair_t {
uint32_t 키;
uint32_t 값입니다.
};
구조 table_t {
구조 pair_t* 쌍;
uint32_t num_pairs;
};
public sgx_status_t ecall_sort_table([in] struct table_t * rel);
이 table_t 구조는 1.1 GB로, 128-MB EPC보다 훨씬 더 많습니다. 엔클레이브에 사용되는 메모리는 손상되지 않은 응용 프로그램에서 구조의 할당된 메모리보다 훨씬 적고 EPC에 노후화가 없습니다.
위의 구조 및 ecall 기능 정의는 구조의 로우 카피를 제공합니다. 로우 카피는 포인터가 참조하는 실제 데이터가 아닌 포인터 주소만 복사합니다. 이 경우 포인터 주소는 EPC의 엔클레이브의 메모리 공간 또는 신뢰할 수 있는 도메인에 복사되지만 데이터가 신뢰할 수 없는 도메인에 남아 있습니다. 대부분의 데이터는 보호되지 않은 도메인에 남아 있기 때문에 EPC에는 파이징이 없습니다.
다음은 로우 카피와 딥 카피를 달성하는 구조 정의와 선언입니다. 구조 데이터를 EPC에 심층 복사하기 위해, 개발자가 설정한 개수 및 크기를 사용하여 EDL 파일의 구조를 선언합니다.
구조 pair_t {
uint32_t 키;
uint32_t 값입니다.
};
이 구조 선언으로 쌍 구조의 로우 카피가 됩니다.
구조 table_t {
구조 pair_t* 쌍;
uint32_t num_pairs;
};
이 구조 선언으로 쌍 구조의 심층 사본이 나타남
구조 deep_table_t {
[개수 = 1, 크기 = 12] 구조 pair_t* 쌍;
uint32_t num_pairs;
};
신뢰 {
이 기능 선언을 통해 rel 구조의 로우 카피가 됩니다.
공용 sgx_status_t ecall_sort_table([in] struct table_t * rel);
이 기능 선언을 통해 rel 구조의 심층 사본이 나타남
공용 sgx_status_t ecall_deep_sort_table([in, count = 1] 구조 deep_table_t * rel);
};
컴파일 후 생성된 enclave_t.c 기능을 확인 합니다. 이 sgx_ecall_deep_sort_table 신뢰할 수 없는 메모리에서 신뢰할 수 있는 메모리까지 구조의 복제본을 보여줍니다.
구조 요소의 심층 카피를 신뢰할 수 있는 도메인에 달성하는 방법에 대한 자세한 내용은 Linux*인텔® SGX 개발자 참조 안내서 의 구조, Enums 및 Unions 섹션을 참조하십시오.
참고 | Linux*인텔® Software Guard Extensions(인텔® SGX) 개발자 참조 안내서 는 Linux Release*의 최신 인텔® Software Guard Extensions 설명서 섹션에 있습니다. |
Edger8 도구는 코드 컴파일 전에 신뢰할 수 없는 도메인 간에 데이터를 마운스하는 프록시 기능을 자동으로 생성합니다. EDL 파일의 매개변수 수 및 크기는 edger8 도구에 프록시 기능에서 복사할 메모리 양을 나타냅니다.