2009-08-16 11 views
3

Ich verwende pyDes, um einige Daten zu verschlüsseln. Ich wollte zeigen, dass, wenn Sie nur ein Bit im Schlüssel oder Anfangswert ändern, die verschlüsselten Daten völlig anders wären. Ich habe den 16-Byte-Schlüssel eingerichtet, um das letzte Zeichen um +/- 1 zu ändern, wodurch mindestens ein Bit anders wird. Aber selbst wenn ich das tue, sind die 3 verschiedenen Fälle von verschlüsselten Daten nicht alle verschieden.Warum führt die Änderung eines Bits in einem Triple-DES-Schlüssel oder Anfangswert nicht zu unterschiedlichen verschlüsselten Daten?

from pyDes import * 

data = 'Hello' 

# CBC : Cipher-Block-Chaining 
# \0..\1: arbitrary initial value for CBC 
# pad=None: let pyDes take care of padding bytes 
k1 = triple_des("16-byte-key-here", CBC, "\0\0\0\0\0\0\0\1", pad=None, padmode=PAD_PKCS5) 
k2 = triple_des("16-byte-key-herf", CBC, "\0\0\0\0\0\0\0\1", pad=None, padmode=PAD_PKCS5) 
k3 = triple_des("16-byte-key-herd", CBC, "\0\0\0\0\0\0\0\1", pad=None, padmode=PAD_PKCS5) 

d1 = k1.encrypt(data) 
d2 = k2.encrypt(data) 
d3 = k3.encrypt(data) 

assert d1 != d2 
assert d2 != d3 
assert d1 != d3 

Eine der Behauptungen scheint zum Scheitern verurteilt, wenn ich nur eine kleine Änderung entweder der Schlüssel oder Anfangswert machen; Ich habe beide d1 != d2 und d1 != d3 scheitern gesehen, je nachdem, was ich ändere. Ich habe auch versucht, 'Hello' zu 'Hello' * 50 zu ändern, um sicherzustellen, dass es nicht nur ein Fall der Eingabedaten war, die zu kurz sind.

Wenn ich völlig zufällige Schlüssel mache, bestehen die Behauptungen. Mit dem Programm wie oben gesehen, schlägt d1 != d3 fehl (diese Schlüssel sind ein Bit auseinander; k1-k2 sind 2 Bits verschieden).

Ich bin keineswegs ein Verschlüsselungsexperte, aber wenn zwei Schlüssel nur ein Bit auseinander die gleichen verschlüsselten Daten ergeben, dann bedeutet das, dass der Aufwand, den es braucht, um den Schlüssel zu bremsen, um den Faktor zwei gesunken ist. Recht?

Fehle ich etwas offensichtlich? Soll Triple DES keine eindeutigen Ergebnisse für sehr ähnliche Schlüssel liefern? Oder ist das ein Fehler in PyDes? Vielleicht könnte jemand anderes dieses Verhalten in einer anderen Implementierung bestätigen?


@Chris Jester-Young hatte die Antwort, dass einige der Bits im Schlüssel Paritätsbits sind. Und wie sie herausstellt, nach this article:

Man beachte, daß obwohl der Eingabeschlüssel für DEN 64 Bits lang ist, der eigentliche Schlüssel von DES verwendet wird, ist nur 56 Bits lang. Das niedrigstwertige (am weitesten rechts liegende) Bit in jedem Byte ist ein Paritätsbit und sollte so eingestellt werden, dass es immer eine ungerade Anzahl von 1en in jedem Byte gibt. Diese Paritätsbits werden ignoriert, so dass nur die sieben höchstwertigen Bits jedes Bytes verwendet werden, was zu einer Schlüssellänge von 56 Bits führt. Dies bedeutet, dass die effektive Schlüsselstärke für Triple DES tatsächlich 168 Bits beträgt, da jeder der drei Schlüssel 8 Paritätsbits enthält, die während des Verschlüsselungsvorgangs nicht verwendet werden.

(Hervorhebung von mir war)

Und die Parity-Bits waren genau die Bits I wurde in dem Beispiel zu ändern.

Danke Chris!

Antwort

4

In DES sind einige Bits des Schlüssels Paritätsbits und beeinflussen die Verschlüsselung/Entschlüsselung nicht.