0 votes

M2Crypto : Est-ce que PKey est une référence à une clé publique ou privée ?

Dans la documentation de la classe PKey du package python M2Crypto (une surcouche OpenSSL pour Python), il est dit que PKey est une référence à une clé publique.

Mon avis est plutôt que c'est une référence à une clé privée car la méthode init de la classe PKey appelle la fonction openssl evp_pkey_new 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!

Il n'y a que deux explications possibles : soit la documentation de M2Crypto est incorrecte, soit le lien que j'ai mentionné contient des informations erronées.

Est-ce que quelqu'un peut m'aider à trouver la vérité?

2voto

Carlos D. Garza Points 21

La documentation pour EVP_PKEY_new indique directement qu'il est utilisé pour stocker des clés privées. Et je suis perdu comme l'auteur original l'est aussi puisque x509foo.get_pubkey() renvoie simplement une instance EVP.PKey et que stocker l'instance en 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 une méthode verify(self,pkey) mais ne me dit rien sur le type d'objet pkey. De même, il n'y a aucune documentation. Je suis aussi confus que l'auteur original puisque je pense à RSA au moins en termes de (e,n)#Clé publique (d,n)#Clé privée

et au mieux je pense aux 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 coéfficients supplémentaires pour rendre le déchiffrement plus rapide et t comme la fonction totient.

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

h = sig^e (mod n)

si les deux hashes correspondent vous savez que le message est authentique.

Le problème que j'ai est que EVP.Pkey prétend représenter une clé publique pourtant sa méthode assign_rsa() déclare qu'elle prend une paire de clés RSA en argument ("Je suppose que cela signifie la clé privée à ce stade". Tous les exemples que j'ai trouvés jusque-là ne sont que pour la création d'un certificat auto-signé (y compris les propres tests unitaires de M2Crypto. Je ne vois aucun test qui prend une requête x509 tierce et la signe avec son propre certificat et sa propre clé comme nous le verrions normalement en réalité. Les tests unitaires ne m'aident pas à comprendre comment signer des CSR généraux puisque les Requêtes X509 ne contiendront pas la clé privée. Pourtant les exemples des tests unitaires fonctionnent bien puisqu'ils sont auto-signés et le signataire avait déjà accès aux clés privées. En fait, le test_mkcert fait exactement cela; il prend la clé privée renvoyée par la méthode mkreq qui génère la requête x509.

Les docs de M2Crypto sont confuses puisqu'ils utilisent les termes pk,pkey et même pubkey de façon interchangeable.

1voto

caf Points 114951

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

(Par exemple, EVP_SealInit() et EVP_OpenInit prennent tous deux des paramètres EVP_PKEY).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X