Bitcoin Sicherheit: Digitale Signatur

Bitcoin SicherheitUm die Fälschungssicherheit und Anonymität von Bitcoin genauer zu verstehen, sind ein paar Einblicke in die Hintergründe nötig. Dieser Artikel erklärt die Verschlüsselungstechniken und dazugehörigen Begriffe, die bei Bitcoin verwendet werden. Dabei geht es vor allem um das sog. Signieren. Das bedeutet, ein Dokument (bei Bitcoin: Nachricht, insbesondere jede Transaktion) wird mit Daten "unterschrieben", die nur vom Urheber des Dokuments stammen können. Niemand sonst kann diese Daten (=Unterschrift) herstellen, ähnlich wie auch in Wirklichkeit nur der Unterzeichner eines Dokuments diese Unterschrift "herstellen" kann. Damit läßt sich die Echtheit (= unveränderter Zustand) eines Dokuments festschreiben und überprüfen. Da Bitcoin Nachrichten frei und unverschlüsselt über das Internet austauscht, wird auf diese Weise sichergestellt, daß niemand Nachrichten mit betrügerischer Absicht verändern kann. Praktisch funktioniert das mit Anwendung eines asymmetrischen Verschlüsselungsverfahrens auf eine bestimmte Weise. Was heißt das, asymmetrische Verschlüsselung? Doch langsam, es ist viel einfacher und verständlicher, Schritt für Schritt zu gehen. Zunächst also:

Symmetrische Verschlüsselung

ist das, was jeder sofort als Verschlüsseln kennt - eine bestimmte Vorschrift, wie Daten in Geheimtext umgewandelt werden. Der Empfänger der verschlüsselten Nachricht wendet das umgekehrte Verfahren an, um zu entschlüsseln. Dazu muß er den gemeinsamen "Schlüssel" kennen. Diese Methode wird symmetrisch genannt, weil beide, Sender und Empfänger, den gleichen Schlüssel verwenden. (z.B. Verschlüsseln von ZIP-Dateien mit einem Passwort) Ein einfaches Beispiel für symmetrische Verschlüsselung ist die folgende Vorschrift: Ersetze jeden Buchstaben durch den Buchstaben, der sich im Alphabet um X Stellen weiter hinten befindet. Die Kenntnis dieses Verfahrens zusammen mit der Zahl X ist hier der Schlüssel. Wenn im folgenden X = 2, dann sieht das so aus:

a b c d e f g h i j k l m n o p q r s t u v w x y z (Klartextalphabet)
c d e f g h i j k l m n o p q r s t u v w x y z a b (Geheimalphabet)

Der Text "Hallo Welt" würde dann zu "Jcnnq Ygnv".

Die Schwachstelle bei dieser Verschlüsselungstechnik ist, daß der geheime Schlüssel auf irgendeine sichere Art und Weise vom Sender zum Empfänger gelangen muß, z.B. Gespräch unter vier Augen. Ohne zusätzlichen sicheren Kanal bzw. vorherige Absprache ist keine sichere Verschlüsselung möglich. Ad-hoc-Verschlüsselung ohne sicheren Kanal zwischen zuvor Unbekannten (genau das Umfeld von Bezahlungen über das Internet) sind nicht möglich.

Asymmetrische Verschlüsselung

Schlüsselpaar

Schlüsselpaar: privater und öffentlicher Schlüssel

Asymmetrische Verschlüsselung (in Anlehnung an das Englische auch: Public-Key-Kryptographie) ist ein Stück raffinierter und löst die Schwachstellen von symmetrischer Verschlüsselung. Hier erzeugt ein Empfänger zwei zusammengehörige Schlüssel, ein sog. Schlüsselpaar aus einem privaten und einem öffentlichen Schlüssel. Der öffentliche Schlüssel ist für alle einsehbar und kann z.B. per Email frei übers Internet verteilt werden (unsicherer Kanal). Der Sender verschlüsselt seine Nachricht mit dem öffentlichen Schlüssel des Empfängers. Entschlüsseln ist in diesem System nur mit dem passenden privaten Schlüssel möglich. D.h. nach dem Verschlüsseln mit dem öffentlichen Schlüssel kann niemand mehr die Nachricht dekodieren, nur noch der Empfänger, der den privaten Schlüssel besitzt.

