Qu’est-ce que le PKCS#11 ?
PKCS#11 définit une API pour communiquer avec des jetons de sécurité cryptographiques ("tokens cryptographiques") tels que les cartes à puce, les clés USB et les modules de sécurité matérielle (HSM). Également connu sous le nom de "Cryptoki", PKCS#11 fait partie des normes de cryptographie à clé publique.
PKCS#11 est une API indépendante de la plate-forme qui peut être utilisée pour gérer et utiliser le matériel de sécurité cryptographique. Ces dispositifs matériels sont souvent appelés "tokens cryptographiques", d’où le nom "Cryptoki" (de Cryptographic Token Interface).
Le matériel de sécurité cryptographique peut comprendre :
- Les "clés USB
- Les cartes à puce
- Les modules de sécurité matérielle (HSM) (Hardwar Security Modules)
L’API PKCS#11 permet la gestion (création, modification, suppression) des objets cryptographiques en marge du jeton, notamment :
- clés RSA
- Certificats X.509
- clés symétriques (par exemple, AES, 3DES)
- clés de la "Cryptographie à courbe elliptique (ECC)
Les applications logicielles peuvent appeler l’API pour utiliser ces objets pour :
- Cryptage/Décryptage
- Calcul et vérification de la signature numérique
PKCS#11 dans le logiciel d’application
Le PKCS#11 résume les détails spécifiques de la communication sous-jacente entre l’application et le matériel cryptographique. Une suite d’applications logicielles typique utilisant le PKCS#11 est présentée ci-dessous.
L’application appelle l’API PKCS#11 qui est fournie soit par une bibliothèque spécifique au fournisseur, soit par une bibliothèque PKCS#11 commune qui inclut la fonctionnalité de communiquer avec le matériel de divers fournisseurs (par exemple, OpenSC).
L’implémentation PKCS#11 utilise généralement un PC/SC pour communiquer avec le matériel de cryptage. PC/SC est une spécification pour l’intégration des cartes à puce dans les environnements informatiques. Le support PC/SC est intégré à Windows depuis XP et une implémentation gratuite est disponible pour Linux et Mac.
PKCS#11 Software Development
PKCS#11 est principalement une API C avec des fichiers d’en-tête de référence disponibles auprès d’OASIS (le comité technique PKCS11 d’OASIS a repris la maintenance de la norme PKCS#11 de RSA Security en 2013).
Des ports et des wrappers existent pour d’autres langues, notamment :
- C/C++
- Les fichiers d’en-tête de référence sont disponibles sur OASIS. Le SDK Microcosm PKI comprend les fichiers d’en-tête, le code échantillon C et les binaires Windows
- Java
- Sun PKCS#11 provider (in package
sun.security.pkcs11.SunPKCS11
) qui est inclus dans Java SE. - IAIK PKCS#11 wrapper.
- Des exemples d’utilisation des deux sont inclus dans le Microcosm PKI SDK
- Sun PKCS#11 provider (in package
- C# et VB.NET
- Les wrappers existent, mais Microcosm n’en cautionne pas un en particulier. Une recherche rapide sur Google présentera plusieurs options
- Javascript
pkcs11.js
vous permet d’appeler des jetons cryptographiques directement depuis une page web en utilisant Javascript. Ceci est inclus dans le SDK Microcosm PKI