Kann die Bitcoin-Blockchain die Notwendigkeit von Trusted Computing in Smart Contracts beseitigen?

Lassen Sie mich vorab sagen, dass ich ein Anfänger bin, aber dies ist mein grobes Verständnis davon, wie die Blockchain von Bitcoin funktioniert. (Dies basiert größtenteils auf Blogbeiträgen wie diesem .) Wenn Person A eine bestimmte Menge Bitcoin an Person B überweisen möchte, signiert er eine Nachricht, die die Übertragung mit seinem privaten Schlüssel autorisiert. Ein Minderjähriger kann die Nachricht untersuchen und mit einem Programm, das eine bestimmte mathematische Operation durchführt, überprüfen, ob Person A die Nachricht wirklich signiert hat. Aber da ist die Frage, woher wissen wir, dass der Miner wirklich die Rechenarbeit geleistet hat, die zur Überprüfung der Signatur erforderlich ist? Dies wird durch ein sogenanntes „Proof-of-Work“-Protokoll gelöst, mit dem der Miner nachweisen kann, dass er die Verifizierungsberechnung durchgeführt hat.

Ich wurde an all dies erinnert, als ich von dem Begriff „externe Staatsverträge“ hörte, einer Art Smart Contract, der kurz in der 35-Minuten-Marke dieses Videos und ausführlicher in diesem Bitcoin-Wiki-Artikel beschrieben wird. In einem externen Staatsvertrag können bestimmte Streitigkeiten über objektive Merkmale der Welt automatisch gelöst werden, anstatt einem menschlichen Schiedsrichter zu vertrauen, der eine faire Entscheidung trifft. Beispielsweise könnte ein Vertrag festlegen, dass im Falle eines Streits über eine Sportwette automatisch ein Computerprogramm (mit im Vertrag angegebenem Quellcode) ausgeführt wird, das eine Sportdatenbank konsultiert, feststellt, wer die Wette gewonnen hat, und die Bitcoin ist automatisch entsprechend übertragen. Aber der Bitcoin-Wiki-Artikel beschreibt ein Problem damit: Wie stellen Sie fest, dass das Computerprogramm, das den Streit lösen soll, tatsächlich ausgeführt wurde, und wenn ja, ob die Ausgabe des Programms von dem Computer, auf dem es ausgeführt wurde, fair gemeldet wird? Der Artikel schlägt vor, einen oder mehrere „vertrauenswürdige Computer“ zu verwenden, die als Orakel bekannt sind.

Aber mir fällt auf, dass das Problem mit externen Staatsverträgen analog zu dem Problem ist, das ich oben beschrieben habe und das mit der Blockchain gelöst wird. Warum können Sie es in diesem Fall nicht genauso lösen? Das heißt, genauso wie Proof-of-Work-Protokolle verwendet werden können, um zu demonstrieren, dass ein Miner den Code ausgeführt hat, der bestimmt, ob eine Signatur authentisch ist, warum können Sie Miner nicht dazu bringen, Streitbeilegungscodes für externe staatliche Verträge auszuführen, und dann mithilfe von Proof-of-Work-Protokollen feststellen, ob sie den Code wirklich ausgeführt haben? Das würde die Notwendigkeit eines vertrauenswürdigen Computers beseitigen.

Gibt es einen signifikanten Unterschied zwischen den beiden Fällen, der dies undurchführbar machen würde? Wurde dies bereits durchgeführt?

Jede Hilfe wäre sehr willkommen.

Vielen Dank im Voraus.

Antworten (3)

... wie stellen Sie fest, dass das Computerprogramm, das den Streit lösen soll, tatsächlich ausgeführt wurde, und wenn ja, ob die Ausgabe des Programms von dem Computer, auf dem es ausgeführt wurde, fair gemeldet wird? ...

Aber mir fällt auf, dass das Problem mit externen Staatsverträgen analog zu dem Problem ist, das ich oben beschrieben habe und das mit der Blockchain gelöst wird. Warum können Sie es in diesem Fall nicht genauso lösen?

Wenn ich Sie richtig verstehe, lautet die Frage, die Sie stellen: Warum können Sie das Blockchain-Vertrauens-/Koordinierungssystem nicht erweitern, um das Problem der Beilegung von Streitigkeiten über die Gültigkeit der Ausgabe einer Berechnung (oder die Gültigkeit einer Beobachtung, wie "Wer dieses Spiel gewonnen?"). Wenn die Blockchain schließlich alle dazu bringt, sich auf eine Transaktionsaufzeichnung zu einigen, warum dann nicht auf willkürliche Behauptungen über die Welt?

