Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Portare la libreria CorePKCS11
Il Public Key Cryptography Standard #11 definisce un'API indipendente dalla piattaforma per gestire e utilizzare i token crittografici. IMMAGINI 11
Le librerie FreerTOS e le integrazioni di riferimento utilizzano un sottoinsieme dello standard di interfaccia PCKS #11, con particolare attenzione alle operazioni che coinvolgono chiavi asimmetriche, generazione di numeri casuali e hashing. La tabella seguente elenca i casi d'uso e le API PKCS #11 richieste da supportare.
Casi d'uso | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Caso d'uso | Famiglia di API PKCS #11 richiesta | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Tutti | Inizializza, finalizza, apri/chiudi sessione, GetSlotList, Accedi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Approvvigionamento | GenerateKeyPair, CreateObject, DestroyObject, InitToken, GetTokenInfo | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TLS | Casuale, Sign, FindObject, GetAttributeValue | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FreeRTOS+TCP | Casuale, Digest | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
OTA | Verify, Digest, FindObject, GetAttributeValue |
Quando implementare un modulo PKCS #11 completo
L'archiviazione di chiavi private nella memoria flash per scopi generici può essere utile nella valutazione e creazione rapida di prototipi di scenari. Si consiglia di utilizzare hardware crittografico dedicato per ridurre le minacce di furto di dati e duplicazione dei dispositivi negli scenari di produzione. L'hardware di crittografia include componenti con caratteristiche che impediscono l'esportazione di chiavi segrete di crittografia. Per supportare ciò, dovrai implementare un sottoinsieme di PKCS #11 necessario per lavorare con le librerie FreerTOS come definito nella tabella precedente.
nonché una descrizione di FreerTOS
La libreria CorePKCS11 contiene un'implementazione basata su software dell'interfaccia (API) PKCS #11 che utilizza la funzionalità crittografica fornita daIncorpora TLS
Portare CorePKCS11
Dovrai disporre di implementazioni per leggere e scrivere oggetti crittografici nella memoria non volatile (NVM), come la memoria flash integrata. Gli oggetti crittografici devono essere archiviati in una sezione di NVM che non è inizializzata e non viene cancellata durante la riprogrammazione del dispositivo. Gli utenti della libreria CorePKCS11 forniranno ai dispositivi le credenziali e quindi riprogrammeranno il dispositivo con una nuova applicazione che accede a tali credenziali tramite l'interfaccia CorePKCS11. Le porte PAL CorePKCS11 devono fornire una posizione in cui archiviare:
-
nonché un certificato client del dispositivo
-
La chiave privata del client del dispositivo
-
La chiave pubblica del client del dispositivo
-
Una CA root affidabile
-
Una chiave pubblica per la verifica del codice (o un certificato che contiene la chiave pubblica per la verifica del codice) per un bootloader sicuro e over-the-air aggiornamenti (OTA)
-
Un certificato di approvvigionamento Just-In-Time
Includiil file di intestazione
API PAL | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Funzione | Descrizione | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_PAL_Initialize |
Inizializza il livello PAL. Chiamato dalla libreria CorePKCS11 all'inizio della sequenza di inizializzazione. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_PAL_SaveObject |
Scrive i dati in storage non volatile. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_PAL_FindObject |
Utilizza |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_PAL_GetObjectValue |
Recupera il valore di un oggetto, specificato l'handle. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_PAL_GetObjectValueCleanup |
Pulizia per la chiamata |
Test
Se utilizzi la libreria FreerTOS CorePKCS11 o implementi il sottoinsieme richiesto di API PKCS11, devi superare i test FreerTOS PKCS11. Questi verificano se le funzioni richieste per le librerie FreerTOS funzionano come previsto.
nonché una descrizione di come eseguire localmente i test FreerTOS nonché una descrizione di come testare le qualifiche.
Prerequisiti
Per configurare i test FreerTOS PKCS11, è necessario implementare quanto segue.
Una porta supportata di API PKCS11.
Un'implementazione delle funzioni della piattaforma per i test di qualificazione FreerTOS che includono quanto segue:
FRTest_ThreadCreate
FRTest_ThreadTimedJoin
FRTest_MemoryAlloc
FRTest_MemoryFree
(nonché una descrizione diREADME.md
Test di portabilità
InserisciTest di integrazione delle librerie ERTOS gratuiti
come sottomodulo del tuo progetto. Il sottomodulo può essere inserito in qualsiasi directory del progetto, purché possa essere creato. Copia
config_template/test_execution_config_template.h
econfig_template/test_param_config_template.h
in una posizione del progetto nel percorso di creazione e rinominali intest_execution_config.h
etest_param_config.h
.Includi i file pertinenti nel sistema di compilazione. Se si utilizza
CMake
,qualification_test.cmake
esrc/pkcs11_tests.cmake
può essere usato per includere file pertinenti.IMPLEMENTARE
UNITY_OUTPUT_CHAR
in modo che i registri degli output dei test e i registri dei dispositivi non si interlacciano.Integra MbedTLS, che verifica il risultato dell'operazione cryptoki.
Chiama
RunQualificationTest()
dall'applicazione.
Configurazione dei test
La suite di test PKCS11 deve essere configurata in base all'implementazione PKCS11. nonché una descrizione di come eseguire i test PKCS11 nellatest_param_config.h
file di intestazione.
Configurazioni di test PKSC11 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Configurazione | Descrizione | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_TEST_RSA_KEY_SUPPORT |
Il porting supporta le funzioni chiave RSA. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_TEST_EC_KEY_SUPPORT |
Il porting supporta le funzioni chiave EC. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_TEST_IMPORT_PRIVATE_KEY_SUPPORT |
Il porting supporta l'importazione della chiave privata. L'importazione di chiavi RSA ed EC viene convalidata nel test se le funzioni chiave di supporto sono abilitate. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT |
Il porting supporta la generazione di coppie di chiavi. La generazione di coppie di chiavi EC viene convalidata nel test se le funzioni chiave di supporto sono abilitate. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_TEST_PREPROVISIONED_SUPPORT |
Il porting ha credenziali preimpostate. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS |
L'etichetta della chiave privata utilizzata nel test. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS |
L'etichetta della chiave pubblica utilizzata nel test. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS |
L'etichetta del certificato utilizzato nel test. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_TEST_JITP_CODEVERIFY_ROOT_CERT_SUPPORTED |
Il porting supporta l'archiviazione per JITP. nonché una descrizione di come abilitare il JITP |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_TEST_LABEL_CODE_VERIFICATION_KEY |
L'etichetta della chiave di verifica del codice utilizzata in JITP |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_TEST_LABEL_JITP_CERTIFICATE |
L'etichetta del certificato JITP utilizzato in JITP |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PKCS11_TEST_LABEL_ROOT_CERTIFICATE |
L'etichetta del certificato principale utilizzato in JITP |
Le librerie FreerTOS e le integrazioni di riferimento devono supportare almeno una configurazione di funzioni chiave come le chiavi RSA o Elliptic curve e un meccanismo di provisioning chiave supportato dalle API PKCS11. Il test deve abilitare le seguenti configurazioni:
nonché una delle seguenti configurazioni di funzioni chiave:
PKCS11_TEST_RSA_KEY_SUPPORT
PKCS11_TEST_EC_KEY_SUPPORT
nonché una delle seguenti configurazioni di provisioning chiave:
PKCS11_TEST_IMPORT_PRIVATE_KEY_SUPPORT
PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT
PKCS11_TEST_PREPROVISIONED_SUPPORT
Il test delle credenziali del dispositivo preimpostato deve essere eseguito nelle seguenti condizioni:
PKCS11_TEST_PREPROVISIONED_SUPPORT
deve essere abilitato e gli altri meccanismi di provisioning devono essere disabilitati.Inoltre, solo una funzione chiave
PKCS11_TEST_RSA_KEY_SUPPORT
oPKCS11_TEST_EC_KEY_SUPPORT
, è abilitato.Imposta le etichette dei tasti preimpostate in base alla tua funzione chiave, tra cui
PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS
,PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS
ePKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS
. Queste credenziali devono esistere prima di eseguire il test.
Potrebbe essere necessario eseguire il test più volte con configurazioni diverse, se l'implementazione supporta credenziali preimpostate e altri meccanismi di provisioning.
Nota
Gli oggetti con etichettePKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS
,PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS
ePKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS
vengono distrutti durante il test se:PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT
oPKCS11_TEST_GENERATE_KEYPAIR_SUPPORT
è abilitato.
Esecuzione di test.
Questa sezione descrive come testare localmente l'interfaccia PKCS11 con i test di qualificazione. nonché una descrizione di come automatizzare l'esecuzione. VediAWS IoT Device Testerper FreerTOSnelnonché una guida per l'utente di FreerTOSper i dettagli.
nonché una descrizione di come eseguire i test:
Aprire
test_execution_config.h
e definisciCORE_PKCS11_TEST_ENABLEDa 1.Crea e installa l'applicazione sul tuo dispositivo per eseguirla. I risultati del test vengono inviati alla porta seriale.
nonché un esempio del risultato del test di uscita.
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
Il test è completato quando tutti i test vengono superati.
Nota
Per qualificare ufficialmente un dispositivo per FreerTOS, devi convalidare il codice sorgente del dispositivo portato conAWS IoT Device Tester. nonché una descrizione di comeUsandoAWS IoT Device Testerper FreerTOSnella Guida per l'utente di FreerTOS per la configurazioneAWS IoT Device Testerper la convalida delle porte. Per testare la porta di una libreria specifica, è necessario abilitare il gruppo di test corretto neldevice.json
file inAWS IoT Device Tester configs
cartella.