Jump to content

Signieren einer Nachricht mit Private-Key einer Bech-32 Adresse in Bitcoin Core Wallet


Recommended Posts

Hallo zusammen,

die Bitcoin Core Wallet unterstützt ja GUI-seitig das Signieren einer Nachricht mit dem Privaten Schlüssel einer P2PKH (Legacy) Adresse. Wenn ich nun eine Nachricht mit dem privaten Schlüssel einer Bech-32 Adresse signieren möchte bekomme ich einen Fehler. Das Thema ist ja nicht neu, Core untsersützt das halt nicht, trotzdem hat sich anscheinend auch in den letzten Jahren nichts getan.

Meine Frage:

  • Warum wird das nicht priorisiert von den Entwicklern, verstehe ich nicht, das ist doch eine wichtige Funktion.
  • Habe ich da was verpasst und gibt es ggf. schon die Möglichkeit in Core, evtl. in der Konsole?
  • Wie macht "Ihr"das (Workaround)? Ich gehe derzeit den Weg über Electrum...

:huh:

Danke.

Link to comment
Share on other sites

Die meisten Wallets implementieren BIP-137, während BIP-322 immer noch Draft ist (zukunftssicher angelegt, aber dadurch auch komplex). Der Punkt, den man erkennen sollte, ist, daß das Message Signing kein so ganz einfacher Prozess ist, wenn man es allgemeingültig funktionierend und für alle Adressformate korrekt umsetzen möchte. Mitunter deswegen, nehme ich an, traut sich da nicht so recht einer dran.

Electrum macht es, was aber im Grunde genommen ein recht eng gefasster Spezialfall ist, wenn das Witness-Programm einer Bech32-Adresse letztlich nur der Pubkeyhash ist. (Das muss aber nicht so bleiben, ist nur der Standardnormalfall.) Frag' mich jetzt bloß nicht tiefer ab, ich hab' da nicht wirklich viel Ahnung von.

Hier auf bitcointalk.org beschreibt einer, wie man zu Fuß aus dem Pubkeyhash vom Datenteil einer Bech32-Adresse über den Umweg der Konvertierung des Pubkeyhashes in eine Legacy-Adresse im Grunde genommen auch eine korrekte Signatur bekommt. Allerdings muss man das "zu Fuß" machen und die Gegenstelle zur Verifikation ebenfalls. Keine Ahnung, ob Electrum intern für Bech32 so etwas macht. Electrums Variante für Bech32 ist jedenfalls kein Standardverfahren, daß alle anderen Wallets implementieren.

Interessant in dem Zusammenhang sind vielleicht noch folgende Threads auf bitcointalk.org:

BIP 322 draft design and improvement thread

[DISCUSSION] BIP-notatether-messageverify: Standardizes signed messages [READY!]

No BIPs made since 2021-06-27

 

Open-source ist nicht zwingend ein Wunschkonzert, da die Entwickler nicht als Dienstleister zu sehen sein sollten, die implementieren, was sich das faule Volk so wünscht (überspitzt).

Ich brauche Message Signing äußerst selten, nutze für Legacy-Adressen Core und/oder Electrum und für Bech32 bc1q Adressen dann eben Electrum (gefühlt bisher noch nie). Daher juckt es mich nicht besonders. Aus ein und demselben Private Key kann man ja alle Adressformate ableiten (P2PK; uncompressed & compressed Legacy P2PKH; P2WKH-P2SH (3...); P2WKH (bc1q...) und vermutlich auch Taproot (bc1p...)) und es kommt eben auf den Anwendungsfall an.

Edited by Cricktor
Noch kleinere Ergänzungen
  • Love it 1
  • Thanks 1
Link to comment
Share on other sites

Puh das war ne harte Nuss!

Ich beschreibe hier mal wie weit ich bisher bin, alles ohne Gewähr denn ich bin kein Experte. Anmerkungen jederzeit willkommen!

In dem von @Cricktor geposteten Link auf bitcointalk.org wird beschrieben, wie man das auch zu Fuß machen kann.

Gegeben ist folgende Bech-32 Adresse: bc1qa87h0k4dey7d5q8u302pd3mqh3p8chg2j2mgaf

Nun habe ich folgendes gemacht:

Öffnen der Konsole in Bitcoin Core und dann:

> getaddressinfo bc1qa87h0k4dey7d5q8u302pd3mqh3p8chg2j2mgaf

Output ist:

{
  "address": "bc1qa87h0k4dey7d5q8u302pd3mqh3p8chg2j2mgaf",
  "scriptPubKey": "0014e9fd77daadc93cda00fc8bd416c760bc427c5d0a",
  "ismine": false,
  "solvable": false,
  "iswatchonly": false,
  "isscript": false,
  "iswitness": true,
  "witness_version": 0,
  "witness_program": "e9fd77daadc93cda00fc8bd416c760bc427c5d0a",
  "ischange": false,
  "labels": [
  ]
}

Unter "witness_program" finden wir den pubkeyhash (Hash160) zu dieser Adresse: e9fd77daadc93cda00fc8bd416c760bc427c5d0a.

Dieser muss jetzt noch in eine Legacy-Adresse (P2PKH) umgewandelt werden. Dazu habe ich eine Webseite gefunden: https://learnmeabitcoin.com/technical/address

Hier eingeben Prefix: 00; Hash 160: e9fd77daadc93cda00fc8bd416c760bc427c5d0a.

Output ist folgende Adresse: 1NLE5yWwTjRyMe8Jd6JdUzSE9RLikH79cn

Diese stimmt schonmal mit der auf bitcointalk ermittelten Adresse überein, die Berechnung scheint also geklappt zu haben!

Nach meinem Verständnis kann diese Legacy-Adresse jetzt in Bitcoin Core verwendet werden, um eine Signatur zu einer Nachricht zu überprüfen. Nachtrag: funktioniert in Bitcoin Core.

Ob ich damit auch eine Nachricht signieren kann (sofern der Priv-Key vorliegt) ist mir noch nicht ganz klar.

:):huh:

Ps.: Andersherum funktioniert es auch: Ich kann mit der so ermittelten Legacy-Adresse auch eine Nachricht signieren, sofern der Priv-Key vorliegt. Bitcoin Core findet den passenden Schlüssel.

Edited by BTC-Hunter
Tippfehler
  • Love it 1
  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.