Немного контекста
Поскольку вы используете MQTT с AWS IoT, вы должны использовать сертификаты X.509 для аутентификации и безопасности. У Amazon есть небольшое руководство о том, как вы должны защищать свои сертификаты, поэтому я процитирую это здесь:
Сертификаты позволяют использовать асимметричные ключи с устройствами. Это означает, что вы можете записать закрытые ключи в безопасное хранилище на устройстве, не позволяя конфиденциальному криптографическому материалу покинуть устройство.
Поскольку вы в настоящее время используете защиту от чтения STM32 (RDP), у всех, кроме самых решительных злоумышленников, будут проблемы с доступом к вашим сертификатам в вашей текущей схеме:
Глобальная защита от считывания позволяет встроенному коду встроенного ПО (предварительно загруженному во флэш-память) защитить от обратного инжиниринга, создания дампов с помощью средств отладки или других средств навязчивой атаки.
- Уровень 0 - Без защиты (по умолчанию)
- Уровень 1 - флэш-память защищена от чтения путем отладки или сброса кода с помощью загруженного в ОЗУ кода
- Уровень 2 - Все функции отладки отключены
Будет ли внешнее хранилище безопасным?
Это, вероятно, не так безопасно . Если секретный ключ вашего клиента украден, злоумышленник может отправить данные, которые, как представляется, с вашего устройства, а на самом деле это не так. Хотя неясно, какие данные вы отправляете, любые ненадежные данные могут представлять угрозу безопасности.
Какие биты мне нужно держать в секрете?
При создании сертификата устройства в AWS IoT вы должны увидеть изображение, подобное этому:
Изображение со страницы « Создание и активация сертификата устройства» документации по IoT AWS.
Закрытый ключ - это то, что вам действительно нужно сохранить ... в секрете , и его следует обязательно хранить в защищенной от чтения памяти, если это возможно. Открытый ключ и сертификат предназначены для совместного использования, поэтому, если вам не хватает места, вы можете безопасно переместить их во внешнее хранилище. Вы можете получить немного больше контекста на странице. Как работает SSL / TLS? на бирже стека информационной безопасности и криптографии с открытым ключом в Википедии. Я думаю, что оказал бы вам медвежью услугу, если бы я не включил это изображение, чтобы объяснить, почему закрытый ключ должен быть секретным:
,
Изображение из Википедии , опубликовано в открытом доступе.
Открытый ключ вашего устройства - это то, что AWS IoT использует для подписи сообщений для отправки на ваше устройство (но это не доказывает, кто отправляет сообщение ). Так что, на самом деле, это не большая катастрофа, если кто-то украл открытый ключ, потому что это не должно быть секретом.
Секретный ключ является то , что ваш использует устройство для расшифровки сообщений, так что это немного большая проблема , если злоумышленник украдет это.
Вы также спросили, что произойдет, если злоумышленник украл сертификат RootCA. Если кто-то похитит закрытый ключ AWS IoT , это будет иметь катастрофические последствия, но сертификат RootCA на вашем устройстве не таков . То, RootCA.crt
что Amazon дает вам, является полностью публичным , и его цель состоит в том, чтобы вы могли убедиться, что на вас никто не атакует (скорее всего, человек посередине, притворяющийся сервером AWS IoT).
Какой ущерб может нанести взломанное устройство?
Ваше украденное устройство может выполнять только действия, указанные в политике . Попробуйте следовать принципу наименьших привилегий ; только предоставьте вашему устройству те привилегии, которые ему абсолютно необходимы , поэтому, если случится худшее, оно не сможет слишком сильно разрушить ситуацию. Для вашего конкретного случая:
Разрешено публиковать только 2 канала (его имя и канал подачи данных), который подключен к процессору данных, который будет игнорировать любые мошеннические пакеты, поступающие на него.
Это хорошо. Любая атака должна быть изолирована только от двух тем MQTT, которые устройство может публиковать, чтобы не нанести большого вреда.