Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Portabilidad de la biblioteca corePKCS11
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
Las bibliotecas FreeRTOS y las integraciones de referencia utilizan un subconjunto del estándar de interfaz PCKS 11 y se centran en las operaciones que implican claves asimétricas, generación de números aleatorios y hash. En la siguiente tabla se enumeran los casos de uso y las API PKCS 11 necesarias para su compatibilidad.
Caso de uso | Familia de API PKCS 11 necesaria |
---|---|
Todos | Initialize, Finalize, Open/Close Session, GetSlotList, Login |
Aprovisionar | GenerateKeyPair, CreateObject, DestroyObject, InitToken, GetTokenInfo |
TLS | Random, Sign, FindObject, GetAttributeValue |
FreeRTOS+TCP | Random, Digest |
OTA | Verify, Digest, FindObject, GetAttributeValue |
Cuándo implementar un módulo PKCS 11 completo
Almacenar claves privadas en una memoria flash de uso general puede resultar práctico en entornos de evaluación y creación rápida de prototipos. Le recomendamos que utilice hardware criptográfico dedicado para reducir las amenazas de robo de datos y duplicación de dispositivos en escenarios de producción. El hardware criptográfico incluye componentes con características que impiden la exportación de las claves criptográficas secretas. Para ello, tendrá que implementar un subconjunto de PKCS 11 necesario para trabajar con las bibliotecas de FreeRTOS, tal y como se define en la tabla anterior.
Cuándo se debe usar FreeRTOS corePKCS11
La biblioteca corePKCS11 contiene una implementación basada en software de la interfaz (API) PKCS 11 que utiliza la funcionalidad criptográfica proporcionada por Mbed TLS
Portabilidad de corePKCS11
Deberá disponer de implementaciones para leer y escribir objetos criptográficos en la memoria no volátil (NVM), como la memoria flash integrada. Los objetos criptográficos deben almacenarse en una sección de la NVM que no esté inicializada y que no se borre en caso de reprogramación del dispositivo. Los usuarios de la biblioteca corePKCS11 deben poder aprovisionar los dispositivos con credenciales para reprogramarlos con una nueva aplicación que tendrá acceso a esas credenciales a través de la interfaz PKCS11. Los puertos PAL de corePKCS11 deben proporcionar una ubicación para almacenar:
-
El certificado de cliente del dispositivo
-
La clave privada de cliente del dispositivo
-
La clave pública de cliente del dispositivo
-
Una CA raíz de confianza
-
Una clave pública de verificación de código (o un certificado que contenga la clave pública de verificación de código) para actualizaciones seguras del cargador de arranque e inalámbricas (OTA).
-
Un certificado de aprovisionamiento justo a tiempo
Incluya el archivo de encabezado
Función | Descripción |
---|---|
PKCS11_PAL_Initialize |
Inicializa la capa de PAL. La biblioteca corePKCS11 la llama al comienzo de su secuencia de inicialización. |
PKCS11_PAL_SaveObject |
Escribe datos en almacenamiento no volátil. |
PKCS11_PAL_FindObject |
Utiliza una etiqueta |
PKCS11_PAL_GetObjectValue |
Obtiene el valor de un objeto a partir del identificador. |
PKCS11_PAL_GetObjectValueCleanup |
Limpieza para la llamada |
Pruebas
Si usa la biblioteca corePKCS11 de FreeRTOS o implementa el subconjunto necesario de API de PKCS11, debe superar las pruebas de PKCS11 de FreeRTOS. Estas prueban si las funciones requeridas para las bibliotecas de FreeRTOS funcionan según lo esperado.
En esta sección también se describe cómo puede probar localmente las pruebas de PKCS11 de FreeRTOS con las pruebas de calificación.
Requisitos previos
Para configurar las pruebas de PKCS11 de FreeRTOS, se debe implementar lo siguiente.
Un puerto compatible de las API PKCS11.
Una implementación de las funciones de la plataforma de pruebas de calificación de FreeRTOS, que incluye las siguientes:
FRTest_ThreadCreate
FRTest_ThreadTimedJoin
FRTest_MemoryAlloc
FRTest_MemoryFree
(Consulte el archivo README.md
Portabilidad de pruebas
Añada FreeRTOS-Libraries-Integration-Tests
como un submódulo al proyecto. El submódulo se puede colocar en cualquier directorio del proyecto, siempre que se pueda crear. Copie
config_template/test_execution_config_template.h
yconfig_template/test_param_config_template.h
en una ubicación del proyecto en la ruta de creación y cámbieles el nombre atest_execution_config.h
ytest_param_config.h
.Incluya los archivos relevantes en el sistema creación. Si utiliza
CMake
,qualification_test.cmake
ysrc/pkcs11_tests.cmake
se pueden usar para incluir los archivos relevantes.Implemente
UNITY_OUTPUT_CHAR
de forma que los registros de salida de las pruebas y los registros del dispositivo no se intercalen.Integre el MbedTLS, que verifica el resultado de la operación cryptoki.
Llame a
RunQualificationTest()
desde la aplicación.
Configuración de las pruebas
El conjunto de pruebas PKCS11 debe configurarse de acuerdo con la implementación de PKCS11. La siguiente tabla muestra la configuración requerida para las pruebas PKCS11 en el archivo de encabezado test_param_config.h
.
Configuración | Descripción |
---|---|
PKCS11_TEST_RSA_KEY_SUPPORT |
La portabilidad admite las funciones clave de RSA. |
PKCS11_TEST_EC_KEY_SUPPORT |
La portabilidad admite las funciones clave de EC. |
PKCS11_TEST_IMPORT_PRIVATE_KEY_SUPPORT |
La portabilidad admite la importación de la clave privada. La importación de claves RSA y EC se valida en la prueba si las funciones clave auxiliares están habilitadas. |
PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT |
La portabilidad admite la generación de pares de claves. La importación de pares de claves EC se valida en la prueba si las funciones clave auxiliares están habilitadas. |
PKCS11_TEST_PREPROVISIONED_SUPPORT |
La portabilidad tiene credenciales previamente aprovisionadas. |
PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS |
La etiqueta de la clave privada utilizada en la prueba. |
PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS |
La etiqueta de la clave pública utilizada en la prueba. |
PKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS |
La etiqueta del certificado utilizado en la prueba. |
PKCS11_TEST_JITP_CODEVERIFY_ROOT_CERT_SUPPORTED |
La portabilidad admite el almacenamiento de JITP. Establézcalo en 1 para habilitar la prueba |
PKCS11_TEST_LABEL_CODE_VERIFICATION_KEY |
La etiqueta de la clave de verificación de código utilizada en la prueba |
PKCS11_TEST_LABEL_JITP_CERTIFICATE |
La etiqueta del certificado de JITP utilizado en la prueba |
PKCS11_TEST_LABEL_ROOT_CERTIFICATE |
La etiqueta del certificado raíz utilizado en la prueba |
Las bibliotecas FreeRTOS y las integraciones de referencia deben admitir como mínimo una configuración de función de clave, como las claves de curva elíptica o RSA, y un mecanismo de aprovisionamiento de clave compatible con las API PKCS11. La prueba debe habilitar las siguientes configuraciones:
Al menos una de las siguientes configuraciones de funciones de clave:
PKCS11_TEST_RSA_KEY_SUPPORT
PKCS11_TEST_EC_KEY_SUPPORT
Al menos una de las siguientes configuraciones de aprovisionamiento de clave:
PKCS11_TEST_IMPORT_PRIVATE_KEY_SUPPORT
PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT
PKCS11_TEST_PREPROVISIONED_SUPPORT
La prueba de credenciales del dispositivo aprovisionada previamente debe ejecutarse en las siguientes condiciones:
PKCS11_TEST_PREPROVISIONED_SUPPORT
debe estar activado y otros mecanismos de aprovisionamiento inhabilitados.Solo debe estar habilitada una función:
PKCS11_TEST_RSA_KEY_SUPPORT
oPKCS11_TEST_EC_KEY_SUPPORT
.Configure las etiquetas de clave previamente aprovisionadas de acuerdo con su función de clave, incluidas
PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS
,PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS
yPKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS
. Estas credenciales deben existir antes de ejecutar la prueba.
Es posible que la prueba deba ejecutarse varias veces con diferentes configuraciones, si la implementación admite credenciales previamente aprovisionadas y otros mecanismos de aprovisionamiento.
nota
Los objetos con las etiquetas PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS
, PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS
y PKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS
se destruyen durante la prueba si PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT
o PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT
está habilitada.
Ejecución de pruebas
En esta sección se describe cómo puede probar localmente la interfaz PKCS11 con las pruebas de calificación. También puede utilizar IDT para automatizar la ejecución. Consulte AWS IoT Device Tester para FreeRTOS en la Guía del usuario de FreeRTOS para obtener más información.
Las siguientes instrucciones describen cómo ejecutar las pruebas:
Abra
test_execution_config.h
y defina CORE_PKCS11_TEST_ENABLED en 1.Cree e instale la aplicación en su dispositivo para ejecutarla. El resultado de la prueba se envía al puerto serie.
A continuación se muestra un ejemplo del resultado de la prueba de salida.
TEST(Full_PKCS11_StartFinish, PKCS11_StartFinish_FirstTest) PASS TEST(Full_PKCS11_StartFinish, PKCS11_GetFunctionList) PASS TEST(Full_PKCS11_StartFinish, PKCS11_InitializeFinalize) PASS TEST(Full_PKCS11_StartFinish, PKCS11_GetSlotList) PASS TEST(Full_PKCS11_StartFinish, PKCS11_OpenSessionCloseSession) PASS TEST(Full_PKCS11_Capabilities, PKCS11_Capabilities) PASS TEST(Full_PKCS11_NoObject, PKCS11_Digest) PASS TEST(Full_PKCS11_NoObject, PKCS11_Digest_ErrorConditions) PASS TEST(Full_PKCS11_NoObject, PKCS11_GenerateRandom) PASS TEST(Full_PKCS11_NoObject, PKCS11_GenerateRandomMultiThread) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_CreateObject) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_FindObject) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_GetAttributeValue) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_Sign) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_FindObjectMultiThread) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_GetAttributeValueMultiThread) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_DestroyObject) PASS TEST(Full_PKCS11_EC, PKCS11_EC_GenerateKeyPair) PASS TEST(Full_PKCS11_EC, PKCS11_EC_CreateObject) PASS TEST(Full_PKCS11_EC, PKCS11_EC_FindObject) PASS TEST(Full_PKCS11_EC, PKCS11_EC_GetAttributeValue) PASS TEST(Full_PKCS11_EC, PKCS11_EC_Sign) PASS TEST(Full_PKCS11_EC, PKCS11_EC_Verify) PASS TEST(Full_PKCS11_EC, PKCS11_EC_FindObjectMultiThread) PASS TEST(Full_PKCS11_EC, PKCS11_EC_GetAttributeValueMultiThread) PASS TEST(Full_PKCS11_EC, PKCS11_EC_SignVerifyMultiThread) PASS TEST(Full_PKCS11_EC, PKCS11_EC_DestroyObject) PASS ----------------------- 27 Tests 0 Failures 0 Ignored OK
Las pruebas se completan cuando se superan todas.
nota
Para calificar oficialmente un dispositivo para FreeRTOS, debe validar el código fuente transferido del dispositivo con AWS IoT Device Tester. Siga las instrucciones de Uso de AWS IoT Device Tester para FreeRTOS en la Guía del usuario de FreeRTOS para configurar AWS IoT Device Tester para la validación de la portabilidad. Para probar la portabilidad de una biblioteca concreta, se debe habilitar el grupo de pruebas correcto en el archivo device.json
de la carpeta configs
de AWS IoT Device Tester.