Attestation met behulp van een symmetrische sleutel

In dit artikel wordt het proces voor identiteitsverklaring beschreven bij het gebruik van symmetrische sleutels met Device Provisioning Service. Attestation met symmetrische sleutels is een eenvoudige benadering voor het verifiëren van een apparaat met een Device Provisioning Service-exemplaar. Deze attestation-methode vertegenwoordigt een 'Hallo wereld'-ervaring voor ontwikkelaars die geen ervaring hebben met het inrichten van apparaten of waarvoor geen strikte beveiligingsvereisten gelden. Apparaatverklaring met behulp van een TPM of een X.509-certificaat is veiliger en moet worden gebruikt voor strengere beveiligingsvereisten.

Symmetrische sleutelinschrijvingen bieden ook een manier voor verouderde apparaten met beperkte beveiligingsfunctionaliteit om te bootstrapen naar de cloud via Azure IoT.

Symmetrische sleutel maken

Device Provisioning Service maakt standaard nieuwe symmetrische sleutels met een lengte van 64 bytes wanneer nieuwe inschrijvingen worden gemaakt met de optie Symmetrische sleutels genereren automatisch ingeschakeld.

Screenshot that shows a new individual enrollment with the autogenerate keys option selected.

U kunt ook uw eigen symmetrische sleutels voor inschrijvingen opgeven door deze optie uit te schakelen. Symmetrische sleutels moeten de indeling Base 64 hebben en een sleutellengte hebben tussen 16 bytes en 64 bytes.

Gedetailleerd attestation-proces

Symmetrische sleutelverklaring met Device Provisioning Service wordt uitgevoerd met behulp van dezelfde beveiligingstokens die door IoT-hubs worden ondersteund om apparaten te identificeren. Deze beveiligingstokens zijn SAS-tokens (Shared Access Signature).

SAS-tokens hebben een hash-handtekening die wordt gemaakt met behulp van de symmetrische sleutel. Device Provisioning Service maakt de handtekening opnieuw om te controleren of een beveiligingstoken dat tijdens de attestation wordt gepresenteerd, authentiek is.

SAS-tokens hebben het volgende formulier:

SharedAccessSignature sig={signature}&se={expiry}&skn={policyName}&sr={URL-encoded-resourceURI}

Dit zijn de onderdelen van elk token:

Weergegeven als Beschrijving
{signature} Een HMAC-SHA256-handtekeningtekenreeks. Voor afzonderlijke inschrijvingen wordt deze handtekening geproduceerd met behulp van de symmetrische sleutel (primair of secundair) om de hash uit te voeren. Voor inschrijvingsgroepen wordt een sleutel die is afgeleid van de inschrijvingsgroepssleutel gebruikt om de hash uit te voeren. De hash wordt uitgevoerd op een bericht van het formulier: URL-encoded-resourceURI + "\n" + expiry. Belangrijk: De sleutel moet worden gedecodeerd vanuit base64 voordat deze wordt gebruikt om de HMAC-SHA256-berekening uit te voeren. Het handtekeningresultaat moet ook URL-gecodeerd zijn.
{resourceURI} URI van het registratie-eindpunt dat kan worden geopend met dit token, te beginnen met de bereik-id voor het Device Provisioning Service-exemplaar. Bijvoorbeeld {Scope ID}/registrations/{Registration ID}
{vervaldatum} UTF8-tekenreeksen voor het aantal seconden sinds het tijdvak 00:00:00 UTC op 1 januari 1970.
{URL-gecodeerde-resourceURI} URL-codering van kleine letters van de resource-URI met kleine letters
{policyName} De naam van het beleid voor gedeelde toegang waarnaar dit token verwijst. De beleidsnaam die wordt gebruikt bij het inrichten met symmetrische sleutelverklaring is registratie.

Zie SAS-tokens voor codevoorbeelden waarmee een SAS-token wordt gemaakt.

Afzonderlijke inschrijvingen met symmetrische sleutels

Wanneer een apparaat attesteert met een afzonderlijke inschrijving, gebruikt het apparaat de symmetrische sleutel die is gedefinieerd in de afzonderlijke inschrijvingsvermelding om de hash-handtekening voor het SAS-token te maken.

Groepsinschrijvingen met symmetrische sleutels

