Home > Kryptographie > Frage des Monats (Februar)

Frage des Monats (Februar)

February 3rd, 2009

Nicht grade traditionsgemäß, aber um mal Abwechslung in den Cryptblog Alltag zu bringen.

Wir betrachten folgende Internetseite:
http://www.php-einfach.de/sonstiges_generator_blowfish_js.php

Der angezeigte Key wird zufällig ausgewürfelt und kann ähnlich wie der Klartext geändert werden, muss aber nicht. Danach besteht die Möglichkeit, die Eingabe zu verschlüsseln, worauf eine Ausgabe des verschlüsselten Textes im Base64 erfolgt. Mal als Eingabebeispiel:

Key: tsu15bdi
Klartext: test

Und nun? Jetzt kann mit dem “Verschlüsseln”-Button chiffriert werden. Um dies hier alles nachvollziehen zu können, sollte dies nun jeder einmal durchführen. Nun kommt das große “Problem”. Mit den oben genannten Daten ergibt sich:

AAtRZQALh6Bkp67o8pNUbg==

Wenn ich aber mehrmals den Button betätige, entsteht immer wieder etwas anderes:

AAUYzgALLpTtP2+zdG0O4A==
AAD+sgAJaAF/3D3mdFxHWw==
AA874gALmyCaU23yyjVKcQ==
AAHn2gAKE4mfFu4zg/muTQ==

Und es handelt sich dort jeweils um “test”. Jeder dieser Ergebnisse kann mit dem oben genannten Passwort auch wieder nach “test” dechiffriert werden. Genaugenommen zu

“test    “

was 8 Zeichen mit jeweils 16 Bit = 128 Bit (Blockgröße) entspricht, dies allerdings nur am Rande.

Normalerweise geht man davon aus, das ein fester Klartext P mit dem festen Schlüssel K nur EIN eindeutiges Ergebnis zurückliefert, um das Entschlüsseln bzw. die Umkehrbarkeit eben möglich ist. Bei der einfachen (additiven) Cäsar Verschiebechiffre ist das ja ähnlich (Schlüssel 2):

A -> C
B -> D
C -> E

etc.

Das oben gezeigte verhält sich also so, als würde A (nach Verschlüsselung) sowohl zu C als auch zu D und E verschlüsselt werden. Und dies jeweils zufällig.

Frage: Wieso ist hier eine eindeutige Entschlüsselung möglich?

Tim Kryptographie

  1. asdf
    February 3rd, 2009 at 18:00 | #1

    Als Vermutung würde ich sagen, dass es nur eine begrenzte Anzahl an möglichen Chiffres für einen bestimmen Klartext gibt und das Chiffre selbst den Key, mit dem es verschlüsselt wurde, enthält. Damit jetzt nicht jeder den Key extrahieren und damit das Chiffre entschlüsseln kann, wird dieser Schlüssel mit dem vom user gegebenen Key verschlüsselt. Wer nun das Chiffre entschlüsseln will, entschlüsselt erst den Zufallsschlüssel und damit das Chiffre.

    Wenn man sich den JavaScript Code des Links anschaut, sieht man auch folgenden Code beim Verschlüsseln (vereinfacht):
    > var xl_old = Math.floor(Math.random()*1000000);
    > var xr_old = Math.floor(Math.random()*1000000);
    >
    > for(var i=0;i x = block_encrypt(x[0]^xl_old, x[1]^xr_old);
    > }

    … und folgenden beim Entschlüsseln:
    > var xl_old = x[0];
    > var xr_old = x[1];
    >
    > for(var i=8;i x = block_decrypt(x[0], x[1]);
    > x[0] ^= xl_old;
    > x[1] ^= xr_old;
    > }

    … was zeigt, dass beim Verschlüsseln der Blowfish-Algorithmus XOR-ed mit zwei Zufallszahlen aufgerufen wird und beim Entschlüsseln zuerst die zwei Zufallszahlen analysiert werden und dann, nachdem ein Block wieder entschlüsselt wurde, mit den zwei Zufallszahlen durch das reversible XOR wieder der Originaltext hergestellt wird.

    [/Vermutung Ende]

  1. No trackbacks yet.