Wie zu erkennen Blockchiffre-Modus
Wie zu erkennen, wenn eine Nachricht wurde Krypta von CBC oder EZB - Modus?
Ich habe eine Funktion, die verschlüsseln in AES-128-CBC oder EZB zufällig, und ich weiß hamming zwischen Klartext und cipher text, aber Nähte nicht korreliert, cipher-Modus.
Woran kann ich erkennen, das Blockchiffre-Modus?
Danke im Voraus
- Wenn es ist nur dein code tut, Verschlüsselung und Entschlüsselung, dann können Sie ein zusätzliches byte, z.B. 0 oder 1 je nach cipher-Modus und überprüfen Sie, dass vor der Verarbeitung der payload. Andere option, die Sie könnten versuchen, ist zunächst zu versuchen cbc, wenn das fehlschlägt, versuchen EZB beim entschlüsseln.
- Ich habe Angst, dass wenn es gibt keine unterscheidenden Elemente in Klartext oder Chiffretext, dass Sie nicht zuverlässig erkennen die Blockchiffre-Modus. Die Bausteine sind gedacht, um nicht von zufällig. Glücklicherweise sind die nur-text-normal ist das nicht. Wenn Sie haben CBC-Modus verwendet, dann sollten Sie verwendet haben, ein IV, so der IV-könnte die Besonderheit. Das sagte; warum zum Teufel würden Sie die Verschlüsselung mit CBC-oder ECB-zufällig???
- Es ist auf einer Krypto-exercice. Ziel ist es, zu erkennen, cypher Modus, also ich habe eine Funktion, die zufällig CBC-und ECB-zum testen meiner detection-Funktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die Antwort ziemlich viel in der Anweisung problem:
Somit, mit der Annahme, dass einige wiederholt Klartext-blocks auftreten, in den gleichen Chiffretext-block-offsets, wir können einfach gehen Sie voran und suchen für die wiederholte ciphertext Blöcke in verschiedenen Längen.
Mache ich das gleiche problem einstellen und gerade dieses problem (mit clojure).
Mein Erster Tipp ist, es wird eher klar, was Sie tun müssen, wenn Sie eine Sprache verwenden, die unterstützt die first class-Funktionen/lambdas.
Anyways, lasst uns brechen das problem ein bisschen:
Zunächst nur eine Funktion schreiben, die überprüft, ob eine blackbox ist die Verschlüsselung von Daten mit der EZB. Wie würden Sie dies tun?
Könnte es ungefähr so Aussehen (pseudocode unten)
Denken Sie daran, die zentrale Schwäche der EZB ist identisch Blöcke von Klartext verschlüsselt werden, um identische Blöcke Chiffretext.
EDIT: Die Herausforderungen sind jetzt öffentlich, also werde ich den link zu meiner Lösung(en):
https://github.com/dustinconrad/crypto-tutorial/blob/master/src/crypto_tutorial/lib/block.clj#L118
compute block-Größe, basierend auf Chiffre-text % 16 oder 24 oder 32 immer == 0
hamming-Distanz getan werden sollte, durch cipher-block-1 mit rest der Chiffre-Blöcke
wenn wir durchschnittlich pro byte mit floating-point-arithmatic, wenn der Wert unter einen bestimmten Schwellenwert, dann ist es die EZB.
Weiß ich die genaue übung, die Sie tun, ich bin derzeit tun Sie es jetzt selbst. Ich würde empfehlen, tun Frequenz-Analyse auf die verschlüsselten Zeichenfolgen (vergessen Sie nicht die Zeichenfolge möglicherweise base64 würde oder hex). Wenn Sie wieder eine Häufigkeitsverteilung entspricht der Sprache, in der die Zeichenfolge, die Sie codiert, dann ist es sicher davon ausgehen, dass es in der EZB, ansonsten ist es wahrscheinlich CBC.
Ich weiß nicht, ob dies tatsächlich funktioniert, wie ich mache nur die übung jetzt, aber es ist ein Anfang.
EDIT:
Stürzte ich mich auf diese Antwort ein wenig, und das Gefühl, ich sollte mehr erklären. Wenn es schon verschlüsselt im ECB-Modus dann wird der Frequenz-Analyse sollte zeigen eine normale Verteilung Stil, unabhängig von dem Abstand zum Anfang/Ende des Strings und der Schlüssel. Wo da die Verschlüsselung im CBC-Modus haben sollte, eine sehr zufällige und wahrscheinlich flach Verteilung.