DepotWatch Orange

Vom Zufall zur Adresse

Nur zum Lernen. Die hier erzeugten Schlüssel dürfen niemals echte Guthaben verwahren: Ein im Browser auf einem Alltagsrechner erzeugter Schlüssel ist dafür nicht geeignet. Nichts davon wird gespeichert; beim Verlassen der Seite ist alles weg.

Wie aus einer Zufallszahl ein privater Schlüssel, ein öffentlicher Schlüssel und schließlich eine Bitcoin-Adresse wird: Schritt für Schritt erklärt und zum Ausprobieren.

Grundlagen

Der private Schlüssel ist eine Zahl

Ein privater Schlüssel ist nichts weiter als eine 256-Bit-Zahl, also eine Zahl mit bis zu 78 Dezimalstellen. Wer sie kennt, kann über das zugehörige Guthaben verfügen, sonst niemand.

Nicht jede 256-Bit-Zahl ist gültig. Erlaubt sind die Werte von 1 bis knapp unter die Gruppenordnung n der elliptischen Kurve secp256k1. n liegt nur minimal unter 2²⁵⁶, deshalb ist praktisch jede Zufallszahl gültig. Geprüft wird trotzdem, und ein ungültiger Wert wird verworfen und neu gezogen.

Entropie: woher der Zufall kommt

Die Sicherheit eines Schlüssels besteht allein darin, dass niemand ihn vorhersagen kann. Er muss deshalb aus echtem, gleichmäßig verteiltem Zufall stammen, der Entropie. Ein Betriebssystem sammelt sie aus schwer vorhersagbaren Ereignissen (Hardware-Rauschen, Zeitabständen von Interrupts) und stellt sie über einen kryptografisch sicheren Zufallsgenerator bereit, im Browser über crypto.getRandomValues().

Die Qualität des Zufalls entscheidet alles. Selbst gewählte Zahlen, Sätze („Brainwallets“), Würfel mit wenigen Würfen oder fehlerhafte Zufallsgeneratoren haben in der Vergangenheit zu Schlüsseln geführt, die Angreifer systematisch durchprobiert und geleert haben. 256 Bit nutzen nur, wenn alle 256 Bit wirklich zufällig sind.

BIP39: Entropie wird zu Wörtern

Eine lange Hex-Zahl lässt sich schlecht abschreiben. BIP39 übersetzt deshalb Entropie in Wörter: Zur Entropie (128 oder 256 Bit) kommt eine Prüfsumme: die ersten ENT/32 Bit ihres SHA-256-Hashes. Das Ganze wird in Blöcke zu 11 Bit zerlegt, und jeder Block wählt eines von 2.048 Wörtern einer festen Liste.

128 Bit + 4 Bit Prüfsumme = 132 Bit = 12 Wörter; 256 Bit + 8 Bit Prüfsumme = 264 Bit = 24 Wörter. Die Prüfsumme erkennt die meisten Tippfehler. Darum ist nicht jede Folge von 12 Wörtern gültig, und das letzte Wort lässt sich nicht frei wählen.

Aus den Wörtern entsteht über PBKDF2 mit 2.048 Runden HMAC-SHA512 der 512 Bit lange Seed. Eine optionale Passphrase fließt dort ein und ergibt bei gleichen Wörtern ein völlig anderes Wallet.

BIP32: vom Seed zu beliebig vielen Schlüsseln

Aus dem Seed berechnet HMAC-SHA512 den Master-Key: 256 Bit privater Schlüssel plus 256 Bit Chain Code. Aus ihm lassen sich deterministisch beliebig viele Kindschlüssel ableiten, und aus denen wieder Kinder: ein Baum, der vollständig aus den Wörtern wiederherstellbar ist.

