Um einen Private Key zu generieren, bräuchte es keinen Computer oder Internetzugang, sondern lediglich eine Münze (Kopf = 0, Zahl = 1). Die Münze wird 256x geworfen und jeweils aufgeschrieben, ob das Resultat Kopf (0) oder Zahl (1) ist. Somit erhält man eine 256 Ziffern lange Zahl, den Private Key. Diese binäre Darstellung kann offline in die hexadezimale umgeformt werden. Aus dem Private Key lässt sich der Public Key und die Bitcoin Adresse ableiten. Ohne dass diese ans Internet gemeldet wird, können nun Einzahlungen getätigt werden. Die Blockchain akzeptiert alle Zahlungen, die an eine gültige Bitcoin Adresse überwiesen werden. Sämtliche Private Keys - und damit auch Bitcoin Adressen - sind sozusagen bereits vorhanden und durch den Münzwurf wird lediglich zufällig einer davon gewählt. Da es aber mehr Private Keys als Atome im sichtbaren Universum gibt, ist es praktisch unmöglich, dass zweimal der gleiche ausgewählt wird. Würde dies trotzdem mal geschehen, hätten zwei Personen Zugriff auf dasselbe Konto. Einzahlungen können zwar getätigt werden, ohne mit dem Internet verbunden zu sein. Jedoch keine Auszahlungen. Dafür wird ein Wallet benötigt. Ein Wallet ist eine App und Datenbank. Darin werden die Private Keys gespeichert, die zum Auslösen einer Überweisung benötigt werden. Im Wallet ist auch die Blockchain (oder Teile davon) gespeichert. Daraus kann die Wallet Software Kontostände berechnen. Die Bestände der einzelnen Bitcoin Adressen können dann zu einem Wallet Kontostand zusammengefasst werden. Es gibt unterschiedliche Wallets:
Offline Wallet, Cold Storage Diese bieten die höchste Sicherheit. Zwei Computer Wallet Hierbei wird das Offline Wallet auf einem Computer erstellt, der danach keine Verbindung mehr zum Internet hat. Die einzige Funktion besteht darin, eine online erstellte Transaktion offline mit der digitalen Signatur zu versehen. Diese beweist den Besitz des Private Keys, ohne dass dieser preisgegeben wird. Die signierte Transaktion kann dann vom Online-Wallet ausgeführt und durch die Miners bestätigt werden. Der online-offline Transfer kann über einen USB-Stick oder QR-Code geschehen. Wichtig ist, dass vom Offline-Wallet eine Sicherungskopie erstellt wird. Papier Wallet Dieses kann zum Beispiel bei bitaddress.org kreiert werden. Dabei sollte der Computer offline sein. Um die Sicherheit zusätzlich zu erhöhen, können mehrere Adressen generiert und zusätzlich ein Passwort für die Verschlüsselung (BIP0038) angegeben werden. In der Grafik ist ein verschlüsselter Private Key dargestellt, daher die Farbe blau und das Kürzel 6P. Wiederum auf bitaddress.org kann der Private Key entschlüsselt werden. Ausgedruckt kann das Papier Wallet dann in einen Safe gelegt werden. Falls der Safe bei einer Bank liegt, würde ich keine Verschlüsselung vornehmen. Sie könnten das Passwort verlieren, womit Ihre Bitcoins verloren wären! Der Private Key könnte auch direkt durch Münzwurf auf Papier aufgeschrieben werden. Um langfristig Bitcoins zu halten, ist dies eine sehr sichere Variante. Sobald diese aber ausgegeben werden sollen, kommt man an einem digitalen Wallet nicht vorbei. Um nur den Kontostand abzurufen, importieren Sie nur die Bitcoin Adresse (siehe unten Load & Verify). Sollen Zahlungen getätigt werden, muss aber auch der Private Key ins Wallet transferiert werden (Spend). Der Import kann von Hand oder über den QR-Code erfolgen. Hardware Wallet Dieses bieten den besten Kompromiss aus sehr hoher Sicherheit und einfacher Handhabung. Es ist sozusagen ein grosser USB-Stick, der nur dafür entworfen wurde, ein Wallet zu sein. Keine Software kann auf ihm installiert werden (nicht einmal ein Zufallsgenerator), was ihn sehr sicher macht. Ein verloren gegangenes Gerät kann ersetzt und das Wallet wiederhergestellt werden. Dazu braucht es den Seed (Keim), ein Passwort bestehend aus 12-24 Wörtern, das an einem sicheren Ort aufbewahrt werden muss. Es ist heute üblich, längere Passwörter zu wählen, die einfach zu merken sind, als kürzere mit Sonderzeichen. Beispiel: Trezor Obiger TREZOR speichert nur die Private Keys und signiert Transaktionen. Kein Private Key wird an den Computer gesendet. Bei einer Transaktion wird das Template von der Bitcoin Software an den TREZOR geschickt. Dieser zeigt auf dem Bildschirm die Empfänger Bitcoin Adresse und den Betrag an. Durch drücken der ok Taste, wird die Transaktion bestätigt und TREZOR schickt die signierte Transaktion zurück an den Computer. Selbst wenn letzterer durch einen Virus befallen ist, hat dies keinen Einfluss auf die Sicherheit der Transaktion. Der TREZOR selber ist durch einen PIN gesichert. Die PIN Tastatur auf dem Computer sieht so aus: Die Anordnung der Tastatur wird auf dem TREZOR angezeigt: Nun kann der PIN auf dem Computer eingegeben werden. Ohne TREZOR nützt der PIN nichts, da die Anordnung der Tastatur nicht bekannt ist. Bei jeder PIN Fehleingabe wird die Zeit, die abgewartet werden muss, exponentiell erhöht; nach dem 20-ten Versuch sind dies bereits 2 Tage. Da der PIN praktisch nicht geknackt werden kann, nützt auch der TREZOR alleine nichts. Online Wallet Dieses befindet sich im Browser auf dem eigenen Computer. Installation und Sicherungskopien geschehen automatisch. Sicherheit ist nun zentral. Der Anbieter muss vertrauenswürdig und technisch auf dem neuesten Stand sein. Der Private Key wird verschlüsselt im Wallet gespeichert und nur zum Signieren von Transaktionen kurze Zeit entschlüsselt. Zusammen mit dem sogenannten Chain Code oder Seed (=Keim) können viele Bitcoin Adressen generiert werden (der technische Teil befindet sich hier im hinteren Teil). Sicherheitshalber besteht der Chain Code meistens aus 12-24 Wörtern und ist daher sehr schwierig zu knacken. Er entspricht häufig dem Passwort für den Wallet Zugriff. Ein Hacker oder Virus könnte über elektronisches Beobachten der Tastatur in den Besitz des Chain Codes gelangen, warten bis der Private Key entschlüsselt wird und die Bitcoins stehlen. Deshalb empfiehlt sich, zusätzlich die 2-Faktor-Authentifizierung (2FA) zu benutzen, welche die Sicherheit signifikant erhöht. Eine Drittpartei, sozusagen ein Treuhänder, generiert dabei über Google Authenticator einen zufälligen 2FA Code, der auf dem Handy abrufbar ist. Zum Auslösen von Transaktionen werden 2 von 3 digitalen Unterschriften gebraucht.
Eine signierte Transaktion wird zusammen mit dem 2FA Code, jedoch ohne Private Key, an die Drittpartei geschickt, dort überprüft und ans Internet weitergeleitet. Falls das Handy verloren geht, kann das 2FA Passwort auf einem neuen manuell eingegeben werden. Light Wallet Ein Wallet, das die ganze Blockchain herunterlädt, betätigt sich als sogenannte "Full Node". Pro Block werden sowohl Kopfzeile wie auch Merkle Tree und Transaktionen benötigt. Dafür wird Speicherkapazität von bereits 85 GB benötigt und der ganze Download kann mehrere Tage in Anspruch nehmen. Für normale Computer kann das Anhängen von neuen Blöcken länger brauchen als deren Entstehungen, womit die lokale Blockchain laufend im Rückstand ist. Spätestens über ein Handy ist dieser Vorgang sowieso nicht mehr möglich. Transaktionen benötigen 99.9% des Speicherbedarfs. Meistens genügt die abgespeckte (light) Version, die etwa 1000x weniger Speicherplatz benötigt. Ein Light Wallet lädt keine Transaktionen (Tx1, Tx2...), sondern nur die Kopfzeilen der Blockchain (blau) herunter. Falls nun jemand eine Zahlung tätigen möchte, muss das Light Wallet erstmals prüfen, wie hoch der Kontostand der tangierten Bitcoin Adresse ist. Da es selbst keine Transaktionsliste führt, muss es die UTXO von den Full Nodes anfordern, die die ganze Blockchain herunterladen und überwachen. Wie kann das Light Wallet aber wissen, dass die Daten nicht manipuliert sind? Dazu muss der Miner auch den Merkle Tree Weg von der Transaktion bis zum Root-Hash mitliefern.
Beispiel: Das Light Wallet erhält Tx3 von einem Miner. Damit das Light Wallet sich vergewissern kann, dass die Daten stimmen, muss er auch Hash4 und Hash12 mitliefern. Wieso? Die TransaktionsID von Tx3 entspricht bereits Hash3. Damit kann über Hash4 Hash 34 und in einem weiteren Schritt über Hash12 die Root-Hash berechnet werden. Nur wenn die Daten stimmen, wird der berechnete Root-Hash mit dem vom Light Wallet gespeicherten Root-Hash übereinstimmen. Falls der Kontostand genügt, kann das Light Wallet nun die Transaktion auslösen, sagen wir Tx5. Wie gezeigt wurde, sollten bei grösseren Beträgen mehrere Blöcke abgewartet werden, bevor das Settlement abgeschlossen wird. Dazu muss das Light Wallet etwas später Tx5 und zugehörige Hashes anfordern, um zum Root-Hash zu gelangen. Damit weiss das Light Wallet, in welchen Block Tx5 aufgenommen wurde. Nachdem die Blockzugehörigkeit geklärt ist, wartet das Wallet mit dem Settlement der Zahlung noch ab, bis die nachfolgenden 5 Blöcke bestätigt wurden und die Transaktion nicht mehr rückgängig gemacht werden kann. Bleibt zu sagen, dass natürlich auch Drittfirmen eine Kombination dieser Wallets anbieten. Dabei ist die Vertrauenswürdigkeit entscheidend. Einen guten Ruf hat die US Firma Coinbase, die eine Banklizenz besitzt und Bitcoin Einlagen teilweise gegen Diebstahl versichert. https://bitcoin.org https://bitcointrezor.com/ Mathematisch ausgedrückt, ist eine Hashfunktion eine Funktion, die gewisse Eingangsdaten beliebiger Länge durch Verschlüsselung auf eine Zeichenfolge mit fester Länge abbildet. Man kann sich ein Hash aber auch als eine Art Fingerabdruck vorstellen. Wie der Fingerabdruck zu einer bestimmten Person gehört, gehört der Hash zu einem ganz bestimmten Datensatz. Ein Hash beweist das Vorhandensein eines Dokuments zu einem bestimmten Zeitpunkt. Da in einer Blockchain nur wenig Speicherplatz zur Verfügung steht, begnügt man sich meistens mit einem kostengünstigen Hash. Man kann sogar sagen, dass eine Blockchain praktisch nur aus Hashes besteht. Beispiel einer Hashfunktion ist der SHA-256 Algorithmus (Secure Hash Algorithm). Der resultierende Hash kann hier ausprobiert werden. Unten derjenige für "ich heisse Reto". Für SHA-256 werden 512 Bits gebraucht. Dazu wird dem Computer zuerst angegeben aus wie vielen Bits die zu verschlüsselnde Nachricht besteht. Mein Vorname "Reto" wird im binären System durch 32 Bits abgebildet, jeder Buchstabe entspricht 8 Bits oder 1 Byte (siehe oberste Zeile unten). Die Zahl 32 sieht im binären System folgendermassen aus: 32 = 100000 = 1x32 + 0x16 + 0x8 + 0x4 + 0x2 + 0x1 Diese Zahl steht am Ende des Codes (siehe unten). Die nicht gebrauchten Stellen zwischen binärem Text und dessen Längenangabe werden mit Nullen aufgefüllt, um schliesslich auf die 512 Bits zu gelangen (siehe unten). Die 1 zu Beginn der zweiten Zeile gibt an, dass ab dort nicht mehr die ASCII Tabelle verwendet wird, sonst würde 1OOOOO = 20 statt 32 interpretiert. Dies ist der Input für die SHA-256 Hashfunktion. Der Output besteht dann aus 256 Bits. Der Hash in der obigen Grafik sieht optisch kürzer aus, was aber auf die hexadezimale Schreibweise zurückzuführen ist. Anwendung 1: Passwörter Meistgebrauchte Anwendung von Hashes ist die Passworteingabe. Die Speicherung von Passwörtern auf der Datenbank einer Internetseite ist keine gute Idee. Oft wird deshalb nicht das Passwort selber, sondern nur dessen Hash gespeichert. Beispiel: Falls ich das Passwort "blockchain-nachrichten" benutzen würde, ergibt der Hash: Dieser wird in die Datenbank geschrieben. Um das Passwort bei der Anmeldung zu prüfen, wird erneut der Hash generiert und mit dem gespeicherten verglichen. Viele Leute benutzen jedoch weiterhin einfache Passwörter, an die sie sich erinnern können. Für die gibt es aber ein Wörterbuch mit tabellierten Hash-Werten, womit der Hacker wieder einfaches Spiel hat. Deshalb werden heutzutage ein paar zufällige Zeichen an das Passwort angehängt (Salt genannt), bevor der Hash berechnet wird. Hier 2?5tq: Die Internetseite generiert nun ein sichereres Passwort. Der Zusatz muss nicht geschützt werden, da er nur dazu dient, dass ein Hacker kein Hash-Wörterbuch mehr benutzen kann. In der Datenbank der Internetseite steht nun: 3231835c22e0ae528dc92da96b8de2afec4aaca6844d39bc37a571a3a44be3e1 2?5tq Als zusätzliche Sicherheit kann die Hashfunktion mehrere Male durchlaufen werden. Anwendung 2: Sicherung der Bitcoin-Blockchain (Proof-of-Work) Jeder kann sich an der Sicherung der Bitcoin Blockchain beteiligen. Dazu muss er lediglich eine Software auf seinen Server runterladen und sicherstellen, dass er einen leistungsfähigen Prozessor sowie eine schnelle Internetverbindung (Bandbreite) hat. Die Software lädt die Blockchain auf den Server runter und führt gewisse Funktionen aus. Für die geleistete Arbeit dürfen sie an einer Lotterie teilnehmen. Diese läuft wie folgt ab: Zuerst wird der Kopfzeilen-Hash des Blocks generiert. Nun gilt es dem Blockinhalt Zahlen (Nonce) anzufügen, die einen Hash mit einer Null zu Beginn generieren. Wenn die Zahl 1 an den Text angehängt wird, resultiert per Zufall bereits ein Hash mit einer 0 am Anfang. Nun wird jeweils um 1 erhöht, bis ein Hash mit 2 Nullen gefunden wird. Dies geschieht erst nach 394 Versuchen beim Anhängen der Zahl 395. Als Bitcoin 2009 startete, musste ein Hash gefunden werden, der mit 32 Nullen begann: Der hexadezimale Wert beginnt mit weniger Nullen, da dies ja einem kompakteren Format entspricht. Es ist kein Zufall, dass im hexadezimalen System lauter F stehen, da im binären System nach den Nullen die grösstmögliche Zahl steht (224x1) und F im hexadezimalen System auch für den höchsten Wert steht. 0 und 1 entsprechen Kopf und Zahl bei einer Münze. Die Wahrscheinlichkeit, bei einem Münzwurf 32x Kopf (=0) zu werfen, beträgt: O,5^32 = O,OOOOOOOOO2325581 oder 1:43OOOOOOOO. Im Durchschnitt wurde zu Beginn von Bitcoin folglich nach 4,3 Mrd. Versuchen in der Lotterie gewonnen. Schauen wir mal, wie viele Nullen heute erforderlich sind. Dazu gehen wir auf blockchain.info: Da der Hash im hexadezimalen Format drin steht, muss er im Konverter ins binäre umgewandelt werden: Nun können die Nullen abgezählt werden. Da sich heute viele Computer an der Sicherung beteiligen und die Leistung der Prozessoren seit 2009 gestiegen ist, werden im Schnitt bereits 73 Nullen gefordert, damit immer noch nur all 10 Minuten ein Bitcoin Block entsteht. O,5^73 = O,OOOOOOOOOOOOOOOOOOOOO4235165 oder 1:944473296573929OOOOOOO Im Durchschnitt wird heute nach 9,4 Trilliarden Versuchen in der Lotterie gewonnen. Da Zahlen wie eine Trilliarde schwierig zu erfassen sind, wird der sogenannte Schwierigkeitsgrad (englisch Difficulty) definiert: Difficulty = benötigte Versuche heute / benötigte Versuche bei Start von Bitcoin 2009 9,4 Trilliarden / 4,3 Milliarden = 219 644 952 691 Anwendung 3: Light Wallets Die Grösse der Blockchain beträgt bereits ca. 85 GB. Dies ist zu viel für normale PCs oder Smartphones. Deshalb laden Light Wallets nur eine abgespeckte Version herunter, die keine Transaktionen, sondern nur die Kopfzeilen der Blockchain herunterladen. Die fehlenden Daten können dann bei den Minern angefordert werden. Die Hashes dienen als Beweismittel, dass der Miner die korrekten Daten liefert. Um möglichst wenig Beweis-Hashes zu brauchen, werden diese in einem sogenannten Merkle Tree geordnet (untere Grafik). Beispiel: Ein Smartphone Wallet fordert Transaktion Tx2 von einem Miner an. Der Root-Hash (Root für Wurzel des umgekehrten Baumes) ist in der Kopfzeile verankert. Führen die Hashes im Endeffekt zum Root-Hash, wurden keine Daten manipuliert. Hash2 kann das Wallet selber aus der angeforderten Transaktion Tx2 berechnen. Bei der oberen Anordnung werden also noch Hash1, Hash3 und Hash4 gebraucht, um den Root-Hash zu berechnen. Bei der unteren Anordnung genügen jedoch Hash1 und Hash34, da aus Hash1 und Hash2 Hash12 berechnet werden kann. Ein Hash wird über den Merkle Tree eingespart. Bei mehreren tausend Transaktionen pro Block ist die Einsparung immens. Binäre Zeichen sind zwar für Computer geeignet, jedoch für den Menschen nicht wirklich leserlich. Deshalb wurde die hexadezimale Notation eingeführt. Mit 4 Bits können 16 Zeichen dargestellt werden: Damit kann das ABC nur bis zum Buchstaben F abgebildet werden. Daher wurde auf 8 Bits (=1 Byte) umgestellt. Da Geschichte pfadabhängig ist und die neue Version mit der alten hexadezimalen Notation kompatibel sein musste, wurden die 8 Bits als 2x4 Bits dargestellt. Damit können maximal 256 Zeichen dargestellt werden: Mein Vorname, bestehend aus 32 Bits, wird zu: ASCII Binär beinhaltet die 4 Bits Schreibweise, ausser dass die erste Null jeweils vernachlässigt wird. Dies ist auch wieder geschichtlich bedingt; ASCII bestand zuerst aus 7 Bits. Natürlich gibt es heute Konvertier-Programme:
Da in der Informatik meistens mit zwei Zuständen (ein/aus) gearbeitet wird, basiert die Mathematik auf Potenzen von 2 statt 10. Folgende Zahlensysteme werden bei Bitcoin gebraucht.
Beispiel: Zahl 64 (hinterste Stelle = 1. Stelle) Dezimal (dezi = 10) 1. Stelle = 10^0 = 1 4x1 = 4 2. Stelle = 10^1 = 10 6x10 = 60 Binär (bi = 2) 1. Stelle = 2^0 = 1 2. Stelle = 2^1 = 2 3. Stelle = 2^2 = 4 4. Stelle = 2^3 = 8 5. Stelle = 2^4 = 16 6. Stelle = 2^5 = 32 7. Stelle = 2^6 = 64 Zahl 64 =1000000 Hexadezimal: 1. Stelle = 16^0 = 1 2. Stelle = 16^1 = 16 3. Stelle = 16^2 = 256 Zahl 64 = 40 Basis 64 (Base64): 1. Stelle = 64^0 = 1 2. Stelle = 64^1 = 64 Zahl 64 = 10 Basis 58 (Base58): Dabei werden gewisse Zeichen von Base 64 aus Gründen der Verwechslung vermieden (so 0, O, I, l). Base58Check: Hier wird Base58 noch eine Prüfsumme angehängt. Ziel davon ist, Tippfehler zu erkennen. Base58Check ist schliesslich das Format der Bitcoin Adressen. |