PKCS#11 関数カバレッジ
DuoKey PKCS#11 ライブラリにおける、すべての Cryptoki 2.40 関数、メカニズム、属性とその正確なステータス。
このライブラリは、DuoKey Cockpit を通じて鍵を管理・使用するために必要な、Cryptoki の単一部分サブセットを実装しています。関数テーブルのすべてのスロットは有効なポインタです。実装されている関数は処理を実行し、それ以外は明確なエラー(CKR_FUNCTION_NOT_SUPPORTED または CKR_FUNCTION_NOT_PARALLEL)を返します。
実装されている関数
汎用
| 関数 | 動作 |
|---|---|
C_GetFunctionList | 関数テーブルを返す(唯一のエクスポートシンボル)。 |
C_Initialize | 構成を読み込み、プロキシクライアントを構築し、グローバル状態を初期化する。 |
C_Finalize | グローバル状態を破棄する。 |
C_GetInfo | Cryptoki 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_GetSessionInfo | RO/RW × パブリック/ユーザーの状態を導出する。 |
C_Login | セッションをユーザー状態に移す。**PIN は送信されない**。CKU_USER / CKU_CONTEXT_SPECIFIC のみが受け付けられる。 |
C_Logout | ログイン済みフラグをクリアする。 |
オブジェクト管理
| 関数 | 動作 |
|---|---|
C_FindObjectsInit / C_FindObjects / C_FindObjectsFinal | テンプレートフィルタで Cockpit に問い合わせ、結果をインターン化してページングする。 |
C_GetAttributeValue | キャッシュされた記述子から属性に応答する(バッファ長プロトコルに対応)。 |
C_DestroyObject | Cockpit 側のオブジェクトを削除し、ハンドルを破棄する。 |
暗号化と復号(単一部分)
| 関数 | 動作 |
|---|---|
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 はクライアントからシードできない。 |
サポート対象外
- トークン / 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
C_GetFunctionStatus、C_CancelFunction(レガシーな並列関数管理)。
これらの操作は、構造上単一部分である、サポート対象の鍵ワークフローでは使用されません。
メカニズム
C_GetMechanismList は以下のメカニズムを公開します。C_GetMechanismInfo は鍵サイズ範囲とフラグを返し、CKF_HW も設定します。鍵サイズの単位はメカニズムに従います。AES はバイト単位、RSA/EC はビット単位です。
| メカニズム | 最小 | 最大 | 操作 |
|---|---|---|---|
CKM_AES_KEY_GEN | 16 | 32 | 生成 |
CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD | 16 | 32 | 暗号化、復号、ラップ、アンラップ |
CKM_AES_GCM | 16 | 32 | 暗号化、復号 |
CKM_AES_KEY_WRAP, CKM_AES_KEY_WRAP_PAD | 16 | 32 | ラップ、アンラップ |
CKM_GENERIC_SECRET_KEY_GEN | 1 | 512 | 生成 |
CKM_RSA_PKCS_KEY_PAIR_GEN | 2048 | 4096 | 鍵ペア生成 |
CKM_RSA_PKCS | 2048 | 4096 | 暗号化、復号、署名、検証、ラップ、アンラップ |
CKM_RSA_PKCS_OAEP | 2048 | 4096 | 暗号化、復号、ラップ、アンラップ |
CKM_RSA_PKCS_PSS, CKM_SHA256_RSA_PKCS, CKM_SHA384_RSA_PKCS, CKM_SHA512_RSA_PKCS | 2048 | 4096 | 署名、検証 |
CKM_EC_KEY_PAIR_GEN | 256 | 521 | 鍵ペア生成 |
CKM_ECDSA, CKM_ECDSA_SHA256, CKM_ECDSA_SHA384 | 256 | 521 | 署名、検証 |
CKM_SHA_1, CKM_SHA256, CKM_SHA384, CKM_SHA512 | — | — | ダイジェスト |
CKM_SHA256_HMAC, CKM_SHA384_HMAC, CKM_SHA512_HMAC | 1 | 512 | 署名、検証 |
ダイジェストは 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 は常に CKR_ATTRIBUTE_SENSITIVE を返します — 生の鍵素材はバックエンドにのみ存在し、PKCS#11 の境界を越えることはありません。鍵は CKA_EXTRACTABLE = false、CKA_SENSITIVE = true、CKA_NEVER_EXTRACTABLE = true を報告します。認識されない属性タイプは CKR_ATTRIBUTE_TYPE_INVALID を返します。