SGX - В чем разница между доверенным мостом и доверенным прокси?

В руководстве разработчика Intel SGX по обработке указателей упоминается:

Когда буфер копируется, доверенный мост должен избегать перезаписи памяти анклавов в ECALL, а доверенный прокси-сервер должен избегать утечки секретов в OCALL.

Что такое доверенный мост и доверенный прокси здесь?

--- отредактировано ---

Из Обработки указателей в ECALL и Обработки указателей в OCALL я заметил, что доверенный мост используется для выделения и копирования буфера из внешнего анклава во внутренний анклав, где доверенный прокси-сервер используется для выделения и копирования буфера из внутреннего анклава во внешний анклав. Итак, мой личный вывод заключается в том, что оба они являются своего рода делегатом, ответственным за распределение и копирование буферов памяти в двух разных направлениях. Их имена "мост" и "прокси" используются для дифференциации их рабочего процесса.

Правильно ли мое понимание?

2 ответа

Доверенный мост и Доверенные прокси-интерфейсы между приложением и анклавом. Этот код взаимодействует с / из анклава. Инструмент Edger (входит в среду сборки), который анализирует файл EDL и генерирует доверенный мост и доверенные прокси-файлы (файлы.c и.h).

Надежный мост:

Для ECALL задача доверительного моста состоит в том, чтобы гарантировать, что структура маршаллинга не перекрывает память анклава.

[in]: Когда указатель на ненадежную память с атрибутом in передается в анклав, доверенный мост выделяет память внутри анклава и копирует память, на которую указывает указатель, в память анклава.

[out]: когда указатель на ненадежную память с атрибутом out передается в анклав, доверенный мост выделяет буфер в доверенной памяти, обнуляет содержимое буфера для очистки любых предыдущих секретов и передает указатель на этот буфер доверенной функции, После возврата доверенной функции доверенный мост копирует содержимое доверенного буфера в ненадежную память.

Доверенный прокси

Для OCALL доверенный прокси-сервер выделяет память во внешнем стеке для прохождения структуры маршалинга и проверяет, что параметры указателя с их полным диапазоном находятся в анклаве.

[in]: Когда указатель на доверенную память с атрибутом in передается из анклава (OCALL), доверенный прокси-сервер выделяет память вне анклава и копирует память, указанную указателем из анклава, в недоверенную память.

[out]: Когда указатель на доверенную память с атрибутом out передается из анклава (OCALL), доверенный прокси-сервер выделяет буфер в ненадежном стеке и передает указатель на этот буфер ненадежной функции. После возврата ненадежной функции доверенный прокси-сервер копирует содержимое ненадежного буфера в доверенную память.

Что такое доверенный мост и доверенный прокси здесь?

Концепция моста и прокси-сервера происходит от кода вызывающего и вызываемого абонентов, а не от прямой связи друг с другом: между ними есть клейкий код. Код вызывающего абонента вызывает прокси-сервер, который притворяется "похожим" на вызываемого, и его цель - принять вызов и передать аргументы другой (доверенной или ненадежной) стороне. Мост - это то, что вызывает фактического вызываемого абонента на другой стороне и имитирует вызывающего абонента.

В COM-маршалинге есть похожая концепция: COM- прокси и заглушки.

Доверенный прокси-сервер - это то, что вызывает код анклавов в OCALL, ожидая, что такой вызов будет доставлен аналогичным образом на ненадежной стороне фактическому вызываемому абоненту.

Доверенный мост - это то, что обрабатывает вызов, полученный ненадежным прокси, подготавливает аргументы стека для функции анклава, выполняет актуальный вызов вызываемого и принимает выходные аргументы в противоположном направлении.

Раздел документации объясняет, что во избежание переопределения памяти сгенерированным кодом прокси и моста, соглашение состоит в том, что код приложения в ненадежном пространстве должен работать с указателями ненадежной памяти, а доверенный код анклава должен использовать аргумент указателя доверенной памяти. Клеевой слой отвечает за магию копирования данных туда и обратно между ненадежным и доверенным пространством, заменяя указатели соответственно, чтобы они указывали на одни и те же (копируемые) данные, даже если сами указатели (как числа) изменились.

Другие вопросы по тегам