Скетч кладе закритий ключ WireGuard у масив символів, і тунель працює, тому питання виникає знову й знову. Рішення, яке справді треба ухвалити, — не «чи це безпечно», а «яка з трьох умов стосується цього розгортання». Ось вони: хто може фізично тримати пристрій, що дає читання флешу на вашій деталі й чи парк ділить один ключ або кожен пристрій несе свій. Дайте відповідь — і проєкт випливе, бо кожна умова змінює ціну витеклого ключа, а не сам факт можливості витоку.

Що дозволяє ключ

WireGuard автентифікує пірів за відкритим ключем. Сервер зіставляє відкритий ключ кожного піра з адресою та AllowedIPs списком, тому саме закритий ключ дозволяє клієнтові надсилати трафік із цієї адреси.

Той самий запис визначає, яких призначень пристрій може досягти, тому витеклий ключ розкриває і мережу за тунелем, і адресу тунелю.

Умова перша: хто може тримати пристрій

Якщо блок стоїть у замкненій шафі й ніхто поза вашою командою його не торкається, ризик — переважно питання розповсюдження прошивки. Якщо його надсилають клієнтам, він стоїть в автомобілі або повертається за гарантією, фізичне володіння і є обліковими даними, а секретність бінарника другорядна. Той, хто тримає пристрій у руках, не мусить читати ключ, бо працююча прошивка сама відкриє йому тунель. Тому відповідь на боці сервера має містити відкликання й обмежений термін життя, а не лише захищений образ.

Вирішіть цю умову раніше за дві інші, бо вона задає бюджет для обох.

Умова друга: що дає читання флешу

Хто може прочитати образ флешу, той відновить ключ, збережений літералом, — через налагоджувальне з'єднання, файл оновлення, резервну копію чи повернутий пристрій. Шифрування флешу підвищує ціну прямого дампу, і документація ESP-IDF описує, що ця функція покриває для даної деталі та конфігурації. Вона не робить ключ невитяжним за будь-якої моделі атаки й нічого не дає для випадку, коли пристрій у руках. Ставтеся до неї як до одного шару, що змінює ціну, а не як до відповіді.

Прочитайте документацію платформи для свого точного чипа й конфігурації, перш ніж заявляти властивість на огляді проєкту.

Умова третя: повторне використання в усьому парку

Один ключ на виробничу серію означає, що всі блоки поділяють одну ідентичність. Сервер не може розрізнити їх у журналах, не може відкликати один, не відкликавши всі, і не може відрізнити клон від оригіналу. Ключі на кожен пристрій вирішують усі три, ціною кроку реєстрації та зіставлення серійного номера з відкритим ключем. Саме це зіставлення — той актив, що перетворює відкликання на правку одного рядка замість перепрошивки всього парку.

Якщо парк — п'ять блоків на столі, спільний ключ може бути розумним обміном. Якщо це п'ятсот у полі, то це зовсім не обмін.

Схема реєстрації, яка робить ключі на пристрій практичними

Створіть пару ключів на пристрої під час першого завантаження, тримайте закриту половину в захищеній енергонезалежній пам'яті й надсилайте лише відкритий ключ до служби реєстрації, яка призначає адресу та пише запис піра. Автентифікуйте відповідь реєстрації, інакше зловмисник у локальній мережі зможе зареєструвати свій ключ на вашому обліковому записі. Ніколи не друкуйте закритий ключ у послідовну консоль під час підготовки. Записуйте серійний номер пристрою поруч із відкритим ключем, щоб втрачений блок відповідав рівно одному запису піра.

Це невелика служба, і вона й є різниця між парком, який можна перевірити, і парком, який можна лише перепрошити.

Час, кінцеві точки й рішення

Приклад синхронізує час перед запуском тунелю, і це важливо поза TLS: рукостискання WireGuard несуть позначку часу для захисту від повтору, тому пристрій, що завантажився з неправильним годинником, може отримати відмову в рукостисканні. Кінцева точка — ім'я хоста, що ставить DNS на шлях довіри, хоча відкритий ключ сервера й далі автентифікує піра. Хибна адреса марнує спроби й викриває, коли пристрій у мережі. Розберіться з обома, перш ніж сперечатися про ключ.

Потім вирішіть: спільний ключ лише поки володіння контрольоване й парк малий, ключі на пристрій — щойно будь-що з цього перестане бути правдою.

Схожі статті