corep (缓冲内存) - FreeRTOS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

corep (缓冲内存)

注意

此页面上的内容可能不是 up-to-date。有关最新更新,请参阅 Freertos.org 图书馆页面

概览

公钥加密标准 #11 定义了一个独立于平台的 API 来管理和使用加密令牌。PKCS #11 指标准定义的 API 和标准本身。PKCS #11 cryptographic API 抽象了密钥存储、获取/设置加密对象的属性和会话语义。它广泛用于操作常见的加密对象,而且很重要,因为它指定的功能允许应用程序软件使用、创建、修改和删除加密对象,而无需将这些对象暴露在应用程序的内存中。例如,FreeRTOSAmazon 参考集成使用 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_Connect。PKCS #11 API 调用也由我们的一次性开发人员配置工作流程发出,用于将 TLS 客户端证书和用于身份验证的私钥导入Amazon 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(仅限签名)和带有 NIST P-256 曲线的 ECDSA。下文将介绍如何创建基于 P-256 客户端证书的 Amazon IoT 事物。

请确保使用的是以下版本(或更新版本)的 Amazon 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命令来配置Amazon CLI。有关更多信息,请参阅《Amazon Command Line Interface用户指南aws configure中的快速配置

基于 P-256 客户端证书创建Amazon IoT事物
  1. 创建 Amazon 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. 向 Amazon 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"

接下来,请按照本指南 Amazon IoT 入门部分中的步骤进行操作。请记得将创建的证书和私有密钥复制到 aws_clientcredential_keys.h 文件中。将事物名称复制到 aws_clientcredential.h 中。

注意

仅出于演示目的对证书和私有密钥进行了硬编码。生产级应用程序应将这些文件存储在安全位置。

移植

有关将 Corepkcs11 库移植到您的平台的信息,请参阅《FreeRTOS 移植指南》中的 “移植 Corepkcs11 库”。

内存使用率

Corepkcs11 的代码大小(使用 GCC 为 ARM Cortex-M 生成的示例)
文件 使用-O1 进行优化 使用-Os 优化
core_pkcs11.c 0.8K 0.8K
core_pki_utils.c 0.5K 0.3K
core_pkcs11_mbedtls.c 8.9K 7.5K
估计数总额 10.2K 8.6K