2009-03-18 11 views
4

J'ai regardé la plupart des bibliothèques crypto python, j'ai décidé d'utiliser PyCrypto ou M2Crypto.
J'ai supprimé ezPyCrypto car il ne prend en charge que MD5 pour la signature et Keyczar car il n'est pas assez mature. J'ai donc lu que RSA est vulnérable à plusieurs attaques si le texte à chiffrer (ou le hachage de signature) n'est pas correctement rembourré.
Qu'est-ce que cela signifie?
Ni PyCrypto ni M2Crypto ne mentionnent quoi que ce soit à ce sujet et google n'a rien trouvé de pertinent. Ces bibliothèques ajoutent-elles automatiquement le paddign? Comment peut-on dire?Python: Comment ajouter un remplissage RSA?

Si la réponse à ce qui précède est non, qu'est-ce qui est considéré comme un bon rembourrage?

Répondre

6

PyCrypto n'ajoute pas le rembourrage mentionné.
M2Crypto fait à la place. M2Crypto est construit sur openSSL, supporte principalement tout ce dont vous avez besoin, est toujours maintenu et à jour tandis que PyCrypto émet plusieurs avertissements de désapprobation.

+1

Je ne sais pas si c'est 100% casher, mais ça marche (avec pycrypto) https://github.com/Brant/EncryptionExample/blob/master/python/encrypt.py –

0

Pas tout à fait sûr, mais si vous ajoutez un composant aléatoire à votre message RSA, il empêche les attaques de dictionnaire

1

J'ai récemment combattu par déterminer le cryptage ... cet article a beaucoup aidé à expliquer ce qui a été par ment padding:

http://www.di-mgt.com.au/cryptopad.html

(méthode me semblait le plus facile pour la mettre en œuvre)

je peux partager quelques extraits de code si nécessaire.

P.S. Ce fichier qui est pratique aussi pour aider à créer des clés sécurisées (google pour elle) PBKDF2.py - PKCS # 5 v2.0 Mot de passe-Based Dérivation Key

3

Une des raisons pour aléatoire remplissage pourrait être que « de la livre "RSA avec un exposant faible (disons 3) peut être craqué vraiment simplement si le même message est envoyé à plusieurs personnes (trois).

Vous feriez mieux de vous assurer que vous n'envoyez pas exactement le même message en appliquant une sorte de transformation aléatoire (mais inversible) à votre message avant.

Peut-être que c'est de quoi s'occupe le rembourrage!?

EDIT: J'ai regardé sur wikipedia. Ce dont je parlais s'appelait l'attaque de Hastad.

0

Premièrement, vous devriez utiliser AES, puisqu'il s'agit de la norme de facto.

AES chiffre les octets en blocs de 16 octets. Évidemment, cela fonctionne très bien pour n'importe quel gros morceau de données. Mais le dernier morceau, évidemment peut-être moins de 16 octets.

Pour le dernier bloc, vous devrez le remplir, et le remplissage typique est effectué via PCKS7, ce qui est assez simple. Disons que vous avez une chaîne: "icecream" comme dernier bloc.

"icecream" est de 8 octets, donc vous avez besoin encore 8 octets pour faire un bloc

Alors ce que vous faites est simplement juxtaposer le caractère 8 (non « 8 ») 8 fois

"icecream\x08\x08\x08\x08\x08\x08\x08\x08" 

Serait votre chaîne résultante. Maintenant vous allez crypter les données. Souvenez-vous que pendant le déchiffrement, vous devrez attraper ce dernier bloc, et dépouiller le rembourrage avant de l'utiliser.