Intel SGX: Воспроизведение измерений анклава из двоичного файла анклава

У меня вопрос об измерении анклава в Intel SGX. Судя по исходному коду (и высокоуровневое описание в руководстве), похоже, что измерение включает в себя загрузку файла анклава (ELF или PE). Но результат загрузки различается на разных платформах, не так ли? Интересно, смогу ли я воспроизвести последовательные измерения анклава из двоичного файла анклава.

В частности, я рассматриваю следующие сценарии: Предположим, я хочу разослать enclave.signed.so своим пользователям, и я хочу обслуживать запросы только из этого конкретного анклава. Думаю, я не могу просто сравнить локальные измерения на моей платформе с измерениями пользователей (которые могут быть включены в их аттестации). Что мне делать вместо этого?

По сути, вопрос сводится к тому, как криптографически связать двоичный код и измерение? Кажется, здесь возникает парадокс: предположим, что у меня есть двоичный файл анклава, единственный способ получить его измерения - это загрузить его. Однако процесс загрузки не доверяется (выполняется ОС)! Как я могу убедиться, что получаемое мной измерение действительно для этого конкретного двоичного файла? Я, должно быть, что-то неправильно понял, потому что это кажется критически важным для целостности SGX. Пожалуйста, поправьте меня.

Спасибо!


person qweruiop    schedule 19.10.2016    source источник


Ответы (1)


Вы правы, чтобы установить «настоящие» измерения анклава, вам нужна надежная система.

Измерение анклава выполняется процессором. Он переставляет значение измерения с каждым шагом / инструкцией по созданию анклава. спецификация довольно подробно объясняет эти перестановки. Например, псевдокод ECREATE содержит следующее утверждение о поле измерения:

(* Initialize hash updates etc*)
Initialize enclave’s MRENCLAVE update counter;
(* Add “ECREATE” string and SECS fields to MRENCLAVE *)
TMPUPDATEFIELD[63:0] = 0045544145524345H; // “ECREATE”
TMPUPDATEFIELD[95:64] = DS:TMP_SECS.SSAFRAMESIZE;
TMPUPDATEFIELD[159:96] = DS:TMP_SECS.SIZE;
TMPUPDATEFIELD[511:160] = 0;
SHA256UPDATE(DS:TMP_SECS.MRENCLAVE, TMPUPDATEFIELD)
INC enclave’s MRENCLAVE update counter;

Предполагая, что эти описания являются исчерпывающими и известен порядок, в котором шаги создания выполняются драйвером, можно рассчитать измерение анклава без его загрузки. Таким образом, вы можете вычислить значение в анклаве. Но как вычислить размеры этого анклава?

person fzgregor    schedule 07.02.2017