Wie kann ich einen Brute-Force-Angriff (nur Chiffretext) auf eine CBC-verschlüsselte Nachricht ausführen?

  • Wie finde ich den Chiffrierschlüssel bei einem CBC-Chiffretext und einer IV?

    Wir sind auf einen 8-Zeichen-Schlüssel beschränkt, wobei jedes Zeichen in der Bereich von [a..h], so dass ich jeden möglichen Schlüssel generieren kann (dies sind nur $ 8 ^ 8 = 2 ^ {24} $ (ca. 4 Millionen) verschiedene mögliche Schlüssel).

    Wie würde ich das richtige finden?

    18 April 2012
    cmcculloh
2 answers
  • Wenn (Sie vermuten, dass der (Klartext der) verschlüsselten Daten ASCII-Text ist, können Sie überprüfen, ob das High-Bit jedes entschlüsselten Bytes Null ist. Solange Sie mehr als 24 Byte an Daten zur Prüfung haben, sind die Chancen, dass dies zufällig geschieht, ziemlich gering (vorausgesetzt, Sie haben einen 24-Bit-Schlüsselbereich).

    UTF -8 Text ist auch ziemlich leicht zu erkennen, da alle Bytes, für die das hohe Bit gesetzt ist, nur in einem sehr unterschiedlichen Muster vorkommen können.

    Im Allgemeinen, wenn Sie etwas mit entschlüsseln Wenn der Schlüssel falsch ist, sieht die Ausgabe zufällig aus, und daher erscheinen alle Bytes (und alle Sequenzen von n Bytes) im Durchschnitt ungefähr gleich häufig. Wenn Sie eine Ausgabe erhalten, die erheblich davon abweicht (wo Signifikanz gemessen werden kann, z. B. mit Pearson χ ) 2 test ) ist es wahrscheinlich der korrekte Klartext.

    Bei kleinen Datenmengen kann es sinnvoll sein, diesen anzuwenden Testen Sie nicht nur die vollen Bytes, sondern auch die höchsten und / oder zwei (und vielleicht sogar drei) höchsten Bits. Dadurch werden Byte-Werte erkannt, die in einem Cluster zusammengefasst werden (wie dies z. B. bei Buchstaben und Zahlen in ASCII der Fall ist), auch wenn die Daten nicht genügend Bytes enthalten, um viele exakte Wiederholungen zu erhalten. Sie können auch versuchen, die Unterschiede zwischen zwei aufeinander folgenden Byte-Werten (Modulo 256) zu betrachten, um Korrelationen zu erkennen. Alle (und viele andere Variationen davon) sollten für Zufallsdaten gleichmäßig verteilt sein, während viele von ihnen für die meisten Arten von nicht-zufälligen Daten deutliche Abweichungen von der Einheitlichkeit zeigen.

    18 April 2012
    cmcculloh
  • Zusätzlich zur Klartextanalyse, die von Ilmari ausführlich beschrieben wird, besteht ein erster Schritt nach der Entschlüsselung von Versuchen darin, den Auffüllmodus zu überprüfen.

    Wenn Sie einen Blockverschlüsselung im CBC-Modus muss die Größe des Klartextes auf ein Vielfaches der Blockgröße gebracht werden. Dies geschieht durch einen Auffüllmodus. Ein allgemeiner Padding-Modus (der eindeutig reversibel ist) ist PKCS # 5-Padding: Hängen Sie so viele Bytes wie erforderlich an, um ein vollständiges Vielfaches der Blockgröße zu erreichen, aber mindestens eines, und alle diese Bytes haben den gleichen Wert, nämlich den Anzahl angehängter Bytes.

    Beim Entschlüsseln können Sie dann prüfen, ob die letzten $ n $ -Bytes alle den gleichen Wert $ n $ haben. Bei einem falschen Schlüssel endet dies in etwa $ \ frac1 {256} $ aller Fälle mit $ 1 $, in $ \ frac {1} {256 · 256} $ aller Fälle endet es mit $ 2,2 $ und So weiter, und dann müssen Sie den Rest des entschlüsselten Klartextes auf Plausibilität prüfen (siehe die Antwort von Ilmari für Details). In allen anderen Fällen wissen Sie sofort, dass der Schlüssel falsch ist. (Dies ist natürlich nur nützlich, wenn Sie das Padding-Schema kennen (oder raten können).)

    Hinweis Mit CBC können Sie den letzten Block entschlüsseln, ohne alle anderen Blöcke zu entschlüsseln. Führen Sie einfach Decrypt(key, last block) ⊕ before-last block aus, um den Klartext zu erhalten.

    18 April 2012
    cmcculloh