Как мы создали EGo

Какмысоздалиego

Эгофер

Конфиденциальные вычисления позволяют всегда зашифровывать и проверять обработку данных – в облако и в других местах. Раньше разработка конфиденциальных приложений требовала тайных знаний и значительных изменений кода. С EGo вы можете пропустить это и разработать свой код Go как обычно . С EGo вам не нужно реорганизовывать приложение, чтобы запустить его в безопасном анклаве. Просто используйте три простые команды для создания, подписи и запуска вашего кода – будь то 27 или 100, 10 0 строк Go со сложными зависимостями. Лучшая вещь? EGo имеет полностью открытый исходный код.

В этом сообщении блога мы разделяем подход EGo к дизайну. , самые большие проблемы, с которыми мы столкнулись при разработке EGo, и некоторые из наших ключевых принципов. Кроме того, мы даем небольшой предварительный обзор того, что еще планируется для EGo в будущем.

Наш подход к проектированию

Когда мы начали работу над EGo, мы уже создали SDK для надежных сред выполнения под названием

Edgeless RT . Этот проект был нашим внутренним решением для комплексной поддержки Go, но, как и большинство других SDK, он создавал значительные входные барьеры для новых пользователей. Используя RT, мы спрашивали себя, как сделать конфиденциальные вычисления более доступными; особенно для новых пользователей, которые делают свои первые шаги в сообществе конфиденциальных вычислений .

Наше видение было ясным: мы хотели создать SDK, который предлагает значительную простоту использования . Мы хотели добиться этого, максимально придерживаясь известного и проверенного Go UX. Это можно сделать путем тщательного выбора, какие особенности конфиденциальных вычислений следует выделить, а какие игнорировать, отодвинув некоторые из наиболее сбивающих с толку аспектов на задний план, чтобы наиболее важные функции заняли центральное место.

После тщательного рассмотрения создание SDK на основе Go показалось естественным выбором. Во-первых, Go – один из самых актуальных и простых языков программирования. Вдобавок ко всему, его функции защиты памяти обеспечивают желаемый уровень безопасности. Но больше всего мы хотели предоставить простое решение для разработчиков, которые заинтересованы в функциях безопасности конфиденциальных вычислений, но не обязательно в тонкостях дисциплины. Было логичным шагом адаптировать EGo к тем вариантам использования, которые могут извлечь наибольшую выгоду из конфиденциальных вычислений, и, поскольку облачное пространство предлагает наибольший потенциал для таких реализаций, мы стремились поддержать его ведущий язык программирования.

Принципы EGo

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

Проблемы, с которыми мы столкнулись во время разработки

При портировании Go в анклав нам пришлось столкнуться с некоторыми технически сложными особенностями языка и его компилятора. . Один из них – это то, как программы Go получают доступ к службам операционной системы, таким как файловые системы или сетевые сокеты. Большинство языков в Linux, которые компилируются в собственный код, интерфейс с libc. (libc реализует стандартную библиотеку C, а также POSIX API.) libc, в свою очередь, выполняет системные вызовы для запроса служб из ядра ОС. Однако Go напрямую выполняет SYSCALL. Внутри анклава это недопустимая инструкция, поскольку по замыслу ничто не должно иметь доступа к чему-либо за пределами TEE. Чтобы решить эту проблему, нам пришлось изменить компилятор Go так, чтобы вместо этого SYSCALL перенаправлялись в libc:

Уровень libc / syscall анклава затем либо обрабатывает системные вызовы внутри, либо обращается к хосту, например, для записи файлов или отправки данных по сети.

Дополнительно у нас были для расширения Open Enclave. Open Enclave – один из наиболее зрелых SDK в области конфиденциальных вычислений, но в нем все еще отсутствуют некоторые важные функции POSIX, такие как pthread и mmap. К счастью, мы уже создали расширенную версию Open Enclave, когда начали разработку EGo: Edgeless RT .

Вы можете найти Open Enclave здесь, это проект с исключительным качеством кода.

Ключевые подходы, которые мы использовали для EGo

Подумайте с конца: В EGo мы проигнорировали все, что мы знали о рабочих процессах из других CC SDK. Наш подход ставит пользователя на первое место. Поэтому мы максимально приблизили EGo к Go, добавив при этом ключевые функции подписи, аттестации и запечатывания.

Инструменты проектирования и API, которые трудно использовать неправильно: EGo устраняет необходимость глубоко погружаться в сложные темы конфиденциальных вычислений, такие как требуемые криптопараметры. Вместо этого, когда пользователь вызывает «ego sign myapp», EGo просто генерирует подходящий ключ, если его еще нет. То же самое происходит с «SealWithProductKey (открытый текст byte) “: эта функция API обрабатывает все детали запечатывания SGX, такие как добавление некоторых метаданных, чтобы гарантировать, что ключ остается действительным после обновления микрокода ЦП. Это делает разработку простой, а также безопасной и мягко подталкивает пользователей к правильному использованию EGo с самого начала.

Ключевым моментом является реализация: В EGo мы разделяем наши обязанности по разработке между тремя разработчиками: один разработчик выступал в качестве владельца продукта и сначала создал рабочий прототип, чтобы гарантировать осуществимость проекта. Дальнейшее внедрение было подробно запланировано всеми тремя разработчиками, которые затем разделили рабочую нагрузку между собой. Естественно, это заняло дополнительное время, но одновременно обеспечивало высокое качество за счет общей базы проектов, которая затем итеративно расширялась за счет модульных тестов, интеграционных тестов и обзоров кода.

Что ждет EGo в будущем?

Хотя EGo уже упрощает создание и развертывание конфиденциальных приложений Go, мы только начинаем. Вот краткий обзор функций, над которыми мы сейчас работаем:

Воспроизводимые сборки : Мы считаем, что конфиденциальные вычисления особенно важны в сочетании с открытым исходным кодом: значимость заявления удаленной аттестации над частью закрытого исходного кода ограничена. Пользователи должны иметь возможность подключаться из отчета об аттестации, например, к проекту Github. В идеале идентификатор анклава должен отображать точную версию исходного кода. Для этого мы добавим воспроизводимые сборки в EGo, чтобы (опытные) пользователи могли скомпилировать приложение и сравнить полученный хэш анклава с хешем из отчета об аттестации.

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

Прозрачное шифрование файлов : эта функция все еще находится на стадии рассмотрения. Шифрование файлов в контексте конфиденциальных вычислений сложнее получить правильно, чем в обычном контексте, поэтому некоторые SDK вообще не предлагают его. У тех, что есть, либо есть недостатки, либо ограничения в использовании. В настоящее время EGo имеет незашифрованную файловую систему хоста и временную файловую систему в памяти анклава. Наша цель – дополнить это возможностью монтировать каталоги с прозрачным шифрованием.

Любопытно? Если вы хотите узнать больше об EGo, посетите наш

Репозиторий GitHub или просто начните с помощью следующих команд:

Начать работу с EGo

Также вам следует проверить веб-семинар «Создавайте конфиденциальные приложения Go с легкостью» , проведенный разработчиком EGo Морицем Эккертом в июне 56.

Нажмите здесь, чтобы бесплатная регистрация.

Leave a comment

Your email address will not be published. Required fields are marked *