Welche Beziehung besteht zwischen einem Bitcoin Private Key/Public Key/Adresse?

Welche Beziehung besteht zwischen einem Bitcoin Private Key/Public Key/Adresse? Ich sehe, dass ein Paar aus privatem Schlüssel und öffentlichem Schlüssel generiert wird, aber gibt es eine Möglichkeit, einen bereits verwendeten privaten Schlüssel zu generieren? Und ich gehe auch davon aus, dass eine Wallet-Adresse eine Bitcoin-Adresse ist? Hat jede Wallet-Adresse eine Eins-Eins-Beziehung mit einem privaten Schlüssel?

Danke

Antworten (4)

Private Schlüssel

Alte Brieftaschen verwendeten einen privaten Schlüssel, der beim ersten Ausführen zufällig von der Brieftasche generiert wurde.

In modernen "Hierarchical Deterministic" (HD) Wallets. Ein privater Schlüssel wird entweder zufällig generiert oder von einer Phrase abgeleitet, die als Seed-Phrase oder Recovery-Phrase bezeichnet wird, die selbst aus einer Zufallszahl generiert wird. Daraus werden dann über einen „Ableitungspfad“ viele weitere Private Keys generiert, die sich je nach Wallet-Marke unterscheiden können. Der Ableitungspfad wird von den Entwicklern gewählt und einige verschiedene Entwickler wählten unterschiedliche Ableitungspfade. Dies wirkt sich auf die Wallet-Wiederherstellung aus.

Öffentliche Schlüssel

Aus (zusammen mit?) jedem privaten Schlüssel wird ein öffentlicher Schlüssel generiert.

Adressen

Adressen werden aus öffentlichen Schlüsseln für bestimmte allgemeine Arten von Transaktionen konstruiert. Nicht alle Transaktionen beinhalten Adressen.

Die gängigsten Transaktionstypen erstellen Adressen als Präfix, gefolgt von einem Hash eines öffentlichen Schlüssels, gefolgt von einer Prüfsumme (damit Tippfehler erkannt werden können).

Da HD-Wallets für jede Transaktion eine neue Adresse generieren, verwenden sie hinter den Kulissen den festen Ableitungspfad, um neue private Schlüssel und öffentliche Schlüssel zu generieren, aus denen die Adresse erstellt wird.

HD-Wallets haben also viele Adressen, es ist nicht sinnvoll, an eine "Wallet-Adresse" zu denken.


Beziehungen und Wahrscheinlichkeiten

Welche Beziehung besteht zwischen einem Bitcoin Private Key/Public Key/Adresse?

Etwas, das dem nicht ganz unähnlich ist:

entropy --> random number  --> phrase --> private key --> public key --> address
                   |                        ^   |
                   '------------------------'   +--> private key --> pubkey --> addr
                                                +--> private key --> pubkey --> addr
                                                :
                                                '--> private key --> pubkey --> addr

Gibt es eine Möglichkeit, einen bereits verwendeten privaten Schlüssel zu generieren?

Es ist ungefähr so ​​wahrscheinlich, als würde sich Ihr Zuhause spontan in einen Topf mit Petunien verwandeln. Was Physiker Ihnen sagen könnten, ist theoretisch möglich, wird aber aufgrund seiner Unwahrscheinlichkeit niemals eintreten. Der Punkt ist, dass wir über statistische Wahrscheinlichkeiten sprechen, die Zahlen beinhalten, die viel größer sind, als die meisten von uns zu begreifen hoffen, weil sie viel größer sind als alle Zahlen, denen wir routinemäßig begegnen oder die wir uns vorstellen können.

Und ich gehe auch davon aus, dass eine Wallet-Adresse eine Bitcoin-Adresse ist?

Ja.

Hat jede Wallet-Adresse eine Eins-Eins-Beziehung mit einem privaten Schlüssel?

So weit ja.

Neue Arten von Transaktionen können erfunden werden, und ich stelle mir vor, dass neue Arten von Adressen erfunden werden könnten.

Danke @redgrittybrick!. Erklärt es gut. Der erste private Schlüssel in Ihrem Diagramm ist also im Wesentlichen der entscheidende Teil dieses Szenarios? Wenn ich das habe (da es mein eigenes Bitcoin-Konto ist), kann ich es dann einfach bei einem anderen Wallet-Anbieter verwenden und dort einfach meinen privaten Schlüssel hinzufügen, und die Bitcoins sind für mich zum Senden da?
@Chris: Ja. Das neue Wallet muss jedoch denselben Ableitungspfad verwenden. Bei vielen Wallets können Sie den Ableitungspfad auswählen. Manche nicht.

