Wie kann ich meine Chiffre den Lawineneffekt anzeigen lassen?

Ich bin ein Anfänger in der Kryptographie. Ich habe einen passwortbasierten Verschlüsselungs- / Entschlüsselungsalgorithmus entwickelt, der ein zufälliges Salt und ein Passwort zum Verschlüsseln einer Nachricht verwendet. Ich verwende SHA-512 zum Hashing, Matrixoperationen zum Mischen, bitweises XOR zum Mischen von Daten und Abrufen. Die Länge des Salzes und des Chiffretextes beträgt 256 Buchstaben.

Meines Wissens ist die Lawineneffekt bedeutet, dass sich eine der folgenden Änderungen geringfügig ändert:

  • Verschlüsselung
  • Passwort
  • salt

muss die Ausgabe drastisch ändern.

Wenn ich in meiner Implementierung das Salt oder die Chiffre ändere, sehe ich keine großen Änderungen in meinem Ausgabe. Wenn sich das Passwort jedoch geringfügig ändert, ändert sich die Ausgabe drastisch.

Meine Fragen:

  • Ist mein Verständnis des Lawineneffekts im Allgemeinen korrekt? Wenn nicht, was sollte es sein?
  • Was kann ich tun, um den Lawineneffekt in meiner (oder einer beliebigen) Chiffre am besten zu erzeugen? sollte ich die Salzlänge weniger reduzieren und einen kleineren Chiffretext erzeugen, um einen Lawineneffekt zu erzeugen? Wenn nicht, wie kann ich das erreichen?

Kommentare

  • Aus Neugier verwenden Sie den Hash?
  • Willkommen bei Cryptography Stack Exchange. @Avinash, Ihre Frage wurde hier migriert, da sie hier mehr zum Thema gehört als zum Stapelüberlauf. Bitte registrieren Sie Ihr Konto hier, um Kommentare abgeben und eine Antwort akzeptieren zu können.
  • Wenn Sie konstruktive Antworten wünschen, sollten Sie zeigen, wie Ihre Chiffre derzeit funktioniert (in mathematischen Formeln, vorzuziehen). Dann können wir einen Blick darauf werfen, wie wir es verbessern können.
  • Ich ‚ habe Kommentare in Anlehnung an “ entwerfe ‚ keine eigene Chiffre “ – hier auf crypto ‚ s Es ist durchaus akzeptabel, es zu versuchen, obwohl Sie natürlich verstehen sollten, dass alles auf eigenes Risiko geht 🙂 Ich ‚ habe die Frage auch ein wenig bearbeitet, um mich mehr auf den Lawineneffekt in Abwesenheit zu konzentrieren der relevanten Chiffrierkonstruktionen. Wenn jemand der Meinung ist, dass dies unnötig ist, können Sie das, was ich ‚ getan habe, rückgängig machen und / oder verbessern.

Antwort

Machen Sie sich nicht die Mühe, den tatsächlichen Verschlüsselungsalgorithmus zu ändern. Lesen Sie mehr über das Prinzip von Kerckhoffs : Sie sollten Ändern Sie nur Dinge wie den Schlüssel und die IV, nicht den eigentlichen Algorithmus.

Um Ihre Lawine zu testen, drehen Sie ein Bit in Ihrem Schlüssel. Dies sollte ungefähr die Hälfte der Bits in Ihrer Ausgabe ändern.

Für das Chiffredesign wurde bereits Angewandte Kryptographie vorgeschlagen. Außerdem müssen Sie sich mit der Einführung von Diffusion und Confusion in Ihren Algorithmus befassen. Es lohnt sich auch, vorhandene Algorithmen zu studieren, um zu sehen, wie sie funktionieren. Ich begann damit, meine eigene einfache Feistel-Chiffre zu entwerfen. Auf diese Weise ist ein Großteil der umgebenden Struktur bereits für Sie erledigt. Dies vereinfacht auch das Design, da die F-Funktion nicht invertierbar sein muss. Dies ermöglicht Ihnen viel mehr Flexibilität in diesem Bereich.

Die Warnung, Ihr eigenes Design nur für eine Lernübung zu verwenden, ist gut.

Kommentare

  • Vielen Dank …
  • Chiffre / Chiffre ist eine Sache aus Großbritannien und den USA.

Antwort

Ich finde es großartig, dass Sie Ihren eigenen Verschlüsselungs- / Entschlüsselungsalgorithmus erstellen. Auf diese Weise lernen Sie viel über Krypto. Bisher jeder, der eine erstellt Der Krypto-Verschlüsselungs- / Entschlüsselungsalgorithmus erstellt beim ersten Mal auf die eine oder andere Weise etwas schrecklich Fehlerhaftes – sehr lehrreich.

Terminologie

Wenn ich Ihre Frage richtig verstehe, haben Sie eine perfekte vernünftige Frage zum Lawineneffekt, aber die meisten Leute auf dieser Website sind so verwirrt über Ihre nicht standardmäßige Terminologie, dass sie nicht einmal verstehen können, was Sie fragen.

Wenn ich Ihre Frage richtig verstehe, Sie bauen ein Verschlüsselungs- / Entschlüsselungssystem auf, das Nimmt Klartext als Eingabe, speichert Daten als verschlüsselte Dateien und ermöglicht später jemandem mit dem richtigen Kennwort, diese gespeicherten Dateien zu entschlüsseln und entschlüsselten Klartext Bit für Bit wiederherzustellen, der mit der ursprünglichen Klartexteingabe identisch ist.

Wie Sie Wahrscheinlich bereits bekannt, erstellt ein typisches Verschlüsselungsprogramm verschlüsselte Dateien, die mit einem Initialisierungsvektor (IV) beginnen, der bei der Erstellung der verschlüsselten Datei von einem kryptografisch sicheren Zufallszahlengenerator frisch generiert wurde.Das Verschlüsselungsprogramm zerlegt dann die Eingabedatei in Klartextblöcke mit einer festen Blockgröße und verwendet einen Blockverschlüsselungsmodus of operation im „Verschlüsselungsmodus“, um jeden Block (und den Verschlüsselungsschlüssel) über eine -Blockverschlüsselung zu verarbeiten, um schließlich einen verschlüsselten Block von zu erhalten Dieselbe Blockgröße, die an die verschlüsselte Datei angehängt wird. Am Ende gibt es oft einige fummelige Punkte im Zusammenhang mit „Auffüllen“ und „Nachrichtenauthentifizierung“.

Später zerlegt das Entschlüsselungsprogramm die verschlüsselte Datei in verschlüsselte Blöcke derselben festen Blockgröße und speist jeden Block ( und den Verschlüsselungsschlüssel) durch die Blockverschlüsselung unter Verwendung des gleichen Blockverschlüsselungsbetriebsmodus im „Entschlüsselungsmodus“, um den Klartextblock wiederherzustellen, und verkettet alle Klartextblöcke zusammen, um eine Datei Bit für Bit wiederherzustellen, die mit der ursprünglichen Klartextdatei identisch ist

Ich verwende SHA-512 zum Hashing

OK, SHA-512 ist ein ausgezeichneter Hashing-Algorithmus. Wenn Sie dies als Teil der internen Rundungsfunktion verwenden oder Unterschlüssel aus dem Hauptverschlüsselungsschlüssel generieren, funktioniert dies; es scheint nur unnötig kompliziert zu sein.

Wenn Sie SHA-512 als verwenden Eine Schlüsselableitungsfunktion (KDF) zum Generieren des Hauptverschlüsselungsschlüssels aus dem Kennwort. Viele Leute würden sagen, dass dies nicht kompliziert genug ist.

Matrixoperationen für Mischen

Das ist ungewöhnlich, aber das könnte funktionieren.

bitweises XOR zum Mischen und Abrufen von Daten.

Praktisch alle modernen Verschlüsselungsalgorithmen verwenden viele bitweise XOR-Operationen. Viele moderne Verschlüsselungsalgorithmen sind so konzipiert, dass sie nur modulare Additionen, Rotation mit festen Rotationsbeträgen und XORs (ARX) in der inneren Schleife (runde Iteration) verwenden.

Ich bin hübsch, dass eine innere runde Funktion verwendet wird nur XOR oder nur Rotation oder nur modulare Addition sind fatal unsicher, unabhängig davon, wie viele runde Iterationen verwendet werden.

(Ich weiß nicht genug, um etwas über die Sicherheit Ihrer speziellen Kombination von XOR- und Matrixoperationen zu sagen.)

Die Länge der Salz und der Chiffretext besteht aus 256 Buchstaben.

Ich nehme an, Sie wollten sagen „Die Länge des Initialisierungsvektors (IV) und jedes Chiffretextblocks beträgt 256 Buchstaben . „

Ein“ Salt „wird beim kryptografischen Einweg-Hashing verwendet – siehe Können Sie mir helfen, zu verstehen, was ein kryptografisches salt “ ist? . Eine „IV“ wird in der Zwei-Wege-Kryptographie verwendet – sowohl Verschlüsselung als auch Entschlüsselung. Sowohl „Salz“ als auch „IV“ sind frisch erzeugte Zufallswerte, von denen angenommen wird, dass sie öffentlich bekannt sind. Die Terminologie deutet jedoch darauf hin, dass sie in verschiedenen Arten von Systemen verwendet werden.

So ziemlich jeder legt die Länge fest Die IV entspricht der Blockgröße, das ist also großartig.

Mein Verständnis ist, dass praktisch alle Chiffren, die vor der Ankündigung des AES-Wettbewerbs 1997 entwickelt wurden, eine Blockgröße von 64 Bit (8 Byte) oder weniger verwendeten. Einige Kryptographen anscheinend dachte das war nicht genug, aber soweit ich weiß, scheint jetzt jeder zu denken, dass eine Blockgröße von 128 Bit (16 Bytes) angemessen ist.

Eine Blockgröße von 256 Bytes würde funktionieren; es scheint nur unnötig groß zu sein.

der Lawineneffekt

Wenn jeder Klartextblock durch die Blockverschlüsselung ausgeführt wird (in einem Verschlüsselungsmodus), bedeutet der Lawineneffekt, dass sich ein einzelnes Bit ändert eine der folgenden Optionen:

  • Daten im Klartextblock
  • Passwort
  • IV

müssen die ändern Geben Sie den Chiffretextblock drastisch aus (ungefähr die Hälfte der Bits).

Wenn Sie jeden Chiffretextblock durch die Blockverschlüsselung ausführen (in einem Entschlüsselungsmodus), bedeutet der Lawineneffekt, dass sich ein einzelnes Bit in einem der folgenden Punkte ändert:

  • Chiffretextblock
  • Passwort
  • IV

muss den Ausgabeblock „Klartext“ drastisch ändern (ungefähr die Hälfte der Bits).

Wenn ich in meiner Implementierung das Salz oder die Chiffre ändere, sehe ich keine großen Änderungen in meiner Ausgabe.

Ich vermute, Sie wollten eines von zwei Dingen sagen:

  • „, wenn ich ein einzelnes Bit in der Nähe von ändere Anfang o Bei der verschlüsselten Datei (dh in der IV oder in einem frühen Chiffretextblock) sehe ich gegen Ende meiner Ausgabe-Klartextdatei keine großen Änderungen.

Dieser Mangel an Änderungen treten immer auf, wenn die (sichere) Cipher Block Chaining (CBC) oder andere Betriebsarten verwendet werden. Es ist also nicht unbedingt ein Problem.

Dies kann jedoch ein Problem sein, wenn Sie dachten, Sie würden den PCBC-Modus (Propagating Cipher Block Chaining) verwenden, bei dem diese fehlende Änderung auf a hinweist Fehler in der Implementierung.

Auch dieser Mangel an Änderungen ist das erwartete Ergebnis bei Verwendung des (unsicheren) EZB-Modus (Electronic Codebook).

Unabhängig davon, welchen Betriebsmodus Sie auswählen, das Entschlüsselungsprogramm sollte große beängstigende Warnungen ausdrucken, dass die Datei die MAC-Authentifizierungsprüfung nicht bestanden hat, wenn ein einzelnes Bit der verschlüsselten Datei beschädigt ist.

  • „, wenn ich ein einzelnes Bit in a ändere einzelner verschlüsselter Chiffretextblock in einer verschlüsselten Datei, ich sehe keine großen Änderungen im entsprechenden Klartextblock in meiner Ausgabe-Klartextdatei.

Ja, dies weist auf einen schwerwiegenden Fehler hin – den Der Blockverschlüsselungsalgorithmus hat keinen guten Lawineneffekt. Dies ist ein Zeichen dafür, dass der Algorithmus nicht ausreichend gemischt ist. Dies bedeutet im Allgemeinen, dass das System anfällig für Chiffretext-Angriff und ähnliche Angriffe ist.

Was kann ich tun, um den Lawineneffekt in meiner (oder einer beliebigen) Chiffre am besten zu erzeugen? Sollte ich die Salzlänge weniger reduzieren und einen kleineren Chiffretext generieren, um einen Lawineneffekt zu erzielen?

Ich nehme an, Sie wollten fragen „sollte ich die Größe von reduzieren die IV und die Blockgröße, um einen Lawineneffekt zu erzeugen? „

Das ist im Allgemeinen nicht erforderlich.

Die gängigsten Ansätze zur Erzeugung des Lawineneffekts sind in der Wikipedia Blockverschlüsselung Artikel:

Ich kenne keine Blockverschlüsselung, die nach einer einzelnen Runde eine vollständige Lawine erzeugt. Leute, die Blockchiffren entwerfen, versuchen, eine Anzahl von Runden auszuwählen, die ausreichen, um die Blockchiffrierung allen Standard-Kryptografieangriffen zu widerstehen, was mehr als ausreichend ist, um eine vollständige Lawine zu erzeugen

Personen, die eine Blockverschlüsselung entwerfen, wählen normalerweise ein allgemeines Blockverschlüsselungsentwurfsschema aus und lassen das Blockverschlüsselungsprogramm es immer wieder über die ausgewählte Anzahl von Runden wiederholen. Einige der beliebtesten allgemeinen Entwurfsschemata für Blockverschlüsselungen sind:

  • Substitutions-Permutations-Netzwerk
  • Feistel-Verschlüsselung
  • Lai-Massey-Verschlüsselung

Jede dieser Funktionen erfordert eine interne nichtlineare Funktion. Frühe Blockchiffren verwenden häufig eine komplizierte interne Funktion in jeder Runde, die in einer einzigen Runde fast eine Lawine erreicht. Moderne Chiffren verwenden häufig eine sehr einfache, schnelle interne Funktion pro Runde (einige ARX-Funktionen) mit gerade genug Nichtlinearität, um nach einer großen Anzahl von Runden eine Lawine zu erreichen.

Kommentare

  • Randnotiz: Die Khazad-Chiffre ist nach einer einzigen Runde vollständig verbreitet. Ich ‚ habe Spielzeug hergestellt, das es auch tut. ‚ ist sicherlich möglich, und es macht Spaß, Wege dazu zu finden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.