2. Kryptografische Hashfunktionen und digitale Signaturen

Dieses Kapitel behandelt

  • Ein einfaches Geld erschaffen: Keksgutscheine

  • Verstehen von kryptografischen Hashfunktionen

  • Authentifizierung von Zahlungen durch digitale Signaturen

  • Geheimhaltung deiner Geheimnisse

In diesem Kapitel setze ich zunächst den Rahmen für das Buch. Wir schauen uns ein einfaches Zahlungssystem an, das wir mit Bitcoin Technologien verbessern können. Wenn wir bei [ch08] ankommen, wird dieses System sich zu dem entwickelt haben, was wir Bitcoin nennen.

Der zweite Teil des Kapitels gibt dir das nötige Rüstzeug aus dem Bereich kryptografischer Hashfunktionen. Diese sind für Bitcoin so wichtig, dass du sie wirklich verstehen musst, bevor du irgendetwas anderes über Bitcoin lernst. Du wirst verstehen, wie eine kryptografische Hashfunktion verwendet werden kann, um zu überprüfen, dass eine Datei gegenüber einem früheren Zeitpunkt unverändert geblieben ist.

Der Rest des Kapitels wird das Problem des Betrügers behandeln: eines Bösewichts, der vorgibt, jemand anderes zu sein, um aus dessen Konto heraus Zahlungen zu leisten. Wir lösen dieses Problem, indem wir digitale Signaturen (Abbildung 1) in das System einführen.

02 01
Abbildung 1. Digitale Signaturen in Bitcoin

2.1. Das Keksgutschein-Kalkulationsblatt

Angenommen, es gibt ein Café in dem Büro, in dem du arbeitest. Du und deine Kollegen benutzen ein Kalkulationsblatt, um über Keksgutscheine, oder Cookie Tokens, Buch zu führen (Abbildung 2), die das Symbol CT benutzen. Du kannst Cookie Tokens im Café gegen Kekse eintauschen.

Bitcoin, die Währung

Ein Cookie Token entspricht einem bitcoin, der Währungseinheit von Bitcoin. Bitcoin bekam seinen ersten Preis im Jahr 2010, als jemand zwei Pizzen für 10.000 bitcoins kaufte. Mit diesem Geld hätte man im November 2018 ganze 60.000.000 Pizzen kaufen können.

02 02
Abbildung 2. Das Cookie Token Kalkulationsblatt, oder Spreadsheet, hat eine Spalte für den Absender, eine für den Empfänger, und eine für die Anzahl Tokens, die übertragen werden. Neue Cookie Token Transfers werden ans Ende des Spreadsheets angefügt.

Lisa speichert dieses Spreadsheet auf ihrem Computer. Sie gibt den Kollegen im Büronetzwerk Lesezugriff, sodass jeder es öffnen und anschauen kann, ausser Lisa. Lisa ist sehr vertrauenswürdig. Jeder vertraut ihr. Sie hat vollen Zugriff auf das Spreadsheet und kann alles damit tun, was sie will. Du und die anderen können es aber nur ansehen, indem sie es im Read-Only-Modus öffnen.

Immer wenn Alice einen Keks will, bittet sie Lisa, die direkt neben dem Café sitzt, 10 CT von Alice zum Café zu übertragen. Lisa weiss, wer Alice ist, und kann im Spreadsheet überprüfen, dass diese genug Tokens besitzt; sie sucht einfach nach “Alice” im Spreadsheet, zählt alle Beträge mit Alices Namen in der Spalte AN zusammen und zieht davon alle Beträge ab, bei denen “Alice” in der VON Spalte steht. Abbildung 3 zeigt das komplette Suchresultat; drei Transfers involvieren Alice.

02 03
Abbildung 3. Lisa berechnet Alices Saldo. Die Summe ihrer erhaltenen Cookie Tokens ist 100, und die Summe der ausgegebenen Cookie Tokens ist 30. Alices Kontostand ist also 70.

Lisa berechnet, dass Alice 70 CT hat, was ausreicht, um 10 CT an das Café zu bezahlen. Folgender Eintrag wird an das Spreadsheet angehängt (Abbildung 4).

02 04
Abbildung 4. Lisa fügt Alices Zahlung für einen Keks hinzu. Die Zahlung wird als letzter Eintrag dem Cookie Token Spreadsheet angehängt.

Das Café sieht diese neue Zeile im Kalkulationsblatt und reicht Alice einen Keks.

Verdiene sie

Du kannst auch Keksgutscheine als Teil deines Gehalts bekommen.

Wenn du keine Cookie Tokens mehr hast, kannst du dir Tokens für Dollars von irgendjemandem kaufen, der dir welche verkaufen will–wahrscheinlich Anne vom Café–zu einem einvernehmlichen Preis. Lisa hängt dann eine entsprechende Zeile an das Spreadsheet an.

Lisa hat versprochen, niemals irgendetwas im Spreadsheet zu entfernen oder abzuändern. Was im Spreadsheet geschieht, verbleibt im Spreadsheet!

Lisa, die die wertvolle Arbeit der Absicherung des Geldsystems leistet, wird täglich mit 7.200 frisch erzeugten Tokens belohnt (Abbildung 5). Jeden Tag hängt sie eine neue Zeile an das Spreadsheet an, die 7.200 neue Cookie Tokens mit Lisa als Empfänger enthält.

02 05
Abbildung 5. Lisa wird mit Cookie Tokens belohnt.
Geldmengenkurve

Bitcoin benutzt das gleiche Verfahren zur Gelderzeugung wie das Cookie Token Spreadsheet. Alle neuen bitcoins werden als Vergütung an die Nodes ausgeschüttet, die den Bitcoin Ledger–die Blockchain–absichern, genau wie Lisa für das Absichern des Cookie Token Spreadsheets belohnt wird.

u02 01

So werden alle Cookie Tokens im Spreadsheet erzeugt. Die erste Zeile im Spreadsheet ist die Belohnungszeile–wie die im gerade gezeigten Spreadsheet–die die ersten 7.200 CT überhaupt erzeugt hatte. Der Plan ist, dass Lisa in den ersten vier Jahren jeden Tag mit 7.200 CT belohnt wird, und sich danach die Belohnung auf 3.600 CT/Tag halbiert und so weiter, bis die Belohnung 0 CT/Tag beträgt.

Mach dir im Moment keine Sorgen über das, was passiert, wenn die Belohnung auf 0 fällt–das liegt in ferner Zukunft. Wir diskutieren das in [ch07]. Diese Halbierung der Belohnung lässt den gesamten Geldvorrat–die gesamte Anzahl Cookie Tokens, die zirkulieren–gegen 21 Millionen CT konvergieren, aber es wird nie mehr als 21 Millionen CT geben.

Was Lisa mit den neuen Cookie Tokens tut, die sie verdient, ist ihre Sache. Sie kann davon Kekse kaufen oder sie kann die Cookie Tokens verkaufen. Sie kann sie auch für später aufheben. Das Spreadsheet System funktioniert gut, und jeder isst eine anständige Menge Kekse.

Lisa übernimmt im Grunde dieselbe Aufgabe wie die Miner im Bitcoin Netzwerk. Sie überprüft Zahlungen und aktualisiert den Ledger, das Cookie Token Spreadsheet. Tabelle 1 stellt klar, wie die Konzepte im Spreadsheet mit den Konzepten in Bitcoin korrelieren.

Tabelle 1. Wie Schlüsselfunktionen im Cookie Token System und im Bitcoin System sich zueinander verhalten
Cookie Tokens Bitcoin Behandelt in

