Um diese Frage genau zu formulieren, werde ich eine idealisierte hypothetische „perfekte“ Hash-Funktion H(n) definieren, die gute Skalierbarkeitseigenschaften hat, und werde ein Problem PERFECT HASHCASH in Bezug darauf formulieren, wobei ich verstehe, dass praktische Überlegungen möglicherweise nur eine Annäherung ergeben dieses Ideals.
Um es einfach zu halten, werden wir sagen, dass unsere Hash-Funktion H(n) als Eingabe eine einzelne natürliche Zahl n nimmt. Dann sagen wir, dass H(n) genau dann eine perfekte Hash-Funktion ist, wenn:
Die erste Sache formalisiert die Skalierbarkeit unserer Funktion, und die zweite Sache formalisiert die Idee, dass wir wollen, dass alle Hashes ungefähr „gleich oft“ als Ausgabe erscheinen. Abgesehen davon ist unsere perfekte Hash-Funktion eine Black Box, und wir kümmern uns nicht viel darum, wie sie genau funktioniert, solange sie die oben genannten Eigenschaften sowie die üblichen Anforderungen erfüllt, die für Hash-Funktionen gelten (leicht zu berechnen, schwer zu invertieren, schwer zu findende Kollisionen usw.).
Basierend auf der Annahme, dass eine perfekte Hash-Funktion existiert, können wir nun das Problem PERFECT HASHCASH wie folgt definieren: PERFECT HASHCASH nimmt als Eingabe eine perfekte Hash-Funktion H, eine natürliche Zahl n und einen Nur-Nullen-Vektor 0^d der Länge d , die man sich als unäre Darstellung von d vorstellen kann. Eine Lösung für PERFECT HASHCASH besteht aus einem n und d, sodass H(n) mit 0^d beginnt.
Angesichts dieser Eingaben ist klar, dass PERFECT HASHCASH in der Komplexitätsklasse TFNP liegt, da dies ein Funktionsproblem ist und garantiert eine Lösung existiert.
Können wir PERFECT HASHCASH auch als Mitglied einer komplexeren Klasse als TFNP identifizieren?
Könnte es vielleicht an PPP liegen ? PPA ? PPAD ? Etwas anderes?
Hintergrundinformationen finden Sie unter Komplexitätsklasse auf Wikipedia.
BEARBEITEN : Die obige Frage wurde überarbeitet, da ich in der Art und Weise, wie ich sie ursprünglich formuliert habe, davon ausgegangen bin, dass SHA256 das ist, was ich jetzt als perfekte Hash-Funktion bezeichne. Viele Leute haben in den Kommentaren angemerkt, dass dies möglicherweise nicht wahr ist. Anstatt also den Schwerpunkt in dieser Frage darauf zu legen, ob SHA256 speziell die gewünschten Skalierungseigenschaften hat, habe ich eine idealisierte Hash-Funktion definiert, von der wir hoffen, dass SHA256 zumindest gut genug angenähert wird für reale Zwecke und formulierte die Frage dahingehend um.
Als letzte Anmerkung, um mögliche Verwirrung zu beseitigen, müssten wir eine weitere Annahme treffen, um PERFECT HASHCASH echtem Hashcash ähneln zu lassen: dass es eine Möglichkeit gibt, mit einem Datenblock (einer E-Mail, einem Bitcoin-Block usw.) zu beginnen ) und leiten daraus irgendwie eine charakteristische perfekte Hash-Funktion ab, vielleicht indem Sie eine andere perfekte Hash-Funktion so "salzen", dass das Ergebnis auch eine andere perfekte Hash-Funktion ist. Im Fall eines „perfekten Bitcoin“ würden also alle Bergleute im Bitcoin-Netzwerk mit ihren eigenen einzigartigen perfekten Hash-Funktionen H'(n) arbeiten, die irgendwie mit dem Block, an dem sie arbeiten, und jedem Bergmann verbunden sind würden einfach H'(0), H'(1), H'(2), ... der Reihe nach ausprobieren, bis sie etwas finden, das mit genügend Nullen beginnt. Jedes H' wäre eine andere Eingabe für PERFECT HASHCASH.
Es gibt einen Grund, warum kryptografische Hash-Funktionen, wie der doppelte SHA256, der für den Arbeitsnachweis in Bitcoin verwendet wird, normalerweise nicht mit diesen Komplexitätsklassen beschrieben werden, die asymptotisches Verhalten klassifizieren. Tatsächlich gibt es mehrere.
Ein technischer Grund ist, dass Hash-Funktionen oft nicht skalieren. Beispielsweise ist nicht definiert, wie man den Proof-of-Work erweitern würde, um mit 512 Bit zu arbeiten. Eine natürliche Wahl wäre dann, SHA512 zu verwenden, aber der Wechsel von SHA256 zu SHA512 erfordert viele im Wesentlichen willkürliche Entscheidungen, wie das Ändern der Anzahl der Runden von 64 auf 80, die standardisiert sind, aber nicht auf natürliche Weise skalieren und nicht für beliebig großen Hash Größen.
Für den Kryptographen ist es nicht relevant. Selbst eine NP-vollständige Hash-Funktion, die der stärkste unter den Komplexitätsfällen wäre, die Sie zum Erstellen eines starken Hashs aufgelistet haben, garantiert nicht alles, was wir von einem kryptografischen Hash oder einer Proof-of-Work-Funktion erwarten. Sich für NP-Vollständigkeit zu qualifizieren, ist lediglich eine starke Heuristik, dass das Problem nicht durch einen Algorithmus gelöst werden kann, der asymptotisch weniger als exponentiell ist. Aber für eine gute Hash-Funktion möchten wir, dass sie bei der sehr begrenzten Bitanzahl, mit der wir sie verwenden, maximal exponentiell ist, in dem Sinne, dass das Lösen wirklich so schwierig ist wie das Ausprobieren aller Möglichkeiten in einer Hash-Funktion. Für seine entsprechende Proof-of-Work-Funktion so schwierig, dass nur ein Bruchteil x des Ausgangsbereichs akzeptabel ist, Dies würde bedeuten, dass wir damit rechnen sollten, dass eine Anzahl von Versuchen erforderlich ist, die dem x/2-fachen des gesamten Ausgabebereichs entspricht, um einen Proof-of-Work zu finden. Alles Bessere würde einen Akademiker veranlassen, die zugehörige Hash-Funktion kaputt zu nennen, selbst wenn es nur die Anzahl der Versuche halbiert, was sie immer noch in eine exponentielle Komplexitätsklasse bringen würde und sogar mit einer NP-vollständigen Funktion leicht möglich wäre .
Ein beeindruckendes (aber nur oberflächlich verwandtes) Beispiel dafür, wie es nicht ausreicht, etwas scheinbar NP-vollständiges auszuwählen, um etwas kryptografisch Schwieriges zu erhalten, ist die Rucksackkryptographie. Das Problem war natürlich, dass durch die Auswahl von Spezialfällen die Komplexität des Problems reduziert wurde. Der Punkt ist, dass sogar ein NP-vollständiges Problem weniger schwierig sein kann, als tatsächlich jede Lösung ausprobieren zu müssen, obwohl es manchmal so beschrieben wird! Für kryptografische Qualität ist es wörtlich gemeint, jede Eingabe ausprobieren zu müssen; für die Komplexitätsanalyse ist es gut genug, wenn die asymptotische Skalierung exponentiell in der Anzahl der Bits bleibt. Wenn Sie also das Problem auf eine andere NP-vollständige Funktion reduzieren könnten, die nur jedes 1000. Bit als Eingabe verwendet,
Es ist schwierig! Und ich denke, diese Schwierigkeit hat Sie bereits in die Irre geführt: Auch Ihre Argumente für die Platzierung dieses Problems in TFNP sind zwar sehr nah an der Wahrheit, aber im mathematischen Sinne nicht wahr. Wenn ich beispielsweise x=0 spezifiziere, kann kein y hash(y) < x erzeugen, was Ihrer Behauptung widerspricht. Ob alle anderen x in Ordnung sind oder ob es einen erforderlichen Mindestwert für x gibt, hängt wahrscheinlich davon ab, wie Sie die "Strings" y definieren, mit denen Hashcash arbeiten soll. Für Bitcoin mit einer begrenzten Anzahl von Bits, die in den Doppel-SHA256 eingehen, würde ich mich nicht wundern, wenn x = 1 auch keine Lösung hat, dh wenn kein Block-Hash genau Null werden kann. Natürlich werden wir es wahrscheinlich nie erfahren. In der Praxis ist es wünschenswert, dass eine Hash-Funktion vollständige Proof-of-Work-Funktionen auf die von Ihnen beschriebene Weise erzeugt, aber ich denke nicht, dass dies eine bewährte Qualität ist. Haftungsausschluss: Ich weiß es ehrlich gesagt nicht. Sie sollten wirklich einen Kryptografen fragen.
Was noch zu tun ist, um Ihre Frage zu beantworten, nachdem Sie herausgefunden haben, wie die Hash-Funktion skaliert, und überprüft haben, ob sie für beliebig große Größen polynomial bleibt, ist nur dieser Beweis, dass die entsprechende Proof-of-Work-Funktion vollständig ist. Wenn dieser Nachweis nach dem Schubladenprinzip geführt werden kann, haben Sie gezeigt, dass es sich um PPP handelt usw.
Wo ist also die Schwierigkeit? Zum Beispiel, wenn y mindestens so viele Bits wie x hat und wenn wir Ihr Hashcash so ändern, dass es weniger als oder gleich ist, sondern nur weniger als, und wenn wir bereit sind, es bis zu dem Punkt weiter zu multiplizieren, dass entweder Das Finden eines Arbeitsnachweises oder das Vorhandensein einer Hash-Kollision ist gut genug, um "Hashcash" wahr zu machen, dann würde offensichtlich das Schubladenprinzip gelten, wie es in dem von Ihnen verlinkten Wikipedia-Artikel erläutert wird.
Aber alles andere würde meines Erachtens nicht ausreichen, um das Schubladenprinzip anzuwenden, und würde daher nicht die Frage beantworten, ob Hashcash in PPP enthalten ist oder nicht. Um noch einmal auf Ihren verlinkten Wikipedia-Artikel zu verweisen: Nur für sehr wenige Probleme ist die Antwort bekannt, selbst für PPP. Für die Sonderfälle PPP, PPA und PPAD wird es natürlich noch schwieriger. Wenn Sie eine Lösung finden, veröffentlichen Sie sie in einer wissenschaftlichen Zeitschrift, nicht nur hier!
Macher7
Murch
Nate Eldredge
Mike Battaglia
Meni Rosenfeld
Meni Rosenfeld
Benutzer6049
Meni Rosenfeld
Mike Battaglia
Benutzer6049
Benutzer6049
Meni Rosenfeld
Benutzer6049
Meni Rosenfeld
Benutzer6049
Meni Rosenfeld
Meni Rosenfeld
Benutzer6049
Meni Rosenfeld