Inhaltsverzeichnis
- Grundlagen
- Verschlüsselung mit öffentlichen Schlüsseln und Kryptowährung (Cryptocurrency)
- Private und Öffentliche Schlüssel
- Erzeugen eines privaten Schlüssels aus einer Zufallszahl
- Öffentlicher Schlüssel
- Elliptische Kurven-Kryptographie erklärt
- Erzeugen eines öffentlichen Schlüssels
- Bitcoin-Adressen
- Base58 und Base58check-Codierung
Du hast vielleicht gehört, dass Bitcoin auf Kryptographie basiert, einem Zweig der Mathematik, der in der Computersicherheit verwendet wird. Kryptographie bedeutet „geheimes Schreiben“ auf Griechisch, aber die Wissenschaft der Kryptographie umfasst mehr als nur geheimes Schreiben, das als Verschlüsseln bezeichnet wird.
Kryptographie kann auch verwendet werden, um die Kenntnis eines Geheimnisses zu beweisen, ohne dieses Geheimnis zu offenbaren (digitale Signature), oder die Echtheit von Daten zu beweisen (digitaler Fingerabdruck). Diese Arten von kryptographischen Beweisen sind die mathematischen Werkzeuge, die für Bitcoin kritisch sind und in Bitcoin-Anwendungen häufig verwendet werden. Ironischerweise ist die Verschlüsselung kein wichtiger Teil von Bitcoin, da ihre Kommunikations- und Transaktionsdaten nicht verschlüsselt sind und zum Schutz der Gelder nicht verschlüsselt werden müssen. In diesem Artikel stellen wir einige Kryptographien vor, die in Bitcoins verwendet werden, um den Besitz von Geldmitteln in Form von Schlüsseln, Adressen und Wallets zu kontrollieren.
Grundlagen
Der Besitz von Bitcoin wird durch digitale Schlüssel, Bitcoin-Adressen und digitale Signaturen hergestellt, die digitalen Schlüssel werden nicht tatsächlich im Netzwerk gespeichert, sondern von Benutzern in einer Datei oder einer einfachen Datenbank namens Wallet erstellt und gespeichert. Die digitalen Schlüssel in der Wallet eines Benutzers sind völlig unabhängig vom Bitcoin-Protokoll und können von der Wallet-Software des Benutzers ohne Bezugnahme auf die Blockchain oder den Zugriff auf das Internet erzeugt und verwaltet werden. Schlüssel ermöglichen viele interessante Eigenschaften von Bitcoin, einschließlich dezentraler Vertrauens- und Kontrollmechanismen, Besitzbestätigung und kryptographischem Sicherheitsmodell.
Bei den meisten Bitcoin-Transaktionen muss eine gültige digitale Signatur in die Blockchain aufgenommen werden, die nur mit einem geheimen Schlüssel generiert werden kann. Daher hat jeder mit einer Kopie dieses Schlüssels die Kontrolle über den Bitcoin. Die digitale Signatur, mit der Mittel ausgegeben werden, wird auch als Zeuge (Witness) bezeichnet, ein Begriff, der in der Kryptographie verwendet wird. Die Zeugen-Daten in einer Bitcoin-Transaktion zeugen vom wahren Eigentum der ausgegebenen Mittel.
Schlüssel kommen in Paaren, die aus einem privaten (geheimen) Schlüssel und einem öffentlichen Schlüssel bestehen. Denke an den öffentlichen Schlüssel, der einer Banknummer ähnlich ist und den privaten Schlüssel, der der geheimen PIN ähnlich ist, oder einfach auf einem Scheck, der die Kontrolle über das Konto ermöglicht. Diese digitalen Schlüssel werden von den Benutzern von Bitcoin sehr selten gesehen. Zum größten Teil werden sie in der Wallet-Datei gespeichert und von der Bitcoin Wallet-Software verwaltet.
Im Zahlungsteil einer Bitcoin-Transaktion wird der öffentliche Schlüssel des Empfängers durch seinen digitalen Fingerabdruck dargestellt, der als Bitcoin-Adresse bezeichnet wird und auf die gleiche Weise wie der Name des Empfängers auf einem Scheck verwendet wird (z. B. „nach Bestellung bezahlen“). In den meisten Fällen wird eine Bitcoin-Adresse erzeugt und entspricht einem öffentlichen Schlüssel. Nicht alle Bitcoin-Adressen repräsentieren jedoch öffentliche Schlüssel. Sie können auch andere Begünstigte wie Skripte darstellen, wie wir später in diesem Kapitel sehen werden. Auf diese Weise adressiert Bitcoin den Empfänger von Geldern und macht Transaktionsziele flexibel, ähnlich wie Papierschecks: ein einziges Zahlungsinstrument, mit dem man in die Konten von Menschen einzahlen, in Firmenkonten zahlen, Rechnungen bezahlen oder in bar bezahlen kann. Die Bitcoin-Adresse ist die einzige Repräsentation der Schlüssel, die Benutzer routinemäßig sehen, da dies der Teil ist, den sie mit der Welt teilen müssen.
Zuerst werden wir die Kryptographie einführen und die in Bitcoin verwendete Mathematik erklären. Als nächstes werden wir uns ansehen, wie Schlüssel erzeugt, gespeichert und verwaltet werden. Wir werden die verschiedenen Codierungsformate überprüfen, die zur Darstellung von privaten und öffentlichen Schlüsseln, Adressen und Skriptadressen verwendet werden. Schließlich werden wir uns die fortgeschrittene Verwendung von Schlüsseln und Adressen ansehen: Mehrfachsignatur und Skriptadressen und Paper-Wallets.
Verschlüsselung mit öffentlichen Schlüsseln und Kryptowährung (Cryptocurrency)
Public-Key-Kryptographie wurde in den 1970er Jahren erfunden und ist eine mathematische Grundlage für Computer- und Informationssicherheit.
Seit der Erfindung der Kryptographie mit öffentlichem Schlüssel wurden mehrere geeignete mathematische Funktionen wie die Potenzierung der Primzahl und die Multiplikation der elliptischen Kurve entdeckt. Diese mathematischen Funktionen sind praktisch irreversibel, was bedeutet, dass sie in einer Richtung leicht zu berechnen sind und in der entgegengesetzten Richtung nicht berechnet werden können. Basierend auf diesen mathematischen Funktionen ermöglicht die Kryptographie die Erzeugung digitaler Geheimnisse und fälschungssicherer digitaler Signaturen. Bitcoin verwendet elliptische Kurvenvervielfachung als Basis für seine Kryptographie.
Bitcoin verwendet Kryptographie mit öffentlichem Schlüssel, um ein Schlüsselpaar zu erstellen, das den Zugriff auf Bitcoin steuert. Das Schlüsselpaar besteht aus einem privaten Schlüssel und – davon abgeleitet – einem eindeutigen öffentlichen Schlüssel. Der öffentliche Schlüssel wird verwendet, um Mittel zu erhalten und der private Schlüssel wird verwendet, um Transaktionen zu signieren, um die Mittel auszugeben.
Zwischen dem öffentlichen und dem privaten Schlüssel besteht eine mathematische Beziehung, mit der der private Schlüssel zum Generieren von Signaturen für Nachrichten verwendet werden kann. Diese Signatur kann gegen den öffentlichen Schlüssel validiert werden, ohne den privaten Schlüssel zu enthüllen.
Wenn Bitcoin ausgegeben wird, präsentiert der aktuelle Bitcoin-Besitzer seinen öffentlichen Schlüssel und eine Signatur (jedes Mal anders, aber aus demselben privaten Schlüssel erstellt) in einer Transaktion, um diese Bitcoins auszugeben. Durch die Präsentation des öffentlichen Schlüssels und der Unterschrift kann jeder im Bitcoin-Netzwerk die Transaktion als gültig bestätigen und akzeptieren, indem er bestätigt, dass die Person, die das Bitcoin transferiert hat, diese zum Zeitpunkt der Übertragung besitzt.
In den meisten Wallet-Implementierungen werden die privaten und öffentlichen Schlüssel aus Gründen der Zweckmäßigkeit zusammen als ein Schlüsselpaar gespeichert. Der öffentliche Schlüssel kann jedoch aus dem privaten Schlüssel berechnet werden, so dass auch nur der private Schlüssel gespeichert werden kann.
Private und Öffentliche Schlüssel
Eine Bitcoin-Wallet enthält eine Sammlung von Schlüsselpaaren, die jeweils aus einem privaten Schlüssel und einem öffentlichen Schlüssel bestehen. Der private Schlüssel (k) ist eine Zahl, die normalerweise zufällig ausgewählt wird. Aus dem privaten Schlüssel verwenden wir eine elliptische Kurvenmultiplikation, eine kryptographische Einwegfunktion, um einen öffentlichen Schlüssel (K) zu erzeugen. Aus dem öffentlichen Schlüssel (K) wird eine kryptographische Einweg-Hash-Funktion zum Erzeugen einer Bitcoin-Adresse (A) verwendet. In diesem Abschnitt beginnen wir mit der Erzeugung des privaten Schlüssels, betrachten die mathematische Ellipsenkurve, die verwendet wird, um diesen in einen öffentlichen Schlüssel umzuwandeln und generieren schließlich eine Bitcoin-Adresse aus dem öffentlichen Schlüssel. Die Beziehung zwischen privatem Schlüssel, öffentlichem Schlüssel und Bitcoin-Adresse wird hier angezeigt.

