Bitcoin Whitepaper - CheckBitcoin

Bitcoin: Ein elektronisches Peer-to-Peer Zahlungssystem

Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

Überblick

Eine rein peer-to-peer-basierte Version elektronischen Bargelds würde es ermöglichen, Online-Zahlungen direkt von einer Partei zur anderen zu senden, ohne dass ein Finanzinstitut zwischengeschaltet ist. Digitale Signaturen spielen dabei eine wichtige Rolle, aber die wesentlichen Vorteile gehen verloren, wenn dennoch eine vertrauenswürdige dritte Partei benötigt wird, um Doppelausgaben zu verhindern. Wir schlagen vor, das Doppelausgabenproblem durch die Nutzung eines Peer-to-Peer-Netzwerks zu lösen. Dabei werden Transaktionen durch Zeitstempel versehen, indem sie in eine fortlaufende Kette von hashbasierten Arbeitsnachweisen eingefügt werden. Dadurch entsteht ein Verlauf, der nicht verändert werden kann, ohne den Arbeitsnachweis erneut zu erbringen. Die längste Kette dient nicht nur als Nachweis für die Abfolge aller bestätigten Ereignisse, sondern auch als Beweis dafür, dass sie aus dem größten Pool an CPU-Leistung stammt. Solange der Großteil der CPU-Leistung von Nodes stammt, die nicht kooperieren, um das Netzwerk anzugreifen, werden sie die längste Kette erzeugen und die Angreifer abwehren. Das Netzwerk selbst erfordert eine minimale Struktur. Nachrichten werden nach bestem Bemühen übermittelt und Nodes können das Netzwerk beliebig verlassen oder ihm beitreten. Dabei akzeptieren sie die längste Arbeitsnachweiskette als Beweis dafür, was während ihrer Abwesenheit geschehen ist.

Einführung

Der E-Commerce hängt heutzutage weitgehend von Finanzinstituten ab, die als vertrauenswürdige Dritte für die Abwicklung elektronischer Zahlungen dienen. Obwohl dieses System für die meisten Transaktionen gut funktioniert, hat es immer noch inhärente Schwächen aufgrund seines vertrauensbasierten Modells. Vollständig irreversible Transaktionen sind praktisch nicht umsetzbar, da Finanzinstitute gezwungen sind, bei Streitigkeiten zu vermitteln. Die Kosten für die Konfliktlösung erhöhen die Transaktionskosten, was die kleinste praktikable Transaktionsgröße einschränkt und die Möglichkeit kleinerer, gelegentlicher Transaktionen verringert. Hinzu kommen die allgemeinen Kosten des Verlusts der Fähigkeit, irreversible Zahlungen für unwiderrufliche Dienstleistungen zu leisten. Mit der Möglichkeit einer Rückgängigmachung steigt der Bedarf an Vertrauen. Händler müssen daher ihren Kunden gegenüber skeptisch sein und mehr Informationen von ihnen verlangen, als dies sonst der Fall wäre. Ein gewisser Prozentsatz an Betrug wird als unvermeidlich angesehen. Diese Kosten und Zahlungsunsicherheiten können durch persönliche Interaktionen und die Verwendung von Bargeld vermieden werden, aber es fehlt an einem Mechanismus, der Zahlungen über Kommunikationskanäle ohne vertrauenswürdige Dritte ermöglicht.

Was benötigt wird, ist ein Zahlungssystem, das auf kryptografischen Beweisen anstelle von Vertrauen basiert und es zwei vertrauenswürdigen Parteien ermöglicht, direkt und ohne die Notwendigkeit einer vertrauenswürdigen dritten Partei Transaktionen miteinander abzuwickeln. Transaktionen, die praktisch nicht rückgängig gemacht werden können, schützen Verkäufer vor Betrug, während übliche Treuhanddienste leicht implementiert werden könnten, um Käufer zu schützen. In diesem Zusammenhang schlagen wir eine Lösung des Doppelausgabenproblems vor, bei der ein Peer-to-Peer-verteilter Zeitstempelserver verwendet wird, um einen rechnergestützten Nachweis der chronologischen Reihenfolge von Transaktionen zu erzeugen. Das System ist sicher, solange ehrliche Nodes gemeinsam mehr CPU-Leistung kontrollieren als jede kooperierende Gruppe angreifender Nodes.

Transaktionen

Wir definieren einen elektronischen Coin als eine Kette digitaler Signaturen. Jeder Besitzer überträgt den Coin an den nächsten, indem er einen Hash-Wert der vorherigen Transaktion sowie den öffentlichen Schlüssel des nächsten Besitzers digital signiert und beide an das Ende des Coins anhängt. Der Zahlungsempfänger kann die Signaturen verifizieren, um die Besitzerkette zu überprüfen.

Transaktionen

Das Problem ist natürlich, dass der Zahlungsempfänger nicht verifizieren kann, dass keiner der vorherigen Besitzer den Coin zweimal ausgegeben hat. Eine herkömmliche Lösung ist das Hinzuziehen einer zentralen Autorität, oder Münzstätte, die jede Transaktion auf Doppelausgaben hin überprüft. Nach jeder Transaktion muss der Coin bei der Münzstätte abgeliefert werden, um einen neuen ausgeben zu lassen, und nur im Falle von Coins, die direkt von der Münzstätte stammen, ist Verlass darauf, dass sie nicht doppelt ausgegeben wurden. Das Problem mit dieser Lösung ist, dass das Schicksal des gesamten Geldsystems von dem Unternehmen abhängt, welches die Münzstätte betreibt, wobei jede Transaktion über dieses laufen muss, genau wie bei einer Bank.

Wir benötigen eine Möglichkeit, den Zahlungsempfänger wissen zu lassen, dass der vorherige Besitzer keine früheren Transaktionen signiert hat. Für unsere Zwecke ist die früheste Transaktion entscheidend, weshalb uns spätere Doppelausgabenversuche nicht kümmern. Die einzige Möglichkeit, die Abwesenheit einer Transaktion zu bestätigen, ist es, sich aller Transaktionen bewusst zu sein. Im Münzanstalt-basierten Modell wusste die Münzanstalt von allen Transaktionen und entschied, welche zuerst eintraf. Um das ohne eine vertrauenswürdige dritte Partei zu gewährleisten, müssen Transaktionen öffentlich bekannt gemacht werden, und wir brauchen ein System, durch das Teilnehmer sich auf einen einzigen Verlauf der Reihenfolge ihres Empfangs einigen können. Der Zahlungsempfänger benötigt einen Nachweis darüber, dass die Mehrheit der Nodes zum Zeitpunkt jeder Transaktion darin übereinstimmten, dass sie die zuerst empfangene war.

Zeitstempel-Server

Die von uns vorgeschlagene Lösung beginnt mit einem Zeitstempelserver. Ein solcher Server arbeitet, indem er einen Hash-Wert eines Blocks von Einträgen erzeugt, die zeitgestempelt werden sollen, und diesen weit verbreitet veröffentlicht, beispielsweise in einer Zeitung oder einem Usenet-Beitrag. Der Zeitstempel belegt, dass die Daten zu diesem Zeitpunkt existiert haben müssen, um in den Hash-Wert eingefügt zu werden. Jeder Zeitstempel schließt den vorherigen in seinen Hash-Wert ein und bildet so eine Kette, wobei jeder zusätzliche Zeitstempel die vorangegangenen bestätigt.

Zeitstempel-Server

Proof-of-Work

Um einen verteilten Zeitstempelserver auf Peer-to-Peer-Basis zu implementieren, benötigen wir anstelle von Zeitungen oder Usenet-Beiträgen ein Arbeitsnachweissystem, das dem von Adam Backs Hashcash ähnelt. Der Arbeitsnachweis beinhaltet die Suche nach einem Wert, der, wenn er beispielsweise mit SHA-256 gehasht wird, mit einer bestimmten Anzahl von führenden Null-Bits beginnt. Die erforderliche Arbeit steigt durchschnittlich exponentiell mit der Anzahl der benötigten Null-Bits und kann durch das Ausführen einer einzigen Hashfunktion überprüft werden.

Um den Arbeitsnachweis für unser Zeitstempelnetzwerk zu implementieren, erhöhen wir eine Nonce im Block so lange, bis ein Wert gefunden wird, der dem Block die erforderliche Anzahl von Null-Bits verleiht. Sobald die zur Erstellung des Arbeitsnachweises erforderliche Rechenleistung aufgewendet wurde, kann der Block nicht mehr geändert werden, ohne diese Arbeit erneut zu leisten. Wenn später Blöcke in die Kette aufgenommen werden, würde die Änderung eines Blocks die Neuerstellung aller nachfolgenden Blöcke erfordern.

Proof-of-Work

Der Arbeitsnachweis löst auch das Problem der Repräsentation bei Mehrheitsentscheidungen. Wenn die Mehrheit auf der Grundlage einer Stimme pro IP-Adresse basieren würde, könnte sie von jedem untergraben werden, der in der Lage ist, viele IP-Adressen bereitzustellen. Der Arbeitsnachweis etabliert im Wesentlichen eine Stimme pro CPU. Die Mehrheitsentscheidung wird durch die längste Kette repräsentiert, in die der größte Arbeitsaufwand investiert wurde. Wenn der Großteil der CPU-Leistung von ehrlichen Nodes kontrolliert wird, wird die ehrliche Kette am schnellsten wachsen und alle konkurrierenden Ketten hinter sich lassen.

Netzwerk

Die Schritte für den Betrieb des Netzwerks sind wie folgt:

  1. Neue Transaktionen werden an alle Nodes im Netzwerk übertragen.
  2. Jeder Node sammelt die neuen Transaktionen und gruppiert sie zu einem Block.
  3. Jeder Node arbeitet daran, einen schwierigen Arbeitsnachweis für seinen Block zu finden.
  4. Wenn ein Node einen Arbeitsnachweis findet, sendet er seinen Block an alle anderen Nodes im Netzwerk.
  5. Die Nodes akzeptieren einen Block nur, wenn alle enthaltenen Transaktionen gültig sind und noch nicht ausgegeben wurden.
  6. Nodes geben ihre Zustimmung zu einem Block, indem sie mit der Erstellung des nächsten Blocks in der Kette beginnen und dabei den Hashwert des akzeptierten Blocks als vorherigen Hashwert verwenden.

Anreize

Gemäß der Konvention ist die erste Transaktion eines Blocks eine besondere Transaktion, die einen neuen Coin erzeugt und dem Erzeuger des Blocks gehört. Dies schafft einen Anreiz für Nodes, das Netzwerk zu unterstützen, und stellt einen Distributionsmechanismus dar, um neue Coins in Umlauf zu bringen, da es keine zentrale Autorität gibt, die sie ausgeben könnte. Der stetige Zustrom einer konstanten Menge neuer Coins ähnelt dem Vorgehen von Goldproduzenten, die Ressourcen investieren, um zusätzliches Gold in Umlauf zu bringen. In unserem Fall sind es die investierte CPU-Zeit und der Strom, die diesen Prozess antreiben.

Speicherplatz zurückgewinnen

Sobald die letzte Transaktion in einem Coin unter einer ausreichenden Anzahl von Blöcken begraben ist, können die ausgegebenen Transaktionen vor ihr gelöscht werden, um Speicherplatz zu sparen. Um dies zu ermöglichen, ohne den Hashwert des Blocks zu beeinträchtigen, werden Transaktionen in einen Hash-Baum gehasht, wobei nur die Wurzel des Baumes in den Hashwert des Blocks einbezogen wird. Alte Blöcke können dann kompakter gemacht werden, indem die Zweige des Baumes beschnitten werden. Die inneren Hashwerte müssen nicht gespeichert werden.