Unter Verwendung des Elliptical Curve Digital Signature Algorithm (ECDSA) wird der private Schlüssel verwendet, um den öffentlichen Schlüssel zu generieren, eine sichere Hash-Funktion wird dann auf den öffentlichen Schlüssel angewendet und eine Prüfsumme angehängt, um eine Base58-formatierte Bitcoin-Adresse zu erzeugen.

Eine Kollision privater Schlüssel ist theoretisch möglich, aber aufgrund der schieren Anzahl von ihnen, die im Netzwerk verfügbar sind (Billiarden+), praktisch unmöglich.

Nur um ein wenig Farbe hinzuzufügen: Die Anzahl der privaten Schlüssel ist viel viel größer als eine Billiarde. Es sind mehr als 115 Billiarden Billiarden Billiarden Billiarden Billiarden. Die Grenze für die Anzahl privater Schlüssel ist die Ordnung "n" des Generators, die "ziemlich nahe" an 2 hoch 256 liegt. Der tatsächliche Wert von "n" ist: 115792089237316195423570985008687907852837564279074904382605163141518161494337

Welche Beziehung besteht zwischen einem Bitcoin Private Key/Public Key/Adresse?

Der öffentliche Schlüssel (ein Kurvenpunkt) ist gleich dem Generator (ein fester Kurvenpunkt) multipliziert mit dem privaten Schlüssel (eine ganze Zahl).

Es gibt mehrere verschiedene Arten von Adressen. Ein üblicher Adresstyp ist jedoch ein verschlüsselter Hash des öffentlichen Schlüssels. (In der Praxis ist das, was gehasht wird, die Byte-Darstellung der x-Koordinate des öffentlichen Schlüssels, wobei entweder 0x02 oder 0x03 vorne angehängt wird, um das Vorzeichen der y-Koordinate zu berücksichtigen, und zusätzlich gibt es einige Prüfsummendaten - nur andere Hash-Typ – vor der Codierung angehängt).

Gibt es eine Möglichkeit, einen bereits verwendeten privaten Schlüssel zu generieren?

Ja da ist. Wenn Sie beispielsweise Ihren privaten Schlüssel mit der Nummer 1 wählen, haben Sie einen schlechten privaten Schlüssel gewählt (der private Schlüssel 1 wird bereits verwendet – sehen Sie nach, ob Sie ihn finden können!).

However, if you choose your private key at random from integers greater than zero and less than 115792089237316195423570985008687907852837564279074904382605163141518161494337, then you will have a valid key and the chance of a key collision is very very low (because 115792089237316195423570985008687907852837564279074904382605163141518161494337 is very very large).

Zwei Kleinigkeiten: (1) Es gibt mehrere Arten von Adressen (einige codieren einen Hash eines öffentlichen Schlüssels, einige eines Skripts und neue P2TR-Adressen codieren direkt einen öffentlichen Schlüssel), aber keine davon ist nur ein Hash der x-Koordinate (P2PKH-Adressen hashen auch die Parität der Y-Koordinate). (2) Die Zahl 0 ist kein gültiger privater Schlüssel (und die Kurvenreihenfolge auch nicht, da mod n sie gleich sind).
Zu (2): Ja, ich stimme zu, das war ungenau, ich habe die Antwort aktualisiert, um größer als 0 und kleiner als n anzugeben. Zu (1): Da ich die Hash-Funktion nicht angegeben habe, ist der Teil in nit (1) über den Hash technisch nicht anwendbar. (Eine Hash-Funktion, die die Aktion von ricemd160 auf dem sha256 von '\x02'+x-Koordinate ist, ist immer noch eine Hash-Funktion. In ähnlicher Weise ist das Anhängen an die Prüfsumme immer noch eine Hash-Funktion.) Da die Funktion auf beliebige Eingaben und angewendet werden kann erzeugt eine Ausgabe mit fester Größe, es ist immer noch eine Hash-Funktion.
Der Teil in Nit (1) über mehrere Adressen ist ein gültiger Nit, aber vielleicht zu viele Informationen, die OP verarbeiten kann? Wie auch immer, ich habe die Antwort aktualisiert, um auch nit 1 widerzuspiegeln.
Sicher! Vielleicht war ich nicht klar, mein Problem ist nicht, dass Sie andere Typen erwähnen sollten, sondern die Tatsache, dass das, was Sie derzeit angeben, falsch ist: P2PKH-Adressen sind ein Hash öffentlicher Schlüssel, aber nicht nur ihrer X-Koordinate.
OK, ich denke, vielleicht verstehe ich, worauf Sie hinaus wollen ... Aber ich würde behaupten, dass in gewisser Weise "hauptsächlich" die x-Koordinate gehasht wird und nur "ein wenig" die y-Koordinate (nur effektiv das Vorzeichen von y - der y-Wert ist implizit). Mit anderen Worten, in der Praxis muss der öffentliche Schlüssel (ein Kurvenpunkt) in eine Bytefolge umgewandelt werden, um von der Hash-Funktion verarbeitet zu werden. Diese Umwandlung in Bytes wird durchgeführt, indem die x-Koordinate in eine Byte-Kette umgewandelt wird und dann entweder 0x02 oder 0x03 an den Anfang der Byte-Kette angehängt wird, um das Vorzeichen der y-Koordinate zu berücksichtigen.
Ich habe die Antwort aktualisiert. Ich vermute, dass dies wahrscheinlich auch an anderer Stelle in diesem Forum beantwortet wird ...
Nur damit Sie sehen, woher ich komme: Das Paar (y-Parität, x-Koordinate) identifiziert eindeutig einen Punkt, und daher ist ein Hash davon effektiv dasselbe wie Hashing (x-Koord, y-Koord). Während nur das Hashen der x-Koordinate ein unterscheidbares Ergebnis hätte: Es würde bedeuten, dass das Negieren eines privaten Schlüssels den Hash nicht ändern würde (weil sich nur die y-Koordinate ändern würde).
jap, erwischt!

Ein privater Schlüssel ist eine Ganzzahl kaus dem Bereich (0, n ), 0 und n ausgeschlossen, wobei n die Reihenfolge des Generators ist G, die 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141 ist, eine Zahl, die etwas kleiner als 2 256 ist . Der öffentliche Schlüssel Kist der entsprechende elliptische Kurvenpunkt auf secp256k1: K = k×G, wobei Gder Basispunkt oder Generator von secp256k1 ist.

Eine P2PKH-Adresse (Pay to Public Key Hash) wird aus dem öffentlichen Schlüssel abgeleitet, indem zuerst ein SHA256-Hash und dann ein RIPEMD-160-Hash angewendet wird. Die Adresse wird dann mit Base58Check verschlüsselt. Das bedeutet, dass es nur 2.160 Adressen für etwa 2.256 private Schlüssel gibt. Daher werden jeder Adresse etwa 2 96 private Schlüssel zugeordnet. Da es keine zentrale Registrierung von Adressen gibt, nachdem sie generiert wurden, gibt es keinen Mechanismus, um Schlüsselkollisionen zu verhindern, aber wie Travis bereits erklärt hat , macht die schiere Größe des Nummernraums das Auftreten von Kollisionen astronomisch unwahrscheinlich. Die Frage Ist jede Bitcoin-Adresse einzigartig? geht näher ins Detail.

Inzwischen gibt es eine Reihe unterschiedlicher Adresstypen, die aus denselben privaten Schlüsseln abgeleitet werden können. Genau genommen können mehrere Adressen mit demselben privaten Schlüssel verknüpft sein, aber für die meisten praktischen Zwecke können Sie davon ausgehen, dass jede Adresse einzigartig ist und in einer Eins-zu-eins-Beziehung zu einem privaten Schlüssel steht.

Ohne weiteren Kontext würde ich „Wallet-Adresse“ und „Bitcoin-Adresse“ tatsächlich so nehmen, dass sie sich auf dasselbe Konzept beziehen.

Ich denke, der Bereich des privaten Schlüssels ist tatsächlich auf die Ordnung "n" des Generators beschränkt, die nahe bei 2 ** 256 liegt, aber nicht gleich ist. Die Reihenfolge ist 115792089237316195423570985008687907852837564279074904382605163141518161494337
Siehe Abschnitt 2.4.1 hier: secg.org/sec2-v2.pdf
Danke für den Hinweis, @hft, ich hoffe das ist besser.
Gern geschehen. Ein weiterer Nitpick: Es ist nur SHA256, nicht SHA256 d , das vor dem RIPEMD-160-Hash angewendet wird, wenn der Adress-Hash ohne Prüfsumme gebildet wird.
In der Tat danke für den Hinweis. Ich habe meinen Beitrag korrigiert.