Aller au contenu principal

Couche interface PKCS#11

La couche interface PKCS#11 est le composant le plus haut avec lequel Oracle Database communique. Elle présente la surface C standard PKCS#11 (Cryptoki) attendue par Oracle et traduit chaque appel en une requête que les couches inférieures acheminent vers DuoKey Cockpit.

Vue d'ensemble​

Responsabilités​

Surface de fonctions Cryptoki​

La couche implémente les fonctions standard PKCS#11 (Cryptoki) qu'Oracle TDE pilote. Oracle charge la bibliothèque via le point d'entrée standard C_GetFunctionList et utilise un sous-ensemble ciblé :

  • Initialisation : C_Initialize, C_Finalize
  • Slot / token : C_GetSlotList, C_GetTokenInfo
  • Session : C_OpenSession, C_CloseSession, C_Login, C_Logout
  • Objet : C_FindObjectsInit, C_FindObjects, C_GetAttributeValue, C_CreateObject, C_DestroyObject
  • Clé : C_GenerateKey
  • Cryptographiques (wrap / unwrap) : C_Encrypt, C_Decrypt, ainsi que leurs formes multi-parties …Update / …Final

Gestion des sessions​

La couche maintient l'état de session et prend en charge plusieurs sessions concurrentes.

Cycle de vie de la session :

Fonctionnalités :

  • Sessions multiples : prend en charge plusieurs sessions concurrentes par slot.
  • Suivi de l'état : indique si une session est ouverte et dans l'état utilisateur.
  • Isolation : chaque session dispose de sa propre table de mappage des handles d'objet.
  • Nettoyage : libère les ressources à la fermeture de la session.
Aucun code PIN n'est transmis

C_Login fait entrer dans l'état utilisateur mais n'envoie pas de code PIN. L'authentification auprès du Cockpit repose sur le jeton bearer access_guid transporté avec chaque requête (voir la couche SDK DuoKey).

Gestion des handles d'objet​

Oracle référence les objets par des handles entiers, tandis que DuoKey Cockpit référence les clés par des identifiants durables. La couche interface effectue le mappage entre les deux par session — consultez le mappage des handles d'objet pour le modèle complet.

Oracle uses: integer object handle (e.g. 0x12345)
|
Library maps to: DuoKey key identifier

Traitement des mécanismes​

La couche accepte les mécanismes Cryptoki standard qu'Oracle TDE utilise — CKM_AES_KEY_GEN pour la clé maître et CKM_AES_CBC_PAD pour wrapper les clés de table et de tablespace — et achemine l'opération et ses paramètres (IV, padding) vers les couches inférieures. Consultez les mécanismes cryptographiques pour les détails, notamment la raison pour laquelle le chemin AES-CBC préservant la longueur est requis pour le TDE.

Traitement des attributs​

La couche traite les modèles d'attributs PKCS#11 pour la création et la recherche d'objets. Attributs courants :

  • CKA_CLASS — classe d'objet (clé secrète, objet de données)
  • CKA_KEY_TYPE — type de clé (par exemple CKK_AES)
  • CKA_LABEL / CKA_ID — utilisés pour localiser la clé maître
  • CKA_ENCRYPT / CKA_DECRYPT / CKA_WRAP / CKA_UNWRAP — indicateurs de capacité

CKA_VALUE est sensible : C_GetAttributeValue le refuse (CKR_ATTRIBUTE_SENSITIVE), de sorte que les octets de la clé maître ne sont jamais renvoyés à l'appelant.

Fonctions clés​

C_Initialize​

Lit la configuration pkcs11.toml et établit la connexion à DuoKey Cockpit.

  • Lit le fichier de configuration (ou les surcharges via les variables d'environnement DKE_PKCS11_*).
  • Prépare le client HTTPS avec le jeton bearer access_guid.
  • Vérifie la connectivité au Cockpit.
  • Renvoie CKR_OK en cas de succès, ou CKR_DEVICE_ERROR si le Cockpit est injoignable.

C_OpenSession​

Ouvre une session avec le token, initialise l'état de session et crée la table de mappage des handles d'objet de la session.

C_Login​

Fait entrer dans l'état utilisateur. Aucun code PIN n'est transmis — le jeton bearer présenté à chaque requête constitue l'identifiant — de sorte que cet appel valide l'état de préparation plutôt que d'effectuer une connexion interactive.

C_GenerateKey​

Provisionne la clé maître AES-256 : valide le mécanisme, analyse le modèle d'attributs, demande la création de la clé dans le Cockpit, mappe l'identifiant de clé renvoyé vers un handle et renvoie le handle à Oracle.

C_FindObjects​

Localise la clé maître par CKA_LABEL / CKA_ID, en mappant chaque clé correspondante vers un handle de session.

C_Encrypt / C_Decrypt​

Wrappe / unwrappe les clés de table et de tablespace sous la clé maître. Les formes mono-partie et multi-parties sont toutes deux prises en charge ; la couche résout le handle vers un identifiant de clé, achemine l'opération vers le Cockpit et renvoie le résultat.

Gestion des erreurs​

La couche traduit les erreurs des couches inférieures et de transport en codes de retour Cryptoki standard afin qu'Oracle obtienne des résultats cohérents :

ConditionCode PKCS#11
Cockpit injoignable / erreur backendCKR_DEVICE_ERROR
Échec d'authentificationCKR_PIN_INCORRECT
Handle d'objet inconnuCKR_OBJECT_HANDLE_INVALID
Paramètre invalideCKR_ARGUMENTS_BAD
Mécanisme non pris en chargeCKR_MECHANISM_INVALID
Attribut sensible demandéCKR_ATTRIBUTE_SENSITIVE

Étapes suivantes​