J'ai besoin d'envelopper une RSAPrivateKey dans un HSM, de sorte qu'elle puisse être envoyée à un CA Microsoft pour l'archivage de la clé et je ne suis pas sûr de l'approche à adopter.
Le problème est que le format de clé RSA de Microsoft est propriétaire et ne semble pas être pris en charge par pkcs11 ou le HSM nCipher que ma société utilise.
http://msdn.microsoft.com/en-us/library/cc250013.aspx
S'il s'agissait simplement d'une RSAPrivateKey, il serait simple de générer la paire de clés dans le HSM, de charger la clé d'enveloppement dans le HSM, d'envelopper la RSAPrivateKey et d'extraire les octets de la clé enveloppée. Mais comme ce format de clé n'est pas pris en charge, je dois adopter une approche différente.
Ma première idée a été d'étendre RSAPrivateKey et de surcharger la méthode getEncoded() pour retourner ce format de clé propriétaire. J'utilise le wrapper IAIK pkcs11 qui fournit une API de haut niveau pour pkcs11 en Java et il y a un certain support pour créer des types de clés définis par le vendeur. Cependant, l'interface pour les clés définies par le fournisseur semble n'exister que comme une commodité pour étendre les types de clés intégrés dans le code client et ne permet pas réellement de modifier l'encodage des clés dans le HSM.
La deuxième idée était d'utiliser un objet de données pkcs11 et de le traiter simplement comme le blob de la clé, puis de le chiffrer avec la clé enveloppante. Le même problème se pose ici : pour copier les octets de la clé privée dans l'objet de données, il semble que je doive extraire les octets de la clé privée dans le code de l'application, puis créer l'objet de données à partir de là, ce qui va à l'encontre de l'intérêt de disposer des clés dans le HSM.
Je cherche des alternatives à ces approches ou peut-être y a-t-il une fonctionnalité de pkcs11 que j'ai négligée et qui me permettrait de le faire ? Tout commentaire serait apprécié.