Corep11 程式庫 - 免費 RTOS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Corep11 程式庫

注意

此頁面上的內容可能不是up-to-date。如需最新的更新,請參閱 FreerTos.org 程式庫頁面

概要

公開金鑰加密標準 #11 定義了一個獨立於平台的 API 來管理和使用密碼編譯權杖。PKCS #11 是指由標準和標準本身定義的 API。PKCS #11 密碼編譯 API 會抽象化金鑰儲存、取得/設定密碼編譯物件的屬性,以及工作階段語意。它被廣泛用於操作常見的密碼編譯對象,這很重要,因為它指定的功能允許應用程序軟件使用,創建,修改和刪除加密對象,而不會將這些對象暴露到應用程序的內存。例如,FreeRTOS AWS 參考整合使用 PKCS #11 API 的一小部分來存取建立由傳輸層安全性 (TLS) 通訊協定驗證和保護的網路連線所需的秘密 (私密) 金鑰,而不需要應用程式「看到」金鑰。

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_ConnectPKCS #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物件
  1. 建立 AWS IoT 物件。

    aws iot create-thing --thing-name thing-name
  2. 使用 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
  3. 建立由步驟 2 所建立金鑰簽署的憑證註冊請求。

    openssl req -new -nodes -days 365 -key thing-name.key -out thing-name.req
  4. 將憑證註冊請求提交給 AWS IoT。

    aws iot create-certificate-from-csr \ --certificate-signing-request file://thing-name.req --set-as-active \ --certificate-pem-outfile thing-name.crt
  5. 將憑證 (由先前命令的 ARN 輸出參考) 連接到物件。

    aws iot attach-thing-principal --thing-name thing-name \ --principal "arn:aws:iot:us-east-1:123456789012:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729"
  6. 建立政策 (這項政策太寬鬆了。 它應該僅用於開發目的。)

    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": "*" } ] }
  7. 將委託人 (憑證) 及政策連接至物件。

    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 千