1 Cookie Token

1 bitcoin

Kapitel 2

Das Spreadsheet

Die Blockchain

[ch06]

Eine Zeile im Spreadsheet

Eine Transaktion

[ch05]

Lisa

Ein Miner

[ch07]

Diese Tabelle wird uns durch das ganze Buch begleiten. Sie beschreibt Unterschiede zwischen dem Cookie Token System und Bitcoin. Ich werde Zeilen daraus löschen, wenn ich diverse Bitcoin Sachen bespreche. Zum Beispiel wird die Zeile “Das Spreadsheet” in [ch06] gelöscht, wenn wir eine Blockchain benutzen, um Transaktionen zu speichern. Ich werde auch ein paar Zeilen hinzufügen, wenn ich neue Konzepte für das Cookie Token System hinzufüge, die von denen in Bitcoin abweichen.

Am Ende von [ch08] wird diese Tabelle nur noch die erste Reihe enthalten, in der 1 Cookie Token auf 1 bitcoin abgebildet wird. Das bezeichnet das Ende des Cookie Token Beispiels, und von da an sprechen wir nur noch von Bitcoin selbst.

Tabelle 2 ist dein Startpunkt zum Lernen, wie Bitcoin funktioniert, was wir als Version 1.0 des Cookie Token Spreadsheet Systems bezeichnen können.

Tabelle 2. Release notes, cookie tokens 1.0
Version Feature Wie

new1.0

Einfaches Bezahlsystem

Vertraut auf Lisas Integrität und ihre Kenntnis aller Mitarbeiter

Begrenzte Geldmenge

Lisa wird täglich mit 7,200 neuen CT belohnt; halbiert sich alle vier Jahre

Wir werden an dieses System eine Menge cooles Zeug dranbauen und in jedem Kapitel eine neue Version freigeben. Zum Beispiel geben wir am Ende dieses Kapitels die Version 2.0 heraus, die mit digitalen Signaturen das Problem des Betrugs löst. Jedes Kapitel bringt uns näher an das Endresultat: Bitcoin. Aber sei dir bitte klar darüber, dass sich Bitcoin nicht wirklich auf diese Weise entwickelt hatte–ich benutze dieses ausgedachte System lediglich als Hilfsmittel, um jedes wichtige Thema für sich selbst isoliert zu erklären.

2.2. Kryptografische Hashfunktionen

Kryptografische Hashes werden in Bitcoin überall verwendet. Zu versuchen, Bitcoin zu lernen, ohne zu wissen, was kryptografische Hashes sind, ist wie zu versuchen Chemie zu lernen, ohne zu wissen, was ein Atom ist.

Man kann sich einen kryptografischen Hash wie einen Fingerabdruck vorstellen. Der Fingerabdruck des linken Daumens einer Person sieht immer gleich aus, egal wer oder wo man ihn nimmt, aber es ist äusserst schwierig, jemand anderen zu finden, der denselben linken Daumenabdruck hat. Der Fingerabdruck gibt keinerlei Informationen über die Person preis ausser dem Fingerabdruck selbst. Man kann von dem Fingerabdruck nicht auf die mathematischen Fähigkeiten oder die Augenfarbe der zugehörigen Person schliessen.

Digitale Informationen besitzen ebenfalls Fingerabdrücke. Einen solchen Fingerabdruck bezeichnet man als kryptografischen Hash. Um den kryptografischen Hash einer Datei zu erzeugen, schickst du die Datei an ein Computerprogramm namens kryptografische Hashfunktion. Nehmen wir einmal an, du möchtest den kryptografischen Hash–einen Fingerabdruck– von deinem Lieblings-Katzenbild erzeugen. Abbildung 6 illustriert diesen Vorgang.

02 06
Abbildung 6. Erzeugen des kryptografischen Hashes von einem Katzenbild. Eingabe ist das Katzenbild und Ausgabe ist eine grosse, 32 Byte lange Zahl.
Bits? Bytes? Hex?

Ein Bit ist die kleinste Informationseinheit in einem Computer. Es kann einen von zwei Werten annehmen: 0 oder 1. Wie eine Glühbirne kann es entweder an sein oder aus. Ein Byte ist eine Gruppe von 8 Bits, die zusammen 256 Werte repräsentieren können. Wir verwenden oft hexadezimale oder Hex Darstellung, wenn wir Zahlen in diesem Buch darstellen. Dabei wird jedes Byte als zwei Hex Ziffern dargestellt, jede im Bereich von 0–f, wobei a = 10 und f = 15 entspricht.

u02 02

Die Ausgabe–der Hash– ist eine 256-Bit zahl; 256 Bits entsprechen 32 Bytes weil 1 Byte aus 8 Bits besteht. Um diese Zahl in einer Datei zu speichern, wäre die Datei also 32 Bytes gross, was im Vergleich zu den 1,21 MB des Katzenbildes winzig ist. Die spezielle kryptografische Hashfunktion in diesem Beispiel heisst SHA256 (Sicherer Hash Algorithmus mit 256 Bit Ausgabe) und ist der in Bitcoin am häufigsten benutzte.

Das Wort Hash bedeutet eigentlich, dass etwas in kleine Stückchen gehackt oder vermengt wird. Das ist eine gute Beschreibung dessen, was eine kryptografische Hashfunktion tut. Sie nimmt das Katzenbild und vollführt eine mathematische Operation darauf. Heraus kommt eine riesige zahl–der kryptografische Hash–der nicht entfernt wie eine Katze aussieht. Man kann die Katze nicht aus dem Hash “rekonstruieren”–eine kryptografische Hashfunktion ist eine funktionale Einbahnstrasse. Abbildung 7 zeigt, was passiert, wenn man das Katzenbild ein bisschen abändert und es durch dieselbe Hashfunktion laufen lässt.

02 07
Abbildung 7. Hashen eines veränderten Katzenbildes. Siehst du den Unterschied? Die kryptografische Hashfunktion hat ihn jedenfalls gesehen.

Dieser Hash stellt sich als vollkommen anders heraus als der erste Hash. Vergleichen wir sie:

Alter Hash: dee6a5d375827436ee4b47a930160457901dce84ff0fac58bf79ab0edb479561
Neuer Hash: d2ca4f53c825730186db9ea585075f96cd6df1bfd4fb7c687a23b912b2b39bf6

Siehst du, wie diese winzige Änderung im Katzenbild eine riesige Änderung im Hashwert zur Folge hatte? Der Hashwert ist vollständig anders, aber die Länge des Hashes ist immer gleich, egal wie lang die Eingabedaten sind. Die Eingabe “Hello” erzeugt ebenfalls einen 256-Bit Hashwert.

2.2.1. Wozu dienen kryptografische Hashfunktionen?

Kryptografische Hashfunktionen können zur Integritätsprüfung verwendet werden, um Änderungen in Daten festzustellen. Angenommen du willst dein Lieblings-Katzenbild auf der Festplatte deines Laptops abspeichern, aber du machst dir Sorgen, dass die Datei beschädigt werden könnte. Das könnte zum Beispiel aufgrund von Festplatten Fehlern oder Hackern geschehen. Wie kannst du sichergehen, dass du eine Beschädigung der Datei feststellen kannst?

Zunächst berechnest du den kryptografischen Hash des Katzenbildes auf deiner Festplatte und schreibst ihn auf ein Blatt Papier (Abbildung 8).

02 08
Abbildung 8. Sichere den Hash der Katzenbildes auf einem Blatt Papier

