Eine Spur von Satoshi? Hal Finneys signierte Nachricht unter der Lupe

Das Auftauchen einer signierten Nachricht von Hal Finney, dem Empfänger der allerersten Bitcoin Transaktion, lässt die Gerüchteküche um Satoshi Nakamotos Identität seit einigen Tagen brodeln. Einer unserer Entwickler, Johannes Zweng, ist der Story auf den Grund gegangen.

Vor wenigen Tagen tauchte wieder einmal eine sensationsheischende Meldung auf, die neue Hinweise auf die wahre Identität von Satoshi Nakamoto versprach: Angeblich sei eine alte, von Hal Finney signierte Nachricht aufgetaucht (publiziert von Martin Shkreli in einem Blogbeitrag), die andeuten würde, dass Paul Le Roux hinter dem Synonym von Satoshi Nakamoto stecke.

Sehen wir uns die Fakten zu dieser Geschichte an.

Die signierte Nachricht

Gleich vorweg: Ja, es ist tatsächlich eine gültige, signierte Nachricht aufgetaucht!

Bitcoin Adresse:

1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3

Signatur:

HM7vpPSUbNsfDHRX6gv8xxWcVNHEc/3pOk0YrVehaGoUdbWizznfzOdELkLd1EjSXsW1oE5vHAkNAPzrAVzhuoI=

Signierte Textnachricht:

This Transaction was made by Paul Leroux to Hal Finney on January 12, 2009 #bitcoin

Quelle: twitter.com

Jeder kann mit seiner eigenen Bitcoin Node, oder einer Bitcoin Wallet wie z.B. der Blue Wallet, Electrum Wallet oder auch online selbst verifizieren, dass diese Signatur kryptografisch gültig ist:

Hier sehen wir die Gültigkeit auf der Kommandozeile einer Bitcoin Core Full Node:

> bitcoin-cli verifymessage "1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3" "HM7vpPSUbNsfDHRX6gv8xxWcVNHEc/3pOk0YrVehaGoUdbWizznfzOdELkLd1EjSXsW1oE5vHAkNAPzrAVzhuoI=" "This Transaction was made by Paul Leroux to Hal Finney on January 12, 2009 #bitcoin"

> true 

Faktencheck

Die Adresse 1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3 gehörte tatsächlich Hal Finney. Diese Adresse, oder technisch genauer ausgedrückt "der Public Key hinter dieser Adresse", war der Empfänger der allerersten, jemals stattgefundenen Bitcoin Transaktion. Es ist öffentlich bekannt, dass diese Transaktion von Satoshi Nakamoto an Hal Finney gesendet wurde (Hal erwähnt dies auch hier in seinem Beitrag im bitcointalk Forum). Hier sehen wir diese erste Bitcoin Transaktion auf diversen Block-Explorern:

Auf mempool.space sieht man (korrekterweise), dass die Transaktion eigentlich nicht an diese Adresse ging, sondern an den rohen (ungehashten) Public Key. Diese ungehashten Public Keys waren als "pay-2-pubkey" oder kurz “P2PK” bekannt, welches ein alternatives Format für Transaktionen in frühen Tagen war, aber das ist eine Geschichte für einen anderen Blogbeitrag. ;-)

Zusammengefasst

  • Ja, aus diesem Public Key ergibt sich die Adresse 1Q2TWHE…
  • Ja, der Private Key hinter dieser Adresse gehörte 2009 Hal Finney
  • Ja, die eingangs erwähnte Signatur kann nur mit Kenntnis dieses Private Keys erstellt worden sein (das ist kryptographisch gesichert)

Quelle: twitter.com

Was bedeutet das?

So, was nun? Ist Paul Le Roux nun tatsächlich Satoshi? Oder gibt es noch Punkte, die man in dieser Geschichte hinterfragen sollte?
Es gibt auf jeden Fall mehrere Punkte, die darauf hindeuten, dass es Ungereimtheiten in dieser Geschichte gibt:

Technische Indizien

Nachrichten-Prefix

Die in der Nachricht erwähnte Transaktion von Satoshi (angeblich Paul Le Roux) an Hal Finney fand im Jänner 2009 statt.

Aber: Die Funktionalität, Textnachrichten mit dem Private Key von Bitcoin Adressen signieren zu können, wurde erst 2011 in die Bitcoin Software integriert. Natürlich gab es 2009 auch schon die Möglichkeit, kryptographische Signaturen mit dem Private Key einer Adresse zu erstellen (das ist schließlich ja das Kernstück jeder Bitcoin Transaktion), jedoch verwenden diese Signaturen ein anderes Format.

Ein wichtiges Detail an solchen Signaturen von Textnachrichten ist die Tatsache, dass nicht die Nachricht an sich, sondern der Hashwert der Nachricht signiert wird. Das ist eine in kryptographischen Systemen übliche Praxis. Allerdings, und das ist in dieser Geschichte ein wichtiges Indiz, werden die Textnachrichten vor dem Hashen mit einem konstanten Text "geprefixed". Auch das ist gängige Praxis in Kryptographiesystemen, um zu verhindern, dass man unbewusst einen Datenblock signiert, der vielleicht anderweitig verwendet werden könnte.

