Wie werden 64-Bit-Werte symmetrisch verschlüsselt?

Ich bin neugierig auf einen Algorithmus, der für das folgende Szenario geeignet ist:

  1. 32-Bit „Klartext“ Eingabe von einem Zähler
  2. 32- oder 64-Bit-Ausgabe „Chiffretext“
  3. Es sollte möglich sein, die Ausgabe mit dem Schlüssel (und möglicherweise einigen anderen versteckten Parametern, wie z ein Offset- und Stromzähler) und geben den ursprünglichen 32-Bit-Zählerwert zurück.
  4. Ein Benutzer beobachtet die Eingabe nie, kann jedoch eine beliebige Anzahl von Ausgaben empfangen, möglicherweise sequentiell. Trotzdem sollten sie dies nicht können wissen, welche Indizes sie haben.
  5. Es sollte schwierig sein, andere Ausgaben zu erraten, die gültigen Zählerwerten entsprechen.

Meine ungeübte Intuition ist, dass der Schlüssel und die Ausgaben sind Größer als der Eingaberaum, sollte es ziemlich einfach sein, „gute“ Ergebnisse zu erzielen, zumindest für die ersten paar Ausgaben. Es scheint jedoch auch logisch, dass mit genügend Stichproben der Schlüssel und die Indizes leicht berechnet werden können, aber ich erwarte die meisten Fälle zu verwenden l Es gibt mehr als 100 Werte.

Meine Fragen sind:

  1. Gibt es Algorithmen, die für dieses Szenario funktionieren?
  2. Wie schwer wäre es? Riss? Berechnen Sie also Werte, die zu gültigen Indizes entschlüsselt werden.
  3. Inwieweit wirkt sich der Besitz von mehr Samples auf die Effizienz des Crackens aus?
  4. Was ist an einem naiven Ansatz falsch? Beispiel:

    u64 output = input repeat 64x output = ((output ^ key) + key) rotate-left 37 

    Angenommen, die Addition umschließt 64-Bit-Ganzzahlgrenzen. Es scheint, als würde der Zufallsschlüssel gründlich mit einer einzelnen Eingabe gemischt, verfügt jedoch über mehr als eine Die Ausgabe könnte die Informationen eines Angreifers schnell erhöhen, obwohl ich nicht weiß, wie. Offensichtlich wird es kaputt gehen, ich versuche nur zu lernen.

  5. Würde einen schlüsselabhängigen Wert für die Linksdrehung verwenden, wie (((key & 0xFFFE)+1) * 37) besser sein? Wie viel hilft es und warum?
  6. Welche Ansätze, Ressourcen usw. würden Sie verwenden, um den Algorithmus zu analysieren und einen besseren zu entwerfen?

Kommentare

  • Dies ist ein XY-Problem, wie Sie es beschreiben. Ein CSPRNG (beachten Sie das S) scheint ‚ überhaupt keine gute Lösung dafür zu sein. Die Anforderung der Schlüsselgröße ist etwas seltsam. Warum können größere Schlüsselgrößen nicht verwendet werden?
  • Ich nehme an, die Schlüsselgröße ist nicht unbedingt erforderlich. Ich hatte gehofft, dass ein 64-Bit-Schlüssel ausreichen würde, um einen 32-Bit-Wert zu verschlüsseln.

Antwort

  1. Gibt es vorhandene Algorithmen, die für dieses Szenario funktionieren?

Ja, tatsächlich gibt es eine Anzahl von 64-Bit-Blockchiffren. Die Standard-Weisheit ist, dass sie nicht für den allgemeinen Gebrauch empfohlen werden, da Standard-Blockverschlüsselungsmodi dazu neigen, Informationen zu verlieren, wenn Sie sich der Geburtstagsgrenze nähern (in diesem Fall ca. 30 GB), für Ihren Anwendungsfall jedoch nicht Seien Sie ein Problem.

Hier sind einige Optionen:

  • 3DES (auch bekannt als TDES); dies ist DES, das dreimal mit drei verschiedenen Schlüsseln angewendet wird. Dies hat den Vorteil

  • Speck mit Parametersätzen mit 64-Bit-Blockchiffren Vorteil, die schnellste Alternative zu sein, und wurde von Leuten entwickelt, die wissen, dass sie es tun und eine überraschende Menge an Kryptoanalyse durchlaufen haben.

  • Eine FPE-Verschlüsselung (wie z FF1, das jede beliebige Blockgröße (einschließlich 64 Bit) verarbeiten kann. Dies hat den Vorteil, dass die Option für eine Optimierung möglich ist (dies ist ein praktischer Ort, um die „anderen versteckten Parameter“ zu platzieren, falls Sie dies für vorteilhaft halten ). Es ist langsamer als die Alternativen; Bei FF1 ergibt sich die Sicherheit aus der zugrunde liegenden Sicherheit von AES sowie der nachweisbaren Sicherheit der Feistel-Struktur.

Diese benötigen nun Schlüssel, die länger als 64 Bit sind. Es ist allgemein bekannt, dass ein 64-Bit-Schlüssel einfach nicht lang genug ist.

  1. Wie schwer wäre es zu knacken? Berechnen Sie also Werte, die in gültige Indizes entschlüsselt werden.

Für eine der oben genannten Optionen wäre die einzige praktische Option, die ein Gegner hätte Errate zufällig Chiffretexte und hoffe, auf einen zu stoßen, der in einen gültigen Index entschlüsselt wird.

  1. Wie viel kostet der Besitz von Weitere Proben wirken sich auf die Effizienz des Crackens aus?

Bei allen oben genannten Fällen macht eine große Menge an Proben den Angriff immer noch unmöglich.

  1. Was ist falsch an einem naiven Ansatz wie …

ARX-Chiffren (eigentlich jede Chiffre, aber insbesondere ARX) sind schwierig zu korrigieren. Insbesondere ARX-Chiffren neigen dazu, differenzielle und lineare Eigenschaften (was solche bedeutet) nicht besonders zu stören Design müsste wirklich gut studiert werden, um sicherzustellen, dass es funktioniert).

  1. Welche Ansätze, Ressourcen usw. würden Sie verwenden, um den Algorithmus zu analysieren und einen besseren zu entwerfen?

Ich würde vorschlagen, dass Sie sich für ein Design entscheiden, das bereits analysiert wurde. Ich liste drei oben auf.

Kommentare

  • Ich ‚ würde z. B. Blowfish gegenüber 3DES bevorzugen, wenn sich relativ kleine Schlüsseleingaben ändern. Die Sicherheit von 3DES würde dies tun Seien Sie zweifelhaft, selbst wenn der Schlüssel auf 128 Bit erweitert wurde (oder natürlich auf 112 Bit).
  • @MaartenBodewes: Haben Sie ein Zitat von jemandem, der 3DES mit einem zeigt? Unbekannter Schlüssel, der von einer zufälligen geraden Permutation unterscheidbar ist?
  • Nein, natürlich nicht. Allerdings müsste ich ‚ lieber nicht einmal begründen, ob meine Verschlüsselung ~ hat 80-Bit- oder ~ 112-Bit-Stärke bei Eingabe eines 128-Bit- oder 192-Bit-Schlüssels (I ‚ Ich habe keinen Zweifel daran, dass Sie dazu in der Lage sind, aber hey, wir sind nicht alle Poncho). Und die Schlüsselgröße scheint ein Problem in der Frage zu sein. In diesem Fall ist es verschwenderisch, nur die Paritätsbits wegzuwerfen.
  • Könnten Sie die Anweisung “ näher erläutern? Nun, diese benötigen Schlüssel, die länger als 64 Bit sind. Die allgemeine Weisheit ist, dass ein 64-Bit-Schlüssel einfach nicht lang genug ist. „? Welche Algorithmen erfordern Schlüssel mit welcher Länge, und 64-Bit-Schlüssel sind nicht genau genug für was?
  • @shader: Schlüssel mit nur 64 Bit sind anfällig für Brute-Force-Suchen von großen (gut finanzierten) Gegnern. Da es im Allgemeinen einfach genug ist, etwas größere Schlüssel (z. B. 128 Bit) zu verwenden, die für niemanden ‚ anfällig sind, entscheiden wir uns im Allgemeinen für die sicherere Option (auch wenn wir ‚ sind nicht sofort besorgt, dass die NSA daran interessiert sein wird, uns anzugreifen, oder ob Amazon beschließt, ihre gesamte Cloud uns zu widmen …

Schreibe einen Kommentar

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