コアPKCS11ライブラリ - 無料RTOS

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

コアPKCS11ライブラリ

注記

このページのコンテンツは ではない場合があります up-to-date。最新の更新については、Free RTOS.org ライブラリページを参照してください。

概要

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

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

非対称キー、乱数生成、ハッシュを含むオペレーションに焦点を当て、PKCS#11 標準の一部のみが実装されます。対象となるユースケースには、小さな組み込みデバイス上でのTLS認証用の証明書とキーの管理、およびコード署名署名の検証が含まれます。無料RTOSソースコードリポジトリの ファイル pkcs11.h (標準本文OASISである から取得) を参照してください。 無料RTOSリファレンス実装 では、PKCS#11 API呼び出しは、 中にTLSクライアント認証を実行するためにTLSヘルパーインターフェイスによって行われますSOCKETS_Connect。PKCS #11 APIコールは、1 回限りのデベロッパープロビジョニングワークフローによっても行われ、TLSクライアント証明書とMQTTブローカーへの認証用のプライベートキーをインポートします AWS IoT 。プロビジョニングと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

非対称暗号化方式のサポート

無料RTOSリファレンス実装では、PKCS#11 2048 ビット RSA (署名のみ) と ECDSA NIST P-256 曲線を使用します。次の手順では、P-256 クライアント証明書に基づいて AWS IoT モノを作成する方法について説明します。

AWS CLI および Open の以下の (またはより新しい) バージョンを使用していることを確認してくださいSSL。

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 接続と検出の無料RTOSデモを実行しない場合は、 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 にコピーします。

注記

証明書とプライベートキーは、デモ専用にハードコードされています。本番稼動レベルのアプリケーションでは、これらのファイルを安全な場所に保存する必要があります。

移植

コアPKCS11ライブラリをプラットフォームに移植する方法については、「無料RTOS移植ガイド」の「コアPKCS11ライブラリの移植」を参照してください。

メモリ使用量

コアPKCS11のコードサイズ (GCC例: ARM for Cortex-M で生成)
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