So wird eine Bitcoin-Adresse generiert

Erklärung zur Generierung technischer Bitcoin Adressen

Bitcoin-Adressen können leicht mit Hilfe von Open-Source-Bibliotheken erstellt werden, welche auf algorithmischen Hash-Funktionen basieren.

Benutzer benötigen in der Regel mehr als nur eine Bitcoin-Adresse, um Bitcoin auf der Blockchain zu versenden. Bitcoin-Adressen werden basierend auf dem Konzept der Public-Key-Kryptographie erstellt.

Private Schlüssel sind nur dem Eigentümer / Benutzer bekannt. Weitere Details dazu: https://de.wikipedia.org/wiki/Asymmetrisches_Kryptosystem

In diesem Beitrag schauen wir uns im Detail an, wie Bitcoin-Adressen offline mithilfe der algorithmischen Konzepte wie Öffentlicher Schlüssel – Privater Schlüssel, EDCSA, SHA-256-Funktion, RIPEMD-160-Hashing und Binäre Bitcoin-Adresse generiert werden.

In diesem Post werden zusätzlich später die technischen Schritte / Details zum Erstellen von Bitcoin-Adressen mit kryptografischen Algorithmen und Funktionen erläutert.

Bitcoin Adressen sind nur große zufällige Zahlen. Bitcoin-Adressen setzen sich aus alphanumerischen Zeichen zusammen, die auf der Base58-Codierung basieren.

Dies schließt Zeichen wie 0 (Null), O (Großbuchstabe o), I (Großbuchstabe i), l (Kleinbuchstabe L) und nicht alphanumerische Zeichen wie + ( Plus) und / (Schrägstrich) aus. Weitere Informationen zu Base58 finden wir unter https://de.wikipedia.org/wiki/Base58

Daher können Bitcoin-Adressen nur die Zeichen des folgenden Alphabets enthalten, da Base58 grundsätzlich keine anderen Zeichen zulässt: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Heutzutage gibt es nur drei verschiedene Adressformate, die von Bitcoin verwendet werden:

1 – P2PKH (Pay-to-PubkeyHash) – 1KwBRs6CioGM2pFdzQsxyrSZ9ynJQr7Amd – Adressen beginnen mit einer 1

2 – P2SH (Pay-to-Script-Hash) – 3DnW8JGpPViEZdpqat8qky1zc26EKbXnmM – Adresse beginnt mit einer 3

3 – Bech32 (SegWit) – bc1qngw83fg8dz0k749cg7k3emc7v98wy0c74dlrkd – Adressen beginnen mit bc1

Bild von https://pixabay.com/images/id-3569795/

Der erste Schritt besteht darin, einen privaten Schlüssel zu erstellen, beispielsweise mithilfe einer Open-Source-Bitcoin-Bibliothek. Danach werden öffentliche Bitcoin-Schlüssel mit einem Algorithmus namens Elliptic Curve Digital Signature Algorithm erstellt.

Grafischer Bitcoin-Adressgenerator: http://royalforkblog.github.io/2014/08/11/graphical-address-generator/

Einzelheiten zu diesem Algorithmus finden wir auch unter https://de.wikipedia.org/wiki/Digital_Signature_Algorithm

https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm

Einige der Open Source-Bibliotheken, die diese Funktionalität bereitstellen; https://en.wikipedia.org/wiki/Bouncy_Castle_(cryptography) https://en.wikipedia.org/wiki/Crypto%2B%2B

Private Schlüssel:     

  • Zufällig generierte Nummer.
  • Nur dem Benutzer bekannt, welcher diesen entweder über eine Bibliothek oder kryptografische Hash-Funktionen erstellt hat.
  • Er sollte nicht an Dritte weitergegeben werden, da jeder, der über den privaten Schlüssel verfügt, auf die Gelder in der Blockchain zugreifen kann.
  • Er wird zum Signieren von Transaktionen (Senden / Empfangen von Bitcoins) verwendet.
  • Es handelt sich um eine 32-Byte-Ganzzahl ohne Vorzeichen (256 Bit).

Öffentliche Schlüssel:

  • Der öffentliche Schlüssel entspricht dem privaten Schlüssel, der mit den kryptografischen Funktionen erstellt wurde.
  • Öffentliche Schlüssel können mit privaten Schlüsseln erstellt werden. Wir können jedoch keine privaten Schlüssel aus öffentlichen Schlüsseln erstellen. (Die Generierung öffentlicher Schlüssel ist eine Funktion welche nur in eine Richtung funktionert.)

Generierungsschritte für Bitcoin-Adressen:

Generierungsschritte für Bitcoin-Adressen

Bitcoin-Adressen Details:

  • Bitcoin-Adressen sind anonym, das heißt, niemand kann wissen, ob die Adresse einer bekannten Person gehört.
  • Bitcoin-Adressen können offline auf Ihrem Computer erstellt werden, d.h. auch ohne verfügbares Internet.
  • Bitcoin-Adressen können kostenlos angelegt werden; wir müssen also nicht bezahlen, um Bitcoin-Adressen zu erstellen.
  • Bitcoin-Adressen können/sollten nur einmal verwendet werden und nie wiederverwendet werden. Die mehrfache Verwendung von Adressen führt zu enormen Datenschutz- / Sicherheitsproblemen, die vermieden werden sollten.
  • Standard-Adressformate; P2PKH (Adressen beginnen mit 1 Präfix – Legacy-Adresse – Groß- und Kleinschreibung beachten), P2SH (Adressen beginnen mit 3 Präfix – Groß- und Kleinschreibung beachten), Bech32 (Adressen beginnen mit bc1 – Groß- und Kleinschreibung beachten)
  • Eine Bitcoin-Adresse hat eine maximale Länge von 35 Zeichen. Sie kann als QR-Code dargestellt werden, sodass wir mit dem Telefon Codes scannen und Bitcoins senden können.
  • Öffentliche Schlüssel werden zum Erstellen von Bitcoin-Adressen verwendet -Private Schlüssel werden zum Signieren von Blockchain-basierten Transaktionen zum Senden und Empfangen von Bitcoins verwendet.
Bild von https://commons.wikimedia.org/wiki/File:Orange_blue_public_private_keygeneration_de.svg

Generierungsschritte für Bitcoin-Adressen, technische Betrachtung:

Generieren eines privaten Schlüssel mit einer Open-Source-Bibliothek.
Normalerweise ist es besser, eine Bibliothek zu verwenden, um private und öffentliche Schlüssel zu verwalten, damit wir uns nicht um die Implementierungsdetails kümmern müssen.
0: Privater Schlüssel: a4f228d49910e8ecb53ba6f23f33fbfd2bad442e902ea20b8cf89c473237bf9f
0: Private Key Base58: C6t2iJ7AXA2X1KQVnqw3r7NKtKaERdLnaGmbDZNqxXjk

Wir erhalten den zugehörigen öffentlichen Schlüssel basierend auf dem generierten privaten Schlüssel aus der Open-Source-Bibliothek. Die Bibliotheken bieten uns immer auch den öffentliche Schlüssel aus einer Implementierung.
1: Öffentlicher Schlüssel: 03564213318d739994e4d9785bf40eac4edbfa21f0546040ce7e6859778dfce5d4

Nun wenden wir die SHA-256-Hash-Funktion auf den in Schritt 1 erstellten öffentlichen Schlüssel an (immer hex vor SHA-256 dekodieren).
Details der SHA-256 https://de.wikipedia.org/wiki/SHA-2
2: Öffentlicher SHA-256-Schlüssel: 482c77b119e47024d00b38a256a3a83cbc716ebb4d684a0d30b8ea1af12d42d9

Anwenden der RIPEMD-160-Hash-Funktion auf das Ergebnis von Schritt 2 (SHA-256 des öffentlichen Schlüssels).
Details des RIPEMD-160-Hash https://de.wikipedia.org/wiki/RIPEMD
3: RIPEMD-160-Hashing für das Ergebnis des öffentlichen Schlüssels SHA-256: 0c2c910a661178ef63e276dd0e239883b862f58c

Fügen wir also das Versionsbyte-Präfix zu Schritt 3 hinzu, mit dem verschiedene Adressformate definiert werden. – 00 ist das Versionsbyte (0x00 für Hauptnetzwerk).
4: RIPEMD-160-Hash mit Versionsbyte: 000c2c910a661178ef63e276dd0e239883b862f58c

Wenden wir zweimal die SHA-256-Hash-Funktion in Schritt 4 an (SHA-256 (SHA-256 (ripemd-160WithVersionByte))).
5–6: 2 * SHA-256-Hash mit Versionsbyte: c3c0439f33dc4cf4d66d3dd37900fc12597938a64817306b542a75b9223213e0

-Holen uns dann die ersten 4 Bytes aus Schritt 6, der Ausgabe der zweiten SHA-256-Funktion.
7: CheckSum: c3c0439f

-Hinzufügen der Prüfsumme (Schritt 7) zum Ende des RIPEMD-160-Hashs mit dem Versionsbyte (Schritt 4).
8: 25-Byte-Binärbitcoin-Adresse: 000c2c910a661178ef63e276dd0e239883b862f58cc3c0439f

Nun übernehmen und konvertieren wir die binäre Bitcoin-Adresse mit der Base58-Funktion in das Bitcoin-Adressformat.
-Details von Base58 https://de.wikipedia.org/wiki/Base58
9: Bitcoin-Adresse: 127NVqnjf8gB9BFAW2dnQeM6wqmy1gbGtv

Tada: Die Adresse auf der Blockchain:
127NVqnjf8gB9BFAW2dnQeM6wqmy1gbGtv

Bild von https://pixabay.com/images/id-3146330/

Zusammenfassung:
Beispielschritte zur Erzeugung von Bitcoin-Adressen von 0 bis 9 – In Schritt 5 und 6 wird die SHA-256-Hashfunktion verwendet:

0: Privater Schlüssel: a4f228d49910e8ecb53ba6f23f33fbfd2bad442e902ea20b8cf89c473237bf9f
0: Private Key Base58:
C6t2iJ7AXA2X1KQVnqw3r7NKtKaERdLnaGmbDZNqxXjk

1: öffentlicher Schlüssel: 03564213318d739994e4d9785bf40eac4edbfa21f0546040ce7e6859778dfce5d4

2: Öffentlicher SHA-256-Schlüssel: 482c77b119e47024d00b38a256a3a83cbc716ebb4d684a0d30b8ea1af12d42d9

3: RIPEMD-160-Hashing für das Ergebnis des öffentlichen Schlüssels SHA-256: 0c2c910a661178ef63e276dd0e239883b862f58c

4: RIPEMD-160-Hash mit Versionsbyte: 000c2c910a661178ef63e276dd0e239883b862f58c

5–6: 2 * SHA-256-Hash für RIPEMD-160-Hash mit Versionsbyte: c3c0439f33dc4cf4d66d3dd37900fc12597938a64817306b542a75b9223213e0
7: CheckSum: c3c0439f

8: 25-Byte-Binärbitcoin-Adresse: 000c2c910a661178ef63e276dd0e239883b862f58cc3c0439f

9: Bitcoin-Adresse: 127NVqnjf8gB9BFAW2dnQeM6wqmy1gbGtv

Dieser Beitrag findet sich im englischen Original auf https://hackernoon.com/how-to-generate-bitcoin-addresses-technical-address-generation-explanation-rus3z9e