Die Antwort lautet kurz gesagt, dass die Blockchain die „Behauptungen“, die sie „beweist“, auf diejenigen beschränkt, für die sie konstruktionsbedingt (starke) Beweise liefern kann. Und diese Behauptungen beruhen auf speziellen kryptografischen Eigenschaften, die (soweit wir wissen) nicht zu willkürlichen Behauptungen über die Welt verallgemeinern.

Genauer gesagt, was die Blockchain behauptet (und die Netzwerkkoordination einleitet) ist so etwas wie: „Diese Transaktionen sind in dieser Reihenfolge passiert.“ Und es beweist es, indem es sagt: "Transaktion T30 muss von jemandem gesehen worden sein, der bereits die Transaktionen T29, T28 ... gesehen und 9000 Arbeitseinheiten (z. B. Berechnungen von SHA-256) dafür aufgewendet hat." Was wiederum dadurch bewiesen wird, dass SHA-256 eine bekannte Berechnungsschwierigkeit aufweist und der Proof-of-Work für Transaktion T30 eindeutig aus den vorherigen Transaktionen generiert wurde.

Das ist ein ganz anderes Problem als zu beweisen, dass eine bestimmte (Familie von) Berechnung(en) ein bestimmtes Ergebnis hat. Für dieses Problem (wie Nate Eldredge erwähnt) sollten Sie Zero-Knowledge Proofs verwenden, ein aktives Forschungsgebiet. Aber diese a) gelten nur für "reine Funktionen", nicht willkürliche Fragen zur realen Welt, und b) erfordern eine gewisse Asymmetrie zwischen Berechnung und Verifikation -- dh es muss viel einfacher sein, sie zu verifizieren als die Berechnung durchzuführen, oder Sie haben nichts gespart: Rechnen Sie einfach selbst, anstatt den Berichten anderer zu vertrauen!

Und sie entfernt sich immer weiter von dem Problem, reale Beobachtungen zu „beweisen“. Also ja, das Beste, was wir kryptografisch haben, ist, eine Adresse in bestimmten Angelegenheiten als vertrauenswürdig zu kennzeichnen und dann die Gültigkeit ihrer Signaturen zu überprüfen.

In Bezug auf die Überprüfung von Behauptungen aus der realen Welt ist das Beste, was wir haben, alle Auswirkungen dieser Behauptung zu überprüfen, was nur eine altmodische Überprüfung von Fakten ist. Für das Ballspiel-Beispiel wäre das die Überprüfung von Dingen wie „Was berichten die Zeitungen über das Spiel? Was sagen die Liga-Rekorde? Wer spielte als nächstes im Turnier?“ Was in der Praxis in Ordnung ist – wie Dinge beim Buchmacher zu lösen. Aber es liefert keinen kryptografischen Beweis, der robust gegen Angreifer sein müsste, zB das Fälschen von Nachrichten und dergleichen.

Okay, jetzt habe ich genug geredet. Habe ich deine Frage beantwortet?

Nehmen wir ein einfaches Beispiel: Person A und Person B wetten darauf, ob die milliardste Stelle von Pi ungerade oder gerade ist. Sie führen beide dasselbe Programm aus, und Person A behauptet, dass die Ausgabe eine ungerade Ziffer ist, während Person B behauptet, dass sie gerade ist. Einer von ihnen lügt eindeutig, aber wie können wir herausfinden, wer die Wette gewinnt? Sie können darauf vertrauen, dass ein oder mehrere externe Schiedsrichter das Programm selbst ausführen, aber das vereitelt den Zweck programmierbarer Klauseln in intelligenten Verträgen, der darin besteht, die Notwendigkeit vertrauenswürdiger externer Schiedsrichter bei der Beilegung von Vertragsstreitigkeiten zu beseitigen.
Das hängt davon ab, wie Sie "die Ziffern von Pi" oder "laut Programm" für Vertragszwecke definieren. Eine Möglichkeit wäre, ein Pi-Stellen-Rechenprogramm in den Vertrag der Blockchain aufzunehmen. (Beachten Sie, dass die Skriptsprache schleifenlos und Turing-unvollständig ist, also wäre es wahrscheinlich lang.) Dann wird es wie jedes andere Skript verifiziert: Jeder, der die Blöcke sieht, die diese enthalten, durchläuft das Programm, um zu prüfen, wer die Auszahlung erhält, und sie lehnen ab Transaktionen, die auf der falschen Antwort beruhen. Aus diesem Grund möchten Sie normalerweise nur eine Adresse einer vertrauenswürdigen Partei angeben, um den Anruf zu tätigen.
Ob Smart Contracts die Notwendigkeit vertrauenswürdiger Schiedsrichter von Drittanbietern beseitigen sollen, glaube ich nicht. In einigen Fällen ist die Vertragsauflösung so mechanisch, dass die Notwendigkeit der Vertrauensperson entfallen kann. Wenn jedoch jemand ein Urteil fällen muss, besteht der Zweck dieser Smart Contracts nur darin, eine zuverlässige Treuhandinfrastruktur bereitzustellen – damit der Schiedsrichter das Geld nur an eine der Hauptparteien geben kann und nicht z. B. damit abhauen kann.

