문서 ID: 000058511 콘텐츠 형태: 유지 관리 및 성능 마지막 검토일: 2021-08-10

큰 구조를 엔클레이브에 전달하는 것은 인클레이브 페이지 캐시(EPC)에서 Paging를 야기하지 않습니다

BUILT IN - ARTICLE INTRO SECOND COMPONENT
요약

신뢰할 수 없는 도메인에서 구조상 모든 데이터를 신뢰할 수 있는 도메인인 데이터(데이터 보호) 엔클레이브로 인텔® 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 도구에 프록시 기능에서 복사할 메모리 양을 나타냅니다.

관련 제품

이 문서는 다음 항목에 적용됩니다. 1 제품

이 페이지의 콘텐츠는 원본 영어 콘텐츠에 대한 사람 번역 및 컴퓨터 번역의 조합으로 완성되었습니다. 이 콘텐츠는 편의와 일반적인 정보 제공을 위해서만 제공되었으며, 완전하거나 정확한 것으로 간주되어선 안 됩니다. 이 페이지의 영어 버전과 번역 간 모순이 있는 경우, 영어 버전이 우선적으로 적용됩니다. 이 페이지의 영어 버전을 확인하십시오.