Использование безопасности Arm TrustZone в микроконтроллерах серии LPC5500
Узнайте, как Arm TrustZone повышает безопасность в микроконтроллерах LPC5500 от NXP и как реализовывать защищенные и незащищенные приложения.
По мере распространения подключенных устройств растут и сложные угрозы. NXP решает эту проблему, интегрируя надежные примитивы безопасности в семейство МК LPC5500, включая генератор случайных чисел, соответствующий стандарту FIPS, движок шифрования «Prince» для выполнения зашифрованного кода и 4096-битный набортный ключ, сгенерированный с помощью технологии PUF. В сочетании с набортным криптографическим ускорителем «CASPER» эти МК идеально подходят для развертываний IoT на границе сети, требующих сквозного предоставления ключей и устойчивой кибербезопасности.
Центральной способностью является Arm TrustZone для Cortex-M. Следующие разделы проведут вас через его основы и покажут, как использовать их в ваших проектах.
Arm TrustZone для Cortex-M
TrustZone создает два изолированных контекста выполнения: безопасный мир, размещающий проприетарный или конфиденциальный код, и небезопасный мир для пользовательских приложений. Производственные библиотеки могут находиться в ПЗУ, защищенном от обратной инженерии, но при этом вызываться кодом приложения через контролируемый интерфейс.
Рисунок 1 иллюстрирует сосуществование безопасного ПЗУ и небезопасного пользовательского кода на одном кристалле.
Переходы между двумя мирами регулируются расширением безопасности TrustZone, гарантируя, что небезопасное приложение может вызывать только экспортированные безопасные функции, никогда не получая прямого доступа к безопасной памяти.
Режимы процессора с TrustZone
В то время как ядра Cortex-M3 и M4 предлагают потоковый и обработчик режимов с привилегированными/непривилегированными уровнями, Cortex-M33 добавляет TrustZone, давая четыре режима: небезопасный поток, безопасный поток, небезопасный обработчик и безопасный обработчик. Это разделение также вводит отдельные таймеры SysTick для каждой области.
Разделение памяти
TrustZone назначает атрибуты безопасности адресным диапазонам: Безопасный (S), Небезопасный (NS) и Вызываемый из небезопасного (NSC). Доступ к каждой области зависит от текущего состояния ядра. Например, LPC55S69 рассматривает адреса с нулевым 28-м битом как небезопасные, а остальные — безопасные, за исключением программной памяти, которая настраивается через блок атрибуции безопасности (SAU).
Создание безопасного приложения
Безопасный код не раскрывает свои внутренности напрямую. Вместо этого он публикует таблицу шлюзов (veneer table) — тонкий слой небезопасно вызываемых функций, перенаправляющих вызовы в безопасный мир. Таблица шлюзов размещается в памяти NSC, а реальные реализации находятся в безопасной памяти.
Типичные безопасные проекты компилируются в объектную библиотеку и заголовочный файл, объявляющий функции шлюза. Небезопасное приложение включает только заголовочный файл; во время выполнения таблица шлюзов медиатирует вызовы безопасных служб.
Переход между мирами
Две специальные инструкции управляют переключением состояния:
SG— переключает ядро в безопасный режим.BXNS— возвращает управление в небезопасный режим.
Последовательность небезопасного вызова выглядит так:
// Небезопасный код
SG(); // Вход в безопасный мир
SecureFunc(); // Вызов безопасной службы через шлюз
BXNS(); // Возврат в небезопасный
Любой нелегальный доступ вызывает исключение Secure Fault, сохраняя целостность системы.
Пример Secure Hello World
SDK LPCXpresso55S69 включает демо TrustZone, разделяющие сборку на безопасный и небезопасный проекты. Безопасный проект начинается с ранней инициализации:
__attribute__((cmse_nonsecure_entry)) void BOARD_InitTrustZone(void);
Эта функция настраивает SAU, IDAU и разделение памяти. Небезопасная главная функция остается лаконичной, так как вся настройка обрабатывается в безопасной области:
int main(void) {
// Минимальный небезопасный код
return 0;
}
Когда небезопасная сторона нуждается в безопасной службе, она вызывает функцию шлюза, например, PRINTF_NSE():
void PRINTF_NSE(const char *format, ...) __attribute__((cmse_nonsecure_entry));
Соответствующая безопасная реализация находится в безопасном проекте и экспортируется в таблицу шлюзов.
Инструменты разделения памяти
В MCUXpresso перспектива TEE предлагает визуальный редактор для настройки SAU и IDAU:
Используйте левую таблицу для установки уровня безопасности каждого региона, а правая карта отразит полученное разделение.
Почему TrustZone важен для LPC5500
TrustZone дает LPC5500 четкое разделение ответственности: безопасный мир защищает проприетарный код и криптографические ключи, а небезопасный — размещает пользовательские приложения. Аппаратная часть гарантирует блокировку нелегальных доступов к памяти, а программная инфраструктура (таблицы шлюзов, инструкции SG/BXNS и инструменты TEE) упрощает разработку безопасных приложений.
Для глубокого понимания посмотрите вебинар NXP TrustZone: Calling the Secure World или изучите официальную документацию.
Отраслевые статьи — это форма контента, позволяющая партнерам делиться полезными новостями, сообщениями и технологиями с читателями All About Circuits там, где редакционный контент не подходит. Все отраслевые статьи подчиняются строгим редакционным рекомендациям для предоставления читателям полезных новостей, технической экспертизы или историй. Взгляды и мнения, выраженные в отраслевых статьях, принадлежат партнеру и не обязательно отражают позицию All About Circuits или его авторов.
Облачные вычисления
- Облачная революция: как облачные вычисления трансформируют IT, безопасность и карьеры
- Почему облачная безопасность — краеугольный камень современной киберзащиты
- Путь к Cloud Security Engineer: навыки, обязанности и сертификации
- Почему безопасность облачных данных становится программируемой
- Защита облачных технологий: лучшие практики для защиты данных и митигации рисков
- Освоение облачной безопасности: проверенные стратегии снижения рисков и защиты организации
- Как хакеры атакуют облачные среды — укрепление безопасности AWS
- Мастерство сертификации Google Cloud Engineer: проверенные стратегии обучения и инсайдерские советы
- Развертывание DevOps в облаке: проверенный блупринт для цифровой трансформации
- Миграция Enterprise Resource Planning (ERP) в облако: проверенная дорожная карта успеха