Comment signer un document en python avec M2Crypto en utilisant la technique de remplissage particulier?

StackOverflow https://stackoverflow.com/questions/1677594

Question

Je dois signer numériquement un texte en python utilisant une clé privée stockée dans un fichier .pem. Il semble que M2Crypto est le meilleur moyen de le faire ces jours-ci, de sorte que ce que je me sers. Je pense que je reçois la plus grande partie, mais je suis confus sur la façon de configurer le rembourrage. Pour être précis, je dois vérifier la signature dans une application iPhone, en utilisant un système de remplissage appelé kSecPaddingPKCS1SHA1 et décrit comme ceci:

  

Les données à signer est un hachage SHA1.   rembourrage ASN.1 standard se fera, ainsi que le rembourrage PKCS1 de l'opération RSA sous-jacente.

Ne pas être un expert Crypto, je n'ai qu'une idée floue ce que cela signifie. J'ai essayé de regarder quelques-uns des RFCs, mais nous les avons trouvés impénétrables. Je vois que les méthodes de cryptage / décryptage des objets RSA prennent les types de remplissage, mais je ne vois pas quelque chose de semblable lié à la vérification de la signature.

Toute aide, en particulier avec le code, sera apprécié.

(Dans un certain sens c'est l'inverse de cette question.)


Ok, la réponse est donnée ci-dessous AFAICT correcte. Le code suivant génère une signature pour text qui valide sur l'iPhone en utilisant le schéma de remplissage de kSecPaddingPKCS1SHA1.

from M2Crypto import EVP
privkey = EVP.load_key("privkey.pem")
privkey.sign_init()
privkey.sign_update(text)
signature = privkey.sign_final()

(Désolé de éditorialiser, mais je peux dire simplement que les pirates sont quelques-uns des crypto auteurs de documentation Lousiest dans l'univers?)

Était-ce utile?

La solution

M2Crypto ajoute AFAIK aux endroits où il est nécessaire.

Rembourrage PKCS1 est la valeur par défaut.

Mais, (encore une fois que AFAIK), les signatures ne sont pas le rembourrage, le remplissage est seulement ajouté à des données cryptées pour empêcher une éventuelle attaque.
EDIT: utilisateur café, dans un commentaire dit qu'un rembourrage est essnetial à une bonne signature. Je vous recommande d'essayer encore avec le comportement par défaut M2Crypto, il pourrait l'ajouter.

Sur les documents générés par m2crypto vous peut voir que les {public, privé} _ {} encrypt, decrypt méthodes ont une option de remplissage, qui est PKCS1 par défaut, alors que le menthod signe en a pas.

OMI juste donner un coup de feu avec la valeur par défaut m2crypto params, il fonctionnera probablement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top