Aller au contenu principal
S'applique à :
PKCS#11 (Cryptoki) 2.40Bibliothèque PKCS#11 de DuoKey

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​

FonctionComportement
C_GetFunctionListRetourne la table des fonctions (le seul symbole exporté).
C_InitializeCharge la configuration, construit le client proxy, initialise l'état global.
C_FinalizeDétruit l'état global.
C_GetInfoRapporte Cryptoki 2.40, bibliothèque 0.1, fabricant « DuoKey ».

Gestion des slots et des tokens​

FonctionComportement
C_GetSlotListPrésente exactement un slot virtuel (slot_id depuis la config).
C_GetSlotInfoStatique « DKE Cockpit Virtual HSM Slot », drapeaux CKF_TOKEN_PRESENT | CKF_HW_SLOT.
C_GetTokenInfoDrapeaux et métadonnées du token (au mieux depuis le proxy, avec un repli hors ligne).
C_GetMechanismListRetourne la liste des mécanismes annoncés (voir ci-dessous).
C_GetMechanismInfoPlage de taille de clé et drapeaux par mécanisme ; ajoute CKF_HW aux drapeaux par OU logique.

Gestion des sessions​

FonctionComportement
C_OpenSessionSessions série uniquement ; les sessions parallèles sont rejetées avec CKR_SESSION_PARALLEL_NOT_SUPPORTED.
C_CloseSessionFerme une session.
C_CloseAllSessionsFerme toutes les sessions du slot.
C_GetSessionInfoDérive l'état RO/RW × public/utilisateur.
C_LoginFait passer la session à l'état utilisateur. Aucun PIN n'est transmis ; seuls CKU_USER / CKU_CONTEXT_SPECIFIC sont acceptés.
C_LogoutEfface l'indicateur de connexion.

Gestion des objets​

FonctionComportement
C_FindObjectsInit / C_FindObjects / C_FindObjectsFinalInterroge le Cockpit avec le filtre de modèle, interne et pagine les résultats.
C_GetAttributeValueRépond aux attributs à partir du descripteur mis en cache (protocole de longueur de tampon pris en charge).
C_DestroyObjectSupprime l'objet au niveau du Cockpit et oublie le handle.

Chiffrement et déchiffrement (single-part)​

FonctionComportement
C_EncryptInit / C_EncryptChiffrement single-part ; pour AES-GCM, le tag est ajouté au texte chiffré.
C_DecryptInit / C_DecryptDéchiffrement single-part.

Signature, vérification et digest (single-part)​

FonctionComportement
C_SignInit / C_SignSignature single-part.
C_VerifyInit / C_VerifyVérification single-part ; CKR_SIGNATURE_INVALID lorsque le backend signale une signature invalide.
C_DigestInit / C_DigestDigest single-part sans clé (calculé au niveau du Cockpit).

Gestion des clés​

FonctionComportement
C_GenerateKeyGénère une clé symétrique (nécessite une connexion).
C_GenerateKeyPairGénère une paire de clés asymétriques (nécessite une connexion).
C_WrapKeyEncapsule une clé sous une clé d'encapsulation.
C_UnwrapKeyDésencapsule un blob en un nouvel objet clé.

Aléatoire​

FonctionComportement
C_GenerateRandomDemande N octets aléatoires au backend.
C_SeedRandomAccepté et ignoré — le générateur aléatoire du backend ne peut pas être initialisé (seedé) par le client.

Non pris en charge​

Retourne CKR_FUNCTION_NOT_SUPPORTED
  • 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
Retourne CKR_FUNCTION_NOT_PARALLEL

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écanismeMinMaxOpérations
CKM_AES_KEY_GEN1632génération
CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD1632chiffrement, déchiffrement, encapsulation, désencapsulation
CKM_AES_GCM1632chiffrement, déchiffrement
CKM_AES_KEY_WRAP, CKM_AES_KEY_WRAP_PAD1632encapsulation, désencapsulation
CKM_GENERIC_SECRET_KEY_GEN1512génération
CKM_RSA_PKCS_KEY_PAIR_GEN20484096génération de paire de clés
CKM_RSA_PKCS20484096chiffrement, déchiffrement, signature, vérification, encapsulation, désencapsulation
CKM_RSA_PKCS_OAEP20484096chiffrement, déchiffrement, encapsulation, désencapsulation
CKM_RSA_PKCS_PSS, CKM_SHA256_RSA_PKCS, CKM_SHA384_RSA_PKCS, CKM_SHA512_RSA_PKCS20484096signature, vérification
CKM_EC_KEY_PAIR_GEN256521génération de paire de clés
CKM_ECDSA, CKM_ECDSA_SHA256, CKM_ECDSA_SHA384256521signature, vérification
CKM_SHA_1, CKM_SHA256, CKM_SHA384, CKM_SHA512——digest
CKM_SHA256_HMAC, CKM_SHA384_HMAC, CKM_SHA512_HMAC1512signature, vérification
Mécanismes de digest

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 est sensible

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.