In tegenstelling tot een afzonderlijke inschrijving wordt de symmetrische sleutel van een inschrijvingsgroep niet rechtstreeks door apparaten gebruikt wanneer deze worden ingericht. In plaats daarvan doen apparaten die via een inschrijvingsgroep worden ingericht dit met behulp van een afgeleide apparaatsleutel. De afgeleide apparaatsleutel is een hash van de registratie-id van het apparaat en wordt berekend met behulp van de symmetrische sleutel van de inschrijvingsgroep. Het apparaat kan vervolgens de afgeleide apparaatsleutel gebruiken om het SAS-token te ondertekenen dat wordt gebruikt om te registreren bij DPS. Omdat het apparaat de registratie-id verzendt wanneer het wordt geregistreerd, kan DPS de symmetrische sleutel van de registratiegroep gebruiken om de afgeleide apparaatsleutel van het apparaat opnieuw te genereren en de handtekening op het SAS-token te verifiëren.

Eerst wordt een unieke registratie-id gedefinieerd voor elk apparaat dat wordt geverifieerd via een inschrijvingsgroep. De registratie-id is een hoofdlettergevoelige tekenreeks (maximaal 128 tekens lang) met alfanumerieke tekens plus geldige speciale tekens: - . _ :. Het laatste teken moet alfanumeriek of streepje ('-') zijn. De registratie-id moet iets unieks zijn waarmee het apparaat wordt geïdentificeerd. Bijvoorbeeld een MAC-adres of serienummer dat beschikbaar is om een apparaat uniek te identificeren. In dat geval kan een registratie-id bestaan uit het MAC-adres en serienummer, vergelijkbaar met het volgende:

sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6

Zodra een registratie-id voor het apparaat is gedefinieerd, wordt de symmetrische sleutel voor de registratiegroep gebruikt om een HMAC-SHA256-hash van de registratie-id te berekenen om een afgeleide apparaatsleutel te produceren. Enkele voorbeelden van benaderingen voor het berekenen van de afgeleide apparaatsleutel worden gegeven op de onderstaande tabbladen.

De IoT-extensie voor de Azure CLI biedt de opdracht voor het compute-device-key genereren van afgeleide apparaatsleutels. Deze opdracht kan worden gebruikt vanuit Windows- of Linux-systemen, in PowerShell of een Bash-shell.

Vervang de waarde van --key het argument door de primaire sleutel uit uw inschrijvingsgroep.

Vervang de waarde van --registration-id het argument door uw registratie-id.

az iot dps enrollment-group compute-device-key --key 8isrFI1sGsIlvvFSSFRiMfCNzv21fjbE/+ah/lSh3lF8e2YG1Te7w1KpZhJFFXJrqYKi9yegxkqIChbqOS9Egw== --registration-id sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6

Voorbeeldresultaat:

"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="

De resulterende apparaatsleutel wordt vervolgens gebruikt om een SAS-token te genereren dat moet worden gebruikt voor attestation. Elk apparaat in een inschrijvingsgroep is vereist om te attesteren met behulp van een beveiligingstoken dat is gegenereerd op basis van een unieke afgeleide sleutel. De symmetrische sleutel van de inschrijvingsgroep kan niet rechtstreeks worden gebruikt voor attestation.

De afgeleide apparaatsleutel installeren

In het ideale instantie worden apparaatsleutels afgeleid en geïnstalleerd in de fabriek. Deze methode garandeert dat de groepssleutel nooit is opgenomen in software die op het apparaat is geïmplementeerd. Wanneer aan het apparaat een MAC-adres of serienummer is toegewezen, kan de sleutel worden afgeleid en geïnjecteerd in het apparaat, maar de fabrikant kiest ervoor om het op te slaan.

Bekijk het volgende diagram met een tabel met apparaatsleutels die in een fabriek zijn gegenereerd door elke apparaatregistratie-id te hashen met de groepsinschrijvingssleutel (K).

Diagram that shows device keys being assigned at a factory.

De identiteit van elk apparaat wordt vertegenwoordigd door de registratie-id en afgeleide apparaatsleutel die in de fabriek is geïnstalleerd. De apparaatsleutel wordt nooit gekopieerd naar een andere locatie en de groepssleutel wordt nooit opgeslagen op een apparaat.

Als de apparaatsleutels niet in de fabriek zijn geïnstalleerd, moet een HSM van de hardwarebeveiligingsmodule worden gebruikt om de apparaat-id veilig op te slaan.

Volgende stappen

Nu u kennis hebt van attestation voor symmetrische sleutels, raadpleegt u de volgende artikelen voor meer informatie: