Quantenangriff auf Hash-Funktionen


8

Die Fragestellung ist inspiriert von dem Trick in Abschnitt 4 der PDF-Version des Papiers Quantum Attacks on Classical Proof Systems - Die Härte des Quantenrückspulens (Ambainis et al. , 2014) . Folien finden Sie hier . Ich folge dem Argument dort nicht vollständig, also habe ich vielleicht etwas Wichtiges verpasst, aber hier ist meine Interpretation ihres Tricks.

xH(x)H(x)=H(x)xxmuc=H(mu)(m,u)so dass wegen der kollisionsfreien Natur von Hashes. Meine einzige Wahl ist es, die Verpflichtung zu zu öffnen .c=H(mu)(m,u)

Nun greifen wir dieses Protokoll mit einer Quantenschaltung der Hash-Funktion an.

  1. Überlagern Sie alle möglichen Eingaben und fragen Sie die Hash-Funktion mit diesem Status ab, um den Status .xi|ψ=i|xi|H(xi)

  2. Messen Sie das zweite Register, um eine zufällige Verpflichtung zu erhalten. Die Messung wählt zufällig für einige . Das erste Register hat dann so dass .c=H(xi)i|ϕ=j|xjj,c=H(xj)

  3. Ich möchte die Verpflichtung für einige öffnen, die mir vom Gegner gegeben werden. Verwenden Sie die Suche von Grover im ersten Register, um ein aus dem Status , das eine bestimmte Eigenschaft erfüllt. Insbesondere ist die besondere Eigenschaft, dass das ersteBits von sind . Das heißt, ich werde suchen, um .mxsol|ϕ=j|xj|m|xsolmxsol=mu

Unter Verwendung der zuvor veröffentlichten Folien (Folie 8) und ihrer Terminologie ist es effizient, einen Wert aus dem Schnittpunkt zweier Mengen und . Hier ist die Menge aller so dass und die Menge aller wobei das ersteBits von sind genau .xSPSxH(x)=cPx|m|xm

Meine Fragen zu diesem Angriff lauten wie folgt:

  1. Habe ich die Grundidee des Angriffs richtig verstanden? Wenn falsch, ignoriere den Rest des Beitrags!

  2. Wie viele Elemente enthält die Überlagerung nachdem wir uns auf ein bestimmtes ? Damit ich die Verpflichtung für jede Nachricht öffnen kann, sollte ich anscheinend ) -Elemente (die Größe des Bereichs der Hash-Funktion) haben. Das ist aber zu groß.|ϕcO(N)

  3. Die Geschwindigkeit der Grover-Suche - dies hängt mit dem vorherigen Punkt zusammen - ist die andere Sache. Wäre die rechnerische Komplexität der Suche über eine so große Überlagerung nicht die gleiche wie der Versuch, ein Vorbild für eine bestimmte Ausgabe der Hash-Funktion zu erraten, da man über alle suchen muss ? Wo liegt in diesem Fall der Vorteil?|ϕu

Ich suche mehr nach der Intuition als nach mathematischen Beweisen, daher wird jede Hilfe sehr geschätzt!

Antworten:


1

Habe ich die Grundidee des Angriffs richtig verstanden? Wenn falsch, ignoriere den Rest des Beitrags!

Meistens. Die Art und Weise Sie es beschreiben, werden Sie in der Tat den Zustand erhalten , aber Sie werden nicht im Stande sein , die einheitliche Transformation durchzuführen . Wenn Sie in Schritt 3 Grover im Status , müssen Sie als Teil des Grover-Algorithmus . Der Grund ist folgender: Normalerweise wird Grover als Algorithmus dargestellt, der einen Wert sucht , der ein Prädikat erfüllt . In diesem Fall initialisiert der Grover-Algorithmus zuerst den Status auf|ϕI - | & phgr; & phgr; | & phiv; = Σ x { 0 , 1 } n 2 - n N | & phgr; I - |I|ϕϕ||ϕI|ϕϕ|x{0,1}nP|ϕ:=x{0,1}n2n/2|x. Und während seiner Hauptschleife wendet es den Flip-Operator . Dieser Operator ist recht einfach zu konstruieren, wenn , also normalerweise nicht als eine Anforderung des Algorithmus erwähnt. Anstatt jedoch suchen, können Sie nach für eine Menge suchen . (Schließlich sind die Bitstrings der Länge nichts Besonderes .) Dann müssen Sie die Beschreibung von Grover ändern: Der Anfangszustand , und wir müssenI|ϕϕ||ϕ=x{0,1}n2n/2|xx{0,1}nxXXn|ϕ=xX2|X|/2|xI|ϕϕ|während der Hauptschleife. Für viele Mengen (z. B. Zahlen modulo ) ist es ziemlich einfach, und . Im allgemeinen Fall kann es jedoch sein, dass es schwierig ist, eines von beiden zu konstruieren. In Ihrer Beschreibung des Algorithmus haben wir eine ähnliche Situation. Das heißt, für einige feste . Aber für diese Menge gibt es keine Möglichkeit, oder . Deshalb funktioniert Ihr Algorithmus nicht (aber er gibt immer noch die richtige Idee). Stattdessen in dem von Ihnen zitierten beideXN|ϕI|ϕϕ|X={x:H(x)=c}cX|ϕI|ϕϕ||ϕund werden von speziellen Orakeln bereitgestellt, die nur für diesen Zweck konstruiert wurden. Mit diesem Orakel können Sie dann den Grovers-Algorithmus im Status .I|ϕϕ||ϕ