Später, wenn du das Bild anschauen willst, kannst du überprüfen, ob es sich geändert hat, seitdem du den Hash aufgeschrieben hast. Berechne den kryptografischen Hash des Katzenbildes erneut und vergleiche ihn mit dem, den du auf Papier hast (Abbildung 9).

02 09
Abbildung 9. Überprüfe die Integrität des Katzenbildes. Du stellst eine Abweichung fest.
Wie sicher?

Es gibt zwar eine winzige Chance, dass sich das Bild geändert hat und die Hashes trotzdem übereinstimmen. Du wirst aber später sehen, dass diese Chance so winzig ist, dass du sie getrost ignorieren kannst.

Wenn der neue Hash mit dem auf dem Papier übereinstimmt, kannst du sicher sein, dass das Bild unverändert ist. Auf der anderen Seite, sollten die Hashes sich unterscheiden, so hat sich das Bild definitiv geändert.

Bitcoin verwendet kryptografische Hashfunktionen sehr ausgiebig, um zu überprüfen, dass sich Daten nicht geändert haben. Zum Beispiel wird immer ab und zu–durchschnittlich alle 10 Minuten–ein neuer Hash der gesamten Zahlungsgeschichte erzeugt. Wenn jemand versucht, diese Daten zu ändern, wird dies sofort von jedem, der die Hashes überprüft, bemerkt.

2.2.2. Wie funktioniert eine kryptografische Hashfunktion?

Die korrekte Antwort ist komplex, also werde ich nicht tief in’s Detail gehen. Aber um die Arbeitsweise einer kryptografischen Hashfunktion zu verstehen, werden wir eine sehr einfache schreiben. Nun ja, ehrlich gesagt ist sie nicht wirklich kryptografisch, wie ich später noch erklären werde. Nennen wir sie erstmal einfach eine Hashfunktion.

Modulo

Modulo bedeutet umbrechen, wenn eine Berechnung einen bestimmten Wert überschreitet. Zum Beispiel::

0   mod 256 = 0
255 mod 256 = 255
256 mod 256 = 0
257 mod 256 = 1
258 mod 256 = 2

258 mod 256 ist der Rest der Integerdivision 258/256: 258 = 1 × 256 + 2. Der Rest beträgt 2.

Angenommen du willst den Hash einer Datei mit den sechs Bytes a1 02 12 6b c6 7d berechnen. Du möchtest, dass der Hash eine 1 Byte lange Zahl ist (8 Bits) Du benutzt eine Hashfunktion, die die Addition modulo 256 benutzt, was bedeutet, sie bricht beim Wert von 256 um und fängt wieder bei 0 an, sobald das Ergebnis einer Addition den Wert 256 überschreitet (Abbildung 10).

02 10
Abbildung 10. Simplistische Hashfunktion mit Byte-für Byte Addition modulo 256

Das Ergebnis ist die Dezimalzahl 99. Was sagt 99 über die Eingabedaten a1 02 12 6b c6 7d aus? Nicht viel; 99 sieht genauso zufällig aus wie jede andere zufällige Zahl.

Wenn du die Eingabedaten änderst, ändert sich auch der Hashwert, obwohl es möglich ist, dass der Hash trotzdem zufällig 99 ergibt. Schliesslich hat diese Hashfunktion nur 256 verschiedene mögliche Ergebnisse. Mit echten kryptografischen Hashfunktionen wie der, die wir für das Katzenbild benutzt hatten, ist diese Wahrscheinlichkeit unvorstellbar klein. Du wirst bald eine Idee von dieser Wahrscheinlichkeit bekommen.

2.2.3. Eigenschaften einer kryptografischen Hashfunktion

Eine kryptografische Hashfunktion nimmt beliebige Eingabedaten, das sogenannte Pre-Image, und erzeugt daraus eine Ausgabe von fester Länge, die als Hash bezeichnet wird. In dem Beispiel mit dem Katzenbild auf deiner Festplatte ist das Pre-Image das Katzenbild von 1,21 MB und der Hash ist eine 256 Bit lange Zahl. Die Funktion liefert jedesmal genau denselben Hash für dasselbe Pre-Image. Aber mit allerhöchster Wahrscheinlichkeit wird sie einen vollkommen anderen Wert ergeben, wenn auch nur die winzigste Änderung am Pre-Image stattgefunden hat. Der Hash wird gemeinhin auch als Digest, also Kurzfassung, bezeichnet.

Schauen wir uns an, welche Eigenschaften wir von einer kryptografischen Hashfunktion erwarten können. Ich illustriere das anhand der Funktion SHA256, weil diese in Bitcoin am meisten verwendet wird. Mehrere kryptografische Hashfunktionen sind verfügbar, aber sie besitzen alle dieselben grundlegenden Eigenschaften:

  1. Gleiche Eingabedaten erzeugen den gleichen Hash.

  2. Leicht unterschiedliche Eingabedaten erzeugen sehr unterschiedliche Hashes.

  3. Der Hash hat stets eine feste Länge. Bei SHA256 sind dies 256 Bits.

  4. Die Holzhammermethode Trial-and-Error ist der einzige bekannte Weg, einen Input zu finden, der einen bestimmten Hash erzeugt.

02 11
Abbildung 11. Eine kryptografische Hashfunktion, SHA256, in Aktion. Die Eingabe “Hello!” gibt dir jedesmal denselben Hash, aber der leicht veränderte Input “Hello” ergibt einen völlig anderen Output.

Abbildung 11 illustriert die ersten drei Eigenschaften. Die vierte Eigenschaft einer kryptografischen Hashfunktion ist das, was sie kryptografisch macht, und das bedarf einer gewissen Erläuterung. Es gibt einige Varianten der vierten Eigenschaft, von denen alle für kryptografische Hashfunktionen wünschenswert sind (Abbildung 12):

Kollisionsresistenz

Du hast nur die vorliegende kryptografische Hashfunktion. Es ist schwer, zwei verschiedene Inputs zu finden, die denselben Hash ergeben.

Pre-Image Resistenz

Du hast die Hash Funktion und den Hash. Es ist schwierig, ein Pre-Image zu dem Hash zu finden.

Zweit-Pre-Image-Resistenz

Du hast eine Hashfunktion und ein Pre-Image (und damit auch den Hash des Pre-Images). Es ist schwer, ein weiteres Pre-Image zu diesem Hash zu finden.

02 12
Abbildung 12. Verschiedene wünschenswerte Eigenschaften kryptografischer Hashfunktionen. Für Kollisionsresistenz kann X beliebig sein, solange wie die beiden unterschiedlichen Inputs denselben Output X ergeben.

2.2.4. Illustration von “schwierig”

Der Term schwierig bedeutet in diesem Zusammenhang astronomisch schwierig. Es wäre albern, es überhaupt zu versuchen. Wir betrachten Zweit-Pre-Image-Resistenz als Beispiel dafür, was schwierig bedeutet, aber ein ähnliches Beispiel kann für jede der drei Varianten aufgestellt werden.

u02 03

Angenommen du willst einen Input für SHA256 finden, der zu demselben Hash führt wie der Input “Hello!”:

334d016f755cd6dc58c53a86e183882f8ec14f52fb05345887c8a5edd42c87b7

Du kannst ja nicht den Input “Hello!” einfach so geringfügig verändern, dass die Hashfunktion das nicht bemerkt. Sie wird es bemerken und der Output wird ein vollständig anderer Hash sein. Der einzige Weg, einen anderen Input als “Hello!” zu finden, der den Hash 334d016f…​d42c87b7 erzeugt, ist, verschiedene Inputs durchzuprobieren und immer wieder zu prüfen, ob der richtige Hash dabei herauskommt.

Probieren wir es mal mit Tabelle 3.

Tabelle 3. Einen Input mit demselben Hash wie “Hello!” zu finden, ist nahezu unmöglich.
Input Hash Erfolg?
 Hello1!
 82642dd9...2e366e64

 Hello2!
 493cb8b9...83ba14f8

 Hello3!
 90488e86...64530bae

 ...
 ...

Nö, nö, …, nö

 Hello9998!
 cf0bc6de...e6b0caa4

 Hello9999!
 df82680f...ef9bc235

 Hello10000!
 466a7662...ce77859c

cat

 dee6a5d3...db479561

 Meine gesamte Musiksammlung
 a5bcb2d9...9c143f7a

Wie gross ist 2256?

2256 ist etwa 1077, was etwa der Anzahl Atome im Universum entspricht. Ein Pre-Image zu einem SHA256-Hash zu finden ist, wie ein Atom im Universum auszusuchen und zu hoffen, dass es das richtige ist.

Wie du siehst, sind wir nicht sonderlich erfolgreich. Denk mal, wie lange ein Desktop Computer brauchen würde, um einen solchen Input zu finden. Er kann ungefähr 60 Millionen Hashes pro Sekunde berechnen, und die erwartete Anzahl Versuche, um eine Lösung zu finden, beträgt 2255. Das Ergebnis ist 2255 / (60 × 106) s ≈ 1068 s ≈ 3 × 1061 Jahre, oder etwa 30,000,000,000,​000,​000,​000,​000,​000,​000,​000,​000,​000,​000,​000,​000,​000,​000,​000,​000,​000 Jahre.

Ich glaube wir können aufhören, es zu versuchen, oder? Ich glaube nicht, dass es helfen würde, einen schnelleren Computer zu kaufen. Selbst wenn wir 1 Billion Computer hätten und sie alle gleichzeitig laufen würden, würde es noch 3 × 1049 Jahre dauern.

Pre-Image-Resistenz, Zweit-Pre-Image-Resistenz und Kollisionsresistenz sind in Bitcoin extrem wichtig. Der Grossteil von Bitcoins Sicherheit beruht auf diesen Eigenschaften.

2.2.5. Einige wohlbekannte Hashfunktionen

Doppel-SHA256

Wir benutzen in Bitcoin am häufigsten Doppel-SHA256:

u02 04

Tabelle 4 zeigt verschiedene kryptografische Hashfunktionen. Einige gelten als nicht kryptografisch sicher.

Tabelle 4. Ein paar kryptografische Hashfunktionen. Einige der älteren gelten als unsicher.
Name Bits Bisher sicher? In Bitcoin verwendet?

SHA256

256

Ja

Ja

SHA512

512

Ja

Ja, in manchen Wallets

RIPEMD160

160

Ja

Ja

SHA-1

160

Nein. Eine Kollision ist bekannt.

Nein

MD5

128

Nein. Kollisionen können einfach erzeugt werden. Der Algorithmus ist auch empfänglich für Pre-Image-Attacken, allerdings nicht für triviale.

Nein

Ganz allgemein, wenn eine einzige Kollision in einer kryptografischen Hashfunktion entdeckt wurde, werden die meisten Kryptografen diese Funktion als unsicher betrachten.

2.2.6. Zusammenfassung über kryptografische Hashes

Eine kryptografische Hashfunktion ist ein Computerprogramm, das beliebige Daten als Input nimmt und eine grosse Zahl berechnet–einen kryptografischen Hash–, der aus dem Input hervorgeht.

u02 06
u02 05

Es ist astronomisch schwierig, einen Input zu finden, der zu einem bestimmten Output führt. Deswegen nennen wir sie Einbahnfunktionen. Man muss immer wieder mit unterschiedlichen Inputs probieren.

Wir diskutieren wichtige Themen im ganzen Buch. Wenn du ein bestimmtes Thema gelernt hast, wie kryptografische Hashfunktionen, dann kannst du dieses Werkzeug für später in deine Werkzeugkiste legen. Dein erstes Werkzeug sind kryptografische Hashfunktionen, die hier durch einen Papierschredder dargestellt werden; der kryptografische Hash wird als ein Haufen Papierstreifen dargestellt.

u02 07
u02 08

Von nun an werden wir diese Werkzeug-Icons benutzen, um kryptografische Hashfunktionen und kryptografische Hashes darzustellen, mit wenigen Ausnahmen.

2.2.7. Übungen

Wärm dich auf
  1. Aus wie vielen Bits besteht der Output von SHA256?

  2. Aus wie vielen Bytes besteht der Output von SHA256?

  3. Was benötigt man, um den kryptografischen Hash des Textes “hash me” zu berechnen?

  4. Was sind die dezimalen und binären Darstellungen des hexadezimalen Datums 061a?

  5. Kannst du tatsächlich den Text “cat” so abändern, dass der geänderte Text denselben kryptografischen Hash erhält wie “cat”?

Grabe tiefer
  1. Die simplistische Hashfunktion aus Abschnitt 2.2.2, für dich nochmals wie folgt wiederholt, ist keine kryptografische Hashfunktion. Welche der vier Eigenschaften einer kryptografischen Hashfunktion fehlt ihr?

    u02 09

    Die vier Eigenschaften ebenfalls nochmal wiederholt:

    1. Gleiche Eingabedaten erzeugen den gleichen Hash.

    2. Leicht unterschiedliche Eingabedaten erzeugen sehr unterschiedliche Hashes.

    3. Der Hash hat stets eine feste Länge. Bei SHA256 sind dies 256 Bits.

    4. Die Holzhammermethode Trial-and-Error ist der einzige bekannte Weg, einen Input zu finden, der einen bestimmten Hash erzeugt.

  2. Gehen wir zurück zu dem Beispiel, wo du ein Katzenbild auf deiner Festplatte hattest und den kryptografischen Hash des Bildes auf ein Blatt Papier geschrieben hast. Angenommen, jemand wollte das Katzenbild auf deiner Festplatte verändern, ohne dass du es merkst. Welche Variante der vierten Eigenschaft ist wichtig, um den Angreifer am Erfolg zu hindern?

    u02 10

2.3. Digitale Signaturen

u02 11

In diesem Abschnitt untersuchen wir, wie man jemandem beweisen kann, dass man eine Zahlung genehmigt. Um das zu tun, benutzen wir digitale Signaturen. Eine digitale Signatur ist das digitale Gegenstück zu einer handschriftlichen Unterschrift. Der Unterschied besteht darin, dass die handschriftliche Signatur an eine Person gebunden ist, während eine digitale Signatur an eine Zufallszahl gebunden ist, die privater Schlüssel genannt wird. Eine digitale Signatur ist ungleich schwieriger zu fälschen als eine manuelle Unterschrift.

2.3.1. Typische Verwendung digitaler Signaturen

Angenommen, du willst dein Lieblings-Katzenbild per Email deinem Freund Fred schicken, vermutest aber, dass das Bild, auf bösartige oder anderweitige Weise, auf dem Weg dorthin verändert werden könnte. Wie könnten Fred und du sicherstellen, dass das Bild, das Fred erhält, genau das ist, das du weggeschickt hast?

02 13
Abbildung 13. Du schickst ein digital signiertes Katzenbild an Fred. Fred überprüft die Signatur, um sicherzustellen, dass er dasselbe Katzenbild bekommen hat wie das, das du signiert hast.

Du kannst in der Email eine digitale Signatur des Katzenbildes mitschicken. Fred kann dann diese digitale Signatur verifizieren, um sicherzustellen, dass das Bild authentisch ist. Dies geschieht in drei verschiedenen Phasen, wie in Abbildung 13 dargestellt.

Schritt 1 ist die Vorbereitung. Du erzeugst eine Zufallszahl: den privaten Schlüssel oder private Key. Diesen benutzt du, um digitale Signaturen zu erstellen. Dann erzeugst du einen öffentlichen Schlüssel oder public Key, der dazu verwendet wird, die digitale Signatur zu überprüfen, die der private Key erzeugt hat. Der public Key wird aus dem private Key berechnet. Du übergibst Fred den public Key persönlich, damit Fred sicher sein kann, dass es wirklich dein public Key ist.

Schritt 2 ist die Signatur. Du schreibst eine Email an Fred und hängst das Katzenbild an. Du benutzt ausserdem deinen private Key und das Katzenbild, um das Katzenbild digital zu signieren. Das Ergebnis ist eine digitale Signatur, die du der Email Nachricht beifügst. Danach sendest du die Email an Fred.

Schritt 3 ist die Verifikation. Fred bekommt deine Mail, aber er macht sich Sorgen um die Echtheit des Bildes, also möchte er die Signatur überprüfen, oder verifizieren. Er verwendet den public Key, den er in Schritt 1 von dir bekommen hatte, die digitale Signatur in der Mail, und das angehängte Katzenbild. Wenn die Signatur oder das Katzenbild seit Erstellung der Signatur verändert wurde, dann scheitert die Überprüfung.

Es ist Zeit, auf unser Cookie Token Spreadsheet zurückzukommen. Die Firma wächst, und Lisa fällt es schwer, sich jeden Mitarbeiter zu merken. Ausserdem merkt sie, dass nicht jeder ehrlich ist. Zum Beispiel behauptet Mallory, Anne zu sein und Lisa dazu zu bringen, Cookie Tokens von Anne an das Café zu schicken, anstatt von Mallory. Lisa kommt auf die Idee, von jedem zu verlangen, alle Cookie Token Transfers digital zu signieren, indem sie eine Nachricht schreiben und dessen Signatur mit der Email mitschicken, wie in Abbildung 14 dargestellt.

02 14
Abbildung 14. John muss seine Zahlungsanforderung digital signieren und die Signatur in der Email mitschicken.

Angenommen, John ist der neue Mitarbeiter im Büro. Die Firma hat ihm als Willkommensgeschenk einige Cookie Tokens gegeben, als er anfing. Nun möchte John im Café einen Keks für 10 CT kaufen. Er muss den Cookie Token Transfer digital signieren. Abbildung 15 zeigt, was er dafür tun muss.

02 15
Abbildung 15. Der digitale Signiervorgang. 1. John erzeugt ein Schlüsselpaar und gibt Lisa den public Key. 2. John signiert eine Nachricht mit dem private Key. 3. Lisa überprüft, dass die Nachricht mit dem private Key signiert wurde, der zu dem public Key gehört, den sie von John bekommen hatte.

Genau wie mit der Mail von Fred im vorigen Abschnitt besteht auch dieser Vorgang aus drei Phasen (vergleiche mit den Schritten in Abbildung 13, um die Ähnlichkeiten zu erkennen):

Wiederholte Nutzung von Schlüsselpaaren

Ein Schlüsselpaar wird einmal erzeugt. Derselbe private Key kann mehrmals benutzt werden, um Dinge digital zu signieren.

  1. John bereitet sich vor, indem er ein Schlüsselpaar erzeugt. John verwahrt den private Key sicher und reicht Lisa den public Key. Dies ist ein einmaliger Vorgang zur Vorbereitung.

  2. John möchte einen Keks. Er schreibt eine Nachricht und signiert sie mit seinem private Key. Er schickt die Nachricht und die digitale Signatur in einer Mail an Lisa.

  3. Lisa verifiziert die Signatur der Nachricht mit Hilfe von Johns public Key und aktualisiert das Spreadsheet.

2.3.3. Vorbereitung: John generiert ein Schlüsselpaar.

u02 12

Die Signier- und Prüfvorgänge basieren auf einem Schlüsselpaar. John benutzt einen private Key, um die Zahlung zu signieren, und Lisa braucht Johns public Key, um die Signatur zu verifizieren. John muss das vorbereiten, indem er ein Schlüsselpaar erstellt. Er tut dies, indem er zunächst einen private Key erzeugt und dann daraus dessen public Key berechnet, wie in Abbildung 16 zu sehen ist.

02 16
Abbildung 16. John erzeugt ein Schlüsselpaar. Der private Key is eine riesige Zufallszahl, und der public Key wird von dieser Zufallszahl abgeleitet. John speichert den private Key auf seiner Festplatte und gibt Lisa den public Key.

John will einen Zufallszahlengenerator benutzen, um eine riesige, 256 Bit lange Zahl zu erzeugen. Ein Zufallszahlengenerator ist Teil praktisch jedes Betriebssystems. Die Zufallszahl ist Johns private Key. Der private Key wird dann mittels einer Ableitungsfunktion zum public Key umgeformt.

u02 13

Die Public Key Ableitung ist eine Einbahnstrassenfunktion, ebenso wie kryptografische Hashfunktionen. Man kann den private Key nicht aus dem public Key herleiten. Die Sicherheit von digitalen Signaturen hängt wesentlich von dieser Eigenschaft ab. Auch erzeugen mehrere Durchläufe des private Key durch die Ableitungsfunktion stets denselben public Key.

Der public Key ist 33 Bytes (66 Hexziffern) lang. Das ist länger als der private Key, der 32 Bytes (64 Hexziffern) lang ist. Der Grund für dieses zusätzliche Byte und wie die public Key Ableitung funktioniert ist ein schwieriges Thema, das in [ch04] behandelt wird. Glücklicherweise muss man kein Kryptografie-Experte sein, um zu verstehen, wie digitale Signaturen aus Benutzersicht funktionieren.

Zwei Arten, ein Schlüsselpaar zu verwenden

Schlüssel werden zum Ver- und Entschlüsseln von Daten benutzt. Mit Verschlüsselung macht man Daten für alle unlesbar ausser für diejenigen, die den richtigen Entschlüsselungs-Key besitzen.

Man kann sich private und public Keys als Paare vorstellen, weil sie eine starke Beziehung zueinander haben: der public Key kann benutzt werden um Nachrichten so zu verschlüsseln, dass sie nur mit dem private Key entschlüsselt werden können, und mit dem private Key kann man Nachrichten so verschlüsseln, dass sie nur mit dem public Key entschlüsselt werden können (Abbildung 17).

02 17
Abbildung 17. Ver- und Entschlüsselung mit public und private Keys. Links: Verschlüsseln mit dem public Key und Entschlüsseln mit dem private Key. Rechts: Verschlüsseln mit dem private Key und Entschlüsseln mit dem public Key.

Wir benutzen die rechte Seite von Abbildung 17, um digitale Signaturen zu erstellen. Die linke Seite werden wir im gesamten Buch nicht benutzen.

Gemäss der linken Seite von Abbildung 17 würde nur John die verschlüsselte Nachricht lesen können, weil nur er Zugriff auf den private Key hat. Bitcoin benutzt diese Eigenschaft von public und private Key überhaupt nicht. Es wird verwendet, wenn zwei Parteien abhörsicher miteinander kommunizieren wollen, so wie du es beim Online Banking tust. Wenn man das kleine Vorhängeschloss in der Adresszeile des Webbrowsers sieht, dann weiss man, dass der auf der linken Seite der Grafik gezeigte Prozess benutzt wird, um die Kommunikation abhörsicher zu machen.

Folgt man der rechten Seite der Grafik, so kann Lisa die Nachricht entschlüsseln, weil sie den public Key zu John’s private Key besitzt. Dieses Feature wird für digitale Signaturen benutzt. Den private Key zum Verschlüsseln geheimer Nachrichten zu benutzen, ist keine gute Idee, denn der public Key ist, naja, öffentlich. Jeder mit dem public Key kann die Nachricht entschlüsseln. Digitale Signaturen andererseits benötigen keine geheimen Nachrichten. Wir gehen später tiefer auf digitale Signaturen ein. Aber zunächst eine kurze Zusammenfassung und Orientierung.

2.3.4. Zusammenfassung zu Schlüsselpaaren

Fassen wir zusammen, was wir über public und private Keys gelernt haben. Man erzeugt ein Schlüsselpaar, indem man zunächst einen private Key generiert. Der private Key ist eine riesige, geheime Zufallszahl. Der public Key wird dann aus dem private Key berechnet.

u02 14

Man kann den private Key zum Verschlüsseln einer Nachricht benutzen, die nur mit dem public Key entschlüsselt werden kann.

u02 15

Die Ver- und Entschlüsselung in diesem Bild sind die Grundlage für digitale Signaturen. Dieser Prozess ist ungeeignet zum Versenden geheimer Nachrichten, da der public Key normalerweise allgemein bekannt ist.

Der umgekehrte Prozess ist ebenfalls häufig, wobei der public Key zum Verschlüsseln und der private Key zum Entschlüsseln verwendet wird. Dieser Prozess wird zum Versenden geheimer Nachrichten verwendet. Bitcoin benutzt ihn nicht.

2.3.5. Wo waren wir?

Digitale Signaturen wurden in [ch01] kurz erwähnt, wo Alice ihre Bitcoin Transaktion von 1 BTC an Bob mit ihrem private Key signiert hatte (Abbildung 18).

02 18
Abbildung 18. Digitale Signaturen in Bitcoin

John hat ein Schlüsselpaar erzeugt und ist dabei, seine Zahlung an das Café mit seinem private Key digital zu signieren, damit Lisa überprüfen kann, dass die Zahlung tatsächlich von John beauftragt wird. Lisa verifiziert dies anhand von John’s public Key.

2.3.6. John signiert seine Zahlung

u02 17

Schauen wir uns an, wie das Signieren tatsächlich vonstatten geht (Abbildung 19).

Die Nachricht, die John signieren will, lautet: "Lisa, please move 10CT to Café. /John". Die Signaturfunktion hasht diese Nachricht mittels SHA256, was als Output eine 256 Bit lange Zahl ergibt. Dieser Hash wird dann mit John’s private Key verschlüsselt. Das Ergebnis ist eine digitale Signatur, die so aussieht:

INxAs7oFDr80ywy4bt5uYPIv/09fJMW+04U3sJUfgV39
A2k8BKzoFRHBXm8AJeQwnroNb7qagg9QMj7Vp2wcl+c=
02 19
Abbildung 19. John signiert digital den Transfer von 10 CT an das Café. Die Nachricht an Lisa wird zunächst gehasht und anschliessend mit John’s private Key verschlüsselt. Die Mail an Lisa enthält sowohl die Nachricht im Klartext als auch die Signatur.
Signaturen in Bitcoin

Bitcoin benutzt diese Art von Signatur heute für die meisten Zahlungen, aber dies ist nicht der einzige Weg, Zahlungen zu authentisieren.

Die Signatur ist ein verschlüsselter Hash der Nachricht. Hätte John einen anderen private Key zum Signieren benutzt, oder eine etwas andere Nachricht, so hätte die Signatur vollkommen anders ausgesehen.

Zum Beispiel würde die Input Nachricht “Lisa, please move 10CT to Mallory. /John” folgende Signatur erzeugen:

ILDtL+AVMmOrcrvCRwnsJUJUtzedNkSoLb7OLRoH2iaD
G1f2WX1dAOTYkszR1z0TfTVIVwdAlD0W7B2hBTAzFkk=

Das ähnelt nicht entfernt der vorigen Signatur. Das ist gut für John, denn er weiss, dass seine Signatur nicht für andere Nachrichten benutzt werden kann als seine eigene.

John hat eine Mail an Lisa erstellt. Diese Mail enthält eine Nachricht und die Signatur dieser Nachricht. John beendet den Vorgang mit dem Senden der Mail an Lisa.

2.3.7. Lisa verifiziert die Signatur

u02 18

Lisa schaut in die Mail und sieht, dass sie angeblich von John ist, also sucht sie in der Liste ihrer public Keys nach John (Abbildung 20).

02 20
Abbildung 20. Lisa benutzt die Nachricht (A), die Signatur (B), und Johns spezifischen public Key (C), um zu verifizieren, dass die nachricht mit Johns private Key signiert wurde.

Lisa versucht in dieser Grafik festzustellen, dass der Cookie Token Transfer mit dem private Key signiert wurde, mit dem es vorgibt, signiert worden zu sein. Die Nachricht sagt sie komme von John. Sie hatte Johns public Key neulich erhalten und ihn in ihre Tabelle der public Keys eingetragen. Die Dinge, die sie zur Verfügung hat, sind

  1. Die Nachricht “Lisa, please move 10CT to Café. /John” B. Die Signatur INxAs7oFDr8… C. John’s public Key, den sie gerade in der Tabelle nachgeschaut hat.

Eine Signatur ist ein verschlüsselter Hash
u02 19

John hat den Hash der Nachricht mit seinem private Key verschlüsselt. Dieser verschlüsselte Hash ist die Signatur. Wenn Lisa die Signatur (B) mit Johns public Key (C) entschlüsselt, dann sollte das Ergebnis ein Hash sein, der mit dem Hash der Nachricht (A) in der Mail identisch ist.

Lisa nimmt die Signatur (B) und entschlüsselt sie mit dem public Key (C), den sie in ihrer Tabelle mit public Key nachgeschaut hat. Die Entschlüsselung ergibt eine grosse Zahl. Wenn diese Zahl mit dem Hash der Nachricht (A) übereinstimmt, so beweist dies, dass Johns private Key zum Signieren der Nachricht benutzt worden war. Lisa nimmt die Nachricht (A), genauso wie sie da steht, und hasht sie ebenso wie John das getan hat, als er die Signatur erstellte. Dieser Nachrichten-Hash wird dann mit der entschlüsselten Signatur verglichen. Der Nachrichten-Hash und die entschlüsselte Signatur sind identisch, also ist die Signatur gültig.

Wohlgemerkt funktioniert dieser Prozess nur, wenn John und Lisa dasselbe Signaturverfahren benutzen. Darauf müssen sie sich vorher geeinigt haben, aber es ist normalerweise standardisiert. In Bitcoin weiss jeder, welches Signaturverfahren zu verwenden ist.

Lisa kann jetzt sicher sein, dass niemand sie betrügen will. Sie aktualisiert das Spreadsheet mit Johns Transfer wie in Abbildung 21 gezeigt.

02 21
Abbildung 21. Lisa hat eine Zeile für Johns Cookie Token Transfer hinzugefügt, nachdem sie die Signatur von Johns Nachricht geprüft hat.

2.3.8. Private Key Sicherheit

John besitzt die Kontrolle über seine Cookie Token, weil er den private Key besitzt. Niemand ausser John kann Johns Cookie Token benutzen, weil er der einzige mit Zugang zu seinem private Key ist. Wenn sein private Key gestohlen wird, kann er alle seine Cookie Token verlieren.

Am Morgen nach Johns Transfer kommt er ins Büro, nimmt seinen Laptop vom Tisch und geht direkt zum Café, um sich zwei Frühstückskekse zu holen. Er öffnet seinen Laptop und schreibt eine Nachricht an Lisa:

Good morning Lisa! Please move 20 CT to Café. /John
Signature:
H1CdE34cRuJDsHo5VnpvKqllC5JrMJ1jWcUjL2VjPbsj
X6pi/up07q/gWxStb1biGU2fjcKpT4DIxlNd2da9x0o=

Er sendet diese Mail mit der Nachricht und der Signatur an Lisa. Aber das Café gibt ihm keine Kekse. Der Mensch hinter der Theke sagt, er hätte noch keine einkommende Zahlung über 20 Cookie Token gesehen. Lisa verifiziert und führt Transfers normalerweise schnell aus.

John öffnet das Spreadsheet—vergiss nicht, dass er read-only Zugriff besitzt, und sucht “John.” Abbildung 22 zeigt, was er sieht.

02 22
Abbildung 22. Jemand hat Geld von John gestohlen. Wer ist Melissa, und wie war das möglich? John hat keinen solchen Transfer signiert.

John geht in Lisas Büro und bittet um eine Erklärung. Sie antwortet, dass sie eine Nachricht bekommen hatte, die mit Johns private Key signiert worden war, und in der sie gebeten wurde, Geld an eine neue Mitarbeiterin namens Melissa zu schicken. Natürlich gibt es gar keine Melissa im Büro, obwohl mehrere neue Mitarbeiter bei der Firma angefangen haben. Lisa interessieren Namen nicht mehr, nur noch public Key und Signaturen. Aber sie braucht den Namen noch, um in der Tabelle nach dem richtigen public Key zu schauen.

Die Erklärung für all das ist, dass Mallory

  1. Es geschafft hat, Johns private Key zu kopieren. Johns Laptop hatte die ganze Nacht auf seinem Tisch gestanden. Jeder hätte die Festplatte aus dem Laptop nehmen können, um sie nach dem private Key zu durchsuchen.

  2. Erstellt ein neues Schlüsselpaar und sendet den neuen public Key mit der folgenden Nachricht an Lisa:

    Hi Lisa. My name is Melissa, and I’m new here.
    My public key is
    02c5d2dd24ad71f89bfd99b9c2132f796fa746596a06f5a33c53c9d762e37d9008
  3. Eine betrügerische Nachricht mit dem gestohlenen privaten Schlüssel wie folgt an Lisa geschickt hat:

    Hi Lisa, please move 90 CT to Melissa. Thanks, John
    Signature:
    IPSq8z0IyCVZNZNMIgrOz5CNRRtRO+A8Tc3j9og4pWbA
    H/zT22dQEhSaFSwOXNp0lOyE34d1+4e30R86qzEbJIw=

Lisa hat den Transfer in Schritt 3 verifiziert, festgestellt, dass er gültig ist, und ihn dann ausgeführt. John bittet Lisa, den–ihm zufolge– betrügerischen Transfer rückgängig zu machen, aber Lisa weigert sich. Sie hält den Transfer für einwandfrei. Wenn John jemanden an seinen private Key heranlässt, dann ist das sein Problem, nicht Lisas. Das ist einer der Gründe, warum Lisa in der Firma als so vertrauenswürdig gilt–sie hält ihre Versprechen.

John erzeugt ein neues Schlüsselpaar und bittet Lisa, den neuen public Key unter dem Namen John2 abzulegen. Wie kann John seinen neuen private Key sichern und ihn dennoch immer bereithalten, wenn er einen Keks möchte? John ist sich ziemlich sicher, dass er nicht mehr als 1.000 Cookie Token auf diesem Key haben wird.

Du bist verantwortlich

Du hast volle Verantwortung für die Sicherheit deiner private Keys

Die Sicherheit des Spreadsheet hat sich gewandelt von einem System, in dem Lisa von jedem das Gesicht kennt, zu einem, in dem sie von jedem den public Key kennt. In gewisser Weise steht es um die Sicherheit jetzt schlechter, denn es ist einfacher für Mallory, Johns private Key zu stehlen als Lisa dazu zu bringen, sie für John zu halten. Es hängt davon ab, wie sicher John seinen private Key verwahrt. Wichtig ist, dass die Sicherheit für Johns private Key vollständig ihm selbst überlassen ist. Niemand wird seinen private Key wiederherstellen können, wenn er ihn verliert. Und Lisa macht bestimmt keine “betrügerischen” Transfers rückgängig, weil John nachlässig mit seiner Sicherheit umgegangen ist.

Wenn John seinen private Key im Klartext in einem gemeinsam benutzten Folder auf dem Firmen-Intranet ablegt, kann diesen jeder kopieren und zum Stehlen seiner Cookie Tokens benutzen. Aber wenn John den private Key von einem starken Passwort geschützt in einer verschlüsselten Datei auf seinem eigenen Laptop ablegt, dann ist es viel schwieriger, den Schlüssel zu ergaunern. Ein Angreifer müsste

  1. Zugang zu Johns Festplatte haben

  2. Johns Passwort kennen

Wenn John nie mehr als 50 CT auf seinem private Key hat, dann mag er sich nicht viele Gedanken um die Sicherheit machen. Aber das Café, das etwa 10.000 CT pro Tag verwaltet, sollte besorgt sein. John und das Café brauchen wahrscheinlich unterschiedliche Strategien, um ihre private Keys zu sichern.

Es gibt einen Tradeoff zwischen Sicherheit und Bequemlichkeit. Du kannst zum Beispiel deinen private Key verschlüsselt auf einem Laptop in einem Bankschliessfach lagern. Wenn du einen Keks kaufen willst, musst du zur Bank gehen, den Laptop aus dem Schliessfach nehmen, den private Key entschlüsseln und eine digitale Nachricht an Lisa verschlüsseln, die du auf einem USB-Stick speicherst. Dann musst du den Laptop wieder in das Schliessfach einschliessen, den USB-Stick ins Büro mitnehmen und die Mail an Lisa schicken. Der private Key verlässt dabei nie den Laptop im Schliessfach. Sehr sicher, und sehr unbequem.

Auf der anderen Seite kannst du den private Key auch im Klartext auf dem Telefon speichern. Dann hast du den Key immer bereit und kannst in Sekunden eine Message signieren, wenn dich die Lust auf einen Keks packt. Sehr bequem, und sehr unsicher.

02 23
Abbildung 23. Sicherheitsüberlegungen gegen Angreifer. Die sichereren Optionen sind auch die unbequemeren.

Einige der Tradeoffs, wie in Abbildung 23 dargestellt, sind die Folgenden:

Online vs. offline

Online heisst, der private Key ist auf einem Gerät mit Netzwerkanschluss gespeichert, zum Beispiel deinem Telefon oder Laptop. Offline bedeutet, der private Key liegt auf einem Blatt Papier oder einem Computer ohne Netzwerkverbindung. Online Speicherung ist riskant, weil Fernangriffe auf die Sicherheit oder Schadsoftware auf dem Computer, wie Viren, den private Key jemandem schicken könnten, ohne dass du es bemerkst. Wenn das Gerät offline ist, kann niemand ohne physischen Zugriff auf das Gerät an den Key herankommen.

Klartext vs. verschlüsselt

Wenn der private Key im Klartext in einer Datei auf deiner Festplatte liegt, kann jeder mit Zugriff auf deinen Computer, entweder remote oder physisch, den private Key kopieren. Das schliesst auch Computerviren ein, von denen dein Computer befallen sein könnte. Du kannst viele dieser Angriffe verhindern, indem du den private Key mit einem Passwort verschlüsselst, das nur dir bekannt ist. Ein Angreifer müsste dann sowohl auf deine Festplatte als auch auf dein geheimes Passwort Zugriff haben, um an den private Key zu kommen.

Ganzer Key vs. geteilter Key

Leute speichern normalerweise den gesamten private Key auf einem einzigen Computer. Das ist bequem–man braucht nur einen Computer, um seine Cookie Tokens auszugeben. Ein Angreifer muss Zugriff auf deine Festplatte bekommen, um den private Key zu stehlen. Aber wenn der private Key in drei Teile aufgeteilt ist (Vorsicht–hierfür gibt es gute und weniger gute Methoden), und du die drei Teile separat auf drei verschiedenen Computern ablegst, dann muss ein Angreifer Zugriff auf drei Festplatten auf drei Computern erlangen. Das ist viel schwieriger, weil sie wissen müssen, welche Computer sie angreifen müssen, und sie dann auch noch alle erfolgreich angreifen. Mit diesem Setup eine Zahlung zu leisten ist wirklich sehr umständlich, aber sehr sicher.

Du kannst irgendeine Kombination dieser Methoden benutzen, um deine Keys zu speichern. Aber als Daumenregel gilt, je grösser die Sicherheit gegenüber Angreifern, desto grösser das Risiko, die Keys versehentlich zu verlieren. Wenn du zum Beispiel den private Key verschlüsselt auf deiner Festplatte speicherst, riskiert du dessen Verlust, wenn die Festplatte kaputtgeht oder du das Passwort vergisst. In dieser Hinsicht ist es umso unsicherer, je sicherer es ist.

2.4. Zusammenfassung

Lisa hat das Problem mit Leuten, die sich bei Zahlungen für jemanden anders ausgeben, gelöst. Sie verlangt von allen Teilnehmern, die Cookie Token Transfers digital zu signieren. Jeder Spreadsheet Benutzer braucht einen private Key und einen public Key. Von jetzt an muss eine Zahlung per Mail an Lisa geschickt werden, und die Nachricht muss digital signiert sein mit dem private Key des Absenders. Lisa kann dann die Signatur überprüfen, um sicherzugehen, dass sie nicht hintergangen wird. Das Wesentliche ist, dass, solange John den private Key für sich behält, niemand in der Lage ist, sein Geld auszugeben.

u02 20

Wir müssen unserer Tabelle von Konzepten “Email an Lisa” hinzufügen (Tabelle 5).

Tabelle 5. “Email an Lisa” als neues Schlüsselkonzept
Cookie Tokens Bitcoin Behandelt in

1 cookie token

1 bitcoin

Kapitel 2

Das Spreadsheet

Die Blockchain

[ch06]

Email an Lisa

Eine Transaktion

[ch05]

Eine Zeile im Spreadsheet

Eine Transaktion

[ch05]

Lisa

Ein Miner

[ch07]

Die Mail an Lisa wird in [ch05] durch Transaktionen ersetzt. Transaktionen ersetzen sowohl die Mail an Lisa als auch die Zeile im Spreadsheet. Es ist Zeit, Version 2.0 des Cookie Token Spreadsheets freizugeben (Tabelle 6).

Tabelle 6. Release notes, Cookie Tokens 2.0
Version Feature How

new2.0

Secure payments

Digital signatures solve the problem with imposters.

1.0

Einfaches Bezahlsystem

Vertraut auf Lisas Integrität und ihre Kenntnis aller Mitarbeiter

Begrenzte Geldmenge

Lisa wird täglich mit 7,200 neuen CT belohnt; halbiert sich alle vier Jahre

Noch immer vertrauen alle Lisa dahingehend, dass sie das Spreadsheet nur ändert, wenn sie digital signierte Cookie Token Transfers ausführt. Wenn Lisa wollte, könnte sie jedermanns Cookie Token stehlen, indem sie einfach Transfers an das Spreadsheet anhängt. Aber das würde sie doch nicht tun–oder?

u02 21

Du hast jetzt eine Menge neue Werkzeuge, die du zur späteren Verwendung in deinen Werkzeugkasten legen kannst: Schlüsselpaare generieren, digitales Signieren, die Signatur, und die Verifikation.

u02 22

2.5. Übungen

2.5.1. Wärm dich auf

  1. Lisa bekommt derzeit 7.200 CT pro Tag für ihre Arbeit. Warum steigert sich die Tokenmenge dann nicht im Laufe der Zeit ins Unendliche? Warum haben wir nicht 7.200 x 10.000 = 72 Millionen CT nach 10.000 Tagen?

  2. Wie können Kollegen feststellen, ob Lisa sich selbst zu viele oder zu häufig Cookie Tokens zuschanzt?

  3. Wie wird der private Key eines Schlüsselpaares erzeugt?

  4. Welcher Key wird benutzt, um eine Nachricht digital zu signieren?

  5. Der Signiervorgang hasht die zu signierende Nachricht. Weshalb?

  6. Was müsste Mallory tun, um Cookie Tokens von John zu stehlen?

2.5.2. Grabe tiefer

  1. Angenommen du hast einen private Key und hast den public Key deinem Freund Fred gegeben. Schlage vor, wie Fred dir eine geheime Nachricht schicken kann, die nur du verstehen kannst.

  2. Angenommen du (für dieses Beispiel heisst du Laura) und Fred haben immer noch die Schlüssel vom vorigen Beispiel. Jetzt möchtest du eine Flaschenpost an Fred schicken, auf der steht

    Hi Fred! Can we meet at Tiffany’s at sunset tomorrow? /Laura

    Erkläre, wie du die Nachricht signieren würdest, damit Fred sicher sein kann, dass die Nachricht wirklich von dir stammt. Erläutere, welche Schritte du und Fred bei diesem Vorgang unternehmen müsstet.

2.6. Zusammenfassung

  • Bitcoins werden als Vergütung für Nodes erzeugt, die die Blockchain sichern.

  • Die Belohnung halbiert sich alle vier Jahre, um die Geldmenge zu begrenzen.

  • Man kann kryptografische Hashfunktionen benutzen, um Änderungen an einer Datei oder Nachricht festzustellen.

  • Man kann kein Pre-Image eines kryptografischen Hashes erzeugen. Das Pre-Image ist der Input mit einem gewissen, bekannten Output.

  • Digitale Signaturen sind nützlich, um die Authentizität einer Zahlung nachzuweisen. Nur der rechtmässige Besitzer der bitcoins kann sie ausgeben.

  • Jemand, der eine digitale Signatur verifiziert, braucht nicht zu wissen, wer signiert hat. Er muss nur wissen, dass die Signatur mit dem private Key signiert wurde, mit dem die Nachricht behauptet, signiert worden zu sein.

  • Um bitcoin oder Cookie Tokens zu empfangen, braucht man einen public Key. Zunächst erzeugt man einen private Key für sich selbst, im Geheimen. Danach leitet man von diesem private Key den public Key ab.

  • Es gibt diverse Strategien um private Keys zu speichern, von unverschlüsselt auf Ihrem Mobiltelefon bis hin zur Aufteilung und Verschlüsselung auf mehrere Offline-Geräte.

  • Als Faustregel gilt, je besser der Schlüssel gegen Diebstahl gesichert ist, desto einfacher ist es, den Schlüssel versehentlich zu verlieren und umgekehrt.