How it works

Einleiung:

Viele Personen denken, dass beim Generieren einer Bitcoin Adresse diese dann neu erstellt wird. Dabei handelt es sich aber um einen Irrglauben. Das Erstellen einer Bitcoin Adresse ist eine rein mathematische Operation, welche man theoretisch auch offline oder auch auf einem Papier erstellen könnte. In diesem Kapitel wird genauer erläutert, wie diese mathematischen Operationen funktionieren und wie man diese zu seinem Vorteil nutzen kann, um z.B. eine Vanity Bitcoin oder eine Passphrase Adresse zu erstellen. Auch gibt es viele gute Tutorial auf YT, welche auch noch genauer erklären, wie eine Blockchain an sich funkioniert.

Generieren eines Private Keys

Das Generieren einer Bitcoin Adresse beginnt damit, einen random Private Key zu generieren. Es ist extrem wichtig, dass dieser Key möglichst zufällig erstellt wird. Wenn Angreifer in der Lage wären diesen Key zu erraten, sind sie dadurch auch automtisch in der Lage den Public Key und die Bitcoin Adresse zu bestimmen. Dieser zufällig generierte Key wird anschliessend mit Hilfe des Haschingalgorythmus SHA256 in den eigentlichen Private Key verwandelt.

Generieren des Public Keys

Im 2. Schritt wird aus dem Private Key ein Public Key generiert. Bitcoin benutzt dafür die Generierung eines Public Key ECC (Elliptic Curve Cryptography). Wie genau Elliptic Curve funktioniert, wird im nächsten Kapitel beschrieben. Nun erhalten wir einen Public Key, welcher mit dem Private Key in Verbindung steht. Dabei ist aber wichtig zu wissen, dass man zwar jederzeit in der Lage ist vom Private Key den Public Key zu generieren aber nicht umgekehrt.

Wie funktioniert ECC

Bei einer Elliptic Curve handelt es sich, wie der Name schon sagt, um einen Graphen. Die Formel um diesen Graphen zu erstellen lautet y**2=x**3 + ax + b (mod p) . In dieser Formel sind a, b und die Primzahl p fest definierte Werte, welche je nach Elliptic Curve varieren können. Bitcoin verwendet wie auch viele andere Altcoins secp256k1. In diesem Fall gilt b = 7 und a = 0 .

Image of Elliptic Curve
Beispiel von Secp256k1

Der Trick dabei ist es nun, Linien zwischen 2 Punkten (oder auch Addition) oder auch die Tangente einer Linie zu zeichnen (Multiplikation) wenn nur ein Punkt vorhanden ist. Nun kann man dies x mal wiederholen, wobei x die Zahl des vorherig generierten Private Keys enstpricht. Das Ganze startet vom Generatorpoint aus, welcher eine Konstante ist. Nun könnte man sich natürlich fragen, warum ECC denn so sicher ist. Wenn man den Gerator Point hat und der Private Schlüssel nur daraus besteht den Gerator Point zu multiplizieren, gibt es eigentlich keinen Grund, den Generator Point so häufig zu multiplizieren, bis man den Public Key erhält. Allerdings vergisst man dabei einen wichtigen Faktor nähmlich die Zeit. Die Elliptic Curve Secp256k1 kann beispielsweise eine Private Keylänge von fast 2**256 haben. Wenn man nun in der Lage wäre 2**20 Additionen pro Sekunde durchzuführen (~1 Million), bräuchte man dennoch 2**256 / 2**20 = 2**12.8 Sekunden. Zum Vergleich: das Universum ist geschätzt etwa 14 Milliarde Jahre alt (~2**34). Man bräuchte also 1/3 von der Zeit seit der Enstehung der Erde, um den Secret Key zu bestimmen.

Allgorythmus zum Generieren des Keys

Nun könnte man sich natürlich fragen, wie ein Public Key generiert werden kann, wenn es dafür bis zu 2**256 Schritte braucht. Die Antwort darauf ist einfach Multiplikation. Ein gutes Beispiel dafür wäre die Frage, wie viele Schritte man braucht um die Zahl x**8 auszurechnen. Viele Personen würden nun mit 7 Antworten da x**8 = x*x*x*x*x*x*x*x ist. Allerdiengs wird dabei oft vergessen, dass man x auch multiplizieren kann. Die richtige Antwort wäre dann 3

0. x**1 = x

1. x**2 = x**1 * x**1

2. x**4 = x**2 * x**2

3. x**8 = x**4 * x**4

Komprimierte und unkomprimierte Keys

Im nächsten Schritt wandelt man die erhaltenen Punkte aus dem vorherigen Schritt in den eigentlichen Public Key um. Dabei gibt es bei Bitcoin 2 verschiedene Keytypen komprimierte und unkomprimierte. Der Unterschied besteht lediglich darin, dass bei einem unkomprimierten Key auch noch die Y Koordinate zu erhalten ist. Da die Elliptic Curve mit der Formel y**2 = x**3 + ax + b definiert ist, ist es nicht zwindgend notwendig beide Koordinaten abzuspeichern. Der unkomprimierte Key wird in Bitcon im folgenden Format dargestellt 04XY. Beim komprimierten Key kommt es darauf an, ob Y gerade oder ungerade ist. Wenn Y gerade ist, ist das Format 02X und wenn Y ungerade ist, folgt das Format 03X.

Erzeugen einer Adresse

Von einem Public Key zu einer Adresse ist es lediglich einen weiteren Schritt. In diesem wird zuerst der entstandene Public Key durch SHA256 und anschlissend RIPEMD160 gehascht. Anschliessend wird eine 00 Byte (Für Main Network) davorgesetzt. Dieser neu enstande String wird zwischengespeichert, da er später nochmals in dieser Form verwendet werden muss. Nun nimmt man ihn und wendet 2 mal darauf SHA256 an und nimmt die ersten 4 Bytes, welche als Prüfzahl fungieren. Diese setzt man hinten an den zwischengespeicherten String an. Nun nimmt man den neu erhaltenen String und entcodet ihn mit Base58 und setzt noch eine 1 vorne dran und fertig ist die Bitcoin Adresse.

Wie Vanity-BTC funktioniert

Unter Vanity BTC stellt man sich sofort einen extrem komplexen und durchdachten Algorithmus dar. Allerdings stimmt das so nicht, da keiner der oben beschriebenen Schritte umkehrbar ist (Was auch extrem wichtig für die Sicherheit ist). Deshalb ist man auch nicht in der Lage, auf Wunsch Adressen zu erstellen. Wenn man sich dennoch dazu entscheidet, dass man eine custom Addresse haben möchte, bleibt einem fast nichts anderes übrig, als tausende oder millionen von Adressen zu generieren, bis man eine findet, welche in das gewünschte Pattern passt.

Wie Passphrase-BTC funktioniert

Auch Passphrase-BTC ist kein Hexenwerk. Dabei nimmt man lediglich den String Input vom User und Hash ihn mit SHA256 wodurch man dann einen Private Key erhält. Nun gilt auch hier: same Imput, same Output. Sobald jemand den gleichen Key verwendet wie bereits jemand, hat dieser auch die Kontrolle über alle Bitcoins auf dem Konto. Aus diesem Grund sollte man als Passphrase einen langen Satz nehmen, welche nur einem selber bekannt ist.