Осмысленный контроль над данными в распределённых системах.
Oak — это программная платформа для построения распределённых систем, обеспечивающая прозрачным образом внешне проверяемые (или опровержимые) утверждения о поведении системы.
Oak предоставляет строительные блоки, используемые для создания Enclave Applications, то есть приложений, изолированных от хоста, на котором они выполняются, и допускающих удалённую аттестацию.
В этом документе мы сосредоточимся на распределённых системах, состоящих из гетерогенных «узлов»; узел может быть Enclave Application, работающим на сервере (например, в частном дата-центре, у публичного облачного провайдера и т. п.), обычным приложением, работающим на клиентском устройстве (например, телефоне, ноутбуке), обычным HTTP- или gRPC-сервисом, системой хранения и т. д. Когда два узла общаются друг с другом, один или оба из них могут быть Enclave Applications. Для каждого взаимодействия между двумя узлами мы называем их «инициатором» и «ответчиком». Мы избегаем терминов «клиент» и «сервер» для этих ролей, поскольку в некоторых случаях узел-«инициатор» может фактически работать на «сервере» — возможны все комбинации.
Enclave Application в распределённой системе Oak может удалённо аттестовать себя перед другими узлами: это состоит в предоставлении доказательств собственной программной и аппаратной идентичности, привязанных к локальным криптографическим ключам (хранящимся в защищённом от взлома оборудовании, гарантирующем, что ключи не могут быть похищены или скопированы), в конечном счёте подписанных одним или несколькими программными или аппаратными корнями доверия, доступными на хосте этого узла. Программная идентичность Enclave Application состоит из измерений (то есть дайджестов / хешей) исполняемых бинарных файлов, которые в неё входят, а также дополнительных данных (например, конфигурации).
Oak сосредоточен на основанных на виртуальных машинах доверенных средах исполнения (TEE) (например, AMD SEV-SNP, Intel TDX) как аппаратном корне доверия для Enclave Applications. Это позволяет Enclave Application предоставлять отчёт об удалённой аттестации, подписанный привязанными к оборудованию ключами в TEE, которые недоступны провайдеру услуг. Эти ключи в конечном счёте укоренены в производителе TEE (например, AMD, Intel); это снижает (в идеале — устраняет) необходимость доверять провайдеру услуг этого узла для проверки его доказательств, распределяя доверие между несколькими не сговаривающимися субъектами.
При запуске каждая Enclave Application генерирует локальную пару ключей и привязывает открытый ключ к своим собственным доказательствам. Когда узел намеревается связаться с Enclave Application (в роли инициатора или ответчика), между двумя узлами устанавливается сквозной зашифрованный канал. В рамках установления канала каждый узел также предоставляет свои собственные доказательства (если они есть) другому узлу и может использовать доказательства, предоставленные другим узлом, для установления его доверенности, прежде чем решить, обмениваться ли с ним данными.
Этот зашифрованный и аттестованный канал обеспечивает:
Чтобы минимизировать поверхность атаки и доверенную вычислительную базу (TCB) Enclave Application, Oak поощряет разделённую архитектуру:
Приложение-анклав: бинарный файл, (воспроизводимо) собранный из открытого исходного кода и работающий внутри TEE. Приложение-анклав имеет доступ к ключам расшифровки, привязанным к аттестационным данным; оно расшифровывает входящие запросы от других узлов, обрабатывает их, шифрует ответы и отправляет их обратно по каналу связи. Именно этот бинарный файл связан с внешне проверяемыми утверждениями. Никакой другой бинарный файл не имеет доступа к входящим запросам в открытом виде.
Хост-приложение: бинарный файл, работающий в среде хост-сервера (недоверенной) и выполняющий роль фронтенда для приложения-анклава; он предоставляет gRPC-эндпоинт, доступный извне другим узлам. Этот бинарный файл работает только с зашифрованными данными; его основная задача — создавать и поддерживать экземпляр приложения-анклава в TEE и пересылать зашифрованные данные в приложение-анклав и обратно. Он также может содержать проприетарную логику, необходимую для взаимодействия с плоскостью управления или другими внутренними системами, требуемыми для работы на инфраструктуре поставщика услуг.
Такая архитектура означает, что поставщик услуг не смог бы подменить бинарный файл приложения-анклава другим (потенциально вредоносным) без обнаружения. Если бы поставщик услуг внедрил бэкдор в приложение-анклав, ему пришлось бы подписать бинарный файл и опубликовать его в проверяемом журнале посредством процесса Transparent Release, что сделало бы бэкдор необратимо видимым для внешних наблюдателей.
Каноническое применение Oak — создание приложений для конфиденциальных вычислений (sealed computing).
В приложении для конфиденциальных вычислений узел (обычно клиентское устройство) отправляет данные приложению-анклаву (обычно серверу), которое обрабатывает данные так, что поставщик услуг, размещающий приложение-анклав, не может видеть входные данные, выходные данные или побочные эффекты вычислений.
Ниже приведена упрощённая архитектурная схема.
Oak поддерживает два варианта операционных систем внутри TEE, на которых могут развёртываться приложения-анклавы: