Alles begann mit dem Bitcoin-Whitepaper, einem erläuternden Dokument zum Konzept einer Technologie, an der es heute keine Zweifel mehr gibt. Bitcoin und die zugrunde liegende Technologie, Blockchain, ist geworden eine der größten technologischen Revolutionen der letzten Zeit. Dieses Konzept ermöglicht es uns, Anwendungen mit unglaublichem Potenzial zu erstellen, da es auch außerhalb des Finanzsektors, für den es ursprünglich entwickelt wurde, noch viel zu entdecken gibt.
Aber wie hat alles angefangen?
Wie wir im Artikel erklärt haben „Wer hat Bitcoin geschaffen?“, Satoshi Nakamoto veröffentlichte 2008 ein Dokument in einem Forum. Darin definierte er theoretisch a globale Zahlungsmethode ohne Zwischenhändler zwischen Benutzern. Ein Ökosystem, das aus bisher noch nie gesehenen kombinierten Teilen besteht. Das Dokument mit einer Präsentation im akademischen Stil heißt „Bitcoin Paper“. und du kannst es hier überprüfen.
Nachfolgend hinterlassen wir Ihnen die ins Spanische übersetzte Version des Bitcoin-Whitepapers.
Bitcoin: Ein elektronisches Bargeldsystem von Benutzer zu Benutzer
Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org
Zusammenfassung
Eine rein elektronische Version von Bargeld würde es ermöglichen, Online-Zahlungen direkt von einem Unternehmen zum anderen zu senden. All dies, ohne dass Sie sich an ein Finanzinstitut wenden müssen. Digitale Signaturen bieten einen Teil der Lösung des Problems, aber die Hauptvorteile gehen verloren, wenn ein vertrauenswürdiger Dritter vorhanden sein muss, um das zu verhindern doppelte Ausgaben. Wir schlagen eine Lösung für das Problem der doppelten Ausgaben mithilfe eines Benutzer-zu-Benutzer-Netzwerks vor.
Das Netzwerk versieht die von ihm eingegebenen Transaktionen mit einem Zeitstempel in einer fortlaufenden Kette von Arbeitsnachweisen, die auf der Berechnung von Hashes basieren. Daher, Es entsteht ein Datensatz, der nicht geändert werden kann ohne den gesamten Arbeitsnachweis erneut erstellen zu müssen. Die längste Kette dient nicht nur als Zeuge und Beweis für den Ablauf der Ereignisse, sondern stellt auch sicher, dass sie aus dem Pool mit der größten CPU-Verarbeitung stammt.
Solange der Großteil der CPU-Rechenleistung unter Kontrolle ist Knoten die nicht kooperieren, um das Netzwerk anzugreifen. Auf diese Weise generieren sie die längste Kette und sind den Angreifern gegenüber im Vorteil. Das Netzwerk selbst erfordert eine minimale Struktur. Nachrichten werden mit dem geringsten Aufwand gesendet und Knoten können das Netzwerk nach Belieben verlassen und wieder beitreten. Wir akzeptieren immer die längste Proof-of-Work-Kette, als Beweis dafür, was während seiner Abwesenheit passiert ist.
Einführung
Der Internethandel verlässt sich mittlerweile ausschließlich auf Finanzinstitute, die als vertrauenswürdige Dritte für die Abwicklung elektronischer Zahlungen fungieren. Obwohl das System für die meisten Transaktionen gut genug funktioniert, weist es dennoch die inhärenten Schwächen des vertrauensbasierten Modells auf. Völlig unumkehrbare Transaktionen sind eigentlich nicht möglich, denn Finanzinstitute kommen bei Streitigkeiten nicht um eine Mediation herum.
Die Kosten der Mediation erhöhen die Transaktionskosten. Dies begrenzt die praktische Mindestgröße pro Transaktion und eliminiert die Möglichkeit, kleine Gelegenheitstransaktionen durchzuführen, was zu höheren Kosten für diesen Verlust und der Unmöglichkeit führt, nicht rückgängig zu machende Zahlungen für nicht rückgängig zu machende Dienste zu leisten. Mit der Möglichkeit einer Umkehr wächst das Bedürfnis nach Vertrauen. Händler müssen sich um ihre Kunden kümmern, indem sie sie belästigen, indem sie mehr Informationen anfordern, als sonst erforderlich wären.
Ein gewisser Prozentsatz an Betrug wird als unvermeidlich akzeptiert. Diese Kosten und Zahlungsunsicherheiten können vermieden werden, wenn die Person physisches Geld verwendet. Es gibt jedoch keinen Mechanismus, um Zahlungen über einen Kommunikationskanal ohne einen vertrauenswürdigen Dritten durchzuführen. Was benötigt wird, ist ein elektronisches Zahlungssystem, das auf kryptografischen Beweisen und nicht auf Vertrauen basiert.. Dadurch soll es den beiden interessierten Parteien ermöglicht werden, Transaktionen direkt durchzuführen, ohne dass ein vertrauenswürdiger Dritter erforderlich ist. Transaktionen, die rechnerisch nicht rückgängig zu machen sind, würden Verkäufer vor Betrug schützen. Und ebenso könnten routinemäßige Treuhandmechanismen leicht implementiert werden, um Käufer zu schützen.
In dieser Arbeit, Wir schlagen eine Lösung für das Problem der doppelten Ausgaben mithilfe eines Zeitstempelservers vor von Benutzer zu Benutzer verteilt, um einen rechnerischen Beweis für die chronologische Reihenfolge von Transaktionen zu erstellen. Das System ist sicher, solange die ehrlichen Knoten gemeinsam mehr Rechenleistung (CPU) kontrollieren als jede Gruppe angreifender Knoten.
Umgang
Wir definieren eine elektronische Währung als eine Kette digitaler Signaturen. Jeder Besitzer überträgt die Münze auf den nächsten, indem er einen Hash der vorherigen Transaktion und den öffentlichen Schlüssel des nächsten Besitzers digital signiert und beide am Ende der Münze hinzufügt. Ein Begünstigter kann die Unterschriften überprüfen, um die Eigentumskette zu überprüfen.
Das Problem besteht darin, dass der Begünstigte nicht überprüfen kann, ob einer der Vorbesitzer die Münze nicht doppelt ausgegeben hat. Die gängige Lösung besteht darin, eine vertrauenswürdige zentrale Autorität einzuführen. Eine Art Münzprägeanstalt, die prüft, ob es bei jeder Transaktion zu doppelten Ausgaben kommt oder nicht. Nach jeder Transaktion muss die Münze an die Münzstätte zurückgegeben werden, um eine neue Münze zu erzeugen. Auf diese Weise können nur die Münzen, die direkt von dieser Münzstätte generiert werden, vertrauenswürdig sein und keine Doppelausgaben verursachen.
Das Problem bei dieser Lösung besteht darin, dass das Schicksal des gesamten Währungssystems von dem Unternehmen abhängt, das die Münzstätte verwaltet. Alle Transaktionen müssen über sie abgewickelt werden, so wie es eine Bank tun würde. Daher müssen wir einen Weg finden, damit der Begünstigte weiß, dass die Vorbesitzer keine früheren Transaktionen unterzeichnet haben.
Für unsere Zwecke ist die späteste bzw. früheste Transaktion maßgebend. Wir werden uns also später nicht um andere Doppelausgabeversuche kümmern. Die einzige Möglichkeit, das Fehlen einer Transaktion zu bestätigen, besteht darin, alle vorhandenen Transaktionen zu kennen. Im Münzmodell war die Münzstätte über alle Transaktionen informiert und entschied, welche zuerst eintrafen. Um dies ohne einen vertrauenswürdigen Dritten zu erreichen, müssen Transaktionen öffentlich bekannt gegeben werden [1], und wir benötigen ein System von Teilnehmern, die sich auf eine einzige Geschichte und die Reihenfolge, in der diese Transaktionen eingegangen sind, einigen. Der Begünstigte muss wissen, dass sich die Mehrheit der Knoten zum Zeitpunkt jeder Transaktion darauf geeinigt hat, welcher Knoten zuerst empfangen wurde.
Zeitstempelserver
Unsere vorgeschlagene Lösung beginnt mit einem Zeitstempelserver. Ein Zeitstempelserver funktioniert Hashing eines zu datierenden Datenblocks und Veröffentlichung in großem Umfang, genau wie Sie es in einer Zeitung oder in einer Usenet-Publikation tun würden [2-5]. Der Zeitstempel beweist, dass die Daten zu diesem Zeitpunkt offensichtlich vorhanden gewesen sein müssen, um in die aufgenommen zu werden Hash-. Jeder Zeitstempel schließt den vorherigen Zeitstempel in seinen Hash ein und bildet so eine Kette, sodass jeder zusätzliche Zeitstempel den vorherigen verstärkt.
Arbeitstest
Um einen Zeitstempelserver nach einem Benutzer-zu-Benutzer-Schema zu implementieren, müssen wir ein Proof-of-Work-System verwenden, das dem ähnelt Hashcash von Adam Back [6], anstatt eine Veröffentlichung in einer Zeitung oder im Usenet zu verwenden. Beim Proof of Work wird ein Wert gescannt, sodass bei der Berechnung eines Hashs, z. B SHA-256, Dies beginnt bei einer bestimmten Anzahl von Bits mit dem Wert Null. Der durchschnittliche Arbeitsaufwand verhält sich exponentiell zur Anzahl der benötigten Bits mit Nullwert aber das kann durch Ausführen eines einzelnen Hashs überprüft werden.
Für unser Zeitstempelnetzwerk implementieren wir einen Arbeitsnachweis, indem wir den Wert eines zum Block gehörenden Nonce-Felds erhöhen, bis ein Wert gefunden wird, der die erforderliche Anzahl von Nullwertbits für seinen Hash angibt. Sobald die CPU-Leistung aufgewendet wurde, um den Arbeitsnachweis zu erfüllen, kann der Block nicht mehr geändert werden, ohne die gesamte Arbeit zu wiederholen. Da nach einem bestimmten Block mehrere Blöcke verkettet sind, würde die Arbeit zum Ändern eines Blocks das Wiederherstellen aller nachfolgenden Blöcke umfassen.
La Arbeitstest Es löst auch das Problem, zu bestimmen, wie eine Mehrheitsentscheidung dargestellt werden soll. Wenn diese Mehrheit auf einer Stimme pro IP-Adresse basieren würde, könnte sie von jemandem geändert werden, der in der Lage ist, viele IPs zuzuweisen. Der Arbeitsnachweis lautet im Wesentlichen „eine CPU, eine Stimme“.. Die Mehrheitsentscheidung wird durch die längste Kette repräsentiert, die über den Arbeitsnachweis mit dem größten Aufwand verfügt.
Wenn der Großteil der CPU-Leistung von ehrlichen Knoten gesteuert wird, wächst die ehrliche Kette schneller und lässt alle anderen konkurrierenden Ketten hinter sich. Um einen Block in der Vergangenheit zu ändern, musste ein Angreifer den Arbeitsnachweis des Blocks und aller nachfolgenden Blöcke wiederholen und dann die Arbeit der ehrlichen Knoten einholen und übertreffen.
Wir werden dann zeigen, dass die Wahrscheinlichkeit, dass ein langsamerer Angreifer die längste Kette erreichen kann, exponentiell abnimmt, wenn weitere nachfolgende Blöcke hinzugefügt werden.
Um die erhöhte Hardwaregeschwindigkeit und das im Laufe der Zeit variierende Interesse am Betrieb von Knoten auszugleichen, wird die Schwierigkeit des Arbeitsnachweises durch einen gleitenden Durchschnitt bestimmt, der auf einer durchschnittlichen Anzahl von Blöcken pro Stunde basiert. Werden diese zu schnell generiert, erhöht sich der Schwierigkeitsgrad.
Das Netzwerk
Die vom Netzwerk durchgeführten Schritte sind wie folgt:
- Neue Transaktionen werden an alle Knoten gesendet.
- Jeder Knoten sammelt neue Transaktionen in einem Block.
- Jeder Knoten arbeitet daran, einen schwierigen Arbeitsnachweis für seinen Block zu finden.
- Wenn ein Knoten einen Arbeitsnachweis findet, sendet er den Block an alle Knoten.
- Der Block wird von den Knoten akzeptiert, wenn alle Transaktionen im Block validiert und nicht ausgegeben wurden.
- Knoten drücken ihre Akzeptanz des Blocks aus, indem sie an der Erstellung des nächsten Blocks in der Kette arbeiten und dabei den Hash des akzeptierten Blocks als vorherigen Hash verwenden.
Die längste Zeichenfolge wird immer als die richtige angesehen. und sie beginnen mit der Ausweitung. Wenn zwei Knoten gleichzeitig unterschiedliche Versionen des nächsten Blocks senden, empfangen einige Knoten möglicherweise zuerst die eine oder andere Version. In diesem Fall bearbeiten sie den ersten Zweig, den sie erhalten, speichern aber den anderen Zweig für den Fall, dass er länger wird. Der Gleichstand wird unterbrochen, wenn der nächste Arbeitsnachweis gefunden wird und ein Zweig länger wird; Anschließend werden die Knoten, die am anderen Zweig gearbeitet haben, auf den jetzt längeren umgeschaltet.
Die Ausgabe neuer Transaktionen muss nicht alle Knoten erreichen. Wenn diese viele Knoten erreichen, gelangen sie bald in einen Block. Die Ausgabe der Blöcke ist auch gegenüber Nachrichtenverlusten tolerant. Wenn ein Knoten keinen Block empfängt, fragt er beim nächsten Empfang danach und stellt fest, dass er einen verloren hat.
Ansporn
Konventionell ist die erste Transaktion im Block eine spezielle Transaktion, die einen neuen Coin generiert, dessen Besitzer der Ersteller des Blocks ist. Dies stellt einen Anreiz für Knoten dar, das Netzwerk zu unterstützen, und bietet eine erste Möglichkeit, Münzen zu verteilen und in Umlauf zu bringen, da es keine Befugnis gibt, Münzen zu erstellen. Diese stabile Hinzufügung einer konstanten Menge neuer Münzen ist analog dazu, dass Goldgräber Ressourcen aufwenden, um sie in Umlauf zu bringen. In unserem Fall sind die Ressourcen die verbrauchte CPU-Zeit und der Strom.
Der Anreiz kann auch mit Transaktionskosten gesetzt werden. Wenn der Ausgabewert einer Transaktion kleiner als der Eingabewert ist, Die Differenz stellt eine Transaktionsgebühr dar, die zum Anreizwert des Blocks, der sie enthält, addiert wird. Sobald eine vorgegebene Anzahl an Münzen in Umlauf gelangt ist, kann sich der Anreiz vollständig in Transaktionsgebühren verwandeln und ist völlig inflationsfrei.
Der Anreiz kann auch dazu beitragen, Knoten dazu zu ermutigen, ehrlich zu bleiben. Wenn ein egoistischer Angreifer in der Lage ist, mehr CPU-Leistung als alle ehrlichen Knoten zu sammeln, müsste er sich entscheiden, ob er diese nutzen möchte, um Menschen zu betrügen, indem er ihre Zahlungen stiehlt, oder ob er sie zur Generierung neuer Münzen nutzt. Sie sollten es profitabler finden, sich an die Regeln zu halten, da diese Sie mit mehr Münzen begünstigen, als alle anderen Knoten zu kombinieren, als das System und die Gültigkeit Ihres eigenen Vermögens zu untergraben.
Speicherplatz zurückgewinnen
Sobald die letzte Transaktion unter genügend Blöcken vergraben ist, können verbrauchte Transaktionen verworfen werden, um Speicherplatz zu sparen. Um dies zu ermöglichen, ohne den Block-Hash zu beschädigen, werden Transaktionen in a überprüft Merkle-Baum [7] [2] [5], wobei nur die Wurzel im Block-Hash enthalten ist. Alte Blöcke können verdichtet werden, indem Äste vom Baum entfernt werden. Innere Hashes müssen nicht gespeichert werden.
Der Header eines Blocks ohne Transaktionen beträgt etwa 80 Byte. Wenn wir davon ausgehen, dass jeder Block alle 10 Minuten generiert wird, sind 80 Byte * 6 * 24 * 365 = 4.2 MB pro Jahr. Da Computer im Jahr 2 im Allgemeinen mit 2008 GB RAM ausgeliefert werden und Moores Gesetz derzeit ein Wachstum von 1.2 GB pro Jahr vorhersagt, sollte die Speicherung kein Problem darstellen, selbst wenn Blockheader im Speicher verbleiben müssen.
Vereinfachte Zahlungsüberprüfung
Es ist möglich, Zahlungen zu überprüfen, ohne einen vollständigen Netzwerkknoten zu betreiben. Ein Benutzer muss lediglich eine Kopie der Blockheader der längsten Proof-of-Work-Kette aufbewahren, die er erhalten kann, indem er die Netzwerkknoten durchsucht, bis er oder sie überzeugt ist, dass er oder sie über die längste Kette verfügt, und den Zweig davon erhalten kann der Merkle-Baum, der die Transaktion mit dem Block verknüpft, in dem sie datiert wurde. Obwohl Sie die Transaktion nicht selbst überprüfen können, können Sie durch die Verknüpfung irgendwo in der Kette erkennen, dass ein Knoten im Netzwerk sie akzeptiert hat, sodass später hinzugefügte Blöcke diese Akzeptanz durch das Netzwerk zusätzlich bestätigen würden.
Daher ist die Verifizierung zuverlässig, solange ehrliche Knoten das Netzwerk kontrollieren, wird jedoch anfälliger, wenn das Netzwerk von einem Angreifer dominiert wird. Während Netzwerkknoten selbst Transaktionen verifizieren können, kann die vereinfachte Methode durch gefälschte Transaktionen eines Angreifers getäuscht werden, solange der Angreifer das Netzwerk beherrschen kann. Eine Strategie, sich zu schützen, besteht darin, Warnungen von Netzwerkknoten zu akzeptieren, wenn sie einen ungültigen Block erkennen, und den Benutzer aufzufordern, den gesamten Block und die gemeldeten Transaktionen herunterzuladen, um die Inkonsistenz zu bestätigen. Unternehmen, die häufig Zahlungen erhalten, möchten für mehr unabhängige Sicherheit und schnellere Überprüfung ihre eigenen Knoten betreiben.
Werte kombinieren und teilen
Obwohl es möglich wäre, einzelne Währungen zu manipulieren, wäre es umständlich, für jeden Cent einer Überweisung separate Transaktionen durchzuführen. Um die Aufteilung und Kombination von Werten zu ermöglichen, enthalten Transaktionen mehrere Ein- und Ausgänge. Typischerweise gibt es entweder eine einzelne Eingabe aus einer größeren vorherigen Transaktion oder mehrere Eingaben, die kleinere Beträge kombinieren, und mindestens zwei Ausgaben: eine für die Zahlung und eine für die Rückgabe des Wechselgeldes, falls vorhanden, an den Aussteller.
Es muss berücksichtigt werden, dass sich dieses System in einem Lüfter öffnet, also eine Transaktion kann von mehreren Transaktionen abhängen, und diese wiederum können von vielen weiteren abhängen, was kein Problem darstellt. Es besteht nie die Notwendigkeit, eine einzige vollständige Kopie des Transaktionsverlaufs zu extrahieren.
Datenschutz
Das traditionelle Bankmodell erreicht sein Maß an Privatsphäre, indem es den Zugriff auf Informationen auf die beteiligten Parteien und den vertrauenswürdigen Dritten beschränkt. Die Notwendigkeit, alle Transaktionen öffentlich anzukündigen, spricht gegen diese Methode, die Privatsphäre kann jedoch dennoch gewahrt bleiben, indem der Informationsfluss an anderer Stelle unterbrochen wird: öffentliche Schlüssel anonym halten. Öffentlich lässt sich erkennen, dass jemand einen bestimmten Betrag an eine andere Person sendet, jedoch ohne Informationen, die die Transaktion einer bestimmten Person zuordnen. Dies ähnelt dem Informationsniveau an Börsen, wo Zeitpunkt und Umfang einzelner Transaktionen, das „Tape“, öffentlich sind, ohne jedoch zu sagen, wer die Parteien sind.
Als zusätzliche Firewall Für jede Transaktion muss ein neues Schlüsselpaar verwendet werden, damit sie einem gemeinsamen Eigentümer zugeordnet werden kann. Einige Arten der Zuordnung sind bei Transaktionen mit mehreren Einträgen unvermeidbar, wodurch sich herausstellen kann, dass die Einträge demselben Eigentümer gehören. Das Risiko bestünde darin, dass, wenn der Eigentümer eines Schlüssels bekannt gegeben wird, der Link andere dazugehörende Transaktionen offenlegen könnte.
Berechnungen
Wir betrachten das Szenario, in dem ein Angreifer versucht, eine alternative Kette schneller als die ehrliche Kette zu generieren. Selbst wenn dies gelingen würde, wäre das System nicht für willkürliche Veränderungen anfällig, wie etwa die Schaffung von Werten aus der Luft oder die Entnahme von Geldern, die nie dem Angreifer gehörten. Knoten würden eine ungültige Transaktion nicht als Zahlung akzeptieren, und ehrliche Knoten werden niemals einen Block akzeptieren, der sie enthält. Ein Angreifer könnte versuchen, nur seine eigenen Transaktionen zu ändern, um kürzlich ausgegebenes Geld zurückzugewinnen.
Der Wettlauf zwischen einer ehrlichen Kette und der Kette eines Angreifers wird als zufälliger Binomialpfad bezeichnet. Das Erfolgsereignis ist die ehrliche Kette, die sich um einen weiteren Block verlängert und ihren Vorsprung um +1 erhöht, und das Misserfolgsereignis ist die Verlängerung der Kette des Angreifers um einen Block und die Reduzierung des Abstands um -1.
Die Wahrscheinlichkeit, dass ein Angreifer uns bei einem bestimmten Defizit erwischen kann, ist analog zum Player Ruin-Problem. Angenommen, ein Spieler mit unbegrenztem Guthaben beginnt mit einem Defizit und spielt möglicherweise unendlich viele Versuche, um die Gewinnschwelle zu erreichen. Wir können die Wahrscheinlichkeit, dass es den Gleichgewichtspunkt oder die ehrliche Kette erreicht, wie folgt berechnen [8]:
p = Wahrscheinlichkeit, dass ein ehrlicher Knoten den nächsten Block findet
q = Wahrscheinlichkeit, dass der Angreifer den nächsten Block q findet
qz = Wahrscheinlichkeit, dass der Angreifer aus z Blöcken dahinter greift.
Unter der Annahme, dass p > q, sinkt die Wahrscheinlichkeit exponentiell, während die Anzahl der Blöcke, die der Angreifer erreichen muss, zunimmt. Wenn die Chancen gegen Sie stehen und Sie nicht gleich zu Beginn einen glücklichen Zug machen, werden Ihre Chancen extrem gering, wenn Sie in Rückstand geraten.
Betrachten wir nun, wie lange der Begünstigte einer neuen Transaktion warten muss, bevor er hinreichend sicher ist, dass der Emittent diese nicht ändern kann. Wir gehen davon aus, dass es sich beim Absender um einen Angreifer handelt, der dem Begünstigten vorgaukeln möchte, dass er eine Zeit lang bezahlt wurde, und dann die Transaktion so ändert, dass er sich nach einiger Zeit zurückzahlt. Der Begünstigte wird in diesem Fall benachrichtigt, der Emittent hofft jedoch, dass es zu spät ist.
Der Begünstigte generiert ein neues Schlüsselpaar und übergibt den öffentlichen Schlüssel kurz nach der Unterzeichnung an den Aussteller. Dies verhindert, dass der Emittent eine Blockchain im Voraus vorbereitet, kontinuierlich daran arbeitet, bis er das Glück hat, weit genug voranzukommen, und dann die Transaktion zu diesem Zeitpunkt ausführt. Sobald die Transaktion gesendet wurde, beginnt der unehrliche Absender heimlich an einer Parallelkette zu arbeiten, die eine alternative Version seiner Transaktion enthält.
Der Begünstigte wartet darauf, dass die Transaktion einem Block hinzugefügt wird und dass nach der Transaktion z-Blöcke verknüpft werden. Sie müssen nicht den genauen Fortschritt kennen, den der Angreifer gemacht hat, aber unter der Annahme, dass die ehrlichen Blöcke den erwarteten Durchschnitt pro Block erreichten, beträgt der potenzielle Fortschritt des Angreifers a Poisson-Verteilung mit einem Erwartungswert von:
Um die Wahrscheinlichkeit zu erhalten, dass der Angreifer uns jetzt noch erreichen kann, multiplizieren wir die Poisson-Dichte mit dem Fortschritt, den er hätte machen können, multipliziert mit der Wahrscheinlichkeit, dass er diesen Punkt erreichen könnte:
Wir organisieren neu, um das Hinzufügen des unendlichen Endes der Verteilung zu vermeiden ...
Wir konvertieren in Code in C…
#include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; doppeltes Lambda = z * (q / p); Doppelsumme = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } Rückgabesumme; }
Wenn wir einige Ergebnisse ausführen, können wir sehen, dass die Wahrscheinlichkeit mit z exponentiell abnimmt.
q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P= 0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P =0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006
Wir lösen nach P kleiner als 0.1 %…
P > 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z= 340
Schlussfolgerungen
Wir haben ein System elektronischer Transaktionen vorgeschlagen, das nicht auf Vertrauen beruht. Wir beginnen mit dem üblichen Rahmenwerk für Währungen, die auf der Verwendung digitaler Signaturen basieren, was eine starke Eigentumskontrolle ermöglicht, aber auch Es ist unvollständig, wenn es keine Möglichkeit gibt, Doppelausgaben zu verhindern. Um dieses Problem zu lösen, schlagen wir ein Benutzer-zu-Benutzer-Netzwerk vor, das Proof-of-Work verwendet, um eine öffentliche Transaktionshistorie aufzuzeichnen, und das für einen Angreifer, der es ändern möchte, schnell rechnerisch unlösbar wird, wenn ehrliche Knoten die Mehrheit der Transaktionen kontrollieren CPU-Leistung.
Ein robustes Netzwerk aufgrund seiner unstrukturierten Einfachheit. Die Knoten können mit wenig Koordination alle gleichzeitig arbeiten. Sie müssen nicht identifiziert werden, da Nachrichten nicht an einen bestimmten Ort weitergeleitet werden und nur nach bestem Wissen und Gewissen zugestellt werden müssen. Knoten können das Netzwerk nach Belieben verlassen und verlassen, wobei sie die Proof-of-Work-Kette als Beweis dafür akzeptieren, was während ihrer Abwesenheit passiert ist. Sie stimmen mit ihrer CPU-Leistung ab und drücken ihre Akzeptanz gültiger Blöcke aus, indem sie an deren Erweiterung arbeiten, und lehnen ungültige Blöcke ab, indem sie Arbeit an ihnen wiederverwenden. Mit diesem Konsensmechanismus können alle notwendigen Regeln oder Anreize durchgesetzt werden.
Referenzen
- [1] W. Dai, „B-Geld“, https://www.weidai.com/bmoney.txt 1998.
- [2] H. Massias, XS Avila und J.-J. Quisquater, „Design of a secure timestamping service with minimal trust requirements“, In 20th Symposium on Information Theory in the Benelux, Mai 1999.
- [3] S. Haber, WS Stornetta, „How to time-stamp a digital document“, in Journal of Cryptology, Bd. 3, Nr. 2, Seiten 99-111, 1991.
- [4] D. Bayer, S. Haber, WS Stornetta, „Verbesserung der Effizienz und Zuverlässigkeit digitaler Zeitstempel“, In Sequences II: Methods in Communication, Security and Computer Science, Seiten 329-334, 1993.
- [5] S. Haber, WS Stornetta, „Sichere Namen für Bit-Strings“, in Proceedings of the 4th ACM Conference on Computer and Communications Security, Seiten 28-35, April 1997.
- [6] A. Back, „Hashcash – eine Denial-of-Service-Gegenmaßnahme“, https://www.hashcash.org/papers/hashcash.pdf 2002.
- [7] RC Merkle, „Protocols for public key cryptosystems“, In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, Seiten 122–133, April 1980.
- [8] W. Feller, „Eine Einführung in die Wahrscheinlichkeitstheorie und ihre Anwendungen“, 1957.