Nachweis des symmetrischen Schlüssels
In diesem Artikel wird der Prozess des Identitätsnachweises bei der Verwendung von symmetrischen Schlüsseln mit Device Provisioning Service beschrieben. Der Nachweis des symmetrischen Schlüssels ist eine einfache Methode zum Authentifizieren eines Geräts mit einer Device Provisioning Service-Instanz. Diese Nachweismethode stellt eine „Hallo Welt“-Umgebung für Entwickler bereit, die noch nicht mit der Gerätebereitstellung vertraut sind oder keine strengen Sicherheitsanforderungen haben. Die Gerätebestätigung bzw. der Nachweis mithilfe eines TPM (Trusted Platform Module) oder x.509-Zertifikats ist sicherer und sollte verwendet werden, wenn striktere Sicherheitsanforderungen gelten.
Registrierungen von symmetrischen Schlüsseln eignen sich zudem dazu, Bootstrapping für Legacygeräte mit eingeschränkten Sicherheitsfunktionen über Azure IoT in der Cloud durchzuführen.
Erstellung von symmetrischen Schlüsseln
Standardmäßig erstellt der Gerätebereitstellungsdienst neue symmetrische Schlüssel mit einer Länge von 64 Byte, wenn neue Registrierungen mit aktivierter Option Symmetrische Schlüssel automatisch generieren erstellt werden.
Sie können auch Ihre eigenen symmetrischen Schlüssel für Registrierungen verwenden, indem Sie diese Option deaktivieren. Symmetrische Schlüssel müssen im Base64-Format vorliegen und eine Schlüssellänge zwischen 16 Byte und 64 Byte aufweisen.
Detaillierter Nachweisprozess
Der Nachweis des symmetrischen Schlüssels mit dem Gerätebereitstellungsdienst wird mit den gleichen Sicherheitstoken ausgeführt, die von IoT-Hubs zum Identifizieren von Geräten unterstützt werden. Diese Sicherheitstoken sind SAS-Token (Shared Access Signature).
SAS-Token haben eine Hashsignatur, die mit dem symmetrischen Schlüssel erstellt wird. Die Signatur wird vom Gerätebereitstellungsdienst neu erstellt, um zu überprüfen, ob ein während des Nachweises angegebenes Sicherheitstoken authentisch ist.
SAS-Token weisen folgendes Format auf:
SharedAccessSignature sig={signature}&se={expiry}&skn={policyName}&sr={URL-encoded-resourceURI}
Jedes Token enthält die folgenden Komponenten:
Wert | BESCHREIBUNG |
---|---|
{signature} | Eine HMAC-SHA256-Signaturzeichenfolge. Für individuelle Registrierungen wird diese Signatur erstellt, indem der symmetrische Schlüssel (primär oder sekundär) zum Ausführen des Hashvorgangs verwendet wird. Für Registrierungsgruppen wird ein aus dem Registrierungsgruppenschlüssel abgeleiteter Schlüssel zum Ausführen des Hashvorgangs verwendet. Der Hashvorgang wird für eine Nachricht im folgenden Format ausgeführt: URL-encoded-resourceURI + "\n" + expiry . Wichtig: Der Schlüssel muss aus base64 decodiert werden, bevor er zum Ausführen der HMAC-SHA256-Berechnung verwendet wird. Zudem muss das Signaturergebnis URL-codiert sein. |
{resourceURI} | Der URI des Registrierungsendpunkts, auf den mit diesem Token zugegriffen werden kann. Der URI beginnt mit der Bereichs-ID für die Device Provisioning Service-Instanz. Beispiel: {Scope ID}/registrations/{Registration ID} |
{expiry} | UTF8-Zeichenfolge, dargestellt als die Anzahl von Sekunden seit dem 1. Januar 1970 um 00:00:00 UTC. |
{URL-encoded-resourceURI} | URL-Codierung des Ressourcen-URI (beides in Kleinbuchstaben) |
{policyName} | Der Name der gemeinsam genutzten Zugriffsrichtlinie, auf die dieses Token verweist. Der Richtlinienname, der bei der Bereitstellung mit Nachweis des symmetrischen Schlüssels verwendet wird, ist registration. |
Codebeispiele für die Erstellung eines SAS-Tokens finden Sie unter SAS-Token.
Einzelne Registrierungen mit symmetrischen Schlüsseln
Wenn ein Gerät die Bestätigung mit einer individuellen Registrierung vornimmt, verwendet es den im individuellen Registrierungseintrag definierten symmetrischen Schlüssel zum Erstellen der Hashsignatur für das SAS-Token.
Gruppieren von Registrierungen mit symmetrischen Schlüsseln
Im Gegensatz zu einer einzelnen Registrierung wird der symmetrische Schlüssel einer Registrierungsgruppe nicht direkt von Geräten verwendet, wenn sie bereitgestellt werden. Stattdessen verwenden Geräte, die über eine Registrierungsgruppe bereitgestellt werden, einen abgeleiteten Geräteschlüssel. Der abgeleitete Geräteschlüssel ist ein Hash der Registrierungs-ID des Geräts und wird mithilfe des symmetrischen Schlüssels der Registrierungsgruppe berechnet. Das Gerät kann dann seinen abgeleiteten Geräteschlüssel verwenden, um das SAS-Token zu signieren, das es zum Registrieren mit DPS verwendet. Da das Gerät seine Registrierungs-ID beim Registrieren sendet, kann DPS den symmetrischen Registrierungsgruppenschlüssel verwenden, um den abgeleiteten Geräteschlüssel des Geräts neu zu generieren und die Signatur im SAS-Token zu überprüfen.
Zunächst wird eine eindeutige Registrierungs-ID für jedes Gerät definiert, das die Authentifizierung über eine Registrierungsgruppe vornimmt. Bei der Registrierungs-ID handelt es sich um eine Zeichenfolge (bis zu 128 Zeichen lang) alphanumerischer Zeichen ohne Beachtung der Groß-/Kleinschreibung plus gültiger Sonderzeichen: - . _ :
. Das letzte Zeichen muss alphanumerisch oder ein Bindestrich ('-'
) sein. Bei der Registrierungs-ID sollte es sich um eine eindeutige Bezeichnung handeln, die das Gerät identifiziert. Ein Gerät kann z. B. über seine MAC-Adresse oder Seriennummer eindeutig identifiziert werden. In diesem Fall kann eine Registrierungs-ID wie folgt aus der MAC-Adresse und der Seriennummer zusammengesetzt werden:
sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
Nachdem eine Registrierungs-ID für das Gerät definiert wurde, wird der symmetrische Schlüssel für die Registrierungsgruppe zum Berechnen eines HMAC-SHA256-Hashes der Registrierungs-ID verwendet, um einen abgeleiteten Geräteschlüssel zu erstellen. Einige Beispielansätze zur Berechnung des abgeleiteten Geräteschlüssels finden Sie in den folgenden Registerkarten.
Die IoT-Erweiterung für die Azure CLI stellt den compute-device-key
Befehl zum Generieren abgeleiteter Geräteschlüssel bereit. Dieser Befehl kann von Windows- oder Linux-Systemen aus in PowerShell oder einer Bash-Shell verwendet werden.
Ersetzen Sie den Wert des --key
-Arguments durch den Primärschlüssel aus Ihrer Registrierungsgruppe.
Ersetzen Sie den Wert des Arguments --registration-id
durch Ihre Registrierungs-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
Beispielergebnis:
"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="
Der resultierende Geräteschlüssel wird dann verwendet, um ein SAS-Token für die Bestätigung zu generieren. Jedes Gerät in einer Registrierungsgruppe muss die Bestätigung mit einem Sicherheitstoken ausführen, das aus einem eindeutigen abgeleiteten Schlüssel generiert wurde. Der symmetrische Schlüssel der Registrierungsgruppe kann nicht direkt für den Nachweis verwendet werden.
Installieren des abgeleiteten Geräteschlüssels
Im Idealfall werden die Geräteschlüssel werkseitig abgeleitet und installiert. Dadurch wird sichergestellt, dass der Gruppenschlüssel nie in einer auf dem Gerät bereitgestellten Software enthalten ist. Wenn dem Gerät eine MAC-Adresse oder Seriennummer zugewiesen ist, kann der Schlüssel abgeleitet und wie vom Hersteller gewünscht auf dem Gerät gespeichert werden.
Das folgende Diagramm zeigt eine Tabelle mit Geräteschlüsseln, die werkseitig durch Hashing jeder Geräteregistrierungs-ID mit dem Gruppenregistrierungsschlüssel generiert wurden (K).
Die Identität jedes Geräts wird durch die Registrierungs-ID und den werkseitig installierten abgeleiteten Geräteschlüssel dargestellt. Der Geräteschlüssel wird nie an einen anderen Speicherort kopiert, und der Gruppenschlüssel wird nie auf einem Gerät gespeichert.
Falls die Geräteschlüssel nicht werkseitig installiert wurden, sollte ein Hardwaresicherheitsmodul (HSM) verwendet werden, um die Identität des Geräts sicher zu speichern.
Nächste Schritte
Nachdem Sie sich mit dem Nachweis des symmetrischen Schlüssels vertraut gemacht haben, können Sie nun die folgenden Artikel lesen, um mehr zu erfahren: