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