OriginStamp Timestamp

In den Beispielen unter BitcoinJ Timestamp habe ich Euch gezeigt, wie Ihr einen Timestamp im Testnetz der Bitcoin Blockchain erzeugen und speichern könnt. Beim Testnetz besteht aber immer die Möglichkeit, dass das Netz zurückgesetzt wird und alle Einträge dieser Blockchain verschwinden. In diesem Artikel zeige ich Euch, wie Ihr den Timestamp in der „echten“ Bitcoin Blockchain ablegen könnt.

Ihr benötigt hierfür einen kostenlosen Account beim Anbieter OriginTimestamp, den Ihr über die Webseite „https://originstamp.com/de/“ erreicht. Nach dem Login könnt Ihr sofort einen Timestamp erzeugen. Zieht einfach die gewünschte Datei auf das Feld „Drag and drop to timestamp a file or click“ und im nächsten Fenster bestätigt Ihr den Vorgang:

Hier seht Ihr auch den bekannten SHA256-Hashwert Eurer Datei:

Dieser Dienstleister legt einmal pro Tag einen Timestamp im Produktions-Netz der Bitcoin Blockchain ab, daher sehen wir unter der Übersicht „My Timestamps“ noch ein „unsubmitted“ (d.h. noch nicht abgeschickt) als Status.

An dieser Stelle könnt Ihr sehr gut erkennen, dass neben dem Bitcoin-Netzwerk unser Hash noch in zwei anderen Blockchains („Etherum“ und „Aion“) abgelegt sowie zusätzlich in Form einer Anzeige im „Südkurier“. Da wir uns auf die Bitcoin-Blockchain konzentrieren müssen wir nun bis zum nächsten Morgen um 2 Uhr gedulden, dann können wir den nächsten Schritt angehen.

Einen kleinen Blick solltet Ihr auf die Grafik rechts unten von der „Home“-Seite werfen – sie zeigt Euch den Stand Eures freien Kontos an, denn jede Aktion kostet „Credits“. Die Erstellung eines Timestamps kostet 1 von 50 freien Credits (pro Monat, wird am Anfang eines Monats wieder aufgefüllt):

Die beiden nächsten Aktionen sind „teurer“, insgesamt könnt Ihr pro Monat rund 5 kostenfreie Timestamps durchführen.

Am nächsten Tag (in diesem Beispiel um 2:01) ist die Transaktion in der Bitcoin Blockchain verewigt – erkennbar an der Zeile „“verified“ = „bestätigt“.

Diese Bestätigung erhaltet Ihr über das Zertifikat, dessen Download 5 Credits „kostet“. Es ist eine PDF-Datei, die Ihr Euch über diesen Link herunterladen und anzeigen könnt: certificate.Bitcoin.5d329ca42c57bab16b7932b8a1f7d5817bfbf1eecac9a02e5323277e34b4f7c0.

In diesem Zertifikat erhaltet Ihr zusätzliche Angaben, die ich hier in Textform anzeige:

Timestamp: May-07-2020 00:01:22 UTC

Hash: 5d329ca42c57bab16b7932b8a1f7d5817bfbf1eecac9a02e5323277e34b4f7c0

Private Key: 9a658861cb83a3be71bf3f1ab313fa9bb17b042bbd76cab1a16cd25725e53346

Transaction: 75e77393abf090af06f79901d581dac469e1243741684d4f6badc7f6774033ab

Zusätzlich ist im PDF-Dokument noch der „Proof“ in Form eines Merkle Trees enthalten – weitergehende Informationen zu diesem Merkle Tree erhaltet Ihr im separaten Artikel „BitcoinJ Merkle Tree„. Der gelbmarkierte Wert in der Mitte beginnt mit „hash“ und ist unser SHA32-Hash, der gelbe Wert oben (beginnt mit „key“) ist der Merkle Tree Root Wert.

Zusätzlich zum Zertifikat ist noch eine „Raw Proof-Datei“ downloadbar – diese Datei ist nichts anderes als eine XML-Datei mit dem Inhalt des obigen Proofs und der Download kostet 3 Credits – Ihr könnt einfach aus dem PDF-Zertifikat mit „Copy & Paste“ eine Textdatei erzeugen und die obigen Werte hineinkopieren. Für dieses Beispiel biete ich Euch den Download der „Raw Proof Datei“ aus meinem Github-Archiv an (Direktlink: https://github.com/java-crypto/Timestamping/blob/master/OriginStamp/proof.Bitcoin.5d329ca42c57bab16b7932b8a1f7d5817bfbf1eecac9a02e5323277e34b4f7c0.xml).

Was können wir mit diesen Daten anfangen und wie beweisen wir nun die Speicherung „unseres“ Hashwertes in der „echten“ Bitcoin Blockchain?

Schauen wir erst einmal die Vorgehensweise des Anbieters „OriginStamp“ an. Unterhalb des Tages sammelt er alle eingehenden Hashwerte und legt dafür einen Hash-Baum oder „Merkle Tree“ an. Als Ergebnis der Berechnungen im Merkle Tree steht am Ende der „Merkle Tree Root“ Wert, in unserem Fall „9a658861cb83a3be71bf3f1ab313fa9bb17b042bbd76cab1a16cd25725e53346“. Dieser Wert dient gleichzeitig als Privater Schlüssel einer Bitcoin-Adresse; die Bitcoin-Adresse wird später als Empfangsadresse einer Transaktion benutzt.

Über eine Konvertierung können wir die „Umwandlung“ nachvollziehen – wir gehen auf die Seite „https://gobittest.appspot.com/Address„, kopieren den privaten Schlüssel oben ein und erhalten unten die Adresse „1E11vcG9wEPhxL8ad9oMwybRjfdmFcJehf“:

Nun überweist OriginStamp den Betrag von 550 Satoshi an diese Adresse und liefert auch gleich die Transaktionsnummer „75e77393abf090af06f79901d581dac469e1243741684d4f6badc7f6774033ab“ mit, damit können wir die echte Buchung mit einem Bitcoin Blockchain Explorer nachvollziehen (Direktlink: https://btc.bitaps.com/75e77393abf090af06f79901d581dac469e1243741684d4f6badc7f6774033ab):

Wie erfolgt nun unsere „Beweiskette“? Unser Hashwert ist Teil des Merkle Trees und damit auch des Merkle Tree Roots, aus dem Root-Wert wird eine Bitcoin Adresse erzeugt, an die ein Betrag von 550 Satoshi überwiesen wird. Der Zeitpunkt der Blockerzeugung ist unser gewünschter Timestamp.

Alle besprochenen Dateien sind in meinem GitHub-Archiv gespeichert, das Ihr unter der Adresse https://github.com/java-crypto/Timestamping/tree/master/OriginStamp erreichen könnt.

Letzte Bearbeitung: 07.05.2020