öffentlichen Schlüssel verteilen

öffentlicher Schlüssel wird frei verteilt

Der Vorteil dabei ist, daß kein anderweitiger gesicherter Austausch oder vorherige Absprachen zwischen Sender und Empfänger nötig sind. Es braucht kein gemeinsames Geheimnis mehr.

Konzept asymmetrischer Verschlüsselung

Signieren.

Beim Signieren wird ebenfalls verschlüsselt, aber nicht um den Inhalt einer Nachricht vor fremder Einsicht zu schützen, sondern um die Nachricht als echt auszuweisen, d.h. die Nachricht stammt bestimmt vom Absender und wurde nicht verändert. Dazu verschlüsselt der Sender seine Nachricht mit seinem eigenen privaten Schlüssel. Jeder andere kann die Nachricht mit dem öffentlichen Schlüssel des Senders entschlüsseln. Falls etwas Sinnvolles dabei herauskommt, kann der Empfänger sicher sein, daß die Nachricht vom Empfänger stammt Da nur der Sender im Besitz des privaten Schlüssels ist.

Prinzip digitalen Signierens

Anmerkung: Verschlüsseln und Signieren lassen sich verbinden.

Digitale Signatur in der Praxis, Hashing

Eine digitale Signatur verwendet noch eine Abwandlung des Signierverfahrens, das die automatische Überprüfung ermöglicht. Der Sender berechnet nach einem bekannten Verfahren eine bestimmte Zahl aus der Nachricht, einen sog. Hash-Wert [sprich: "Häsch"]. Eine Hash-Funktion ist eine "Einbahnfunktion", die jeder Eingabe einen bestimmten Wert zuweist, welcher aber nichts über die Eingabe aussagt. Insbesondere kann die Eingabe nicht mehr aus dem Hashwert zurückgerechnet werden. Als anschauliches Beispiel kann die Quersumme einer Zahl als Hashfunktion dienen.

Nachricht Hashwert bei Quersumme als Hashfunktion
123 6
1234 10
926 17
1637 17

Jeder "Nachricht" ist hier ein ganz bestimmter Hashwert zugewiesen, die ursprüngliche Nachricht kann aber nicht mehr aus dem Hashwert rekonstruiert werden. Zurück zur Signatur: Hat der Sender den Hashwert der Nachricht berechnet, verschlüsselt er diesen Wert mit seinem privaten Schlüssel. Das Ergebnis davon ist die Signatur. Diese hängt er an die Nachricht an, genau wie eine handschriftliche Unterschrift. Von jetzt an, kann jeder Empfänger die Unterschrift wie folgt prüfen: Er dekodiert die Signatur mit dem öffentlichen Schlüssel des Senders und erhält damit den Hashwert, den der Sender berechnet hat. Dann berechnet der Empfänger selbst ebenfalls den Hashwert der Nachricht und vergleicht beide Ergebnisse. Stimmen sie überein, kann der Empfänger sicher sein, daß niemand die Nachricht verändert hat und daß sie außerdem garantiert vom Sender stammt.

A überweist an B 100,- Bitcoin
+++++++ Signatur ++++++++
34mb72m3nv237364bv7846b8
fz6fg56hgk05hdkgfh18hk15
++++++++++++++++++++++++++

Schema einer Bitcoin-Nachricht mit Signatur

