本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Corep11 程式庫
注意
此頁面上的內容可能不是up-to-date。如需最新的更新,請參閱 FreerTos.org 程式庫頁面
概要
公開金鑰加密標準 #11 定義了一個獨立於平台的 API 來管理和使用密碼編譯權杖。PKCS #11
CorepkCS11 程式庫包含 PKCS #11 介面 (API) 的以軟體為基礎的模擬實作,該實作使用 MBed TLS 提供的加密功能。使用軟件模擬可以實現快速開發和靈活性,但是預計您將用特定於生產設備中使用的安全密鑰存儲的實現替換模擬。一般而言,安全加密處理器的廠商,例如信任平台模組 (TPM)、硬體安全模組 (HSM)、安全元件或任何其他類型的安全硬體隔離區,會隨硬體散佈 PKCS #11 實作。因此,CorepkCS11 軟體僅模擬程式庫的目的在於提供非硬體特定的 PKCS #11 實作,允許在生產裝置中切換到密碼處理器特定 PKCS #11 實作之前,進行快速原型製作和開發。
僅實作 PKCS #11 標準的子集,重點放在涉及非對稱金鑰、隨機數產生和雜湊的作業上。目標使用案例包括 TLS 驗證的憑證和金鑰管理,以及小型嵌入式裝置上的程式碼簽章驗證。請參閱 FreeRTOS 原始程式碼儲存庫中的檔案 pkcs11.h
(從標準主體 OASIS 取得)。在 FreeRTOS 參考實作中,PKCS #11 API 呼叫是由 TLS 協助程式介面進行,以便在期間執行 TLS 用戶端驗證。SOCKETS_Connect
PKCS #11 API 呼叫也是由我們的一次性開發人員佈建工作流程進行,以匯入 TLS 用戶端憑證和用於驗證的私密金鑰至 AWS IoT MQTT 代理程式。這兩個使用案例 (佈建和 TLS 用戶端驗證) 只需要實作 PKCS #11 介面標準的一小部分。
功能
使用 PKCS #11 的下列子集。此清單的順序大約是支援佈建、TLS 用戶端身分驗證及清理時呼叫常式的順序。有關功能的詳細說明,請參閱標準委員會提供的 PKCS #11 文檔。
一般設定和卸除 API
-
C_Initialize
-
C_Finalize
-
C_GetFunctionList
-
C_GetSlotList
-
C_GetTokenInfo
-
C_OpenSession
-
C_CloseSession
-
C_Login
佈建 API
-
C_CreateObject CKO_PRIVATE_KEY
(適用於裝置私有金鑰) -
C_CreateObject CKO_CERTIFICATE
(適用於裝置憑證和程式碼驗證憑證) -
C_GenerateKeyPair
-
C_DestroyObject
用戶端身分驗證
-
C_GetAttributeValue
-
C_FindObjectsInit
-
C_FindObjects
-
C_FindObjectsFinal
-
C_GenerateRandom
-
C_SignInit
-
C_Sign
-
C_VerifyInit
-
C_Verify
-
C_DigestInit
-
C_DigestUpdate
-
C_DigestFinal
非對稱加密系統支援
FreeRTOS 參考實作使用 PKCS #11 2048 位元 RSA (僅限簽署) 和 ECDSA 搭配 NIST P-256 曲線。以下說明解釋如何建立基於 P-256 用戶端憑證的 AWS IoT 物件。
請確定您使用的以下版本 (或更新版本) 的 AWS CLI 及 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
下列程序假設您使用aws configure
指令來配置AWS CLI. 若要取得更多資訊,請參閱《使用指南》aws configure
中的AWS Command Line Interface〈快速配置〉。
若要根據 P-256 用戶端憑證建立AWS IoT物件
-
建立 AWS IoT 物件。
aws iot create-thing --thing-name
thing-name
-
使用 OpenSSL 建立 P-256 金鑰。
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out
thing-name
.key -
建立由步驟 2 所建立金鑰簽署的憑證註冊請求。
openssl req -new -nodes -days 365 -key
thing-name
.key -outthing-name
.req -
將憑證註冊請求提交給 AWS IoT。
aws iot create-certificate-from-csr \ --certificate-signing-request file://
thing-name
.req --set-as-active \ --certificate-pem-outfilething-name
.crt -
將憑證 (由先前命令的 ARN 輸出參考) 連接到物件。
aws iot attach-thing-principal --thing-name
thing-name
\ --principal "arn:aws:iot:us-east-1
:123456789012
:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729
" -
建立政策 (這項政策太寬鬆了。 它應該僅用於開發目的。)
aws iot create-policy --policy-name FullControl --policy-document file://policy.json
以下是
create-policy
命令中所指定 policy.json 檔案的清單。如果您不想針對 Greengrass 連線和探索執行 FreeRTOS 示範,可以省略此greengrass:*
動作。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*" }, { "Effect": "Allow", "Action": "greengrass:*", "Resource": "*" } ] }
-
將委託人 (憑證) 及政策連接至物件。
aws iot attach-principal-policy --policy-name FullControl \ --principal "arn:aws:iot:us-east-1:
123456789012
:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729
"
現在,遵循本指南中 AWS IoT 入門一節內的步驟。請記得將您建立的憑證及私有金鑰複製到您的 aws_clientcredential_keys.h
檔案。將您的物件名稱複製到 aws_clientcredential.h
。
注意
將憑證和私有金鑰硬式編碼,僅作示範用途。生產層級應用程式必須將這些檔案存放在安全的位置。
移植
如需將 CorepkCS11 程式庫移植到您的平台的相關資訊,請參閱《免費伺服器移植指南》中的 「移植 CorepkCS 11 程式庫」。
記憶體使用
CorepkCS11 的代碼大小(使用 GCC 為 ARM 皮質-M 生成的示例) | ||
---|---|---|
檔案 | 使用-O1 最佳化 | 使用-Os 優化 |
核心 _pkcs11.c | 0.8 萬 | 0.8 萬 |
核心公用程式 c | 0.5 公里 | 0.3K |
核心 _pkcs11 _ 中英尺 | 8.9K | 7.5 公里 |
估計總數 | 10.2K | 8.6 千 |