[відмова від відповідальності: я професіонал із безпеки / криптовалюти і щодня займаюся такими питаннями архітектури безпеки.]
Ви натрапили на проблему зберігання облікових даних таким чином, що без догляду процес може отримати доступ до них, але зловмисник не може. Це добре відома і дуже складна для вирішення проблема.
Якщо ваш пристрій IoT має вбудований на материнську плату апаратний сховище ключів, як-от деякі TPM, або еквівалентно Keystore, підтримуваному апаратним забезпеченням Android або Apple Secure Enclave, ви можете використовувати це.
З традиційними серверами ви можете використовувати HSM або Smart Cards, але єдине повне програмне рішення, про яке я знаю, - це отримати ключ AES з якогось "апаратного відбитка пальця", побудованого за допомогою комбінування серійних номерів усіх апаратних пристроїв. Потім використовуйте цей ключ AES для шифрування облікових даних. Процес, що працює на тому ж сервері, може реконструювати ключ AES та розшифрувати облікові дані, але як тільки ви витягнете файл із сервера, він, по суті, не розшифрується.
IoT кидає ключ у це з двох причин:
Припущення, що серійні номери обладнання унікальні, ймовірно, не відповідає, і
На відміну від серверів, зловмисники мають фізичний доступ до пристрою, тому, ймовірно, можуть отримати оболонку на пристрої для запуску програми дешифрування.
Як апаратне шифрування (TPM), так і «апаратне відбитків» шифрування є в кращому випадку обтурацією, оскільки, в принципі, якщо локальний процес може розшифрувати дані, то зловмисник, здатний запустити цей локальний процес, також може його розшифрувати.
Таким чином, стандартний трюк виглядає так, що він тут не працює. Перше питання, яке вам потрібно буде задати собі:
- Яка моя модель загроз / де цей проект сидить на
Secure <--> Convenient
шкалі?
Зрештою, я думаю, що вам або потрібно вирішити це security > convenience
і потрібно ввести людину облікові дані після кожного завантаження (використовуючи щось на кшталт відповіді @ BenceKaulics ), або ви вирішите це security < convenience
і просто поставте облікові дані на пристрій, можливо, використовуючи якусь обдумування, якщо ви відчуваю, що має значення.
Це складна проблема, що ускладнюється характером пристроїв IoT.
Для повноти, повномасштабним промисловим рішенням цієї проблеми є:
- Надайте кожному пристрою IoT унікальний відкритий ключ RSA під час виготовлення. Запишіть цей відкритий ключ у db проти серійного номера пристрою.
- Зберігайте чутливі облікові дані на належному сервері, назвемо це "шлюзом".
- Коли пристрій IoT аутентифікується на шлюз (використовуючи його ключ RSA), шлюз відкриває для нього сеанс за допомогою збережених облікових даних і передає маркер сеансу назад на пристрій.
- Для кращої безпеки шлюз - це фізичний (або VPN) шлюз, так що весь трафік від пристрою IoT проходить через шлюз, і ви маєте більше контролю над правилами брандмауера та іншим способом - в ідеалі не дозволяйте пристрою мати пряму (тунель без VPN) доступ до Інтернету.
Таким чином, зловмисник, який компрометує пристрій, може відкрити сеанс, але ніколи не має прямого доступу до облікових даних.