DEV Community

Cover image for Blockchain und Bitcoin erklärt in 6 Episoden — Episode 1
Christian Ahrweiler
Christian Ahrweiler

Posted on Originally published at Medium

Blockchain und Bitcoin erklärt in 6 Episoden — Episode 1

Episode 1: Wie funktioniert eine Blockchain?Episode 1: Wie funktioniert eine Blockchain?Bevor wir über Bitcoin sprechen, müssen wir verstehen, wie eine Blockchain grundsätzlich funktioniert: Was ist ein Hash, wie werden Blöcke miteinander verbunden und warum macht Proof of Work nachträgliche Veränderungen so aufwendig?Eine Blockchain ist eine Kette aus miteinander verbundenen Datenblöcken.

Ihre Sicherheit entsteht nicht durch Verschlüsselung oder ein Zertifikat. Sie entsteht durch die besondere Verbindung der Blöcke und den enormen Aufwand, der für eine unbemerkte Veränderung der Kette notwendig wäre.

Um diese Verbindung zu verstehen, beginnen wir mit einem Hash.

Der Hash

Aus einem beliebigen Inhalt lässt sich ein kurzer Hash berechnen.

Der Hash wird nicht zufällig erzeugt, sondern ergibt sich aus dem Inhalt.

Beispiel 1
Text Hallo Anna!
Hash 3dcdffÄndern wir nur einen Buchstaben, ergibt sich ein anderer Hash:

Beispiel 2
Text Hallo Anne!
Hash 2dededDer gleiche Inhalt ergibt immer den gleichen Hash. Verändert sich der Inhalt, verändert sich auch der Hash.

Damit lassen sich Inhalte einfach vergleichen.

Statt zwei große Dateien vollständig miteinander zu vergleichen, berechnet man aus beiden Dateien jeweils den Hash und vergleicht nur diese beiden kurzen Werte.

Sind die Hashes unterschiedlich, sind auch die Inhalte unterschiedlich. Sind die Hashes gleich, können wir mit sehr hoher Sicherheit davon ausgehen, dass auch die Inhalte gleich sind.

Dabei spielt die Größe des Inhalts keine Rolle. Ein kurzer Text, ein Foto und eine riesige Datei ergeben jeweils einen Hash mit derselben festen Länge.

Ein Hash ist somit ein kurzer Vergleichswert, der sich aus dem vollständigen Inhalt ergibt.

Der erste Block

Ein Block ist zunächst ein Behälter für Daten.

Wir können ihn uns wie ein Paket vorstellen. Im Paket befinden sich die eigentlichen Daten. Auf einem Aufkleber stehen die technischen Angaben des Blocks.

Unser erster Block enthält die Daten „Hallo Anna!“.

Block 1
Daten Hallo Anna!
Vorheriger Hash –
Hash 3dcdffDer erste Block einer Blockchain wird Genesis-Block genannt.

Da vor ihm kein anderer Block existiert, besitzt er keinen vorherigen Hash.

Der Genesis-Block ist der festgelegte Ausgangspunkt der Blockchain. Würde man einen anderen Genesis-Block verwenden, entstünde eine andere Blockchain mit einer eigenen Kette.

Ein einzelner Block ist aber noch keine Blockchain. Dafür müssen wir mehrere Blöcke miteinander verbinden.

Die Blöcke verbinden

Wir legen einen zweiten Block an.

Dieser enthält eigene Daten. Zusätzlich schreiben wir den Hash von Block 1 auf seinen Aufkleber.

Block 2
Daten Hallo Anne!
Vorheriger Hash 3dcdff
Hash 2dededDer vorherige Hash gehört nicht zu den eigentlichen Daten „Hallo Anne!“. Er ist eine technische Angabe des Blocks.

Er wird aber bei der Berechnung des neuen Hashes berücksichtigt.

Der Hash von Block 2 ergibt sich somit aus seinen Daten und dem vorherigen Hash.

Nun ergänzen wir einen dritten Block:

Block 3
Daten Hallo Anna und Anne!
Vorheriger Hash 2deded
Hash 731be2Block 2 verweist mit 3dcdff auf Block 1. Block 3 verweist mit 2deded auf Block 2.

So entsteht eine Kette aus miteinander verbundenen Blöcken — eine Blockchain.

Die Kette prüfen

Die Hash-Verbindungen machen die gesamte Kette überprüfbar.

Zuerst berechnen wir den Hash von Block 1. Anschließend vergleichen wir das Ergebnis mit dem vorherigen Hash, der in Block 2 gespeichert ist.

Stimmen beide Werte überein, passt die Verbindung zwischen Block 1 und Block 2.

Danach berechnen wir den Hash von Block 2 und vergleichen ihn mit dem vorherigen Hash in Block 3.

Auf diese Weise wird die gesamte Kette Block für Block geprüft.

Nur wenn jede Verbindung stimmt, lässt sich die Kette lückenlos bis zu ihrem Genesis-Block zurückverfolgen.

Was geschieht bei einer Änderung?

Nehmen wir an, die Daten in Block 2 werden nachträglich verändert.

Aus den veränderten Daten ergibt sich ein anderer Hash.

Zunächst passiert dadurch nichts. Die Änderung fällt erst auf, wenn die Blockchain geprüft wird.

Der neu berechnete Hash von Block 2 stimmt dann nicht mehr mit dem vorherigen Hash überein, der in Block 3 gespeichert ist.

Die Verbindung zwischen den beiden Blöcken ist unterbrochen.

Damit ist die Kette ab dieser Stelle nicht mehr lückenlos überprüfbar. Block 2 und die nachfolgenden Blöcke können nicht mehr als Teil dieser gültigen Kette anerkannt werden.

Die Hash-Verbindungen verhindern eine Veränderung also nicht. Sie sorgen zunächst nur dafür, dass sie bei einer Prüfung auffällt.

Reichen die Hash-Verbindungen aus?

Nein.

Die veränderte Kette könnte wieder passend gemacht werden.

Dazu müsste der neue Hash von Block 2 in Block 3 eingetragen werden.

Dadurch verändert sich Block 3 und aus ihm ergibt sich ebenfalls ein neuer Hash. Dieser neue Hash müsste wiederum in den nächsten Block eingetragen werden.

Das müsste bis zum Ende der Kette fortgesetzt werden.

Da sich normale Hashes sehr schnell berechnen lassen, wäre das kein ausreichender Schutz.

Deshalb werden die Blöcke nicht nur miteinander verbunden. Für jeden Block gilt zusätzlich eine besondere Bedingung.

Eine zusätzliche Bedingung für alle Blöcke

Für unsere vereinfachte Blockchain legen wir folgende Regel fest:

*Der Hash jedes Blocks muss mit **00 beginnen.*Nur Blöcke, deren Hash diese Bedingung erfüllt, dürfen Teil unserer Blockchain sein.

Unsere bisherigen Hashes erfüllen die Bedingung noch nicht:

Block 1 3dcdff beginnt nicht mit 00
Block 2 2deded beginnt nicht mit 00
Block 3 731be2 beginnt nicht mit 00Der Hash eines Blocks ergibt sich aus seinen Daten und seinen technischen Angaben. Wir können ihn nicht einfach durch einen gewünschten Hash ersetzen.

Damit der Hash mit 00 beginnt, müssen wir etwas am Block verändern und den Hash erneut berechnen.

Die eigentlichen Daten sollen dabei natürlich erhalten bleiben. Aus „Hallo Anna!“ soll nicht so lange ein anderer Text gemacht werden, bis zufällig ein passender Hash entsteht.

Deshalb wird der Block um eine zusätzliche Zahl ergänzt.

Diese Zahl wird Nonce genannt.

Die Nonce

Die Nonce hat keine inhaltliche Bedeutung. Sie wird lediglich auf dem Aufkleber des Blocks ergänzt und bei der Berechnung des Hashes berücksichtigt.

Wir beginnen bei Block 1 mit der Nonce 1.

Erster Versuch
Daten Hallo Anna!
Nonce 1
Hash 74ac21Der Hash beginnt nicht mit 00. Deshalb ändern wir nur die Nonce und berechnen den Hash erneut.

Zweiter Versuch
Daten Hallo Anna!
Nonce 2
Hash 936be8Auch dieser Hash beginnt nicht mit 00.

Die Nonce wird deshalb immer wieder verändert und der Hash jedes Mal neu berechnet. Die eigentlichen Daten bleiben dabei unverändert.

Nach mehreren Versuchen finden wir beispielsweise die Nonce 183:

Block 1
Daten Hallo Anna!
Vorheriger Hash –
Nonce 183
Hash 00ab71Dieser Hash beginnt mit 00. Der Genesis-Block erfüllt damit die zusätzliche Bedingung unserer Blockchain.

Nun wird der neue Hash von Block 1 auf dem Aufkleber von Block 2 eingetragen.

Auch bei Block 2 wird die Nonce so lange verändert, bis sich ein Hash ergibt, der mit 00 beginnt.

Dasselbe geschieht anschließend mit Block 3.

Unsere vollständige Blockchain sieht nun so aus:

Block 1
Daten Hallo Anna!
Vorheriger Hash –
Nonce 183
Hash 00ab71Block 2
Daten Hallo Anne!
Vorheriger Hash 00ab71
Nonce 4.927
Hash 003f92Block 3
Daten Hallo Anna und Anne!
Vorheriger Hash 003f92
Nonce 716
Hash 00c841Jeder Block enthält den Hash seines Vorgängers. Außerdem besitzt jeder Block eine Nonce, durch die sein eigener Hash mit 00 beginnt.

Die 00-Bedingung gilt für jeden Block der gesamten Blockchain – einschließlich des Genesis-Blocks.

Was bedeutet Proof of Work?

Eine Nonce, die zu einem Hash mit 00 führt, lässt sich nicht gezielt berechnen.

Es müssen verschiedene Nonces ausprobiert und die zugehörigen Hashes berechnet werden, bis die Bedingung zufällig erfüllt ist.

Wurde eine passende Nonce gefunden, wird sie im Block gespeichert.

Jeder kann anschließend die Daten, den vorherigen Hash und die Nonce einmal zusammen berechnen. Beginnt das Ergebnis mit 00, ist bewiesen, dass für diesen Block eine passende Nonce gefunden wurde.

Das ist der Proof of Work.

Proof of Work bedeutet, dass für diesen Block entsprechend viele Berechnungen vorgenommen wurden.

Der Proof ist kein separates Zertifikat. Er steckt bereits im Block: in seinen Daten, dem vorherigen Hash, der gefundenen Nonce und dem daraus entstehenden Hash.

Eine passende Nonce zu finden, ist aufwendig. Das Ergebnis zu überprüfen, ist dagegen einfach und benötigt nur eine einzige Berechnung.

Wie groß ist der Aufwand?

In unserer vereinfachten Blockchain sind durchschnittlich nur etwa 256 Versuche notwendig, um einen Hash zu finden, der mit 00 beginnt.

Für einen modernen Computer wäre das kein nennenswerter Aufwand. Unsere 00-Regel dient nur dazu, das Verfahren verständlich zu machen.

In einer echten Blockchain kann die Bedingung so schwierig eingestellt werden, dass für einen einzigen Block viele Milliarden Milliarden Berechnungen notwendig sind.

Dieser Aufwand muss für jeden Block einzeln erbracht werden.

Was wäre für eine Manipulation notwendig?

Nehmen wir erneut an, die Daten in Block 2 werden verändert.

Aus den veränderten Daten, dem vorherigen Hash und der bisherigen Nonce ergibt sich ein neuer Hash. Dieser beginnt sehr wahrscheinlich nicht mehr mit 00.

Block 2 erfüllt die Bedingung der Blockchain damit nicht mehr.

Für den veränderten Block müsste zunächst eine neue passende Nonce gefunden werden.

Durch die Veränderung erhält Block 2 außerdem einen neuen Hash. Block 3 enthält aber weiterhin den ursprünglichen Hash von Block 2.

Deshalb müsste der neue Hash von Block 2 in Block 3 eingetragen werden.

Damit verändert sich eine technische Angabe von Block 3. Seine bisherige Nonce führt nun ebenfalls nicht mehr zu einem Hash, der mit 00 beginnt.

Auch für Block 3 müsste deshalb eine neue passende Nonce gefunden werden.

Das setzt sich bis zum letzten Block der Kette fort.

Wer Block 2 verändern möchte, muss daher für Block 2 und jeden nachfolgenden Block einen neuen Proof of Work erbringen.

Der gesamte Aufwand ergibt sich aus dem Proof-of-Work-Aufwand für einen Block, multipliziert mit der Anzahl der Blöcke, die ab der veränderten Stelle neu berechnet werden müssen.

Je weiter ein veränderter Block zurückliegt, desto mehr Blöcke bauen auf ihm auf und desto größer wird der notwendige Aufwand.

Warum gilt die Blockchain als sicher?

Die Blockchain ist nicht sicher, weil ihre Daten verschlüsselt sind. Die Daten können vollkommen offen lesbar sein.

Sie ist auch nicht sicher, weil eine zentrale Stelle die Blöcke zertifiziert.

Ihre Sicherheit beruht auf zwei miteinander verbundenen Eigenschaften:

Jeder Block enthält den Hash seines Vorgängers. Dadurch ist die gesamte Kette lückenlos überprüfbar.

Zusätzlich muss jeder Block eine Bedingung erfüllen, für die zuvor eine passende Nonce gefunden werden musste. Dadurch steckt in jedem Block nachweisbare Rechenarbeit.

Eine Veränderung ist damit nicht mathematisch unmöglich. Der dafür notwendige Rechenaufwand kann bei einer langen Blockchain jedoch so groß werden, dass eine vollständige, unbemerkte Neuberechnung praktisch unmöglich ist.

In Episode 2 sehen wir uns an, wo diese Blockchain gespeichert wird, wie ihre verschiedenen Kopien geprüft werden und warum nicht jeder Computer sämtliche Blöcke für immer aufbewahren muss.

Top comments (0)