Question

J'ai consulté la plupart des bibliothèques de crypto python. J'ai décidé d'utiliser PyCrypto ou M2Crypto.
J'ai rejeté 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 rempli.
Qu'est-ce que cela signifie?
Ni PyCrypto ni M2Crypto ne font état de cela et Google n'a rien trouvé de pertinent. Est-ce que ces bibliothèques ajoutent automatiquement le paddign? Comment peut-on savoir?

Si la réponse à la question ci-dessus est non, qu'est-ce qui est considéré comme un remplissage adéquat?

Était-ce utile?

La solution

PyCrypto n'ajoute pas le remplissage mentionné.
M2Crypto le fait à la place.

M2Crypto est basé sur openSSL, prend en charge tout ce dont vous avez besoin, est toujours mis à jour et actualisé, tandis que PyCrypto émet plusieurs avertissements de dépréciation.

Autres conseils

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

Vous feriez donc mieux de ne pas envoyer le même message en appliquant une sorte de transformation aléatoire (mais inversible) à votre message auparavant.

Peut-être que c'est ça le rembourrage!?

EDIT: J'ai regardé sur Wikipedia. ce que je parlais est appelé attaque de Hastad.

Je me suis récemment battu pour trouver le cryptage ... Cet article a beaucoup aidé à expliquer ce qui était en remplissant:

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

(la première méthode me semblait la plus facile à implémenter)

Je peux partager des extraits de code si nécessaire.

P.S. Ce fichier s’est aussi révélé utile pour la création de clés sécurisées (google) PBKDF2.py - Dérivation de clés basée sur un mot de passe PKCS # 5 v2.0

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

Tout d’abord, vous devriez utiliser AES, car c’est la norme de facto.

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

Pour le dernier bloc, vous aurez besoin de le remplir, et le remplissage typique est effectué via PCKS7, ce qui est assez simple.

Disons que vous avez une chaîne: "glace". comme dernier bloc.

"icecream" a 8 octets; vous avez donc besoin de 8 octets supplémentaires pour créer un bloc

.

Ce que vous faites est simplement d’ajouter le caractère 8 (et non "8") 8 fois

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

Serait votre chaîne résultante. Vous allez maintenant chiffrer les données.

N'oubliez pas que lors du décryptage, vous devez capturer ce dernier bloc et supprimer le remplissage avant de l'utiliser.

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