WireGuard-sleutels op de ESP32: per apparaat of één ingebakken?
Een sleutel die in ESP32-firmware wordt gecompileerd, is een peer-identiteit, geen wachtwoord. Beslis aan de hand van drie voorwaarden: bezit, flashbescherming en hergebruik in de hele vloot.
De schets zet de privésleutel van WireGuard in een tekenarray, en de tunnel werkt, daarom komt de vraag steeds terug. De beslissing die u echt moet nemen is niet «is dit veilig», maar «welke van drie voorwaarden geldt voor deze uitrol». Ze zijn: wie het apparaat fysiek kan vasthouden, wat een flash-uitlezing op uw onderdeel oplevert, en of de vloot één sleutel deelt of elk er een draagt. Beantwoord dat en het ontwerp volgt, want elke voorwaarde verandert de kosten van een gelekt sleutel, niet het feit dat hij kan lekken.
Wat de sleutel autoriseert
WireGuard authenticeert peers met een publieke sleutel. De server koppelt de publieke sleutel van elke peer aan een adres en een AllowedIPs lijst, dus de privésleutel is wat een client toestaat verkeer vanaf dat adres te sturen.
Dezelfde vermelding bepaalt welke bestemmingen het apparaat kan bereiken, dus een gelekte sleutel legt zowel het netwerk achter de tunnel als het tunneladres bloot.
Voorwaarde één: wie kan het apparaat vasthouden
Als de unit in een afgesloten kast staat en niemand buiten uw team hem aanraakt, is de blootstelling vooral een kwestie van firmwaredistributie. Als hij naar klanten gaat, in een voertuig staat of onder garantie terugkomt, is fysiek bezit het bewijs en is de geheimhouding van de binaire file secundair. Wie het apparaat in de hand heeft, hoeft de sleutel niet te lezen, want de draaiende firmware opent de tunnel voor hem. Daarom moet het antwoord aan serverzijde intrekking en een begrensde levensduur bevatten, niet alleen een beschermd image.
Beslis deze voorwaarde vóór de andere twee, want zij bepaalt het budget voor beide.
Voorwaarde twee: wat een flash-uitlezing oplevert
Iedereen die het flash-image kan lezen, krijgt een sleutel terug die als literal is opgeslagen, via een debug-verbinding, een updatebestand, een back-up of een teruggekeerde unit. Flashversleuteling verhoogt de kosten van een directe dump, en de ESP-IDF-documentatie beschrijft wat de functie dekt voor een bepaald onderdeel en configuratie. Het maakt de sleutel niet onextraheerbaar onder elk aanvalsmodel, en het doet niets voor het geval dat het apparaat in de hand is. Behandel het als één laag die kosten verandert, niet als het antwoord.
Lees de platformdocumentatie voor uw exacte chip en configuratie voordat u een eigenschap beweert in een ontwerpbeoordeling.
Voorwaarde drie: hergebruik in de hele vloot
Eén sleutel voor een productiereeks betekent dat elke unit één identiteit deelt. De server kan ze in de logs niet onderscheiden, kan er niet één intrekken zonder alle in te trekken, en kan een kloon niet van een origineel onderscheiden. Sleutels per apparaat lossen alle drie op, tegen de prijs van een registratiestap en een koppeling van serienummer aan publieke sleutel. Die koppeling is het bezit dat intrekking verandert in een wijziging van één regel in plaats van een herflash van de hele vloot.
Is de vloot vijf units op een werkbank, dan kan een gedeelde sleutel een redelijke ruil zijn. Zijn het er vijfhonderd in het veld, dan is het helemaal geen ruil.
Het registratiepatroon dat sleutels per apparaat praktisch maakt
Genereer het sleutelpaar op het apparaat bij de eerste start, houd de private helft in beschermde niet-vluchtige opslag, en stuur alleen de publieke sleutel naar een registratiedienst die een adres toewijst en de peer-vermelding schrijft. Authenticeer het registratieantwoord, anders kan een aanvaller op het lokale netwerk zijn eigen sleutel op uw account registreren. Print de privésleutel nooit naar de seriële console tijdens de provisioning. Noteer het serienummer van het apparaat naast de publieke sleutel, zodat een verloren unit precies op één peer-vermelding past.
Dat is een kleine dienst, en het is het verschil tussen een vloot die u kunt auditen en een vloot die u alleen opnieuw kunt flashen.
Tijd, endpoints en de beslissing
Het voorbeeld synchroniseert de tijd voordat de tunnel start, en dat telt verder dan TLS: handshakes van WireGuard dragen een tijdstempel voor replaybescherming, dus een apparaat dat met een verkeerde klok opstart, kan afgewezen handshakes krijgen. Het endpoint is een hostnaam, wat DNS in het vertrouwenspad zet, ook al authenticeert de publieke sleutel van de server de peer nog steeds. Een verkeerd adres verspilt pogingen en verraadt wanneer het apparaat online is. Regel beide voordat u over de sleutel discussieert.
Beslis dan: een gedeelde sleutel alleen zolang het bezit beheerst is en de vloot klein, sleutels per apparaat zodra een van beide niet meer waar is.