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
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
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
-
Créez un objet AWS IoT.
aws iot create-thing --thing-name
thing-name
-
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 -
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 -outthing-name
.req -
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-outfilething-name
.crt -
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
" -
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 cettegreengrass:*
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": "*" } ] }
-
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 |