Wie viele Elemente enthält die Überlagerung nachdem wir uns auf ein bestimmtes ?|ϕc

Dies hängt von den von Ihnen gewählten Parametern ab. Wir erwarten ungefähr wenn die Größe der Domäne und die Größe des Bereichs von . Damit die Dinge interessant sind, sollten Sie wählen, damit die Überlagerung exponentiell viele Elemente enthält (und mindestens damit jede Nachricht möglich ist). Ich gehe jedoch davon aus, dass Sie sich darüber wundern, weil Sie der Meinung sind, dass die Anzahl der Elemente gering sein sollte, damit Grover funktioniert, was nicht der Fall ist (siehe unten):M/NMNHMN2|m|

Die Geschwindigkeit der Grover-Suche - dies ist das Hauptproblem und ich bin mir nicht sicher, wie ihr Trick tatsächlich funktioniert. Wäre die Rechenkomplexität nicht die gleiche wie der Versuch, ein Vorbild für eine bestimmte Ausgabe der Hash-Funktion zu erraten, da man über alle u suchen muss? Wo liegt in diesem Fall der Vorteil?

Hier scheint ein Missverständnis zu liegen. Erinnern Sie sich an meine Erklärungen zu Grovers Algorithmus am Anfang dieser Antwort. Grover sucht einige , erfüllen einige Prädikat . In unserem Fall kann sehr groß sein ( Elemente), da es die Menge aller Vorbilder von . Aber das spielt keine Rolle. Denken Sie daran, dass der ursprüngliche Grover mit was ebenfalls riesig ist, aber schnell funktioniert, solange wir nach suchen , das eine gemeinsame Eigenschaft . Wenn wir zum Beispiel mit Grover nach suchen , das (das Prädikat erfülltxXPXM/Nc{0,1}nx{0,1}nPx{0,1}n33xP), dann haben wir, dass es viele gibt , die erfüllen , alle 33. erfüllt es! Und die Laufzeit wird so etwas wie . Wenn also in der Regel ein Prädikat für jedes te Element von erfüllt ist , benötigt der Grover-Algorithmus, der nach sucht , das erfüllt, ungefähr Schritte. Hier spielt es keine Rolle, was Set ist oder wie groß es ist! (Solange wir eine Möglichkeit haben, und für diese MengexPx33PiXxXPiX|ϕI|ϕϕ|X.) Nun ist in der von Ihnen beschriebenen Einstellung . Und ist das Prädikat, das sagt, dass mit beginnt . Um die Laufzeit des Grover-Algorithmus in diesem Fall zu analysieren, ist uns egal , aber wir müssen wissen, wie oft ein Element erfüllt . Das ist einfach: Jedes -te Element tut es. Die Laufzeit von Grover ist also . Dies ist ein Problem, wenn lang ist, aber wenn z. B. nur ein bisschen ist, dann funktioniert dies gut. Wenn wir beispielsweise die Hash-Funktion verwenden, um Ein-Bit-Nachrichten festzuschreiben, können wir die Festschreibung für einen beliebigen Wert von öffnen.X={x:H(x)=c}PxmXP2|m|O(2|m|)mmm.

Wenn Sie ein Beispiel wünschen, in dem länger ist, müssen Sie die Konstruktion variieren. Grundsätzlich schreiben Sie jedes Bit einzeln fest und verketten die Verpflichtungen. Dann kann jede Verpflichtung mit der oben beschriebenen Methode gebrochen werden, und Sie müssen den Algorithmus times .m|m|

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.