Ich fürchte, Ihr erster Absatz ist nicht korrekt.

Der Proof-of-Work, den ein Miner vorlegt , bescheinigt nicht „Ich habe die Unterschriften verifiziert“. Die Überprüfung einer Signatur ist eine billige Rechenaufgabe, und jeder Client im Netzwerk kann (und tut) selbst überprüfen, ob jede Signatur in der Blockchain gültig ist. Sie müssen sich nicht auf einen Miner verlassen, der die Signaturen für sie verifiziert. Wenn wir lediglich überprüfen müssten, ob jede Transaktion ordnungsgemäß autorisiert wurde, bräuchten wir überhaupt keine Miner.

Mining löst ein anderes Problem, das als „Double Spend Problem“ bezeichnet wird: Es könnte zwei verschiedene Transaktionen geben, die beide ordnungsgemäß autorisiert sind und in Konflikt stehen, weil sie versuchen, dieselben Coins auszugeben. Die Gemeinschaft muss in der Lage sein, einen Konsens darüber zu erzielen, welche der beiden akzeptiert werden soll. Die Wahl kann willkürlich getroffen werden, aber um die Gemeinschaft an dieser Wahl festzuhalten, verlangt das Protokoll einen Arbeitsnachweis, um zu bestätigen, dass diese Transaktion akzeptiert wird. Wenn die Community (oder jemand in ihr) später zurückgehen und ihre Meinung ändern wollte, welche Transaktion akzeptiert werden soll, müsste sie die ganze Arbeit, die in der Zwischenzeit geleistet wurde, wiederholen, was unerschwinglich teuer sein soll. Die geleistete Rechenarbeit ist an und für sich nutzlos; der Arbeitsnachweis bescheinigt nichts andereses wurde etwas gearbeitet.

Was Sie später beschreiben, klingt für mich eher nach einem Zero-Knowledge-Beweis .

OK, können dann Zero-Knowledge-Beweise verwendet werden, um das im Bitcoin-Wiki-Artikel beschriebene Trusted-Computing-Problem zu beseitigen?
@KeshavSrinivasan: Ich weiß es nicht. Eigentlich, je mehr ich lese, desto unwahrscheinlicher sieht es aus.
OK, kennen Sie eine andere Möglichkeit, einen Streit über die Ausgabe einer Berechnung automatisch zu lösen, ohne sich auf Trusted Computing zu verlassen?
@keshav: Ich nicht.

Das Problem bei der Verwendung von Blockchain zur Überprüfung von Transaktionen in der Außenwelt besteht darin, dass das Protokoll erfordert, dass jeder überprüfen kann, ob ein bestimmter Block gültig ist.

Jeder Miner kann also jederzeit zu Block Nr. 2 zurückkehren und überprüfen, ob alle Transaktionen in diesem Block gültig waren. Das ist natürlich nur möglich, wenn die Transaktionen nicht auf einen externen Input verweisen. Denn wenn txs auf externe Eingaben verweisen, wurde die Eingabe möglicherweise in der Zwischenzeit geändert, und Sie können dies nicht mehr tun.

Warum ist es wichtig, die Gültigkeit der Blöcke zu überprüfen? Denn das ist Blockchain – die längste Reihe von Blöcken seit der ersten. Wenn Ihr Bitcoin-Client herausfinden möchte, welche Blockchain die richtige ist, lädt er alle Blockchains herunter, von denen die Leute behaupten, dass sie „die Eine“ sind, sortiert dann diejenigen aus, die unangemessene Blöcke enthalten, und wählt dann diejenige aus, die am längsten ist.

Deshalb gibt es keine Blockchain-basierten Währungen, die externe Eingaben unterstützen, und die Leute verwenden dafür Orakel. Deshalb hat Ethereum alle coolen Vertragsmechanismen, aber diese Verträge können nicht auf externe Ausgänge verweisen :)

Einige der Antworten finden Sie möglicherweise im Orisi.org/distributed oracles whitepaper .