Warum haben einige öffentliche Schlüssel das Präfix 0x00?

Öffentliche ECDSA-Schlüssel scheinen immer mit 0x02/ 0x03/ 0x04/ 0x05 1 zu beginnen , gefolgt von entweder 32 Bytes oder 64 Bytes.

Ich stoße jedoch auf einige öffentliche Schlüssel mit dem Präfix 0x00.

Beispielsweise enthält die Quellausgabe der Transaktion 5c7c65bb950d3605cc67bd02c29e84cc14dfaa80626ef6a575132c7ce7979d2f zwei öffentliche Schlüssel:

037953dbf08030f67352134992643d033417eaa6fcfb770c038f364ff40d761588

0014fa6851313844da08b6a539aff5e74e705b7465fad0fc5ceeccae707995b846

Bei der Einspeisung in die EC_KEY_oct2keyFunktion von OpenSSL 1.1.1 schlägt der zweite öffentliche Schlüssel direkt fehl.

Ein weiteres Beispiel ist die Transaktion f0020466ca75caa648cdc8364f297bda7bb06329bec5305ffb59ea2ea348ac39 , die eine Ausgabe verwendet, die einen öffentlichen Schlüssel wie folgt auflistet:

0029a38fa2eaf8e67481c47eeeaeb625e6d426eb78f3b9e0728a4679370ce5ac96

Diese 0x00öffentlichen Schlüssel scheinen immer mit der OP_CHECKMULTISIGValidierung zu kommen und blockieren sie niemals, da ein anderer öffentlicher Schlüssel gültig wäre.

Was sind diese Schlüssel und was sollte ein Kunde damit machen?

Antworten (1)

Dies sind keine Schlüssel, sondern willkürliche Daten.

Bis Bitcoin 0.16 war ein ungültiger öffentlicher Schlüssel im bloßen Multisig erlaubt , solange er die richtige Größe hat. Mit dem kommenden 0.17 ist dies nicht mehr möglich , und Transaktionen wie die, mit denen Sie verknüpft sind, werden als nicht standardmäßig betrachtet (beachten Sie, dass dies ihre Aufnahme in einen Block nicht verhindert, und sie sind immer noch gültig, wenn sie enthalten sind).

Menschen haben oft solche Tricks verwendet, um Daten in die Blockchain einzubetten. Zum Beispiel ermöglicht die Bereitstellung von 1 gültigen und 1 ungültigen Schlüssel in einer 1 von 2 Multisig jemandem, 33 Bytes Daten einzubetten, ohne die in der Brieftasche eingeschlossenen BTC zu opfern.

Ein extremeres Beispiel dafür ist tx fc200f9cef8faf8f76756b5d02081061a1fd22ec1d580f778c12373e12a56016 , das "Schlüssel" wie enthält 100000000000000000000000000000000000000000000000000000000000000000.

(Beispiel tx aus dieser Ausgabe )

Danke! Eine Folgefrage: Ist das Verbieten ungültiger öffentlicher Schlüssel eine wirksame Verteidigung gegen diesen speziellen Trick? Da die meisten 32-Byte-Daten sowieso gültige Koordinaten sind, wäre es nicht ziemlich einfach, diese Einschränkung zu umgehen, indem Sie den beliebigen Daten ein 0x02oder voranstellen 0x03?
@AndreasBlaesus In der Tat ist es keine große Verteidigung. Ich hatte keine Zeit, den Code zu überprüfen, um zu sehen, ob er eine tiefere Überprüfung durchführt (obwohl ich nicht glaube, dass er das kann, aus dem Kopf heraus). Die Änderung macht es jedoch zu einer Standardisierungsregel.