Die Sicherheit dieses Verfahrens hängt allein von der Hashfunktion ab. Das wird deutlich bei den letzten beiden Zeilen der obigen Tabelle mit beispielhaften Hash-Werten. Die Zeilen zeigen beide den gleichen Hash-Wert für verschiedene Nachrichten, eine sog. Hashkollision. D.h. zwei Eingaben erzeugen den gleichen Hashwert. Ein Angreifer könnte das ausnutzen, um die Nachricht zu fälschen und im obigen Beispiel 1637 Bitcoin statt 926 Bitcoin zu erhalten, denn der Hashwert wäre der gleiche. Niemand im System würde sich beschweren, da es so aussieht, als hätte der Sender die Nachricht gültig unterschrieben. Zum Glück ist es bei echten Hashfunktionen quasi unmöglich, eine Hashkollision zu finden.

Wahrscheinlichkeit für
  • Sechs Richtige im Lotto
    1 : 13.983.816
    (Zahl mit 8 Stellen)
  • Hashkollision (Hashfkt. SHA-256)
    1 : 1,16 x 1077
    (Zahl mit 77 (!) Stellen)

Bevor eine Hashkollision gefunden ist, ist es wahrscheinlicher etliche Male einen Sechser im Lotto zu haben. D.h. es ist fast unmöglich irgendeine zweite Nachricht zu finden, die den gleichen Hashwert erzeugt. Insbesondere ist es unmöglich eine zweite Nachricht mit gleichem Hashwert zu finden, deren Klartext auch noch Sinn macht, und darüber hinaus auch noch im Sinne eines Angreifers abgeändert sein soll. Zur Veranschaulichung hier ein paar Nachrichten mit ihren Hashwerten, die das Verfahren, das bei Bitcoin zum Einsatz kommt (SHA-256) erzeugt (die Buchstaben stammen aus der Darstellung im Hexadezimalsystem). Schon kleinste Änderungen an der Nachricht erzeugen völlig andere Hashwerte:

"Freies Geld" | ede9ef2474c3a5951aceb6009223f2fff90aeba6e7a625c3fceb7f7806a1e94e
"FreiesGeld"  | 6baafaa91301445e178c9a46a38c80a2306a69ed3960258ed51a85645308e078
"Fraies Geld" | a82e3509c623abf4669de478a2608bfa4bbbf1d69ce544dea33e20b23e20bd09
"Faires Geld" | fc85b8d4d31fd1fc124c240dcc141c0a1876afe1494df214415e616c11f87e5c

Bitcoin-Details:

Zur weiteren Sicherheit werden bei Bitcoin Hashfunktionen doppelt angewendet, d.h. der erste Hashwert wird nochmal ge-hasht. Bitcoin verwendet ein asymmetrisches Kryptosystem, das "Elliptic Curve Cryptography" (ECC) genannt wird. Bei diesem Verfahren reichen bereits kurze Schlüssellängen zu einer enormen Sicherheit. Bei Bitcoin werden öffentliche Schlüssel mit einer Länge von 160 Bit eingesetzt. Das entspricht in etwa der Sicherheit einer Schlüssellänge von 1024 Bit beim bekannten Algorithmus RSA. (zum Vergleich: Die SSL-Verschlüsselung für HTTPS - typisch für Online-Banking - ist mit RSA und 128-Bit-langen Schlüsseln abgesichert.) Bitcoin-Adressen sind nichts anderes als öffentliche Schlüssel. Die zugehörigen privaten Schlüssel werden in der wallet.dat-Datei gespeichert. Bitcoin-Adressen werden in einer eigenen Codierung geschrieben, genannt Base58. Diese Codierung dient unter anderem dazu, die ausgeschriebene Form von Schlüsseln leserlich und kurz zu halten und auf druckbare ASCII-Zeichen abzubilden. Im Vergleich zur bekannten Standard-Codierung Base64 wurden bei Bitcoins Base58 gezielt Satzzeichen weggelassen, damit bei einem Doppelklick auf die Zeichenfolge diese komplett ausgewählt wird, was häufige Vorgänge wie Kopieren und Einfügen erleichtert. Außerdem wurden bei Base58 noch solche Zeichen ausgelassen, die beim manuellen Abtippen zu Verwechslungen führen könnten wie z.B. O (großes "O") und 0 (Null) oder 1 (eins) und l (kleines "L").