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#11 | Mécanisme | Algorithme API DuoKey | Paramètres |
|---|---|---|---|
CKM_AES_KEY_GEN | Génération de clé AES | "AES" | keySize: 128/192/256 |
CKM_AES_CBC | AES-CBC | "AES-CBC" | iv: <iv> |
CKM_AES_CBC_PAD | AES-CBC avec remplissage | "AES-CBC" | iv: <iv>, padding: "PKCS7" |
CKM_AES_GCM | AES-GCM | "AES-GCM" | iv: <iv>, aad: <aad>, tagLength: 128 |
CKM_RSA_PKCS_KEY_PAIR_GEN | Paire de clés RSA | "RSA" | keySize: 2048/3072/4096 |
CKM_RSA_PKCS_OAEP | RSA-OAEP | "RSA-OAEP-256" | label: <label> |
CKM_EC_KEY_PAIR_GEN | Paire 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: TRUECKA_DECRYPT: TRUECKA_WRAP: TRUECKA_UNWRAP: TRUE
Chiffrement de clé de table
Mécanisme : CKM_AES_CBC_PAD
Processus :
- Oracle génère une clé de chiffrement de table (TEK)
- Oracle chiffre la TEK avec la clé maître en utilisant CBC-PAD
- 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 :
- Oracle génère une clé de chiffrement de tablespace
- Oracle chiffre la clé avec la clé maître en utilisant CBC-PAD
- 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
- Utiliser AES-GCM lorsque l'authentification est nécessaire (opération unique)
- Utiliser AES-CBC-PAD pour la compatibilité Oracle TDE
- Mettre en cache les clés dans la session pour éviter les recherches répétées
- Regrouper les opérations lorsque c'est possible (amélioration future)
Étapes suivantes
- Couche interface PKCS#11 → - Voir comment les mécanismes sont utilisés
- Flux de communication → - Comprendre le flux des opérations
- Configuration → - En savoir plus sur la configuration des mécanismes