Tester avec pkcs11-tool
Guide complet pour tester la bibliothèque PKCS#11 de DuoKey à l'aide d'OpenSC pkcs11-tool
Prérequis
Prérequis
- OpenSC pkcs11-tool installé
- Bibliothèque PKCS#11 de DuoKey compilée (libdke_pkcs11.so ou dke_pkcs11.dll)
- Un fichier pkcs11.toml (chemin dans DKE_PKCS11_CONF) ou des variables DKE_PKCS11_* configurées (voir Vue d'ensemble → Configuration)
1234) peut être n'importe quelle valeur car elle n'est pas actuellement validée par la bibliothèque. Elle est requise par la syntaxe de pkcs11-tool mais ignorée par la bibliothèque DuoKey.Informations générales
Afficher les informations du token
pkcs11-tool --module ./libdke_pkcs11.so --list-token-slots
Lister les mécanismes pris en charge
pkcs11-tool --module ./libdke_pkcs11.so --list-mechanisms
Lister les objets et les clés
Lister tous les objets
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so --list-objects
Lister une clé spécifique par label
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--list-objects \
--label "test-key-RSA-2048"
Filtrer par type de clé
# List public keys only
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--list-objects \
--type pubkey
# List by key type (e.g., AES)
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--list-objects \
--key-type "AES"
--key-type est défectueux (ne fonctionne pas) dans la version 0.26 de pkcs11-tool.Exporter les clés publiques
Seules les clés publiques peuvent être exportées. Les clés privées restent protégées dans le backend du Cockpit.
Exporter une clé publique RSA
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--read-object \
--type pubkey \
--label "test-key-RSA-2048" \
--output-file test-key-RSA-2048.pubkey
Exporter une clé publique ECC
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--read-object \
--type pubkey \
--label "test-key-ECC-256" \
--output-file test-key-ECC-256.pubkey
Chiffrement et déchiffrement
--list-objects ci-dessus pour découvrir l'ID de clé à utiliser.Chiffrement / déchiffrement RSA
# Encrypt
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--encrypt \
--mechanism RSA-PKCS-OAEP \
--hash-algorithm sha256 \
--mgf MGF1-SHA256 \
--id "63336235376338372d333734662d346366332d396231332d626532353837333865666336" \
--input-file plaintext.txt \
--output-file encrypted.txt
# Decrypt
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--decrypt \
--mechanism RSA-PKCS-OAEP \
--hash-algorithm sha256 \
--mgf MGF1-SHA256 \
--id "63336235376338372d333734662d346366332d396231332d626532353837333865666336" \
--input-file encrypted.txt \
--output-file plaintext-2.txt
Chiffrement / déchiffrement AES-GCM
# Encrypt with AES-GCM
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--encrypt \
--mechanism AES-GCM \
--iv 000102030405060708090a0b0c0d0e0f \
--aad "48656c6c6f" \
--tag-bits-len 128 \
--id "30613263353462622d643436322d343864632d613132302d343135326661393033323063" \
--input-file plaintext.txt \
--output-file encrypted-aes.txt
# Decrypt with AES-GCM
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--decrypt \
--mechanism AES-GCM \
--iv 000102030405060708090a0b0c0d0e0f \
--aad "48656c6c6f" \
--tag-bits-len 128 \
--id "30613263353462622d643436322d343864632d613132302d343135326661393033323063" \
--input-file encrypted-aes.txt \
--output-file plaintext-2-aes.txt
Chiffrement / déchiffrement AES-CBC-PAD
# Encrypt with AES-CBC-PAD
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--encrypt \
--mechanism AES-CBC-PAD \
--iv 000102030405060708090a0b0c0d0e0f \
--id "30613263353462622d643436322d343864632d613132302d343135326661393033323063" \
--input-file plaintext.txt \
--output-file encrypted-aes-cbc.txt
# Decrypt with AES-CBC-PAD
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--decrypt \
--mechanism AES-CBC-PAD \
--iv 000102030405060708090a0b0c0d0e0f \
--id "30613263353462622d643436322d343864632d613132302d343135326661393033323063" \
--input-file encrypted-aes-cbc.txt \
--output-file plaintext-2-aes-cbc.txt
Gestion des objets
Les objets sont créés par les commandes de génération de clé ci-dessous ou découverts avec --list-objects. La création d'un objet de données avec --write-object n'est pas prise en charge (C_CreateObject).
Supprimer une clé
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--delete-object \
--type secrkey \
--label 'test-pkcs11-generated-key-aes-1'
La création d'objets (--write-object), la copie d'objets et la modification d'attributs ne sont pas prises en charge. Voir Couverture des fonctions.
Génération de clés
Générer une paire de clés RSA
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--keypairgen \
--label 'test-pkcs11-generated-key-rsa' \
--key-type RSA:2048
Générer une clé AES
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--keygen \
--label 'test-pkcs11-generated-key-aes-1' \
--key-type AES:256
Mises en garde
La signature / vérification et l'encapsulation / désencapsulation sont prises en charge (pour les clés RSA / EC ; elles ne s'appliquent pas aux clés maîtres Oracle TDE, qui sont AES uniquement). Les véritables mises en garde sont :
| Élément | Remarque |
|---|---|
| Création d'objet (--write-object) | Non prise en charge (C_CreateObject / C_CopyObject / C_SetAttributeValue). |
| Opérations multi-parties | Seules les opérations single-part de chiffrement / déchiffrement / signature / vérification / digest sont prises en charge. |
| Dérivation de clé | Non prise en charge (C_DeriveKey). |
| Digest SHA-1 | CKM_SHA_1 est annoncé mais rejeté par le backend — utilisez SHA-256 / 384 / 512. |
| Filtre --key-type | Défectueux dans pkcs11-tool 0.26 (un bug de pkcs11-tool, pas de la bibliothèque). |