Aller au contenu principal

Mécanismes cryptographiques

La bibliothèque DuoKey PKCS#11 prend en charge un ensemble complet de mécanismes cryptographiques requis par Oracle TDE. Cette page détaille tous les algorithmes pris en charge, leur utilisation et la manière dont ils sont traduits en appels à l'API DuoKey Cockpit.

Vue d'ensemble​

Chiffrement symétrique​

AES-GCM (Galois/Counter Mode)​

Mécanisme PKCS#11 : CKM_AES_GCM

Description : Mode de chiffrement authentifié qui assure à la fois la confidentialité et l'authenticité.

Caractéristiques :

  • Authentification : inclut un tag d'authentification pour détecter les altérations
  • Données additionnelles : prend en charge les données additionnelles authentifiées (AAD)
  • IV : nécessite un vecteur d'initialisation (IV)
  • Performance : prise en charge efficace de l'accélération matérielle

Utilisation :

CK_MECHANISM mechanism = {
mechanism: CKM_AES_GCM,
pParameter: &gcmParams,
ulParameterLen: sizeof(gcmParams)
};

CK_GCM_PARAMS gcmParams = {
pIv: iv, // 12 bytes recommended
ulIvLen: 12,
ulIvBits: 96, // IV length in bits
pAAD: aad, // Additional authenticated data
ulAADLen: aadLen,
ulTagBits: 128 // Authentication tag length
};

Traduction en API DuoKey :

{
"algorithm": "AES-GCM",
"iv": "base64-encoded-iv",
"aad": "base64-encoded-aad",
"tagLength": 128
}

Cas d'usage :

  • Chiffrement de haute sécurité avec vérification d'intégrité
  • Lorsque l'authentification des données chiffrées est requise
  • Prend en charge les opérations mono-partie et multi-partie avec IV, AAD et longueur de tag configurable

AES-CBC (Cipher Block Chaining)​

Mécanisme PKCS#11 : CKM_AES_CBC

Description : Mode de chiffrement par blocs qui enchaîne les blocs entre eux.

Caractéristiques :

  • Taille de bloc : 128 bits (16 octets)
  • IV requis : doit fournir un vecteur d'initialisation
  • Remplissage : nécessite un remplissage manuel (ou utiliser CBC-PAD)

Utilisation :

CK_MECHANISM mechanism = {
mechanism: CKM_AES_CBC,
pParameter: iv,
ulParameterLen: 16 // IV length = block size
};

Traduction en API DuoKey :

{
"algorithm": "AES-CBC",
"iv": "base64-encoded-iv"
}

Cas d'usage :

  • Compatibilité héritée (legacy)
  • Lorsqu'un enchaînement de blocs spécifique est requis