Dieses statische Prefix lautet bei Bitcoin: “Bitcoin Signed Message:\n”.

Die Signatur der eingangs erwähnten Textnachricht ist nur dann kryptographisch valide, wenn man die Textnachricht mit diesem Prefix versieht und danach den Hash berechnet. 

Aber: dieses Prefix wurde erstmals in diesem Commit vom 27. September 2011 erwähnt. Vorher war dieses Prefix nicht definiert (es war zuvor sogar ein anderes Prefix angedacht, nämlich “Padding Text ” – siehe diesen Commit). 

Das bedeutet: die betreffende Signatur kann 2009 gar nicht in dieser Form erstellt worden sein. Niemand konnte damals wissen, dass man fast 3 Jahre später dieses Prefix beim Signieren von Textnachrichten verwenden würde.

Codierung der Signatur

Ein zusätzliches Indiz spricht ebenfalls noch gegen das Jahr 2009:

Die Signaturen von Bitcoin Transaktionen wurden damals im DER Format (ein technischer Standard zur Darstellung von Signaturdaten, den es schon vor Bitcoin gab) dargestellt. Dieses Format wurde von der damals verwendeten Softwarebibliothek “openssl” übernommen.

Generell bestehen Signaturen bei ECDSA (ein Kryptographiesystem basierend auf elliptischen Kurven, das von Bitcoin verwendet wird) tatsächlich nur aus zwei großen, ganzen Zahlen: dem “r” und dem “s” Wert (siehe auch ECDSA Signatur).

Bei Signaturen von Textnachrichten, wie der obigen, hat man sich jedoch auf ein verkürztes Darstellungsformat der Signatur geeinigt (nicht das DER Format). Diese Darstellung beinhaltet einfach diese beiden Zahlen (je 256 Bit lang, also je 32 Bytes) plus ein Byte Metainformation als Prefix (also in Summe 65 Bytes lang).

Aber auch dieses Format, damals “Compact signatures” getauft, wurde erst im Zuge des “signmessage” Features in diesem Commit, im September 2011 eingeführt.

Zwar wäre es technisch möglich, eine im DER-Format dargestellte Signatur in dieses “Compact Signature” Format umzuwandeln (dieses Indiz ist deshalb nicht so relevant, wie das im vorherigen Punkt), aber die Tatsache dass die eingangs erwähnte Signatur das Compact-Format verwendet, deutet darauf hin, dass diese Signatur erst nach 2011 erstellt wurde.

Signatur nicht von Satoshi selbst:

Und zu guter Letzt: warum sollte der Empfänger (also Hal Finney) sich selbst eine Nachricht signieren, dass Paul Le Roux ihm eine Transaktion gesendet hat? Es wäre sehr viel aussagekräftiger und glaubwürdiger, wenn der Sender (also Satoshi) eine Textnachricht mit seinem Private Key signiert hätte. Aber das ist nie passiert!

Fazit

Wer auch immer diese Signatur der Nachricht erstellt hat, war definitiv im Besitz des Private Keys, den Hal Finney Anfang 2009 in Verwendung hatte. Allerdings kann man ausschließen, dass diese Signatur tatsächlich bereits 2009 erstellt wurde. 

Weiters war schon zuvor bekannt, dass dieser private Schlüssel nach dem Tod von Hal Finney († 2014) noch weiter verwendet wurde (diese Transaktion aus 2017 beweist dies zum Beispiel).

Welche Person oder welche Gruppe nun im Besitz dieses Schlüssels ist, und wie sie in den Besitz dessen gelangten, darüber ist nichts bekannt, und wir wollen uns an dieser Stelle auch nicht auf Spekulationen einlassen.

Quelle: braiins.com

Quellen und weiterführende Informationen

Geschichte des “Signmessage-Features" von Bitcoin:

  • Im April 2011 (also mehr als 2 Jahre nach der Transaktion von Satoshi an Hal Finney) wurde das Feature "signmessage" erstmalig diskutiert, damals vorgeschlagen vom Bitcointalk User “khal”: hier sein Bitcointalk Thread dazu und die Diskussion in seinem Pull-Request (#183) auf Github.

  • Wie auch heute, wird vor dem Berechnen des Hashwertes der Textnachricht, diese zuvor noch mit einem statischen Prefix versehen. In khal’s initialen Vorschlag war das damals allerdings noch (anders als heute) der String "Padding text -" (siehe seinen commit). Der Pull request wurde allerdings noch nicht gemerged, sondern weiter im Bitcointalk Forum (damals eigentlich noch forum.bitcoin.org) diskutiert.

  • Erst einige Monate (Ende September 2011) später wurde das Feature dann tatsächlich in die Codebasis von Bitcoin aufgenommen, und zwar im Rahmen des Pull Requests #524

  • Und erst in diesem Pull Request kam das heute verwendete Messag Prefix hinzu (siehe hier im Commit), sowie das heute verwendete Signatur Encoding “compact signature” (siehe hier in diesem commit).

Vielen Dank für's Lesen meines Beitrags zu diesem Thema und bis zum nächsten mal - euer Johnny.