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.
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_OKen cas de succès, ouCKR_DEVICE_ERRORsi 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 :
| Condition | Code PKCS#11 |
|---|---|
| Cockpit injoignable / erreur backend | CKR_DEVICE_ERROR |
| Échec d'authentification | CKR_PIN_INCORRECT |
| Handle d'objet inconnu | CKR_OBJECT_HANDLE_INVALID |
| Paramètre invalide | CKR_ARGUMENTS_BAD |
| Mécanisme non pris en charge | CKR_MECHANISM_INVALID |
| Attribut sensible demandé | CKR_ATTRIBUTE_SENSITIVE |
Étapes suivantes
- Couche SDK DuoKey → - Comment les opérations atteignent DuoKey Cockpit
- Mappage des handles d'objet → - Comprendre la traduction des handles
- Flux de communication → - Voir comment les opérations transitent dans le système