Biblioteca corePKCS11
nota
Es posible que el contenido de esta página no esté actualizado. Consulte la página de la biblioteca de FreeRTOS.org
Descripción general
El estándar de criptografía de clave pública 11 define una API independiente de la plataforma para administrar y usar tokens criptográficos. PKCS 11
La biblioteca corePKCS11 contiene una implementación simulada basada en software de la interfaz (API) PKCS 11 que utiliza la funcionalidad criptográfica proporcionada por Mbed TLS. El uso de una simulación de software permite un rápido desarrollo y flexibilidad, pero se espera que sustituya la simulación por una implementación específica para el almacenamiento seguro de claves que se utiliza en sus dispositivos de producción. Por lo general, los proveedores de criptoprocesadores seguros, como Trusted Platform Module (TPM), Hardware Security Module (HSM), Secure Element o cualquier otro tipo de enclave de hardware seguro, distribuyen una implementación del PKCS 11 junto con el hardware. Por lo tanto, el propósito de la biblioteca simulada solo de software corePKCS11 es proporcionar una implementación PKCS 11 no específica del hardware que permita la creación y el desarrollo rápidos de prototipos antes de cambiar a una implementación de PKCS 11 específica del criptoprocesador en los dispositivos de producción.
Solo se implementa un subconjunto del estándar PKCS 11, que se centra en las operaciones que implican claves asimétricas, la generación de números aleatorios y el hash. Los casos de uso específicos incluyen la administración de certificados y claves para la autenticación TLS y la verificación de firmas con firma de código en dispositivos integrados pequeños. Consulte el archivo pkcs11.h (obtenido de OASIS, el organismo de estándares) en el repositorio de código fuente de FreeRTOS. En la implementación de referencia de FreeRTOS, la interfaz de auxiliar de TLS realiza llamadas a la API PKCS 11 para realizar la autenticación de cliente de TLS durante SOCKETS_Connect. El flujo de trabajo de aprovisionamiento del desarrollador único también realiza llamadas a la API PKCS 11 para importar una clave privada y un certificado de cliente de TLS para la autenticación al agente MQTT de AWS IoT. Estas dos casos de uso, aprovisionamiento y autenticación de cliente de TLS, requieren la implementación de solo un pequeño subconjunto de estándares de la interfaz PKCS 11.
Características
Se utiliza el siguiente subconjunto de PKCS 11. Esta lista se encuentra aproximadamente en el orden en que se llama a las rutinas para soportar el aprovisionamiento, la autenticación de cliente de TLS y la limpieza. Para obtener descripciones detalladas de las funciones, consulte la documentación de PKCS 11 proporcionada por el comité de estándares.
API de eliminación y configuración general
-
C_Initialize -
C_Finalize -
C_GetFunctionList -
C_GetSlotList -
C_GetTokenInfo -
C_OpenSession -
C_CloseSession -
C_Login
API de aprovisionamiento
-
C_CreateObject CKO_PRIVATE_KEY(para clave privada de dispositivo) -
C_CreateObject CKO_CERTIFICATE(para certificado de dispositivo y certificado de verificación de código) -
C_GenerateKeyPair -
C_DestroyObject
Autenticación del cliente
-
C_GetAttributeValue -
C_FindObjectsInit -
C_FindObjects -
C_FindObjectsFinal -
C_GenerateRandom -
C_SignInit -
C_Sign -
C_VerifyInit -
C_Verify -
C_DigestInit -
C_DigestUpdate -
C_DigestFinal
Soporte de criptosistema asimétrico
La implementación de referencia de FreeRTOS utiliza RSA de 2048 bits de PKCS 11 (solo firma) y ECDSA con la curva NIST P-256. Las siguientes instrucciones se describe cómo crear un AWS IoT objeto en función de un P-256 certificado de cliente.
Asegúrese de que está utilizando las siguientes (o más reciente) versiones del AWS CLI y 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
En el siguiente procedimiento se supone que ha utilizado el comando aws configure para configurar la AWS CLI. Para obtener más información, consulte Configuración rápida con aws configure en la Guía del usuario de AWS Command Line Interface.
Creación de un objeto de AWS IoT basado en certificado de cliente P-256
-
Cree un objeto de AWS IoT.
aws iot create-thing --thing-namething-name -
Utilice OpenSSL para crear una clave P-256.
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -outthing-name.key -
Cree una solicitud de inscripción de certificado firmada con la clave que creó en el paso 2.
openssl req -new -nodes -days 365 -keything-name.key -outthing-name.req -
Envíe la solicitud de inscripción del certificado a AWS IoT.
aws iot create-certificate-from-csr \ --certificate-signing-request file://thing-name.req --set-as-active \ --certificate-pem-outfilething-name.crt -
Asocie el certificado (al que la salida de ARN hace referencia en el comando anterior) al objeto.
aws iot attach-thing-principal --thing-namething-name\ --principal "arn:aws:iot:us-east-1:123456789012:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729" -
Cree una política. (Esta política es demasiado permisiva. Debe usarse únicamente con fines de desarrollo).
aws iot create-policy --policy-name FullControl --policy-document file://policy.jsonA continuación se muestra una lista del archivo policy.json especificado en el comando
create-policy. Puede omitir la accióngreengrass:*si no desea ejecutar la demostración de FreeRTOS para la detección y conectividad Greengrass. -
Asocie la entidad de seguridad (certificado) y la política al objeto.
aws iot attach-principal-policy --policy-name FullControl \ --principal "arn:aws:iot:us-east-1:123456789012:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729"
Ahora, siga los pasos que se indican en la sección Introducción a AWS IoT de esta guía. No olvide copiar el certificado y la clave privada que creó en su archivo aws_clientcredential_keys.h. Copie el nombre del objeto a aws_clientcredential.h.
nota
El certificado y la clave privada se incluyen en el código solo para fines de demostración. Las aplicaciones de producción deben almacenar estos archivos en un lugar seguro.
Portabilidad
Para obtener información acerca de la portabilidad de la biblioteca corePKCS11 a su plataforma, consulte Portabilidad de la biblioteca corePKCS11 en la Guía de portabilidad de FreeRTOS.
Uso de memoria
| Tamaño de código de corePKCS11 (ejemplo generado con GCC para ARM Cortex-M) | ||
|---|---|---|
| Archivos | Con optimización -O1 | Con optimización -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 K | 7,5 K |
| Estimaciones totales | 10.2K | 8.6K |