2009-03-18 17 views
4

Ich habe mir die meisten Python-Krypto-Bibliotheken angesehen, ich habe mich entschieden, entweder PyCrypto oder M2Crypto zu verwenden.
Ich habe ezPyCrypto verworfen, weil es nur MD5 zum Signieren und Keyczar unterstützt, weil es nicht reif genug ist.Python: Wie fügt man RSA Padding hinzu?

Also ich habe gelesen, dass RSA anfällig für mehrere Angriffe ist, wenn der zu verschlüsselnde Text (oder Signatur-Hash) nicht richtig aufgefüllt ist.
Was bedeutet das?
Weder PyCrypto noch M2Crypto erwähnen irgendetwas darüber und Google hat nichts Relevantes gefunden. Fügen diese Bibliotheken das Paddign automatisch hinzu? Wie kann man es sagen?

Wenn die Antwort auf das oben genannte Nein ist, was wird als richtiges Padding angesehen?

Antwort

6

PyCrypto fügt die erwähnte Auffüllung nicht hinzu.
M2Crypto stattdessen.

M2Crypto baut auf openSSL auf, unterstützt meist alles, was Sie brauchen, ist immer noch auf dem neuesten Stand und aktualisiert, während PyCrypto mehrere Verwarnungen ausgibt.

+1

Ich weiß nicht, ob das 100% koscher ist, aber es funktioniert (mit pycrypto) https://github.com/Brant/EncryptionExample/blob/master/python/encrypt.py –

0

Nicht ganz sicher, aber wenn Sie eine Zufallskomponente zu Ihrem RSA-Nachricht hinzufügen verhindert Wörterbuchangriffe

1

ich durch herauszufinden Verschlüsselung vor kurzem kämpfte ... dieser Artikel geholfen eine Menge zu erklären, was durch Klotzen ment wurde:

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

(Methode schien die einfachste für mich zu implementieren)

ich kann einige Code-Schnipsel teilen, wenn nötig.

P.S. Diese Datei kam praktisch zu in sicheren Schlüssel zu helfen erstellen (google es) PBKDF2.py - PKCS # 5 v2.0 Passwort-basierte Key Ableitung

3

Einer der Gründe für zufällige Polsterung könnte sein, dass „aus dem Buch "RSA mit niedrigem Exponenten (sagen wir 3) kann wirklich einfach geknackt werden, wenn die gleiche Nachricht an mehrere Personen (drei) gesendet wird.

Sie sollten daher besser sicherstellen, dass Sie nicht genau die gleiche Nachricht senden, indem Sie eine zufällige (noch inversible) Transformation auf Ihre Nachricht anwenden.

Vielleicht ist das was Padding ist!?

EDIT: Ich schaute auf Wikipedia. worüber ich sprach, heißt Hastads Angriff.

0

Zuerst sollten Sie AES verwenden, da es der De-facto-Standard ist.

AES verschlüsselt Bytes in Blockgrößen von 16 Byte. Offensichtlich funktioniert das für jedes große Datenstück. Aber das letzte bisschen, offensichtlich vielleicht weniger als 16 Bytes.

Für den letzten Block müssen Sie es auffüllen, und typische Auffüllen erfolgt über PCKS7, die ziemlich einfach ist.

Nehmen wir an, Sie haben eine Zeichenfolge: "Icecream" als letzten Block.

"icecream" ist 8 Bytes, so müssen Sie weitere 8 Bytes ein Block

machen Also, was Sie tun, ist einfach das Zeichen 8 (nicht '8') 8mal

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

sein anhängen Würde Ihre resultierende Zeichenfolge. Jetzt gehst du weiter und verschlüsselst die Daten.

Denken Sie daran, dass Sie während der Entschlüsselung diesen letzten Block abfangen müssen und entfernen Sie das Padding, bevor Sie es verwenden.

Verwandte Themen