Couverture des fonctions PKCS#11
Chaque fonction, mécanisme et attribut Cryptoki 2.40 de la bibliothèque PKCS#11 de DuoKey, et son statut exact.
La bibliothèque implémente le sous-ensemble single-part de Cryptoki nécessaire pour gérer et utiliser des clés via le DuoKey Cockpit. Chaque emplacement de la table de fonctions est un pointeur valide : les fonctions implémentées effectuent le travail, et les autres retournent une erreur explicite (CKR_FUNCTION_NOT_SUPPORTED ou CKR_FUNCTION_NOT_PARALLEL).
Fonctions implémentées
Usage général
| Fonction | Comportement |
|---|---|
C_GetFunctionList | Retourne la table des fonctions (le seul symbole exporté). |
C_Initialize | Charge la configuration, construit le client proxy, initialise l'état global. |
C_Finalize | Détruit l'état global. |
C_GetInfo | Rapporte Cryptoki 2.40, bibliothèque 0.1, fabricant « DuoKey ». |
Gestion des slots et des tokens
| Fonction | Comportement |
|---|---|
C_GetSlotList | Présente exactement un slot virtuel (slot_id depuis la config). |
C_GetSlotInfo | Statique « DKE Cockpit Virtual HSM Slot », drapeaux CKF_TOKEN_PRESENT | CKF_HW_SLOT. |
C_GetTokenInfo | Drapeaux et métadonnées du token (au mieux depuis le proxy, avec un repli hors ligne). |
C_GetMechanismList | Retourne la liste des mécanismes annoncés (voir ci-dessous). |
C_GetMechanismInfo | Plage de taille de clé et drapeaux par mécanisme ; ajoute CKF_HW aux drapeaux par OU logique. |
Gestion des sessions
| Fonction | Comportement |
|---|---|
C_OpenSession | Sessions série uniquement ; les sessions parallèles sont rejetées avec CKR_SESSION_PARALLEL_NOT_SUPPORTED. |
C_CloseSession | Ferme une session. |
C_CloseAllSessions | Ferme toutes les sessions du slot. |
C_GetSessionInfo | Dérive l'état RO/RW × public/utilisateur. |
C_Login | Fait passer la session à l'état utilisateur. Aucun PIN n'est transmis ; seuls CKU_USER / CKU_CONTEXT_SPECIFIC sont acceptés. |
C_Logout | Efface l'indicateur de connexion. |
Gestion des objets
| Fonction | Comportement |
|---|---|
C_FindObjectsInit / C_FindObjects / C_FindObjectsFinal | Interroge le Cockpit avec le filtre de modèle, interne et pagine les résultats. |
C_GetAttributeValue | Répond aux attributs à partir du descripteur mis en cache (protocole de longueur de tampon pris en charge). |
C_DestroyObject | Supprime l'objet au niveau du Cockpit et oublie le handle. |
Chiffrement et déchiffrement (single-part)
| Fonction | Comportement |
|---|---|
C_EncryptInit / C_Encrypt | Chiffrement single-part ; pour AES-GCM, le tag est ajouté au texte chiffré. |
C_DecryptInit / C_Decrypt | Déchiffrement single-part. |
Signature, vérification et digest (single-part)
| Fonction | Comportement |
|---|---|
C_SignInit / C_Sign | Signature single-part. |
C_VerifyInit / C_Verify | Vérification single-part ; CKR_SIGNATURE_INVALID lorsque le backend signale une signature invalide. |
C_DigestInit / C_Digest | Digest single-part sans clé (calculé au niveau du Cockpit). |
Gestion des clés
| Fonction | Comportement |
|---|---|
C_GenerateKey | Génère une clé symétrique (nécessite une connexion). |
C_GenerateKeyPair | Génère une paire de clés asymétriques (nécessite une connexion). |
C_WrapKey | Encapsule une clé sous une clé d'encapsulation. |
C_UnwrapKey | Désencapsule un blob en un nouvel objet clé. |
Aléatoire
| Fonction | Comportement |
|---|---|
C_GenerateRandom | Demande N octets aléatoires au backend. |
C_SeedRandom | Accepté et ignoré — le générateur aléatoire du backend ne peut pas être initialisé (seedé) par le client. |
Non pris en charge
- Administration des tokens / PIN —
C_InitToken,C_InitPIN,C_SetPIN - État d'opération —
C_GetOperationState,C_SetOperationState - Création / copie / taille / modification d'attribut d'objet —
C_CreateObject,C_CopyObject,C_GetObjectSize,C_SetAttributeValue - Chiffrement / déchiffrement multi-parties —
C_EncryptUpdate,C_EncryptFinal,C_DecryptUpdate,C_DecryptFinal - Digest multi-parties —
C_DigestUpdate,C_DigestKey,C_DigestFinal - Signature et vérification multi-parties / recover —
C_SignUpdate,C_SignFinal,C_SignRecoverInit,C_SignRecover,C_VerifyUpdate,C_VerifyFinal,C_VerifyRecoverInit,C_VerifyRecover - Double fonction —
C_DigestEncryptUpdate,C_DecryptDigestUpdate,C_SignEncryptUpdate,C_DecryptVerifyUpdate - Dérivation de clé —
C_DeriveKey - Événements de slot —
C_WaitForSlotEvent
C_GetFunctionStatus, C_CancelFunction (gestion historique des fonctions parallèles).
Ces opérations ne sont pas utilisées par les flux de travail de clés pris en charge, qui sont single-part par construction.
Mécanismes
C_GetMechanismList annonce les mécanismes ci-dessous. C_GetMechanismInfo retourne la plage de taille de clé et les drapeaux, et définit également CKF_HW. Les unités de taille de clé suivent le mécanisme : AES en octets, RSA/EC en bits.
| Mécanisme | Min | Max | Opérations |
|---|---|---|---|
CKM_AES_KEY_GEN | 16 | 32 | génération |
CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD | 16 | 32 | chiffrement, déchiffrement, encapsulation, désencapsulation |
CKM_AES_GCM | 16 | 32 | chiffrement, déchiffrement |
CKM_AES_KEY_WRAP, CKM_AES_KEY_WRAP_PAD | 16 | 32 | encapsulation, désencapsulation |
CKM_GENERIC_SECRET_KEY_GEN | 1 | 512 | génération |
CKM_RSA_PKCS_KEY_PAIR_GEN | 2048 | 4096 | génération de paire de clés |
CKM_RSA_PKCS | 2048 | 4096 | chiffrement, déchiffrement, signature, vérification, encapsulation, désencapsulation |
CKM_RSA_PKCS_OAEP | 2048 | 4096 | chiffrement, déchiffrement, encapsulation, désencapsulation |
CKM_RSA_PKCS_PSS, CKM_SHA256_RSA_PKCS, CKM_SHA384_RSA_PKCS, CKM_SHA512_RSA_PKCS | 2048 | 4096 | signature, vérification |
CKM_EC_KEY_PAIR_GEN | 256 | 521 | génération de paire de clés |
CKM_ECDSA, CKM_ECDSA_SHA256, CKM_ECDSA_SHA384 | 256 | 521 | signature, vérification |
CKM_SHA_1, CKM_SHA256, CKM_SHA384, CKM_SHA512 | — | — | digest |
CKM_SHA256_HMAC, CKM_SHA384_HMAC, CKM_SHA512_HMAC | 1 | 512 | signature, vérification |
Le digest est calculé au niveau du Cockpit et prend actuellement en charge SHA-256 / 384 / 512. CKM_SHA_1 est annoncé mais un digest SHA-1 est rejeté par le backend (CKR_MECHANISM_INVALID).
Objets et attributs
Classes d'objets : CKO_DATA, CKO_CERTIFICATE, CKO_PUBLIC_KEY, CKO_PRIVATE_KEY, CKO_SECRET_KEY, CKO_DOMAIN_PARAMETERS.
Types de clé : CKK_AES, CKK_RSA, CKK_EC, CKK_GENERIC_SECRET, CKK_DSA, CKK_DH, CKK_SHA256_HMAC, CKK_SHA384_HMAC, CKK_SHA512_HMAC.
C_GetAttributeValue retourne, à partir du descripteur mis en cache : 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, ainsi que les drapeaux booléens de capacité (CKA_TOKEN, CKA_PRIVATE, CKA_SENSITIVE, CKA_EXTRACTABLE, CKA_ENCRYPT, CKA_DECRYPT, CKA_WRAP, CKA_UNWRAP, CKA_SIGN, CKA_VERIFY, CKA_DERIVE, …).
CKA_VALUE retourne toujours CKR_ATTRIBUTE_SENSITIVE — le matériel de clé brut ne réside que dans le backend et ne traverse jamais la frontière PKCS#11. Les clés déclarent CKA_EXTRACTABLE = false, CKA_SENSITIVE = true, CKA_NEVER_EXTRACTABLE = true. Tout type d'attribut non reconnu retourne CKR_ATTRIBUTE_TYPE_INVALID.