2010-05-01 4 views
0

Dans la documentation de classe PKey du package M2Crypto python (un wrapper OpenSSL pour Python), il est dit que PKey est une référence à une clé publique. Mon opinion est plutôt qu'il s'agit d'une référence à une clé privée car la méthode init de la classe PKey appelle la fonction evs_pkey_new openssl qui, à partir de ce lien: http://linux.die.net/man/3/evp_pkey_new, devrait allouer une nouvelle référence à une structure de clé privée!M2Crypto: PKey est-il une référence à une clé publique ou privée?

Il y a deux explications possibles: La documentation de M2Crypto est erronée ou le lien que j'ai rapporté a de fausses informations.

Quelqu'un peut-il m'aider à trouver la vérité?

Répondre

1

La documentation OpenSSL est incomplète - la structure EVP_PKEY allouée par EVP_PKEY_new() est utilisé pour stocker soit ou privées clés publiques. Le type de clé est déterminé par ce que vous chargez plus tard dans la structure.

(par exemple EVP_SealInit() et EVP_OpenInit prendre les paramètres EVP_PKEY).

2

La documentation de EVP_PKEY_new indique directement son utilisation pour stocker les clés privées. Et je suis perdu car l'affiche originale est depuis que x509foo.get_pubkey() retourne juste une instance de EVP.PKey et que l'instance de stockage de l'instance comme pem montre PRIVATE KEY. Je ne peux pas prétendre connaître l'intention de l'équipe M2Crypto puisque de nombreuses fonctions qui utilisent PKey ne sont pas documentées. Par exemple, un objet de requête x509 a un verify (self, pkey) mais ne me dit rien sur le type d'objet pkey. De même là ou toute documentation. Je suis tout aussi confus que la auther originale puisque je pense RSA à tout le moins de termes nn (e, n) clé #Public (d, n) #Private clés

et, au mieux, je pense à Les clés privées (d, n, p, q, dp, dq, qinv, t) où p et q sont les grands nombres premiers dp et dq et qinv sont des coeficiants supplémentaires pour rendre décryptage plus rapide et t comme fonction de totient.

La raison pour laquelle la distinction aurait dû être plus claire dans la documentation est parfois que vous voulez chiffrer avec les clés privées (dans le cas d'une signature) afin que tout le monde puisse vérifier en les décrémentant avec la clé publique. h = hachage (m) sig = h^d (mod n) seulement un qui sait d (La clé privée) pourrait créer la signature. La vérification est faite par

h = sig^e (mod n)

si les deux hash savez que vous correspondent le message est authentique. Le problème que j'ai est EVP.Pkey claimes à représenter une clé publique encore sa méthode assign_rsa() déclare qu'il prend dans une paire de clés RSA ("Je suppose que cela signifie que la clé privée à ce stade" Tous les exemples que j'ai trouvés jusqu'ici sont uniquement pour créer un cert auto-signé (y compris les tests unitaires de M2Crypto.) Je ne vois aucun test qui accepte une requête tierce x509 et la signe avec son propre ca cert et sa clé Les tests unitaires ne m'aident pas à déterminer comment signer les CSR généraux puisque les demandes X509 ne contiendront pas la clé privée, mais les exemples de tests unitaires fonctionnent bien car ils sont auto-signés et le signataire déjà En effet, le test test_mkcert fait exactement ce qu'il faut pour que la clé privée soit rendue par la méthode mkreq qui génère le x50 9 demande.

Les documents M2Crypto sont confus car ils utilisent les termes pk, pkey et même pubkey de manière interchangeable.

Questions connexes