AES-CBC-PAD (CBC avec remplissage PKCS#7)​

Mécanisme PKCS#11 : CKM_AES_CBC_PAD

Description : Mode CBC avec remplissage PKCS#7 automatique.

Caractéristiques :

  • Remplissage automatique : gère le remplissage automatiquement
  • Longueur variable : peut chiffrer des données de toute longueur
  • IV requis : doit fournir un vecteur d'initialisation

Utilisation :

CK_MECHANISM mechanism = {
mechanism: CKM_AES_CBC_PAD,
pParameter: iv,
ulParameterLen: 16
};

Traduction en API DuoKey :

{
"algorithm": "AES-CBC",
"iv": "base64-encoded-iv",
"padding": "PKCS7"
}

Cas d'usage :

  • Oracle TDE : mécanisme principal pour les opérations de chiffrement de tablespace Oracle TDE
  • Chiffrement de données de longueur variable
  • Lorsqu'un remplissage est requis
  • Prend en charge les opérations mono-partie (C_Encrypt/C_Decrypt) et multi-partie (C_EncryptUpdate/C_EncryptFinal)

Détails du remplissage :

Plaintext: "Hello World" (11 bytes)
Block Size: 16 bytes
Padding Needed: 5 bytes

Padded Data:
[Hello World][05 05 05 05 05]

Chiffrement asymétrique​

RSA-OAEP-256​

Mécanisme PKCS#11 : CKM_RSA_PKCS_OAEP

Description : Chiffrement RSA avec Optimal Asymmetric Encryption Padding utilisant SHA-256.

Caractéristiques :

  • Taille de clé : 2048, 3072 ou 4096 bits
  • Algorithme de hachage : SHA-256
  • MGF : MGF1 avec SHA-256
  • Label : paramètre de label optionnel

Utilisation :

CK_MECHANISM mechanism = {
mechanism: CKM_RSA_PKCS_OAEP,
pParameter: &oaepParams,
ulParameterLen: sizeof(oaepParams)
};

CK_RSA_PKCS_OAEP_PARAMS oaepParams = {
hashAlg: CKM_SHA256,
mgf: CKG_MGF1_SHA256,
source: CKZ_DATA_SPECIFIED,
pSourceData: label,
ulSourceDataLen: labelLen
};

Traduction en API DuoKey :

{
"algorithm": "RSA-OAEP-256",
"label": "base64-encoded-label"
}

Cas d'usage :

  • Encapsulation/désencapsulation (wrapping/unwrapping) de clés
  • Échange de clés sécurisé
  • Fonctionnalités futures d'Oracle TDE

Génération de clés​

Génération de clé AES​

Mécanisme PKCS#11 : CKM_AES_KEY_GEN

Tailles de clé prises en charge :

  • 128 bits (16 octets) - CKA_VALUE_LEN = 16
  • 192 bits (24 octets) - CKA_VALUE_LEN = 24
  • 256 bits (32 octets) - CKA_VALUE_LEN = 32 (recommandé)

Utilisation :

CK_MECHANISM mechanism = {
mechanism: CKM_AES_KEY_GEN,
pParameter: NULL,
ulParameterLen: 0
};

CK_ATTRIBUTE template[] = {
{CKA_KEY_TYPE, &keyType, sizeof(keyType)}, // CKK_AES
{CKA_VALUE_LEN, &keySize, sizeof(keySize)}, // 32 for 256-bit
{CKA_LABEL, label, labelLen},
{CKA_ENCRYPT, &true, sizeof(true)},
{CKA_DECRYPT, &true, sizeof(true)}
};

Traduction en API DuoKey :

{
"algorithm": "AES",
"keySize": 256,
"label": "ORACLE.TDE.CDB$ROOT.MK.20251219"
}

Utilisation avec Oracle TDE :

  • Clés de chiffrement maîtres : clés AES 256 bits (par défaut)
  • Clés de table : chiffrées avec la clé maître
  • Clés de tablespace : chiffrées avec la clé maître

Génération de paire de clés RSA​

Mécanisme PKCS#11 : CKM_RSA_PKCS_KEY_PAIR_GEN

Tailles de clé prises en charge :

  • 2048 bits - Minimum recommandé
  • 3072 bits - Recommandé pour une sécurité élevée
  • 4096 bits - Sécurité maximale

Utilisation :

CK_MECHANISM mechanism = {
mechanism: CKM_RSA_PKCS_KEY_PAIR_GEN,
pParameter: NULL,
ulParameterLen: 0
};

CK_ATTRIBUTE publicTemplate[] = {
{CKA_MODULUS_BITS, &modulusBits, sizeof(modulusBits)}, // 2048, 3072, 4096
{CKA_PUBLIC_EXPONENT, &pubExp, sizeof(pubExp)} // Usually 65537
};

CK_ATTRIBUTE privateTemplate[] = {
{CKA_DECRYPT, &true, sizeof(true)},
{CKA_SIGN, &true, sizeof(true)}
};

Traduction en API DuoKey :

{
"algorithm": "RSA",
"keySize": 2048,
"publicExponent": 65537
}

Cas d'usage :

  • Encapsulation de clés
  • Signatures numériques
  • Échange de clés sécurisé

Génération de paire de clés ECC​

Mécanisme PKCS#11 : CKM_EC_KEY_PAIR_GEN

Courbes prises en charge :

  • P-256 (secp256r1) - CKA_EC_PARAMS = secp256r1
  • P-384 (secp384r1) - CKA_EC_PARAMS = secp384r1
  • P-521 (secp521r1) - CKA_EC_PARAMS = secp521r1

Utilisation :

CK_MECHANISM mechanism = {
mechanism: CKM_EC_KEY_PAIR_GEN,
pParameter: NULL,
ulParameterLen: 0
};

CK_ATTRIBUTE publicTemplate[] = {
{CKA_EC_PARAMS, ecParams, ecParamsLen} // Curve OID
};

Traduction en API DuoKey :

{
"algorithm": "ECC",
"curve": "P-256"
}

Cas d'usage :

  • Cryptographie sur courbes elliptiques
  • Fonctionnalités futures d'Oracle TDE
  • Opérations asymétriques hautes performances

Traduction des mécanismes​

La bibliothèque traduit les constantes de mécanisme PKCS#11 en paramètres de l'API DuoKey Cockpit.

Table de traduction​

Constante PKCS#11MécanismeAlgorithme API DuoKeyParamètres
CKM_AES_KEY_GENGénération de clé AES"AES"keySize: 128/192/256
CKM_AES_CBCAES-CBC"AES-CBC"iv: <iv>
CKM_AES_CBC_PADAES-CBC avec remplissage"AES-CBC"iv: <iv>, padding: "PKCS7"
CKM_AES_GCMAES-GCM"AES-GCM"iv: <iv>, aad: <aad>, tagLength: 128
CKM_RSA_PKCS_KEY_PAIR_GENPaire de clés RSA"RSA"keySize: 2048/3072/4096
CKM_RSA_PKCS_OAEPRSA-OAEP"RSA-OAEP-256"label: <label>
CKM_EC_KEY_PAIR_GENPaire de clés ECC"ECC"curve: "P-256/P-384/P-521"

Processus de traduction​

Exemple de traduction :

// PKCS#11 Input
mechanism := CKM_AES_CBC_PAD
parameters := []byte{...} // IV

// Translation
apiRequest := {
Algorithm: "AES-CBC",
IV: base64.Encode(parameters),
Padding: "PKCS7"
}

Utilisation avec Oracle TDE​

Génération de la clé maître​

Mécanisme : CKM_AES_KEY_GEN

Taille de clé : 256 bits (32 octets)

Attributs :

  • CKA_LABEL : "ORACLE.TDE.CDB$ROOT.MK.########"
  • CKA_ENCRYPT : TRUE
  • CKA_DECRYPT : TRUE
  • CKA_WRAP : TRUE
  • CKA_UNWRAP : TRUE

Chiffrement de clé de table​

Mécanisme : CKM_AES_CBC_PAD

Processus :

  1. Oracle génère une clé de chiffrement de table (TEK)
  2. Oracle chiffre la TEK avec la clé maître en utilisant CBC-PAD
  3. La TEK chiffrée est stockée dans le dictionnaire de données

Chiffrement de clé de tablespace​

Mécanisme : CKM_AES_CBC_PAD

Processus :

  1. Oracle génère une clé de chiffrement de tablespace
  2. Oracle chiffre la clé avec la clé maître en utilisant CBC-PAD
  3. La clé chiffrée est stockée dans l'en-tête du tablespace

Considérations de sécurité​

Tailles de clé​

AES :

  • 128 bits : minimum, acceptable pour la plupart des cas d'usage
  • 192 bits : bonne sécurité
  • 256 bits : recommandé, sécurité maximale

RSA :

  • 2048 bits : minimum recommandé
  • 3072 bits : recommandé pour les nouveaux déploiements
  • 4096 bits : sécurité maximale, performance plus lente

ECC :

  • P-256 : équivalent à RSA 3072 bits
  • P-384 : équivalent à RSA 7680 bits
  • P-521 : sécurité maximale

Gestion des IV​

Bonnes pratiques :

  • IV aléatoires : toujours utiliser des IV aléatoires pour chaque chiffrement
  • Longueur d'IV : faire correspondre la longueur de l'IV à la taille de bloc (16 octets pour AES)
  • Stockage des IV : stocker l'IV avec le texte chiffré
  • Réutilisation des IV : ne jamais réutiliser un IV avec la même clé

Attaques par padding oracle​

Protection :

  • Utiliser le chiffrement authentifié (AES-GCM) lorsque c'est possible
  • Valider correctement le remplissage
  • Utiliser des opérations à temps constant

Considérations de performance​

Performance des algorithmes​

Symétrique (AES) :

  • Accélération matérielle : les CPU modernes disposent des instructions AES-NI
  • Débit : très élevé (Go/s)
  • Latence : faible (microsecondes)

Asymétrique (RSA) :

  • Performance : plus lent que le symétrique
  • Impact de la taille de clé : des clés plus grandes = opérations plus lentes
  • Cas d'usage : échange de clés, pas chiffrement en masse

ECC :

  • Performance : plus rapide que RSA pour une sécurité équivalente
  • Taille de clé : clés plus petites que RSA
  • Cas d'usage : opérations asymétriques hautes performances

Conseils d'optimisation​

  1. Utiliser AES-GCM lorsque l'authentification est nécessaire (opération unique)
  2. Utiliser AES-CBC-PAD pour la compatibilité Oracle TDE
  3. Mettre en cache les clés dans la session pour éviter les recherches répétées
  4. Regrouper les opérations lorsque c'est possible (amélioration future)

Étapes suivantes​