Merkle Tree

Vereinfachte Zahlungsverifizierung

Es ist möglich, Zahlungen zu verifizieren, ohne einen Full Node zu betreiben. Ein Nutzer muss lediglich die Kennsätze der längsten Arbeitsnachweiskette aufbewahren, die er von Nodes abfragen kann, bis er überzeugt ist, dass er die längste Kette besitzt. Zusätzlich erhält er den Hash-Baum-Zweig, der die Transaktion mit dem Block verbindet, in dem sie zeitgestempelt wurde. Der Nutzer kann die Transaktion nicht selbst überprüfen, aber indem er sie mit einem Ort in der Kette verknüpft, kann er sehen, dass ein Netzwerknode sie akzeptiert hat.

SPV

Zusammenführung und Aufteilung von Werten

Obwohl es theoretisch möglich wäre, Coins individuell zu handhaben, wäre es unpraktisch, für jeden Cent einer Überweisung separate Transaktionen durchzuführen. Um Werte zu kombinieren und aufzuteilen, enthalten Transaktionen daher oft mehrere Ein- und Ausgänge. Normalerweise gibt es entweder einen Eingang von einer größeren vorangegangenen Transaktion oder mehrere Eingänge, die aus kleineren Beträgen zusammengesetzt sind. Jede Transaktion kann höchstens zwei Ausgänge haben: einen für die Zahlung und einen, der eventuell anfallendes Wechselgeld zum Absender zurückschickt.

Transaktionen kombinieren

Datenschutz

Das traditionelle Bankenmodell gewährleistet ein gewisses Maß an Datenschutz, indem der Zugang zu Informationen auf die beteiligten Parteien und die vertrauenswürdige dritte Partei beschränkt wird. Die Notwendigkeit, alle Transaktionen öffentlich zu machen, schließt diesen Ansatz aus. Datenschutz kann jedoch aufrechterhalten werden, indem der Informationsfluss an anderer Stelle unterbrochen wird, nämlich indem öffentliche Schlüssel anonym gehalten werden. Die Öffentlichkeit kann sehen, dass jemand einen Betrag an jemand anderen sendet, aber ohne Informationen, die die Transaktion mit einer bestimmten Person verknüpfen.

Privacy

Fazit

Wir haben ein System für elektronische Transaktionen vorgeschlagen, das ohne Vertrauen auskommt. Wir begannen mit dem herkömmlichen Ansatz von digitalen Signaturen als Coins, was eine starke Kontrolle der Inhaberschaft ermöglicht, aber keine Lösung für das Problem der Doppelausgaben bietet. Um dies zu lösen, schlugen wir ein Peer-to-Peer-Netzwerk vor, das Arbeitsnachweise verwendet, um einen öffentlichen Verlauf von Transaktionen aufzuzeichnen. Dieser Verlauf wird durch Angreifer nur schwer veränderbar, solange ehrliche Nodes die Mehrheit der CPU-Leistung kontrollieren. Das Netzwerk zeichnet sich durch seine einfache und robuste Struktur aus. Nodes arbeiten unabhängig und benötigen nur wenig Koordination. Sie müssen nicht identifiziert werden, da Nachrichten ohne feste Zieladresse gesendet werden und nur nach dem Prinzip des bestmöglichen Bemühens zugestellt werden müssen. Nodes können dem Netzwerk beitreten oder es verlassen, ohne dass dies große Auswirkungen hat. Sie akzeptieren die Arbeitsnachweiskette als Beweis für vergangene Ereignisse und stimmen mit ihrer CPU-Leistung ab. Durch die Arbeit an gültigen Blöcken drücken sie ihre Zustimmung aus, während sie ungültige Blöcke ablehnen, indem sie sich weigern, an ihnen zu arbeiten. Mit diesem Konsensmechanismus können alle erforderlichen Regeln und Anreize durchgesetzt werden.