メインコンテンツまでスキップ
適用対象:
PKCS#11 (Cryptoki) 2.40DuoKey PKCS#11 Library

このライブラリは、DuoKey Cockpit を通じて鍵を管理・使用するために必要な、Cryptoki の単一部分サブセットを実装しています。関数テーブルのすべてのスロットは有効なポインタです。実装されている関数は処理を実行し、それ以外は明確なエラー(CKR_FUNCTION_NOT_SUPPORTED または CKR_FUNCTION_NOT_PARALLEL)を返します。

実装されている関数​

汎用​

関数動作
C_GetFunctionList関数テーブルを返す(唯一のエクスポートシンボル)。
C_Initialize構成を読み込み、プロキシクライアントを構築し、グローバル状態を初期化する。
C_Finalizeグローバル状態を破棄する。
C_GetInfoCryptoki 2.40、ライブラリ 0.1、製造元 "DuoKey" を報告する。

スロットおよびトークン管理​

関数動作
C_GetSlotList厳密に1つの仮想スロットを提示する(構成からの slot_id)。
C_GetSlotInfo静的な "DKE Cockpit Virtual HSM Slot"、フラグ CKF_TOKEN_PRESENT | CKF_HW_SLOT。
C_GetTokenInfoトークンのフラグとメタデータ(プロキシからのベストエフォート、オフラインフォールバック付き)。
C_GetMechanismList公開されるメカニズム一覧を返す(下記参照)。
C_GetMechanismInfoメカニズムごとの鍵サイズ範囲とフラグ。フラグに CKF_HW を OR する。

セッション管理​

関数動作
C_OpenSessionシリアルセッションのみ。並列は CKR_SESSION_PARALLEL_NOT_SUPPORTED で拒否される。
C_CloseSessionセッションを閉じる。
C_CloseAllSessionsスロットのすべてのセッションを閉じる。
C_GetSessionInfoRO/RW × パブリック/ユーザーの状態を導出する。
C_Loginセッションをユーザー状態に移す。**PIN は送信されない**。CKU_USER / CKU_CONTEXT_SPECIFIC のみが受け付けられる。
C_Logoutログイン済みフラグをクリアする。

オブジェクト管理​

関数動作
C_FindObjectsInit / C_FindObjects / C_FindObjectsFinalテンプレートフィルタで Cockpit に問い合わせ、結果をインターン化してページングする。
C_GetAttributeValueキャッシュされた記述子から属性に応答する(バッファ長プロトコルに対応)。
C_DestroyObjectCockpit 側のオブジェクトを削除し、ハンドルを破棄する。

暗号化と復号(単一部分)​

関数動作
C_EncryptInit / C_Encrypt単一部分の暗号化。AES-GCM の場合、タグは暗号文に付加される。
C_DecryptInit / C_Decrypt単一部分の復号。

署名、検証、ダイジェスト(単一部分)​

関数動作
C_SignInit / C_Sign単一部分の署名。
C_VerifyInit / C_Verify単一部分の検証。バックエンドが無効と報告した場合は CKR_SIGNATURE_INVALID。
C_DigestInit / C_Digest鍵を使わない単一部分のダイジェスト(Cockpit で計算される)。

鍵管理​

関数動作
C_GenerateKey対称鍵を生成する(ログインが必要)。
C_GenerateKeyPair非対称鍵ペアを生成する(ログインが必要)。
C_WrapKeyラップ鍵の下で鍵をラップする。
C_UnwrapKeyブロブをアンラップして新しい鍵オブジェクトにする。

乱数​

関数動作
C_GenerateRandomバックエンドに N バイトの乱数を要求する。
C_SeedRandom受理されるが無視される — バックエンドの RNG はクライアントからシードできない。

サポート対象外​

CKR_FUNCTION_NOT_SUPPORTED を返す
  • トークン / PIN 管理 — C_InitToken、C_InitPIN、C_SetPIN
  • 操作状態 — C_GetOperationState、C_SetOperationState
  • オブジェクトの作成 / コピー / サイズ / 属性設定 — C_CreateObject、C_CopyObject、C_GetObjectSize、C_SetAttributeValue
  • マルチパート暗号化 / 復号 — C_EncryptUpdate、C_EncryptFinal、C_DecryptUpdate、C_DecryptFinal
  • マルチパートダイジェスト — C_DigestUpdate、C_DigestKey、C_DigestFinal
  • マルチパート / リカバー署名 & 検証 — C_SignUpdate、C_SignFinal、C_SignRecoverInit、C_SignRecover、C_VerifyUpdate、C_VerifyFinal、C_VerifyRecoverInit、C_VerifyRecover
  • デュアルファンクション — C_DigestEncryptUpdate、C_DecryptDigestUpdate、C_SignEncryptUpdate、C_DecryptVerifyUpdate
  • 鍵導出 — C_DeriveKey
  • スロットイベント — C_WaitForSlotEvent
