Учебное Пособие По Расширениям Intel Software Guard. Часть 4, Структура Анклава

В четвертой части серии руководств по расширениям Intel Software Guard Extensions (Intel SGX) мы создадим анклав и его интерфейс.

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

Вместо анклава ECALL в настоящее время мы используем заглушки; Мы перейдем к полной интеграции анклавов в пятой части этой серии статей.



Учебное пособие по расширениям Intel Software Guard. Часть 4, структура анклава

В этой части серии предоставляется исходный код: заглушка анклава и функции интерфейса; этот код доступен для скачивания.



Архитектура приложения

Прежде чем проектировать интерфейс анклава, необходимо подумать об общей архитектуре приложения.

Как мы обсуждали в первая часть , анклавы реализуются как библиотеки динамической компоновки (DLL в Windows* и общие библиотеки в Linux*) и должны быть связаны только со 100% собственным кодом C. Графический интерфейс пользователя программы Tutorial Password Manager написан на C#.

Использует смешанную сборку, написанную на C++/CLI, для перехода от управляемого к неуправляемому коду, но хотя эта сборка содержит собственный код, она не является на 100% собственным кодом и поэтому не может напрямую взаимодействовать с анклавом Intel SGX. Попытка внедрить ненадежные функции моста анклава в сборки C++/CLI приведет к неисправимым ошибкам:

  
   

Command line error D8045: cannot compile C file ’Enclave_u.c’; with the /clr option

Это означает, что вы должны поместить ненадежные функции моста в отдельную DLL, полностью состоящую из машинного кода.

В результате наше приложение будет иметь как минимум три библиотеки DLL: ядро C++/CLI, мост анклава и сам анклав.

Эта структура показана на рис.

1.

Учебное пособие по расширениям Intel Software Guard. Часть 4, структура анклава

Рисунок 1. Компоненты смешанного приложения с анклавами.



Дальнейшие улучшения

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

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

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

В нашем случае класс Менеджер паролейCoreNative не следует обременять дополнительной задачей создания экземпляров анклавов.

Этому классу достаточно знать, поддерживает ли платформа расширения Intel SGX, чтобы выполнить соответствующую функцию.

В качестве примера в следующем фрагменте кода показан метод разблокировать() :

int PasswordManagerCoreNative::vault_unlock(const LPWSTR wpassphrase) {

Теги: #Расширения Software Guard #программирование

Вместе с данным постом часто просматривают: