Bibliothèque du lecteur CorePKCS11 - FreeRTOS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Bibliothèque du lecteur CorePKCS11

Note

Le contenu de cette page peut ne pas l'êtreup-to-date. Veuillez consulter la page de la bibliothèque FreeRTOS.org pour la dernière mise à jour.

Présentation

La norme de cryptographie à clé publique #11 définit une API indépendante de la plate-forme pour gérer et utiliser des jetons cryptographiques. PKCS #11 fait référence à l'API définie par la norme et à la norme elle-même. L'API cryptographique PKCS #11 fait abstraction du stockage des clés, des propriétés d'obtention/de définition des objets cryptographiques et de la sémantique des sessions. Il est largement utilisé pour manipuler des objets cryptographiques courants, et il est important car les fonctions qu'il spécifie permettent aux logiciels d'application d'utiliser, de créer, de modifier et de supprimer des objets cryptographiques, sans jamais exposer ces objets à la mémoire de l'application. Par exemple, les intégrations de AWS référence FreeRTOS utilisent un petit sous-ensemble de l'API PKCS #11 pour accéder à la clé secrète (privée) nécessaire à la création d'une connexion réseau authentifiée et sécurisée par le protocole TLS (Transport Layer Security) sans que l'application ne « voie » la clé.

La bibliothèque CorePKCS11 contient une implémentation fictive logicielle de l'interface (API) PKCS #11 qui utilise la fonctionnalité cryptographique fournie par Mbed TLS. L'utilisation d'une maquette logicielle permet un développement rapide et flexible, mais il est prévu que vous remplaciez la maquette par une implémentation spécifique au stockage sécurisé des clés utilisé dans vos appareils de production. En général, les fournisseurs de cryptoprocesseurs sécurisés, tels que le Trusted Platform Module (TPM), le Hardware Security Module (HSM), Secure Element ou tout autre type d'enclave matérielle sécurisée, distribuent une implémentation PKCS #11 avec le matériel. L'objectif de la bibliothèque fictive réservée au logiciel CorePKCS11 est donc de fournir une implémentation PKCS #11 non spécifique au matériel qui permet un prototypage et un développement rapides avant de passer à une implémentation PKCS #11 spécifique au cryptoprocesseur dans les appareils de production.

Seul un sous-ensemble de la norme PKCS #11 est implémenté, en mettant l'accent sur les opérations impliquant des clés asymétriques, la génération de nombres aléatoires et le hachage. Les cas d'utilisation ciblés incluent la gestion des certificats et des clés pour l'authentification TLS, ainsi que la vérification des signatures par code, sur de petits appareils intégrés. Consultez le fichier pkcs11.h (obtenu à partir d'OASIS, le corps standard) dans le référentiel de code source de FreeRTOS. Dans l'implémentation de référence de FreeRTOS, les appels à l'API PKCS #11 sont effectués par l'interface d'assistance TLS afin d'effectuer l'authentification du client TLS pendant. SOCKETS_Connect Les appels d'API PKCS #11 sont également effectués par notre flux de travail de provisionnement unique pour les développeurs afin d'importer un certificat client TLS et une clé privée pour l'authentification auprès du AWS IoT courtier MQTT. Ces deux cas d'utilisation, le provisionnement et l'authentification du client TLS, ne nécessitent la mise en œuvre que d'un petit sous-ensemble de la norme d'interface PKCS #11.

Fonctions

Le sous-ensemble suivant de PKCS #11 est utilisé. Cette liste est à peu près dans l'ordre où les routines sont appelées lors de la prise en charge de la mise en service, de l'authentification du client TLS et du nettoyage. Pour une description détaillée des fonctions, consultez la documentation PKCS #11 fournie par le comité de normalisation.

Configuration générale et API de destruction

  • C_Initialize

  • C_Finalize

  • C_GetFunctionList

  • C_GetSlotList

  • C_GetTokenInfo

  • C_OpenSession

  • C_CloseSession

  • C_Login

