Sécurité des appareils

La sécurité est une préoccupation majeure lors du déploiement et de la gestion des appareils IoT. Cloud IoT Core propose les fonctionnalités de sécurité suivantes:

  • Authentification de clé publique/privée par appareil à l'aide de jetons Web JSON (JWT, RFC 7519).
    • Cela limite la surface d'exposition d'une attaque, car une clé compromise n'affecte qu'un seul appareil, et non l'ensemble du parc.
    • Les JWT sont valides pendant une durée limitée, et les clés dont la sécurité est compromise expirent.
  • Compatibilité avec les algorithmes RSA ou Elliptic Curve pour la validation des signatures, avec application forcée de tailles de clés solides
  • Assistance pour la rotation des clés par appareil en autorisant l'enregistrement des clés simultanées et la prise en charge du délai d'expiration par identifiant.
  • Une connexion TLS 1.2 utilisant des autorités de certification racine (obligatoire pour MQTT).
  • L'accès à l'API Cloud IoT Core est contrôlé par des rôles et des autorisations IAM (Identity and Access Management).

Identifiants de provisionnement

Le schéma suivant résume le processus de provisionnement des identifiants de l'appareil. L'utilisateur provisionné, qui est souvent l'utilisateur qui configure l'appareil, est supposé avoir créé un projet et un registre, et qui est autorisé à créer des appareils. L'approvisionneur utilise l'API Cloud IoT Core, les commandes gcloud ou la console Cloud Platform pour créer un appareil logique dans le cloud.

Flux de gestion des comptes

  1. La paire de clés publique-privée est générée par l'approvisionneur.
  2. L'approvisionneur crée l'appareil à l'aide de l'API Cloud IoT Core, des commandes gcloud ou de la console Cloud Platform, en spécifiant la clé publique que vous venez de créer. Elle sera utilisée pour confirmer l'identité de l'appareil.
  3. Le gestionnaire d'appareils Cloud IoT Core stocke les ressources appareil et la clé publique.
  4. Le gestionnaire d'appareils répond à l'approvisionneur en indiquant que l'appareil a été créé.
  5. La clé privée est stockée sur l'appareil pour être utilisée ultérieurement pour l'authentification. Le module Trusted Platform Module (TPM) peut être utilisé pour cette étape.

Notez que l'ordre des étapes présentées ici n'est pas prescriptif. Par exemple, la clé peut être stockée sur l'appareil avant son enregistrement dans Cloud IoT Core.

Pour plus d'informations sur la création de clés, consultez Créer des paires de clés.

Authentification

Le schéma suivant récapitule l'authentification dans Cloud IoT Core à l'aide de MQTT :

Flux d'authentification

  1. L'appareil prépare un jeton Web JSON (JWT, JSON Web Token) comme décrit dans Utiliser des jetons Web JSON. Le jeton JWT est signé avec la clé privée du flux d'authentification.
  2. Lors de la connexion au pont MQTT, l'appareil présente le JWT comme mot de passe dans le message CONNECT MQTT. Le contenu du nom d'utilisateur est ignoré. Toutefois, certaines bibliothèques clientes MQTT n'envoient pas le mot de passe, sauf si celui-ci est spécifié. Pour des résultats optimaux, définissez le nom d'utilisateur sur une valeur arbitraire, telle que unused ou ignored.
  3. Le pont MQTT vérifie le JWT par rapport à la clé publique de l'appareil.
  4. Le pont MQTT accepte la connexion.
  5. La connexion est fermée à l'expiration du jeton JWT (après prise en compte de la dérive de l'horloge autorisée).

Normes de sécurité

Cloud IoT Core utilise l'authentification basée sur la signature numérique pour les jetons signés RSA et Elliptic Curve. Les algorithmes spécifiques suivants sont acceptés:

  • JWT RS256 (RSASSA-PKCS1-v1_5 using SHA-256 RFC 7518 sec 3.3)
  • JWT ES256 (ECDSA avec P-256 et SHA-256 RFC 7518 sec 3.4), défini dans OpenSSL en tant que courbe prime256v1

L'algorithme RSA est couramment utilisé et fréquemment utilisé dans les bibliothèques clientes. Toutefois, les clés et signatures générées peuvent être assez volumineuses (généralement de un à deux kilo-octets). En outre, les ARR peuvent utiliser une grande quantité de ressources (tant en termes de longueur de clé que de processeur) qui peuvent affecter les appareils disposant de ressources limitées.

L'algorithme de courbe elliptique est bien compatible, mais il n'est pas aussi utilisé que les ARR. Pour utiliser la courbe elliptique, vous devrez peut-être installer des dépendances supplémentaires dans votre bibliothèque cliente. Toutefois, les clés et les signatures générées sont nettement plus petites que celles générées par les ARR, ce qui peut être utile pour les appareils disposant de ressources limitées.

Intensité de la clé