elliptische Kurvenmultiplikation
kryptographische Einwegfunktion
Erzeugen eines privaten Schlüssels aus einer Zufallszahl
Der erste und wichtigste Schritt beim Erzeugen von Schlüsseln besteht darin, eine sichere Quelle für Entropie oder Zufälligkeit zu finden. Erstellen eines Bitcoin-Schlüssel ist im Wesentlichen das Gleiche wie „wählen Sie eine Zahl zwischen 1 und 2 ^ 256“. Die genaue Methode, die du verwendest, um diese Zahl auszuwählen, spielt keine Rolle, solange sie nicht vorhersehbar oder wiederholbar ist. Bitcoin-Software verwendet die Zufallszahlengeneratoren des zugrunde liegenden Betriebssystems, um 256 Bit Entropy (Zufälligkeit) zu erzeugen. In der Regel wird der Zufallszahlengenerator des Betriebssystems von einer zufälligen Person initialisiert, weshalb Sie möglicherweise aufgefordert werden, die Maus ein paar Sekunden lang zu bewegen.
Genauer gesagt, der private Schlüssel kann eine beliebige Zahl zwischen 1 und n -1 sein, wobei n eine Konstante (n = 1,158 * 10 ^ 77, etwas weniger als 2 ^ 256) ist, die als die Reihenfolge der in Bitcoin verwendeten elliptischen Kurve definiert ist ( siehe „Elliptische Kurven-Kryptographie erklärt“). Um einen solchen Schlüssel zu erstellen, wählen wir nach dem Zufallsprinzip eine 256-Bit-Zahl aus und prüfen, ob sie kleiner als n -1 ist. In Programmierbegriffen wird dies üblicherweise erreicht, indem eine größere Folge von Zufallsbits, die von einer kryptographisch sicheren Zufälligkeitsquelle gesammelt wurden, in den SHA256-Hash-Algorithmus eingespeist wird, der bequemerweise eine 256-Bit-Zahl erzeugt. Wenn das Ergebnis kleiner als n – 1 ist, haben wir einen geeigneten privaten Schlüssel. Ansonsten versuchen wir es einfach nochmal mit einer anderen Zufallszahl.
Schreibe keinen eigenen Code, um eine Zufallszahl zu erstellen oder verwende keinen „einfachen“ Zufallszahlengenerator, der von deiner Programmiersprache angeboten wird. Verwende einen kryptographisch sicheren Pseudozufallszahlengenerator (CSPRNG) mit einem Seed aus einer Quelle mit ausreichender Entropie. Untersuche die Dokumentation der von deiner ausgewählten Zufallsgenerator-Bibliothek bereitgestellt wird, um sicherzustellen, dass sie kryptographisch sicher ist. Die korrekte Implementierung des CSPRNG ist entscheidend für die Sicherheit der Schlüssel.
Die Größe des privaten Schlüsselraums von Bitcoin (2 ^ 256) ist eine unergründlich große Zahl. Es ist etwa 10 ^ 77 in Dezimal. Zum Vergleich wird geschätzt, dass das sichtbare Universum 10 ^ 80 Atome enthält.
Mit dem Befehlszeilentool bitcoin explorer können Sie private Schlüssel mit den Befehlen seed generieren und anzeigen (pseudo-Zufallsgenerator generieren), ec-new (neuen Entry-Schlüssel EC16 aus Entropie erstellen) und ec-to-wif (EC privater Schlüssel zu einem privaten WIF-Schlüssel):

