As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Portabilidade da biblioteca corePKCS11
O Padrão de criptografia de chave pública #11 define uma API independente de plataforma para gerenciar e usar tokens criptográficos. O PKCS 11
As bibliotecas e integrações de referência do FreeRTOS usam um subconjunto do padrão de interface PCKS #11, com foco nas operações que envolvem chaves assimétricas, geração de números aleatórios e hashing. A tabela abaixo lista os casos de uso e as APIs de PKCS #11 necessárias para oferecer suporte.
Caso de uso | Família de API com PKCS #11 necessária |
---|---|
Tudo | Initialize, Finalize, Open/Close Session, GetSlotList, Login |
Provisionamento | GenerateKeyPair, CreateObject, DestroyObject, initToken, GetTokenInfo |
TLS | Random, Sign, FindObject, GetAttributeValue |
FreeRTOS+TCP | Random, Digest |
OTA | Verificação, resumo, FindObject, GetAttributeValue |
Quando implementar um módulo PKCS #11 completo
O armazenamento de chaves privadas na memória flash de uso geral pode ser conveniente em cenários de avaliação e de prototipagem rápida. Recomendamos o uso de hardware criptográfico dedicado para reduzir as ameaças de roubo de dados e duplicação de dispositivos em cenários de produção. O hardware criptográfico inclui componentes com recursos que impedem que as chaves secretas criptográficas sejam exportadas. Para oferecer suporte a isso, você precisará implementar um subconjunto de PKCS #11 necessário para trabalhar com bibliotecas FreeRTOS, conforme definido na tabela acima.
Quando usar a corePKCS11 do FreeRTOS
A biblioteca corePKCS11 contém uma implementação baseada em software da interface PKCS #11 (API) que usa a funcionalidade criptográfica fornecida pelo TLS Mbed
Portabilidade da corePKCS11
Será necessário ter implementações para ler e gravar objetos criptográficos na memória não volátil (NVM), como a memória flash integrada. Os objetos criptográficos precisam ser armazenados em uma seção da NVM que não tenha sido inicializada e não seja apagada na reprogramação do dispositivo. Os usuários da biblioteca corePKCS11 provisionarão dispositivos com credenciais e reprogramarão o dispositivo com um novo aplicativo que acesse essas credenciais por meio da interface corePKCS11. As portas PAL corePKCS11 devem fornecer um local para armazenar:
-
O certificado de cliente do dispositivo
-
A chave privada de cliente do dispositivo
-
A chave pública de cliente do dispositivo
-
Uma CA raiz confiável
-
Uma chave pública de verificação de código (ou um certificado que contém a chave pública de verificação de código) para atualizações seguras do carregador de inicializações e sem fios
-
Um certificado de provisionamento just-in-time
Inclua o arquivo de cabeçalho
Função | Descrição |
---|---|
PKCS11_PAL_Initialize |
Inicializa a camada PAL. Chamado pela biblioteca corePKCS11 no início da sequência de inicialização. |
PKCS11_PAL_SaveObject |
Grava dados no armazenamento não volátil. |
PKCS11_PAL_FindObject |
Usa um |
PKCS11_PAL_GetObjectValue |
Recupera o valor de um objeto, considerando o identificador. |
PKCS11_PAL_GetObjectValueCleanup |
Limpeza da chamada |
Testes
Se você usar a biblioteca corePKCS11 do FreeRTOS ou implementar o subconjunto necessário de APIs de PKCS11, deverá passar nos testes do PKCS11 do FreeRTOS. Eles testam se as funções necessárias para as bibliotecas FreeRTOS funcionam conforme o esperado.
Esta seção também descreve como você pode executar localmente os testes PKCS11 do FreeRTOS com os testes de qualificação.
Pré-requisitos
Para configurar os testes PKCS11 do FreeRTOS, deve-se implementar o seguinte.
Uma porta compatível com as APIs PKCS11.
Uma implementação das funções da plataforma de testes de qualificação do FreeRTOS, que incluem o seguinte:
FRTest_ThreadCreate
FRTest_ThreadTimedJoin
FRTest_MemoryAlloc
FRTest_MemoryFree
(Consulte o arquivo README.md
Testes de portabilidade
Adicione FreeRTOS-Libraries-Integration-Tests
como um submódulo em seu projeto. O submódulo pode ser colocado em qualquer diretório do projeto, desde que possa ser compilado. Copie
config_template/test_execution_config_template.h
econfig_template/test_param_config_template.h
para um local do projeto no caminho de compilação e renomeie-os paratest_execution_config.h
etest_param_config.h
.Inclua os arquivos relevantes no sistema de compilação. Se estiver usando
CMake
,qualification_test.cmake
esrc/pkcs11_tests.cmake
podem ser usados para incluir os arquivos relevantes.Implemente
UNITY_OUTPUT_CHAR
para que os logs de saída do teste e logs do dispositivo não se intercalem.Integre o MbedTLS, que verifica o resultado da operação cryptoki.
Chame
RunQualificationTest()
do aplicativo.
Configuração de testes
O conjunto de testes PKCS11 deve ser configurado de acordo com a implementação do PKCS11. A tabela a seguir lista a configuração exigida pelos testes PKCS11 no arquivo de cabeçalho test_param_config.h
.
Configuração | Descrição |
---|---|
PKCS11_TEST_RSA_KEY_SUPPORT |
A portabilidade oferece suporte às funções de chave do RSA. |
PKCS11_TEST_EC_KEY_SUPPORT |
A portabilidade oferece suporte às funções de chave de EC. |
PKCS11_TEST_IMPORT_PRIVATE_KEY_SUPPORT |
A portabilidade oferece suporte à importação da chave privada. A importação de chaves RSA e EC é validada no teste se o suporte às funções de chave estiver habilitado. |
PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT |
A portabilidade oferece suporte às geração de pares de chaves. A geração de pares de chaves EC é validada no teste se o suporte às funções de chave estiver habilitado. |
PKCS11_TEST_PREPROVISIONED_SUPPORT |
A portabilidade tem credenciais pré-provisionadas. |
PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS |
O rótulo da chave privada usada no teste. |
PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS |
O rótulo da chave pública usada no teste. |
PKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS |
O rótulo do certificado usado no teste. |
PKCS11_TEST_JITP_CODEVERIFY_ROOT_CERT_SUPPORTED |
A portabilidade oferece suporte ao armazenamento de JITP. Defina isso como 1 para ativar o teste |
PKCS11_TEST_LABEL_CODE_VERIFICATION_KEY |
O rótulo da chave de verificação de código usada no teste |
PKCS11_TEST_LABEL_JITP_CERTIFICATE |
O rótulo do certificado JITP usado no teste |
PKCS11_TEST_LABEL_ROOT_CERTIFICATE |
O rótulo do certificado raiz usado no teste |
As bibliotecas e integrações de referência do FreeRTOS devem oferecer suporte a no mínimo uma configuração de função de chave, como chaves de Curva elíptica ou RSA, e um mecanismo de provisionamento de teclas compatível com as APIs de PKCS11. O teste deve habilitar as seguintes configurações:
Pelo menos uma das configurações de função de chave a seguir:
PKCS11_TEST_RSA_KEY_SUPPORT
PKCS11_TEST_EC_KEY_SUPPORT
Pelo menos uma das configurações de provisionamento de chave a seguir:
PKCS11_TEST_IMPORT_PRIVATE_KEY_SUPPORT
PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT
PKCS11_TEST_PREPROVISIONED_SUPPORT
O teste de credencial do dispositivo pré-provisionado deve ser executado sob as seguintes condições:
PKCS11_TEST_PREPROVISIONED_SUPPORT
devem estar habilitados e outros mecanismos de provisionamento desativados.Ter somente uma função de chave,
PKCS11_TEST_RSA_KEY_SUPPORT
ouPKCS11_TEST_EC_KEY_SUPPORT
está ativada.Configure os rótulos de chave pré-provisionados de acordo com a função de chave, incluindo
PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS
,PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS
ePKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS
. Essas credenciais devem existir antes de executar o teste.
É aconselhável executar o teste várias vezes em configurações diferentes, se a implementação oferecer suporte a credenciais pré-provisionadas e outros mecanismos de provisionamento.
nota
Os objetos com rótulos PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS
, PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS
e PKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS
serão destruídos durante o teste se PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT
ou PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT
estiverem habilitados.
Execução de testes
Esta seção descreve como você pode testar localmente a interface de PKCS11 com os testes de qualificação. Como alternativa, você também pode usar o IDT para automatizar a execução. Consulte o AWS IoT Device Tester para o FreeRTOS no Guia do usuário do FreeRTOS para obter detalhes.
As instruções a seguir descrevem como executar os testes:
Abra
test_execution_config.h
e defina CORE_PKCS11_TEST_ENABLED como 1.Compile e atualize o aplicativo em seu dispositivo para ser executado. Os resultados do teste são enviados para a porta serial.
Confira a seguir um exemplo do resultado do teste de saída.
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
O teste será concluído quando todos os testes forem aprovados.
nota
Para qualificar oficialmente um dispositivo para o FreeRTOS, é necessário validar o código-fonte transferido do dispositivo com o AWS IoT Device Tester. Siga as instruções em Usar o AWS IoT Device Tester para FreeRTOS no Guia do usuário do FreeRTOS para configurar o AWS IoT Device Tester para validação de porta. Para testar a portabilidade de uma biblioteca específica, o grupo de testes correto deve ser habilitado no arquivo device.json
na pasta do AWS IoT Device Tester configs
.