2010-05-18 4 views
3

J'ai du mal à trouver une méthode d'utilisation de RSA en mode ECB avec padding PKCS1 en python. J'ai regardé dans pyCrypto, mais ils n'ont pas padding PKCS1 dans la branche master (mais font dans un patch). Néanmoins j'ai trouvé RSA avec PKCS1 dans le paquet M2Crypto, mais je ne suis pas sûr de pouvoir choisir le mode ECB ...Comment créer une clé en utilisant RSA/ECB/PKCS1Padding en python?

Répondre

8

Le mode de chaînage tel que ECB n'a aucun sens pour RSA, à moins que vous ne le fassiez mal.

BCE est de chiffrement par bloc: les données d'entrée est divisé en blocs de taille égale, et chaque bloc est chiffré séparément. Cela induit certaines faiblesses, il est donc préférable d'éviter le mode ECB pour les chiffrements par bloc.

RSA n'est pas un chiffrement par bloc. En particulier, RSA agrandit nécessairement le message crypté: avec une clé RSA de 1024 bits (une taille assez typique), on peut crypter un message jusqu'à 117 octets, mais le résultat est une valeur de 128 octets. On pourrait imaginer prendre un message plus grand, le diviser en blocs individuels de longueur 117 octets (ou moins) et RSA-crypter chacun d'eux individuellement, mais personne ne fait jamais cela, principalement en raison de l'augmentation de la taille, et le CPU Coût. De plus, les problèmes de sécurité liés à cette division et recombinaison ne sont pas du tout étudiés, il est donc tout à fait possible que le résultat soit assez faible. Habituellement, lorsqu'une bibliothèque cryptographique nécessite un mode de remplissage dans le cadre d'un nom de l'algorithme, comme dans « RSA/ECB/PKCS1Padding », cela est dû uniquement aux contraintes syntaxiques sur le nom, et la partie de chaînage (ECB) est en fait ignoré (ce que Java le fait, par exemple). En pratique, lors du cryptage de certaines données qui peuvent être supérieures à la taille d'entrée RSA maximale, le cryptage hybride est utilisé: ce qui est crypté par RSA est une clé symétrique aléatoire (par exemple un ensemble de 16 octets uniformément aléatoires), et La clé est utilisée pour crypter symétriquement (par exemple avec AES) les données réelles. Ceci est plus efficace l'espace (car le chiffrement symétrique ne grossit pas de blocs) et CPU efficace (chiffrement symétrique est beaucoup plus rapide que le cryptage asymétrique, et en particulier le déchiffrement RSA ).

+0

Haha. Merci beaucoup. fait plus de sens pourquoi je ne peux pas trouver de soutien! Je suis un crypto noob. C'est pour un prac pour mon cours de sécurité internet. Apparemment le tuteur qui a mis le prac ne sait pas de quoi il parle, ou ne le sait que par Java. Merci beaucoup pour l'explication. En fait, je – rewolf

+1

besoin de crypte quelque chose qui serait avec JAVA et décrypter je reçois une erreur de BadPaddingException en Java depuis que je ne suis pas Specifier '' PKCS1Padding'' une idée de la façon de le forcer, même si ce n'est pas une bonne idée? – Natim

+0

Ok, j'ai utilisé http://stuvel.eu/files/python-rsa-doc/reference.html et cela fonctionne à partir de zéro. – Natim

Questions connexes