Ключі WireGuard на ESP32: окремий для кожного пристрою чи один у прошивці?
Ключ, скомпільований у прошивку ESP32, — це ідентичність піра, а не пароль. Вирішуйте за трьома умовами: фізичне володіння, захист флешу й повторне використання в усьому парку.
Скетч кладе закритий ключ WireGuard у масив символів, і тунель працює, тому питання виникає знову й знову. Рішення, яке справді треба ухвалити, — не «чи це безпечно», а «яка з трьох умов стосується цього розгортання». Ось вони: хто може фізично тримати пристрій, що дає читання флешу на вашій деталі й чи парк ділить один ключ або кожен пристрій несе свій. Дайте відповідь — і проєкт випливе, бо кожна умова змінює ціну витеклого ключа, а не сам факт можливості витоку.
Що дозволяє ключ
WireGuard автентифікує пірів за відкритим ключем. Сервер зіставляє відкритий ключ кожного піра з адресою та AllowedIPs списком, тому саме закритий ключ дозволяє клієнтові надсилати трафік із цієї адреси.
Той самий запис визначає, яких призначень пристрій може досягти, тому витеклий ключ розкриває і мережу за тунелем, і адресу тунелю.
Умова перша: хто може тримати пристрій
Якщо блок стоїть у замкненій шафі й ніхто поза вашою командою його не торкається, ризик — переважно питання розповсюдження прошивки. Якщо його надсилають клієнтам, він стоїть в автомобілі або повертається за гарантією, фізичне володіння і є обліковими даними, а секретність бінарника другорядна. Той, хто тримає пристрій у руках, не мусить читати ключ, бо працююча прошивка сама відкриє йому тунель. Тому відповідь на боці сервера має містити відкликання й обмежений термін життя, а не лише захищений образ.
Вирішіть цю умову раніше за дві інші, бо вона задає бюджет для обох.
Умова друга: що дає читання флешу
Хто може прочитати образ флешу, той відновить ключ, збережений літералом, — через налагоджувальне з'єднання, файл оновлення, резервну копію чи повернутий пристрій. Шифрування флешу підвищує ціну прямого дампу, і документація ESP-IDF описує, що ця функція покриває для даної деталі та конфігурації. Вона не робить ключ невитяжним за будь-якої моделі атаки й нічого не дає для випадку, коли пристрій у руках. Ставтеся до неї як до одного шару, що змінює ціну, а не як до відповіді.
Прочитайте документацію платформи для свого точного чипа й конфігурації, перш ніж заявляти властивість на огляді проєкту.
Умова третя: повторне використання в усьому парку
Один ключ на виробничу серію означає, що всі блоки поділяють одну ідентичність. Сервер не може розрізнити їх у журналах, не може відкликати один, не відкликавши всі, і не може відрізнити клон від оригіналу. Ключі на кожен пристрій вирішують усі три, ціною кроку реєстрації та зіставлення серійного номера з відкритим ключем. Саме це зіставлення — той актив, що перетворює відкликання на правку одного рядка замість перепрошивки всього парку.
Якщо парк — п'ять блоків на столі, спільний ключ може бути розумним обміном. Якщо це п'ятсот у полі, то це зовсім не обмін.
Схема реєстрації, яка робить ключі на пристрій практичними
Створіть пару ключів на пристрої під час першого завантаження, тримайте закриту половину в захищеній енергонезалежній пам'яті й надсилайте лише відкритий ключ до служби реєстрації, яка призначає адресу та пише запис піра. Автентифікуйте відповідь реєстрації, інакше зловмисник у локальній мережі зможе зареєструвати свій ключ на вашому обліковому записі. Ніколи не друкуйте закритий ключ у послідовну консоль під час підготовки. Записуйте серійний номер пристрою поруч із відкритим ключем, щоб втрачений блок відповідав рівно одному запису піра.
Це невелика служба, і вона й є різниця між парком, який можна перевірити, і парком, який можна лише перепрошити.
Час, кінцеві точки й рішення
Приклад синхронізує час перед запуском тунелю, і це важливо поза TLS: рукостискання WireGuard несуть позначку часу для захисту від повтору, тому пристрій, що завантажився з неправильним годинником, може отримати відмову в рукостисканні. Кінцева точка — ім'я хоста, що ставить DNS на шлях довіри, хоча відкритий ключ сервера й далі автентифікує піра. Хибна адреса марнує спроби й викриває, коли пристрій у мережі. Розберіться з обома, перш ніж сперечатися про ключ.
Потім вирішіть: спільний ключ лише поки володіння контрольоване й парк малий, ключі на пристрій — щойно будь-що з цього перестане бути правдою.