web-dev-qa-db-fra.com

Quelle est la différence entre un magasin de clés PKCS12 et un magasin de clés PKCS11?

Je suis intéressé par les bibliothèques Java-NSS, et je lis le Guide P11 de Sun . Je suis confus sur les points suivants:

Quelle est la différence entre l'utilisation d'un magasin de clés PKCS12 et d'un magasin de clés PKCS11?

Un magasin de clés est juste un magasin de clés, non? Y a-t-il des différences? Peuvent-ils être utilisés de manière interchangeable dans tous les aspects?

34
Cratylus

PKCS # 12 est un format de fichier (souvent appelé .p12 ou .pfx) où vous pouvez stocker une clé privée et des certificats. Il est principalement utilisé pour convertir/transporter des clés et des certificats. Si vous exportez une clé privée + un certificat à partir de votre navigateur, ce sera probablement dans ce format.

PKCS # 11 est une interface, généralement utilisée pour communiquer avec des jetons cryptographiques matériels (souvent des cartes à puce ou des jetons USB, qui sont en fait des cartes à puce intégrées dans un lecteur). Cette interface a un certain nombre d'opérations pour utiliser les clés et les certificats. Certains jetons peuvent signer à l'aide de la clé privée qu'ils contiennent, sans que la clé puisse quitter l'appareil. Le point de cette interface est de traiter ce qui gère les clés et les certificats comme une entité distincte, sans avoir à effectuer les opérations cryptographiques qu'offre PKCS # 11 (plus précisément, celles liées à la clé privée).

Lorsque vous utilisez PKCS # 11 avec NSS, vous utilisez effectivement NSS comme boîte noire enveloppée derrière la couche PKCS # 11 (c'est en fait un fournisseur de logiciels pour ce que serait un jeton matériel PKCS # 11). Il y a une légère différence dans la manière Java utilise NSS via PKCS # 11 en ce qu'il ne nécessite pas de bibliothèque partagée PKCS # 11 (par rapport aux autres bibliothèques PKCS # 11), donc en tant que tel , ce n'est pas PKCS # 11 à proprement parler, bien qu'il soit très similaire.

En Java, vous pourrez peut-être obtenir une instance RSAPrivateKey dans un magasin PKCS # 11, l'utiliser pour signer et déchiffrer, sans jamais pouvoir obtenir quoi que ce soit de son module. Le fournisseur de sécurité qui le gère fera la signature/le déchiffrement via la bibliothèque (et donc via le token, si cette bibliothèque est supportée par un token matériel).

Pour en revenir au KeyStore en Java, c'est une API qui peut vous permettre de charger et d'utiliser des clés et des certificats à partir de fichiers (vous obtenez différents formats de fichiers tels que JKS, PKCS # 12, PEM, selon votre fournisseur de sécurité ) ou à partir d'autres API sous-jacentes (telles que PKCS # 11, plus ou moins fusionnées avec NSS dans le fournisseur Sun, ou le KeychainStore si vous êtes sous OSX et que vous souhaitez utiliser le KeyChain comme KeyStore).

49
Bruno

De Différents types de fichier de clés dans Java - Présentation , les différences entre PKCS12 et PKCS11 peuvent être décrites comme suit

PKCS12 , il s'agit d'un type de magasin de clés standard qui peut être utilisé dans Java et d'autres langues. Vous pouvez trouver ce magasin de clés implémentation à Sun.security.pkcs12.PKCS12KeyStore. Il a généralement une extension p12 ou pfx. Vous pouvez stocker des clés privées, des clés secrètes et des certificats sur ce type. Contrairement à JKS, les clés privées du magasin de clés PKCS12 peuvent être extraites en Java. type est portable et peut être utilisé avec d'autres bibliothèques écrites dans d'autres langages tels que C, C++ ou C #.

Actuellement, le type de fichier de clés par défaut dans Java est JKS, c'est-à-dire que le format de fichier de clés sera JKS si vous ne spécifiez pas -storetype lors de la création de fichier de clés avec keytool. Cependant, le type de fichier de clés par défaut sera modifié à PKCS12 dans Java 9 car sa compatibilité améliorée par rapport à JKS. Vous pouvez vérifier le type de fichier de clés par défaut dans le fichier $ JRE/lib/security/Java.security:

PKCS11 , il s'agit d'un type de magasin de clés matériel. Il fournit une interface pour la bibliothèque Java pour se connecter avec des périphériques de clés matérielles tels que Luna, nCipher ou les cartes à puce de SafeNet. Vous pouvez trouver cette implémentation sur Sun.security.pkcs11.P11KeyStore. Lorsque vous chargez le magasin de clés, vous n'avez pas besoin de créer un fournisseur spécifique avec une configuration spécifique. Ce magasin de clés peut stocker des clés privées, des clés secrètes et des certificats. Lors du chargement du magasin de clés, les entrées seront récupérées du magasin de clés puis converties en entrées logicielles.

3
PixelsTech