bitcoin generate private key
Öffentlicher Schlüssel
Der öffentliche Schlüssel wird aus dem privaten Schlüssel unter Verwendung einer elliptischen Kurvenmultiplikation berechnet, die irreversibel ist: K = k · G, wobei k der private Schlüssel ist, G ein konstanter Punkt ist, der der Erzeugerpunkt genannt wird und K der resultierende öffentliche Schlüssel ist. Die umgekehrte Operation, bekannt als „Finden des diskreten Logarithmus“ – Berechnen von k, wenn du K kennst – ist so schwierig wie das Testen aller möglichen Werte von k, zum Beispiel eine Brute-Force-Suche. Bevor wir demonstrieren, wie man einen öffentlichen Schlüssel aus einem privaten Schlüssel generiert, sollten wir uns die Kryptographie mit elliptischer Kurve näher ansehen.
Die elliptische Kurvenmultiplikation ist eine Art von Funktion, die Kryptographen eine „Falltür“ -Funktion nennen: es ist leicht in einer Richtung (Multiplikation) und nicht in umgekehrter Richtung (Division) zu machen. Der Besitzer des privaten Schlüssels kann leicht den öffentlichen Schlüssel erstellen und ihn dann mit der Welt teilen, da er weiß, dass niemand die Funktion umkehren und den privaten Schlüssel aus dem öffentlichen Schlüssel berechnen kann. Dieser mathematische Trick wird zur Grundlage für fälschungssichere und sichere digitale Signaturen, die den Besitz von Bitcoin-Werten belegen.
Elliptische Kurven-Kryptographie erklärt
Kryptographie mit elliptischer Kurve ist eine Art asymmetrischer Kryptographie mit öffentlichem Schlüssel, die auf dem Problem des diskreten Logarithmus beruht, das durch Addition und Multiplikation an den Punkten einer elliptischen Kurve ausgedrückt wird.
Bitcoin verwendet eine bestimmte elliptische Kurve und einen Satz mathematischer Konstanten, wie in einem Standard namens secp256k1 definiert, der vom National Institute of Standards and Technology (NIST) festgelegt wurde. Die secp256k1-Kurve wird durch die folgende Funktion definiert, die eine elliptische Kurve erzeugt:
y ^ 2 mod p = (x ^ 3 + 7) mod p
der Mod p (Modulo-Primzahl p) zeigt an, dass diese Kurve über einem endlichen Feld der Primzahlordnung p liegt, das auch als Fp geschrieben ist, wobei p = 2 ^ 256-2 ^ 32-2 ^ 9-2 ^ 8-2 ^ 7- 2 ^ 6-2 ^ 4-1, eine sehr große Zahl.
Da diese Kurve über ein endliches Feld der Primzahl statt über die reellen Zahlen definiert ist, sieht sie aus wie ein Muster aus Punkten, die in zwei Dimensionen gestreut sind, was die Visualisierung erschwert. Die Mathematik ist jedoch mit der einer elliptischen Kurve über reellen Zahlen identisch.
In der elliptischen Kurvenmathematik gibt es einen Punkt, der als „Punkt im Unendlichen“ bezeichnet wird und in etwa der Rolle von Null entspricht. Auf Computern wird es manchmal durch x = y = 0 dargestellt (was nicht der elliptischen Kurvengleichung entspricht, aber es ist ein einfacher separater Fall, der überprüft werden kann).
Es gibt auch einen + Operator, „Addition“ genannt, der einige Eigenschaften hat, die der traditionellen Addition von reellen Zahlen ähnlich sind, die Schüler lernen. Bei zwei Punkten P1 und P2 auf der elliptischen Kurve gibt es einen dritten Punkt P3 = P1 + P2, ebenfalls auf der elliptischen Kurve.
Geometrisch wird dieser dritte Punkt P3 durch Zeichnen einer Linie zwischen P1 und P2 berechnet. Diese Linie schneidet die elliptische Kurve an genau einer zusätzlichen Stelle. Nenne diesen Punkt P3 ‚= (x, y). dann reflektiere in der x-Achse, um P3 = (x, -y) zu erhalten.
Es gibt ein paar Sonderfälle, die die Notwendigkeit des „Punktes im Unendlichen“ erklären.
Wenn P1 und P2 der gleiche Punkt sind, sollte die Linie „zwischen“ P1 und P2 an diesem Punkt P1 die Tangente an der Kurve sein. Diese Tangente schneidet die Kurve in genau einem neuen Punkt. Du kannst Techniken aus dem Kalkül verwenden, um die Steigung der Tangente zu bestimmen. Diese Techniken aus dem Kalkül bestimmen die Neigung der Tangente. Diese Techniken funktionieren merkwürdigerweise, obwohl wir unser Interesse auf Punkte auf der Kurve mit zwei ganzzahligen Koordinaten beschränken!
In einigen Fällen (wenn z. B. P1 und P2 die gleichen x-Werte, aber unterschiedliche y-Werte haben), ist die Tangente genau vertikal, in diesem Fall P3 = „Punkt im Unendlichen“.
Wenn P1 der „Punkt im Unendlichen“ ist, dann ist P1 + P2 = P2. Wenn P2 der Punkt im Unendlichen ist, gilt P1 + P2 = P1. Dies zeigt, wie der Punkt im Unendlichen die Rolle von Null spielt.
Es stellt sich heraus, dass + assoziativ ist, was bedeutet, dass (a + b) + c = a * (b + c). das heißt, wir können a + b + c ohne Klammern und ohne Mehrdeutigkeit schreiben.
Jetzt haben wir den Zusatz definiert. Wir können die Multiplikation auf die Standardmethode definieren, die die Addition erweitert. Für einen Punkt P auf der elliptischen Kurve, wenn k eine ganze Zahl ist, dann ist kP = P + P + P + … + P (k-mal). Beachte, dass k in diesem Fall manchmal verwirrend als „Exponent“ bezeichnet wird.
Erzeugen eines öffentlichen Schlüssels
Beginnend mit einem privaten Schlüssel in Form einer zufällig generierten Zahl k, multiplizieren wir ihn mit einem vorbestimmten Punkt auf der Kurve, die der Generatorpunkt G genannt wird, um einen anderen Punkt irgendwo auf der Kurve zu erzeugen, der der entsprechende öffentliche Schlüssel K der Generator ist. Der Punkt wird als Teil des secp256k1-Standards angegeben und ist für alle Schlüssel in Bitcoin immer gleich:
K = k * G
Dabei ist k der private Schlüssel, G der Generatorpunkt und K der resultierende öffentliche Schlüssel, ein Punkt auf der Kurve. Weil der Generatorpunkt auch den gleichen öffentlichen Schlüssel K hat, ist die Beziehung zwischen k und K festgelegt, kann aber nur in einer Richtung berechnet werden, von k nach K. Deshalb kann eine Bitcoin-Adresse (abgeleitet von K) mit jedem geteilt werden und enthüllt nicht den privaten Schlüssel des Benutzers (k).
Ein privater Schlüssel kann in einen öffentlichen Schlüssel konvertiert werden, aber ein öffentlicher Schlüssel kann nicht in einen privaten Schlüssel zurückverwandelt werden, da die Mathematik nur in einer Richtung funktioniert.
Um die elliptische Kurvenmultiplikation zu implementieren, nehmen wir den zuvor generierten privaten Schlüssel k und multiplizieren ihn mit dem Generatorpunkt G, um den öffentlichen Schlüssel K zu finden.
Die meisten Bitcoin-Implementierungen verwenden die kryptografische OpenSSL-Bibliothek zur Berechnung der elliptischen Kurve. Um beispielsweise den öffentlichen Schlüssel abzuleiten, wird die Funktion EC_POINT_mul() verwendet.
Bitcoin-Adressen
Eine Bitcoin-Adresse ist eine Zeichenfolge aus Ziffern und Zeichen, die mit jedem geteilt werden kann, der dir Geld senden möchte. Adressen, die aus öffentlichen Schlüsseln erzeugt werden, bestehen aus einer Folge von Zahlen und Buchstaben, beginnend mit der Ziffer „1“. Hier ist ein Beispiel für eine Bitcoin-Adresse: 1EYYK4RK7NxZrCtturs17Fi6GiyN8udwoX
Die Bitcoin-Adresse wird am häufigsten in einer Transaktion als „Empfänger“ der Mittel angezeigt. Wenn wir eine Bitcoin-Transaktion mit einer Papierprüfung vergleichen, ist die Bitcoin-Adresse der Begünstigte, was wir in der Zeile nach „Pay to the Order of“ schreiben. Ein Papierscheck ist buchstäblich ein Stück Papier, das die Informationen des Kontoinhabers enthält, einschließlich Name, Adresse und häufig Telefon- und Führerscheinnummern. Der Scheck wird auch mit dem Namen, der Adresse und der Telefonnummer der Bank gedruckt und am unteren Rand befindet sich eine Reihe von Nummern, die die Bankleitzahl, die den Scheck an die richtige Bank sendet, und die Kontonummer, die das Geld sicherstellt auch vom richtigen Konto kommt. Der Scheck wird entweder von Hand oder maschinell ausgefüllt, um den Namen des Empfängers, das Ausstellungsdatum, den genauen Betrag des Schecks, sowohl numerisch als auch in Worten, die Unterschrift des Kontoinhabers und eine optionale Notizzeile, in der der Unterzeichner steht, anzuzeigen kann angeben, was der Zweck des Schecks ist. Dieser Scheck wird dem Zahlungsempfänger ausgehändigt, der ihn dann auf der Rückseite bestätigt und bei seiner Bank hinterlegt. Auf einem Papierscheck kann dieser Begünstigte manchmal der Name eines Kontoinhabers sein, aber auch Unternehmen, Institutionen oder sogar Bargeld. Da bei Papierschecks kein Konto angegeben werden muss, sondern ein abstrakter Name als Empfänger der Mittel verwendet wird, handelt es sich um sehr flexible Zahlungsinstrumente. Bitcoin-Transaktionen verwenden eine ähnliche Abstraktion, die Bitcoin-Adresse, um sie sehr flexibel zu machen. Eine Bitcoin-Adresse kann den Besitzer eines privaten / öffentlichen Schlüsselpaars darstellen oder kann etwas anderes darstellen, beispielsweise ein Zahlungsskript, wie wir in „pay-to-script-hash (p2sh)“ sehen werden. Betrachten wir zunächst den einfachen Fall, eine Bitcoin-Adresse, die einen öffentlichen Schlüssel darstellt und von ihm abgeleitet ist.
Die Bitcoin-Adresse wird von dem öffentlichen Schlüssel durch die Verwendung von Einweg-Verschlüsselungs-Hashing abgeleitet. Ein „Hashalgorithmus“ ist eine Einwegfunktion, die einen Fingerabdruck oder „Hash“ einer Eingabe beliebiger Größe erzeugt. Kryptographische Hash-Funktionen werden häufig in Bitcoin verwendet: in Bitcoin-Adressen, in Skriptadressen und im Mining-Proof-of-Work-Algorithmus. Die Algorithmen, die verwendet werden, um eine Bitcoin-Adresse aus einem öffentlichen Schlüssel zu erzeugen, sind der sichere Hash-Algorithmus (SHA) und der RACE-Integritäts-Primitiv-Evaluierungsnachrichten-Digest (RIPEMD), speziell SHA256 und RIPEMD160.
Beginnend mit dem öffentlichen Schlüssel K, berechnen wir den SHA256-Hash und berechnen dann den RIPEMD160-Hash des Ergebnisses, wobei eine 160-Bit- (20-Byte-) Zahl erzeugt wird:
A = RIPEMD160 (SSHA256 (K))
Dabei ist K der öffentliche Schlüssel und A die resultierende Bitcoin-Adresse.
Eine Bitcoin-Adresse ist nicht dasselbe wie ein öffentlicher Schlüssel. Bitcoin-Adressen werden von einem öffentlichen Schlüssel unter Verwendung einer Einwegfunktion abgeleitet.
Bitcoin-Adressen werden fast immer als „Base58Check“ codiert, das 58 Zeichen (ein Base58-Nummernsystem) und eine Prüfsumme verwendet, um die menschliche Lesbarkeit zu verbessern, Mehrdeutigkeiten zu vermeiden und vor Fehlern bei der Adresstranskription und -eingabe zu schützen. Base58Check wird auch in Bitcoin auf viele Arten verwendet, wann immer ein Benutzer eine Nummer lesen und korrekt umschreiben muss, wie eine Bitcoin-Adresse, einen privaten Schlüssel, einen verschlüsselten Schlüssel oder einen Skript-Hash. Im nächsten Abschnitt werden wir die Mechanismen der Codierung und Decodierung von Base58Check und die daraus resultierenden Repräsentationen untersuchen. Dieses Diagramm veranschaulicht die Umwandlung eines öffentlichen Schlüssels in eine Bitcoin-Adresse.

