Wie fällt eine geänderte Zeile auf?
Eine Blockchain ist eine Kette von Blöcken, in der jeder Block den Hashwert seines Vorgängers enthält. So fällt jede nachträgliche Änderung an einem alten Eintrag auf.
Denken Sie an das Kassenbuch einer Fahrgemeinschaft. Wer eine alte Zeile ändert, soll erwischt werden, auch wenn niemand das Buch bewacht.
Am Ende dieser Lektion
Notiz
Ich kann Blöcke so verketten, dass jede Änderung an einem alten Block auffällt.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Hashwert | ein Fingerabdruck fester Länge, der aus Daten berechnet wird |
| Block | eine Gruppe von Einträgen mit dem Hashwert des Blocks davor |
| Verkettung | jeder Block enthält den Hashwert seines Vorgängers |
| Blockchain | Blöcke in fester Reihenfolge, durch ihre Hashwerte verkettet |
| Manipulation | eine unerlaubte nachträgliche Änderung von Daten |
| Prüfung | das Nachrechnen aller Hashwerte und Verweise einer Kette |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Ausgabe des Labors ist englisch
Notiz
Die Skripte im Labor geben englische Wörter aus, zum Beispiel block, previous und hash. Das gehört zum Labor und ändert sich nicht. Achten Sie auf die Zahlen und die Anfänge der Hashwerte.
Ein Hashwert ist der Fingerabdruck eines Textes
Der Hashwert ist immer gleich lang, egal wie lang der Text ist. Derselbe Text ergibt immer denselben Hashwert. Ändern Sie nur ein Zeichen, sieht der Hashwert völlig anders aus.
Das Labor hat Python mit hashlib an Bord. Zwei kurze Befehle zeigen es.
Den Hashwert von „Hallo“ berechnen
docker exec jupyter python3 -c "print(__import__('hashlib').sha256(b'Hallo').hexdigest())"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den Hashwert von „Hallo!“ berechnen
docker exec jupyter python3 -c "print(__import__('hashlib').sha256(b'Hallo!').hexdigest())"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Was beide Befehle ausgeben
Der erste Befehl gibt 64 Zeichen aus, die mit 753692ec beginnen. Der zweite gibt ebenfalls 64 Zeichen aus, aber sie beginnen mit 357a57fe.
Ein einziges Ausrufezeichen ändert den ganzen Hashwert. Genau darauf baut die Blockchain.
Jeder Block enthält den Hashwert seines Vorgängers
Ein Block hat eine Nummer, seine Einträge und den Hashwert des Blocks davor. Sein eigener Hashwert wird aus all dem berechnet. Der erste Block hat keinen Vorgänger und bekommt dafür nur Nullen.
So hängt jeder Block am Hashwert des vorigen. Die Tabelle zeigt drei Blöcke aus dem Labor.
Drei verkettete Blöcke aus dem Labor
| Block | Hashwert des Vorgängers (Anfang) | Eigener Hashwert (Anfang) |
|---|---|---|
| 0 | 0000000000 | 000e13dc51 |
| 1 | 000e13dc51 | 0007118fa7 |
| 2 | 0007118fa7 | 000c5aaf76 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Drei Blöcke im Labor verketten
docker exec jupyter python3 steps/link.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Was das Skript ausgibt
Das Skript gibt vier Zeilen aus. Die ersten drei beginnen mit block 0, block 1 und block 2, dazu der Anfang des Vorgänger-Hashwerts und der eigene. Sie stimmen mit der Tabelle überein.
Alle eigenen Hashwerte beginnen mit 000. Das ist eine Regel, die das Labor beim Schürfen erzwingt. Die vierte Zeile fasst die Verkettung in einem Satz zusammen.
Eine Änderung zerbricht die Kette
Wer in Block 1 einen Betrag ändert, ändert dessen Hashwert. Der gespeicherte Hashwert passt dann nicht mehr zum Inhalt. Die Prüfung rechnet jeden Block nach und findet den ersten Block, bei dem das nicht stimmt.
Der Hashwert allein reicht nicht aus. Auch der Verweis auf den Vorgänger muss passen.
Eine Kette ändern und prüfen
docker exec jupyter python3 steps/tamper.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Was die vier Ausgabezeilen sagen
Die erste Zeile endet mit (True, None): gültig, kein schlechter Block. Nach der Änderung steht dort (False, 1): ungültig, Block 1 ist die Stelle.
Selbst ein gefälschter Hashwert hilft nicht, es bleibt (False, 1). Erst wenn Block 1 neu geschürft wird, ist er in Ordnung. Dann lautet die Antwort aber (False, 2), denn Block 2 verweist noch auf den alten Hashwert von Block 1.
Ein häufiger Fehler
Warnung
Viele glauben, eine gültige Kette beweise, dass jeder Eintrag wahr ist. Sie beweist nur, dass seit dem Schreiben nichts verändert wurde. Ob ein Eintrag stimmt, ist eine andere Frage.