Ein Ableitungspfad beschreibt den Weg durch diesen Baum, etwa m/84'/0'/0'/0/0: Zweck / Coin / Konto / extern-oder-Wechselgeld / Index. Ein Apostroph kennzeichnet eine gehärtete Ableitung, die nur mit dem privaten Schlüssel möglich ist. Die erste Pfadstufe (Purpose) legt fest, welcher Adresstyp verwendet wird:

  • BIP44 (m/44'/…): Legacy-Adressen (P2PKH), beginnen mit 1.
  • BIP49 (m/49'/…): SegWit, verpackt in P2SH (P2SH-P2WPKH), beginnen mit 3.
  • BIP84 (m/84'/…): Native SegWit (P2WPKH), beginnen mit bc1q.
  • BIP86 (m/86'/…): Taproot mit reinem Key-Path (P2TR), beginnen mit bc1p.

Vom privaten zum öffentlichen Schlüssel

Der öffentliche Schlüssel ist ein Punkt auf der Kurve y² = x³ + 7 über einem endlichen Körper. Er entsteht durch Punktmultiplikation: Der feste Startpunkt G wird k-mal zu sich selbst addiert, wobei k der private Schlüssel ist. Dank wiederholtem Verdoppeln braucht das nur rund 256 Schritte statt k Additionen.

Rückwärts gibt es keine solche Abkürzung. Aus dem Punkt k·G auf k zu schließen, ist das Problem des diskreten Logarithmus; die besten bekannten Verfahren brauchen rund 2¹²⁸ Operationen. Deshalb darf der öffentliche Schlüssel öffentlich sein.

Ein Punkt hat zwei Koordinaten. Unkomprimiert werden beide gespeichert (Präfix 04, 65 Byte). Komprimiert nur x und ein Präfix 02 oder 03, das angibt, ob y gerade oder ungerade ist (33 Byte); y lässt sich daraus berechnen.

Vom öffentlichen Schlüssel zur Adresse

Eine Adresse ist eine kompakte, mit Prüfsumme versehene Kodierung der Bedingung, unter der Bitcoin ausgegeben werden dürfen. Je nach Typ steckt darin ein Hash des Schlüssels oder der Schlüssel selbst:

  • Legacy (P2PKH): HASH160 = RIPEMD-160(SHA-256(öffentlicher Schlüssel)), 20 Byte, mit Versionsbyte 0x00 in Base58Check kodiert. Beginnt mit 1.
  • Native SegWit (P2WPKH): derselbe 20-Byte-Hash als Witness-Programm der Version 0, in Bech32 kodiert. Beginnt mit bc1q, ist nur in Kleinbuchstaben gültig und günstiger in den Gebühren.
  • Taproot (P2TR): kein Hash, sondern ein 32-Byte-Schlüssel (nur x-Koordinate). Der öffentliche Schlüssel wird vorher mit einem Hash von sich selbst „getweakt“, damit die Adresse festlegt, dass es keinen versteckten Skriptpfad gibt. Witness-Version 1, kodiert in Bech32m, beginnt mit bc1p.

Kodierungen im Vergleich

Dieselben Bytes lassen sich verschieden darstellen. Die Kodierung ändert nie den Schlüssel, nur seine Schreibweise, und fügt meist eine Prüfsumme hinzu.

  • Hex: zwei Zeichen pro Byte, 0 bis 9 und a bis f. Exakt, aber ohne Prüfsumme: Ein Tippfehler ergibt einfach einen anderen, gültigen Schlüssel.
  • WIF (Wallet Import Format): Versionsbyte 0x80, der Schlüssel, optional 0x01 als Markierung „komprimierter öffentlicher Schlüssel“, dann Base58Check. Beginnt mit 5 (unkomprimiert) oder K/L (komprimiert).
  • Base58Check: ein Alphabet ohne leicht verwechselbare Zeichen (0, O, I, l) plus 4 Byte Prüfsumme aus doppeltem SHA-256. Ein Tippfehler wird mit sehr hoher Wahrscheinlichkeit erkannt.
  • Bech32 / Bech32m: nur Kleinbuchstaben und Ziffern, ein lesbares Präfix (bc) und eine BCH-Prüfsumme, die bis zu vier falsche Zeichen garantiert erkennt. Bech32m behebt eine Schwäche von Bech32 und wird ab Witness-Version 1 (Taproot) verwendet.

Prüfsummen schützen vor Versehen, nicht vor Angriffen: Sie verhindern, dass ein Tippfehler Bitcoin an eine Adresse schickt, die niemandem gehört.

Wie groß ist 2²⁵⁶?

Es gibt rund 1,16 × 10⁷⁷ mögliche private Schlüssel. Zum Vergleich, jeweils grob geschätzt:

  • Sandkörner auf der Erde: rund 10¹⁹
  • Sterne im beobachtbaren Universum: rund 10²³
  • Atome, aus denen die Erde besteht: rund 10⁵⁰
  • Atome im beobachtbaren Universum: rund 10⁸⁰

Wer einen bestimmten Schlüssel durch Raten finden will, muss im Mittel die Hälfte des Raums durchsuchen. So lange dauerte das:

Versuche pro SekundeJahre (im Mittel)× Alter des Universums
Ein Laptop10⁷1,83 × 10⁶²1,33 × 10⁵²
Eine sehr schnelle Grafikkarte10⁹1,83 × 10⁶⁰1,33 × 10⁵⁰
Alle Bitcoin-Miner zusammen, wäre jeder Hash ein Schlüssel10²¹1,83 × 10⁴⁸1,33 × 10³⁸
Eine Milliarde solcher Netze10³⁰1,83 × 10³⁹1,33 × 10²⁹

Das Alter des Universums beträgt rund 1,38 × 10¹⁰ Jahre. Die Sicherheit eines Schlüssels hängt daher nicht davon ab, dass niemand sucht, sondern davon, dass der Zufall gut war.

Schlüsselgenerator

Erzeugt einen privaten Schlüssel ausschließlich mit crypto.getRandomValues() und zeigt jeden Schritt bis zur Adresse. Es gibt bewusst kein Eingabefeld: Eine Seite, die aus beliebigen Eingaben Schlüssel ableitet und Guthaben prüft, wäre ein Werkzeug zum Auffinden fremder Guthaben.

Diese Seite ist ein Lernangebot und hat keine Verbindung zu deinem Portfolio: Erzeugte Schlüssel und Adressen werden weder in die Watchlist noch in die Datei oder in Wallets übernommen.

Optional: Mnemonic (BIP39) bis zur ersten Adresse

Zieht frische Entropie, übersetzt sie in Wörter und leitet daraus Seed, Master-Key und die erste Empfangsadresse jedes Standardpfads ab, ohne Passphrase.

Blockchain-Abfrage

Zu jeder erzeugten Adresse lassen sich Guthaben und Transaktionszahl abfragen: nur auf Knopfdruck, immer nur eine Adresse und höchstens alle 5 Sekunden.

mempool.space (Standard, weil keine Portfolio-Datei geöffnet ist)

Die Abfrage übermittelt die Adresse (und deine IP-Adresse) an die konfigurierte Quelle. Schlüssel und Zwischenwerte verlassen das Gerät nie. Wer auch die Adresse für sich behalten will, nutzt eine eigene Instanz (Einstellungen → Explorer-Quelle).

In dieser Sitzung

Noch keine Abfrage.

Legacy- und SegWit-Adressen unterscheiden 2¹⁶⁰ Werte. Wer jede Sekunde eine Abfrage stellt, hätte nach einem Menschenleben weniger als 3 × 10⁹ Schlüssel geprüft.