Attestation de clé symétrique

Cet article décrit le processus d’attestation d’identité lors de l’utilisation de clés symétriques avec le service Device Provisioning. L’attestation de clé symétrique est une approche simple pour authentifier un appareil avec une instance du service Device Provisioning. Cette méthode d’attestation représente une expérience « Hello world » pour les développeurs qui découvrent le provisionnement d’appareils ou qui n’ont pas d’exigences de sécurité strictes. L’attestation d’appareil avec un Module de plateforme sécurisée (TPM) ou un certificat X.509 est plus sécurisée, et elle doit être utilisée là où les exigences de sécurité sont plus strictes.

Les inscriptions à clés symétriques constituent aussi un moyen de démarrer sur le cloud via Azure IoT pour les appareils hérités dont les fonctionnalités de sécurité sont limitées.

Création d’une clé symétrique

Par défaut, le service de provisionnement des appareils (DPS, Device Provisioning Service) crée des clés symétriques avec une longueur de 64 octets quand de nouvelles inscriptions sont créées avec l’option Générer automatiquement les clés symétriques activée.

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

Vous pouvez également fournir vos propres clés symétriques pour les inscriptions en désactivant cette option. Les clés symétriques doivent avoir un format valide en base 64 et comprendre entre 16 et 64 octets.

Processus d’attestation détaillé

L’attestation de clé symétrique avec le service Device Provisioning est effectuée en utilisant les mêmes jetons de sécurité que ceux pris en charge par les hubs IoT pour identifier les appareils. Ces jetons de sécurité sont des jetons de signature d’accès partagé (SAP).

Les jetons SAP ont une signature hachée créée en utilisant la clé symétrique. La signature est recréée par le service de provisionnement des appareils pour vérifier si un jeton de sécurité présenté lors de l’attestation est authentique ou non.

Les jetons SAP ont le format suivant :

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

Voici les composants de chaque jeton :

Valeur Description
{signature} Chaîne de signature HMAC-SHA256. Pour les inscriptions individuelles, cette signature est produite avec la clé symétrique (principale ou secondaire) pour effectuer le hachage. Pour les groupes d’inscription, une clé dérivée de la clé d’inscription du groupe est utilisée pour effectuer le hachage. Le hachage est effectué sur un message de la forme : URL-encoded-resourceURI + "\n" + expiry. Important : La clé doit être décodée à partir du format base64 avant d’être utilisée pour effectuer le calcul HMAC-SHA256. En outre, le résultat de la signature doit être encodé sous forme d’URL.
{resourceURI} URI du point de terminaison d’inscription qui est accessible avec ce jeton, commençant par l’ID d’étendue pour l’instance du service Device Provisioning. Par exemple, {Scope ID}/registrations/{Registration ID}
{expiry} Chaînes UTF8 pour le nombre de secondes depuis l’époque 00:00:00 UTC 1er janvier 1970.
{URL-encoded-resourceURI} Encodage en URL minuscules de l’URI de ressource en minuscules
{policyName} Le nom de la stratégie d’accès partagé à laquelle ce jeton fait référence. Le nom de la stratégie utilisé lors du provisionnement avec l’attestation de clé symétrique est inscription.

Pour obtenir des exemples de code qui créent un jeton SAP, consultez Jetons SAP.

Inscriptions individuelles à clés symétriques

Quand un appareil atteste avec une inscription individuelle, il utilise la clé symétrique définie dans l’entrée d’inscription individuelle pour créer la signature hachée pour le jeton SAP.

Inscriptions groupées à clés symétriques

Contrairement à une inscription individuelle, la clé symétrique d’un groupe d’inscription n’est pas utilisée directement par les appareils lorsqu’ils approvisionnent. À la place, les appareils qui approvisionnent à partir d’un groupe d’inscription le font avec une clé d’appareil dérivée. La clé d’appareil dérivée est un code de hachage de l’ID d’inscription de l’appareil et est calculée à l’aide de la clé symétrique du groupe d’inscription. L’appareil peut ensuite utiliser sa clé d’appareil dérivée pour signer le jeton SAS qu’il utilise pour s’inscrire auprès de DPS. Étant donné que l’appareil envoie son ID d’inscription lors de son inscription, DPS peut utiliser la clé symétrique du groupe d’inscription pour régénérer la clé d’appareil dérivée de l’appareil et vérifier la signature sur le jeton SAS.

Tout d’abord, un identifiant d’inscription unique est défini pour chaque appareil s’authentifiant via un groupe d’inscription. L’ID d’inscription est une chaîne insensible à la casse (jusqu’à 128 caractères) de caractères alphanumériques et des caractères spéciaux : - . _ :. Le dernier caractère doit être alphanumérique ou être un tiret ('-'). L’identifiant d’inscription doit être quelque chose d’unique qui identifie l’appareil. Il peut s’agir, par exemple, d’une adresse MAC ou d’un numéro de série disponible pour identifier un appareil de manière unique. Dans ce cas, un ID d’inscription peut être composé de l’adresse MAC et du numéro de série, d’une façon similaire à ceci :

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

Une fois qu’un ID d’inscription a été défini pour l’appareil, la clé symétrique pour le groupe d’inscription est utilisée pour calculer un hachage HMAC-SHA256 de l’ID d’inscription, pour produire une clé d’appareil dérivée. Des exemples d’approches pour le calcul de la clé dérivée de l’appareil sont fournis dans les onglets ci-dessous.

L’extension IoT pour Azure CLI fournit la commande compute-device-key permettant de générer des clés d’appareil dérivées. Cette commande peut être utilisée à partir d’un système Windows ou Linux, dans PowerShell ou un interpréteur de commandes Bash.

Remplacez la valeur de l’argument --key par la clé primaire de votre groupe d’inscription.

Remplacez la valeur de l’argument --registration-id par votre ID d’inscription.

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

Exemple de résultat :

"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="

La clé d’appareil résultante est ensuite utilisée pour générer un jeton SAP à utiliser pour l’attestation. Chaque appareil d’un groupe d’inscription doit attester avec un jeton de sécurité généré à partir d’une clé dérivée unique. La clé symétrique du groupe d’inscription ne peut pas être utilisée directement pour l’attestation.

Installer la clé d’appareil dérivée

Idéalement, les clés d’appareil sont dérivées et installées en usine. Cette méthode garantit que la clé du groupe n’est jamais incluse dans aucun logiciel déployé sur l’appareil. Quand une adresse MAC ou un numéro de série est affecté à l’appareil, la clé peut être dérivée et injectée dans l’appareil, quelle que soit la façon dont le fabricant choisit de la stocker.

Considérez le diagramme suivant, qui montre un tableau de clés d’appareil générées dans une fabrique en hachant chaque ID d’inscription d’appareil avec la clé d’inscription du groupe (K).

Diagram that shows device keys being assigned at a factory.

L’identité de chaque appareil est représentée par l’ID d’inscription et par la clé d’appareil dérivée qui est installée en usine. La clé d’appareil n’est jamais copiée vers un autre emplacement et la clé du groupe n’est jamais stockée sur un appareil.

Si les clés d’appareil ne sont pas installées en usine, un module de sécurité matériel (HSM, Hardware Security Module) doit être utilisé pour stocker l’identité de l’appareil de façon sécurisée.

Étapes suivantes

Maintenant que vous avez une meilleure compréhension de l’attestation de clé symétrique, consultez les articles suivants pour en savoir plus :