безопасный вызов HTTP с использованием анклава sgx

У меня ситуация:

У меня есть сценарий, в котором я должен подключиться к веб-серверу, и мне нужно обеспечить безопасность данных ответа: я подключаюсь к REST API, который возвращает данные кредитной карты. Я подписываю ключ в доверенном коде и отправляю HTTP-запрос в недоверенной части, используя подпись через и OCALL. Приложение получает ответ HTTP в недоверенной части и сразу же отправляется в доверенную часть в анклав через ECALL. Однако, с моей точки зрения, у меня есть утечка безопасности в приложении: данные кредита пользователя должны быть получены в недоверенной части.

Из моего исследования, а также из-за некоторых сообщений здесь я думаю, что нет способа сделать HTTP-вызов из анклава. @JesusG_Intel написал по адресу https://community.intel.com/t5/Intel-Software-Guard-Extensions/Rest-API-or-HTTP-API-call-from-inside...:

Невозможно напрямую звонить во внешний мир из анклава. Вы должны создать вызовы ocall из анклава в свое приложение, после чего приложение сможет выполнять запросы REST API или HTTP от имени анклава.

Я новичок в технологии sgx и знаю, является ли это реальной утечкой данных или нет. Я думаю, что Intel не допустит такой угрозы безопасности. Что мне не хватает? Можете ли вы подсказать, как сделать безопасный HTTP-запрос с помощью технологии sgx?

Спасибо


person GrailsBeginner98    schedule 15.02.2021    source источник
comment
Как это связано с С++?   -  person S.M.    schedule 15.02.2021


Ответы (2)


Весь смысл наличия среды Trusted Execution (т. е. SGX в вашем случае) заключается в том, чтобы хранить данные в зашифрованном виде вне анклава и расшифровывать их только внутри анклава.

Я не знаю, чего именно вы пытаетесь достичь, и, если я правильно понял ваши требования, REST API отправляет информацию о кредитной карте (CC) в ваше приложение в виде открытого текста. Если это так, то REST API должен сначала зашифровать информацию CC, отправить ее в ваше приложение (ненадежная часть), ненадежная часть упорядочивает зашифрованные данные в вашу доверенную часть (анклав), затем анклав расшифровывает информацию CC внутри анклава.

person Kassem    schedule 17.02.2021

Я могу немного опоздать, но я думаю, что этот вопрос заслуживает более подробной информации.

При использовании Имте; SGX для создания TEE, ваше приложение разделено на две части:

  • ненадежная часть, она же само приложение
  • доверенная часть, также известная как анклав.

Последний является наиболее безопасным. Из-за его ограниченных ресурсов (128/256 МБ ОЗУ) его следует зарезервировать для процессов, требующих высокой степени безопасности: шифрование, анонимизация и т. д.

Чтобы было понятнее: анклав НЕ является местом для выполнения HTTP-вызовов.

Например, предположим, что ваше приложение вызывает API, извлекает зашифрованные данные и расшифровывает их. Процесс будет следующим (T = доверенный = анклав, U = ненадежный = приложение)

  • U: сделать вызов API, получить данные
  • U: запустить анклав
  • U: передать зашифрованные данные в анклав
  • T: получить зашифрованные данные, обработать их

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

person X99    schedule 24.05.2021