API d’allocation

  • C_CreateObject CKO_PRIVATE_KEY (pour la clé privée de l'appareil)

  • C_CreateObject CKO_CERTIFICATE (pour le certificat d'appareil et le certificat de vérification de code)

  • C_GenerateKeyPair

  • C_DestroyObject

Authentification client

  • C_GetAttributeValue

  • C_FindObjectsInit

  • C_FindObjects

  • C_FindObjectsFinal

  • C_GenerateRandom

  • C_SignInit

  • C_Sign

  • C_VerifyInit

  • C_Verify

  • C_DigestInit

  • C_DigestUpdate

  • C_DigestFinal

Support cryptosystème asymétrique

L'implémentation de référence de FreeRTOS utilise PKCS #11, le RSA 2048 bits (signature uniquement) et l'ECDSA avec la courbe NIST P-256. Les instructions suivantes décrivent comment créer un objet AWS IoT basé sur un certificat client P-256.

Vérifiez que vous utilisez les versions suivantes (ou les plus récentes) de l'AWS CLI et d'OpenSSL :

aws --version aws-cli/1.11.176 Python/2.7.9 Windows/8 botocore/1.7.34 openssl version OpenSSL 1.0.2g 1 Mar 2016

La procédure suivante part du principe que vous avez utilisé la aws configure commande pour configurer leAWS CLI. Pour plus d'informations, consultez la section Configuration rapide aws configure dans le Guide de AWS Command Line Interface l'utilisateur.

Pour créer un AWS IoT objet basé sur un certificat client P-256
  1. Créez un objet AWS IoT.

    aws iot create-thing --thing-name thing-name
  2. Utilisez OpenSSL afin de créer une clé P-256.

    openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out thing-name.key
  3. Créez une demande d'inscription de certificat signée par la clé créée à l'étape 2.

    openssl req -new -nodes -days 365 -key thing-name.key -out thing-name.req
  4. Envoyez la demande d'inscription de certificat à AWS IoT.

    aws iot create-certificate-from-csr \ --certificate-signing-request file://thing-name.req --set-as-active \ --certificate-pem-outfile thing-name.crt
  5. Attachez le certificat (référencé par la sortie de l'ARN de la commande précédente) à l'objet.

    aws iot attach-thing-principal --thing-name thing-name \ --principal "arn:aws:iot:us-east-1:123456789012:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729"
  6. Créez une stratégie. (Cette politique est trop permissive. Il ne doit être utilisé qu'à des fins de développement.)

    aws iot create-policy --policy-name FullControl --policy-document file://policy.json

    Voici le fichier policy.json spécifié dans la commande create-policy. Vous pouvez omettre cette greengrass:* action si vous ne souhaitez pas lancer la démo de FreeRTOS pour la connectivité et la découverte de Greengrass.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*" }, { "Effect": "Allow", "Action": "greengrass:*", "Resource": "*" } ] }
  7. Attachez le mandataire (certificat) et la stratégie à l'objet.

    aws iot attach-principal-policy --policy-name FullControl \ --principal "arn:aws:iot:us-east-1:123456789012:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729"

Maintenant, suivez les étapes de la section Mise en route d'AWS IoT de ce guide. N'oubliez pas de copier le certificat et la clé privée que vous avez créés dans votre fichier aws_clientcredential_keys.h. Copiez votre nom d'objet dans aws_clientcredential.h.

Note

Le certificat et la clé privée sont codés en dur à des fins de démonstration uniquement. Les applications de niveau production doivent stocker ces fichiers dans un emplacement sécurisé.

Portage

Pour plus d'informations sur le portage de la bibliothèque CorePKCS11 vers votre plateforme, consultez la section Portage de la bibliothèque CorePKCS11 dans le Guide de portage FreeRTOS.

Utilisation de la mémoire

Taille du code CorePKCS11 (exemple généré avec GCC pour ARM Cortex-M)
Fichier Avec optimisation -O1 Avec optimisation -Os
core_pkcs11.c 0,8 K 0,8 K
core_pki_utils.c 0,5 K 0,3 K
core_pkcs11_mbedtls.c 8,9 KM 7,5 KM
Estimations totales 10,2 K 8,6 K