В четвертой части серии руководств по расширениям Intel Software Guard Extensions (Intel SGX) мы создадим анклав и его интерфейс.
Мы рассмотрим границы анклава, определенные в третья часть и определим необходимые функции моста, учтем влияние функций моста на объектную модель и создадим инфраструктуру проекта, необходимую для интеграции анклава в наше приложение.
Вместо анклава ECALL в настоящее время мы используем заглушки; Мы перейдем к полной интеграции анклавов в пятой части этой серии статей.
В этой части серии предоставляется исходный код: заглушка анклава и функции интерфейса; этот код доступен для скачивания.
Архитектура приложения
Прежде чем проектировать интерфейс анклава, необходимо подумать об общей архитектуре приложения.Как мы обсуждали в первая часть , анклавы реализуются как библиотеки динамической компоновки (DLL в Windows* и общие библиотеки в Linux*) и должны быть связаны только со 100% собственным кодом C. Графический интерфейс пользователя программы Tutorial Password Manager написан на C#.
Использует смешанную сборку, написанную на C++/CLI, для перехода от управляемого к неуправляемому коду, но хотя эта сборка содержит собственный код, она не является на 100% собственным кодом и поэтому не может напрямую взаимодействовать с анклавом Intel SGX. Попытка внедрить ненадежные функции моста анклава в сборки C++/CLI приведет к неисправимым ошибкам:
Это означает, что вы должны поместить ненадежные функции моста в отдельную DLL, полностью состоящую из машинного кода.Command line error D8045: cannot compile C file ’Enclave_u.c’; with the /clr option
В результате наше приложение будет иметь как минимум три библиотеки DLL: ядро C++/CLI, мост анклава и сам анклав.
Эта структура показана на рис.
1.
Рисунок 1. Компоненты смешанного приложения с анклавами.
Дальнейшие улучшения
Поскольку функции моста анклава должны находиться в отдельной DLL, мы сделаем следующий шаг: поместим в эту библиотеку все функции, которые напрямую взаимодействуют с анклавом.Такое разделение уровней приложений упростит управление программами и их отладку, а также повысит простоту интеграции за счет уменьшения влияния на другие модули.
Если класс или модуль выполняет конкретную задачу с четко определенными границами, изменения в других модулях с меньшей вероятностью повлияют на нее.
В нашем случае класс Менеджер паролейCoreNative не следует обременять дополнительной задачей создания экземпляров анклавов.
Этому классу достаточно знать, поддерживает ли платформа расширения Intel SGX, чтобы выполнить соответствующую функцию.
В качестве примера в следующем фрагменте кода показан метод разблокировать() : int PasswordManagerCoreNative::vault_unlock(const LPWSTR wpassphrase)
{
Теги: #Расширения Software Guard #программирование
-
Уиппл, Фред Лоуренс
19 Oct, 24 -
Методы Выявления Евангелистов Вашего Бренда
19 Oct, 24 -
О Наблюдаемости Микросервисов В Kubernetes
19 Oct, 24 -
Размышления О Проекте «Год Молодежи»
19 Oct, 24 -
Github Для Пользователей Windows
19 Oct, 24 -
Citrix Xenserver – Конец Истории
19 Oct, 24