1
00:00:00,000 --> 00:00:13,890
*33C3-Vorspannmusik*

2
00:00:13,890 --> 00:00:20,810
Herald: Gut, dann machen wir
weiter mit dem nächsten Vortrag.

3
00:00:20,810 --> 00:00:24,509
Der ist von vimja, der ist
Informatikstudent aus Bern in der Schweiz,

4
00:00:24,509 --> 00:00:28,740
und er arbeitete bzw. er
beschäftigte sich mit Bitcoin

5
00:00:28,740 --> 00:00:32,890
und Ethereum, und schrieb seine
Bachelorarbeit über die Suche

6
00:00:32,890 --> 00:00:38,210
nach Informationen in der Bitcoin-
Blockchain. Und da macht es total Sinn,

7
00:00:38,210 --> 00:00:43,120
dass der uns jetzt eine Einführung
zu Blockchains präsentieren wird.

8
00:00:43,120 --> 00:00:45,580
Ein großer Applaus für vimja!

9
00:00:45,580 --> 00:00:50,030
*Applaus mit Pfeifen und Jubel*
Das ist deine Bühne!

10
00:00:50,030 --> 00:00:56,519
*weiterhin Applaus*

11
00:00:56,519 --> 00:00:58,920
vimja: Toll, das ist jetzt
gerade kaputtgegangen.

12
00:00:58,920 --> 00:01:05,460
*Gelächter*

13
00:01:05,460 --> 00:01:08,000
So ist es besser.

14
00:01:08,000 --> 00:01:13,230
*Applaus*
Danke.

15
00:01:13,230 --> 00:01:19,980
Genau, das geht jetzt
natürlich auch nicht.

16
00:01:19,980 --> 00:01:22,240
Mache ich es halt von Hand.

17
00:01:22,240 --> 00:01:27,740
Ist vermutlich, weil ihr alle das Wi-Fi
braucht, geht das 2,4-GHz-Band nicht mehr.

18
00:01:27,740 --> 00:01:31,570
Ja das hat er euch ja alles
schon gesagt, der Herald.

19
00:01:31,570 --> 00:01:34,680
In dieser Zeit, in der ich mich
mit Blockchains befasst habe,

20
00:01:34,680 --> 00:01:39,270
durfte ich natürlich sehr viele
sehr interessante Dinge lernen,

21
00:01:39,270 --> 00:01:41,830
und ich möchte jetzt heute abend
einen Teil dieses Wissens

22
00:01:41,830 --> 00:01:48,810
an euch weitergeben. Genau.

23
00:01:48,810 --> 00:01:52,710
Das Ganze ist natürlich ein sehr komplexes
Thema, das viele komplizierte Dinge

24
00:01:52,710 --> 00:01:56,120
enthält, und deshalb fangen wir jetzt mit
etwas sehr einfachem an, was wir alles

25
00:01:56,120 --> 00:01:59,850
kennen. Und zwar herkömmliche
Besitzsysteme – also Systeme,

26
00:01:59,850 --> 00:02:04,100
die ausdrücken wem etwas gehört. Und,
eigentlich, mit der Erkenntnis, dass man

27
00:02:04,100 --> 00:02:11,190
all diese Besitzsysteme als
Zustandsübergangssysteme darstellen kann.

28
00:02:11,190 --> 00:02:16,019
Das gilt sowohl für Finanzsysteme,
die wir haben um Geld zu verwalten,

29
00:02:16,019 --> 00:02:20,090
als auch etwa für Grundstücke, also
Systeme mit denen wir verwalten,

30
00:02:20,090 --> 00:02:23,490
wem ein Grundstück gehört.

31
00:02:23,490 --> 00:02:27,520
Das Mapping funktioniert dann in etwa
so, dass wir sagen, der Zustand ist

32
00:02:27,520 --> 00:02:33,510
die Sammlung der Informationen wem
was gehört. Und jedes Übertragen

33
00:02:33,510 --> 00:02:37,720
eines Besitzes ist eine Transition,
die zu einem neuen Zustand führt.

34
00:02:37,720 --> 00:02:41,760
Also am Beispiel eines finanziellen
Systems sagen wir, der Zustand ist

35
00:02:41,760 --> 00:02:45,879
die Sammlung aller Konten, die es gibt.
Das drückt für jede Person aus,

36
00:02:45,879 --> 00:02:51,230
wieviel Geld ihr gehört. Und ein Übergang
ist, wenn jemand eine Transaktion macht,

37
00:02:51,230 --> 00:02:54,160
also Geld überweist, von einem Konto
zu einem anderen, dann führt das

38
00:02:54,160 --> 00:02:58,440
zu einem neuen Zustand.
So, das sehen wir hier abgebildet

39
00:02:58,440 --> 00:03:02,280
mit Grundstücken. Wir sehen hier, der
Zustand, der enthält diese Information,

40
00:03:02,280 --> 00:03:06,760
wem die Grundstücke gehören.
Und dann verkauft der Bob

41
00:03:06,760 --> 00:03:10,890
sein Grundstück Nr. 42 an Alice und
das führt zu einem neuen Zustand.

42
00:03:10,890 --> 00:03:15,660
Ich habe da den Unterschied markiert,
damit der eindeutig sichtbar ist.

43
00:03:15,660 --> 00:03:20,410
Nun, in all diesen Systemen ist es sehr
wichtig, dass sich alle Teilnehmer des

44
00:03:20,410 --> 00:03:26,150
Systems auf einen Zustand einigen können.
Dass sie sich einig sind, wem was gehört.

45
00:03:26,150 --> 00:03:30,050
Denn wenn sie das nicht können, sind
Angriffe auf das System möglich,

46
00:03:30,050 --> 00:03:32,950
insbesondere der sogenannte
Double-Spend-Angriff,

47
00:03:32,950 --> 00:03:37,840
der in der Blockchain-Welt bekannt und
gefürchtet ist. Und was bedeutet das?

48
00:03:37,840 --> 00:03:41,440
Das ist ganz einfach, wenn jemand etwas
zweimal ausgibt. Bei Geld ist das ein

49
00:03:41,440 --> 00:03:45,310
wenig abstrakt (also wie gibt man zweimal
dasselbe Geld aus), aber bei Grundstücken

50
00:03:45,310 --> 00:03:48,990
ist das ganz einfach. Stellen wir uns vor,
jemand verkauft dasselbe Grundstück

51
00:03:48,990 --> 00:03:54,880
zweimal. Das ist natürlich kriminell
und darf nicht vorkommen.

52
00:03:54,880 --> 00:03:57,850
Schauen wir uns jetzt mal an wie
das funktioniert. Stellen wir uns vor,

53
00:03:57,850 --> 00:04:01,940
Malroy hat ein schönes Grundstück,
das Grundstück Nr. 5. Und sowohl Alice

54
00:04:01,940 --> 00:04:05,700
als auch Bob möchten gerne das
Grundstück kaufen. Und Malroy

55
00:04:05,700 --> 00:04:10,020
wird jetzt versuchen, das an beide zu
verkaufen. Also trifft er sich mit Alice.

56
00:04:10,020 --> 00:04:13,761
Das ist also jetzt der aktuelle Zustand.
Wir haben gesehen, das Grundstück Nr. 5

57
00:04:13,761 --> 00:04:20,430
gehört hier dem Malroy. Der trifft sich
mit Alice. Und er verkauft es an Alice.

58
00:04:20,430 --> 00:04:24,550
Er überweist ihr das Grundstück. Wir sehen
diese Transition – überweist das Grundstück

59
00:04:24,550 --> 00:04:29,129
von Malroy an Alice. Und im neuen Zustand
gehört es jetzt der Alice. So, der Bob,

60
00:04:29,129 --> 00:04:31,990
der hat davon nichts mitgekriegt.
Irgendwie – Bob und Alice wissen

61
00:04:31,990 --> 00:04:36,300
immer noch nicht recht wie man sicher
miteinander kommuniziert. Und deshalb

62
00:04:36,300 --> 00:04:39,199
weiß der Bob jetzt nichts davon, dass
die Alice das Grundstück gekauft hat.

63
00:04:39,199 --> 00:04:43,680
Er denkt, das Grundstück gehört immer noch
Malroy. Also trifft er sich mit Malroy.

64
00:04:43,680 --> 00:04:47,939
Und auch er einigt sich mit Malroy auf
einen Preis. Und Malroy tut jetzt so,

65
00:04:47,939 --> 00:04:52,710
als würde er den Besitz des
Grundstücks an Bob übertragen.

66
00:04:52,710 --> 00:04:56,460
Und für Bob sieht die Welt jetzt so
aus, d.h. Bob ist überzeugt, das ist

67
00:04:56,460 --> 00:05:00,339
der korrekte Zustand des Systems.
Da haben wir natürlich ein Problem,

68
00:05:00,339 --> 00:05:03,290
weil Bob und Alice, die sind sich
jetzt gar nicht einig darüber,

69
00:05:03,290 --> 00:05:07,499
wem das Grundstück gehört. Ja, Malroy
ist natürlich abgehauen mit dem Geld.

70
00:05:07,499 --> 00:05:10,980
Und das System ist kaputt, weil Bob
und Alice die können nicht mehr

71
00:05:10,980 --> 00:05:14,690
miteinander handeln. Und auch wenn
jetzt jemand anderes das Grundstück

72
00:05:14,690 --> 00:05:18,749
kaufen möchte: Bei wem kauft er es
denn jetzt? Was ist denn rechtmäßig?

73
00:05:18,749 --> 00:05:23,859
Nun, in der Welt der Grundstücke gibt
es dafür eine ganz einfache Lösung,

74
00:05:23,859 --> 00:05:27,560
nämlich das Grundbuchamt. Und das
Grundbuchamt fungiert eigentlich

75
00:05:27,560 --> 00:05:33,310
als zentrale Referenzstelle,
die den Zustand verwaltet,

76
00:05:33,310 --> 00:05:37,460
und alle Änderungen verwaltet. Jedesmal
wenn jemand ein Grundstück verkauft,

77
00:05:37,460 --> 00:05:42,089
muss das über das Grundbuchamt erledigt
werden. Das Grundbuchamt überprüft,

78
00:05:42,089 --> 00:05:46,020
dass das überhaupt zulässig ist, ob das
Grundstück wirklich der Person gehört

79
00:05:46,020 --> 00:05:50,169
und führt das dann nach. Und so kann das
Grundbuchamt diese einfachen Angriffe

80
00:05:50,169 --> 00:05:58,960
verhindern. Diese Lösung
funktioniert auch für Finanzsysteme.

81
00:05:58,960 --> 00:06:02,770
Also wenn wir an Banken denken, wenn ich
ein Konto habe, da ist dann halt die Bank

82
00:06:02,770 --> 00:06:07,289
die zentrale Autorität, welche den Zustand
verwaltet. Für jede… jedesmal,

83
00:06:07,289 --> 00:06:11,499
wenn ich eine Transaktion mache, also Geld
überweise, überprüft die Bank vorher,

84
00:06:11,499 --> 00:06:15,759
ob ich wirklich das nötige Geld dazu
habe. Und dann wird mein Kontostand

85
00:06:15,759 --> 00:06:22,499
nachgeführt. Und die verwaltet so
für alle Teilnehmer den Zustand.

86
00:06:22,499 --> 00:06:26,919
Und das funktioniert eigentlich erstaunlich
gut. Nun wollen wir ein System, mit dem

87
00:06:26,919 --> 00:06:31,229
wir Zahlungen über das Internet abwickeln
können. Und wir hätten gerne, dass das

88
00:06:31,229 --> 00:06:34,849
dezentral ist. Weil, wenn das nicht
dezentral ist, dann kann natürlich

89
00:06:34,849 --> 00:06:39,909
eine zentrale Autorität das System
zensieren und manipulieren.

90
00:06:39,909 --> 00:06:43,539
Und eine zentrale Stelle kann angegriffen
werden. Ich denke, wir haben das alle

91
00:06:43,539 --> 00:06:47,719
in den letzten Jahren beobachten müssen,
wie Paypal sehr einfach willkürlich

92
00:06:47,719 --> 00:06:52,650
Konten sperrt, und das System zensiert.
So, und deshalb brauchen wir ein

93
00:06:52,650 --> 00:06:56,250
besseres System, eine bessere
Lösung für das Internetzeitalter.

94
00:06:56,250 --> 00:06:59,840
Und diese bessere Lösung ist
natürlich die ‚Blockchain‘.

95
00:06:59,840 --> 00:07:05,760
Die Blockchain bringt einige ganz
unglaubliche Eigenschaften mit sich.

96
00:07:05,760 --> 00:07:09,529
Die Blockchain braucht keine zentrale
Stelle um den Zustand zu verwalten.

97
00:07:09,529 --> 00:07:12,930
Die Teilnehmer des Systems müssen sich
gegenseitig nicht vertrauen, sie müssen

98
00:07:12,930 --> 00:07:16,419
sich gegenseitig nicht kennen. Sie müssen
nicht einmal wissen, wieviele Leute

99
00:07:16,419 --> 00:07:19,990
denn eigentlich da teilnehmen. Und
trotzdem können die sich alle immer

100
00:07:19,990 --> 00:07:25,469
auf einen Zustand des Systems einigen.

101
00:07:25,469 --> 00:07:27,960
Ich werde das jetzt demonstrieren,
die Regeln, die wir brauchen

102
00:07:27,960 --> 00:07:32,250
um das zu ermöglichen. Anhand
einer sehr einfachen Blockchain,

103
00:07:32,250 --> 00:07:35,759
die in diesem ersten Kapitel auch
noch keinen Proof-of-Work hat. Also

104
00:07:35,759 --> 00:07:39,149
diese erste Blockchain wird noch
angreifbar sein. Und ich werde auch

105
00:07:39,149 --> 00:07:42,970
zeigen wie es geht. Und erst im nächsten
Kapitel dann werde ich erklären,

106
00:07:42,970 --> 00:07:47,820
welche Maßnahmen wir ergreifen
müssen, um Angriffe zu verhindern.

107
00:07:47,820 --> 00:07:51,659
Und das Ganze fängt an mit dem Netzwerk
welches wir nutzen. Also wir sagen quasi,

108
00:07:51,659 --> 00:07:55,039
wir sind alle diese Leute, und wir würden
gerne miteinander Transaktionen machen

109
00:07:55,039 --> 00:07:59,759
können. Und zuerst einigen wir uns
alle auf einen Ursprungszustand.

110
00:07:59,759 --> 00:08:03,319
Damit fangen wir an. Wir sagen z.B.
„am Anfang gehört allen nichts“.

111
00:08:03,319 --> 00:08:08,429
Das ist ein leerer Zustand. Und dann
brauchen wir ein p2p-Netzwerk.

112
00:08:08,429 --> 00:08:13,529
Und jedesmal wenn jemand Geld überweist
an jemand anderes, dann veröffentlicht er

113
00:08:13,529 --> 00:08:17,490
die Transaktion in diesem Netzwerk,
und das Netzwerk leitet die Transaktion

114
00:08:17,490 --> 00:08:21,949
solange an alle Teilnehmer weiter,
bis alle Teilnehmer diese Transaktion

115
00:08:21,949 --> 00:08:27,169
gesehen haben. Das bringt
natürlich viele Probleme mit sich.

116
00:08:27,169 --> 00:08:29,529
Das Netzwerk ist irgendwie nicht
synchronisiert, nicht alle Leute

117
00:08:29,529 --> 00:08:34,510
sehen die gleichen Transaktionen, die
Reihenfolge der Transaktionen ist unklar.

118
00:08:34,510 --> 00:08:37,940
Leute werden versuchen das anzugreifen
– das wird dazu führen, dass es

119
00:08:37,940 --> 00:08:42,458
Transaktionen gibt die nicht miteinander
kompatibel sind. Und irgendwie

120
00:08:42,458 --> 00:08:45,310
Transaktionen, die abhängen von
nicht-kompatiblen Transaktionen und

121
00:08:45,310 --> 00:08:49,790
dann auch wieder nicht kompatibel sind.
Das ist ein riesengroßes Durcheinander da.

122
00:08:49,790 --> 00:08:52,370
Und deshalb brauchen wir jetzt
eine Möglichkeit, wie wir uns alle

123
00:08:52,370 --> 00:08:57,180
auf einen Zustand, auf einen Konsens
einigen können. Und – wie gesagt –

124
00:08:57,180 --> 00:09:00,790
das ist jetzt die ‚Blockchain‘.

125
00:09:00,790 --> 00:09:04,420
Und wir definieren einige Regeln,
die wir anwenden um uns zu einigen.

126
00:09:04,420 --> 00:09:08,240
Wir sagen, wir gruppieren die Transaktionen
die vorher so lose auf dem Netzwerk waren

127
00:09:08,240 --> 00:09:13,470
zu Blöcken. Die Blöcke hängen alle
voneinander ab. Wir sagen dann auch,

128
00:09:13,470 --> 00:09:17,780
der aktuelle Zustand des Netzwerks ist das
Ende der längsten Kette zusammenhängender

129
00:09:17,780 --> 00:09:22,720
Blöcke. Und die Blöcke müssen einige
Kriterien erfüllen. Ich habe das da…

130
00:09:22,720 --> 00:09:26,940
also das ist jetzt quasi der Ur… der
leere Zustand, mit dem wir beginnen.

131
00:09:26,940 --> 00:09:32,300
Und da kommen da Transaktionen
über das Netzwerk. Und irgendwann

132
00:09:32,300 --> 00:09:34,950
macht jemand einen Block der diese
Transaktionen zusammenfasst. Und jetzt

133
00:09:34,950 --> 00:09:39,810
sehen wir am Ende dieses Blocks ist
der Zustand. Wenn ich diesen Zustand

134
00:09:39,810 --> 00:09:43,110
nachvollziehen will dann nehme ich den
leeren Ursprungszustand, und dann

135
00:09:43,110 --> 00:09:47,080
jede Transaktion aus dem ersten Block,
und dann wende ich diese Transaktionen,

136
00:09:47,080 --> 00:09:52,170
eine nach der anderen, auf den Zustand
an, und dann erhalte ich den Endzustand.

137
00:09:52,170 --> 00:09:55,421
Mit der Zeit kommen
neue Transaktionen rein

138
00:09:55,421 --> 00:10:00,140
über das Netzwerk. Und diese Transaktionen
werden nicht Teil des Zustands

139
00:10:00,140 --> 00:10:02,950
– wir haben ja gesagt der Zustand ist das
Ende der längsten Kette von Blöcken,

140
00:10:02,950 --> 00:10:06,270
und die sind in keinem Block. Erst wenn
jemand einen Block daraus macht,

141
00:10:06,270 --> 00:10:09,890
werden die Teil des Zustands.
Wir sehen auch, die Blöcke hängen jeweils

142
00:10:09,890 --> 00:10:13,540
voneinander ab, die haben so einen Pfeil,
der sie miteinander verbindet, also

143
00:10:13,540 --> 00:10:18,590
jeder Block zeigt auf den vorhergehenden
Block, und bildet so eben diese Kette

144
00:10:18,590 --> 00:10:23,650
von Blöcken. Nun, jetzt versucht trotzdem
jemand da eine bösartige Transaktion

145
00:10:23,650 --> 00:10:27,810
zu machen, die mit den anderen nicht
kompatibel ist. Da macht jemand

146
00:10:27,810 --> 00:10:32,000
einen Block daraus. Und jetzt sagen
wir aber einfach, Blöcke, die

147
00:10:32,000 --> 00:10:35,470
Transaktionen enthalten welche sich
widersprechen sind nicht valide.

148
00:10:35,470 --> 00:10:38,360
Der Block, den kann zwar jemand
erstellen, aber wir sagen dann, das ist

149
00:10:38,360 --> 00:10:42,180
kein valider Block, der wird vom Netzwerk
nicht akzeptiert. Und der wird auch

150
00:10:42,180 --> 00:10:46,450
nicht Teil des Zustands. Also wenn jemand
einen Block bauen will und eine dieser

151
00:10:46,450 --> 00:10:52,610
Transaktionen enthält, dann muss sich
derjenige der den Block erstellt

152
00:10:52,610 --> 00:10:56,090
entscheiden welche der Transaktionen
denn jetzt enthalten sein sollen

153
00:10:56,090 --> 00:11:00,280
in dem Block. Und die anderen lässt er
außen vor. Für welche er sich entscheidet,

154
00:11:00,280 --> 00:11:04,660
das ist dem Typen ganz allein überlassen.
Er kann das selber entscheiden was er da

155
00:11:04,660 --> 00:11:10,690
reinpacken will. Dann kommen mit
der Zeit neue Transaktionen rein.

156
00:11:10,690 --> 00:11:14,300
Und jetzt könnte es sein, dass jemand so
einen Block Nummer 4 macht, welcher

157
00:11:14,300 --> 00:11:18,730
jetzt trotzdem wieder die böse Transaktion
enthält. Und dann sagen wir aber einfach,

158
00:11:18,730 --> 00:11:21,911
Blöcke welche Transaktionen enthalten,
welche nicht kompatibel sind

159
00:11:21,911 --> 00:11:25,450
mit Transaktionen in älteren Blöcken sind
auch ungültig, und der Block wird auch

160
00:11:25,450 --> 00:11:29,870
nicht Teil des Zustands. So. Was aber
gültig ist, ist jemand der einen Block

161
00:11:29,870 --> 00:11:33,880
Nummer 3 macht, der so aussieht. Und jetzt
haben wir das Problem: Wir haben gesagt,

162
00:11:33,880 --> 00:11:36,640
der Zustand ist die längste Kette von
Blöcken. Hier ist jetzt der Zustand

163
00:11:36,640 --> 00:11:40,370
nicht mehr eindeutig definiert und da muss
jetzt halt jeder Teilnehmer des Netzwerkes

164
00:11:40,370 --> 00:11:44,960
selbst entscheiden wie er damit umgeht,
was er jetzt als Zustand anerkennt.

165
00:11:44,960 --> 00:11:48,240
So, aber dann kommen halt neue
Transaktionen wieder rein. Und irgendwann

166
00:11:48,240 --> 00:11:52,590
baut jemand einen Block Nummer 4, der
diese Transaktion enthält. Und dadurch,

167
00:11:52,590 --> 00:11:57,920
dass der Block Nr. 4 auf den vorherigen
Block Nr. 3 verweist, ist es jetzt klar,

168
00:11:57,920 --> 00:12:01,530
von welchem Block der abhängt.
Und damit ist die Kette auch wieder klar,

169
00:12:01,530 --> 00:12:06,300
und die längste Kette wird wieder zum
Zustand. So. Jetzt habe ich gesagt,

170
00:12:06,300 --> 00:12:09,830
diese Blockchain die ich jetzt beschrieben
habe hat keinen Proof-of-Work und folglich

171
00:12:09,830 --> 00:12:14,510
ist sie angreifbar für ein double-spend.
Sagen wir Malroy würde gerne

172
00:12:14,510 --> 00:12:19,050
ein Fahrrad klauen. Er geht da so in den
Fahrradladen von Alice, und möchte dort

173
00:12:19,050 --> 00:12:23,510
gerne ein Fahrrad kaufen, das kostet
jetzt 1000 Euro in dem Beispiel.

174
00:12:23,510 --> 00:12:26,170
Ich werde jetzt… hier habe ich
die Darstellung etwas geändert,

175
00:12:26,170 --> 00:12:30,370
diese Vierecke mit Pfeilen dran, das sind
jetzt halt einfach Blöcke. Ich werde

176
00:12:30,370 --> 00:12:34,570
nicht mehr jede Transaktion einzeln
zeichnen. Und die sehen den Zustand,

177
00:12:34,570 --> 00:12:39,110
wie er da ist. Da sind all die Konten
aufgeführt, unter anderem diejenigen

178
00:12:39,110 --> 00:12:45,070
von Alice und Malroy. So.
Malroy geht also in den Laden,

179
00:12:45,070 --> 00:12:51,340
sucht sich das [Fahrrad] aus, geht zum
Tresen und macht dort die Transaktion

180
00:12:51,340 --> 00:12:56,880
an Alice. Und diese Transaktion wird
übers Netzwerk zu Alice weitergeleitet.

181
00:12:56,880 --> 00:13:00,480
Sie sieht die Transaktion, aber da sie
noch nicht Teil eines Blockes ist,

182
00:13:00,480 --> 00:13:04,260
ist sie auch noch nicht Teil des Zustands.
Irgendwann aber erstellt jemand halt

183
00:13:04,260 --> 00:13:07,880
einen Block der diese Transaktion enthält.
Die ist jetzt Teil des Zustandes.

184
00:13:07,880 --> 00:13:12,760
Wir sehen im Zustand des Systems,
dass Alice das Geld erhalten hat.

185
00:13:12,760 --> 00:13:17,130
Sie gibt das Fahrrad an Malroy, und der
fährt davon. Neue Blöcke kommen dazu.

186
00:13:17,130 --> 00:13:20,860
Und jetzt startet Malroy den Angriff.
Und was Malroy macht, er erstellt

187
00:13:20,860 --> 00:13:25,230
eine alternative Transaktion, die dasselbe
Geld überweist, diesmal aber nicht

188
00:13:25,230 --> 00:13:30,260
an Alice sondern an sich selbst. Genauer:
an ein zweites Konto das ebenfalls ihm

189
00:13:30,260 --> 00:13:36,510
gehört. Und er erstellt einen alternativen
Block, der diese Transaktion enthält.

190
00:13:36,510 --> 00:13:40,830
Und dann erstellt er ganz viele neue
Blöcke die davon abhängen. Solange,

191
00:13:40,830 --> 00:13:44,670
bis seine Kette von Blöcken länger
ist als die anderen, also die Kette,

192
00:13:44,670 --> 00:13:49,570
die zur Zeit auf dem Netzwerk ist. Und
dann veröffentlicht er die gesamte Kette

193
00:13:49,570 --> 00:13:53,540
auf dem Netzwerk. Und jetzt ist seine
Kette die längste Kette. Die wird

194
00:13:53,540 --> 00:13:58,380
vom Netzwerk als Zustand anerkannt. Und
in diesem Zustand hat er das Geld erhalten.

195
00:13:58,380 --> 00:14:02,210
Alice hat das Geld nicht erhalten. Und
Malroy hat das Fahrrad erfolgreich

196
00:14:02,210 --> 00:14:05,720
gestohlen. So, das hat also funktioniert.

197
00:14:05,720 --> 00:14:09,650
Wir müssen das verhindern. Das
Problem weshalb Malroy diesen Angriff

198
00:14:09,650 --> 00:14:13,780
machen konnte ist natürlich, dass er in
einer sehr kurzen Folge viele Blöcke

199
00:14:13,780 --> 00:14:18,230
erstellen konnte. Also das Problem ist
eigentlich, es ist zu einfach neue Blöcke

200
00:14:18,230 --> 00:14:23,250
zu erstellen. Also machen wir es halt
schwieriger, neue Blöcke zu erstellen.

201
00:14:23,250 --> 00:14:27,030
Und dazu sagen wir, für jeden Block
der erstellt wird, muss eine Aufgabe

202
00:14:27,030 --> 00:14:33,980
gelöst werden, eine Challenge.
Und um diese Challenge zu erstellen,

203
00:14:33,980 --> 00:14:40,120
muss man halt Zeit, und Rechenzeit
aufwenden. Die Lösung für diese Aufgabe

204
00:14:40,120 --> 00:14:45,161
nennen wir den Proof-of-Work. Und den
Prozess um den Proof-of-Work zu erstellen

205
00:14:45,161 --> 00:14:49,560
nennen wir das ‚Mining‘. Und dann sagen
wir, zusammen mit jedem neuen Block

206
00:14:49,560 --> 00:14:53,800
muss der passende Proof-of-Work
veröffentlicht werden. Und nur Blöcke,

207
00:14:53,800 --> 00:14:58,210
welche einen passenden Proof-of-Work haben
werden vom Netzwerk als Teil des Zustands

208
00:14:58,210 --> 00:15:03,300
anerkannt. Jetzt funktioniert das
Erstellen neuer Blöcke etwas anders.

209
00:15:03,300 --> 00:15:06,810
Und zwar ist es jetzt so, dass ein Block
nicht mehr einfach entsteht, sondern

210
00:15:06,810 --> 00:15:10,650
ein ‚Miner‘ muss daran arbeiten. Jeder
Miner arbeitet natürlich für sich selbst

211
00:15:10,650 --> 00:15:14,540
daran, einen neuen Block zu erstellen.
Wir sehen hier, der Block an dem der Miner

212
00:15:14,540 --> 00:15:19,991
arbeitet, ist hier so gestrichelt
markiert. Und dann, wenn der Miner

213
00:15:19,991 --> 00:15:23,920
daran arbeitet, kommen neue Transaktionen
rein. Und irgendwann gelingt es dem Miner

214
00:15:23,920 --> 00:15:27,910
den Block fertigzustellen. In dem Moment
veröffentlicht er den Block zusammen mit

215
00:15:27,910 --> 00:15:31,440
dem Proof-of-Work im Netzwerk. Der wird
vom Netzwerk anerkannt, und der Miner

216
00:15:31,440 --> 00:15:39,740
beginnt sofort an einem neuen Block zu
arbeiten, und das geht dann halt so weiter.

217
00:15:39,740 --> 00:15:43,990
Nun, die Funktion die wir brauchen um das
Erstellen der Blöcke schwierig zu machen

218
00:15:43,990 --> 00:15:49,730
muss einige Bedingungen erfüllen. Sie
muss natürlich schwierig sein zu lösen.

219
00:15:49,730 --> 00:15:53,110
Dann muss aber… obwohl es lange gehen
muss die zu erstellen, muss es sehr

220
00:15:53,110 --> 00:15:56,580
einfach sein, das Ergebnis zu prüfen.
Also wenn ich einen Block erhalte, und

221
00:15:56,580 --> 00:16:00,460
den passenden Proof-of-Work, muss
ich – zack! – sofort sagen können,

222
00:16:00,460 --> 00:16:03,390
der Proof-of-Work ist gültig oder nicht,
weil ich will ja entscheiden, ob das

223
00:16:03,390 --> 00:16:07,500
Teil meines Zustandes
sein soll oder nicht.

224
00:16:07,500 --> 00:16:11,960
Und dann ist es wichtig, dass die
Funktion abhängt von genau dem Block,

225
00:16:11,960 --> 00:16:15,230
für den sie erstellt wird. Also der
Proof-of-Work soll nur genau

226
00:16:15,230 --> 00:16:19,140
für den einen Block gültig sein.
Das ist sehr wichtig, denn ansonsten

227
00:16:19,140 --> 00:16:23,589
könnte Malroy auf Vorrat über
mehrere Wochen hinweg einfach

228
00:16:23,589 --> 00:16:27,220
Proof-of-Works erstellen und dann die
einfach an einen Block ranflanschen,

229
00:16:27,220 --> 00:16:31,810
und so in kurzer Zeit trotzdem wieder
eine lange Kette erstellen. Wenn aber

230
00:16:31,810 --> 00:16:37,150
der Proof-of-Work direkt abhängig ist
vom Block für den er erstellt wird,

231
00:16:37,150 --> 00:16:40,150
dann muss Malroy mit dem Erstellen
des Proof-of-Work so lange warten,

232
00:16:40,150 --> 00:16:44,290
bis der vorhergehende Block bekannt
ist und damit auch ihm bekannt ist,

233
00:16:44,290 --> 00:16:47,360
was er jetzt in den neuen Block packt.

234
00:16:47,360 --> 00:16:52,010
Und dann soll es auch noch möglich sein,
die Schwierigkeit der Aufgabe zu variieren.

235
00:16:52,010 --> 00:16:56,110
Denn damit das System als stabiles
Finanzsystem funktioniert, möchte ich

236
00:16:56,110 --> 00:16:59,250
gerne wissen, wie lange es geht von
dem Moment wo ich eine Transaktion

237
00:16:59,250 --> 00:17:04,409
veröffentliche bis sie Teil des Zustandes
wird. Und wenn das Netzwerk

238
00:17:04,409 --> 00:17:08,000
sehr viel mehr Rechenkraft hat, dann
geht es plötzlich schneller, neue Blöcke

239
00:17:08,000 --> 00:17:11,179
zu erstellen und dann will ich diese
Schwierigkeit anpassen können, damit es

240
00:17:11,179 --> 00:17:16,660
wieder länger geht. Nun jetzt, wo
das Mining nicht mehr einfach ist,

241
00:17:16,660 --> 00:17:20,169
und es aufwendig ist, müssen wir irgendwie
einen Incentive haben, damit die Leute

242
00:17:20,169 --> 00:17:25,089
es auch tun – also irgendeinen Anstoß.
So und wir sagen halt, der Miner,

243
00:17:25,089 --> 00:17:29,020
dem es gelingt einen Block zu erstellen,
der bekommt eine Belohnung,

244
00:17:29,020 --> 00:17:34,350
den sogenannten ‚Block Reward‘, und wir
implementieren das, indem wir sagen,

245
00:17:34,350 --> 00:17:38,010
der Miner darf für sich selbst eine
zusätzliche Transaktion in den Block

246
00:17:38,010 --> 00:17:41,999
hineinpacken, und mit dieser Transaktion
überweist er sich selbst Geld

247
00:17:41,999 --> 00:17:45,809
aus dem Nichts heraus. Wo das
Geld herkommt: Es gibt eigentlich

248
00:17:45,809 --> 00:17:48,779
zwei Möglichkeiten, die populär sind.
Entweder sagen wir, das sind

249
00:17:48,779 --> 00:17:53,110
die Überweisungsgebühren der anderen
Transaktionen in dem Block.

250
00:17:53,110 --> 00:17:57,540
Oder dann sagen wir halt, das ist Geld,
welches neu geschaffen wird. Wir haben ja

251
00:17:57,540 --> 00:18:02,670
vorhin gesehen, wir haben einen leeren
Zustand als den Ursprungszustand definiert,

252
00:18:02,670 --> 00:18:06,069
und wenn wir das so tun, muss das
Geld, welches die Leute ausgeben,

253
00:18:06,069 --> 00:18:10,250
irgendwo herkommen. Und das ist halt eine
Möglichkeit, Geld in das System zu bringen,

254
00:18:10,250 --> 00:18:14,559
die nicht von einer zentralen Stelle
kontrolliert wird, und eigentlich

255
00:18:14,559 --> 00:18:21,290
eine faire Möglichkeit.
Etwas weiteres ist, dass…

256
00:18:21,290 --> 00:18:25,290
diese zusätzliche Transaktion macht
den Block natürlich individuell, denn

257
00:18:25,290 --> 00:18:29,770
jeder Miner wird das Geld an sich selbst
zu überweisen versuchen und, also,

258
00:18:29,770 --> 00:18:35,130
diese eine Transaktion wird für jeden
Miner anders sein. Und das stellt sicher,

259
00:18:35,130 --> 00:18:39,599
dass die alle an einem ein wenig anderen
Problem arbeiten. Wenn die alle

260
00:18:39,599 --> 00:18:43,659
versuchen würden, das genau selbe Problem
zu lösen, auf die genau selbe Art,

261
00:18:43,659 --> 00:18:47,809
dann würde es immer demjenigen als erstes
gelingen, der die meiste Rechenkraft hat,

262
00:18:47,809 --> 00:18:51,679
und das wollen wir nicht, denn dann würde
ja eine Person alle Blöcke erzeugen,

263
00:18:51,679 --> 00:18:54,570
und wir wollen ja, dass viele Personen
Blöcke erzeugen, damit das niemand

264
00:18:54,570 --> 00:18:59,830
zensieren kann. Dadurch, dass das Problem,
an welchem sie arbeiten, für jeden Miner

265
00:18:59,830 --> 00:19:02,749
etwas anders ist, gelingt es halt
zwischendurch auch jemandem

266
00:19:02,749 --> 00:19:06,879
mit weniger Rechenkraft, als erstes eine
Lösung zu finden. Und in der Praxis

267
00:19:06,879 --> 00:19:12,159
geht das dann ganz gut, dass wir sagen
können, wer 20% der Rechenkraft hat

268
00:19:12,159 --> 00:19:15,559
dem wird es auch in etwa einem Fünftel
der Fälle gelingen als erstes einen Block

269
00:19:15,559 --> 00:19:21,210
zu finden. Dann muss der Miner halt
noch entscheiden, an welchem Block

270
00:19:21,210 --> 00:19:25,399
er arbeiten will. Aber der Miner will ja…
also an welchem Ende der Kette…

271
00:19:25,399 --> 00:19:29,129
Wir haben vorhin gesehen, es kann sein,
dass diese Ketten mehrere Enden haben.

272
00:19:29,129 --> 00:19:33,730
Aber das ist ganz einfach, denn der Miner
will ja den Reward kriegen. Der Reward ist

273
00:19:33,730 --> 00:19:37,719
eine Transaktion, welche nur dann
Teil des Zustandes wird wenn es Teil

274
00:19:37,719 --> 00:19:40,740
in einem Block ist, wenn es Teil der
längsten Kette ist. Und der Block ist

275
00:19:40,740 --> 00:19:44,249
nur dann Teil der längsten Kette wenn
er an diesem Ende angesetzt wird.

276
00:19:44,249 --> 00:19:49,039
Also arbeiten alle Miner am Ende der
längsten Kette. So, jetzt habe ich

277
00:19:49,039 --> 00:19:52,970
versprochen, dass wir so den Double-Spend
verhindern können, von vorhin.

278
00:19:52,970 --> 00:19:57,389
Wollen wir mal gucken, ob das geht!
Das Szenario ist wieder dasselbe.

279
00:19:57,389 --> 00:20:03,290
Malroy will das Fahrrad klauen,
im Laden von Alice.

280
00:20:03,290 --> 00:20:08,760
Der Unterschied ist, dass das Netzwerk
arbeiten muss um die Blöcke zu erstellen.

281
00:20:08,760 --> 00:20:13,090
Und dann geht es wieder so vonstatten.
Malroy erstellt jetzt zwei Transaktionen.

282
00:20:13,090 --> 00:20:17,110
Eine, um das Geld der Alice zu überweisen.
Diese Transaktion macht er öffentlich

283
00:20:17,110 --> 00:20:20,550
im Netzwerk, damit die von allen gesehen
werden kann. Und eine Transaktion,

284
00:20:20,550 --> 00:20:25,330
um das Geld an sich selbst zu überweisen.
Die behält er vorläufig geheim. Dann wird

285
00:20:25,330 --> 00:20:29,350
der vorhergehende Block fertiggestellt,
und sofort fängt das Netzwerk an

286
00:20:29,350 --> 00:20:34,220
den nächsten Block zu erstellen. Das
Netzwerk enthält in dem Block natürlich

287
00:20:34,220 --> 00:20:37,750
die Transaktion von Malroy an Alice,
denn das ist ja die einzige Transaktion

288
00:20:37,750 --> 00:20:42,129
die dem Netzwerk bekannt ist. Und
Malroy arbeitet jetzt ganz alleine daran,

289
00:20:42,129 --> 00:20:47,579
den alternativen Block zu erstellen. In
dem die andere Transaktion enthalten ist.

290
00:20:47,579 --> 00:20:51,539
Jetzt ist es aber so: das Netzwerk hat
natürlich mehr Rechenkraft als Malroy

291
00:20:51,539 --> 00:20:56,659
allein. Der hat halt nicht so viele
Computer. Und deshalb wird das Netzwerk

292
00:20:56,659 --> 00:21:01,340
immer schneller sein darin, neue Blöcke
zu erstellen als Malroy. Malroys Kette

293
00:21:01,340 --> 00:21:06,169
wird nie die längste Kette, wird nie Teil
des Zustands. Und der Angriff wurde

294
00:21:06,169 --> 00:21:13,779
erfolgreich abgewehrt. Die einzige Art
und Weise wie Malroy gewinnen könnte,

295
00:21:13,779 --> 00:21:17,639
also wie Malroy den Angriff trotzdem
durchführen könnte, wäre, wenn er

296
00:21:17,639 --> 00:21:21,899
schneller Blöcke erstellen könnte als
das Netzwerk. Und das wird ihm aber

297
00:21:21,899 --> 00:21:25,909
nur dann gelingen, wenn er mehr als
50% der Rechenkraft im Netzwerk hätte.

298
00:21:25,909 --> 00:21:28,679
Denn dann wäre die Wahrscheinlichkeit,
dass er einen Block findet, höher

299
00:21:28,679 --> 00:21:33,469
als bei allen anderen Minern gemeinsam.
Und dann könnte er das tun. Und deshalb

300
00:21:33,469 --> 00:21:40,500
spricht man bei Bitcoin und anderen
Kryptowährungen von diesen 50%-Attacken.

301
00:21:40,500 --> 00:21:43,769
So, jetzt gibt es noch eine andere Art,
einen Double-Spend auszuführen. Das ist

302
00:21:43,769 --> 00:21:49,020
ein etwas schwierigerer Angriff.
Und er hat jetzt damit zu tun, wie

303
00:21:49,020 --> 00:21:53,429
das Peer-to-Peer-Netzwerk funktioniert,
das wir brauchen um die Transaktionen

304
00:21:53,429 --> 00:22:01,279
und Blöcke zu verteilen. Jetzt ist der
Angriff ein wenig schwieriger, also

305
00:22:01,279 --> 00:22:05,330
muss Malroy etwas wertvolleres stehlen.
Er geht zu Bob. Bob verkauft Autos.

306
00:22:05,330 --> 00:22:09,520
Er wird versuchen ein Auto zu stehlen.
Und um das zu tun, wird er versuchen

307
00:22:09,520 --> 00:22:13,210
die Verbindung von Bob mit dem
Peer-to-Peer-Netzwerk zu kontrollieren.

308
00:22:13,210 --> 00:22:17,260
Wir sehen hier, Bob ist mit dem Netzwerk
verbunden. Mit diesen drei Peers. Und

309
00:22:17,260 --> 00:22:21,710
Malroy hat zwei Möglichkeiten: entweder
er kontrolliert die Internetverbindung

310
00:22:21,710 --> 00:22:26,490
von Bob. Oder dann kontrolliert er
halt die drei Nodes, mit denen Bob

311
00:22:26,490 --> 00:22:30,400
verbunden ist. Wie realistisch das ist,
das will ich hier nicht diskutieren.

312
00:22:30,400 --> 00:22:34,820
Grundsätzlich ist es ja schon
vorstellbar. Und jetzt hat Malroy

313
00:22:34,820 --> 00:22:39,190
einige interessante Möglichkeiten. Er kann
jetzt nämlich kontrollieren, welche Blöcke

314
00:22:39,190 --> 00:22:43,330
und Transaktionen der Bob sieht.
Also Transaktionen und Blöcke,

315
00:22:43,330 --> 00:22:47,710
welche auf dem Netzwerk erscheinen,
kann Malroy quasi vor Bob geheimhalten.

316
00:22:47,710 --> 00:22:52,059
Und er kann Bob auch Transaktionen und
Blöcke präsentieren, die er dem Rest

317
00:22:52,059 --> 00:22:57,920
des Netzwerkes nicht präsentiert.
So, das ist der Angriff. Wir sehen,

318
00:22:57,920 --> 00:23:01,880
was das Netzwerk sieht.
Links und rechts, was Bob sieht.

319
00:23:01,880 --> 00:23:06,929
Am Anfang ist das natürlich an beiden
Orten gleich. Jetzt geht der Malroy

320
00:23:06,929 --> 00:23:12,230
zu dem Bob und wird das Auto kaufen.
Er macht eine Transaktion.

321
00:23:12,230 --> 00:23:15,850
Er macht zwei Transaktionen. Eine,
um das Geld an Bob zu überweisen.

322
00:23:15,850 --> 00:23:19,480
Diese schickt er nur an Bob. Und
versteckt sie vor dem Netzwerk.

323
00:23:19,480 --> 00:23:23,960
Und eine zweite Transaktion, mit der er
das Geld wieder an sich selbst überweist.

324
00:23:23,960 --> 00:23:28,480
Diese Transaktion veröffentlicht er im
Netzwerk. Jetzt wird das Netzwerk

325
00:23:28,480 --> 00:23:33,950
daran arbeiten, einen Block zu erstellen,
mit der Transaktion von Malroy zu Malroy.

326
00:23:33,950 --> 00:23:38,990
Weil das Netzwerk kennt keine andere
Transaktion. Und Malroy allein arbeitet

327
00:23:38,990 --> 00:23:44,750
daran einen Block zu erstellen, mit
dem er das Geld an Bob überweist.

328
00:23:44,750 --> 00:23:48,130
Natürlich wiederum, das Netzwerk hat viel
mehr Rechenkraft, es ist viel schneller

329
00:23:48,130 --> 00:23:51,549
darin, neue Blöcke zu erstellen. So, und

330
00:23:51,549 --> 00:23:56,149
schlussendlich gelingt es dann aber Bob
[Malroy!] trotzdem, einen Block zu erstellen.

331
00:23:56,149 --> 00:23:59,690
Und alle diese Blöcke die auf dem Netzwerk
erstellt wurden – muss man vielleicht

332
00:23:59,690 --> 00:24:05,350
noch sagen – die hält der Malroy vor Bob
geheim. Also, alle diesen neuen Blöcke,

333
00:24:05,350 --> 00:24:08,919
die hat Bob nie gesehen. Und deshalb
wird Bob diesen einen Block von Malroy

334
00:24:08,919 --> 00:24:13,269
als die längste Kette von Blöcken
akzeptieren. Und jetzt ist die Transaktion

335
00:24:13,269 --> 00:24:18,469
von Malroy an Bob Teil von Bobs
Zustand. Er gibt Malroy das Auto.

336
00:24:18,469 --> 00:24:25,210
Malroy fährt davon. Er beendet die
Attacke. Und jetzt verbindet sich Bob

337
00:24:25,210 --> 00:24:29,339
wieder ganz normal mit dem Netzwerk.
Die beiden Ketten werden synchronisiert.

338
00:24:29,339 --> 00:24:33,410
Und wir sehen, in der schlussendlich
resultierenden Kette hat Bob das Geld

339
00:24:33,410 --> 00:24:41,690
nicht erhalten. Malroy hat also das
Auto erfolgreich stehlen können.

340
00:24:41,690 --> 00:24:45,690
Das ist gar nicht gut. Jetzt hat ja dieser
Angriff funktioniert. Oder hat er das

341
00:24:45,690 --> 00:24:52,659
denn wirklich? Denn diesmal war der
Angriff erfolgreich. Aber Malroy musste

342
00:24:52,659 --> 00:24:56,519
jetzt dafür arbeiten. Er musste diesen
einen Block erstellen. Und das hat ihn

343
00:24:56,519 --> 00:25:00,400
viel Zeit gekostet. Natürlich kostet
es ihn auch irgendwie Rechenkraft,

344
00:25:00,400 --> 00:25:03,440
und den Strom den er braucht um seinen
Computer zu betreiben. Das wollen wir

345
00:25:03,440 --> 00:25:07,360
jetzt aber gar nicht mit einbeziehen.
Sondern wir schauen jetzt nach diesen

346
00:25:07,360 --> 00:25:11,509
Dings die Zeit gekostet. Denn der Malroy
hat ja einen Computer, den er braucht,

347
00:25:11,509 --> 00:25:15,760
um die Blöcke zu erstellen. Und dieser
Computer kann immer nur eines auf’s Mal

348
00:25:15,760 --> 00:25:20,290
tun. Entweder erstellt er jetzt diesen
Fake-Block für Bob, oder er erstellt

349
00:25:20,290 --> 00:25:25,789
richtige Blöcke auf die richtige Chain.
Er kann nicht beides auf’s Mal tun.

350
00:25:25,789 --> 00:25:31,750
So, und das macht es sehr, sehr
teuer diesen Angriff durchzuführen.

351
00:25:31,750 --> 00:25:35,759
Stellen wir uns vor… das sind jetzt einfach 
irgendwelche Annahmewerte für unser

352
00:25:35,759 --> 00:25:39,379
Netzwerk… die sind da halt in jeder
Kryptowährung etwas anders definiert.

353
00:25:39,379 --> 00:25:44,730
Sagen wir, unser Netzwerk erzeugt einen
Block alle zehn Minuten. Der Block Reward,

354
00:25:44,730 --> 00:25:49,700
welchen der Miner kriegt ist 1000 Euro.
Und Malroy hätte jetzt 20% der Rechenkraft

355
00:25:49,700 --> 00:25:54,691
des Netzwerkes. Wenn wir sagen 100% der
Rechenkraft erzeugt alle zehn Minuten.

356
00:25:54,691 --> 00:26:00,309
einen Block, dann erzeugt Malroy auf
sich alleine gestellt nur alle 50 Minuten

357
00:26:00,309 --> 00:26:06,409
einen Block. D.h. der Angriff auf Bob
dauert 50 Minuten. Nun, wenn aber Malroy

358
00:26:06,409 --> 00:26:12,000
50 Minuten lang minen würde, anstatt Bob
anzugreifen, dann würde er in dieser Zeit

359
00:26:12,000 --> 00:26:16,289
durchschnittlich 1000 Euro verdienen.
Er kann sich jetzt also entscheiden,

360
00:26:16,289 --> 00:26:22,590
entweder greift er Bob an und stiehlt das
23.000 Euro teure Auto, oder er verdient

361
00:26:22,590 --> 00:26:26,470
mit fairem Mining 1000 Euro.
Natürlich wird er dieses Auto immer noch

362
00:26:26,470 --> 00:26:31,810
stehlen wollen. Der Mechanismus, um
das zu verhindern ist aber ganz einfach.

363
00:26:31,810 --> 00:26:36,419
Wir sagen jetzt, Bob gibt dem
Malroy das Auto nicht, sobald Bob

364
00:26:36,419 --> 00:26:41,259
das Geld erhalten hat, sondern er
wartet dann noch einige Blöcke.

365
00:26:41,259 --> 00:26:43,849
Das sieht dann in etwa so aus. Ich habe
jetzt nicht genügend Blöcke gemalt,

366
00:26:43,849 --> 00:26:49,279
weil die da nicht Platz hatten.
Also sagen wir halt, wir sehen

367
00:26:49,279 --> 00:26:54,510
auf der rechten Seite, wo die
Transaktion Teil des Zustandes wird.

368
00:26:54,510 --> 00:26:59,609
Und in diesem Moment gibt halt der
Bob das Auto noch nicht an Malroy,

369
00:26:59,609 --> 00:27:05,179
sondern erst einige Blöcke später. Und
für jeden zusätzlichen Block, den Malroy

370
00:27:05,179 --> 00:27:08,039
erstellen muss, um Bob davon zu
überzeugen, dass das jetzt wirklich

371
00:27:08,039 --> 00:27:12,230
die richtige Kette ist, muss Malroy
weitere 50 Minuten aufwenden,

372
00:27:12,230 --> 00:27:17,580
und das kostet ihn jedesmal 1000 Euro.
Wenn also Bob sagt: „Ich warte 24 Blöcke

373
00:27:17,580 --> 00:27:22,530
bevor ich dem Malroy das Auto gebe“. Dann
ist der Angriff für Malroy plötzlich teurer

374
00:27:22,530 --> 00:27:27,360
als das Auto einen Wert hat. Und dadurch
kann Bob den Angriff verhindern.

375
00:27:27,360 --> 00:27:31,179
Malroy kann den zwar immer noch
durchführen, aber es ist schlicht einfach

376
00:27:31,179 --> 00:27:35,069
nicht interessant für Malroy das zu tun,
weil er mehr Geld macht wenn er

377
00:27:35,069 --> 00:27:44,739
in der selben Zeit mint. So. Jetzt haben
wir viel gesprochen über generische

378
00:27:44,739 --> 00:27:48,580
Konzepte von Blockchains. Jetzt will
ich noch etwas dazu sagen, wie das

379
00:27:48,580 --> 00:27:53,820
in Bitcoin implementiert wird. Zumindest
einige der Dinge. Schauen wir uns zuerst

380
00:27:53,820 --> 00:27:58,499
die Blöcke an. Und wir wissen ja, in der
Informatik mögen wir es, Bodys und Header

381
00:27:58,499 --> 00:28:03,340
zu definieren. Das tun wir überall,
irgendwie, in unseren Netzwerkprotokollen;

382
00:28:03,340 --> 00:28:07,799
in Nachrichten und Dateiformaten
sagen wir, der Body enthält den Inhalt,

383
00:28:07,799 --> 00:28:12,049
die eigentlichen Daten. Und der Header
enthält die Metadaten. Und genau dasselbe

384
00:28:12,049 --> 00:28:17,390
tun wir auch in unseren Blockchains. In
Bitcoin ist es so, der Body eines Blockes

385
00:28:17,390 --> 00:28:22,500
enthält alle Transaktionen. Die sind dort
geordnet aufgeführt. Der Miner muss

386
00:28:22,500 --> 00:28:29,130
einige Regeln einhalten, wenn er das
macht. Z.B. wenn Transaktion B

387
00:28:29,130 --> 00:28:32,460
von Transaktion A abhängt, die beide
im selben Block sind, müssen die

388
00:28:32,460 --> 00:28:36,190
in der richtigen Reihenfolge drin sein.
Aber sonst kann der die irgendwie

389
00:28:36,190 --> 00:28:40,350
dort einpacken. Aber sobald er das mal
gemacht hat, ist dann… diese Reihenfolge

390
00:28:40,350 --> 00:28:44,739
ist anschließend wichtig. Und die erste
Transaktion im Block ist jeweils

391
00:28:44,739 --> 00:28:47,750
die coin-based-Transaktion,
mit der sich der Miner

392
00:28:47,750 --> 00:28:53,019
den Block Reward überweist.

393
00:28:53,019 --> 00:28:59,000
Um jetzt diesen Body zu verbinden mit dem
Header nutzt Bitcoin einen Merkle Tree.

394
00:28:59,000 --> 00:29:02,249
Das ist ein binärer Baum,

395
00:29:02,249 --> 00:29:08,470
bei dem jeweils… der Node ist der
hash der konkatenierten Werte

396
00:29:08,470 --> 00:29:11,480
der Children des Nodes.

397
00:29:11,480 --> 00:29:15,049
Und Bitcoin verwendet fast überall…
wo Bitcoin Hashes macht,

398
00:29:15,049 --> 00:29:17,990
wenden sie einen – dhash nennen sie das,

399
00:29:17,990 --> 00:29:22,979
das ist ein double-sha256-Hash, also
so nennt sich der Hash eines Hashes

400
00:29:22,979 --> 00:29:27,700
eines Wertes, den sie nehmen. Das
sieht dann so aus: wir haben unseren Body

401
00:29:27,700 --> 00:29:31,539
des Blocks. Dann erstellen wir für
jede Transaktion den double-hash.

402
00:29:31,539 --> 00:29:34,710
Und dann beginnen wir damit, den Tree
zu erstellen. Also auf jeden Node,

403
00:29:34,710 --> 00:29:40,629
für jeden blauen Node konkatenieren wir
die beiden grünen Nodes, und machen dann

404
00:29:40,629 --> 00:29:44,410
den Hash davon. Das machen wir für
jede Ebene, bis wir schlussendlich

405
00:29:44,410 --> 00:29:49,850
beim Merkle Root angelangen, und der
wird dann Teil des Block Headers.

406
00:29:49,850 --> 00:29:53,879
Und der Block Header enthält diese Dinge:
die Version – das ist irgendwie

407
00:29:53,879 --> 00:29:58,480
eine arbitrary Nummer, die von den
Entwicklern von Zeit zu Zeit geändert wird,

408
00:29:58,480 --> 00:30:01,809
wenn sie irgendwie finden,
dass wird jetzt Zeit dafür.

409
00:30:01,809 --> 00:30:05,559
Dann den Previous Block Hash. Wir haben
gesehen, die Blöcke verweisen jeweils

410
00:30:05,559 --> 00:30:09,199
auf den vorhergehenden Block. Das ist
in Bitcoin so gelöst, dass der Header

411
00:30:09,199 --> 00:30:13,069
eines Blocks den Hash des vorhergehenden
Blocks enthält. Also auch hier wieder

412
00:30:13,069 --> 00:30:18,730
den double-hash. Den Merkle Root haben
wir bereits gesehen. Dann enthält

413
00:30:18,730 --> 00:30:22,460
der Block-Header noch einen Time Stamp.
Das sind ziemlich komplizierte Regeln,

414
00:30:22,460 --> 00:30:26,780
wonach dieser Time Stamp gebildet
wird, aber das ist egal. Das ist

415
00:30:26,780 --> 00:30:31,850
nicht so wichtig. Die ‚Difficulty‘ ist ein
Ausdruck dafür wie schwierig es war

416
00:30:31,850 --> 00:30:35,989
den Proof-of-Work für diesen bestimmten
Block zu definieren. Und die ‚Nonce‘

417
00:30:35,989 --> 00:30:43,579
ist ein Wert der gebraucht wird zum Minen.

418
00:30:43,579 --> 00:30:48,359
Ja und der Proof-of-Work in Bitcoin ist
nichts anderes als der Hash des Blocks.

419
00:30:48,359 --> 00:30:53,139
Und der muss dann eine Bedingung
erfüllen. Und zwar muss dieser Hash

420
00:30:53,139 --> 00:30:58,580
mit einer gewissen Anzahl Nullen beginnen.
Also ich nehme den Header des Blocks

421
00:30:58,580 --> 00:31:04,359
und bilde den double-hash davon.
Und dann müssen die ersten paar Bits

422
00:31:04,359 --> 00:31:08,559
von diesem Hash müssen Null sein. Und
wieviele Bits das sind, das ist dann eben

423
00:31:08,559 --> 00:31:13,470
die variable Schwierigkeit. Also wenn
ich mehr Nullen haben muss zu Beginn

424
00:31:13,470 --> 00:31:16,970
dann ist es schwieriger den Proof-of-Work
zu erstellen. Und bei weniger

425
00:31:16,970 --> 00:31:22,229
natürlich einfacher. Das Mining
funktioniert dann so dass… der Miner

426
00:31:22,229 --> 00:31:25,919
nimmt einfach mal diesen Header,
und bildet den double-hash davon.

427
00:31:25,919 --> 00:31:29,919
Dann prüft er ob der jetzt diese Bedingung
erfüllt. Das wird er vermutlich nicht tun.

428
00:31:29,919 --> 00:31:34,210
Und dann inkrementiert er halt die nonce,
dadurch hat sich der Header verändert,

429
00:31:34,210 --> 00:31:39,109
er bildet wieder den hash davon, und prüft
das. Und so macht er immer weiter.

430
00:31:39,109 --> 00:31:45,509
Es ist aber so, diese nonce ist lediglich
32 bit lang, und der Hash mit 256 bit

431
00:31:45,509 --> 00:31:50,249
ist wesentlich größer. Es kann also gut
sein, dass einfach durch das Inkrementieren

432
00:31:50,249 --> 00:31:55,130
der Nonce kein passender Proof-of-Work
gefunden wird. Und in dem Fall wird

433
00:31:55,130 --> 00:32:00,949
der Miner die coin-based Transaktion
verändern. Und zwar hat diese coin-based

434
00:32:00,949 --> 00:32:05,450
Transaktion hat den Transaction Input,
der wird bei einer normalen Transaktion

435
00:32:05,450 --> 00:32:09,729
dafür gebraucht zu beschreiben, woher
das Geld kommt in dieser Transaktion.

436
00:32:09,729 --> 00:32:14,229
Das hat die coin-based nicht, denn die
macht ja quasi Geld aus dem Nichts heraus,

437
00:32:14,229 --> 00:32:18,179
und den Wert in diesem Fall kann
dann der Miner frei beeinflussen.

438
00:32:18,179 --> 00:32:22,239
Dadurch ändert sich der Hash dieser
Transaktion, und das setzt sich dann

439
00:32:22,239 --> 00:32:27,799
durch den Merkle Tree hindurch fort bis
es quasi auch den Merkle Root verändert.

440
00:32:27,799 --> 00:32:32,679
Und dadurch ist der ganze Blockheader
wieder verändert und der Miner

441
00:32:32,679 --> 00:32:37,799
kann weiterarbeiten. So, das lässt sich ja
dann auch sehr einfach prüfen, ob das jetzt

442
00:32:37,799 --> 00:32:41,700
ein korrekter Proof-of-Work ist. Ich nehme
einfach diesen Blockheader und bilde

443
00:32:41,700 --> 00:32:48,449
den Hash und schaue ob das so stimmt.

444
00:32:48,449 --> 00:32:53,330
Das Bitcoin-Netzwerk versucht alle zehn
Minuten einen neuen Block zu erstellen.

445
00:32:53,330 --> 00:32:57,519
Um diese Zeit stabil zu halten,
wird die Schwierigkeit im Netzwerk

446
00:32:57,519 --> 00:33:02,899
alle 14 Tage, also alle 2016 Blöcke,
angepasst, mit einem Algorithmus

447
00:33:02,899 --> 00:33:10,539
wo jeder Miner feststellen kann wie weit
muss ich jetzt die Schwierigkeit verändern.

448
00:33:10,539 --> 00:33:14,379
Die coin-based Transaktion, mit der
sich der Miner Geld überweist,

449
00:33:14,379 --> 00:33:18,039
enthält in Bitcoin zwei Dinge:
einerseits die Transaction Fees, also

450
00:33:18,039 --> 00:33:24,759
die Transaktionsgebühren der Transaktion
in den Block; und anderseits auch noch

451
00:33:24,759 --> 00:33:29,500
neue Bitcoin, die neu ins System kommen.
Das waren ursprünglich 50 Bitcoin pro Block,

452
00:33:29,500 --> 00:33:34,619
heute sind es noch 12,5, der
Wert halbiert sich alle vier Jahre.

453
00:33:34,619 --> 00:33:38,509
Das war das letzte Mal in diesem Sommer,
da hat sich der Wert halbiert. Seither

454
00:33:38,509 --> 00:33:47,810
gibt es nur noch 12,5 Bitcoin
für einen neuen Block.

455
00:33:47,810 --> 00:33:51,999
Jetzt wollen wir noch uns anschauen
wie wir ‚Light Clients‘ bauen können.

456
00:33:51,999 --> 00:33:56,509
Bitcoin kennt eigentlich mehr oder weniger,
drei Arten von Clients: ein ‚Full Node‘

457
00:33:56,509 --> 00:34:02,589
ist ein Client, welcher die
gesamte Blockchain speichert.

458
00:34:02,589 --> 00:34:06,630
Der überprüft jede eingehende
Transaktion, jeden eingehenden Block

459
00:34:06,630 --> 00:34:10,639
überprüft dieser Client, ob der auch
wirklich valide ist. Und er tut noch

460
00:34:10,639 --> 00:34:14,119
etwas anderes, nämlich er seeded diese
Blöcke die er hat an das Netzwerk.

461
00:34:14,119 --> 00:34:17,800
Also wenn jemand kommt und sagt:
„Ich hätte gern einen Block“ dann gibt

462
00:34:17,800 --> 00:34:22,149
der Full Node diesen Block raus. Dann gibt
es ‚Pruning Clients‘. Der macht eigentlich

463
00:34:22,149 --> 00:34:27,940
das genau selbe wie der Full Node.
Also der überprüft auch alle Transaktionen

464
00:34:27,940 --> 00:34:32,520
und alle Blöcke. Aber der speichert jetzt
halt nicht die ganze Blockchain, sondern

465
00:34:32,520 --> 00:34:35,550
wenn er findet „den Block brauche ich
nicht mehr“, dann löscht er den.

466
00:34:35,550 --> 00:34:39,100
Und das macht dem Client Speicherplatz.
Der braucht aber immer noch

467
00:34:39,100 --> 00:34:43,580
sehr viel Rechenkraft und sehr viel
Bandbreite, deutlich zuviel als dass ich

468
00:34:43,580 --> 00:34:48,130
das auf meinem Smartphone laufen lassen
möchte. Und deshalb gibt es noch

469
00:34:48,130 --> 00:34:53,520
die Light Clients oder SPV Clients.
Die dann auch geeignet sind,

470
00:34:53,520 --> 00:34:56,980
um [sie] auf einem mobilen Gerät laufen
zu lassen. Und wie die funktionieren,

471
00:34:56,980 --> 00:35:01,210
will ich jetzt noch besprechen.

472
00:35:01,210 --> 00:35:05,590
Ein Light Client oder ein SPV Client,
was der tut zuerst ist, er lädt

473
00:35:05,590 --> 00:35:09,020
die Header aller Blöcke herunter. Wir
haben ja gesehen, der Proof-of-Work

474
00:35:09,020 --> 00:35:15,420
ist der Hash des Block Headers. D.h.
um den Proof-of-Work zu kontrollieren

475
00:35:15,420 --> 00:35:18,760
brauche ich nicht den gesamten
Block, der Block Header genügt.

476
00:35:18,760 --> 00:35:23,230
Und dasselbe gilt auch für die
Verknüpfung der Blöcke untereinander.

477
00:35:23,230 --> 00:35:26,390
Welches der vorhergehende Block
ist, das steht ja auch im Header.

478
00:35:26,390 --> 00:35:30,510
D.h. auch für diese Funktion brauche ich
nicht die ganzen Blöcke herunterzuladen.

479
00:35:30,510 --> 00:35:35,450
Und so kann ich korrekt
die längste Kette erstellen,

480
00:35:35,450 --> 00:35:40,350
innerhalb des Netzwerks, indem
ich nur die Header herunterlade.

481
00:35:40,350 --> 00:35:45,560
Und der Gewinn dabei ist natürlich enorm.
Zur Zeit gibt es etwa 450.000 Blöcke.

482
00:35:45,560 --> 00:35:52,350
Die brauchen mehr als 95 GB Speicherplatz.
Wenn man dann noch TX Index aktiviert

483
00:35:52,350 --> 00:35:56,230
sind es, glaube ich, so um die
110 GB Speicherplatz, die es braucht.

484
00:35:56,230 --> 00:36:00,450
Das ist natürlich blödsinnig viel auf einem
Smartphone. Aber nur die Block Headers,

485
00:36:00,450 --> 00:36:03,730
alle Block Headers von diesen
450.000 Blöcken, die passen

486
00:36:03,730 --> 00:36:10,180
in deutlich weniger als 100 MB rein. Und
das ist dann durchaus ein realistischer Wert,

487
00:36:10,180 --> 00:36:14,940
dass ich das auf einem Smartphone habe.
Das zweite Konzept ist der Merkle Branch,

488
00:36:14,940 --> 00:36:18,540
und das ist dann eigentlich noch fast
die interessantere Funktion, die uns

489
00:36:18,540 --> 00:36:22,790
der Merkle Tree bildet. Und damit kann
jeder beweisen, dass eine Transaktion

490
00:36:22,790 --> 00:36:26,770
tatsächlich Teil des Zustands ist.

491
00:36:26,770 --> 00:36:30,650
Nun, die eine Möglichkeit, wie wir den
Merkle Tree nachbauen können,

492
00:36:30,650 --> 00:36:35,210
ist natürlich, indem wir den Block
Body herunterladen, und dann

493
00:36:35,210 --> 00:36:39,580
den ganzen Merkle Tree bauen.
Wenn ich jetzt aber nur beweisen will

494
00:36:39,580 --> 00:36:44,200
dass eine Transaktion Teil des Blockes
ist, gibt es eine effizientere Möglichkeit.

495
00:36:44,200 --> 00:36:47,950
Angenommen ich will jetzt beweisen,
dass die Transaktion (3) tatsächlich

496
00:36:47,950 --> 00:36:51,920
Teil des Blocks ist. Dann brauche ich
nicht alle Transaktionen herunterzuladen,

497
00:36:51,920 --> 00:36:57,760
sondern es reicht diese Transaktion (3)
herunterzuladen. – Ui, das war falsch. –

498
00:36:57,760 --> 00:37:01,480
Und dann die restlichen Hashes,
also von jeder Ebene des Baums

499
00:37:01,480 --> 00:37:04,480
lade ich einen Hash herunter.
Und damit kann ich jetzt

500
00:37:04,480 --> 00:37:11,420
den Merkle Root Node wieder nachbilden,
und so feststellen, dass diese Transaktion

501
00:37:11,420 --> 00:37:15,890
tatsächlich Teil des Blocks ist.
Das ist genau das was…

502
00:37:15,890 --> 00:37:19,150
das hat jetzt natürlich auch einige
Vorteile. Ich brauche jetzt

503
00:37:19,150 --> 00:37:23,520
weniger Elemente herunterzuladen, und
ich kann halt Hashes herunterladen, also

504
00:37:23,520 --> 00:37:27,110
anstatt Transaktionen. Vorhin in dem
Beispiel hat das nicht soviel gebracht.

505
00:37:27,110 --> 00:37:30,371
Aber wenn wir einen Block nehmen
mit 1600 Transaktionen, das ist

506
00:37:30,371 --> 00:37:34,880
dieser Tage durchaus ein üblicher Block,
dann brauche ich jetzt zum Validieren

507
00:37:34,880 --> 00:37:38,810
nicht mehr 1600 Transaktionen
herunterzuladen, sondern es genügt

508
00:37:38,810 --> 00:37:42,400
eine Transaktion herunterzuladen und
dann elf Hashes, und damit kann ich

509
00:37:42,400 --> 00:37:47,270
den Merkle Branch nachbauen.

510
00:37:47,270 --> 00:37:52,640
Und so funktioniert ein SPV Client. SPV
steht für ‚simple payment verification‘.

511
00:37:52,640 --> 00:37:56,660
Und das hat eigentlich… das wurde schon
im White Paper zu Bitcoin beschrieben,

512
00:37:56,660 --> 00:38:00,890
wie das funktioniert. Alles was der
tun muss, um zu beweisen, dass

513
00:38:00,890 --> 00:38:04,950
eine Transaktion reingekommen ist, ist,
er lädt zuerst alle Block Header herunter,

514
00:38:04,950 --> 00:38:10,320
wie vorhin besprochen, er bildet
den längsten Branch daraus,

515
00:38:10,320 --> 00:38:15,580
dann lädt er eine Transaktion herunter.
Und wenn ich jetzt wissen will…

516
00:38:15,580 --> 00:38:18,331
wenn ich von jemandem Geld erhalte und
ich will jetzt zeigen, ich habe das Geld

517
00:38:18,331 --> 00:38:22,610
tatsächlich erhalten, lade ich halt diese
Transaktion herunter, und dann lade ich

518
00:38:22,610 --> 00:38:27,110
den passenden Merkle Branch herunter.
Und jetzt kann ich quasi zeigen, dass

519
00:38:27,110 --> 00:38:32,160
dieser Merkle Branch tatsächlich mit der
längsten Kette von Blöcken verbunden ist.

520
00:38:32,160 --> 00:38:36,990
Und so habe ich jetzt den Beweis dafür,
dass ich das Geld tatsächlich erhalten habe.

521
00:38:36,990 --> 00:38:40,560
So, das ist diese Funktionsweise.
Jetzt haben wir noch etwas mehr Zeit,

522
00:38:40,560 --> 00:38:44,290
als ich gehofft hatte. Ich werde jetzt
noch versuchen, die Pruning Clients

523
00:38:44,290 --> 00:38:49,010
zu erklären. Das hängt dann damit zusammen
wie eigentlich Bitcoin-Transaktionen

524
00:38:49,010 --> 00:38:53,910
funktionieren. Nun, wir sind es ja
gewohnt, dass wir irgendwie auf der Bank

525
00:38:53,910 --> 00:38:58,440
ein Konto haben. Und das Konto
hat einen Besitzer. Hoffentlich mich!

526
00:38:58,440 --> 00:39:02,720
Und es hat einen Geldbetrag. Und jedesmal,
wenn ich eine Transaktion durchführe,

527
00:39:02,720 --> 00:39:06,760
verändert sich der Geldbetrag. Also ich
überweisen jemandem Geld, und dann

528
00:39:06,760 --> 00:39:11,520
verändert sich halt der Betrag auf meinem
Konto. In Bitcoin funktioniert das

529
00:39:11,520 --> 00:39:15,620
wesentlich anders, dort besitze ich
nicht ein Konto, sondern ich besitze

530
00:39:15,620 --> 00:39:20,170
sogenannte ‚Unspent Transaction Outputs‘.
Und wir sehen jetzt hier, sagen wir Alice

531
00:39:20,170 --> 00:39:23,880
hat diese fünf Unspent Transaction
Outputs, die haben jeweils einen Besitzer,

532
00:39:23,880 --> 00:39:29,230
nämlich Alice. Und jeweils einen Betrag
der dort verfügbar ist. Und der Betrag

533
00:39:29,230 --> 00:39:33,840
kann nicht geändert werden. Das ist fest.
Und nehmen wir jetzt an, Alice würde gerne

534
00:39:33,840 --> 00:39:38,910
eine Transaktion machen, an Bob,
die würde ihm gerne 42 Bitcoin überweisen.

535
00:39:38,910 --> 00:39:42,200
Dann erstellt sie eine Transaktion, und
sagt, das Geld dieser Transaktion,

536
00:39:42,200 --> 00:39:47,270
42 Bitcoin, sollen an Bob gehen. Und jetzt
muss sie das Geld irgendwoher haben.

537
00:39:47,270 --> 00:39:53,200
Und dann sagt sie halt, ich gebe
diese drei Transaction Outputs aus.

538
00:39:53,200 --> 00:39:56,920
Und das Interessante an Transaction
Outputs… wie gesagt, den Betrag

539
00:39:56,920 --> 00:40:01,760
kann man nicht verändern, sondern
Alice muss die alle komplett ausgeben.

540
00:40:01,760 --> 00:40:05,930
Jetzt sind aber diese Transaction Outputs
zusammengenommen 44 Bitcoin,

541
00:40:05,930 --> 00:40:10,990
und nicht 42 Bitcoins. D.h. diese
Transaktion gibt jetzt zuviel Geld aus,

542
00:40:10,990 --> 00:40:17,330
also sie gibt mehr Transaction Outputs aus
als sie dann schlussendlich Geld dem Bob

543
00:40:17,330 --> 00:40:21,400
überweist. Und was kann jetzt Alice
tun? Was sie tut, ist, sie macht

544
00:40:21,400 --> 00:40:27,360
einen zweiten Output in ihrer Transaktion.
Und hier überweist sie jetzt Geld an Alice.

545
00:40:27,360 --> 00:40:31,670
D.h. eine Transaktion in Bitcoin kann
beliebig viele Inputs und beliebig viele

546
00:40:31,670 --> 00:40:36,740
Outputs haben. Was es hier noch zu
sagen gibt, ist, haben wir immer noch

547
00:40:36,740 --> 00:40:41,070
einen Unterschied. Jetzt haben wir 44
Bitcoin, die in die Transaktion reinkommen,

548
00:40:41,070 --> 00:40:45,860
und nur 43 die rausgehen. Das restliche
Bitcoin, das jetzt hier nicht ausgegeben wird,

549
00:40:45,860 --> 00:40:50,810
das ist quasi impliziert die Transaction
Fee, welche der Miner erhält, der diese

550
00:40:50,810 --> 00:40:56,400
Transaktion mint. So eine Transaction Fee
ist implementiert. Jetzt haben wir gesehen,

551
00:40:56,400 --> 00:40:59,640
Alice hat durch das Erstellen dieser
Transaktion neue Transaction Outputs

552
00:40:59,640 --> 00:41:05,760
erstellt. Nämlich einen, der jetzt Bob
gehört, und einen der Alice gehört.

553
00:41:05,760 --> 00:41:08,980
Und jetzt können wir auch nachvollziehen,
diese Transaction Outputs, welche Alice

554
00:41:08,980 --> 00:41:13,850
ausgegeben hat, die gehören alle irgendwie
zu anderen Transaktionen, welche es vorhin

555
00:41:13,850 --> 00:41:19,800
gegeben hat. Nun, ein Transaction Output
kann einen von zwei Zuständen haben.

556
00:41:19,800 --> 00:41:24,930
Er kann ausgegeben sein, oder nicht.
Und natürlich kann man nur die ausgeben,

557
00:41:24,930 --> 00:41:29,320
die noch nicht ausgegeben sind. Und das
heißt, wenn ich wissen will, wieviel Geld

558
00:41:29,320 --> 00:41:33,350
Alice gehört, dann suche ich mir alle
Transaction Outputs zusammen,

559
00:41:33,350 --> 00:41:38,360
die Alice gehören, und addiere die Summe,
und dann weiß ich, Alice gehört „soviel“ Geld.

560
00:41:38,360 --> 00:41:41,200
Das kann ich für jeden Teilnehmer
des Systems machen, dann weiß ich

561
00:41:41,200 --> 00:41:46,900
für jeden Teilnehmer, wieviel Geld denn
der Person gehört. Wenn ich jetzt also

562
00:41:46,900 --> 00:41:50,980
alle Transaction Outputs nehme, die
nicht ausgegeben sind, dann habe ich

563
00:41:50,980 --> 00:41:56,530
den aktuellen Zustand des Netzwerks. Dann
weiß ich für jeden Teilnehmer, wieviel Geld

564
00:41:56,530 --> 00:42:04,960
diese Person hat. Und genau diesen
Mechanismus macht sich ein Pruning Client

565
00:42:04,960 --> 00:42:09,470
zunutze. Der sagt nämlich, eigentlich
brauche ich nicht die ganze Blockchain

566
00:42:09,470 --> 00:42:12,931
zu speichern, das ist ja blöd, denn wenn
eine neue Transaktion reinkommt, und

567
00:42:12,931 --> 00:42:17,260
ich wissen will ob die tatsächlich valide
ist, dann muss ich nur prüfen, ob die

568
00:42:17,260 --> 00:42:22,060
einen Output ausgibt, der noch unspent
ist, denn wenn die Transaktion einen

569
00:42:22,060 --> 00:42:25,520
Transaction Output ausgibt, der schon
ausgegeben ist, dann ist die natürlich

570
00:42:25,520 --> 00:42:29,430
nicht valide, man kann ja nicht dasselbe
Geld zweimal ausgeben. Oder wenn

571
00:42:29,430 --> 00:42:32,790
die Transaktion versucht, einen
Transaction Output auszugeben,

572
00:42:32,790 --> 00:42:36,220
den es gar nicht gibt, dann ist
die natürlich auch nicht valide.

573
00:42:36,220 --> 00:42:42,290
Was jetzt also ein Pruning Client tut –
und das tut übrigens auch ein Full Node:

574
00:42:42,290 --> 00:42:46,270
wenn eine neue Transaktion reinkommt,
und da steht in der Transaktion „ich gebe

575
00:42:46,270 --> 00:42:51,770
diesen Transaction Output aus“, dann
geht der Full Node nicht und versucht,

576
00:42:51,770 --> 00:42:55,930
die 100 GB große Blockchain zu durchsuchen
nach diesem Transaction Output, das wäre

577
00:42:55,930 --> 00:43:00,160
ja blödsinnig, sondern der legt sich halt
eine kleine Datenbank an, und dort

578
00:43:00,160 --> 00:43:05,520
stehen alle Transaction Outputs drin.
Und dann sagt er sich, für jeden…

579
00:43:05,520 --> 00:43:08,580
also alle Unspent Transaction Outputs
stehen dort drin, und dann sagt sich

580
00:43:08,580 --> 00:43:12,090
der Client, für jede Transaktion,
die reinkommt und die valide ist,

581
00:43:12,090 --> 00:43:17,540
entferne ich alle Transaction Outputs die
die Transaktion ausgibt aus der Datenbank,

582
00:43:17,540 --> 00:43:22,870
und alle neuen Transaction Outputs füge
ich dort ein. Und so behält der Client

583
00:43:22,870 --> 00:43:28,530
den Zustand. Und der Pruning Client sagt
sich dann halt: „Naja, die Blöcke, die

584
00:43:28,530 --> 00:43:31,550
brauche ich jetzt ja nicht mehr, weil ich
habe den Zustand in der Datenbank,

585
00:43:31,550 --> 00:43:35,380
der ist auch viel kleiner als all die
blöden Blöcke, die Blöcke werfe ich fort.“

586
00:43:35,380 --> 00:43:39,260
Der muss dann noch etwas vorsichtig sein,
denn wenn jetzt plötzlich von weiter hinten

587
00:43:39,260 --> 00:43:42,770
eine längere Kette kommt, dann muss er
das ja wieder nachvollziehen können,

588
00:43:42,770 --> 00:43:47,520
also wird er sich noch einige Blöcke
zusätzlich speichern, als nur den neuesten.

589
00:43:47,520 --> 00:43:54,720
Aber er kann so sehr viel Speicherplatz
sparen. Er muss aber… trotzdem

590
00:43:54,720 --> 00:44:00,420
muss ein Pruning Client eigentlich jede
Transaktion, die es jemals gegeben hat,

591
00:44:00,420 --> 00:44:04,490
herunterladen, und muss dann halt auch
die alle verifizieren. Das braucht auch

592
00:44:04,490 --> 00:44:08,280
immer noch sehr viel Rechenkraft, und
sehr viel Bandbreite. Und deshalb sind

593
00:44:08,280 --> 00:44:13,300
solche Clients nicht geeignet
für Mobilgeräte.

594
00:44:13,300 --> 00:44:15,870
Und was man hier vielleicht noch sagen
kann, ich habe jetzt eigentlich irgendwie

595
00:44:15,870 --> 00:44:25,300
gesagt, …

596
00:44:25,300 --> 00:44:31,510
…ich habe jetzt gesagt, Alice gibt einen
Transaction Output aus. Das ist…

597
00:44:31,510 --> 00:44:34,570
In Wirklichkeit ist es in Bitcoin
recht kompliziert implementiert.

598
00:44:34,570 --> 00:44:38,790
Das funktioniert nämlich so, dass der
Transaction Output hat ein Stück Code

599
00:44:38,790 --> 00:44:44,940
drin. Dafür gibt es in Bitcoin eine eigene
Assemblersprache, die das betreibt.

600
00:44:44,940 --> 00:44:50,960
Und der Input muss jetzt ebenfalls ein
Stück Code enthalten. Und wenn die dann

601
00:44:50,960 --> 00:44:55,670
nacheinander ausgeführt werden, muss das
am Schluss den Wert 'two' ergeben,

602
00:44:55,670 --> 00:44:59,740
und nur in dem Fall wurde der Output
richtig ausgegeben. Und das ist

603
00:44:59,740 --> 00:45:03,820
ein ziemlich kompliziertes System, wie das
wirklich funktioniert. Das ist dann halt

604
00:45:03,820 --> 00:45:07,440
eine eigene Programmiersprache, die ist
zwar nicht Turing-vollständig, aber damit

605
00:45:07,440 --> 00:45:11,940
lassen sich dann alle möglichen lustigen
Regeln implementieren. Die häufigste Regel

606
00:45:11,940 --> 00:45:23,410
die man findet, in über 80%
der Fälle, sind sogenannte…

607
00:45:23,410 --> 00:45:28,250
…die Regel sagt dann irgendsowas wie:
„Um diesen Output ausgeben zu können,

608
00:45:28,250 --> 00:45:32,380
musst du beweisen, dass du den geheimen
Schlüssel besitzt zu dem öffentlichen

609
00:45:32,380 --> 00:45:37,400
Schlüssel, dessen Hash ich jetzt hier
reinpacke.“ Und in dem Input steht dann

610
00:45:37,400 --> 00:45:43,310
halt: „Ja, ich besitze diesen geheimen
Schlüssel, und ich beweise dir das,

611
00:45:43,310 --> 00:45:47,680
indem ich hier den öffentlichen Schlüssel
reinpacke und die Transaktion mit dem

612
00:45:47,680 --> 00:45:52,840
geheimen Schlüssel signiere.“ Und dann
kann jemand, der das verifizieren will,

613
00:45:52,840 --> 00:45:56,930
kann einfach den öffentlichen Schlüssel
nehmen, schauen ob das dem Hash entspricht,

614
00:45:56,930 --> 00:46:04,630
und dann mit dem öffentlichen Schlüssel
die Signatur der Transaktion verifizieren.

615
00:46:04,630 --> 00:46:09,940
Das ist die mit Abstand häufigste Art,
wie diese Transaktionen in Wirklichkeit

616
00:46:09,940 --> 00:46:14,240
funktionieren. Aber das ist halt dann sehr
kompliziert, und damit könnte man leicht

617
00:46:14,240 --> 00:46:22,250
einen eigenen Vortrag füllen.
Deshalb werde ich jetzt hier aufhören.

618
00:46:22,250 --> 00:46:28,900
Habe ich da diese tolle Seite gebastelt.

619
00:46:28,900 --> 00:46:32,920
– Ups, das ist eigentlich zu weit –

620
00:46:32,920 --> 00:46:42,750
Finde ich es, oder nicht?

621
00:46:42,750 --> 00:46:45,760
Ja, ha, gefunden! Unglaublich.
*Lachen*

622
00:46:45,760 --> 00:46:48,860
Also wir haben jetzt noch Zeit für Fragen,
wenn ihr noch was wissen wollt.

623
00:46:48,860 --> 00:46:54,940
Oder ihr könnt mich auch erreichen,
am einfachsten hier über das DECT-Telefon

624
00:46:54,940 --> 00:47:01,890
in dem Kongress, wenn ihr Fragen habt.
Ihr findet einen Handout der Slides

625
00:47:01,890 --> 00:47:06,000
auch im Fahrplan. Und ich werde auch
die Folien selbst noch hochladen,

626
00:47:06,000 --> 00:47:09,520
und den entsprechenden Source Code
zum Erzeugen der Folien werde ich auch

627
00:47:09,520 --> 00:47:11,460
verlinken.

628
00:47:11,460 --> 00:47:12,960
*Beifall*

629
00:47:12,960 --> 00:47:14,550
Herald: vimja!!

630
00:47:14,550 --> 00:47:24,790
*andauernder Beifall*

631
00:47:24,790 --> 00:47:31,540
Es ist noch einiges an Zeit für Fragen;
also wenn ihr Fragen habt,

632
00:47:31,540 --> 00:47:35,440
dann reiht euch an den Mikrofonen auf.
Eine Sache möchte ich sagen:

633
00:47:35,440 --> 00:47:40,280
wenn ihr jetzt rausgehen wollt, verlasst
bitte leise den Saal, damit das

634
00:47:40,280 --> 00:47:44,360
mit den Fragen einigermaßen klappt.
Liebe Tür-Engel, wir lassen im Moment

635
00:47:44,360 --> 00:47:50,430
noch niemanden rein. Erstmal können Leute
nur rausgehen. Und bitte tut das leise.

636
00:47:50,430 --> 00:47:55,520
Wir fangen mit dem Signal-Engel an.

637
00:47:55,520 --> 00:47:58,730
Signal Angel: Eine Frage aus dem Internet
bezüglich dem Man-in-the-middle

638
00:47:58,730 --> 00:48:02,290
double-spending-Angriff. Könnte Mallory
nicht diesen Angriff gleichzeitig

639
00:48:02,290 --> 00:48:07,210
mit derselben Fake-Blockchain gegen zehn
verschiedene Autohändler machen, und

640
00:48:07,210 --> 00:48:12,890
mit dem gleichen Aufwand zehn Autos klauen?
Damit würde es sich doch wieder lohnen,

641
00:48:12,890 --> 00:48:20,050
auch wenn man mit dem Gegenwert eines
Autos an Rechenzeit investieren müsste.

642
00:48:20,050 --> 00:48:25,590
vimja: Das ist eine gute Überlegung die
ich mir so noch auch gar nie gemacht habe.

643
00:48:25,590 --> 00:48:30,030
Ich müsste darüber mal nachdenken. Ich
nehme aber grundsätzlich an, dass es

644
00:48:30,030 --> 00:48:35,670
vermutlich funktionieren würde. Der
Aufwand wird dann aber halt sehr viel

645
00:48:35,670 --> 00:48:40,970
größer, irgendwie um die Netzwerk-Nodes
zu kontrollieren. Grundsätzlich denke ich

646
00:48:40,970 --> 00:48:44,950
aber, dass es kein… damit das System
wirklich sicher ist, sollte das

647
00:48:44,950 --> 00:48:50,730
kein Argument sein dürfen. Also ich hätte
jetzt auf Anhieb gesagt, dass es vermutlich

648
00:48:50,730 --> 00:48:54,790
klappen würde.

649
00:48:54,790 --> 00:48:58,251
Herald: Okay, dann machen wir weiter
mit Mikrofon 2, hier vorne, bitte!

650
00:48:58,251 --> 00:49:03,220
Frage: Ja, hallo. Du hast gesagt, mit
einer 50%-Attack kann man im Prinzip

651
00:49:03,220 --> 00:49:07,140
die Blockchains hijacken. Wenn man
sich jetzt mal eine hypothetische

652
00:49:07,140 --> 00:49:11,480
Regierungsorganisation mit sehr, sehr,
sehr viel Rechenpower überlegt,

653
00:49:11,480 --> 00:49:16,220
mal so ganz in den Raum geraten, gibt’s
Überlegungen, wie wahrscheinlich das ist?

654
00:49:16,220 --> 00:49:19,540
vimja: Nun, es ist so, mit einfach
herkömmlicher Rechenpower wird das

655
00:49:19,540 --> 00:49:22,750
kaum möglich sein, also irgendwie
für diese spezielle Aufgabe,

656
00:49:22,750 --> 00:49:28,400
den Double-SHA256-Hash, hat das Bitcoin-
Netzwerk ein Vielfaches der Rechenkraft,

657
00:49:28,400 --> 00:49:32,510
die selbst die 500 schnellsten Supercomputer
aufbringen könnten. Es gibt aber eine

658
00:49:32,510 --> 00:49:36,580
viel einfachere Möglichkeit, unser guter
Freund China, denn die meisten…

659
00:49:36,580 --> 00:49:40,070
denn heute ist es halt so: eigentlich
möchte man gerne, dass die Miner

660
00:49:40,070 --> 00:49:43,740
verteilt sind, und jeder ein wenig zuhause
minet. In Praxis ist es aber so, dass

661
00:49:43,740 --> 00:49:47,770
das heute das große Geschäft ist. Und das
wird dann halt heute in Rechenzentren

662
00:49:47,770 --> 00:49:54,280
in China betrieben. Und China hat heute
mehr als 50% der Rechenkraft von Bitcoin,

663
00:49:54,280 --> 00:49:57,430
also, toll, unsere unabhängige Währung
gehört jetzt den Chinesen.

664
00:49:57,430 --> 00:50:01,030
Und selbst wenn das nicht stimmen sollte,
und das nicht funktionieren sollte,

665
00:50:01,030 --> 00:50:04,630
ist es so, dass all die spezielle
Hardware, die heute zum Mining

666
00:50:04,630 --> 00:50:08,940
notwendig ist, in China hergestellt wird.
Und China könnte einfach all diese Fabriken,

667
00:50:08,940 --> 00:50:12,710
in denen die hergestellt werden,
beschlagnahmen, und nach einigen Monaten

668
00:50:12,710 --> 00:50:15,120
hätten sie trotzdem wieder mehr
Rechenleistung als jeder andere,

669
00:50:15,120 --> 00:50:21,250
und könnte die Währung so kontrollieren.
Also, das ist durchaus wahrscheinlich.

670
00:50:21,250 --> 00:50:24,680
Herald: Dann machen wir weiter
mit Mikrofon 1, hier vorne, bitte.

671
00:50:24,680 --> 00:50:28,970
Frage: Ja, mir geht’s auch gerade um die
Rechenpower. Also gibt es da irgendwie

672
00:50:28,970 --> 00:50:34,200
Ansätze in anderen elektronischen
Währungen, wie das verhindert werden kann,

673
00:50:34,200 --> 00:50:40,380
dass immer quasi zum Stand der aktuellen
Technik die maximale Rechenpower nötig ist,

674
00:50:40,380 --> 00:50:44,041
um so ein System laufen zu lassen?

675
00:50:44,041 --> 00:50:47,400
vimja: Es hat zur Zeit, im Verlauf der
Zeit verschiedene Möglichkeiten,

676
00:50:47,400 --> 00:50:51,700
also verschiedene Ansätze gegeben.

677
00:50:51,700 --> 00:50:55,150
Das eine was man immer wieder versucht
hat, ist halt, dass man das nicht nur auf

678
00:50:55,150 --> 00:50:59,720
Rechenkraft beschränkt, sondern dass man
sagt, der Angriff der braucht nicht nur

679
00:50:59,720 --> 00:51:03,950
Rechenpower sondern auch viel RAM,
oder viel Memory. Und dadurch ist es

680
00:51:03,950 --> 00:51:08,250
sehr viel schwieriger, Hardware zu bauen.
Oder sehr viel teurer, Hardware zu bauen,

681
00:51:08,250 --> 00:51:12,240
die darauf spezialisiert ist, und man
erhofft sich davon Erfolge, aber

682
00:51:12,240 --> 00:51:16,010
schlussendlich hat man dort wieder
dasselbe Problem. Ich weiß aber,

683
00:51:16,010 --> 00:51:21,500
dass Ethereum arbeitet an einem Konzept,
das nennen sie Proof-of-Stake.

684
00:51:21,500 --> 00:51:24,730
Und wie genau das funktioniert, kann ich
dir nicht sagen. Aber da hängt dann

685
00:51:24,730 --> 00:51:29,160
die Wahrscheinlichkeit, dass du einen
Block erstellst, davon ab wieviel Geld

686
00:51:29,160 --> 00:51:32,900
du besitzt in dem Netzwerk, oder sowas.
Und die brauchen dann eigentlich

687
00:51:32,900 --> 00:51:35,840
kein Mining mehr. Und die haben dann halt
auch das Problem nicht mehr dass man

688
00:51:35,840 --> 00:51:40,700
unglaublich viel Strom braucht, um das
Ding zu minen. Und ich dachte, die wollten

689
00:51:40,700 --> 00:51:44,660
diesen Sommer umstellen. Ich habe dann
aber das Ganze ein wenig aus den Augen

690
00:51:44,660 --> 00:51:47,560
verloren, und kann dir jetzt nicht
sagen wie weit die damit sind.

691
00:51:47,560 --> 00:51:48,260
Also grundsätzlich…

692
00:51:48,260 --> 00:51:50,100
Frage: Wie heißt das nochmal?

693
00:51:50,100 --> 00:51:53,570
vimja: ‚Proof-of-Stake‘. Und das wird in
Ethereum implementiert. Aber wie weit

694
00:51:53,570 --> 00:51:57,490
die sind, kann ich dir nicht sagen. Das
müsstest du selbst nachschauen gehen.

695
00:51:57,490 --> 00:51:58,770
Frage: Danke.

696
00:51:58,770 --> 00:52:02,440
Herald: Dann machen wir weiter mit
Mikrofon 4, dort drüben, bitte!

697
00:52:02,440 --> 00:52:06,550
Frage: Ich stelle mal zwei Fragen. Das
eine ist: öffentliche Grundbuchämter

698
00:52:06,550 --> 00:52:11,470
könnte man doch sehr gut in der Blockchain
umlegen [anlegen], und dadurch könnte

699
00:52:11,470 --> 00:52:14,590
doch die Verwaltung sehr viel Geld
einsparen, und z.B. Handelsregister

700
00:52:14,590 --> 00:52:16,730
sind ja auch öffentlich, die könnte man
doch auch in die Blockchain verschieben.

701
00:52:16,730 --> 00:52:20,450
Oder mache ich da irgendeinen Denkfehler,
dass es am Schluss für die Verwaltung

702
00:52:20,450 --> 00:52:22,980
teurer kommt? Und was mich auch
noch wundert, was deine Meinung

703
00:52:22,980 --> 00:52:26,250
zu Smart Contracts ist.

704
00:52:26,250 --> 00:52:30,300
vimja: Also, zu der ersten Frage, das ist
so, daran wird tatsächlich gearbeitet.

705
00:52:30,300 --> 00:52:35,030
Insbesondere die britische Regierung hat
auch Forschungsgruppen, die erforschen

706
00:52:35,030 --> 00:52:41,890
sollen, wie Blockchains der Verwaltung
helfen können. Gerade beim Grundbuchamt,

707
00:52:41,890 --> 00:52:46,000
also solche Systeme brauchen starke
Anpassungen, gerade wenn wir uns

708
00:52:46,000 --> 00:52:52,460
vorstellen, ein Grundbuchamt, wenn es dann
jemandem gelingen würde, irgendwie

709
00:52:52,460 --> 00:52:55,690
jetzt trotzdem ein Grundstück quasi
zu stehlen, und das würde einfach

710
00:52:55,690 --> 00:53:01,960
in dieser Blockchain drin feststehen, wie
würde man das wieder rückgängig machen?

711
00:53:01,960 --> 00:53:06,120
Also wenn wir heute ein Grundbuchamt
haben, dann können die alles überschreiben.

712
00:53:06,120 --> 00:53:10,230
Und irgendwie möchten wir ja dann trotzdem
nicht einfach nur dieser Blockchain vertrauen.

713
00:53:10,230 --> 00:53:14,810
Wir möchten trotzdem die Möglichkeit
haben, dass gewisse Stellen, gerade eben

714
00:53:14,810 --> 00:53:18,020
unser Staat, das überschreiben können.
Da müssen dann in diese Blockchains

715
00:53:18,020 --> 00:53:22,460
zusätzliche Mechanismen eingebaut werden,
dass das trotzdem geht, und das ist dann

716
00:53:22,460 --> 00:53:26,850
halt bedenklich, weil jetzt trotzdem da
jemand das Zeugs kaputtmachen kann.

717
00:53:26,850 --> 00:53:30,750
Also das ist nicht ganz einfach, diese
Dinge zu tun. Aber ich denke schon,

718
00:53:30,750 --> 00:53:38,360
dass gerade Grundbuchämter eine gute
Chance sind, und das ist vermutlich auch

719
00:53:38,360 --> 00:53:43,760
etwas vom Ersten, was wir implementiert
sehen werden. Soviel für öffentliche Ämter.

720
00:53:43,760 --> 00:53:48,000
Aber ich denke auch, dass es einen
Hybridbetrieb geben wird. Also

721
00:53:48,000 --> 00:53:51,580
dass man quasi sagt, das ist zwar
öffentlich in einer Blockchain, aber

722
00:53:51,580 --> 00:53:56,360
schlussendlich, was wirklich gilt ist
immer noch das, was im Grundbuchamt steht,

723
00:53:56,360 --> 00:53:59,480
und das wird dann halt solange so
weiterbetrieben, bis sich das wirklich

724
00:53:59,480 --> 00:54:03,220
bewährt hat, und man den Übergang macht.
Und die zweite Frage, sorry, habe ich

725
00:54:03,220 --> 00:54:07,190
wieder vergessen.

726
00:54:07,190 --> 00:54:10,500
Herald: Okay, wenn das die Frage
beantwortet und er nicht wieder aufsteht,

727
00:54:10,500 --> 00:54:14,760
dann würde ich jetzt mit Mikrofon 7
weitermachen, dort oben, bitte.

728
00:54:14,760 --> 00:54:20,140
Frage: Ja, vielen Dank für den spannenden
Vortrag. Mich würde noch interessieren,

729
00:54:20,140 --> 00:54:24,970
vielleicht noch was zu dem Thema ‚Ende
der Bitcoins‘, die sind ja anscheinend

730
00:54:24,970 --> 00:54:29,220
begrenzt, soweit ich das verstanden habe.
Und wie wird das Erstellen von neuen

731
00:54:29,220 --> 00:54:33,880
Blöcken letztendlich in ferner Zukunft
dann belohnt, werden die einfach immer so

732
00:54:33,880 --> 00:54:36,690
weiter unterteilt, und man bekommt dann
nur noch Bruchteile von Bitcoins

733
00:54:36,690 --> 00:54:38,280
als Belohnung, oder wie funktioniert das?

734
00:54:38,280 --> 00:54:41,520
vimja: Das ist eine sehr gute Frage,
die sich natürlich auch diesen Sommer

735
00:54:41,520 --> 00:54:45,470
gestellt hat, weil sich ja der
Block Reward halbiert hat.

736
00:54:45,470 --> 00:54:49,150
Und erstaunlicherweise ist es dann aber
eigentlich ohne Weiteres weitergegangen.

737
00:54:49,150 --> 00:54:53,210
Nun ist es so, der Mechanismus,
der eigentlich greifen sollte, ist

738
00:54:53,210 --> 00:54:57,880
die Transaction Fees. Dass es durch
die Transaction Fees getragen wird,

739
00:54:57,880 --> 00:55:02,550
diese Gebühr. Nur ist es heute so, dass
die Transaction Fees so niedrig sind,

740
00:55:02,550 --> 00:55:07,410
dass das Minen sich nicht rentieren würde,
also der Stromverbrauch ist viel zu hoch,

741
00:55:07,410 --> 00:55:13,720
als dass es sich lohnen würde, nur
für die Transaction Fees zu minen.

742
00:55:13,720 --> 00:55:17,230
Andererseits ist es aber so, dass die
Transaction Fees heute schon sehr hoch

743
00:55:17,230 --> 00:55:21,090
sind, also die kommen heute irgendwo
zwischendurch schon in die Bereiche

744
00:55:21,090 --> 00:55:24,740
der Transaction Fees, die man auch
zahlt bei Kreditkartenüberweisungen.

745
00:55:24,740 --> 00:55:28,580
Und das ist natürlich absolut lächerlich
hoch. Und dann ist es aber auch so,

746
00:55:28,580 --> 00:55:32,970
dass die Blöcke voll sind, d.h. wenn das
Block Limit – das ist ein künstliches

747
00:55:32,970 --> 00:55:37,260
Limit, wie groß die Blöcke sein dürfen,
und die Community führt da großen Krieg

748
00:55:37,260 --> 00:55:41,690
darüber ob man das jetzt ändern soll oder
nicht – aber wenn dieses Limit halt nicht

749
00:55:41,690 --> 00:55:44,770
erhöht wird, dann passen nicht mehr
Transaktionen rein, und dann ist

750
00:55:44,770 --> 00:55:48,770
der einzige Weg höhere Transaction…
also mehr Transaction Fees zu haben

751
00:55:48,770 --> 00:55:51,620
für den Miner, ist diese Transaction Fees
zu erhöhen. Und wenn man die weiter

752
00:55:51,620 --> 00:55:55,920
erhöht, dann lohnt es sich einfach
nicht mehr, Bitcoin zu verwenden.

753
00:55:55,920 --> 00:55:58,531
Im Moment ist es noch nicht so ein
Problem, für die nächsten vier Jahre

754
00:55:58,531 --> 00:56:02,640
sind es ja noch 12,5 Bitcoin die
man kriegt. Aber wie es danach

755
00:56:02,640 --> 00:56:07,200
weitergehen wird, das muss man abwarten,
und dann schauen, was da genau passiert.

756
00:56:07,200 --> 00:56:10,750
Und ich denke dass das ist auch noch ein
dynamisches System, das sich schnell

757
00:56:10,750 --> 00:56:14,960
wandelt, und da werden auch noch
viele Leute viele gute Ideen haben.

758
00:56:14,960 --> 00:56:17,770
Frage: Darf ich noch mal kurz was
nachfragen? D.h. der Proof-of-Work

759
00:56:17,770 --> 00:56:22,980
ist nicht der direkte Bitcoin, den ich
bekomme, also nicht die 12,5 Bitcoins,

760
00:56:22,980 --> 00:56:28,230
die ich bekomme, um einen Block zu
erstellen, ist nicht der Proof-of-Work?

761
00:56:28,230 --> 00:56:31,930
vimja: Nein nein, das ist… die 12,5 Bitcoin
die du kriegst, also die 12,5 Bitcoin

762
00:56:31,930 --> 00:56:34,940
plus das klein weniger, was von den
Transaction Fees kommt, das ist

763
00:56:34,940 --> 00:56:39,430
der Block Reward. Nennt sich das. Und der
Proof-of-Work ist einfach der Beweis dafür,

764
00:56:39,430 --> 00:56:44,790
dass du die Arbeit auf dich genommen
hast, einen Block zu erstellen.

765
00:56:44,790 --> 00:56:49,500
Herald: Gut, dann machen wir oben
auf dem Balkon weiter mit der 8. Bitte.

766
00:56:49,500 --> 00:56:52,600
Frage: Ja, das ganze Erstellen von
den Blöcken basiert ja darauf, dass

767
00:56:52,600 --> 00:56:56,680
Transaktionen in des System reinkommen.
Die Frage wäre jetzt, was passiert, wenn

768
00:56:56,680 --> 00:57:01,880
keine Transaktionen zur Verfügung stehen.
Werden dann Dummy-Transaktionen erzeugt,

769
00:57:01,880 --> 00:57:03,880
oder leere Blöcke, oder was passiert dann?

770
00:57:03,880 --> 00:57:08,220
vimja: Nein, das kannst du sehen, wenn du
ganz zurückgehst, die ersten Blöcke, die

771
00:57:08,220 --> 00:57:11,690
überhaupt erstellt wurden, dort gab es ja
noch keine Transaktionen. Was hätte auch

772
00:57:11,690 --> 00:57:16,550
überwiesen werden sollen wenn niemand Geld
hat. Und da war es dann halt so, dass

773
00:57:16,550 --> 00:57:21,180
der Block enthält dann nur die Coin-based-
Transaktion. Der Miner wird ja immer

774
00:57:21,180 --> 00:57:25,000
eine Coin-based-Transaktion machen.
Einfach, weil es für ihn interessant ist.

775
00:57:25,000 --> 00:57:33,150
Und dann erstellt er halt einen Block, der
nur diese Coin-based-Transaktion enthält.

776
00:57:33,150 --> 00:57:35,940
Herald: Dann machen wir weiter
hier vorne mit der 2. Bitte.

777
00:57:35,940 --> 00:57:38,300
*Mikro 2 will Mikro 4 Vorrang geben*
Bitte?

778
00:57:38,300 --> 00:57:41,720
Wenn du nicht möchtest, dann machen
wir mit der 4 weiter! Sehr fair von dir!

779
00:57:41,720 --> 00:57:48,830
Frage: Och, dankeschön. Ich habe das Thema
‚Blockchain‘ in verschiedenen Kontexten

780
00:57:48,830 --> 00:57:51,480
jetzt im letzten Jahr sehr viel gesehen.
Es ist fast ein Buzzword in sehr sehr

781
00:57:51,480 --> 00:57:55,900
vielen Branchen, von FinTech bis zu
IoT oder wo auch immer. Konntest du

782
00:57:55,900 --> 00:57:59,920
im Kontext deiner Arbeit ein bisschen
so einen Trend raussehen, wo sich da

783
00:57:59,920 --> 00:58:04,100
erste Anwendungen
wirklich bewähren können?

784
00:58:04,100 --> 00:58:08,420
vimja: Erste Anwendungen gibt es ja bereits.
Du kannst mit Bitcoin Dinge bezahlen.

785
00:58:08,420 --> 00:58:13,930
Aber das ist so ein wenig eine Sache.
Eines, was ich gesehen habe, wo ich mich

786
00:58:13,930 --> 00:58:17,800
aber schlicht weigere mich zu beteiligen,
ist halt dass Banken das zu verwenden

787
00:58:17,800 --> 00:58:22,890
versuchen, um die Transaktionen zwischen
den Banken zu regeln. Da wird es ja,

788
00:58:22,890 --> 00:58:26,410
glaube ich, im Anschluss im Saal G
einen Talk geben dazu, wie das heute

789
00:58:26,410 --> 00:58:30,980
gemacht wird, wie Banken zwischeneinander
Geld austauschen. Und das möchte man

790
00:58:30,980 --> 00:58:34,220
in Zukunft mit Bitcoin [*eher: Blockchain*]
machen. Und da sind die Banken auch dran,

791
00:58:34,220 --> 00:58:38,940
sehr viel Geld und sehr viel Zeit rein zu
investieren. Das ist halt sehr schade,

792
00:58:38,940 --> 00:58:43,210
dass diese eigentlich coole Technologie
jetzt für sowas verwendet werden soll.

793
00:58:43,210 --> 00:58:48,940
Aber ich denke das ist eine Anwendung die
kommt. Dann eben einfache Kryptowährungen,

794
00:58:48,940 --> 00:58:53,540
wie etwa Bitcoin, um Dinge
zu bezahlen. Und auch…

795
00:58:53,540 --> 00:58:57,590
ich denke auch mit Ethereum, eben gerade
diese Smart Contracts werden kommen,

796
00:58:57,590 --> 00:59:01,340
dass man halt eben irgendwelche Dinge,
irgendwelche Third Parties, die man

797
00:59:01,340 --> 00:59:05,970
verwendet für Dinge zu regeln, ersetzen
wir jetzt aber. Was jetzt als Erstes

798
00:59:05,970 --> 00:59:09,560
quasi den Durchbruch schaffen wird und
als Großes eingesetzt werden wird,

799
00:59:09,560 --> 00:59:11,770
kann ich dir nicht sagen.

800
00:59:11,770 --> 00:59:15,630
Herald: Gut, dann, wir sind so ganz knapp
an der Zeit, aber du darfst deine Frage

801
00:59:15,630 --> 00:59:17,050
auf jeden Fall stellen, bitte!

802
00:59:17,050 --> 00:59:20,520
Frage: Ist auch nur eine ganz kurze,
schnelle Frage. Gibt es einen Schutz

803
00:59:20,520 --> 00:59:24,460
gegen DDoS, dass ich irgendwie das
Netzwerk mit falschen Transaktionen

804
00:59:24,460 --> 00:59:27,890
bombardiere, und dann bricht alles
zusammen, gibt es da irgendwie

805
00:59:27,890 --> 00:59:29,120
einen Schutz dagegen?

806
00:59:29,120 --> 00:59:31,930
vimja: Ja, das war ja ganz interessant.
Das hat es glaube ich vor über einem Jahr

807
00:59:31,930 --> 00:59:35,050
gegeben, bei Bitcoin, dass das passiert
ist, und die waren sich dann

808
00:59:35,050 --> 00:59:38,630
nicht so ganz einig in der Community,
weil die mögen sich sowieso nicht mehr,

809
00:59:38,630 --> 00:59:42,270
und ‚kriegen‘ nur miteinander, die waren
sich da nicht so ganz einig, ob das jetzt

810
00:59:42,270 --> 00:59:46,391
ein Test war, oder ob das ein DDoS war.
Und das Interessante daran ist ja,

811
00:59:46,391 --> 00:59:51,630
dass es ja tatsächlich Geld kostet, eine
Transaktion zu machen. Also du zahlst

812
00:59:51,630 --> 00:59:55,790
zuerst eine Transaction-Gebühr, und der
Schutz sollte eigentlich, hoffentlich,

813
00:59:55,790 --> 00:59:59,520
sein, dass das da zu teuer ist.
Aber offenbar gibt es immer noch

814
00:59:59,520 --> 01:00:04,340
so viele Bitcoin-Millionäre, die einfach
Bitcoins haben zum Davonschmeißen,

815
01:00:04,340 --> 01:00:08,200
und die dann sowas tun können. Es
wird auf jeden Fall an irgendwelchen

816
01:00:08,200 --> 01:00:11,770
Schutzmechanismen gearbeitet, aber
was das ist… *zuckt mit den Schultern*

817
01:00:11,770 --> 01:00:15,530
Also was es gibt, in Bitcoin,
ist dieses Replace-by-Fee,

818
01:00:15,530 --> 01:00:22,890
damit die Transaction-Gebühr nach
der Veröffentlichung der Transaktion

819
01:00:22,890 --> 01:00:25,920
anschließend noch erhöht werden
kann. Und damit kannst du halt…

820
01:00:25,920 --> 01:00:29,030
wenn du jetzt siehst, es kommen sehr viele
DDoS-Transaktionen rein, kannst du halt

821
01:00:29,030 --> 01:00:33,640
im Nachhinein die Transaction-Gebühr
erhöhen, und das dadurch den Minern

822
01:00:33,640 --> 01:00:38,480
quasi schmackhaft machen, deine
valide Transaktion zu includen.

823
01:00:38,480 --> 01:00:43,600
Dieses Replace-by-Fee, dieses RBF,
ist aber sehr stark umstritten, und

824
01:00:43,600 --> 01:00:49,580
wird auch standardmäßig nicht
aktiviert von der Client-Software.

825
01:00:49,580 --> 01:00:56,290
Herald: Gut, dann danke vimja, für diese
großartige Einführung in die Blockchain!

826
01:00:56,290 --> 01:01:01,030
*Beifall*

827
01:01:01,030 --> 01:01:05,070
*Abspannmusik*

828
01:01:05,070 --> 01:01:24,901
*Untertitel erstellt von c3subtitles.de
im Jahr 2017. Mach mit und hilf uns!*