Vom Öffentlichen Schlüssel zu einer Bitcoin Adresse
Base58 und Base58check-Codierung
Um lange Zahlen auf eine kompakte Art und Weise darzustellen, wobei weniger Symbole verwendet werden, verwenden viele Computersysteme gemischt-alphanumerische Darstellungen mit einer Basis (oder Radix) höher als 10, während das traditionelle Dezimalsystem die 10 Ziffern 0 bis 9 verwendet, Das hexadezimale System verwendet 16, wobei die Buchstaben A bis F die sechs zusätzlichen Symbole sind. Eine im hexadezimalen Format dargestellte Zahl ist kürzer als die entsprechende dezimale Darstellung. Noch kompakter, Base64-Darstellung verwendet 26 Kleinbuchstaben, 26 Großbuchstaben, 10 Ziffern und 2 weitere Zeichen wie „+“ und „/“, um Binärdaten über Text-basierte Medien wie E-Mail zu übertragen. Base64 wird am häufigsten verwendet, um binäre Anhänge zu E-Mails hinzuzufügen. Base58 ist ein textbasiertes Binärcodierungsformat, das für die Verwendung in Bitocin entwickelt wurde und in vielen anderen Kryptowährungen verwendet wird. Es bietet ein ausgewogenes Verhältnis zwischen kompakter Darstellung, Lesbarkeit und Fehlererkennung und -Prävention. Base58 ist eine Untermenge von Base64, die Groß- und Kleinbuchstaben und Zahlen verwendet, aber einige Zeichen, die häufig fälschlicherweise miteinander verwechselt werden, kann in bestimmten Schriftarten identisch aussehen. Speziell ist base58 Base64 ohne die 0 (Zahl Null), O (Groß- buchstabe o), l (unteres L), I (Großbuchstabe i) und die Symbole „+“ und „/“ oder einfacher gesagt, es ist eine Menge von Klein- und Großbuchstaben und Zahlen ohne die gerade erwähnten vier (0, O, l, I). Full Base58 Alphabet: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz.
Um zusätzliche Sicherheit vor Tippfehlern oder Transaktionsfehlern zu bieten, ist Base58Check ein Base58-Codierungsformat, das häufig in Bitcoin verwendet wird und über einen integrierten Fehlerprüfcode verfügt. Die Prüfsumme besteht aus vier zusätzlichen Bytes, die am Ende der codierten Daten hinzugefügt werden. Die Prüfsumme wird aus dem Hash der codierten Daten abgeleitet und kann daher zum Erkennen und Verhindern von Transkriptions- und Tippfehlern verwendet werden. Wenn mit Base58Check-Code dargestellt wird, berechnet die Decodierungssoftware die Prüfsumme der Daten und vergleicht sie mit der Prüfsumme, die im Code enthalten ist. Wenn die beiden nicht übereinstimmen, wurde ein Fehler-Hash eingeführt und die Base58Check-Daten sind ungültig. Dies verhindert, dass eine falsch geschriebene Bitcoin-Adresse von der Wallet-Software als gültiges Ziel akzeptiert wird, ein Fehler, der andernfalls zu einem Verlust von Geldmitteln führen würde.
Um Daten (eine Zahl) in ein Base58Check-Format zu konvertieren, fügen wir den Daten zuerst ein Präfix hinzu, das sogenannte „version byte“, das dazu dient, den Typ der codierten Daten einfach zu identifizieren. Im Fall einer Bitcoin-Adresse ist das Präfix beispielsweise Null (0x00 in hex), während das Präfix, das beim Codieren eines privaten Schlüssels verwendet wird, 128 ist (0x80 in hex).
Als nächstes berechnen wir die „Doubel-SHA“ Prüfsumme, was bedeutet, dass wir den SHA256 Hash-Algorithmus zweimal auf das vorherige Ergebnis (Präfix und Daten) anwenden:
Prüfsumme = SHA256 (SHA256 (Präfix + Daten))
Aus dem resultierenden 32-Byte-Hash (Hash-of-a-Hash) nehmen wir nur die ersten vier Bytes. Diese vier Bytes dienen als Fehlerprüfcode oder Prüfsumme. Die Prüfsumme wird an das Ende konkateniert (angehängt).
Das Ergebnis besteht aus drei Elementen: einem Präfix, den Daten und einer Prüfsumme. Dieses Ergebnis wird unter Verwendung des zuvor beschriebenen Base58-Alphabets codiert. Das Diagramm veranschaulicht den Base58Check-Kodierungsprozess.

base58 kodierung base58 versionierung prüfsumme für bitcoin daten
In Bitcoin sind die meisten Daten, die dem Benutzer präsentiert werden, mit Base58Check-kodiert, um es kompakt, leicht lesbarer und leicht erkennbarer zu machen. Das Versions-Präfix in der Base58Check-Kodierung wird verwendet, um einfach unterscheidbare Formate zu erstellen, die, wenn sie in Base58 kodiert sind, bestimmte Zeichen enthalten, die es für Menschen einfacher machen, den Typ der kodierten Daten und deren Verwendung zu identifizieren. Dies unterscheidet beispielsweise eine Base58Check-kodierte Bitcoin-Adresse, die mit einer 1 aus einem Base58Check-kodierten privaten Schlüssel WIF beginnt, der mit einer 5 beginnt. Einige Beispiel Versions-Präfixe und die resultierenden Base58-Zeichen sind in dieser Tabelle aufgeführt.
Typ | Versions Präfix (hex) | Base58 Resultat Präfix |
Bitcoin Adresse | 0x00 | 1 |
Pay-to-Script-Hash Adresse | 0x05 | 3 |
Bitcoin Testnet Adresse | 0x6F | m oder n |
Privater Schlüssel WIF | 0x80 | 5, K oder L |
BIP-38 Verschlüsselte Private Schlüssel | 0x0142 | 6P |
BIP-38 Verschlüsselte Öffentliche Schlüssel | 0x0488B21E | xpub |