WEBVTT
00:00:00.000 --> 00:00:13.890
33C3-Vorspannmusik
00:00:13.890 --> 00:00:20.810
Herald: Gut, dann machen wir
weiter mit dem nächsten Vortrag.
00:00:20.810 --> 00:00:24.509
Der ist von vimja, der ist
Informatikstudent aus Bern in der Schweiz,
00:00:24.509 --> 00:00:28.740
und er arbeitete bzw. er
beschäftigte sich mit Bitcoin
00:00:28.740 --> 00:00:32.890
und Ethereum, und schrieb seine
Bachelorarbeit über die Suche
00:00:32.890 --> 00:00:38.210
nach Informationen in der Bitcoin-
Blockchain. Und da macht es total Sinn,
00:00:38.210 --> 00:00:43.120
dass der uns jetzt eine Einführung
zu Blockchains präsentieren wird.
00:00:43.120 --> 00:00:45.580
Ein großer Applaus für vimja!
00:00:45.580 --> 00:00:50.030
Applaus mit Pfeifen und Jubel
Das ist deine Bühne!
00:00:50.030 --> 00:00:56.519
weiterhin Applaus
00:00:56.519 --> 00:00:58.920
vimja: Toll, das ist jetzt
gerade kaputtgegangen.
00:00:58.920 --> 00:01:05.460
Gelächter
00:01:05.460 --> 00:01:08.000
So ist es besser.
00:01:08.000 --> 00:01:13.230
Applaus
Danke.
00:01:13.230 --> 00:01:19.980
Genau, das geht jetzt
natürlich auch nicht.
00:01:19.980 --> 00:01:22.240
Mache ich es halt von Hand.
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.
00:01:27.740 --> 00:01:31.570
Ja das hat er euch ja alles
schon gesagt, der Herald.
00:01:31.570 --> 00:01:34.680
In dieser Zeit, in der ich mich
mit Blockchains befasst habe,
00:01:34.680 --> 00:01:39.270
durfte ich natürlich sehr viele
sehr interessante Dinge lernen,
00:01:39.270 --> 00:01:41.830
und ich möchte jetzt heute abend
einen Teil dieses Wissens
00:01:41.830 --> 00:01:48.810
an euch weitergeben. Genau.
00:01:48.810 --> 00:01:52.710
Das Ganze ist natürlich ein sehr komplexes
Thema, das viele komplizierte Dinge
00:01:52.710 --> 00:01:56.120
enthält, und deshalb fangen wir jetzt mit
etwas sehr einfachem an, was wir alles
00:01:56.120 --> 00:01:59.850
kennen. Und zwar herkömmliche
Besitzsysteme – also Systeme,
00:01:59.850 --> 00:02:04.100
die ausdrücken wem etwas gehört. Und,
eigentlich, mit der Erkenntnis, dass man
00:02:04.100 --> 00:02:11.190
all diese Besitzsysteme als
Zustandsübergangssysteme darstellen kann.
00:02:11.190 --> 00:02:16.019
Das gilt sowohl für Finanzsysteme,
die wir haben um Geld zu verwalten,
00:02:16.019 --> 00:02:20.090
als auch etwa für Grundstücke, also
Systeme mit denen wir verwalten,
00:02:20.090 --> 00:02:23.490
wem ein Grundstück gehört.
00:02:23.490 --> 00:02:27.520
Das Mapping funktioniert dann in etwa
so, dass wir sagen, der Zustand ist
00:02:27.520 --> 00:02:33.510
die Sammlung der Informationen wem
was gehört. Und jedes Übertragen
00:02:33.510 --> 00:02:37.720
eines Besitzes ist eine Transition,
die zu einem neuen Zustand führt.
00:02:37.720 --> 00:02:41.760
Also am Beispiel eines finanziellen
Systems sagen wir, der Zustand ist
00:02:41.760 --> 00:02:45.879
die Sammlung aller Konten, die es gibt.
Das drückt für jede Person aus,
00:02:45.879 --> 00:02:51.230
wieviel Geld ihr gehört. Und ein Übergang
ist, wenn jemand eine Transaktion macht,
00:02:51.230 --> 00:02:54.160
also Geld überweist, von einem Konto
zu einem anderen, dann führt das
00:02:54.160 --> 00:02:58.440
zu einem neuen Zustand.
So, das sehen wir hier abgebildet
00:02:58.440 --> 00:03:02.280
mit Grundstücken. Wir sehen hier, der
Zustand, der enthält diese Information,
00:03:02.280 --> 00:03:06.760
wem die Grundstücke gehören.
Und dann verkauft der Bob
00:03:06.760 --> 00:03:10.890
sein Grundstück Nr. 42 an Alice und
das führt zu einem neuen Zustand.
00:03:10.890 --> 00:03:15.660
Ich habe da den Unterschied markiert,
damit der eindeutig sichtbar ist.
00:03:15.660 --> 00:03:20.410
Nun, in all diesen Systemen ist es sehr
wichtig, dass sich alle Teilnehmer des
00:03:20.410 --> 00:03:26.150
Systems auf einen Zustand einigen können.
Dass sie sich einig sind, wem was gehört.
00:03:26.150 --> 00:03:30.050
Denn wenn sie das nicht können, sind
Angriffe auf das System möglich,
00:03:30.050 --> 00:03:32.950
insbesondere der sogenannte
Double-Spend-Angriff,
00:03:32.950 --> 00:03:37.840
der in der Blockchain-Welt bekannt und
gefürchtet ist. Und was bedeutet das?
00:03:37.840 --> 00:03:41.440
Das ist ganz einfach, wenn jemand etwas
zweimal ausgibt. Bei Geld ist das ein
00:03:41.440 --> 00:03:45.310
wenig abstrakt (also wie gibt man zweimal
dasselbe Geld aus), aber bei Grundstücken
00:03:45.310 --> 00:03:48.990
ist das ganz einfach. Stellen wir uns vor,
jemand verkauft dasselbe Grundstück
00:03:48.990 --> 00:03:54.880
zweimal. Das ist natürlich kriminell
und darf nicht vorkommen.
00:03:54.880 --> 00:03:57.850
Schauen wir uns jetzt mal an wie
das funktioniert. Stellen wir uns vor,
00:03:57.850 --> 00:04:01.940
Malroy hat ein schönes Grundstück,
das Grundstück Nr. 5. Und sowohl Alice
00:04:01.940 --> 00:04:05.700
als auch Bob möchten gerne das
Grundstück kaufen. Und Malroy
00:04:05.700 --> 00:04:10.020
wird jetzt versuchen, das an beide zu
verkaufen. Also trifft er sich mit Alice.
00:04:10.020 --> 00:04:13.761
Das ist also jetzt der aktuelle Zustand.
Wir haben gesehen, das Grundstück Nr. 5
00:04:13.761 --> 00:04:20.430
gehört hier dem Malroy. Der trifft sich
mit Alice. Und er verkauft es an Alice.
00:04:20.430 --> 00:04:24.550
Er überweist ihr das Grundstück. Wir sehen
diese Transition – überweist das Grundstück
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,
00:04:29.129 --> 00:04:31.990
der hat davon nichts mitgekriegt.
Irgendwie – Bob und Alice wissen
00:04:31.990 --> 00:04:36.300
immer noch nicht recht wie man sicher
miteinander kommuniziert. Und deshalb
00:04:36.300 --> 00:04:39.199
weiß der Bob jetzt nichts davon, dass
die Alice das Grundstück gekauft hat.
00:04:39.199 --> 00:04:43.680
Er denkt, das Grundstück gehört immer noch
Malroy. Also trifft er sich mit Malroy.
00:04:43.680 --> 00:04:47.939
Und auch er einigt sich mit Malroy auf
einen Preis. Und Malroy tut jetzt so,
00:04:47.939 --> 00:04:52.710
als würde er den Besitz des
Grundstücks an Bob übertragen.
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
00:04:56.460 --> 00:05:00.339
der korrekte Zustand des Systems.
Da haben wir natürlich ein Problem,
00:05:00.339 --> 00:05:03.290
weil Bob und Alice, die sind sich
jetzt gar nicht einig darüber,
00:05:03.290 --> 00:05:07.499
wem das Grundstück gehört. Ja, Malroy
ist natürlich abgehauen mit dem Geld.
00:05:07.499 --> 00:05:10.980
Und das System ist kaputt, weil Bob
und Alice die können nicht mehr
00:05:10.980 --> 00:05:14.690
miteinander handeln. Und auch wenn
jetzt jemand anderes das Grundstück
00:05:14.690 --> 00:05:18.749
kaufen möchte: Bei wem kauft er es
denn jetzt? Was ist denn rechtmäßig?
00:05:18.749 --> 00:05:23.859
Nun, in der Welt der Grundstücke gibt
es dafür eine ganz einfache Lösung,
00:05:23.859 --> 00:05:27.560
nämlich das Grundbuchamt. Und das
Grundbuchamt fungiert eigentlich
00:05:27.560 --> 00:05:33.310
als zentrale Referenzstelle,
die den Zustand verwaltet,
00:05:33.310 --> 00:05:37.460
und alle Änderungen verwaltet. Jedesmal
wenn jemand ein Grundstück verkauft,
00:05:37.460 --> 00:05:42.089
muss das über das Grundbuchamt erledigt
werden. Das Grundbuchamt überprüft,
00:05:42.089 --> 00:05:46.020
dass das überhaupt zulässig ist, ob das
Grundstück wirklich der Person gehört
00:05:46.020 --> 00:05:50.169
und führt das dann nach. Und so kann das
Grundbuchamt diese einfachen Angriffe
00:05:50.169 --> 00:05:58.960
verhindern. Diese Lösung
funktioniert auch für Finanzsysteme.
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
00:06:02.770 --> 00:06:07.289
die zentrale Autorität, welche den Zustand
verwaltet. Für jede… jedesmal,
00:06:07.289 --> 00:06:11.499
wenn ich eine Transaktion mache, also Geld
überweise, überprüft die Bank vorher,
00:06:11.499 --> 00:06:15.759
ob ich wirklich das nötige Geld dazu
habe. Und dann wird mein Kontostand
00:06:15.759 --> 00:06:22.499
nachgeführt. Und die verwaltet so
für alle Teilnehmer den Zustand.
00:06:22.499 --> 00:06:26.919
Und das funktioniert eigentlich erstaunlich
gut. Nun wollen wir ein System, mit dem
00:06:26.919 --> 00:06:31.229
wir Zahlungen über das Internet abwickeln
können. Und wir hätten gerne, dass das
00:06:31.229 --> 00:06:34.849
dezentral ist. Weil, wenn das nicht
dezentral ist, dann kann natürlich
00:06:34.849 --> 00:06:39.909
eine zentrale Autorität das System
zensieren und manipulieren.
00:06:39.909 --> 00:06:43.539
Und eine zentrale Stelle kann angegriffen
werden. Ich denke, wir haben das alle
00:06:43.539 --> 00:06:47.719
in den letzten Jahren beobachten müssen,
wie Paypal sehr einfach willkürlich
00:06:47.719 --> 00:06:52.650
Konten sperrt, und das System zensiert.
So, und deshalb brauchen wir ein
00:06:52.650 --> 00:06:56.250
besseres System, eine bessere
Lösung für das Internetzeitalter.
00:06:56.250 --> 00:06:59.840
Und diese bessere Lösung ist
natürlich die ‚Blockchain‘.
00:06:59.840 --> 00:07:05.760
Die Blockchain bringt einige ganz
unglaubliche Eigenschaften mit sich.
00:07:05.760 --> 00:07:09.529
Die Blockchain braucht keine zentrale
Stelle um den Zustand zu verwalten.
00:07:09.529 --> 00:07:12.930
Die Teilnehmer des Systems müssen sich
gegenseitig nicht vertrauen, sie müssen
00:07:12.930 --> 00:07:16.419
sich gegenseitig nicht kennen. Sie müssen
nicht einmal wissen, wieviele Leute
00:07:16.419 --> 00:07:19.990
denn eigentlich da teilnehmen. Und
trotzdem können die sich alle immer
00:07:19.990 --> 00:07:25.469
auf einen Zustand des Systems einigen.
00:07:25.469 --> 00:07:27.960
Ich werde das jetzt demonstrieren,
die Regeln, die wir brauchen
00:07:27.960 --> 00:07:32.250
um das zu ermöglichen. Anhand
einer sehr einfachen Blockchain,
00:07:32.250 --> 00:07:35.759
die in diesem ersten Kapitel auch
noch keinen Proof-of-Work hat. Also
00:07:35.759 --> 00:07:39.149
diese erste Blockchain wird noch
angreifbar sein. Und ich werde auch
00:07:39.149 --> 00:07:42.970
zeigen wie es geht. Und erst im nächsten
Kapitel dann werde ich erklären,
00:07:42.970 --> 00:07:47.820
welche Maßnahmen wir ergreifen
müssen, um Angriffe zu verhindern.
00:07:47.820 --> 00:07:51.659
Und das Ganze fängt an mit dem Netzwerk
welches wir nutzen. Also wir sagen quasi,
00:07:51.659 --> 00:07:55.039
wir sind alle diese Leute, und wir würden
gerne miteinander Transaktionen machen
00:07:55.039 --> 00:07:59.759
können. Und zuerst einigen wir uns
alle auf einen Ursprungszustand.
00:07:59.759 --> 00:08:03.319
Damit fangen wir an. Wir sagen z.B.
„am Anfang gehört allen nichts“.
00:08:03.319 --> 00:08:08.429
Das ist ein leerer Zustand. Und dann
brauchen wir ein p2p-Netzwerk.
00:08:08.429 --> 00:08:13.529
Und jedesmal wenn jemand Geld überweist
an jemand anderes, dann veröffentlicht er
00:08:13.529 --> 00:08:17.490
die Transaktion in diesem Netzwerk,
und das Netzwerk leitet die Transaktion
00:08:17.490 --> 00:08:21.949
solange an alle Teilnehmer weiter,
bis alle Teilnehmer diese Transaktion
00:08:21.949 --> 00:08:27.169
gesehen haben. Das bringt
natürlich viele Probleme mit sich.
00:08:27.169 --> 00:08:29.529
Das Netzwerk ist irgendwie nicht
synchronisiert, nicht alle Leute
00:08:29.529 --> 00:08:34.510
sehen die gleichen Transaktionen, die
Reihenfolge der Transaktionen ist unklar.
00:08:34.510 --> 00:08:37.940
Leute werden versuchen das anzugreifen
– das wird dazu führen, dass es
00:08:37.940 --> 00:08:42.458
Transaktionen gibt die nicht miteinander
kompatibel sind. Und irgendwie
00:08:42.458 --> 00:08:45.310
Transaktionen, die abhängen von
nicht-kompatiblen Transaktionen und
00:08:45.310 --> 00:08:49.790
dann auch wieder nicht kompatibel sind.
Das ist ein riesengroßes Durcheinander da.
00:08:49.790 --> 00:08:52.370
Und deshalb brauchen wir jetzt
eine Möglichkeit, wie wir uns alle
00:08:52.370 --> 00:08:57.180
auf einen Zustand, auf einen Konsens
einigen können. Und – wie gesagt –
00:08:57.180 --> 00:09:00.790
das ist jetzt die ‚Blockchain‘.
00:09:00.790 --> 00:09:04.420
Und wir definieren einige Regeln,
die wir anwenden um uns zu einigen.
00:09:04.420 --> 00:09:08.240
Wir sagen, wir gruppieren die Transaktionen
die vorher so lose auf dem Netzwerk waren
00:09:08.240 --> 00:09:13.470
zu Blöcken. Die Blöcke hängen alle
voneinander ab. Wir sagen dann auch,
00:09:13.470 --> 00:09:17.780
der aktuelle Zustand des Netzwerks ist das
Ende der längsten Kette zusammenhängender
00:09:17.780 --> 00:09:22.720
Blöcke. Und die Blöcke müssen einige
Kriterien erfüllen. Ich habe das da…
00:09:22.720 --> 00:09:26.940
also das ist jetzt quasi der Ur… der
leere Zustand, mit dem wir beginnen.
00:09:26.940 --> 00:09:32.300
Und da kommen da Transaktionen
über das Netzwerk. Und irgendwann
00:09:32.300 --> 00:09:34.950
macht jemand einen Block der diese
Transaktionen zusammenfasst. Und jetzt
00:09:34.950 --> 00:09:39.810
sehen wir am Ende dieses Blocks ist
der Zustand. Wenn ich diesen Zustand
00:09:39.810 --> 00:09:43.110
nachvollziehen will dann nehme ich den
leeren Ursprungszustand, und dann
00:09:43.110 --> 00:09:47.080
jede Transaktion aus dem ersten Block,
und dann wende ich diese Transaktionen,
00:09:47.080 --> 00:09:52.170
eine nach der anderen, auf den Zustand
an, und dann erhalte ich den Endzustand.
00:09:52.170 --> 00:09:55.421
Mit der Zeit kommen
neue Transaktionen rein
00:09:55.421 --> 00:10:00.140
über das Netzwerk. Und diese Transaktionen
werden nicht Teil des Zustands
00:10:00.140 --> 00:10:02.950
– wir haben ja gesagt der Zustand ist das
Ende der längsten Kette von Blöcken,
00:10:02.950 --> 00:10:06.270
und die sind in keinem Block. Erst wenn
jemand einen Block daraus macht,
00:10:06.270 --> 00:10:09.890
werden die Teil des Zustands.
Wir sehen auch, die Blöcke hängen jeweils
00:10:09.890 --> 00:10:13.540
voneinander ab, die haben so einen Pfeil,
der sie miteinander verbindet, also
00:10:13.540 --> 00:10:18.590
jeder Block zeigt auf den vorhergehenden
Block, und bildet so eben diese Kette
00:10:18.590 --> 00:10:23.650
von Blöcken. Nun, jetzt versucht trotzdem
jemand da eine bösartige Transaktion
00:10:23.650 --> 00:10:27.810
zu machen, die mit den anderen nicht
kompatibel ist. Da macht jemand
00:10:27.810 --> 00:10:32.000
einen Block daraus. Und jetzt sagen
wir aber einfach, Blöcke, die
00:10:32.000 --> 00:10:35.470
Transaktionen enthalten welche sich
widersprechen sind nicht valide.
00:10:35.470 --> 00:10:38.360
Der Block, den kann zwar jemand
erstellen, aber wir sagen dann, das ist
00:10:38.360 --> 00:10:42.180
kein valider Block, der wird vom Netzwerk
nicht akzeptiert. Und der wird auch
00:10:42.180 --> 00:10:46.450
nicht Teil des Zustands. Also wenn jemand
einen Block bauen will und eine dieser
00:10:46.450 --> 00:10:52.610
Transaktionen enthält, dann muss sich
derjenige der den Block erstellt
00:10:52.610 --> 00:10:56.090
entscheiden welche der Transaktionen
denn jetzt enthalten sein sollen
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,
00:11:00.280 --> 00:11:04.660
das ist dem Typen ganz allein überlassen.
Er kann das selber entscheiden was er da
00:11:04.660 --> 00:11:10.690
reinpacken will. Dann kommen mit
der Zeit neue Transaktionen rein.
00:11:10.690 --> 00:11:14.300
Und jetzt könnte es sein, dass jemand so
einen Block Nummer 4 macht, welcher
00:11:14.300 --> 00:11:18.730
jetzt trotzdem wieder die böse Transaktion
enthält. Und dann sagen wir aber einfach,
00:11:18.730 --> 00:11:21.911
Blöcke welche Transaktionen enthalten,
welche nicht kompatibel sind
00:11:21.911 --> 00:11:25.450
mit Transaktionen in älteren Blöcken sind
auch ungültig, und der Block wird auch
00:11:25.450 --> 00:11:29.870
nicht Teil des Zustands. So. Was aber
gültig ist, ist jemand der einen Block
00:11:29.870 --> 00:11:33.880
Nummer 3 macht, der so aussieht. Und jetzt
haben wir das Problem: Wir haben gesagt,
00:11:33.880 --> 00:11:36.640
der Zustand ist die längste Kette von
Blöcken. Hier ist jetzt der Zustand
00:11:36.640 --> 00:11:40.370
nicht mehr eindeutig definiert und da muss
jetzt halt jeder Teilnehmer des Netzwerkes
00:11:40.370 --> 00:11:44.960
selbst entscheiden wie er damit umgeht,
was er jetzt als Zustand anerkennt.
00:11:44.960 --> 00:11:48.240
So, aber dann kommen halt neue
Transaktionen wieder rein. Und irgendwann
00:11:48.240 --> 00:11:52.590
baut jemand einen Block Nummer 4, der
diese Transaktion enthält. Und dadurch,
00:11:52.590 --> 00:11:57.920
dass der Block Nr. 4 auf den vorherigen
Block Nr. 3 verweist, ist es jetzt klar,
00:11:57.920 --> 00:12:01.530
von welchem Block der abhängt.
Und damit ist die Kette auch wieder klar,
00:12:01.530 --> 00:12:06.300
und die längste Kette wird wieder zum
Zustand. So. Jetzt habe ich gesagt,
00:12:06.300 --> 00:12:09.830
diese Blockchain die ich jetzt beschrieben
habe hat keinen Proof-of-Work und folglich
00:12:09.830 --> 00:12:14.510
ist sie angreifbar für ein double-spend.
Sagen wir Malroy würde gerne
00:12:14.510 --> 00:12:19.050
ein Fahrrad klauen. Er geht da so in den
Fahrradladen von Alice, und möchte dort
00:12:19.050 --> 00:12:23.510
gerne ein Fahrrad kaufen, das kostet
jetzt 1000 Euro in dem Beispiel.
00:12:23.510 --> 00:12:26.170
Ich werde jetzt… hier habe ich
die Darstellung etwas geändert,
00:12:26.170 --> 00:12:30.370
diese Vierecke mit Pfeilen dran, das sind
jetzt halt einfach Blöcke. Ich werde
00:12:30.370 --> 00:12:34.570
nicht mehr jede Transaktion einzeln
zeichnen. Und die sehen den Zustand,
00:12:34.570 --> 00:12:39.110
wie er da ist. Da sind all die Konten
aufgeführt, unter anderem diejenigen
00:12:39.110 --> 00:12:45.070
von Alice und Malroy. So.
Malroy geht also in den Laden,
00:12:45.070 --> 00:12:51.340
sucht sich das [Fahrrad] aus, geht zum
Tresen und macht dort die Transaktion
00:12:51.340 --> 00:12:56.880
an Alice. Und diese Transaktion wird
übers Netzwerk zu Alice weitergeleitet.
00:12:56.880 --> 00:13:00.480
Sie sieht die Transaktion, aber da sie
noch nicht Teil eines Blockes ist,
00:13:00.480 --> 00:13:04.260
ist sie auch noch nicht Teil des Zustands.
Irgendwann aber erstellt jemand halt
00:13:04.260 --> 00:13:07.880
einen Block der diese Transaktion enthält.
Die ist jetzt Teil des Zustandes.
00:13:07.880 --> 00:13:12.760
Wir sehen im Zustand des Systems,
dass Alice das Geld erhalten hat.
00:13:12.760 --> 00:13:17.130
Sie gibt das Fahrrad an Malroy, und der
fährt davon. Neue Blöcke kommen dazu.
00:13:17.130 --> 00:13:20.860
Und jetzt startet Malroy den Angriff.
Und was Malroy macht, er erstellt
00:13:20.860 --> 00:13:25.230
eine alternative Transaktion, die dasselbe
Geld überweist, diesmal aber nicht
00:13:25.230 --> 00:13:30.260
an Alice sondern an sich selbst. Genauer:
an ein zweites Konto das ebenfalls ihm
00:13:30.260 --> 00:13:36.510
gehört. Und er erstellt einen alternativen
Block, der diese Transaktion enthält.
00:13:36.510 --> 00:13:40.830
Und dann erstellt er ganz viele neue
Blöcke die davon abhängen. Solange,
00:13:40.830 --> 00:13:44.670
bis seine Kette von Blöcken länger
ist als die anderen, also die Kette,
00:13:44.670 --> 00:13:49.570
die zur Zeit auf dem Netzwerk ist. Und
dann veröffentlicht er die gesamte Kette
00:13:49.570 --> 00:13:53.540
auf dem Netzwerk. Und jetzt ist seine
Kette die längste Kette. Die wird
00:13:53.540 --> 00:13:58.380
vom Netzwerk als Zustand anerkannt. Und
in diesem Zustand hat er das Geld erhalten.
00:13:58.380 --> 00:14:02.210
Alice hat das Geld nicht erhalten. Und
Malroy hat das Fahrrad erfolgreich
00:14:02.210 --> 00:14:05.720
gestohlen. So, das hat also funktioniert.
00:14:05.720 --> 00:14:09.650
Wir müssen das verhindern. Das
Problem weshalb Malroy diesen Angriff
00:14:09.650 --> 00:14:13.780
machen konnte ist natürlich, dass er in
einer sehr kurzen Folge viele Blöcke
00:14:13.780 --> 00:14:18.230
erstellen konnte. Also das Problem ist
eigentlich, es ist zu einfach neue Blöcke
00:14:18.230 --> 00:14:23.250
zu erstellen. Also machen wir es halt
schwieriger, neue Blöcke zu erstellen.
00:14:23.250 --> 00:14:27.030
Und dazu sagen wir, für jeden Block
der erstellt wird, muss eine Aufgabe
00:14:27.030 --> 00:14:33.980
gelöst werden, eine Challenge.
Und um diese Challenge zu erstellen,
00:14:33.980 --> 00:14:40.120
muss man halt Zeit, und Rechenzeit
aufwenden. Die Lösung für diese Aufgabe
00:14:40.120 --> 00:14:45.161
nennen wir den Proof-of-Work. Und den
Prozess um den Proof-of-Work zu erstellen
00:14:45.161 --> 00:14:49.560
nennen wir das ‚Mining‘. Und dann sagen
wir, zusammen mit jedem neuen Block
00:14:49.560 --> 00:14:53.800
muss der passende Proof-of-Work
veröffentlicht werden. Und nur Blöcke,
00:14:53.800 --> 00:14:58.210
welche einen passenden Proof-of-Work haben
werden vom Netzwerk als Teil des Zustands
00:14:58.210 --> 00:15:03.300
anerkannt. Jetzt funktioniert das
Erstellen neuer Blöcke etwas anders.
00:15:03.300 --> 00:15:06.810
Und zwar ist es jetzt so, dass ein Block
nicht mehr einfach entsteht, sondern
00:15:06.810 --> 00:15:10.650
ein ‚Miner‘ muss daran arbeiten. Jeder
Miner arbeitet natürlich für sich selbst
00:15:10.650 --> 00:15:14.540
daran, einen neuen Block zu erstellen.
Wir sehen hier, der Block an dem der Miner
00:15:14.540 --> 00:15:19.991
arbeitet, ist hier so gestrichelt
markiert. Und dann, wenn der Miner
00:15:19.991 --> 00:15:23.920
daran arbeitet, kommen neue Transaktionen
rein. Und irgendwann gelingt es dem Miner
00:15:23.920 --> 00:15:27.910
den Block fertigzustellen. In dem Moment
veröffentlicht er den Block zusammen mit
00:15:27.910 --> 00:15:31.440
dem Proof-of-Work im Netzwerk. Der wird
vom Netzwerk anerkannt, und der Miner
00:15:31.440 --> 00:15:39.740
beginnt sofort an einem neuen Block zu
arbeiten, und das geht dann halt so weiter.
00:15:39.740 --> 00:15:43.990
Nun, die Funktion die wir brauchen um das
Erstellen der Blöcke schwierig zu machen
00:15:43.990 --> 00:15:49.730
muss einige Bedingungen erfüllen. Sie
muss natürlich schwierig sein zu lösen.
00:15:49.730 --> 00:15:53.110
Dann muss aber… obwohl es lange gehen
muss die zu erstellen, muss es sehr
00:15:53.110 --> 00:15:56.580
einfach sein, das Ergebnis zu prüfen.
Also wenn ich einen Block erhalte, und
00:15:56.580 --> 00:16:00.460
den passenden Proof-of-Work, muss
ich – zack! – sofort sagen können,
00:16:00.460 --> 00:16:03.390
der Proof-of-Work ist gültig oder nicht,
weil ich will ja entscheiden, ob das
00:16:03.390 --> 00:16:07.500
Teil meines Zustandes
sein soll oder nicht.
00:16:07.500 --> 00:16:11.960
Und dann ist es wichtig, dass die
Funktion abhängt von genau dem Block,
00:16:11.960 --> 00:16:15.230
für den sie erstellt wird. Also der
Proof-of-Work soll nur genau
00:16:15.230 --> 00:16:19.140
für den einen Block gültig sein.
Das ist sehr wichtig, denn ansonsten
00:16:19.140 --> 00:16:23.589
könnte Malroy auf Vorrat über
mehrere Wochen hinweg einfach
00:16:23.589 --> 00:16:27.220
Proof-of-Works erstellen und dann die
einfach an einen Block ranflanschen,
00:16:27.220 --> 00:16:31.810
und so in kurzer Zeit trotzdem wieder
eine lange Kette erstellen. Wenn aber
00:16:31.810 --> 00:16:37.150
der Proof-of-Work direkt abhängig ist
vom Block für den er erstellt wird,
00:16:37.150 --> 00:16:40.150
dann muss Malroy mit dem Erstellen
des Proof-of-Work so lange warten,
00:16:40.150 --> 00:16:44.290
bis der vorhergehende Block bekannt
ist und damit auch ihm bekannt ist,
00:16:44.290 --> 00:16:47.360
was er jetzt in den neuen Block packt.
00:16:47.360 --> 00:16:52.010
Und dann soll es auch noch möglich sein,
die Schwierigkeit der Aufgabe zu variieren.
00:16:52.010 --> 00:16:56.110
Denn damit das System als stabiles
Finanzsystem funktioniert, möchte ich
00:16:56.110 --> 00:16:59.250
gerne wissen, wie lange es geht von
dem Moment wo ich eine Transaktion
00:16:59.250 --> 00:17:04.409
veröffentliche bis sie Teil des Zustandes
wird. Und wenn das Netzwerk
00:17:04.409 --> 00:17:08.000
sehr viel mehr Rechenkraft hat, dann
geht es plötzlich schneller, neue Blöcke
00:17:08.000 --> 00:17:11.179
zu erstellen und dann will ich diese
Schwierigkeit anpassen können, damit es
00:17:11.179 --> 00:17:16.660
wieder länger geht. Nun jetzt, wo
das Mining nicht mehr einfach ist,
00:17:16.660 --> 00:17:20.169
und es aufwendig ist, müssen wir irgendwie
einen Incentive haben, damit die Leute
00:17:20.169 --> 00:17:25.089
es auch tun – also irgendeinen Anstoß.
So und wir sagen halt, der Miner,
00:17:25.089 --> 00:17:29.020
dem es gelingt einen Block zu erstellen,
der bekommt eine Belohnung,
00:17:29.020 --> 00:17:34.350
den sogenannten ‚Block Reward‘, und wir
implementieren das, indem wir sagen,
00:17:34.350 --> 00:17:38.010
der Miner darf für sich selbst eine
zusätzliche Transaktion in den Block
00:17:38.010 --> 00:17:41.999
hineinpacken, und mit dieser Transaktion
überweist er sich selbst Geld
00:17:41.999 --> 00:17:45.809
aus dem Nichts heraus. Wo das
Geld herkommt: Es gibt eigentlich
00:17:45.809 --> 00:17:48.779
zwei Möglichkeiten, die populär sind.
Entweder sagen wir, das sind
00:17:48.779 --> 00:17:53.110
die Überweisungsgebühren der anderen
Transaktionen in dem Block.
00:17:53.110 --> 00:17:57.540
Oder dann sagen wir halt, das ist Geld,
welches neu geschaffen wird. Wir haben ja
00:17:57.540 --> 00:18:02.670
vorhin gesehen, wir haben einen leeren
Zustand als den Ursprungszustand definiert,
00:18:02.670 --> 00:18:06.069
und wenn wir das so tun, muss das
Geld, welches die Leute ausgeben,
00:18:06.069 --> 00:18:10.250
irgendwo herkommen. Und das ist halt eine
Möglichkeit, Geld in das System zu bringen,
00:18:10.250 --> 00:18:14.559
die nicht von einer zentralen Stelle
kontrolliert wird, und eigentlich
00:18:14.559 --> 00:18:21.290
eine faire Möglichkeit.
Etwas weiteres ist, dass…
00:18:21.290 --> 00:18:25.290
diese zusätzliche Transaktion macht
den Block natürlich individuell, denn
00:18:25.290 --> 00:18:29.770
jeder Miner wird das Geld an sich selbst
zu überweisen versuchen und, also,
00:18:29.770 --> 00:18:35.130
diese eine Transaktion wird für jeden
Miner anders sein. Und das stellt sicher,
00:18:35.130 --> 00:18:39.599
dass die alle an einem ein wenig anderen
Problem arbeiten. Wenn die alle
00:18:39.599 --> 00:18:43.659
versuchen würden, das genau selbe Problem
zu lösen, auf die genau selbe Art,
00:18:43.659 --> 00:18:47.809
dann würde es immer demjenigen als erstes
gelingen, der die meiste Rechenkraft hat,
00:18:47.809 --> 00:18:51.679
und das wollen wir nicht, denn dann würde
ja eine Person alle Blöcke erzeugen,
00:18:51.679 --> 00:18:54.570
und wir wollen ja, dass viele Personen
Blöcke erzeugen, damit das niemand
00:18:54.570 --> 00:18:59.830
zensieren kann. Dadurch, dass das Problem,
an welchem sie arbeiten, für jeden Miner
00:18:59.830 --> 00:19:02.749
etwas anders ist, gelingt es halt
zwischendurch auch jemandem
00:19:02.749 --> 00:19:06.879
mit weniger Rechenkraft, als erstes eine
Lösung zu finden. Und in der Praxis
00:19:06.879 --> 00:19:12.159
geht das dann ganz gut, dass wir sagen
können, wer 20% der Rechenkraft hat
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
00:19:15.559 --> 00:19:21.210
zu finden. Dann muss der Miner halt
noch entscheiden, an welchem Block
00:19:21.210 --> 00:19:25.399
er arbeiten will. Aber der Miner will ja…
also an welchem Ende der Kette…
00:19:25.399 --> 00:19:29.129
Wir haben vorhin gesehen, es kann sein,
dass diese Ketten mehrere Enden haben.
00:19:29.129 --> 00:19:33.730
Aber das ist ganz einfach, denn der Miner
will ja den Reward kriegen. Der Reward ist
00:19:33.730 --> 00:19:37.719
eine Transaktion, welche nur dann
Teil des Zustandes wird wenn es Teil
00:19:37.719 --> 00:19:40.740
in einem Block ist, wenn es Teil der
längsten Kette ist. Und der Block ist
00:19:40.740 --> 00:19:44.249
nur dann Teil der längsten Kette wenn
er an diesem Ende angesetzt wird.
00:19:44.249 --> 00:19:49.039
Also arbeiten alle Miner am Ende der
längsten Kette. So, jetzt habe ich
00:19:49.039 --> 00:19:52.970
versprochen, dass wir so den Double-Spend
verhindern können, von vorhin.
00:19:52.970 --> 00:19:57.389
Wollen wir mal gucken, ob das geht!
Das Szenario ist wieder dasselbe.
00:19:57.389 --> 00:20:03.290
Malroy will das Fahrrad klauen,
im Laden von Alice.
00:20:03.290 --> 00:20:08.760
Der Unterschied ist, dass das Netzwerk
arbeiten muss um die Blöcke zu erstellen.
00:20:08.760 --> 00:20:13.090
Und dann geht es wieder so vonstatten.
Malroy erstellt jetzt zwei Transaktionen.
00:20:13.090 --> 00:20:17.110
Eine, um das Geld der Alice zu überweisen.
Diese Transaktion macht er öffentlich
00:20:17.110 --> 00:20:20.550
im Netzwerk, damit die von allen gesehen
werden kann. Und eine Transaktion,
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
00:20:25.330 --> 00:20:29.350
der vorhergehende Block fertiggestellt,
und sofort fängt das Netzwerk an
00:20:29.350 --> 00:20:34.220
den nächsten Block zu erstellen. Das
Netzwerk enthält in dem Block natürlich
00:20:34.220 --> 00:20:37.750
die Transaktion von Malroy an Alice,
denn das ist ja die einzige Transaktion
00:20:37.750 --> 00:20:42.129
die dem Netzwerk bekannt ist. Und
Malroy arbeitet jetzt ganz alleine daran,
00:20:42.129 --> 00:20:47.579
den alternativen Block zu erstellen. In
dem die andere Transaktion enthalten ist.
00:20:47.579 --> 00:20:51.539
Jetzt ist es aber so: das Netzwerk hat
natürlich mehr Rechenkraft als Malroy
00:20:51.539 --> 00:20:56.659
allein. Der hat halt nicht so viele
Computer. Und deshalb wird das Netzwerk
00:20:56.659 --> 00:21:01.340
immer schneller sein darin, neue Blöcke
zu erstellen als Malroy. Malroys Kette
00:21:01.340 --> 00:21:06.169
wird nie die längste Kette, wird nie Teil
des Zustands. Und der Angriff wurde
00:21:06.169 --> 00:21:13.779
erfolgreich abgewehrt. Die einzige Art
und Weise wie Malroy gewinnen könnte,
00:21:13.779 --> 00:21:17.639
also wie Malroy den Angriff trotzdem
durchführen könnte, wäre, wenn er
00:21:17.639 --> 00:21:21.899
schneller Blöcke erstellen könnte als
das Netzwerk. Und das wird ihm aber
00:21:21.899 --> 00:21:25.909
nur dann gelingen, wenn er mehr als
50% der Rechenkraft im Netzwerk hätte.
00:21:25.909 --> 00:21:28.679
Denn dann wäre die Wahrscheinlichkeit,
dass er einen Block findet, höher
00:21:28.679 --> 00:21:33.469
als bei allen anderen Minern gemeinsam.
Und dann könnte er das tun. Und deshalb
00:21:33.469 --> 00:21:40.500
spricht man bei Bitcoin und anderen
Kryptowährungen von diesen 50%-Attacken.
00:21:40.500 --> 00:21:43.769
So, jetzt gibt es noch eine andere Art,
einen Double-Spend auszuführen. Das ist
00:21:43.769 --> 00:21:49.020
ein etwas schwierigerer Angriff.
Und er hat jetzt damit zu tun, wie
00:21:49.020 --> 00:21:53.429
das Peer-to-Peer-Netzwerk funktioniert,
das wir brauchen um die Transaktionen
00:21:53.429 --> 00:22:01.279
und Blöcke zu verteilen. Jetzt ist der
Angriff ein wenig schwieriger, also
00:22:01.279 --> 00:22:05.330
muss Malroy etwas wertvolleres stehlen.
Er geht zu Bob. Bob verkauft Autos.
00:22:05.330 --> 00:22:09.520
Er wird versuchen ein Auto zu stehlen.
Und um das zu tun, wird er versuchen
00:22:09.520 --> 00:22:13.210
die Verbindung von Bob mit dem
Peer-to-Peer-Netzwerk zu kontrollieren.
00:22:13.210 --> 00:22:17.260
Wir sehen hier, Bob ist mit dem Netzwerk
verbunden. Mit diesen drei Peers. Und
00:22:17.260 --> 00:22:21.710
Malroy hat zwei Möglichkeiten: entweder
er kontrolliert die Internetverbindung
00:22:21.710 --> 00:22:26.490
von Bob. Oder dann kontrolliert er
halt die drei Nodes, mit denen Bob
00:22:26.490 --> 00:22:30.400
verbunden ist. Wie realistisch das ist,
das will ich hier nicht diskutieren.
00:22:30.400 --> 00:22:34.820
Grundsätzlich ist es ja schon
vorstellbar. Und jetzt hat Malroy
00:22:34.820 --> 00:22:39.190
einige interessante Möglichkeiten. Er kann
jetzt nämlich kontrollieren, welche Blöcke
00:22:39.190 --> 00:22:43.330
und Transaktionen der Bob sieht.
Also Transaktionen und Blöcke,
00:22:43.330 --> 00:22:47.710
welche auf dem Netzwerk erscheinen,
kann Malroy quasi vor Bob geheimhalten.
00:22:47.710 --> 00:22:52.059
Und er kann Bob auch Transaktionen und
Blöcke präsentieren, die er dem Rest
00:22:52.059 --> 00:22:57.920
des Netzwerkes nicht präsentiert.
So, das ist der Angriff. Wir sehen,
00:22:57.920 --> 00:23:01.880
was das Netzwerk sieht.
Links und rechts, was Bob sieht.
00:23:01.880 --> 00:23:06.929
Am Anfang ist das natürlich an beiden
Orten gleich. Jetzt geht der Malroy
00:23:06.929 --> 00:23:12.230
zu dem Bob und wird das Auto kaufen.
Er macht eine Transaktion.
00:23:12.230 --> 00:23:15.850
Er macht zwei Transaktionen. Eine,
um das Geld an Bob zu überweisen.
00:23:15.850 --> 00:23:19.480
Diese schickt er nur an Bob. Und
versteckt sie vor dem Netzwerk.
00:23:19.480 --> 00:23:23.960
Und eine zweite Transaktion, mit der er
das Geld wieder an sich selbst überweist.
00:23:23.960 --> 00:23:28.480
Diese Transaktion veröffentlicht er im
Netzwerk. Jetzt wird das Netzwerk
00:23:28.480 --> 00:23:33.950
daran arbeiten, einen Block zu erstellen,
mit der Transaktion von Malroy zu Malroy.
00:23:33.950 --> 00:23:38.990
Weil das Netzwerk kennt keine andere
Transaktion. Und Malroy allein arbeitet
00:23:38.990 --> 00:23:44.750
daran einen Block zu erstellen, mit
dem er das Geld an Bob überweist.
00:23:44.750 --> 00:23:48.130
Natürlich wiederum, das Netzwerk hat viel
mehr Rechenkraft, es ist viel schneller
00:23:48.130 --> 00:23:51.549
darin, neue Blöcke zu erstellen. So, und
00:23:51.549 --> 00:23:56.149
schlussendlich gelingt es dann aber Bob
[Malroy!] trotzdem, einen Block zu erstellen.
00:23:56.149 --> 00:23:59.690
Und alle diese Blöcke die auf dem Netzwerk
erstellt wurden – muss man vielleicht
00:23:59.690 --> 00:24:05.350
noch sagen – die hält der Malroy vor Bob
geheim. Also, alle diesen neuen Blöcke,
00:24:05.350 --> 00:24:08.919
die hat Bob nie gesehen. Und deshalb
wird Bob diesen einen Block von Malroy
00:24:08.919 --> 00:24:13.269
als die längste Kette von Blöcken
akzeptieren. Und jetzt ist die Transaktion
00:24:13.269 --> 00:24:18.469
von Malroy an Bob Teil von Bobs
Zustand. Er gibt Malroy das Auto.
00:24:18.469 --> 00:24:25.210
Malroy fährt davon. Er beendet die
Attacke. Und jetzt verbindet sich Bob
00:24:25.210 --> 00:24:29.339
wieder ganz normal mit dem Netzwerk.
Die beiden Ketten werden synchronisiert.
00:24:29.339 --> 00:24:33.410
Und wir sehen, in der schlussendlich
resultierenden Kette hat Bob das Geld
00:24:33.410 --> 00:24:41.690
nicht erhalten. Malroy hat also das
Auto erfolgreich stehlen können.
00:24:41.690 --> 00:24:45.690
Das ist gar nicht gut. Jetzt hat ja dieser
Angriff funktioniert. Oder hat er das
00:24:45.690 --> 00:24:52.659
denn wirklich? Denn diesmal war der
Angriff erfolgreich. Aber Malroy musste
00:24:52.659 --> 00:24:56.519
jetzt dafür arbeiten. Er musste diesen
einen Block erstellen. Und das hat ihn
00:24:56.519 --> 00:25:00.400
viel Zeit gekostet. Natürlich kostet
es ihn auch irgendwie Rechenkraft,
00:25:00.400 --> 00:25:03.440
und den Strom den er braucht um seinen
Computer zu betreiben. Das wollen wir
00:25:03.440 --> 00:25:07.360
jetzt aber gar nicht mit einbeziehen.
Sondern wir schauen jetzt nach diesen
00:25:07.360 --> 00:25:11.509
Dings die Zeit gekostet. Denn der Malroy
hat ja einen Computer, den er braucht,
00:25:11.509 --> 00:25:15.760
um die Blöcke zu erstellen. Und dieser
Computer kann immer nur eines auf’s Mal
00:25:15.760 --> 00:25:20.290
tun. Entweder erstellt er jetzt diesen
Fake-Block für Bob, oder er erstellt
00:25:20.290 --> 00:25:25.789
richtige Blöcke auf die richtige Chain.
Er kann nicht beides auf’s Mal tun.
00:25:25.789 --> 00:25:31.750
So, und das macht es sehr, sehr
teuer diesen Angriff durchzuführen.
00:25:31.750 --> 00:25:35.759
Stellen wir uns vor… das sind jetzt einfach
irgendwelche Annahmewerte für unser
00:25:35.759 --> 00:25:39.379
Netzwerk… die sind da halt in jeder
Kryptowährung etwas anders definiert.
00:25:39.379 --> 00:25:44.730
Sagen wir, unser Netzwerk erzeugt einen
Block alle zehn Minuten. Der Block Reward,
00:25:44.730 --> 00:25:49.700
welchen der Miner kriegt ist 1000 Euro.
Und Malroy hätte jetzt 20% der Rechenkraft
00:25:49.700 --> 00:25:54.691
des Netzwerkes. Wenn wir sagen 100% der
Rechenkraft erzeugt alle zehn Minuten.
00:25:54.691 --> 00:26:00.309
einen Block, dann erzeugt Malroy auf
sich alleine gestellt nur alle 50 Minuten
00:26:00.309 --> 00:26:06.409
einen Block. D.h. der Angriff auf Bob
dauert 50 Minuten. Nun, wenn aber Malroy
00:26:06.409 --> 00:26:12.000
50 Minuten lang minen würde, anstatt Bob
anzugreifen, dann würde er in dieser Zeit
00:26:12.000 --> 00:26:16.289
durchschnittlich 1000 Euro verdienen.
Er kann sich jetzt also entscheiden,
00:26:16.289 --> 00:26:22.590
entweder greift er Bob an und stiehlt das
23.000 Euro teure Auto, oder er verdient
00:26:22.590 --> 00:26:26.470
mit fairem Mining 1000 Euro.
Natürlich wird er dieses Auto immer noch
00:26:26.470 --> 00:26:31.810
stehlen wollen. Der Mechanismus, um
das zu verhindern ist aber ganz einfach.
00:26:31.810 --> 00:26:36.419
Wir sagen jetzt, Bob gibt dem
Malroy das Auto nicht, sobald Bob
00:26:36.419 --> 00:26:41.259
das Geld erhalten hat, sondern er
wartet dann noch einige Blöcke.
00:26:41.259 --> 00:26:43.849
Das sieht dann in etwa so aus. Ich habe
jetzt nicht genügend Blöcke gemalt,
00:26:43.849 --> 00:26:49.279
weil die da nicht Platz hatten.
Also sagen wir halt, wir sehen
00:26:49.279 --> 00:26:54.510
auf der rechten Seite, wo die
Transaktion Teil des Zustandes wird.
00:26:54.510 --> 00:26:59.609
Und in diesem Moment gibt halt der
Bob das Auto noch nicht an Malroy,
00:26:59.609 --> 00:27:05.179
sondern erst einige Blöcke später. Und
für jeden zusätzlichen Block, den Malroy
00:27:05.179 --> 00:27:08.039
erstellen muss, um Bob davon zu
überzeugen, dass das jetzt wirklich
00:27:08.039 --> 00:27:12.230
die richtige Kette ist, muss Malroy
weitere 50 Minuten aufwenden,
00:27:12.230 --> 00:27:17.580
und das kostet ihn jedesmal 1000 Euro.
Wenn also Bob sagt: „Ich warte 24 Blöcke
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
00:27:22.530 --> 00:27:27.360
als das Auto einen Wert hat. Und dadurch
kann Bob den Angriff verhindern.
00:27:27.360 --> 00:27:31.179
Malroy kann den zwar immer noch
durchführen, aber es ist schlicht einfach
00:27:31.179 --> 00:27:35.069
nicht interessant für Malroy das zu tun,
weil er mehr Geld macht wenn er
00:27:35.069 --> 00:27:44.739
in der selben Zeit mint. So. Jetzt haben
wir viel gesprochen über generische
00:27:44.739 --> 00:27:48.580
Konzepte von Blockchains. Jetzt will
ich noch etwas dazu sagen, wie das
00:27:48.580 --> 00:27:53.820
in Bitcoin implementiert wird. Zumindest
einige der Dinge. Schauen wir uns zuerst
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
00:27:58.499 --> 00:28:03.340
zu definieren. Das tun wir überall,
irgendwie, in unseren Netzwerkprotokollen;
00:28:03.340 --> 00:28:07.799
in Nachrichten und Dateiformaten
sagen wir, der Body enthält den Inhalt,
00:28:07.799 --> 00:28:12.049
die eigentlichen Daten. Und der Header
enthält die Metadaten. Und genau dasselbe
00:28:12.049 --> 00:28:17.390
tun wir auch in unseren Blockchains. In
Bitcoin ist es so, der Body eines Blockes
00:28:17.390 --> 00:28:22.500
enthält alle Transaktionen. Die sind dort
geordnet aufgeführt. Der Miner muss
00:28:22.500 --> 00:28:29.130
einige Regeln einhalten, wenn er das
macht. Z.B. wenn Transaktion B
00:28:29.130 --> 00:28:32.460
von Transaktion A abhängt, die beide
im selben Block sind, müssen die
00:28:32.460 --> 00:28:36.190
in der richtigen Reihenfolge drin sein.
Aber sonst kann der die irgendwie
00:28:36.190 --> 00:28:40.350
dort einpacken. Aber sobald er das mal
gemacht hat, ist dann… diese Reihenfolge
00:28:40.350 --> 00:28:44.739
ist anschließend wichtig. Und die erste
Transaktion im Block ist jeweils
00:28:44.739 --> 00:28:47.750
die coin-based-Transaktion,
mit der sich der Miner
00:28:47.750 --> 00:28:53.019
den Block Reward überweist.
00:28:53.019 --> 00:28:59.000
Um jetzt diesen Body zu verbinden mit dem
Header nutzt Bitcoin einen Merkle Tree.
00:28:59.000 --> 00:29:02.249
Das ist ein binärer Baum,
00:29:02.249 --> 00:29:08.470
bei dem jeweils… der Node ist der
hash der konkatenierten Werte
00:29:08.470 --> 00:29:11.480
der Children des Nodes.
00:29:11.480 --> 00:29:15.049
Und Bitcoin verwendet fast überall…
wo Bitcoin Hashes macht,
00:29:15.049 --> 00:29:17.990
wenden sie einen – dhash nennen sie das,
00:29:17.990 --> 00:29:22.979
das ist ein double-sha256-Hash, also
so nennt sich der Hash eines Hashes
00:29:22.979 --> 00:29:27.700
eines Wertes, den sie nehmen. Das
sieht dann so aus: wir haben unseren Body
00:29:27.700 --> 00:29:31.539
des Blocks. Dann erstellen wir für
jede Transaktion den double-hash.
00:29:31.539 --> 00:29:34.710
Und dann beginnen wir damit, den Tree
zu erstellen. Also auf jeden Node,
00:29:34.710 --> 00:29:40.629
für jeden blauen Node konkatenieren wir
die beiden grünen Nodes, und machen dann
00:29:40.629 --> 00:29:44.410
den Hash davon. Das machen wir für
jede Ebene, bis wir schlussendlich
00:29:44.410 --> 00:29:49.850
beim Merkle Root angelangen, und der
wird dann Teil des Block Headers.
00:29:49.850 --> 00:29:53.879
Und der Block Header enthält diese Dinge:
die Version – das ist irgendwie
00:29:53.879 --> 00:29:58.480
eine arbitrary Nummer, die von den
Entwicklern von Zeit zu Zeit geändert wird,
00:29:58.480 --> 00:30:01.809
wenn sie irgendwie finden,
dass wird jetzt Zeit dafür.
00:30:01.809 --> 00:30:05.559
Dann den Previous Block Hash. Wir haben
gesehen, die Blöcke verweisen jeweils
00:30:05.559 --> 00:30:09.199
auf den vorhergehenden Block. Das ist
in Bitcoin so gelöst, dass der Header
00:30:09.199 --> 00:30:13.069
eines Blocks den Hash des vorhergehenden
Blocks enthält. Also auch hier wieder
00:30:13.069 --> 00:30:18.730
den double-hash. Den Merkle Root haben
wir bereits gesehen. Dann enthält
00:30:18.730 --> 00:30:22.460
der Block-Header noch einen Time Stamp.
Das sind ziemlich komplizierte Regeln,
00:30:22.460 --> 00:30:26.780
wonach dieser Time Stamp gebildet
wird, aber das ist egal. Das ist
00:30:26.780 --> 00:30:31.850
nicht so wichtig. Die ‚Difficulty‘ ist ein
Ausdruck dafür wie schwierig es war
00:30:31.850 --> 00:30:35.989
den Proof-of-Work für diesen bestimmten
Block zu definieren. Und die ‚Nonce‘
00:30:35.989 --> 00:30:43.579
ist ein Wert der gebraucht wird zum Minen.
00:30:43.579 --> 00:30:48.359
Ja und der Proof-of-Work in Bitcoin ist
nichts anderes als der Hash des Blocks.
00:30:48.359 --> 00:30:53.139
Und der muss dann eine Bedingung
erfüllen. Und zwar muss dieser Hash
00:30:53.139 --> 00:30:58.580
mit einer gewissen Anzahl Nullen beginnen.
Also ich nehme den Header des Blocks
00:30:58.580 --> 00:31:04.359
und bilde den double-hash davon.
Und dann müssen die ersten paar Bits
00:31:04.359 --> 00:31:08.559
von diesem Hash müssen Null sein. Und
wieviele Bits das sind, das ist dann eben
00:31:08.559 --> 00:31:13.470
die variable Schwierigkeit. Also wenn
ich mehr Nullen haben muss zu Beginn
00:31:13.470 --> 00:31:16.970
dann ist es schwieriger den Proof-of-Work
zu erstellen. Und bei weniger
00:31:16.970 --> 00:31:22.229
natürlich einfacher. Das Mining
funktioniert dann so dass… der Miner
00:31:22.229 --> 00:31:25.919
nimmt einfach mal diesen Header,
und bildet den double-hash davon.
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.
00:31:29.919 --> 00:31:34.210
Und dann inkrementiert er halt die nonce,
dadurch hat sich der Header verändert,
00:31:34.210 --> 00:31:39.109
er bildet wieder den hash davon, und prüft
das. Und so macht er immer weiter.
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
00:31:45.509 --> 00:31:50.249
ist wesentlich größer. Es kann also gut
sein, dass einfach durch das Inkrementieren
00:31:50.249 --> 00:31:55.130
der Nonce kein passender Proof-of-Work
gefunden wird. Und in dem Fall wird
00:31:55.130 --> 00:32:00.949
der Miner die coin-based Transaktion
verändern. Und zwar hat diese coin-based
00:32:00.949 --> 00:32:05.450
Transaktion hat den Transaction Input,
der wird bei einer normalen Transaktion
00:32:05.450 --> 00:32:09.729
dafür gebraucht zu beschreiben, woher
das Geld kommt in dieser Transaktion.
00:32:09.729 --> 00:32:14.229
Das hat die coin-based nicht, denn die
macht ja quasi Geld aus dem Nichts heraus,
00:32:14.229 --> 00:32:18.179
und den Wert in diesem Fall kann
dann der Miner frei beeinflussen.
00:32:18.179 --> 00:32:22.239
Dadurch ändert sich der Hash dieser
Transaktion, und das setzt sich dann
00:32:22.239 --> 00:32:27.799
durch den Merkle Tree hindurch fort bis
es quasi auch den Merkle Root verändert.
00:32:27.799 --> 00:32:32.679
Und dadurch ist der ganze Blockheader
wieder verändert und der Miner
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
00:32:37.799 --> 00:32:41.700
ein korrekter Proof-of-Work ist. Ich nehme
einfach diesen Blockheader und bilde
00:32:41.700 --> 00:32:48.449
den Hash und schaue ob das so stimmt.
00:32:48.449 --> 00:32:53.330
Das Bitcoin-Netzwerk versucht alle zehn
Minuten einen neuen Block zu erstellen.
00:32:53.330 --> 00:32:57.519
Um diese Zeit stabil zu halten,
wird die Schwierigkeit im Netzwerk
00:32:57.519 --> 00:33:02.899
alle 14 Tage, also alle 2016 Blöcke,
angepasst, mit einem Algorithmus
00:33:02.899 --> 00:33:10.539
wo jeder Miner feststellen kann wie weit
muss ich jetzt die Schwierigkeit verändern.
00:33:10.539 --> 00:33:14.379
Die coin-based Transaktion, mit der
sich der Miner Geld überweist,
00:33:14.379 --> 00:33:18.039
enthält in Bitcoin zwei Dinge:
einerseits die Transaction Fees, also
00:33:18.039 --> 00:33:24.759
die Transaktionsgebühren der Transaktion
in den Block; und anderseits auch noch
00:33:24.759 --> 00:33:29.500
neue Bitcoin, die neu ins System kommen.
Das waren ursprünglich 50 Bitcoin pro Block,
00:33:29.500 --> 00:33:34.619
heute sind es noch 12,5, der
Wert halbiert sich alle vier Jahre.
00:33:34.619 --> 00:33:38.509
Das war das letzte Mal in diesem Sommer,
da hat sich der Wert halbiert. Seither
00:33:38.509 --> 00:33:47.810
gibt es nur noch 12,5 Bitcoin
für einen neuen Block.
00:33:47.810 --> 00:33:51.999
Jetzt wollen wir noch uns anschauen
wie wir ‚Light Clients‘ bauen können.
00:33:51.999 --> 00:33:56.509
Bitcoin kennt eigentlich mehr oder weniger,
drei Arten von Clients: ein ‚Full Node‘
00:33:56.509 --> 00:34:02.589
ist ein Client, welcher die
gesamte Blockchain speichert.
00:34:02.589 --> 00:34:06.630
Der überprüft jede eingehende
Transaktion, jeden eingehenden Block
00:34:06.630 --> 00:34:10.639
überprüft dieser Client, ob der auch
wirklich valide ist. Und er tut noch
00:34:10.639 --> 00:34:14.119
etwas anderes, nämlich er seeded diese
Blöcke die er hat an das Netzwerk.
00:34:14.119 --> 00:34:17.800
Also wenn jemand kommt und sagt:
„Ich hätte gern einen Block“ dann gibt
00:34:17.800 --> 00:34:22.149
der Full Node diesen Block raus. Dann gibt
es ‚Pruning Clients‘. Der macht eigentlich
00:34:22.149 --> 00:34:27.940
das genau selbe wie der Full Node.
Also der überprüft auch alle Transaktionen
00:34:27.940 --> 00:34:32.520
und alle Blöcke. Aber der speichert jetzt
halt nicht die ganze Blockchain, sondern
00:34:32.520 --> 00:34:35.550
wenn er findet „den Block brauche ich
nicht mehr“, dann löscht er den.
00:34:35.550 --> 00:34:39.100
Und das macht dem Client Speicherplatz.
Der braucht aber immer noch
00:34:39.100 --> 00:34:43.580
sehr viel Rechenkraft und sehr viel
Bandbreite, deutlich zuviel als dass ich
00:34:43.580 --> 00:34:48.130
das auf meinem Smartphone laufen lassen
möchte. Und deshalb gibt es noch
00:34:48.130 --> 00:34:53.520
die Light Clients oder SPV Clients.
Die dann auch geeignet sind,
00:34:53.520 --> 00:34:56.980
um [sie] auf einem mobilen Gerät laufen
zu lassen. Und wie die funktionieren,
00:34:56.980 --> 00:35:01.210
will ich jetzt noch besprechen.
00:35:01.210 --> 00:35:05.590
Ein Light Client oder ein SPV Client,
was der tut zuerst ist, er lädt
00:35:05.590 --> 00:35:09.020
die Header aller Blöcke herunter. Wir
haben ja gesehen, der Proof-of-Work
00:35:09.020 --> 00:35:15.420
ist der Hash des Block Headers. D.h.
um den Proof-of-Work zu kontrollieren
00:35:15.420 --> 00:35:18.760
brauche ich nicht den gesamten
Block, der Block Header genügt.
00:35:18.760 --> 00:35:23.230
Und dasselbe gilt auch für die
Verknüpfung der Blöcke untereinander.
00:35:23.230 --> 00:35:26.390
Welches der vorhergehende Block
ist, das steht ja auch im Header.
00:35:26.390 --> 00:35:30.510
D.h. auch für diese Funktion brauche ich
nicht die ganzen Blöcke herunterzuladen.
00:35:30.510 --> 00:35:35.450
Und so kann ich korrekt
die längste Kette erstellen,
00:35:35.450 --> 00:35:40.350
innerhalb des Netzwerks, indem
ich nur die Header herunterlade.
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.
00:35:45.560 --> 00:35:52.350
Die brauchen mehr als 95 GB Speicherplatz.
Wenn man dann noch TX Index aktiviert
00:35:52.350 --> 00:35:56.230
sind es, glaube ich, so um die
110 GB Speicherplatz, die es braucht.
00:35:56.230 --> 00:36:00.450
Das ist natürlich blödsinnig viel auf einem
Smartphone. Aber nur die Block Headers,
00:36:00.450 --> 00:36:03.730
alle Block Headers von diesen
450.000 Blöcken, die passen
00:36:03.730 --> 00:36:10.180
in deutlich weniger als 100 MB rein. Und
das ist dann durchaus ein realistischer Wert,
00:36:10.180 --> 00:36:14.940
dass ich das auf einem Smartphone habe.
Das zweite Konzept ist der Merkle Branch,
00:36:14.940 --> 00:36:18.540
und das ist dann eigentlich noch fast
die interessantere Funktion, die uns
00:36:18.540 --> 00:36:22.790
der Merkle Tree bildet. Und damit kann
jeder beweisen, dass eine Transaktion
00:36:22.790 --> 00:36:26.770
tatsächlich Teil des Zustands ist.
00:36:26.770 --> 00:36:30.650
Nun, die eine Möglichkeit, wie wir den
Merkle Tree nachbauen können,
00:36:30.650 --> 00:36:35.210
ist natürlich, indem wir den Block
Body herunterladen, und dann
00:36:35.210 --> 00:36:39.580
den ganzen Merkle Tree bauen.
Wenn ich jetzt aber nur beweisen will
00:36:39.580 --> 00:36:44.200
dass eine Transaktion Teil des Blockes
ist, gibt es eine effizientere Möglichkeit.
00:36:44.200 --> 00:36:47.950
Angenommen ich will jetzt beweisen,
dass die Transaktion (3) tatsächlich
00:36:47.950 --> 00:36:51.920
Teil des Blocks ist. Dann brauche ich
nicht alle Transaktionen herunterzuladen,
00:36:51.920 --> 00:36:57.760
sondern es reicht diese Transaktion (3)
herunterzuladen. – Ui, das war falsch. –
00:36:57.760 --> 00:37:01.480
Und dann die restlichen Hashes,
also von jeder Ebene des Baums
00:37:01.480 --> 00:37:04.480
lade ich einen Hash herunter.
Und damit kann ich jetzt
00:37:04.480 --> 00:37:11.420
den Merkle Root Node wieder nachbilden,
und so feststellen, dass diese Transaktion
00:37:11.420 --> 00:37:15.890
tatsächlich Teil des Blocks ist.
Das ist genau das was…
00:37:15.890 --> 00:37:19.150
das hat jetzt natürlich auch einige
Vorteile. Ich brauche jetzt
00:37:19.150 --> 00:37:23.520
weniger Elemente herunterzuladen, und
ich kann halt Hashes herunterladen, also
00:37:23.520 --> 00:37:27.110
anstatt Transaktionen. Vorhin in dem
Beispiel hat das nicht soviel gebracht.
00:37:27.110 --> 00:37:30.371
Aber wenn wir einen Block nehmen
mit 1600 Transaktionen, das ist
00:37:30.371 --> 00:37:34.880
dieser Tage durchaus ein üblicher Block,
dann brauche ich jetzt zum Validieren
00:37:34.880 --> 00:37:38.810
nicht mehr 1600 Transaktionen
herunterzuladen, sondern es genügt
00:37:38.810 --> 00:37:42.400
eine Transaktion herunterzuladen und
dann elf Hashes, und damit kann ich
00:37:42.400 --> 00:37:47.270
den Merkle Branch nachbauen.
00:37:47.270 --> 00:37:52.640
Und so funktioniert ein SPV Client. SPV
steht für ‚simple payment verification‘.
00:37:52.640 --> 00:37:56.660
Und das hat eigentlich… das wurde schon
im White Paper zu Bitcoin beschrieben,
00:37:56.660 --> 00:38:00.890
wie das funktioniert. Alles was der
tun muss, um zu beweisen, dass
00:38:00.890 --> 00:38:04.950
eine Transaktion reingekommen ist, ist,
er lädt zuerst alle Block Header herunter,
00:38:04.950 --> 00:38:10.320
wie vorhin besprochen, er bildet
den längsten Branch daraus,
00:38:10.320 --> 00:38:15.580
dann lädt er eine Transaktion herunter.
Und wenn ich jetzt wissen will…
00:38:15.580 --> 00:38:18.331
wenn ich von jemandem Geld erhalte und
ich will jetzt zeigen, ich habe das Geld
00:38:18.331 --> 00:38:22.610
tatsächlich erhalten, lade ich halt diese
Transaktion herunter, und dann lade ich
00:38:22.610 --> 00:38:27.110
den passenden Merkle Branch herunter.
Und jetzt kann ich quasi zeigen, dass
00:38:27.110 --> 00:38:32.160
dieser Merkle Branch tatsächlich mit der
längsten Kette von Blöcken verbunden ist.
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.
00:38:36.990 --> 00:38:40.560
So, das ist diese Funktionsweise.
Jetzt haben wir noch etwas mehr Zeit,
00:38:40.560 --> 00:38:44.290
als ich gehofft hatte. Ich werde jetzt
noch versuchen, die Pruning Clients
00:38:44.290 --> 00:38:49.010
zu erklären. Das hängt dann damit zusammen
wie eigentlich Bitcoin-Transaktionen
00:38:49.010 --> 00:38:53.910
funktionieren. Nun, wir sind es ja
gewohnt, dass wir irgendwie auf der Bank
00:38:53.910 --> 00:38:58.440
ein Konto haben. Und das Konto
hat einen Besitzer. Hoffentlich mich!
00:38:58.440 --> 00:39:02.720
Und es hat einen Geldbetrag. Und jedesmal,
wenn ich eine Transaktion durchführe,
00:39:02.720 --> 00:39:06.760
verändert sich der Geldbetrag. Also ich
überweisen jemandem Geld, und dann
00:39:06.760 --> 00:39:11.520
verändert sich halt der Betrag auf meinem
Konto. In Bitcoin funktioniert das
00:39:11.520 --> 00:39:15.620
wesentlich anders, dort besitze ich
nicht ein Konto, sondern ich besitze
00:39:15.620 --> 00:39:20.170
sogenannte ‚Unspent Transaction Outputs‘.
Und wir sehen jetzt hier, sagen wir Alice
00:39:20.170 --> 00:39:23.880
hat diese fünf Unspent Transaction
Outputs, die haben jeweils einen Besitzer,
00:39:23.880 --> 00:39:29.230
nämlich Alice. Und jeweils einen Betrag
der dort verfügbar ist. Und der Betrag
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
00:39:33.840 --> 00:39:38.910
eine Transaktion machen, an Bob,
die würde ihm gerne 42 Bitcoin überweisen.
00:39:38.910 --> 00:39:42.200
Dann erstellt sie eine Transaktion, und
sagt, das Geld dieser Transaktion,
00:39:42.200 --> 00:39:47.270
42 Bitcoin, sollen an Bob gehen. Und jetzt
muss sie das Geld irgendwoher haben.
00:39:47.270 --> 00:39:53.200
Und dann sagt sie halt, ich gebe
diese drei Transaction Outputs aus.
00:39:53.200 --> 00:39:56.920
Und das Interessante an Transaction
Outputs… wie gesagt, den Betrag
00:39:56.920 --> 00:40:01.760
kann man nicht verändern, sondern
Alice muss die alle komplett ausgeben.
00:40:01.760 --> 00:40:05.930
Jetzt sind aber diese Transaction Outputs
zusammengenommen 44 Bitcoin,
00:40:05.930 --> 00:40:10.990
und nicht 42 Bitcoins. D.h. diese
Transaktion gibt jetzt zuviel Geld aus,
00:40:10.990 --> 00:40:17.330
also sie gibt mehr Transaction Outputs aus
als sie dann schlussendlich Geld dem Bob
00:40:17.330 --> 00:40:21.400
überweist. Und was kann jetzt Alice
tun? Was sie tut, ist, sie macht
00:40:21.400 --> 00:40:27.360
einen zweiten Output in ihrer Transaktion.
Und hier überweist sie jetzt Geld an Alice.
00:40:27.360 --> 00:40:31.670
D.h. eine Transaktion in Bitcoin kann
beliebig viele Inputs und beliebig viele
00:40:31.670 --> 00:40:36.740
Outputs haben. Was es hier noch zu
sagen gibt, ist, haben wir immer noch
00:40:36.740 --> 00:40:41.070
einen Unterschied. Jetzt haben wir 44
Bitcoin, die in die Transaktion reinkommen,
00:40:41.070 --> 00:40:45.860
und nur 43 die rausgehen. Das restliche
Bitcoin, das jetzt hier nicht ausgegeben wird,
00:40:45.860 --> 00:40:50.810
das ist quasi impliziert die Transaction
Fee, welche der Miner erhält, der diese
00:40:50.810 --> 00:40:56.400
Transaktion mint. So eine Transaction Fee
ist implementiert. Jetzt haben wir gesehen,
00:40:56.400 --> 00:40:59.640
Alice hat durch das Erstellen dieser
Transaktion neue Transaction Outputs
00:40:59.640 --> 00:41:05.760
erstellt. Nämlich einen, der jetzt Bob
gehört, und einen der Alice gehört.
00:41:05.760 --> 00:41:08.980
Und jetzt können wir auch nachvollziehen,
diese Transaction Outputs, welche Alice
00:41:08.980 --> 00:41:13.850
ausgegeben hat, die gehören alle irgendwie
zu anderen Transaktionen, welche es vorhin
00:41:13.850 --> 00:41:19.800
gegeben hat. Nun, ein Transaction Output
kann einen von zwei Zuständen haben.
00:41:19.800 --> 00:41:24.930
Er kann ausgegeben sein, oder nicht.
Und natürlich kann man nur die ausgeben,
00:41:24.930 --> 00:41:29.320
die noch nicht ausgegeben sind. Und das
heißt, wenn ich wissen will, wieviel Geld
00:41:29.320 --> 00:41:33.350
Alice gehört, dann suche ich mir alle
Transaction Outputs zusammen,
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.
00:41:38.360 --> 00:41:41.200
Das kann ich für jeden Teilnehmer
des Systems machen, dann weiß ich
00:41:41.200 --> 00:41:46.900
für jeden Teilnehmer, wieviel Geld denn
der Person gehört. Wenn ich jetzt also
00:41:46.900 --> 00:41:50.980
alle Transaction Outputs nehme, die
nicht ausgegeben sind, dann habe ich
00:41:50.980 --> 00:41:56.530
den aktuellen Zustand des Netzwerks. Dann
weiß ich für jeden Teilnehmer, wieviel Geld
00:41:56.530 --> 00:42:04.960
diese Person hat. Und genau diesen
Mechanismus macht sich ein Pruning Client
00:42:04.960 --> 00:42:09.470
zunutze. Der sagt nämlich, eigentlich
brauche ich nicht die ganze Blockchain
00:42:09.470 --> 00:42:12.931
zu speichern, das ist ja blöd, denn wenn
eine neue Transaktion reinkommt, und
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
00:42:17.260 --> 00:42:22.060
einen Output ausgibt, der noch unspent
ist, denn wenn die Transaktion einen
00:42:22.060 --> 00:42:25.520
Transaction Output ausgibt, der schon
ausgegeben ist, dann ist die natürlich
00:42:25.520 --> 00:42:29.430
nicht valide, man kann ja nicht dasselbe
Geld zweimal ausgeben. Oder wenn
00:42:29.430 --> 00:42:32.790
die Transaktion versucht, einen
Transaction Output auszugeben,
00:42:32.790 --> 00:42:36.220
den es gar nicht gibt, dann ist
die natürlich auch nicht valide.
00:42:36.220 --> 00:42:42.290
Was jetzt also ein Pruning Client tut –
und das tut übrigens auch ein Full Node:
00:42:42.290 --> 00:42:46.270
wenn eine neue Transaktion reinkommt,
und da steht in der Transaktion „ich gebe
00:42:46.270 --> 00:42:51.770
diesen Transaction Output aus“, dann
geht der Full Node nicht und versucht,
00:42:51.770 --> 00:42:55.930
die 100 GB große Blockchain zu durchsuchen
nach diesem Transaction Output, das wäre
00:42:55.930 --> 00:43:00.160
ja blödsinnig, sondern der legt sich halt
eine kleine Datenbank an, und dort
00:43:00.160 --> 00:43:05.520
stehen alle Transaction Outputs drin.
Und dann sagt er sich, für jeden…
00:43:05.520 --> 00:43:08.580
also alle Unspent Transaction Outputs
stehen dort drin, und dann sagt sich
00:43:08.580 --> 00:43:12.090
der Client, für jede Transaktion,
die reinkommt und die valide ist,
00:43:12.090 --> 00:43:17.540
entferne ich alle Transaction Outputs die
die Transaktion ausgibt aus der Datenbank,
00:43:17.540 --> 00:43:22.870
und alle neuen Transaction Outputs füge
ich dort ein. Und so behält der Client
00:43:22.870 --> 00:43:28.530
den Zustand. Und der Pruning Client sagt
sich dann halt: „Naja, die Blöcke, die
00:43:28.530 --> 00:43:31.550
brauche ich jetzt ja nicht mehr, weil ich
habe den Zustand in der Datenbank,
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.“
00:43:35.380 --> 00:43:39.260
Der muss dann noch etwas vorsichtig sein,
denn wenn jetzt plötzlich von weiter hinten
00:43:39.260 --> 00:43:42.770
eine längere Kette kommt, dann muss er
das ja wieder nachvollziehen können,
00:43:42.770 --> 00:43:47.520
also wird er sich noch einige Blöcke
zusätzlich speichern, als nur den neuesten.
00:43:47.520 --> 00:43:54.720
Aber er kann so sehr viel Speicherplatz
sparen. Er muss aber… trotzdem
00:43:54.720 --> 00:44:00.420
muss ein Pruning Client eigentlich jede
Transaktion, die es jemals gegeben hat,
00:44:00.420 --> 00:44:04.490
herunterladen, und muss dann halt auch
die alle verifizieren. Das braucht auch
00:44:04.490 --> 00:44:08.280
immer noch sehr viel Rechenkraft, und
sehr viel Bandbreite. Und deshalb sind
00:44:08.280 --> 00:44:13.300
solche Clients nicht geeignet
für Mobilgeräte.
00:44:13.300 --> 00:44:15.870
Und was man hier vielleicht noch sagen
kann, ich habe jetzt eigentlich irgendwie
00:44:15.870 --> 00:44:25.300
gesagt, …
00:44:25.300 --> 00:44:31.510
…ich habe jetzt gesagt, Alice gibt einen
Transaction Output aus. Das ist…
00:44:31.510 --> 00:44:34.570
In Wirklichkeit ist es in Bitcoin
recht kompliziert implementiert.
00:44:34.570 --> 00:44:38.790
Das funktioniert nämlich so, dass der
Transaction Output hat ein Stück Code
00:44:38.790 --> 00:44:44.940
drin. Dafür gibt es in Bitcoin eine eigene
Assemblersprache, die das betreibt.
00:44:44.940 --> 00:44:50.960
Und der Input muss jetzt ebenfalls ein
Stück Code enthalten. Und wenn die dann
00:44:50.960 --> 00:44:55.670
nacheinander ausgeführt werden, muss das
am Schluss den Wert 'two' ergeben,
00:44:55.670 --> 00:44:59.740
und nur in dem Fall wurde der Output
richtig ausgegeben. Und das ist
00:44:59.740 --> 00:45:03.820
ein ziemlich kompliziertes System, wie das
wirklich funktioniert. Das ist dann halt
00:45:03.820 --> 00:45:07.440
eine eigene Programmiersprache, die ist
zwar nicht Turing-vollständig, aber damit
00:45:07.440 --> 00:45:11.940
lassen sich dann alle möglichen lustigen
Regeln implementieren. Die häufigste Regel
00:45:11.940 --> 00:45:23.410
die man findet, in über 80%
der Fälle, sind sogenannte…
00:45:23.410 --> 00:45:28.250
…die Regel sagt dann irgendsowas wie:
„Um diesen Output ausgeben zu können,
00:45:28.250 --> 00:45:32.380
musst du beweisen, dass du den geheimen
Schlüssel besitzt zu dem öffentlichen
00:45:32.380 --> 00:45:37.400
Schlüssel, dessen Hash ich jetzt hier
reinpacke.“ Und in dem Input steht dann
00:45:37.400 --> 00:45:43.310
halt: „Ja, ich besitze diesen geheimen
Schlüssel, und ich beweise dir das,
00:45:43.310 --> 00:45:47.680
indem ich hier den öffentlichen Schlüssel
reinpacke und die Transaktion mit dem
00:45:47.680 --> 00:45:52.840
geheimen Schlüssel signiere.“ Und dann
kann jemand, der das verifizieren will,
00:45:52.840 --> 00:45:56.930
kann einfach den öffentlichen Schlüssel
nehmen, schauen ob das dem Hash entspricht,
00:45:56.930 --> 00:46:04.630
und dann mit dem öffentlichen Schlüssel
die Signatur der Transaktion verifizieren.
00:46:04.630 --> 00:46:09.940
Das ist die mit Abstand häufigste Art,
wie diese Transaktionen in Wirklichkeit
00:46:09.940 --> 00:46:14.240
funktionieren. Aber das ist halt dann sehr
kompliziert, und damit könnte man leicht
00:46:14.240 --> 00:46:22.250
einen eigenen Vortrag füllen.
Deshalb werde ich jetzt hier aufhören.
00:46:22.250 --> 00:46:28.900
Habe ich da diese tolle Seite gebastelt.
00:46:28.900 --> 00:46:32.920
– Ups, das ist eigentlich zu weit –
00:46:32.920 --> 00:46:42.750
Finde ich es, oder nicht?
00:46:42.750 --> 00:46:45.760
Ja, ha, gefunden! Unglaublich.
Lachen
00:46:45.760 --> 00:46:48.860
Also wir haben jetzt noch Zeit für Fragen,
wenn ihr noch was wissen wollt.
00:46:48.860 --> 00:46:54.940
Oder ihr könnt mich auch erreichen,
am einfachsten hier über das DECT-Telefon
00:46:54.940 --> 00:47:01.890
in dem Kongress, wenn ihr Fragen habt.
Ihr findet einen Handout der Slides
00:47:01.890 --> 00:47:06.000
auch im Fahrplan. Und ich werde auch
die Folien selbst noch hochladen,
00:47:06.000 --> 00:47:09.520
und den entsprechenden Source Code
zum Erzeugen der Folien werde ich auch
00:47:09.520 --> 00:47:11.460
verlinken.
00:47:11.460 --> 00:47:12.960
Beifall
00:47:12.960 --> 00:47:14.550
Herald: vimja!!
00:47:14.550 --> 00:47:24.790
andauernder Beifall
00:47:24.790 --> 00:47:31.540
Es ist noch einiges an Zeit für Fragen;
also wenn ihr Fragen habt,
00:47:31.540 --> 00:47:35.440
dann reiht euch an den Mikrofonen auf.
Eine Sache möchte ich sagen:
00:47:35.440 --> 00:47:40.280
wenn ihr jetzt rausgehen wollt, verlasst
bitte leise den Saal, damit das
00:47:40.280 --> 00:47:44.360
mit den Fragen einigermaßen klappt.
Liebe Tür-Engel, wir lassen im Moment
00:47:44.360 --> 00:47:50.430
noch niemanden rein. Erstmal können Leute
nur rausgehen. Und bitte tut das leise.
00:47:50.430 --> 00:47:55.520
Wir fangen mit dem Signal-Engel an.
00:47:55.520 --> 00:47:58.730
Signal Angel: Eine Frage aus dem Internet
bezüglich dem Man-in-the-middle
00:47:58.730 --> 00:48:02.290
double-spending-Angriff. Könnte Mallory
nicht diesen Angriff gleichzeitig
00:48:02.290 --> 00:48:07.210
mit derselben Fake-Blockchain gegen zehn
verschiedene Autohändler machen, und
00:48:07.210 --> 00:48:12.890
mit dem gleichen Aufwand zehn Autos klauen?
Damit würde es sich doch wieder lohnen,
00:48:12.890 --> 00:48:20.050
auch wenn man mit dem Gegenwert eines
Autos an Rechenzeit investieren müsste.
00:48:20.050 --> 00:48:25.590
vimja: Das ist eine gute Überlegung die
ich mir so noch auch gar nie gemacht habe.
00:48:25.590 --> 00:48:30.030
Ich müsste darüber mal nachdenken. Ich
nehme aber grundsätzlich an, dass es
00:48:30.030 --> 00:48:35.670
vermutlich funktionieren würde. Der
Aufwand wird dann aber halt sehr viel
00:48:35.670 --> 00:48:40.970
größer, irgendwie um die Netzwerk-Nodes
zu kontrollieren. Grundsätzlich denke ich
00:48:40.970 --> 00:48:44.950
aber, dass es kein… damit das System
wirklich sicher ist, sollte das
00:48:44.950 --> 00:48:50.730
kein Argument sein dürfen. Also ich hätte
jetzt auf Anhieb gesagt, dass es vermutlich
00:48:50.730 --> 00:48:54.790
klappen würde.
00:48:54.790 --> 00:48:58.251
Herald: Okay, dann machen wir weiter
mit Mikrofon 2, hier vorne, bitte!
00:48:58.251 --> 00:49:03.220
Frage: Ja, hallo. Du hast gesagt, mit
einer 50%-Attack kann man im Prinzip
00:49:03.220 --> 00:49:07.140
die Blockchains hijacken. Wenn man
sich jetzt mal eine hypothetische
00:49:07.140 --> 00:49:11.480
Regierungsorganisation mit sehr, sehr,
sehr viel Rechenpower überlegt,
00:49:11.480 --> 00:49:16.220
mal so ganz in den Raum geraten, gibt’s
Überlegungen, wie wahrscheinlich das ist?
00:49:16.220 --> 00:49:19.540
vimja: Nun, es ist so, mit einfach
herkömmlicher Rechenpower wird das
00:49:19.540 --> 00:49:22.750
kaum möglich sein, also irgendwie
für diese spezielle Aufgabe,
00:49:22.750 --> 00:49:28.400
den Double-SHA256-Hash, hat das Bitcoin-
Netzwerk ein Vielfaches der Rechenkraft,
00:49:28.400 --> 00:49:32.510
die selbst die 500 schnellsten Supercomputer
aufbringen könnten. Es gibt aber eine
00:49:32.510 --> 00:49:36.580
viel einfachere Möglichkeit, unser guter
Freund China, denn die meisten…
00:49:36.580 --> 00:49:40.070
denn heute ist es halt so: eigentlich
möchte man gerne, dass die Miner
00:49:40.070 --> 00:49:43.740
verteilt sind, und jeder ein wenig zuhause
minet. In Praxis ist es aber so, dass
00:49:43.740 --> 00:49:47.770
das heute das große Geschäft ist. Und das
wird dann halt heute in Rechenzentren
00:49:47.770 --> 00:49:54.280
in China betrieben. Und China hat heute
mehr als 50% der Rechenkraft von Bitcoin,
00:49:54.280 --> 00:49:57.430
also, toll, unsere unabhängige Währung
gehört jetzt den Chinesen.
00:49:57.430 --> 00:50:01.030
Und selbst wenn das nicht stimmen sollte,
und das nicht funktionieren sollte,
00:50:01.030 --> 00:50:04.630
ist es so, dass all die spezielle
Hardware, die heute zum Mining
00:50:04.630 --> 00:50:08.940
notwendig ist, in China hergestellt wird.
Und China könnte einfach all diese Fabriken,
00:50:08.940 --> 00:50:12.710
in denen die hergestellt werden,
beschlagnahmen, und nach einigen Monaten
00:50:12.710 --> 00:50:15.120
hätten sie trotzdem wieder mehr
Rechenleistung als jeder andere,
00:50:15.120 --> 00:50:21.250
und könnte die Währung so kontrollieren.
Also, das ist durchaus wahrscheinlich.
00:50:21.250 --> 00:50:24.680
Herald: Dann machen wir weiter
mit Mikrofon 1, hier vorne, bitte.
00:50:24.680 --> 00:50:28.970
Frage: Ja, mir geht’s auch gerade um die
Rechenpower. Also gibt es da irgendwie
00:50:28.970 --> 00:50:34.200
Ansätze in anderen elektronischen
Währungen, wie das verhindert werden kann,
00:50:34.200 --> 00:50:40.380
dass immer quasi zum Stand der aktuellen
Technik die maximale Rechenpower nötig ist,
00:50:40.380 --> 00:50:44.041
um so ein System laufen zu lassen?
00:50:44.041 --> 00:50:47.400
vimja: Es hat zur Zeit, im Verlauf der
Zeit verschiedene Möglichkeiten,
00:50:47.400 --> 00:50:51.700
also verschiedene Ansätze gegeben.
00:50:51.700 --> 00:50:55.150
Das eine was man immer wieder versucht
hat, ist halt, dass man das nicht nur auf
00:50:55.150 --> 00:50:59.720
Rechenkraft beschränkt, sondern dass man
sagt, der Angriff der braucht nicht nur
00:50:59.720 --> 00:51:03.950
Rechenpower sondern auch viel RAM,
oder viel Memory. Und dadurch ist es
00:51:03.950 --> 00:51:08.250
sehr viel schwieriger, Hardware zu bauen.
Oder sehr viel teurer, Hardware zu bauen,
00:51:08.250 --> 00:51:12.240
die darauf spezialisiert ist, und man
erhofft sich davon Erfolge, aber
00:51:12.240 --> 00:51:16.010
schlussendlich hat man dort wieder
dasselbe Problem. Ich weiß aber,
00:51:16.010 --> 00:51:21.500
dass Ethereum arbeitet an einem Konzept,
das nennen sie Proof-of-Stake.
00:51:21.500 --> 00:51:24.730
Und wie genau das funktioniert, kann ich
dir nicht sagen. Aber da hängt dann
00:51:24.730 --> 00:51:29.160
die Wahrscheinlichkeit, dass du einen
Block erstellst, davon ab wieviel Geld
00:51:29.160 --> 00:51:32.900
du besitzt in dem Netzwerk, oder sowas.
Und die brauchen dann eigentlich
00:51:32.900 --> 00:51:35.840
kein Mining mehr. Und die haben dann halt
auch das Problem nicht mehr dass man
00:51:35.840 --> 00:51:40.700
unglaublich viel Strom braucht, um das
Ding zu minen. Und ich dachte, die wollten
00:51:40.700 --> 00:51:44.660
diesen Sommer umstellen. Ich habe dann
aber das Ganze ein wenig aus den Augen
00:51:44.660 --> 00:51:47.560
verloren, und kann dir jetzt nicht
sagen wie weit die damit sind.
00:51:47.560 --> 00:51:48.260
Also grundsätzlich…
00:51:48.260 --> 00:51:50.100
Frage: Wie heißt das nochmal?
00:51:50.100 --> 00:51:53.570
vimja: ‚Proof-of-Stake‘. Und das wird in
Ethereum implementiert. Aber wie weit
00:51:53.570 --> 00:51:57.490
die sind, kann ich dir nicht sagen. Das
müsstest du selbst nachschauen gehen.
00:51:57.490 --> 00:51:58.770
Frage: Danke.
00:51:58.770 --> 00:52:02.440
Herald: Dann machen wir weiter mit
Mikrofon 4, dort drüben, bitte!
00:52:02.440 --> 00:52:06.550
Frage: Ich stelle mal zwei Fragen. Das
eine ist: öffentliche Grundbuchämter
00:52:06.550 --> 00:52:11.470
könnte man doch sehr gut in der Blockchain
umlegen [anlegen], und dadurch könnte
00:52:11.470 --> 00:52:14.590
doch die Verwaltung sehr viel Geld
einsparen, und z.B. Handelsregister
00:52:14.590 --> 00:52:16.730
sind ja auch öffentlich, die könnte man
doch auch in die Blockchain verschieben.
00:52:16.730 --> 00:52:20.450
Oder mache ich da irgendeinen Denkfehler,
dass es am Schluss für die Verwaltung
00:52:20.450 --> 00:52:22.980
teurer kommt? Und was mich auch
noch wundert, was deine Meinung
00:52:22.980 --> 00:52:26.250
zu Smart Contracts ist.
00:52:26.250 --> 00:52:30.300
vimja: Also, zu der ersten Frage, das ist
so, daran wird tatsächlich gearbeitet.
00:52:30.300 --> 00:52:35.030
Insbesondere die britische Regierung hat
auch Forschungsgruppen, die erforschen
00:52:35.030 --> 00:52:41.890
sollen, wie Blockchains der Verwaltung
helfen können. Gerade beim Grundbuchamt,
00:52:41.890 --> 00:52:46.000
also solche Systeme brauchen starke
Anpassungen, gerade wenn wir uns
00:52:46.000 --> 00:52:52.460
vorstellen, ein Grundbuchamt, wenn es dann
jemandem gelingen würde, irgendwie
00:52:52.460 --> 00:52:55.690
jetzt trotzdem ein Grundstück quasi
zu stehlen, und das würde einfach
00:52:55.690 --> 00:53:01.960
in dieser Blockchain drin feststehen, wie
würde man das wieder rückgängig machen?
00:53:01.960 --> 00:53:06.120
Also wenn wir heute ein Grundbuchamt
haben, dann können die alles überschreiben.
00:53:06.120 --> 00:53:10.230
Und irgendwie möchten wir ja dann trotzdem
nicht einfach nur dieser Blockchain vertrauen.
00:53:10.230 --> 00:53:14.810
Wir möchten trotzdem die Möglichkeit
haben, dass gewisse Stellen, gerade eben
00:53:14.810 --> 00:53:18.020
unser Staat, das überschreiben können.
Da müssen dann in diese Blockchains
00:53:18.020 --> 00:53:22.460
zusätzliche Mechanismen eingebaut werden,
dass das trotzdem geht, und das ist dann
00:53:22.460 --> 00:53:26.850
halt bedenklich, weil jetzt trotzdem da
jemand das Zeugs kaputtmachen kann.
00:53:26.850 --> 00:53:30.750
Also das ist nicht ganz einfach, diese
Dinge zu tun. Aber ich denke schon,
00:53:30.750 --> 00:53:38.360
dass gerade Grundbuchämter eine gute
Chance sind, und das ist vermutlich auch
00:53:38.360 --> 00:53:43.760
etwas vom Ersten, was wir implementiert
sehen werden. Soviel für öffentliche Ämter.
00:53:43.760 --> 00:53:48.000
Aber ich denke auch, dass es einen
Hybridbetrieb geben wird. Also
00:53:48.000 --> 00:53:51.580
dass man quasi sagt, das ist zwar
öffentlich in einer Blockchain, aber
00:53:51.580 --> 00:53:56.360
schlussendlich, was wirklich gilt ist
immer noch das, was im Grundbuchamt steht,
00:53:56.360 --> 00:53:59.480
und das wird dann halt solange so
weiterbetrieben, bis sich das wirklich
00:53:59.480 --> 00:54:03.220
bewährt hat, und man den Übergang macht.
Und die zweite Frage, sorry, habe ich
00:54:03.220 --> 00:54:07.190
wieder vergessen.
00:54:07.190 --> 00:54:10.500
Herald: Okay, wenn das die Frage
beantwortet und er nicht wieder aufsteht,
00:54:10.500 --> 00:54:14.760
dann würde ich jetzt mit Mikrofon 7
weitermachen, dort oben, bitte.
00:54:14.760 --> 00:54:20.140
Frage: Ja, vielen Dank für den spannenden
Vortrag. Mich würde noch interessieren,
00:54:20.140 --> 00:54:24.970
vielleicht noch was zu dem Thema ‚Ende
der Bitcoins‘, die sind ja anscheinend
00:54:24.970 --> 00:54:29.220
begrenzt, soweit ich das verstanden habe.
Und wie wird das Erstellen von neuen
00:54:29.220 --> 00:54:33.880
Blöcken letztendlich in ferner Zukunft
dann belohnt, werden die einfach immer so
00:54:33.880 --> 00:54:36.690
weiter unterteilt, und man bekommt dann
nur noch Bruchteile von Bitcoins
00:54:36.690 --> 00:54:38.280
als Belohnung, oder wie funktioniert das?
00:54:38.280 --> 00:54:41.520
vimja: Das ist eine sehr gute Frage,
die sich natürlich auch diesen Sommer
00:54:41.520 --> 00:54:45.470
gestellt hat, weil sich ja der
Block Reward halbiert hat.
00:54:45.470 --> 00:54:49.150
Und erstaunlicherweise ist es dann aber
eigentlich ohne Weiteres weitergegangen.
00:54:49.150 --> 00:54:53.210
Nun ist es so, der Mechanismus,
der eigentlich greifen sollte, ist
00:54:53.210 --> 00:54:57.880
die Transaction Fees. Dass es durch
die Transaction Fees getragen wird,
00:54:57.880 --> 00:55:02.550
diese Gebühr. Nur ist es heute so, dass
die Transaction Fees so niedrig sind,
00:55:02.550 --> 00:55:07.410
dass das Minen sich nicht rentieren würde,
also der Stromverbrauch ist viel zu hoch,
00:55:07.410 --> 00:55:13.720
als dass es sich lohnen würde, nur
für die Transaction Fees zu minen.
00:55:13.720 --> 00:55:17.230
Andererseits ist es aber so, dass die
Transaction Fees heute schon sehr hoch
00:55:17.230 --> 00:55:21.090
sind, also die kommen heute irgendwo
zwischendurch schon in die Bereiche
00:55:21.090 --> 00:55:24.740
der Transaction Fees, die man auch
zahlt bei Kreditkartenüberweisungen.
00:55:24.740 --> 00:55:28.580
Und das ist natürlich absolut lächerlich
hoch. Und dann ist es aber auch so,
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
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
00:55:37.260 --> 00:55:41.690
darüber ob man das jetzt ändern soll oder
nicht – aber wenn dieses Limit halt nicht
00:55:41.690 --> 00:55:44.770
erhöht wird, dann passen nicht mehr
Transaktionen rein, und dann ist
00:55:44.770 --> 00:55:48.770
der einzige Weg höhere Transaction…
also mehr Transaction Fees zu haben
00:55:48.770 --> 00:55:51.620
für den Miner, ist diese Transaction Fees
zu erhöhen. Und wenn man die weiter
00:55:51.620 --> 00:55:55.920
erhöht, dann lohnt es sich einfach
nicht mehr, Bitcoin zu verwenden.
00:55:55.920 --> 00:55:58.531
Im Moment ist es noch nicht so ein
Problem, für die nächsten vier Jahre
00:55:58.531 --> 00:56:02.640
sind es ja noch 12,5 Bitcoin die
man kriegt. Aber wie es danach
00:56:02.640 --> 00:56:07.200
weitergehen wird, das muss man abwarten,
und dann schauen, was da genau passiert.
00:56:07.200 --> 00:56:10.750
Und ich denke dass das ist auch noch ein
dynamisches System, das sich schnell
00:56:10.750 --> 00:56:14.960
wandelt, und da werden auch noch
viele Leute viele gute Ideen haben.
00:56:14.960 --> 00:56:17.770
Frage: Darf ich noch mal kurz was
nachfragen? D.h. der Proof-of-Work
00:56:17.770 --> 00:56:22.980
ist nicht der direkte Bitcoin, den ich
bekomme, also nicht die 12,5 Bitcoins,
00:56:22.980 --> 00:56:28.230
die ich bekomme, um einen Block zu
erstellen, ist nicht der Proof-of-Work?
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
00:56:31.930 --> 00:56:34.940
plus das klein weniger, was von den
Transaction Fees kommt, das ist
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,
00:56:39.430 --> 00:56:44.790
dass du die Arbeit auf dich genommen
hast, einen Block zu erstellen.
00:56:44.790 --> 00:56:49.500
Herald: Gut, dann machen wir oben
auf dem Balkon weiter mit der 8. Bitte.
00:56:49.500 --> 00:56:52.600
Frage: Ja, das ganze Erstellen von
den Blöcken basiert ja darauf, dass
00:56:52.600 --> 00:56:56.680
Transaktionen in des System reinkommen.
Die Frage wäre jetzt, was passiert, wenn
00:56:56.680 --> 00:57:01.880
keine Transaktionen zur Verfügung stehen.
Werden dann Dummy-Transaktionen erzeugt,
00:57:01.880 --> 00:57:03.880
oder leere Blöcke, oder was passiert dann?
00:57:03.880 --> 00:57:08.220
vimja: Nein, das kannst du sehen, wenn du
ganz zurückgehst, die ersten Blöcke, die
00:57:08.220 --> 00:57:11.690
überhaupt erstellt wurden, dort gab es ja
noch keine Transaktionen. Was hätte auch
00:57:11.690 --> 00:57:16.550
überwiesen werden sollen wenn niemand Geld
hat. Und da war es dann halt so, dass
00:57:16.550 --> 00:57:21.180
der Block enthält dann nur die Coin-based-
Transaktion. Der Miner wird ja immer
00:57:21.180 --> 00:57:25.000
eine Coin-based-Transaktion machen.
Einfach, weil es für ihn interessant ist.
00:57:25.000 --> 00:57:33.150
Und dann erstellt er halt einen Block, der
nur diese Coin-based-Transaktion enthält.
00:57:33.150 --> 00:57:35.940
Herald: Dann machen wir weiter
hier vorne mit der 2. Bitte.
00:57:35.940 --> 00:57:38.300
Mikro 2 will Mikro 4 Vorrang geben
Bitte?
00:57:38.300 --> 00:57:41.720
Wenn du nicht möchtest, dann machen
wir mit der 4 weiter! Sehr fair von dir!
00:57:41.720 --> 00:57:48.830
Frage: Och, dankeschön. Ich habe das Thema
‚Blockchain‘ in verschiedenen Kontexten
00:57:48.830 --> 00:57:51.480
jetzt im letzten Jahr sehr viel gesehen.
Es ist fast ein Buzzword in sehr sehr
00:57:51.480 --> 00:57:55.900
vielen Branchen, von FinTech bis zu
IoT oder wo auch immer. Konntest du
00:57:55.900 --> 00:57:59.920
im Kontext deiner Arbeit ein bisschen
so einen Trend raussehen, wo sich da
00:57:59.920 --> 00:58:04.100
erste Anwendungen
wirklich bewähren können?
00:58:04.100 --> 00:58:08.420
vimja: Erste Anwendungen gibt es ja bereits.
Du kannst mit Bitcoin Dinge bezahlen.
00:58:08.420 --> 00:58:13.930
Aber das ist so ein wenig eine Sache.
Eines, was ich gesehen habe, wo ich mich
00:58:13.930 --> 00:58:17.800
aber schlicht weigere mich zu beteiligen,
ist halt dass Banken das zu verwenden
00:58:17.800 --> 00:58:22.890
versuchen, um die Transaktionen zwischen
den Banken zu regeln. Da wird es ja,
00:58:22.890 --> 00:58:26.410
glaube ich, im Anschluss im Saal G
einen Talk geben dazu, wie das heute
00:58:26.410 --> 00:58:30.980
gemacht wird, wie Banken zwischeneinander
Geld austauschen. Und das möchte man
00:58:30.980 --> 00:58:34.220
in Zukunft mit Bitcoin [eher: Blockchain]
machen. Und da sind die Banken auch dran,
00:58:34.220 --> 00:58:38.940
sehr viel Geld und sehr viel Zeit rein zu
investieren. Das ist halt sehr schade,
00:58:38.940 --> 00:58:43.210
dass diese eigentlich coole Technologie
jetzt für sowas verwendet werden soll.
00:58:43.210 --> 00:58:48.940
Aber ich denke das ist eine Anwendung die
kommt. Dann eben einfache Kryptowährungen,
00:58:48.940 --> 00:58:53.540
wie etwa Bitcoin, um Dinge
zu bezahlen. Und auch…
00:58:53.540 --> 00:58:57.590
ich denke auch mit Ethereum, eben gerade
diese Smart Contracts werden kommen,
00:58:57.590 --> 00:59:01.340
dass man halt eben irgendwelche Dinge,
irgendwelche Third Parties, die man
00:59:01.340 --> 00:59:05.970
verwendet für Dinge zu regeln, ersetzen
wir jetzt aber. Was jetzt als Erstes
00:59:05.970 --> 00:59:09.560
quasi den Durchbruch schaffen wird und
als Großes eingesetzt werden wird,
00:59:09.560 --> 00:59:11.770
kann ich dir nicht sagen.
00:59:11.770 --> 00:59:15.630
Herald: Gut, dann, wir sind so ganz knapp
an der Zeit, aber du darfst deine Frage
00:59:15.630 --> 00:59:17.050
auf jeden Fall stellen, bitte!
00:59:17.050 --> 00:59:20.520
Frage: Ist auch nur eine ganz kurze,
schnelle Frage. Gibt es einen Schutz
00:59:20.520 --> 00:59:24.460
gegen DDoS, dass ich irgendwie das
Netzwerk mit falschen Transaktionen
00:59:24.460 --> 00:59:27.890
bombardiere, und dann bricht alles
zusammen, gibt es da irgendwie
00:59:27.890 --> 00:59:29.120
einen Schutz dagegen?
00:59:29.120 --> 00:59:31.930
vimja: Ja, das war ja ganz interessant.
Das hat es glaube ich vor über einem Jahr
00:59:31.930 --> 00:59:35.050
gegeben, bei Bitcoin, dass das passiert
ist, und die waren sich dann
00:59:35.050 --> 00:59:38.630
nicht so ganz einig in der Community,
weil die mögen sich sowieso nicht mehr,
00:59:38.630 --> 00:59:42.270
und ‚kriegen‘ nur miteinander, die waren
sich da nicht so ganz einig, ob das jetzt
00:59:42.270 --> 00:59:46.391
ein Test war, oder ob das ein DDoS war.
Und das Interessante daran ist ja,
00:59:46.391 --> 00:59:51.630
dass es ja tatsächlich Geld kostet, eine
Transaktion zu machen. Also du zahlst
00:59:51.630 --> 00:59:55.790
zuerst eine Transaction-Gebühr, und der
Schutz sollte eigentlich, hoffentlich,
00:59:55.790 --> 00:59:59.520
sein, dass das da zu teuer ist.
Aber offenbar gibt es immer noch
00:59:59.520 --> 01:00:04.340
so viele Bitcoin-Millionäre, die einfach
Bitcoins haben zum Davonschmeißen,
01:00:04.340 --> 01:00:08.200
und die dann sowas tun können. Es
wird auf jeden Fall an irgendwelchen
01:00:08.200 --> 01:00:11.770
Schutzmechanismen gearbeitet, aber
was das ist… zuckt mit den Schultern
01:00:11.770 --> 01:00:15.530
Also was es gibt, in Bitcoin,
ist dieses Replace-by-Fee,
01:00:15.530 --> 01:00:22.890
damit die Transaction-Gebühr nach
der Veröffentlichung der Transaktion
01:00:22.890 --> 01:00:25.920
anschließend noch erhöht werden
kann. Und damit kannst du halt…
01:00:25.920 --> 01:00:29.030
wenn du jetzt siehst, es kommen sehr viele
DDoS-Transaktionen rein, kannst du halt
01:00:29.030 --> 01:00:33.640
im Nachhinein die Transaction-Gebühr
erhöhen, und das dadurch den Minern
01:00:33.640 --> 01:00:38.480
quasi schmackhaft machen, deine
valide Transaktion zu includen.
01:00:38.480 --> 01:00:43.600
Dieses Replace-by-Fee, dieses RBF,
ist aber sehr stark umstritten, und
01:00:43.600 --> 01:00:49.580
wird auch standardmäßig nicht
aktiviert von der Client-Software.
01:00:49.580 --> 01:00:56.290
Herald: Gut, dann danke vimja, für diese
großartige Einführung in die Blockchain!
01:00:56.290 --> 01:01:01.030
Beifall
01:01:01.030 --> 01:01:05.070
Abspannmusik
01:01:05.070 --> 01:01:24.901
Untertitel erstellt von c3subtitles.de
im Jahr 2017. Mach mit und hilf uns!