BitcoinJ Überprüfe einen Timestamp API

Die Überprüfung eines Timestamps ist die zentrale und wichtigste Funktion. Dabei wird lokal ein SHA256-Hash der Originaldatei erstellt und mit dem in der Blockchain in einer Transaktion gespeicherten Hashwert verglichen. Stimmen beide Werte überein ist der Nachweis der Echtheit des Timestamps erbracht.

Bislang haben wir zwei Möglichkeiten der Verifizierung kennengelernt. Die einfachste Möglichkeit besteht in der Onlineabfrage der Transaktion mit einem Bitcoin (Testnetz-) Explorer, wie ich es im Beispiel BitcoinJ Erzeuge einen Timestamp gezeigt habe. Die zweite Möglichkeit nutzt das Bitcoin-Netz durch eine Direktabfrage, hierfür ist der Zwischenschritt über die Erweiterung des Timestamps durchzuführen und danach kann die Überprüfung des Timestamps erfolgen.

Hier zeige ich Euch eine dritte Möglichkeit, welche die vorhandene Programmierschnittstelle („API“) eines Bitcoin (Testnetz-) Explorers benutzt. Bitte beachtet, das diese Lösung nur im Bitcoin Testnetz funktioniert.

Sicherlich gibt es elegantere Lösungen zur Auswertung der Antwort des Webservers, aber da ich hier lediglich eine einzige Information auslesen möchte (nämlich das „OP_RETURN“-Feld) habe ich die Schnittstelle nur minimal ausgewertet.

Der Vorteil dieser Lösung liegt in der Einfachheit und Schnelligkeit – nach ganz kurzer Zeit liegt eine Bestätigung über die Richtigkeit des Timestamps vor.

Wie arbeiten wir mit dem Programm? Zuerst wählen wir eine Datei aus deren Timestamp wir verifizieren wollen (die einfache Timestamp-Datei muss „neben“ der Originaldatei liegen):

Nach kurzer Wartezeit wird die Richtigkeit überprüft. Im Feld „SHA256-Hash“ wird der aktuell errechnete Hashwert angezeigt, im Feld „OP_RETURN“ ist der Hashwert aus der Transaktion:

Selbstverständlich wird eine fehlende Übereinstimmung ebenfalls in Rot angezeigt:

Zum Vergleich zeige ich Euch die Transaktion im Bitcoin (Testnetz) Explorer (Direktlink: https://tbtc.bitaps.com/0f85e90d9526ff183d4b9d6e9595a9ecedbcdd414034a0b4ec5001eb594142db):

Die Sourcecodes findet Ihr am Ende des Artikels.

Alle Quellcodes zu BitcoinJ Timestamps & OP_RETURN findet Ihr zum Download in meinem GitHub-Repository BitcoinJTimestamp, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/BitcoinJTimestamp. Alle Programme sind unter Java 11 lauffähig (vermutlich auch unter Java 8) und wurden mit intelliJ IDEA entwickelt, welches für dieses Programm aber nicht notwendig ist.

Zur Nutzung der Programme benötigt Ihr diverse Bibliotheken – ladet Euch diese aus dem separaten GitHub-Archiv (https://github.com/java-crypto/BitcoinJ_Libraries) herunter und bindet Sie über Eure Entwicklungsumgebung ein.

Noch ein Wort zum Thema „Lizenz“: Das Programm steht unter unterschiedlichen Lizenzen, die Ihr bitte beachten solltet. Die von mir erstellten Beispiele selber stehen unter der „Unlicense“-Lizenz, allerdings werden zur Laufzeit diverse Bibliotheken eingebunden, welche zum Teil ganz eigene Lizenzen mitbringen. Darauf kann ich in meinen Lizenzhinweisen nicht hinweisen.

Letzte Bearbeitung: 22.03.2020

Hier der Sourcecode des Programms und der Form; den Quellcode der Klasse RedirectedFrame.java findet Ihr in meinem GitHub-Repository: