Nehmen wir zum Beispiel an, ich möchte einen Ethereum-Vertrag schreiben, der 1 ETH für jeden zahlt, der mir die richtige Antwort auf gibt sha256^1000000000("good boy")
. Dieser Rechenaufwand wäre viel höher als das Gaslimit von Ethereum, also brauche ich eine Möglichkeit, dies zu beweisen, sha256^1000000000("good boy") = Y
ohne so viel Rechenleistung auf der Seite des Verifizierers zu benötigen.
Wie kann das gemacht werden?
(Das ist eine schwächere Version meiner früheren Frage, die keine guten Antworten erhalten hat. Hoffentlich ist dieses Problem einfacher?)
Das wird aus dem einfachen Grund, dass SHA-256 ein kryptografisch sicherer Hash ist und keine Möglichkeit bietet, dies zu tun, ohne die eigentlichen Berechnungen durchzuführen, nahezu unmöglich sein.
Außerdem gibt es keine bekannten Schwachstellen in SHA-256, die es uns ermöglichen würden, damit umzugehen. Wenn ja, wäre SHA-256 kaputt und definitiv nicht mehr kryptografisch sicher.
Die einzige Lösung wäre, Vorkenntnisse über einen verifizierten Teil der Berechnung zu haben; zum Beispiel $\text{SHA256}^{987654321} = X$, also hast du $X$ als Ausgangspunkt, der nicht erwartet, dass eine Wagenladung von Berechnungen dein $Y$ erhält, was länger dauern wird, als wir beide leben.
Doch selbst wenn jemand bereits Millionen von SHA-256-Runden auf der Zeichenfolge „guter Junge“ berechnet hat, müssen Sie immer noch irgendwie überprüfen, ob diese Vorberechnung tatsächlich korrekt und nicht fehlerhaft ist … was am Ende dasselbe Problem ist wie Sie. Ich muss wohl komplett neu rechnen.
Denken Sie kurz darüber nach – Ihr Szenario kommt einer Rechenkomplexität nahe, die mit der Komplexität verglichen werden könnte, die einige Kryptowährungs-Blockchains wie Bitcoin absichert, die andere, aber gleichermaßen zeit- und ressourcenaufwändige Berechnungen in ihrem „Proof Of Work“ verwenden.
Daher wäre mein Vorschlag, einfach die Komplexität von $$\text{SHA256("good boy")}^{1000000000}$$ auf etwas brauchbareres und erreichbareres $$\text{SHA256("good boy") zu reduzieren }^{1000000}$$
Ein Verifizierer, der nicht so viele Berechnungen durchführen kann, wird immer noch ein oder zwei Tage daran kauen, aber Sie können die Messlatte entsprechend Ihren spezifischen Anforderungen senken oder erhöhen.
Eines sollte klar sein: Mit einem kryptografisch sicheren Hash kann man nicht schneller verifizieren, als diesen komplett zu berechnen; genauso wie der rechnende Sender das Ergebnis, das Sie später verifizieren möchten, vollständig berechnen muss. Mehr Rechenressourcen führen logischerweise zu einer schnelleren Berechnung ... was ein Problem sein kann oder auch nicht, wenn Ihr Verifizierer nicht über dieselben Rechenressourcen wie die andere Partei verfügt. Darauf sollten Sie achten und achten, je nachdem, wie und/oder wo Sie Ihre Idee einsetzen/umsetzen möchten.
sha256^1000000000("good boy")
, damit Sie überprüfen und beweisen können, dass es nicht das ist, was ich behaupte: 2e115facdd6e12fdb2938b6a0d6662efa2cd92dac6a3c5c94c8784c52a1dd0b5
(das ist genau das Problem, nach dem OP fragt, seit er die Frage bei Crypto.SE fallen gelassen hat). Wenn Sie überprüfen und beweisen können, dass mein Hash-Ergebnis nicht korrekt ist, werde ich meine Antwort gerne löschen. Zu Ihrer Bequemlichkeit gilt dieses Angebot, solange ich lebe. Viel Glück! ;)Siehe meine Antwort auf Ihre andere Frage bei Cryptography.SE : Die einfachste Lösung wäre die Verwendung eines intelligenten Vertrags, der den Überprüfungsalgorithmus eines SNARG-Systems für die gewünschte Aussage durchführt. Die Überprüfungszeit kann im Wesentlichen unabhängig von der Größe der Berechnung gemacht werden, und mehrere Implementierungen von SNARGs sind verfügbar. Das Hauptproblem hier ist für den Beweiser, der nicht nur das Rätsel lösen, sondern auch einen Beweis dafür erbringen müsste, dass er es gelöst hat, was einige Zeit dauern kann - aber Sie versuchen, es ihm schwer zu machen, es zu lösen es sowieso, also ist es wahrscheinlich kein Problem.
Ecken
sha256(“str”)^.1000001
). Wir könnten vielleicht eine bessere Methode empfehlen, wenn Sie uns das eigentliche Problem nennen, das Sie lösen möchten. Wenn dies ein Proof-of-Work-Szenario ist, verwenden Sie eine asymmetrische Methode wie zum Beispiel das PoW, das von Bitcoin verwendet wird (geben Sie mir eine Nonce, die zusammen mit meiner Herausforderung einen Hash generiert, der kleiner als eine definierte Schwierigkeit ist).E-Sushi
Ecken
E-Sushi
Ecken
E-Sushi