Mit folgenden Befehlen kannst du mit OpenSSL den Hashwert selbst berechnen und eine Datei zum Nachweis signieren.
Hashwert berechnencat file.dat | openssl dgst -sha256Datei signieren und Hashwert berechnen
cat file.dat | \ gpg --detach-sig -u your.email@provider.com | \ openssl dgst -sha256
Verwende dieses Formular, um den Wurzelknoten eines Merkle Baums anhand von Hashwert und Audit Proof zu berechnen.
006748c21efaf8fe67b833d82cba7955619c3c3b06e11ed6562fbf6a1cb06f2c
openssl ts -verify -data <(echo -n "006748c21efaf8fe67b833d82cba7955619c3c3b06e11ed6562fbf6a1cb06f2c") \ -in file.tsr -CAfile cacert.pem -untrusted tsa.crt
Die Blockchain sind kryptographisch miteinander verbundene und dezentral gespeicherte Datensätze. Jeder Datensatz enthält dabei einen Fingerabdruck (Hashwert) des vorhergehenden Datensatzes, einen Zeitstempel und weitere Transaktionsdaten. Dadurch, dass spätere Datensätze auf früheren Datensätzen aufbauen und diese damit als richtig bestätigen, ist es unmöglich diese früheren Daten zu ändern oder zu löschen, ohne alle darauf aufbauenden Daten ebenfalls zu ändern. Eine solche Änderung ist aber durch die verteilte Speicherung der Daten nicht möglich und würde sofort erkannt werden.
Beim Versiegeln von Dokumenten wird diese Eigenschaften der garantierten Datenintegrität einer Blockchain verwendet.
Der Verein zur Förderung der selbstständigen Nutzung von Daten hat es sich zum Ziel gesetzt, die selbstbestimmte Nutzung persönlicher Daten durch Privatpersonen zu fördern. Die Blockchain-Technologie ermöglicht nun auch für die private Datennutzung einen einfachen und sicheren Weg zum Nachweis von Datenintegrität und daher bietet der Verein dieses Service an. Durch die Kombination von mehreren Vorgängen - derzeit erfolgt die Gruppierung pro Tag - können die dafür notwendigen Transaktionskosten gering gehalten werden und sind durch das Vereinsbudget abgedeckt.
Auf Github ist der Quellcode für diese Webseite unter der MIT-Lizenz frei verfügbar: https://github.com/OwnYourData/app-seal
Der Dienst zum Versiegeln von Dokumenten verwendet im Hintergrund eine frei zugängliche API, die ebenfalls von anderen Diensten genutzt werden kann. Mittels HTTP POST Request kann ein Hashwert sowohl in die Blockchain geschrieben werden, oder - wenn der Hashwert zuvor bereits verwendet wurde - wird die Adresse in der Blockchain zurückgegeben. Da alle Hashwerte eines Tages in einem Merkle-Baum kombiniert werden, ist neben der Adresse in der Blockchain auch der Audit-Proof wie in RFC 6962 angegeben.
Diese API ist mittels Swagger hier beschrieben (nur in englischer Sprache): https://blockchain.ownyourdata.eu/doc
Auf Github ist der Quellcode für das API-Service unter der MIT-Lizenz frei verfügbar:
Verwende den folgenden Aufruf, um einen Hashwert mittels API in der Blockchain zu speichern:
$ curl -X POST "https://blockchain.ownyourdata.eu/api/doc?hash=006748c21efaf8fe67b833d82cba7955619c3c3b06e11ed6562fbf6a1cb06f2c"
Beim ersten Aufruf wird folgende JSON-Struktur als Rückgabewert geliefert:
{ "status": "new", "address": "", "root-node": "", "audit-proof": [], "dlt-timestamp": "", "oyd-timestamp": "2018-09-01T22:39:16Z" }
Sobald alle eingegangenen Hashwerte eines Tages tatsächlich in die Blockchain geschrieben wurden, enthält der Rückgabewert folgende weitere Informationen:
{ "status": "exist", "address": "0xcf4a0cf4b9ea6d10c0407680fe1f73df1a59c362db29a1863e14d85fcdb69c9c", "root-node": "10611bc55c740b46517ce15ad82b79350468affc4660379771475eaa494ec3fd", "audit-proof": "+661eec906b6a88b3bf751d7f5c62b84de03fadaed78e9398efebf408b2a3236c, -0cdf07531250367444ae8a3bfcbb0b928e1313ece65f2a45abcc2226e278d6cd, -5cbe1017c15d83ce8f4c02b4c1d8d2fa0c51bbe281363d98ef7dc33ffe26a072", "dlt-timestamp": "2018-09-02T06:00:17Z", "oyd-timestamp": "2018-09-01T22:39:16Z" }
Anmerkung: die Vorzeichen (+,-) im Feld audit-proof
geben an, ob der jeweilige Hashwert als linker (+) oder rechter (-) Knoten bei der Überprüfung zur Berechnung des Wurzelknotens zu betrachten ist - siehe RFC 6962. Als Hashfunktion wird generell SHA256 verwendet.
Ein Merkle-Baum ist eine sogenannter Binärbaum, d.h., jeder Knoten besitzt höchstens 2 Kindknoten. Die Blätter sind dabei Hash-Werte und jeweils 2 benachbarte Knoten bilden einen übergeordneten Knoten. Der Hash-Wert eines Blattes, gemeinsam mit dem Audit-Proof (lt. RFC 6962) ergibt eindeutig die Wurzel des Merkle-Baums. Wichtig ist bei der Anwendung des Audit-Proofs die Angabe, ob es sich jeweils um den linken oder rechten Knoten im Pfad handelt.
In der vorliegenden Implementierung werden die Werte des Audit-Proofs durch + (linker Knoten) und - (rechter Knoten) gekennzeichnet. Gemeinsam mit dem Hashwert kann so der Wurzelknoten berechnet werden. Das Verfahren des Merkle Baums wird verwendet, um alle eingegangen Hash Werte eines Tages in eben diesem Binärbaum anzuordnen und dann nur den Wurzelknoten selbst in der Blockchain zu speichern.
Vertrauenswürdiges Zeitstempeln ist ein Prozess, bei dem Datum und Zustand eines Dokuments sicher verfolgt werden können. Sicherheit bedeutet hier, dass niemand - nicht einmal der Besitzer des Dokuments - in der Lage ist, den Zeitstempel nach der Erstellung zu ändern. Der hier angebotene Zeitstempel folgt dem Standard RFC 3161 und kann auf zeitsensible Transaktionen durch unabhängig verifizierte und überprüfbare Datums- und UTC-Koordinaten (Coordinated Universal Time) angewendet werden.
Das Hinzufügen eines vertrauenswürdigen Zeitstempels zu einem Dokument bietet ein digitales Siegel für die Datenintegrität und ein vertrauenswürdiges Datum und die Uhrzeit, zu der die Transaktion stattgefunden hat. Empfänger von Dokumenten mit einem vertrauenswürdigen Zeitstempel können überprüfen, wann das Dokument oder der Code digital signiert wurde, sowie überprüfen, ob das Dokument oder der Code nach dem Datum, für das der Zeitstempel gilt, geändert wurde.