Unterschiedliche Adressen aus demselben öffentlichen Schlüssel generieren?

Es gibt eine Lücke in meinem Verständnis bezüglich der Generierung von Bitcoin-Adressen durch Hashing. (Ich zitiere unten der Einfachheit halber aus Antonoplous, aber ich habe mehrere andere Quellen konsultiert.)

Laut Antonpolous:

"Die Bitcoin-Adresse wird aus dem öffentlichen Schlüssel durch die Verwendung von kryptografischem Einweg-Hashing abgeleitet. (Antonpolous, 2014:71)"

Mein Verständnis von öffentlichen Schlüsseln ist, dass sie sich nicht ändern, sobald sie aus einem privaten Schlüssel (über ECDSA-Multiplikation) generiert wurden:

"Da der Generatorpunkt für alle Bitcoin-Nutzer immer gleich ist, ergibt ein mit G multiplizierter privater Schlüssel k immer denselben öffentlichen Schlüssel K. (Antonpolous, 2014:68)"

Best Practice in Bezug auf Bitcoin-Adressen empfiehlt Folgendes:

„Für jede Transaktion sollte eine eindeutige Adresse verwendet werden. Die meisten Bitcoin-Softwareprogramme und -Websites helfen dabei, indem sie jedes Mal, wenn Sie eine Rechnung oder Zahlungsanforderung erstellen, eine brandneue Adresse generieren. (Antonpolous, 2014:188)“

Ich verstehe, dass das Ausführen einer Hash-Funktion für dieselben Daten immer dasselbe Ergebnis liefert (Digest):

„Für jede spezifische Eingabe ist der resultierende Hash immer gleich und kann von jedem, der denselben Hash-Algorithmus implementiert, leicht berechnet und verifiziert werden.“ (Antonpolous, 2014:188).

Angesichts all dessen lautet meine Frage, wie können verschiedene Adressen aus derselben, unveränderlichen Eingabe, nämlich dem öffentlichen Schlüssel, generiert werden?

Ist es das doppelte Hashing (SHA256 + RIPEMD160)? Ist es der Adresspool? Liegt es an deterministischen Wallets? Die Antwort ist wahrscheinlich einfach und starrt mir ins Gesicht, aber ich kann es nicht sehen. Danke für jede Klarstellung.

Wenn Sie eine neue eindeutige Adresse generieren möchten, generieren Sie zunächst einen neuen privaten Schlüssel, verwenden ihn dann zum Generieren des entsprechenden öffentlichen Schlüssels und hashen ihn dann, um eine Adresse zu erhalten. Sie generieren keine neue Adresse aus einem öffentlichen Schlüssel, den Sie bereits haben.
Es gibt im Allgemeinen zwei Ansätze, um mehrere Adressen zu erhalten: 1) mehrere private Schlüssel haben 2) BIP32 verwenden
@NateEldredge Danke! Ich habe viel über das Generieren neuer Adressen für jede Transaktion gesehen, erinnere mich aber nicht (oder habe ausgeblendet), dass auch pro Transaktion ein neuer privater/öffentlicher Schlüssel erforderlich ist. Ist jetzt offensichtlich, will aber keine Vermutungen anstellen.
@ColmanMcMahon: Die Verwendung einer neuen Adresse wird empfohlen, ist aber nicht erforderlich; Wenn Sie möchten, können Sie eine zuvor verwendete Adresse wiederverwenden (und somit den entsprechenden privaten/öffentlichen Schlüssel wiederverwenden).
@NickODell: Beim Lesen der Frage habe ich mich gefragt: Wäre es tatsächlich möglich, zwei verschiedene Adressen zu generieren, die demselben öffentlichen Schlüssel entsprechen, indem entweder die komprimierte Version des öffentlichen Schlüssels oder die unkomprimierte gehasht wird?
@disckjet Ja, das stimmt.

Antworten (3)

Aus irgendeinem Grund sind Sie zu dem Schluss gekommen, dass Sie einfach mehrere Adressen von einem einzigen öffentlichen Schlüssel ableiten können, aber der zitierte Text sagt das nicht. Es besagt, dass der öffentliche Schlüssel eindeutig aus dem privaten Schlüssel generiert wird (durch Multiplikation des Kurvengenerators G mit einer zufälligen 256-Bit-Zahl, die der private Schlüssel ist). Es heißt auch, dass die Adresse aus dem öffentlichen Schlüssel durch Hashing abgeleitet wird (RIPEMD160 & SHA256). Schließlich heißt es, dass es eine gute Idee ist, jedes Mal eine andere Adresse zu verwenden.

Das bedeutet nicht, dass Sie mehrere Adressen aus demselben öffentlichen Schlüssel generieren. Jedes Mal müssen Sie einen neuen privaten Schlüssel generieren, dann den öffentlichen Schlüssel aus diesem privaten Schlüssel und schließlich die Adresse aus dem öffentlichen Schlüssel.

Danke schön. Genau das war die Quelle meiner Verwirrung (meine "Lücke"). Ich schätze die Klarstellung zu diesem grundlegenden Schritt. Jede Transaktion erfordert ihren eigenen eindeutigen privaten Schlüssel, öffentlichen Schlüssel, Adresse und Signatur(en).

Um die bereits gegebenen guten Antworten zu Schlüsselpaaren zu verstärken ...

„Als zusätzliche Firewall sollte für jede Transaktion ein neues Schlüsselpaar verwendet werden, um zu verhindern, dass sie einem gemeinsamen Eigentümer zugeordnet werden.“

Satoshi Nakamoto, Bitcoin-Whitepaper, 2009, Seite 6:

Was ist mit der Ablehnung? Das ist eine gute Referenz.
habe dagegen vetot ;)

Um die Frage weiter auszuarbeiten, akzeptieren Sie, dass der in der Frage angegebene Absatz nur impliziert, dass für jede Anfrage verschiedene private/öffentliche Paare generiert werden müssen:

„Für jede Transaktion sollte eine eindeutige Adresse verwendet werden. Die meisten Bitcoin-Softwareprogramme und -Websites helfen dabei, indem sie jedes Mal, wenn Sie eine Rechnung oder Zahlungsanforderung erstellen, eine brandneue Adresse generieren. (Antonpolous, 2014:188)“

Tatsächlich ist es möglich, immer mindestens drei verschiedene gültige Bitcoin-Adressen aus demselben öffentlichen Schlüssel zu generieren, da es immer eine hybride , komprimierte und unkomprimierte Form desselben Paars öffentlicher/privater Schlüssel gibt .
Also zum Beispiel der öffentliche Schlüssel (x,y):

(50863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352, 
 2cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6)

mit seinem entsprechenden eindeutigen privaten Schlüssel, kann mit diesen drei verschiedenen Adressen ausgedrückt werden:

16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs
1DcuACZPCeAEmvSPzKiF8pAaZAEY1XPyue

die zwar völlig unterschiedlichen Bitcoin-Adressen entsprechen, auf die aber im Prinzip alle mit dem gleichen Paar privater/öffentlicher Schlüssel zugegriffen werden könnte.