本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
移植圖書館
公開金鑰加密標準 #11 定義了一個獨立於平台的 API 來管理和使用密碼編譯權杖。包裝套件 11
FreeRTOS 程式庫和參考整合使用 PCKS #11 介面標準的子集,重點放在涉及非對稱金鑰、隨機數產生和雜湊的作業上。下表列出了要支援的使用案例和必要的 PKCS #11 API。
使用案例 | 必要的 PKCS #11 應用程式介面系列 |
---|---|
全部 | 初始化、完成、開啟/關閉工作階段、 GetSlotList, 登入 |
佈建 | GenerateKeyPair, CreateObject, DestroyObject, InitToken, GetTokenInfo |
TLS | 隨機、簽署、 FindObject, GetAttributeValue |
FreeRTOS+TCP | 隨機、摘要 |
OTA | 驗證、摘要、 FindObject, GetAttributeValue |
何時實作完整 PKCS #11 模組
在評估和快速原型設計案例中,將私有金鑰存放在一般用途快閃記憶體中可能很方便。我們建議您使用專用的加密硬體,以減少在生產環境中遭到資料竊取和裝置複製的威脅。密碼編譯硬體包含的元件有功能可防止匯出密碼編譯私密金鑰。若要支援此功能,您必須實作 PKCS #11 的子集,才能使用上表所定義的 FreeRTOS 程式庫。
何時使用 FreeRTOS 網路服務 11
CorepkCS11 程式庫包含以軟體為基礎的 PKCS #11 介面 (API) 實作,該介面使用由提供的密碼編譯功能姆貝德 TLS
移植公司 11
您必須實作才能將加密物件讀取和寫入非揮發性記憶體 (NVM),例如板載快閃記憶體。加密對象必須存儲在 NVM 的一個部分,該部分未初始化,並且在設備重新編程時不會擦除。CorepkCS11 程式庫的使用者將使用認證佈建裝置,然後使用可透過 CorepkCS11 介面存取這些認證的新應用程式來重新編程裝置。CorepkCS11 PAL 連接埠必須提供儲存位置:
-
裝置用戶端憑證
-
裝置用戶端私密金鑰
-
裝置用戶端公開金鑰
-
受信任的根 CA
-
安全開機載入程式的程式碼驗證公開金鑰 (或包含程式碼驗證公開金鑰的憑證) over-the-air (太田)更新
-
即時佈建憑證
包括頭文件
函數 | 描述 |
---|---|
初始化 |
初始化 PAL 層。由 CorepkCS11 程式庫在其初始化序列開始時呼叫。 |
帕爾 _SaveObject |
將資料寫入非揮發性儲存。 |
帕爾 _FindObject |
使用 PKCS #11 |
帕爾 _GetObjectValue |
根據控制代碼擷取物件的值。 |
帕爾 _GetObjectValueCleanup |
清除 |
測試
如果您使用 FreeRTOS 體庫或實作 PKCS11 API 的必要子集,您必須通過 PKCS11 測試。這些測試 FreeRTOS 程式庫所需的功能是否如預期般執行。
本節也說明如何在本節中使用資格測試這個節也說明如何在本節中執行 FreeRTOS PKCS11 測試。
先決條件
若要設定 FreeRTOS PKCS11 測試,必須執行下列動作。
PKCS11 API 的支援連接埠。
FreeRTOS 資格測試平台功能的實作,其中包括:
FRTest_ThreadCreate
FRTest_ThreadTimedJoin
FRTest_MemoryAlloc
FRTest_MemoryFree
(請參閱雷德美. MD
移植測試
新增自由圖書館集成測試
作為一個子模塊到你的項目。子模塊可以放置在項目的任何目錄中,只要它可以被構建。 複製
config_template/test_execution_config_template.h
和config_template/test_param_config_template.h
到構建路徑中的項目位置,並將其重命名為test_execution_config.h
和test_param_config.h
。在建置系統中包含相關檔案。如果使用
CMake
,qualification_test.cmake
和src/pkcs11_tests.cmake
可用於包括相關文件。實施
UNITY_OUTPUT_CHAR
這樣測試輸出日誌和設備日誌就不會交錯。整合 MBedTLS,以驗證加密操作結果。
呼叫
RunQualificationTest()
從應用程式中。
配置測試
PKCS11 測試套件必須根據 PKCS11 實作進行配置。下表列出在中所提供的 PKCS11 測試所需的配置test_param_config.h
頭文件。
組態 | 描述 |
---|---|
支援金鑰支援 |
移植支援 RSA 關鍵功能。 |
支援鍵盤測試 |
該移植支持 EC 鍵功能。 |
支持私人密鑰支持 |
移植支援匯入私密金鑰。如果啟用了支援的關鍵功能,則會在測試中驗證 RSA 和 EC 金鑰匯入。 |
生成鍵盤支持 |
移植支持密鑰對生成。如果啟用了支持的關鍵功能,則會在測試中驗證 EC 密鑰對生成。 |
預先佈建支援 |
移植具有預先佈建的認證。 |
PKCS11 測試 _ 標籤設備 _ 私有密鑰形式 |
測試中使用的私密金鑰標籤。 |
PKCS11 測試標籤裝置公開密鑰 |
測試中使用的公開金鑰標籤。 |
PKCS11 測試標籤設備證書 |
測試中使用的憑證標籤。 |
支援的程式碼驗證碼 |
移植支援 JITP 的儲存裝置。將這個項目設定為 1 以啟用 JITP |
驗證碼密鑰 |
JITP 中使用的代碼驗證密鑰的標籤 |
測試標籤設定證書 |
JITP 中使用的 JITP 憑證標籤 |
測試標籤根證書 |
JITP 中使用的根憑證標籤 |
FreeRTOS 程式庫和參考整合必須支援至少一個關鍵功能組態,例如 RSA 或橢圓形曲線索引鍵,以及 PKCS11 API 支援的一個金鑰佈建機制。測試必須啟用以下配置:
下列其中一個按鍵功能組態:
支援金鑰支援
支援鍵盤測試
下列其中一個金鑰佈建組態:
支持私人密鑰支持
生成鍵盤支持
預先佈建支援
預先佈建的裝置認證測試必須在下列情況下執行:
PKCS11_TEST_PREPROVISIONED_SUPPORT
必須啟用且停用其他佈建機制。只有一個按鍵功能
PKCS11_TEST_RSA_KEY_SUPPORT
或者PKCS11_TEST_EC_KEY_SUPPORT
,已啟用。根據您的按鍵功能設定預先佈建的金鑰標籤,包括
PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS
,PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS
和PKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS
。執行測試之前,必須先存在這些認證。
如果實作支援預先佈建的認證和其他佈建機制,則測試可能需要使用不同的組態執行多次。
注意
帶有標籤的對象PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS
,PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS
和PKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS
如果在測試期間被銷毀PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT
或者PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT
已啟用。
執行測試
本節說明如何透過資格測試在本機測試 PKCS11 介面。或者,也可以使用 IDT 來自動執行。請參閱AWS IoT Device Tester對於 FreeRTOS在FreeRTOS 使用指南如需詳細資訊。
下列指示說明如何運行測試:
打開
test_execution_config.h
並定義核心 _ 測試已啟用到 1 個。構建應用程序並將其刷新到設備以運行。測試結果將輸出到串行端口。
下面是輸出測試結果的範例。
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
當所有測試都通過時,測試就完成。
注意
若要正式符合 FreeRTOS 的裝置資格,您必須使用以下方式驗證裝置移植的原始程式碼AWS IoT Device Tester。按照中所提供的說明使用AWS IoT Device Tester對於 FreeRTOS在《FreeRTOS 使用者指南》中進行設定AWS IoT Device Tester用於連接埠驗證。若要測試特定程式庫的連接埠,必須在device.json
檔案中的AWS IoT Device Tester configs
資料夾中。