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