corePKCS11 ライブラリ - FreeRTOS

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

corePKCS11 ライブラリ

注記

このページのコンテンツは最新ではない可能性があります。最新の更新については、FreeRTOS.org ライブラリのページを参照してください。

概要

公開鍵暗号標準 #11 では、暗号化トークンを管理および使用するためのプラットフォームに依存しない API が定義されています。PKCS #11 は、標準で定義された API と、標準自体を指します。PKCS #11 暗号化 API は、キーストレージ、暗号化オブジェクトプロパティの取得/設定、およびセッションセマンティクスを抽象化します。この API は、一般的な暗号化オブジェクトの操作に広く使用されており、重要です。この API で指定する関数により、アプリケーションソフトウェアは暗号化オブジェクトの使用、作成、変更、削除を、アプリケーションのメモリに公開することなく実行できるからです。例えば、FreeRTOS AWS リファレンス統合では PKCS #11 API の小さなサブセットを使用して、Transport Layer Security (TLS) プロトコルによって、アプリケーションにキーを公開することなく認証および保護されるネットワーク接続の作成に必要なシークレット (プライベート) キーにアクセスします。

corePKCS11 ライブラリには、Mbed TLS が提供する暗号化機能を使用する PKCS #11 インターフェイス (API) のソフトウェアベースのモック実装が含まれています。ソフトウェアモックを使用すると、迅速な開発と柔軟性が実現できますが、このモックを実稼働用デバイスで使用されるセキュアキーストレージ固有の実装に置き換える必要があります。一般に、トラステッドプラットフォームモジュール (TPM)、ハードウェアセキュリティモジュール (HSM)、セキュアエレメント、またはその他のタイプのセキュアハードウェアエンクレーブなどのセキュアな暗号化プロセッサのベンダーは、PKCS #11 実装をハードウェアとともに配布します。したがって、corePKCS11 ソフトウェア専用モックライブラリの目的は、実稼働デバイスで暗号化プロセッサ固有の PKCS #11 実装に切り替える前に、迅速なプロトタイピングと開発ができるハードウェア専用ではない PKCS #11 実装を提供することです。

PKCS #11 標準のサブセットのみが実装されており、非対称キー、乱数生成、ハッシュなどの操作に重点が置かれています。対象となるユースケースには、小型の組み込みデバイスにおける TLS 認証に対応した証明書とキーの管理、およびコードサイン署名の検証などがあります。FreeRTOS ソースコードリポジトリのファイル pkcs11.h (標準的な本体である OASIS から入手) を参照してください。FreeRTOS リファレンス実装では、SOCKETS_Connect 中に TLS クライアントの認証を実行するために、PKCS #11 API コールが TLS ヘルパーインターフェイスによって使用されます。PKCS #11 API コールは、ワンタイムの開発者プロビジョニングワークフローによって、AWS IoT MQTT ブローカーへの認証用 TLS クライアント証明書とプライベートキーをインポートするためにも使用されます。プロビジョニングと TLS クライアント認証の 2 つのユースケースでは、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 リファレンス実装では、NIST P-256 曲線を使用する PKCS #11 2048 ビット RSA (署名のみ) と ECDSA をサポートしています。以下の手順では、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 Command Line Interface ユーザーガイドaws configure を使用したクイック設定を参照してください。

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 ライブラリを移植する方法については、FreeRTOS 移植ガイドの corePKCS11 ライブラリの移植を参照してください。

メモリ使用量

corePKCS11 のコードサイズ (ARM Cortex-M 向けの GCC で生成された例)
File -O1 最適化を使用 -Os 最適化を使用
core_pkcs11.c 0.8 K 0.8 K
core_pki_utils.c 0.5 K 0.3 K
core_pkcs11_mbedtls.c 8.9 K 7.5 K
合計 (概算) 10.2K 8.6K