Загрузите приложение в анклав Intel SGX
Есть ли способ загрузить существующее приложение в Intel SGX
анклав напрямую?
2 ответа
Intel SGX
предназначен для защиты данных, а не для загрузки всего приложения. Вы можете выполнять безопасные вычисления внутри SGX
анклавы на ваши данные путем отправки временных буферов из программы пространства пользователя (app.cpp
) на ваш SGX
анклав (Enclave.cpp
). Но почему?
- Размер анклава небольшой, и вы не можете загрузить все свои данные в него одновременно.
- Внутри анклавов вы ограничены набором программных примитивов, таких как if-then-else, for-loop и т. Д. Кроме того, у вас не может быть таких системных вызовов, как
open
для открытия файла.
Таким образом, если ваше приложение большое или содержит некоторые системные вызовы или даже некоторые запрещенные стандартные функции библиотеки C, SGX
Реализация, невозможно импортировать его полностью внутри анклава. Но если ваше приложение выполняет какие-то примитивные операции без необходимости какого-либо специального системного вызова или вызова функции, вы можете свободно перенести его в анклав. Тем не менее, вы не можете напрямую загрузить его в анклав, вам нужно изменить свою реализацию, чтобы сделать его вызовом доверенного анклава внутри Enclave.cpp
,
В качестве примера я реализовал набор криптографических операций, например, SHA-2, HMAC, SHA-2, AES и т. Д. Внутри анклава. Я отправляю / получаю временные буферы данных pliantext/ciphertext в / из анклава, выполняя операции шифрования / дешифрования внутри анклава и сохраняя результаты вычислений, такие как хэш-дайджест или шифротексты в пользовательском пространстве. Таким образом, я гарантирую, что никто не сможет повлиять на результаты операций, потому что они выполняются внутри анклава, который защищен инструкциями ЦП.
Вы можете прочитать больше об этом примере здесь и проверить реализацию здесь.
Хотя hmofrad прав в том, что SGX не предназначен для запуска всего существующего приложения, существуют подходы для достижения именно этого: есть SCONE (закрытый исходный код) и Graphene (открытый исходный код). Таким образом, вы можете прочитать о графене с SGX и проверить, соответствует ли это вашим потребностям.
Как указывалось в предыдущих ответах, дизайн Intel SGX по умолчанию не позволяет запускать не модифицированные приложения в целом, потому что последние содержат (наиболее вероятно) подпрограммы, которые не поддерживаются (все системные вызовы) доверенной библиотекой, предоставляемой Intel SGX SDK. Такие инструменты, как Scone, Graphene SGX, Haven или SGX-LKL, позволяют запускать неизмененные приложения в анклавах Intel SGX.
Большинство вышеупомянутых инструментов запускают мини-ОС внутри анклава для обработки (посредством эмуляции) неподдерживаемых системных вызовов. Это приводит к большому размеру анклава, что очень вредно для приложений, требующих больших ресурсов памяти; объем памяти анклава ограничен 128 МБ (или 256 МБ в более поздних версиях SGX).
Решение, которое вы выберете, будет во многом зависеть от приложения, которое вы пытаетесь запустить. Если последний не такой большой, вы можете попробовать перенести его на Intel SGX. Перенос включает в себя разделение вашего приложения на доверенные и ненадежные части. Только доверенная часть будет работать в анклаве и может безопасно взаимодействовать с ненадежной частью (помощником) вне среды выполнения анклава. Во время переноса у вас все еще может быть доверенный код, который зависит от неподдерживаемых подпрограмм, таких как системные вызовы. Вы можете решить эту проблему, реализовав / расширив свою собственную доверенную библиотеку libc (только необходимые системные вызовы) в анклаве, которая переопределяет системные вызовы как обертки для вызовов ocall, которые затем вызывают реальные подпрограммы (безопасно) из анклава; хороший пример здесь. Однако этот подход не для новичков. Таким образом, вы максимально увеличите объем памяти анклава и предотвратите раздувание его в полноценной библиотечной ОС.
С другой стороны, если вы имеете дело с очень сложным приложением, перенос которого невозможен, я посоветую вам выбрать такое решение, как Graphene-SGX, которое имеет открытый исходный код и хорошо документировано.