CKR_FUNCTION_NOT_PARALLEL を返す

C_GetFunctionStatus、C_CancelFunction(レガシーな並列関数管理)。

これらの操作は、構造上単一部分である、サポート対象の鍵ワークフローでは使用されません。

メカニズム​

C_GetMechanismList は以下のメカニズムを公開します。C_GetMechanismInfo は鍵サイズ範囲とフラグを返し、CKF_HW も設定します。鍵サイズの単位はメカニズムに従います。AES はバイト単位、RSA/EC はビット単位です。

メカニズム最小最大操作
CKM_AES_KEY_GEN1632生成
CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD1632暗号化、復号、ラップ、アンラップ
CKM_AES_GCM1632暗号化、復号
CKM_AES_KEY_WRAP, CKM_AES_KEY_WRAP_PAD1632ラップ、アンラップ
CKM_GENERIC_SECRET_KEY_GEN1512生成
CKM_RSA_PKCS_KEY_PAIR_GEN20484096鍵ペア生成
CKM_RSA_PKCS20484096暗号化、復号、署名、検証、ラップ、アンラップ
CKM_RSA_PKCS_OAEP20484096暗号化、復号、ラップ、アンラップ
CKM_RSA_PKCS_PSS, CKM_SHA256_RSA_PKCS, CKM_SHA384_RSA_PKCS, CKM_SHA512_RSA_PKCS20484096署名、検証
CKM_EC_KEY_PAIR_GEN256521鍵ペア生成
CKM_ECDSA, CKM_ECDSA_SHA256, CKM_ECDSA_SHA384256521署名、検証
CKM_SHA_1, CKM_SHA256, CKM_SHA384, CKM_SHA512——ダイジェスト
CKM_SHA256_HMAC, CKM_SHA384_HMAC, CKM_SHA512_HMAC1512署名、検証
ダイジェストメカニズム

ダイジェストは Cockpit で計算され、現在はSHA-256 / 384 / 512 をサポートします。CKM_SHA_1 は公開されていますが、SHA-1 ダイジェストはバックエンドによって拒否されます(CKR_MECHANISM_INVALID)。

オブジェクトと属性​

オブジェクトクラス: CKO_DATA、CKO_CERTIFICATE、CKO_PUBLIC_KEY、CKO_PRIVATE_KEY、CKO_SECRET_KEY、CKO_DOMAIN_PARAMETERS。

鍵タイプ: CKK_AES、CKK_RSA、CKK_EC、CKK_GENERIC_SECRET、CKK_DSA、CKK_DH、CKK_SHA256_HMAC、CKK_SHA384_HMAC、CKK_SHA512_HMAC。

C_GetAttributeValue は、キャッシュされた記述子から次を返します: CKA_CLASS、CKA_KEY_TYPE、CKA_LABEL、CKA_ID、CKA_VALUE_LEN、CKA_MODULUS、CKA_PUBLIC_EXPONENT、CKA_MODULUS_BITS、CKA_EC_PARAMS、CKA_EC_POINT、そして各種のブール型ケイパビリティフラグ(CKA_TOKEN、CKA_PRIVATE、CKA_SENSITIVE、CKA_EXTRACTABLE、CKA_ENCRYPT、CKA_DECRYPT、CKA_WRAP、CKA_UNWRAP、CKA_SIGN、CKA_VERIFY、CKA_DERIVE など)。

CKA_VALUE はセンシティブ

CKA_VALUE は常に CKR_ATTRIBUTE_SENSITIVE を返します — 生の鍵素材はバックエンドにのみ存在し、PKCS#11 の境界を越えることはありません。鍵は CKA_EXTRACTABLE = false、CKA_SENSITIVE = true、CKA_NEVER_EXTRACTABLE = true を報告します。認識されない属性タイプは CKR_ATTRIBUTE_TYPE_INVALID を返します。