In welcher Komplexitätsklasse befindet sich der Proof-of-Work (Hashcash) von Bitcoin?

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:

  1. H(n) bildet jede natürliche Zahl auf eine unendliche Binärfolge ab, deren Zeitkomplexität zur Berechnung eines beliebigen Anfangssegments s polynomial in der Größe von n und s ist (was es zu einer Schwammfunktion macht ).
  2. Für jedes Anfangssegment der Länge d hat die Menge aller natürlichen Zahlen n, so dass H(n) dieses Anfangssegment teilt, die natürliche Dichte = 1/(2^d).

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.

+1, obwohl nicht jeder auf dieser Seite ein Kryptograf ist; Es kann hilfreich sein, die Akronyme (FNP, TFNP usw.) zu beschreiben oder auf crypto.stackoverflow.com nachzufragen
Ich denke, es liegt in der Verantwortung des Fragestellers, seine Frage für potenzielle Experten, die die Frage beantworten, verständlich zu machen. Die Angabe aller Hintergrundinformationen sollte nicht bei jeder Frage erforderlich sein, da dies die Fragen zu sehr aufblähen würde.
Polynom in welchem ​​Wert? Welche Rolle spielt hier die Eingabegröße?
Nate: Schwierigkeit.
Das Schubfachprinzip garantiert, dass es für ein x unendlich viele Lösungen gibt. Es garantiert nicht unendlich viele Lösungen für jedes x - ich bin mir nicht sicher, ob wir widerlegen können, dass es ein x gibt, für das es keine Lösung gibt.
Ich bin mir nicht sicher, ob es sinnvoll ist, die Schwierigkeit (oder ihr Protokoll) als Eingabegröße zu betrachten. Insbesondere, weil, wenn die Hash-Funktion als SHA-256 festgelegt ist, Schwierigkeitswerte über 2 ^ 256 bedeutungslos sind, sodass Sie nicht von Asymptotik sprechen können.
@MeniRosenfeld Das pp garantiert, dass es Lösungen gibt (mehr als null, aber nicht unendlich viele, was für eine endliche diskrete Eingabegröße unmöglich ist). Die richtige Eingabegröße sollte vom Standpunkt der Komplexität aus die Anzahl der Bits in x und y sein. Aber um schlampig zu sein, in der Praxis wird das im Wesentlichen die Anzahl der Bits in der Ausgabe der Hash-Funktion sein – weniger würde Probleme für die Existenz einer Lösung mit extremen Schwierigkeiten verursachen, mehr würde vermutlich (!) schnell unnötig viele werden .
@pyramids: Das pp garantiert, dass es für einige x eine Lösung gibt. Nicht für jedes x.
Viele der Fragen hier beziehen sich speziell auf die realen Einschränkungen bei der Verwendung von SHA-256, daher habe ich die Frage überarbeitet, um eine idealisierte perfekte Hash-Funktion zu berücksichtigen, die perfekt skaliert und von der wir hoffen, dass SHA-256 in realen Situationen zumindest anständig annähert .
@MeniRosenfeld Ich stehe korrigiert, aber andererseits hast du bereits den Teil "für einige x" gesagt; Mein Punkt war nur, dass "unendliche Zahl" falsch war, ich wollte den Teil "für einige x" nicht bestreiten. Ich schätze, wir haben beide gebraucht, um (hoffentlich) alle Fehler in Ihrer Aussage zu finden.
@MikeBattaglia Ich habe deine Änderungen gesehen. Ich werde sehen, ob ich später Zeit dafür finde, aber ich nehme an, alles, was ich tun kann, ist (wahrscheinlich), zuzustimmen, dass Sie die Frage so geändert haben, dass ein Großteil meiner Antwort nicht mehr zutrifft. Was Ihnen, fürchte ich, beim Kernproblem nicht helfen wird.
@pyramiden: Meine Kommentare waren eine Antwort auf das OP. Das OP sagte, dass es unendlich viele Preimages gibt, was darauf zurückzuführen ist, dass die Eingabezeichenfolge für SHA-256 beliebig lang sein kann (sie ist nicht auf eine bestimmte Eingabegröße beschränkt). Das ist wahr und ich habe nur den Teil "für alle x" bestritten. Das OP sagte dann, dass die Eingabegröße schwierig ist, was meiner Meinung nach keinen Sinn macht. Ich sehe keine Fehler in meiner Aussage, daher erwarte ich eine Entschuldigung für Ihren respektlosen Kommentar und Ihr Versäumnis, dem Gespräch zu folgen.
@MeniRosenfeld: Es tut mir leid zu lesen, dass Sie über meine Kommentare unzufrieden sind. Ich versuche nur, in der Sache zu helfen, nicht Befehlen oder Wunschdenken nach dem Motto „Ich sehe keine Fehler, also darf es keine geben“ zu folgen. Wenn wir uns stattdessen mit dem Thema befassen würden, würden wir wahrscheinlich neue Dinge lernen – wie zum Beispiel, dass das Schubfachprinzip wirklich nur funktioniert, wenn Eingangs- und Ausgangsbereich gleich groß sind. Mit der Kombination von unendlich vielen und pp stimmt hier etwas nicht, sei es in Ihrer Antwort, der Frage vor der Überarbeitung oder irgendwo in der Art und Weise, wie wir sie kombiniert haben.
@pyramids: Ich schlage vor, dass Sie en.wikipedia.org/wiki/Pigeonhole_principle lesen . Das PP gilt definitiv für Sets unterschiedlicher Größe und unendliche Sets. Bei einer Bijektion von einer unendlichen Menge zu einer endlichen Menge muss es im Ausgabebereich ein Element mit unendlich vielen Urbildern geben. Dieses Argument ist sinnlos - Sie beteiligen sich nicht an der technischen Diskussion, Sie ignorieren Ihre eigenen Fehler und Sie geben mir die Schuld für Dinge, die ich nicht getan habe. "Ich sehe keine Fehler" bedeutet nicht "es darf keine geben", es bedeutet, dass die Verantwortung für das Finden von Fehlern bei Ihnen liegt, wenn Sie so respektlos sprechen möchten, wie Sie es getan haben.
@MeniRosenfeld: Wow, du hast Recht, diese Aussage des Schubfachprinzips hat eine (sogar ausdrücklich gegebene!) Erweiterung auf unendliche Eingaben. Aber es wird noch seltsamer: Das von Ihnen verlinkte erfordert explizit, dass die Eingabe größer als die Ausgabe ist, ganz im Gegenteil zu der Art und Weise, wie im Polynomial Pigeon Hole Principle (PPP) im Grunde das gleiche Pigeon-Hole-Prinzip angewendet wird, siehe http ://en.wikipedia.org/wiki/PPP_%28complexity%29 , wobei Ein- und Ausgabe genau die gleiche Größe haben müssen!
@pyramiden: Ok. PPP ist eine interessante Lektüre, mit der ich vorher nicht vertraut war, aber es ist ein esoterisches Konzept. Was ich damit verknüpft habe, ist das allgemein als Schubfachprinzip bekannte Prinzip. PPP wird wegen seiner Verwendung des PP so genannt. Beachten Sie, dass eine Lösung für PC "entweder ein Preimage von 0 oder zwei Preimages einer Ausgabe" ist. Das PP garantiert eine Lösung dafür, denn wenn es kein Urbild von 0 gibt, wird der effektive Ausgabebereich um 1 Element reduziert - daher gibt es mehr Eingabewerte als Ausgabewerte, das PP gilt und es gibt zwei Urbilder für einige Ausgaben.
(PS - Wo ich oben "Bijektion" sagte, hätte es stattdessen nur "Funktion" sein sollen)
@MeniRosenfeld: Ja, genau. Ich stimme dieser Erklärung zu. Außerdem nehme ich an, dass wir uns mit diesen Informationen wahrscheinlich darauf einigen können, dass keine Bosheit oder Respektlosigkeit im Spiel war? Ich würde es hassen, dich ungerecht behandelt zu lassen; Ich habe einfach alles im Zusammenhang mit dem PPP (und feineren Unterklassen), nach dem speziell vom OP gefragt wurde, und nicht mit einer allgemeineren Form des PP angesprochen.
@pyramiden: Wir können zustimmen, dass es Missverständnisse gab.

Antworten (1)

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.

  1. 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.

  2. 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,

  3. 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!

Du sprichst viele gute Punkte an. Einige von ihnen graben sich mehr in die Formulierung meiner Frage als in den Geist, also habe ich die Frage in Form einer idealisierten "perfekten Hash-Funktion" umformuliert, für die alle Hashes mit gleicher Häufigkeit auftreten und die perfekt skaliert. Ich ging davon aus, dass SHA256 eine perfekte Hash-Funktion ist, aber wenn dies nicht der Fall ist, interessiert mich die Situation, in der eine perfekte Hash-Funktion verwendet wird. Ich denke, das spricht Ihren technischen Punkt 1 an. (Forts.)
Ich denke, meine Neuformulierung spricht auch Ihren Punkt 2 an, da eine Schwäche, wie Sie sie erwähnen, jede perfekte Hash-Funktion betreffen müsste, um eine umfassende Aussage über das gesamte PERFECT HASHCASH-Problem im Allgemeinen zu treffen. Schließlich denke ich, dass meine strengere Formation auch Ihren Punkt Nr. 3 anspricht. Sie werden feststellen, dass ich es in Bezug auf eine Anzahl von Startbits formuliert habe, die 0 sind, anstatt dass das Ding weniger als ein Ziel ist, nur um es einfach zu halten, aber es auf den zielbasierten Ansatz zu verallgemeinern ist auch einfach, wenn Sie wollen.
@MikeBattaglia Ich stimme zu, dass Sie viele der technischen Details gelöst haben. Es bleibt jedoch etwas Problematisches übrig, das möglicherweise mehr als nur eine Formalität ist: Das Schubladenprinzip an der Wurzel der feineren Komplexitätsklassen, die Sie zu erreichen hoffen, ist im Wesentlichen ein Zählargument. Daher funktioniert es bei Problemen, bei denen Sie sagen können: "Entweder ich treffe (auf einer Seite) des Ziels oder ich finde eine Kollision." Da das Finden einer Kollision Ihr (perfektes) Hashcash-Problem nicht lösen wird, ist die Anwendung des Schubladenprinzips möglicherweise nicht möglich. Zumindest konnte ich es nicht.
Pyramiden: Das denke ich, obwohl ich mir nicht sicher war, ob es einen verrückteren und komplizierteren Weg gibt, es auf etwas in PPP zu reduzieren. Aber ich denke, wenn PPP out ist, dann schließt das auch PPAD und PPA aus, da sie in PPP enthalten sind.