Хорошо, после 2 месяцев упорных усилий я сдаюсь. Проект "выполнить доверенную настройку Groth16 в TEE и получить удаленную аттестацию, что токсичные отходы были уничтожены" оказался неудачным. Подробности ниже. Упоминаю это только потому, что не хочу, чтобы кто-то отказывался от работы над этим, думая, что я все еще работаю над ним, когда на самом деле я не работаю.
Кратко: - Единственный TEE, который в настоящее время может это сделать (насколько я понимаю), это TDX, потому что он имеет необходимые гарантии зашифрованной оперативной памяти. (Помните, для этого проекта недостаточно знать, что правильный код выполняется в TEE, вам ТАКЖЕ нужно знать, что физический атакующий не может сбросить оперативную память во время церемонии и узнать о токсичных отходах). - Удаленная аттестация TDX подписывает "MRTD", который является хешем, который изменится, если изменится любой байт образа VM. - Таким образом, для будущего аудитора/пользователя, чтобы проверить, что TDX выполнял правильный код во время доверенной настройки (особенно в каком-либо автоматизированном формате), им необходимо воспроизвести этот хеш MRTD, что, в свою очередь, требует восстановления образа VM из читаемого человеком исходного кода в воспроизводимом формате бит за битом. - Мне не удалось создать образ GCP в воспроизводимом формате бит за битом. (Даже супер минимальный, который просто загружается и открывает SSH-порт и буквально ничего больше).
Я не уверен, что это возможно с существующими готовыми инструментами. Возможно, потребуется доработка существующих инструментов. StageX был крайне полезен, поэтому я рекомендую использовать его как можно больше. Проблемы возникают, когда вам нужно что-то, что в данный момент недоступно через слой StageX. В таком случае вам нужно создать все необходимое из исходников (так как загрузка архивов без их самостоятельной сборки представляет собой риск для цепочки поставок). И я обнаружил, что сборка/компиляция _большинства_ программ из исходников в полностью воспроизводимом виде чрезвычайно трудоемка, сложна и ненадежна. И во многих случаях мне не удавалось сделать это *вообще*.
Я рекомендую собирать любое программное обеспечение, которое вам нужно, внутри контейнера Docker, состоящего только из слоев StageX с зафиксированными хэшами. Эта техника дала мне наибольшую отдачу.
3,32K