PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unterschiedliche Resultate beim gleichen Verschlüsselungsalgorithmus??


maggo
18.08.2007, 22:30
Ich habe mich ein wenig mit Verschlüsselungsalgorithmen beschäftigt. Um damit ein wenig zu programmieren, habe ich nach freien Bibliotheken gesucht.

Ich habe was gefunden, was in VC# .Net geschreiben ist. Diese Bibliothek bezieht sich unter anderem auf den System.Security.Cryptography - Namespace.

Ich habe dann noch einen Source Code gefunden, für einen DES - Algorithmus, geschreiben in C.

Und eine weitere Dll, von der ich nicht weiss, wie die geschrieben wurde.

Ich habe festgestellt, dass alle 3 Systeme mir ein anderes Resultat liefern.
Ich habe immer DES als Verschlüsselung gewählt und immer den gleich Key und gleichen Text. Das verschlüsselte Ergebnis sah immer anders aus.
Bei den ersten beiden Biblotheken war das Resultat konstant, beim Letzten nicht. Der spuckte immer was anderes heraus.

Ich bin der Meinung, dass doch eigentlich immer der selbe verschlüsselte Text entstehen muss, da die Eingabeparameter immer gleich sind und der verwendete Algorithmus auch. Die Verschlüsselung sollte doch vom Programm unabhängig sein!?

Weiss jmd wodran das liegt? Oder ist es normal?

edit: mir fiel auf, dass es starke unterschiede gibt, wie in legaler key erzeugt wird. dadurch wird der key wohl unterschiedlich sein von programm zu programm. irgendwie ist das ziemlich schade, dass es einen "genormten" verschlüsselungsalgorithmus (oder treten selbst dort schon unterschiede auf durch verschiedene realisierungen der standards??) gibt aber wie der key bearbeitet wird, ist jedem selbst überlassen. das gehört doch eigentlich dazu!?


Firefall
19.08.2007, 00:40
Manche "Verschlüsselungen" arbeiten mit Zufallsparametern. Z.b. die Crypt-Funktion von PHP gibt für denselben Klartext immer wieder andere Verschlüsselte Texte aus.

Jan Krüger
19.08.2007, 10:44
Zum Ergebnis, das sich jedes Mal ändert: http://en.wikipedia.org/wiki/Session_key
Eine andere Möglichkeit ist, dass beim Verschlüsseln eine kleine Menge zufälliger Daten mitverschlüsselt werden, um Known-Plaintext-Attacken zu erschweren.

Eine weitere Möglichkeit, warum sich die verschiedenen Implementierungen unterscheiden, könnte sein, dass
* unterschiedliches Padding irgendeiner Art verwendet wird;
* die Daten vor der Verschlüsselung (unterschiedlich) komprimiert werden;
* ...

maggo
19.08.2007, 13:01
hm ja, das wird wohl so sein. aber widerspricht das nicht dem prinzip, dass etwas verschlüsselt wird von jedem anderen entschlüsselt werden kann, der den key kennt und zwar unabhängig vom programm? oder sehe ich das nur so?
ich dacht ein standard ist dazu da, damit es überall gleich ist. irre ich mich auch in der difinition von standard?

Jan Krüger
19.08.2007, 16:53
Mindestens zwei der Programme verwenden offenbar nicht exakt den DES-Algorithmus, sondern Abwandlungen davon. Es kann aber z.B. auch noch sein, dass einer davon DES-CBC (=Cipher Block Chaining) benutzt und ein anderer nicht. CBC ist eine ziemlich gängige Praxis, die man dann aber normalerweise auch bei der Beschreibung der Software ausweist.

Eine Quasi-Standardimplementierung diverser Kryptoalgorithmen ist Teil von OpenSSL. Ich würde dir empfehlen, deine Programme mal mit dessen Ausgabe zu vergleichen.

maggo
19.08.2007, 17:30
Mindestens zwei der Programme verwenden offenbar nicht exakt den DES-Algorithmus, sondern Abwandlungen davon. Es kann aber z.B. auch noch sein, dass einer davon DES-CBC (=Cipher Block Chaining) benutzt und ein anderer nicht. CBC ist eine ziemlich gängige Praxis, die man dann aber normalerweise auch bei der Beschreibung der Software ausweist.

Eine Quasi-Standardimplementierung diverser Kryptoalgorithmen ist Teil von OpenSSL. Ich würde dir empfehlen, deine Programme mal mit dessen Ausgabe zu vergleichen.

zu 1. ja, eins der programme verwendet CBC. weisst du, wo ich nachlesen kann, was das CBC macht?

zu 2. hast du einen link für mich, wo ich das tun kann, weil ich eigentlich genau nach einer Standardimplementierung suche.

Jan Krüger
19.08.2007, 22:35
http://en.wikipedia.org/wiki/Cipher_Block_Chaining

Was OpenSSL angeht: runterladen, Handbuch lesen (normalerweise hat OpenSSL ein paar Binaries, mit denen man lustiges Zeug machen kann), rumspielen. :)

Schorsch
22.08.2007, 22:05
Das ganze liegt vor allem bei DES an den Zufallsbits. Siehe auch:

http://de.wikipedia.org/wiki/Salt_%28Kryptologie%29

Gruß

Schorsch

Jan Krüger
22.08.2007, 23:05
Salts werden für Hashes benutzt. Wenn man DES zum Generieren von Hashes à la Unix-crypt() verwendet, kommt ein Salt zum Einsatz, ja. Für umkehrbare Operationen sind Salts nicht geeignet.

Schorsch
23.08.2007, 14:14
Salts werden aber auch bei umkehrbaren Verfahren eingesetzt. Ich hab vor 3 Jahren im Rahmen einer Projektarbeit mal eine Software erstellt die Dokumente nach einem PGP-ähnlichen Verfahren verschlüsselt. Dort wurde auch Salt an einer definierten Stelle im Binärcode des Dokumentes versteckt damit der MD5-Hash auch bei identischen Dokumenten einen anderen Hashwert liefert. Nach dem entschlüsseln wurden dann das Salt entfernt und man hatte wieder das ursprüngliche Dokument.

Gruß

Schorsch

Jan Krüger
23.08.2007, 15:13
Salts sind definiert als Parameter zu einer Hash- oder Key-Derivation-Funktion. Das, was du beschreibst, klingt für mich eher nach Padding (eben mit zufälligen Daten).

Schorsch
23.08.2007, 18:46
Also ich hab die Fachbegriffe damals nicht alle nachgeschlagen. Mein betreuender Prof hat mir dazu geraten die Zufallsdaten reinzuschreiben und sprach dabei von Salt. Kann durchaus sein das der Begriff in dem zusammenghang falsch war..... :confused:

Firefall
23.08.2007, 19:06
Salt ist normalerweise eine Zufallszahl, eine willkürlich gewählte Zahl ;)

Jan Krüger
25.08.2007, 02:44
Vielleicht gibt es unterschiedlich spezifische Definitionen.

maggo
28.08.2007, 13:25
Was OpenSSL angeht: runterladen

ich schreibe erst jetzt, da ich im urlaub war. :D
wo kann ich das runterladen? bin irgendwie zu blöd, dass zu finden. :D

mnemonic
28.08.2007, 13:39
ich schreibe erst jetzt, da ich im urlaub war. :D
wo kann ich das runterladen? bin irgendwie zu blöd, dass zu finden. :D
Wahrscheinlich der allererste Hit, wenn man bei Google "openssl" eingibt. :rolleyes:
http://www.google.de/search?hl=de&q=openssl&meta=lr%3Dlang_de%7Clang_en&btnG=Google-Suche

Setzen, 6. ;)