WireGuard-nøgler på ESP32: per enhed eller én indbygget?
En nøgle, der kompileres ind i ESP32-firmware, er en peer-identitet, ikke en adgangskode. Afgør efter tre betingelser: fysisk besiddelse, flash-beskyttelse og genbrug i hele flåden.
Sketchen lægger WireGuards private nøgle i et tegnarray, og tunnelen virker, og derfor dukker spørgsmålet op igen. Den beslutning, du faktisk skal træffe, er ikke «er dette sikkert», men «hvilken af tre betingelser gælder for denne udrulning». De er: hvem der fysisk kan holde enheden, hvad en flash-læsning giver på din del, og om flåden deler én nøgle eller bærer én hver. Besvar dem, og designet følger, fordi hver af dem ændrer prisen på en lækket nøgle, ikke det faktum, at den kan lække.
Hvad nøglen autoriserer
WireGuard autentificerer peers med en offentlig nøgle. Serveren knytter hver peers offentlige nøgle til en adresse og en AllowedIPs-liste, så det er den private nøgle, der lader en klient sende trafik fra den adresse.
Den samme post afgør, hvilke destinationer enheden må nå, så en lækket nøgle blotlægger netværket bag tunnelen såvel som tunneladressen.
Betingelse et: hvem kan holde enheden
Hvis enheden står i et aflåst skab, og ingen uden for dit team rører den, er eksponeringen mest et spørgsmål om firmware-distribution. Hvis den sendes til kunder, står i et køretøj eller kommer retur på garantien, er den fysiske besiddelse legitimationsoplysningen, og binærens hemmeligholdelse er sekundær. Den, der holder enheden, behøver ikke læse nøglen, fordi den kørende firmware åbner tunnelen for dem. Derfor skal svaret på serversiden indeholde tilbagekaldelse og en begrænset levetid, ikke kun et beskyttet image.
Afgør denne betingelse før de to andre, fordi den sætter budgettet for begge.
Betingelse to: hvad en flash-læsning giver
Enhver, der kan læse flash-imaget, får en nøgle tilbage, der er gemt som literal, hvad enten det er via en debug-forbindelse, en opdateringsfil, en backup eller en returneret enhed. Flash-kryptering hæver prisen på et direkte dump, og ESP-IDF-dokumentationen beskriver, hvad funktionen dækker for en given del og konfiguration. Det gør ikke nøglen uudtrækkelig under alle angrebsmodeller, og det gør intet for tilfældet med enheden i hånden. Behandl det som et lag, der ændrer prisen, ikke som svaret.
Læs platformsdokumentationen for din præcise chip og konfiguration, før du hævder en egenskab i et designreview.
Betingelse tre: genbrug i hele flåden
Én nøgle til en produktionsserie betyder, at hver enhed deler én identitet. Serveren kan ikke skelne dem i logfilerne, kan ikke tilbagekalde én uden at tilbagekalde alle, og kan ikke skelne en klon fra en original. Nøgler per enhed løser alle tre, for prisen af et enrollment-trin og en mapping fra serienummer til offentlig nøgle. Den mapping er det aktiv, der gør tilbagekaldelse til en ændring på én linje i stedet for en flådeomfattende reflash.
Er flåden fem enheder på en bænk, kan en delt nøgle være en rimelig handel. Er den fem hundrede i marken, er det slet ikke en handel.
Det enrollment-mønster, der gør nøgler per enhed praktiske
Generér nøgleparret på enheden ved første opstart, hold den private halvdel i beskyttet ikke-flygtig lagring, og send kun den offentlige nøgle til en enrollment-tjeneste, der tildeler en adresse og skriver peer-posten. Autentificer enrollment-svaret, ellers kan en angriber på det lokale netværk registrere sin egen nøgle på din konto. Udskriv aldrig den private nøgle til seriekonsollen under provisioning. Notér enhedens serienummer ved siden af den offentlige nøgle, så en tabt enhed svarer til præcis én peer-post.
Det er en lille tjeneste, og det er forskellen mellem en flåde, du kan revidere, og en flåde, du kun kan reflashe.
Tid, endpoints og beslutningen
Eksemplet synkroniserer tid, før tunnelen startes, og det betyder noget ud over TLS: WireGuard-handshakes bærer et tidsstempel til replay-beskyttelse, så en enhed, der starter med et forkert ur, kan få afviste handshakes. Endpointet er et hostnavn, hvilket sætter DNS i tillidsstien, selv om serverens offentlige nøgle stadig autentificerer peer’en. En forkert adresse spilder forsøg og afslører, hvornår enheden er online. Håndtér begge, før du diskuterer nøglen.
Beslut så: en delt nøgle kun mens besiddelsen er kontrolleret og flåden er lille, nøgler per enhed så snart en af delene holder op med at være sand.