Au moins 112 bits de sécurité sont requis par Cloud IoT Core, conformément aux recommandations NIST (section 5.6.2, pages 55-56). La taille minimale est de 2 048 bits pour RS256 (voir le tableau 2 dans les recommandations du NIST, page 53).

Le niveau de sécurité de l'ES256 est de 128 bits (la taille de la clé est fixe).

Format de la clé publique

Lors de l'enregistrement de la clé publique d'un appareil, celle-ci doit être dans l'un des formats suivants :

Format Description
RSA_PEM Clé publique RSA encodée en base64. Peut être utilisé pour vérifier les signatures RS256 dans les jetons JWT (RFC 7518).
RSA_X509_PEM Clé RSA_PEM, encodée en base64 et encapsulée dans un certificat X.509v3 (RFC 5280). Le certificat peut être autosigné. Sinon, Cloud IoT Core peut comparer la signature du certificat d'appareil aux certificats au niveau du registre pour vérifier l'origine du certificat.
ES256_PEM Clé publique de l'algorithme ECDSA (utilisant P-256 et SHA-256), encodée en base64. Peut être utilisé pour vérifier les jetons JWT à l'aide de l'algorithme ES256 (RFC 7518). Cette clé publique n'est pas encapsulée dans un certificat. Elle permet de réduire la taille de la clé, ce qui constitue l'un des principaux avantages de la solution ES256&#99.
ES256_X509_PEM Clé ES256_PEM, encodée en base64 et encapsulée dans un certificat X.509v3 (RFC 5280). Le certificat peut être autosigné. Sinon, Cloud IoT Core peut comparer la signature du certificat d'appareil aux certificats au niveau du registre pour vérifier l'origine du certificat.

Pour savoir comment créer des clés, consultez la section Créer des paires de clés publiques/privées.

Rotation des clés

Cloud IoT Core accepte plusieurs clés actives (jusqu'à trois par appareil) pour une rotation sans interruption. Le service essaie de vérifier les JWT avec chacune des clés actives et accepte une connexion si une clé active correspond.

L'API vous permet de définir un expirationTime pour chaque identifiant d'appareil (clé publique). Passé ce délai, la clé sera ignorée, mais elle ne sera pas supprimée automatiquement. Une remise de 10 minutes pour les horloges s'applique. Si aucune date d'expiration n'est spécifiée pour une clé, elle n'expire jamais.

Recommandations de sécurité des appareils

Les recommandations de sécurité suivantes ne sont pas appliquées par Cloud IoT Core, mais vous aideront à sécuriser vos appareils et vos connexions.

  • Conservez la clé privée secrète.
  • Utilisez TLS 1.2 pour communiquer avec mqtt.googleapis.com ou mqtt.2030.ltsapis.goog sur les ports 8883 et 443. Pour maintenir les connexions TLS :
    • Vérifiez que le certificat de serveur est valide à l'aide d'un certificat CA racine Google.
    • Effectuez régulièrement des mises à jour du micrologiciel liée à la sécurité pour maintenir les certificats de serveur à jour.
    • Consultez cette note de sécurité pour connaître les exigences TLS détaillées et les futures compatibilités.
  • Chaque appareil doit posséder une paire de clés publique/privée unique. Si plusieurs appareils partagent une seule clé et que l'un d'entre eux est piraté, un pirate informatique peut usurper l'identité de tous les appareils configurés avec cette clé.
  • Protégez la clé publique lors de son enregistrement auprès de Cloud IoT Core. Si un pirate informatique peut manipuler la clé publique et tromper l'approvisionneur pour qu'il change de clé publique et enregistre la mauvaise clé publique, il pourra ensuite s'authentifier au nom de l'appareil.
  • La paire de clés utilisée pour authentifier l'appareil auprès de Cloud IoT Core ne doit pas être utilisée à d'autres fins ou pour d'autres protocoles.
  • Selon la capacité de l'appareil à stocker les clés de manière sécurisée, les paires de clés doivent être alternées régulièrement. Dans la pratique, toutes les clés doivent être supprimées lorsque l'appareil est réinitialisé.
  • Si votre appareil est équipé d'un système d'exploitation, assurez-vous de pouvoir le mettre à jour de manière sécurisée. Pour les appareils dépourvus de système d'exploitation, veillez à mettre à jour de façon sécurisée le logiciel de l'appareil si des failles de sécurité sont détectées après le déploiement.
  • Assurez-vous de pouvoir mettre à jour les certificats racines. Pour plus d'informations, consultez le site de l'autorité Internet de Google.
  • Assurez-vous que l'horloge de l'appareil n'a pas été modifiée. Si l'horloge de l'appareil est compromise, un puissant pirate peut l'inciter à émettre des jetons qui seront valides ultérieurement, en contournant le délai d'expiration du jeton. Pour un résultat optimal, utilisez le serveur public NTP de Google.