Zusammenfassung aller meiner bisherigen Bitcoin Artikel. (aufgrund überschrittener maximal post Größe leider unterteilt in zwei Teile).
Das Bitcoin-System
Abbildung 1
-
Bitcoin Einheit: Die Bitcoin Einheiten (umgangssprachlich Bitcoins) sind die virtuelle Geldeinheit. Sie existieren nicht physisch oder können als Datei versendet werden. Bitcoin Einheiten sind einfach Registereinträge, die einer gewissen Person zugeordnet sind. Dies legt fest, dass die zukünftige Transaktion dieser Bitcoin Einheiten an eine Bedingung gekoppelt wird, welche nur von dieser bestimmten Person erfüllt werden kann.
-
Bitcoin-Netzwerk: Vollständig dezentral und enthält alle Teilnehmer, sowie deren Verbindungen und ist der primäre Kommunikationsweg für Informationsaustausch und die Konsensfindung.
-
Bitcoin Protokoll: Im Bitcoin Protokoll ist die Art und Weise festgelegt, in der die Kommunikation innerhalb des Bitcoin-Netzwerkes abläuft (zb wie sehen Transaktionsnachrichten aus also standartisierte Formatierung etc)
-
Asymmetrische Kryptografie: Wird zur Beweiserbringung und für Kontrollzwecke eingesetzt. Sie ermöglicht es jedem Nutzer des Bitcoin-Netzwerkes die Legitimität beliebiger Transaktionsnachrichten zu überprüfen (mithilfe des private key und des public key aber dazu mehr in einem späteren Artikel)
-
Blockchain: Die Blockchain ist das öffentliche Register. Jeder kann sich dieses Register anschauen, eine Kopie herunterladen und abändern (die Kopie). Die entscheidende Registerversion ist die, die nur legitime Transaktionen beinhaltet (nachweisbar) und durch das Konsensprotokoll als aktuellste Version des Registers erkannt wird (Proof-of-Work).
Unterschied von Bitcoin zu schon davor bestehenden Systemen:
Die Führung eines Registers ist natürlich keine Erfindung der Blockchain Technologie. Geld kann als Gedächtnis für Gefälligkeiten (Gift-Giving System) verstanden werden. Dazu mehr in diesem Artikel von mir zum Thema Geld.
Auch unser heutiges Giralgeld (auch Buchgeld genannt) ist nichts anderes als die “Register basierte Virtualisierung von Besitzzuständen” (Giralgeld ist das Versprechen einer Auszahlung in Fiatgeld (Bargeld zb Euro). Der Unterschied zur Blockchain ist, dass das Register beim Giralgeld durch eine einzelne zentrale Instanz mit allen Rechten geführt wird (Bank). Diese zentrale Instanz gewährleistet die Transaktionsfähigkeit, die Transaktionslegitimität und den Transaktionskonsens.
-
Transaktionsfähigkeit bedeutet, dass der Eigentümer eine Transaktion seines Guthabens initiieren kann. Banken stellen dies durch die Bereitstellung entsprechender Infrastruktur sicher. Entfällt die Bank so bricht auch die zugehörige Infrastruktur weg.
-
Transaktionslegitimität bedeutet, dass die Bank verpflichtet ist den Transaktionsinitianten zu identifizieren um so festzustellen, ob er der tatsächliche Eigentümer des Guthabens ist. Diese Identifizierung erfolgt durch Pin Codes etc. All diese Kontrollmechanismen der Bank sind jedoch darauf angewiesen, dass die Zugangskriterien am Anfang (Kontoeröffnung) gespeichert wurden und nun abgeglichen werden. Ohne die zentrale Instanz kommt man folgendermaßen also nicht mehr an sein Geld.
-
Ein Transaktionskonsens ist in einer Bank nicht notwendig. Da die zentrale Instanz der alleinige Buchführer des Registers ist, wird dieses Register immer die einzigste Version desselben bleiben.
Das was Bitcoin also so grundsätzlich vom vorher dagewesenen System der Banken unterscheidet, ist der Verzicht auf zentrale Instanzen mit Sonderrechten (Bitcoin ist ein peer-to-peer Netzwerk, was bedeutet, das alle Teilnehmer gleichgestellt sind). Dadurch können keine Abhängigkeiten vom System entstehen. Bei einer Bank bist du komplett abhängig von dieser, da sie mit deinem Geld machen können was sie wollen und in der Lage wären dir den Zugriff zu verweigern (ohne die Bank kommst du nicht an ddein Geld). Die Besitzer eines Bitcoins dagegen können selbstständig und komplett uneingeschränkt über diesen verfügen, ohne auf einen Dritten vertrauen zu müssen. Durch das Fehlen einer zentralen Instanz wird die Sicherstellung der Transaktionsfähigkeit, die Prüfung der Transaktionslegitimität und das Erreichen eines Transaktionskonsens allerdings deutlich schwieriger.
Vor der Blockchain war virtuelles Geld ohne eine zentrale Instanz nicht möglich, da die Echtheit der Registerzustände (also Vermögenszustände/wem gehört wieviel) nicht überprüft werden konnte/nicht nachvollziehbar war (“Problem der byzantischen Generäle” könnt ihr bei Interesse mal googlen). Die Lösung für das Sicherstellen der Echtheit des Registers ist die Blockchain.
Transaktionsfähigkeit
Wie gerade bereits erklärt wurde, bedeutet Transaktionsfähigkeit schlicht und einfach, dass der Besitzer eines Guthabens eine Transaktion seines Guthabens vornehmen kann. Bei einer Bank wird dies durch entsprechende Infrastruktur sichergestellt (Filialnetz das schriftliche Aufträge annimmt sowie vom Kunden initiierte Transaktionen über Terminals, Heimcomputer, weitere elektrische Kanäle)
Im Bitcoin-System funktioniert dieser Austausch der Transaktionsaufträge bzw Transaktionsnachrichten über das “Bitcoin-Netzwerk” (siehe Abbildung 1).
Wie schon vorher kurz angesprochen, basiert das Bitcoin-Netzwerk auf “peer-to-peer” Technologie, was bedeutet, dass alle Netzwerkteilnehmer gleichgestellt sind (nicht wie in einer Bank, wo die Bank alles machen kann). Im Bitcoin-Netzwerk existieren also keine Teilnehmer mit Sonderrechten und auch keine zentralen Strukturen. Über das Bitcoin-Netzwerk werden nun Transaktionsnachrichten und Nachrichten zur Konsensfindung verschickt. Wie genau dies mit dem Standard des Bitcoin Protokolls verfasst wird und welche Rolle der public key und der private Key dabei spielen wird später noch erklärt.
In dem Bild (Abbildung 2) seht ihr nun den einfach dargestellten Ablauf des initiieren einer Transaktion. In einem späteren Artikel wird das ganze noch genauer erklärt.
Abbildung 2
Wann der Empfänger des Zahlungsauftrages von der Transaktionsnachricht erfährt ist egal. Sie muss also nicht zuerst an den Empfänger der Zahlung geschickt werden (er muss nichtmal zu den direkten Netzwerkteilnehmern gehören aber dazu später mehr).
Durch diese Topologie des Bitcoin Netzwerkes ist ebendieses extrem robust. Einzelne Ausfälle von Netzwerkteilnehmern sind egal. Um eine Transaktion zu initiieren genügt es die Transaktionsnachricht einem beliebigen Netzwerkteilnehmer zuzustellen und dann die Ausbreitung dieser Nachricht abzuwarten. Sollte die Weiterleitung der Nachricht scheitern, wird die Transaktionsnachricht einfach erneut an andere Netzwerkteilnehmer weitergeleitet. Dadurch ist die Transaktionsfähigkeit immer sichergestellt.
Jetzt gibt es allerdings ein Problem. Wenn ihr mitgedacht habt, wird euch aufgefallen sein, dass die Nachrichten einfach gefälscht werden könnten. Zum Beispiel: Ich könnte mir jetzt denken, ja du hast ziemlich viele Bitcoins. Ich schreibe jetzt eine Transaktionsnachricht in der ich behaupte, dass du mir 100 Bitcoins schicken willst. Denn wie sollen andere Netzwerkteilnehmer wissen, ob das jetzt stimmt oder nicht? Das ist auch das im Unterpunkt "Unterschiede von btc zu bereits bestehenden Systemen" kurz von mir angesprochene Problem “Der byzantischen Generäle”. Ihr bekommt eine Nachricht, die über verschiedene Personen weitergeleitet wurde. Wie könnt ihr sicher sein, dass der Inhalt der Nachricht wahr ist? Das ist jetzt der Knackpunkt(mit dezentralem Register) der erst mit Kryptowährungen gelöst werden konnte.
Da jeder Mensch unbegrenzt viele Pseudonyme erstellen kann sind Systemausschlüsse einzelner Personen die Transaktionsnachrichten fälschen auch keine Lösung.
Also muss jeder (Empfänger) einer Nachricht im Bitcoin Netzwerk in der Lage sein, deren Wahrheitsgehalt zu überprüfen.
Transaktionslegitimität
Um nun zu wissen, ob die Transaktion von einem bestimmten Guthaben auch tatsächlich vom Eigentümer des Guthabens initiiert wurde, bedient sich Bitcoin bewährter kryptographischer Verfahren.
Der Eigentümer eines Guthabens ist als einzigster im Besitz eines privaten Schlüssels (hoffentlich:D) Mit diesem privaten Schlüssel wird nun die Transaktionsnachricht vor dem Versenden ebendieser kryptographisch verschlüsselt. Mit dem zugehörigen öffentlichen Schlüssel kann die Nachricht dann wieder entschlüsselt werden. Wie wahrscheinlich jeder weiß/wissen muss der in Kryptowährungen investiert und diese vorbildlich auf eine sichere Wallet gesendet hat, ist der öffentliche Schlüssel bekannt(im Gegensatz zum privaten schlüssel den nur der Eigentümer des Guthabens kennt).
Daraus folgt, dass die Entschlüsselung der Transaktionsnachricht (die durch den privaten Schlüssel verschlüsselt wurde) jeder beliebigen Person möglich ist(mithilfe des zugehörigen öffentlichen Schlüssels des Guthabens)
Dadurch kann nun die Verifizierung des Initianten der Transaktionsnachricht erfolgen. Die Entschlüsselung der Transaktionsnachricht klappt nämlich nur dann, wenn die Nachricht mit dem dem privaten Schlüssel zugehörigen öffentlichen Schlüssel entschlüsselt wird.
Da der Besitzer des Guthabens der einzige Mensch ist, der seinen privaten Schlüssel kennt kann durch dieses Verfahren überprüft werden ob der Initiant der Transaktion tatsächlich der Besitzer dieses Guthabens ist. Der private Schlüssel wird auch nirgendswo gespeichert (außer auf der Hard-Wallet des Besitzers).
Also:
Du willst mir 10Bitcoins schicken (Danke:D). Du verschlüsselst die Nachricht:”Ich schicke urdreamscometrue 10 Bitcoins” also mit deinem privaten Schlüssel. Raus kommt dann irgend ein komisches Zahlen/Buchstabengewirr. Dann verschickst du dieses Buchstaben/Zahlengewirr (also die verschlüsselte Transaktionsnachricht) an einen beliebigen Netzwerkteilnehmer der nun versucht die verschlüsselte Transaktionsnachricht mit deinem öffentlichen Schlüssel zu entschlüsseln. Gelingt diese Entschlüsselung und es kommt der Satz: “Ich schicke urdreamscometrue 10 Bitcoins” (also ein nach dem Bitcoin Protokoll richtig formatierter Satz heraus der Sinn macht) weiß dieser Netzwerkteilnehmer, dass die Nachricht wirklich von dir ist (dem Eigentümer des Guthabens). Er leitet die Transaktionsnachricht also an seine Verbindungen weiter, die diese ihrerseits wieder überprüfen um die Echtheit der Nachricht zu überprüfen und Manipulation vom vorherigen Empfänger auszuschließen.
Die Verbindungen, an die die Transaktionsnachricht nun immer weiter gesendet wird, werden also nur die verschlüsselte Originalnachricht akzeptieren. Ist die Transaktionsnachricht legitim kommt sie in die individuelle Transaktionssammlung des überprüfenden Netzwerkteilnehmers, wo sie sich dann in einer art “Warteschlange” befindet und bereit für die (mögliche) Übernahme ins Register ist.
Transaktionskonsens
Was ist ein “Transaktionskonsens”überhaupt? Konsens bedeutet sowas wie “Übereinstimmung der Meinungen”(laut Google). Bei Bitcoin (und anderen Kryptowährungen) ist es so, dass aufgrund der Dezentralität verschiedene Registerversionen entstehen können. Bei einer Bank (zentrale Instanz) ist ein Transaktionskonsens wie ich ihn vorher beschrieben habe nicht von nöten, da es immer nur dieses eine Register der zentralen Instanz geben wird. Bei Dezentralen Projekten stellt sich nun die Frage welche der Registerversionen nun gültig ist.
Gerade haben wir gelernt, wie eine Transaktion bei Bitcoin initiiert wird. Dort haben wir herausgefunden, dass wenn eine Transaktionsnachricht von einem Teilnehmer des Bitcoin Netzwerkes für legitim befunden wird, diese in eine art Transaktionssammlung des Teilnehmers kommt und sich nun in einer “Warteschlange” (zusammen mit den anderen überprüften Transaktionsnachrichten des Teilnehmers) befindet und dort darauf wartet in das Register zu kommen.
Nun könnte es allerdings passieren, dass jemand zwei widersprüchliche Transaktionsnachrichten losschickt, in denen er die Rechte an einer Bitcoin Einheit an unterschiedlichen Personen zuspricht. Er schickt also direkt nacheinander zwei Transaktionsnachrichten los, in denen er die Besitzrechte 1 Bitcoins (den er als Guthaben hat) einmal mir gibt und einmal dir. Die Transaktionslegitimität ist da, da er diese Transaktionsnachricht selber initiiert hat. Wie löst man dieses Problem also?
Bei einer zentralen Instanz wäre die Transaktion gültig, die zuerst bei der zentralen Instanz eintrifft. Da das Bitcoin Netzwerk jedoch keine zentrale Instanz hat, ist die Möglichkeit da, dass ein Teil des Netzwerkes von der einen Transaktionsnachricht erfährt und der andere Teil von der anderen Transaktionsnachricht die im Konflikt zur ersten steht.
Double Spend Problematik
Das Problem hierbei nennt man Double Spend und es bezeichnet das Problem, wenn jemand die Besitzrechte ein und derselben Bitcoin Einheit an mehrere Personen gleichzeitig überträgt. Es darf natürlich nur eine der beiden Transaktionen durchgeführt werden und ins öffentliche Register gelangen. Man benötigt also einen Prozess, der das Erreichen eines Konsens ermöglicht und festhält, welche Transaktion als gültig betrachtet wird.
Hierfür werden von den Netzwerkteilnehmern sogenannte Blocks erstellt (Informationspakete die mindestens eine Transaktion beinhalten). Zum Erstellen dieser Blocks benötigt man Rechenleistung die von den Netzwerkteilnehmern freiwillig erbracht werden kann (das sind dann die Miner)
Ein Miner kann beliebige Transaktionen aus seiner Warteschlange zum Erstellen eines Blocks benutzen. Die Transaktionen müssen dafür natürlich alle legitim sein und dürfen nicht mit einer anderern Transaktion in diesem Block in Konkurrenz stehen. Falls ein Bitcoin Miner eine dieser Bedingungen missachtet wird sein Block vom Rest des Netzwerkes abgelehnt. Neben den Transaktionen muss ein Block Angaben dazu machen, an welchen Registerzustand er anknüpft (Referenzierung an einen anderen Block) dadurch entsteht dann eine chronologische Blockkette (Blockchain). (siehe Bild)
Abbildung 3
Die zur Referenzierung des Blocks verwendete Identifikationsnummer ist abhängig vom Inhalt des Blocks (Hashwert des Block Headers; dazu später mehr) Daher hätte die Veränderung einer Transaktion oder eines anderen Block Bestandteiles die Veränderung der Identifikationsnummer zur Folge. Wenn diese Identifikationsnummer verändert wird, müssten alle nachfolgenden Blocks neu erstellt werden. Beispiel: Da die Identifikationsnummer in Block 1 verändert wurde und sie ein Input von Block 2 ist verändert sich auch die ID von Block 2 und damit auch die von Block 3 und allen nachfolgenden die dann alle neu erstellt werden müssten wenn man Block 1 verändern würde. Die Blockkette (Blockchain) lässt sich also (praktisch) nicht verändern (außer mit unglaublicher Rechenleistung bzw über 50% der Gesamtrechenleistung).
Per Konsens wird nun die Version der Kette die nur legitime Transaktionen beinhaltet und die längste bekannte Kette des Systems darstellt als aktueller Zustand des Registers betrachtet.
Ein einzelner Block kann extrem schnell berechnet werden. Um zu verhindern, dass Blocks schneller geschaffen werden, als sie über das Bitcoin Netzwerk ausgetauscht werden können, wird die Akzeptanz der Blöcke beschränkt. So akzeptiert das Netzwerk im Schnitt nur alle 10 Minuten einen neuen Block. Das ganze wird so erreicht, dass die Identifikationsnummer des neuen Blocks unter einem bestimmten Wert liegen muss welcher alle 2016 Blocks geändert wird. Aufgrund der speziellen Eigenschaft der Funktion mit welcher die Identifikationsnummer berechnet wird, kann nicht erahnt werden, welche Inputs zum gewünschten Zielwert der ID führen. Das ganze ist also eine Art “Glücksspiel:D Die Teilnehmer probieren solange verschiedene Block Inhalte aus, bis sie eine Kombination finden, die zur gewünschten ID führt. Damit ein Miner verschiedne ID´s erstellen kann, ohne die Transaktionen oder die Referenz zu verändern gibt es im Block Raum für arbiträre Daten (Nonce) welche der Miner durchprobieren kann, bis der Block die gewünschte ID hat (Hashwerte).
Dieses Verfahren wird Proof-of-work genannt (Arbeitsnachweis). Ein Block mit der gewünschten ID ist nämlich ein Beweis dafür, dass für seine Erstellung eine gewisse Rechenleistung (im Schnitt) aufgebracht wurde.
Wenn wir nochmal zum Double-Spend Problem zurückschauen, wird klar wie das ganze gelöst wird. Da in ein und demselben Block keine konkurierenden Transaktionen seien dürfen, befinden sich die beiden konkurrierenden Transaktionen in unterschiedlichen Blocks. Welche der beiden Transaktionen nun vom Block anerkannt wird, liegt darab, welcher Block zuerst fertig gemined wird (dessen ID unter dem Schwellenwert liegt). Die Kette kann sich also in mehrere Richtungen entwickeln je nachdem welcher Miner den nächsten Block erstellt (es beziehen sich mehrere Blocks auf den selben Referenzwert).
Coinbase Transaktion
Doch wieso sollte man Miner werden? Man muss immerhin die Rechenleistung (Hardware und Strom) bezahlen. Die Lösung hierfür ist die sogenannte Coinbase Transaktion (neue Bitcoins als Belohnung für den Miner). Diese Transaktion generiert neue Bitcoin Einheiten für den Miner, der den Block erstellt hat. Gelingt es einem Miner einen Block mit gültiger ID zu erstellen, wird der Block an das Ende der Kette angehängt. Wie alle Transaktionen wird die Coinbase Transaktion nur dann akzeptiert, wenn sie in der längsten Version der Kette auftaucht was den Minern den Anreiz gibt, den Block der längsten Kette zu referenzieren.
Die ersten vier Jahre war die Entlohnung (coinbase Transaktion) 50 Bitcoins. Diese Entlohnung wird alle 210 000 Blocks halbiert. Die Menge aller Bitcoin Einheiten steigt also nach einem abnehmenden Wachstum. (Nachdem alle 21 Millionen Bitcoin Einheiten geschaffen sind, wird das System ausschließlich durch Transaktionsgebühren getragen.)
Netzwerkknoten
Die drei Grundfunktionen der Netzwerkteilnehmer
Es gibt grundlegend drei verschiedene Funktionen die die Netzwerkteilnehmer ausüben können. Das sind:
-
Verifizierungsfunktion: Eingehende Transaktionsnachrichten werden verifiziert, lokal abgelegt und an andere Netzwerkknoten weitergeleitet. Außerdem wird eine vollständige Kopie der Blockchain gehalten und die Gültigkeit der einzelnen Blocks und Ketten überprüft. Die Verifizierungsfunktion ermöglicht das Versenden und Empfangen von Blocks. Knoten die mindestens über die Verifizierungsfunktion verfügen, werden Full nodes (vollwertige Knoten) genannt.
-
Wallet Funktion:Die sichere Aufbewahrung von privaten Schlüsseln (mit denen, wie wir ja gelernt haben die Transaktion initiiert wird, bzw die Legitimität der Transaktion sichergestellt wird) sowie die Verwaltung des Guthabens. Die Wallet Funktion ist an Endnutzer gerichtet und bietet oft noch 2FA oder andere Authentifikationsmethoden mit denen der private Schlüssel geschützt werden kann.
-
Mining-Funktion:Netzwerkknoten mit Mining-Funktion sind aktiv an der Erstellung neuer Blocks und damit an der Erweiterung des Blockchain Registers beteiligt.
Ein neuer Netzwerkknoten entsteht, indem man einen Bitcoin-Client installiert und Kommunikation mit anderen Netzwerkknoten des Bitcoin Netzwerkes aufnimmt. Dank open-source gibt es viele verschiedene Programme und wenn ihr das nötige Know-how besitzt könntet ihr euch auch selber einen Client programmieren und diesen mit dem Bitcoin Netzwerk kommunizieren lassen. Alle Clienten (die funktionieren wollen:D) halten sich an das standartisierte Verbindungs und Kommunikationsprotokoll. Der bekannteste Client ist Bitcoi