Symmetrisk nyckelattestering

Den här artikeln beskriver identitetsattesteringsprocessen när du använder symmetriska nycklar med device provisioning-tjänsten. Symmetrisk nyckelattestering är en enkel metod för att autentisera en enhet med en instans av enhetsetableringstjänsten. Den här attesteringsmetoden representerar en "Hello World"-upplevelse för utvecklare som är nybörjare på enhetsetablering eller inte har strikta säkerhetskrav. Enhetsattestering med ett TPM - eller X.509-certifikat är säkrare och bör användas för strängare säkerhetskrav.

Symmetriska nyckelregistreringar är också ett sätt för äldre enheter med begränsade säkerhetsfunktioner att starta till molnet via Azure IoT.

Skapande av symmetrisk nyckel

Som standard skapar Enhetsetableringstjänsten nya symmetriska nycklar med en längd på 64 byte när nya registreringar skapas med alternativet Generera symmetriska nycklar automatiskt aktiverat.

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

Du kan också ange egna symmetriska nycklar för registreringar genom att inaktivera det här alternativet. Symmetriska nycklar måste vara i base 64-format och ha en nyckellängd mellan 16 byte och 64 byte.

Detaljerad attesteringsprocess

Symmetrisk nyckelattestering med enhetsetableringstjänsten utförs med samma säkerhetstoken som stöds av IoT-hubbar för att identifiera enheter. Dessa säkerhetstoken är SAS-token (Signatur för delad åtkomst).

SAS-token har en hash-signatur som skapas med hjälp av den symmetriska nyckeln. Device Provisioning Service återskapar signaturen för att kontrollera om en säkerhetstoken som visas under attesteringen är giltig eller inte.

SAS-token har följande formulär:

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

Här är komponenterna i varje token:

Värde beskrivning
{signature} En HMAC-SHA256-signatursträng. För enskilda registreringar skapas den här signaturen med hjälp av den symmetriska nyckeln (primär eller sekundär) för att utföra hashen. För registreringsgrupper används en nyckel som härleds från registreringsgruppnyckeln för att utföra hashen. Hashen utförs på ett meddelande i formuläret: URL-encoded-resourceURI + "\n" + expiry. Viktigt: Nyckeln måste avkodas från base64 innan den används för att utföra HMAC-SHA256-beräkningen. Signaturresultatet måste också vara URL-kodat.
{resourceURI} URI för registreringsslutpunkten som kan nås med den här token, från och med omfångs-ID för enhetsetableringstjänstens instans. Till exempel: {Scope ID}/registrations/{Registration ID}
{expiry} UTF8-strängar för antal sekunder sedan epoken 00:00:00 UTC den 1 januari 1970.
{URL-encoded-resourceURI} Gemener URL-kodning för URI:n för gemener
{policyName} Namnet på den princip för delad åtkomst som denna token refererar till. Det principnamn som används vid etablering med symmetrisk nyckelattestering är registrering.

Kodexempel som skapar en SAS-token finns i SAS-token.

Enskilda registreringar med symmetriska nycklar

När en enhet intygar en enskild registrering använder enheten den symmetriska nyckel som definierats i den enskilda registreringsposten för att skapa den hashade signaturen för SAS-token.

Gruppera registreringar med symmetriska nycklar

Till skillnad från en enskild registrering används inte den symmetriska nyckeln för en registreringsgrupp direkt av enheter när de etableras. I stället gör enheter som etablerar via en registreringsgrupp det med hjälp av en härledd enhetsnyckel. Den härledda enhetsnyckeln är en hash för enhetens registrerings-ID och beräknas med hjälp av den symmetriska nyckeln i registreringsgruppen. Enheten kan sedan använda sin härledda enhetsnyckel för att signera den SAS-token som den använder för att registrera med DPS. Eftersom enheten skickar sitt registrerings-ID när den registreras kan DPS använda den symmetriska nyckeln för registreringsgruppen för att återskapa enhetens härledda enhetsnyckel och verifiera signaturen på SAS-token.

Först definieras ett unikt registrerings-ID för varje enhet som autentiserar via en registreringsgrupp. Registrerings-ID:t är en skiftlägeskänslig sträng (upp till 128 tecken lång) med alfanumeriska tecken plus giltiga specialtecken: - . _ :. Det sista tecknet måste vara alfanumeriskt eller streck ('-'). Registrerings-ID:t bör vara något unikt som identifierar enheten. Till exempel en MAC-adress eller ett serienummer som är tillgängligt för att unikt identifiera en enhet. I så fall kan ett registrerings-ID bestå av MAC-adressen och serienumret som liknar följande:

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

När ett registrerings-ID har definierats för enheten används den symmetriska nyckeln för registreringsgruppen för att beräkna en HMAC-SHA256-hash för registrerings-ID:t för att skapa en härledd enhetsnyckel. Några exempel på metoder för att beräkna den härledda enhetsnyckeln finns på flikarna nedan.

IoT-tillägget för Azure CLI tillhandahåller compute-device-key kommandot för att generera härledda enhetsnycklar. Det här kommandot kan användas från Windows- eller Linux-system, i PowerShell eller ett Bash-gränssnitt.

Ersätt värdet för --key argumentet med primärnyckeln från din registreringsgrupp.

Ersätt värdet för --registration-id argumentet med ditt registrerings-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

Exempelresultat:

"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="

Den resulterande enhetsnyckeln används sedan för att generera en SAS-token som ska användas för attestering. Varje enhet i en registreringsgrupp måste intyga med hjälp av en säkerhetstoken som genereras från en unik härledd nyckel. Den symmetriska nyckeln för registreringsgruppen kan inte användas direkt för attestering.

Installera den härledda enhetsnyckeln

Helst härleds och installeras enhetsnycklar i fabriken. Den här metoden garanterar att gruppnyckeln aldrig ingår i någon programvara som distribueras till enheten. När enheten tilldelas en MAC-adress eller ett serienummer kan nyckeln härledas och matas in i enheten, men tillverkaren väljer att lagra den.

Tänk dig följande diagram som visar en tabell med enhetsnycklar som genererats i en fabrik genom att hasha varje enhetsregistrerings-ID med gruppregistreringsnyckeln (K).

Diagram that shows device keys being assigned at a factory.

Identiteten för varje enhet representeras av registrerings-ID:t och den härledda enhetsnyckeln som är installerad på fabriken. Enhetsnyckeln kopieras aldrig till en annan plats och gruppnyckeln lagras aldrig på en enhet.

Om enhetsnycklarna inte är installerade i fabriken ska en maskinvarusäkerhetsmodul HSM användas för att lagra enhetsidentiteten på ett säkert sätt.

Nästa steg

Nu när du har en förståelse för symmetrisk nyckelattestering kan du läsa följande artiklar om du vill veta mer: