{"id":545727,"date":"2019-07-14T14:51:41","date_gmt":"2019-07-14T12:51:41","guid":{"rendered":"https:\/\/blog.embedded-system-design.de\/?p=545727"},"modified":"2019-07-07T17:06:37","modified_gmt":"2019-07-07T15:06:37","slug":"vertrauenswuerdige-zeitstempel","status":"publish","type":"post","link":"https:\/\/blog.embedded-system-design.de\/index.php\/2019\/07\/14\/vertrauenswuerdige-zeitstempel\/","title":{"rendered":"Vertrauensw\u00fcrdige Zeitstempel"},"content":{"rendered":"\n<p>Vertrauensw\u00fcrdige Zeitstempel sind Siegel f\u00fcr die Datenintegrit\u00e4t mit einem vertrauensw\u00fcrdigen Datum und Uhrzeit zu dem die Zertifizierung stattfand. Klares Ziel ist hier die sichere Verfolgung der Erstellungs- und \u00c4nderungszeit eines Dokuments. Niemand &#8211; auch nicht der Besitzer des Dokuments &#8211; sollte nach Erstellen des Zeitstempels in der Lage sein, das Dokument zu \u00e4ndern, ohne die Integrit\u00e4t des Zeitstempels zu beeintr\u00e4chtigen. \u00c4hnlich wie ein Notar erstellt dazu eine unabh\u00e4ngige Instanz &#8211; die Trusted Timestamping Agency &#8211; einen Zeitstempel f\u00fcr Dateien.<br>Im folgenden Artikel beschreibe ich, wie mit der kostenfreien Trusted TimeStamping Agency <a href=\"https:\/\/www.freetsa.org\/\">FreeTSA<\/a> vertrauensw\u00fcrdige Zeitstempel erzeugt und gepr\u00fcft werden k\u00f6nnen. Weder beim Erstellen noch beim Pr\u00fcfen der Zeitstempel werden dabei die zu stempelnden Dateien an den FreeTSA Server \u00fcbertragen &#8211; sondern nur deren Hashwerte. Die Inhalte bleiben damit vertraulich.<\/p>\n\n\n\n<h2>Wie kann ich einen vertrauensw\u00fcrdigen Zeitstempel erzeugen?<\/h2>\n\n\n\n<p>Zun\u00e4chst einen Timestamp-Request erstellen. Dieser enth\u00e4lt nicht die Daten sondern nur einen Hashwert f\u00fcr die abzustempelnde Datei.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl ts -query -data example.file -no_nonce -sha512 -out example.file.tsq<\/code><\/pre>\n\n\n\n<p>Zum Erstellen des Zeitstempels den erstellte Request anschlie\u00dfend an FreeTSA senden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -H \"Content-Type: application\/timestamp-query\" --data-binary '@example.file.tsq' https:\/\/freetsa.org\/tsr -o example.file.tsr<\/code><\/pre>\n\n\n\n<p>Die Antwort enth\u00e4lt den signierten Zeitstempel und wird in diesem Beispiel in example.tsr gespeichert. Der Timestamp-Request example.tsq wird nicht weiter ben\u00f6tigt.<\/p>\n\n\n\n<h2>Wie kann ich den Zeitstempel anzeigen?<\/h2>\n\n\n\n<p>Zum Anzeigen des Zeitstempels:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl ts -reply -in example.file.tsr -text<\/code><\/pre>\n\n\n\n<p>Dadurch werden folgende Infos (neben anderen) angezeigt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Serial number: 0x108D72\nTime stamp: Jul  7 11:09:18 2019 GMT\nTSA: DirName:\/O=Free TSA\/OU=TSA\/description=This certificate digitally signs documents and time stamp requests made using the freetsa.org online services\/CN=www.freetsa.org\/L=Wuerzburg\/C=DE\/ST=Bayern<\/code><\/pre>\n\n\n\n<h2>Wie kann ich den Zeitstempel auf Echtheit \u00fcberpr\u00fcfen?<\/h2>\n\n\n\n<p>Die Echtheit des Zeitstemples kann mit dem Zertifikat von FreeTSA gepr\u00fcft werden. Dazu m\u00fcssen folgende Zertifikate von FreeTSA heruntergeladen werden:<br><br><a href=\"https:\/\/www.freetsa.org\/files\/tsa.crt\">tsa.crt<\/a> signs documents and time stamp requests made using the freetsa.org online services, Key modulus (sha256): 899ba3d9f777e2a74bdd34302bc06cb3f7a46ac1f565ee128f79fd5dab99d68b)<br><br><a href=\"https:\/\/www.freetsa.org\/files\/cacert.pem\">cacert.pem<\/a> Stammzertifikat, Key modulus (sha256): a4b1a0a81aef68be1cc985d0f83bd6539cfe84174587f900e15ffe3f65433056<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl ts -verify -in example.file.tsr -data example.file -CAfile cacert.pem -untrusted tsa.crt<\/code><\/pre>\n\n\n\n<p>Bei g\u00fcltigem Zeitstempel erscheint:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Verification: OK<\/code><\/pre>\n\n\n\n<h3>Sind die Pr\u00fcfzertifikate von FreeTSA \u00fcberhaupt echt?<\/h3>\n\n\n\n<p>Um die heruntergeladenen Zertifikate zu \u00fcberpr\u00fcfen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl x509 --noout --modulus --in tsa.crt | sha256sum<\/code><\/pre>\n\n\n\n<p>899ba3d9f777e2a74bdd34302bc06cb3f7a46ac1f565ee128f79fd5dab99d68b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl x509 --noout --modulus --in cacert.pem | sha256sum<\/code><\/pre>\n\n\n\n<p>a4b1a0a81aef68be1cc985d0f83bd6539cfe84174587f900e15ffe3f65433056<\/p>\n\n\n\n<p>Die erwarteten Hashwerte stammen von der <a href=\"https:\/\/www.freetsa.org\/\">FreeTSA Webseite<\/a> (7. Juli 2019).<\/p>\n\n\n\n<h2>Wie kann ich beim Zeitstempeldienst nachfragen?<\/h2>\n\n\n\n<p>FreeTSA f\u00fchrt Buch dar\u00fcber, was unterschrieben worden ist. Im Logbuch kann nachgesehen werden, wann die Daten von TSA gestempelt worden sind. Dazu ist der Hashwert der Datei n\u00f6tig: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl dgst -sha512 example.file | sed -e 's\/^.*= \/\/'<\/code><\/pre>\n\n\n\n<p>Liefert den Hashwert als Ausgabe \u00e4hnlich<\/p>\n\n\n\n<p>62bce9167d55f4553289abb4827f7c69890bc85fc0698059deba78ebdd52551d06d0cdc4bb4102d674e320bdefa97be51f6b25088a48c069ff014ae6eb6c7f9e<\/p>\n\n\n\n<p>Im Logbuch l\u00e4sst sich der unterschriebene Hashwert suchen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -s https:\/\/freetsa.org\/logs.gz | gunzip -c | grep -i 62bce9167d55f4553289abb4827f7c69890bc85fc0698059deba78ebdd52551d06d0cdc4bb4102d674e320bdefa97be51f6b25088a48c069ff014ae6eb6c7f9e<\/code><\/pre>\n\n\n\n<p>Hinweis: Zum Zeitpunkt des verfassens dieses Aktikels reicht das Log nur bis zum April 2018. Eine Anfrage beim Betreiber von FreeTSA l\u00e4uft.<\/p>\n\n\n\n<h2>Beispiel: Zeitstempel f\u00fcr Source-Code<\/h2>\n\n\n\n<p>F\u00fcr Quellcode lasse ich nicht jede einzelne Quelldatei stempeln, sondern eine Liste mit Hashwerten der Quelldateien.<\/p>\n\n\n\n<p>Liste mit Hashwerten erstellen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ find -type f -exec sha256sum \"{}\" \";\" > file.list<\/code><\/pre>\n\n\n\n<p>Erzeugen des Zeitstempels f\u00fcr die Liste:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ openssl ts -query -data file.list -no_nonce -sha512 -out file.list.tsq\n$ curl -H \"Content-Type: application\/timestamp-query\" --data-binary '@file.list.tsq' https:\/\/freetsa.org\/tsr -o file.list.tsr<\/code><\/pre>\n\n\n\n<p>Anzeigen und Pr\u00fcfen des Zeitstempels der Liste:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ openssl ts -reply -in file.list.tsr -text\n$ openssl ts -verify -in file.list.tsr -data file.list -CAfile cacert.pem -untrusted tsa.crt<\/code><\/pre>\n\n\n\n<p>Pr\u00fcfen der Hashwerte der Quelldateien in der Liste:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sha256sum --check file.list<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Vertrauensw\u00fcrdige Zeitstempel sind Siegel f\u00fcr die Datenintegrit\u00e4t mit einem vertrauensw\u00fcrdigen Datum und Uhrzeit zu dem die Zertifizierung stattfand. Klares Ziel ist hier die sichere Verfolgung der Erstellungs- und \u00c4nderungszeit eines Dokuments. Niemand &#8211; auch nicht der Besitzer des Dokuments &#8211; sollte nach Erstellen des Zeitstempels in der Lage sein, das Dokument zu \u00e4ndern, ohne die &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/blog.embedded-system-design.de\/index.php\/2019\/07\/14\/vertrauenswuerdige-zeitstempel\/\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[3,8,13],"tags":[64,63],"_links":{"self":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts\/545727"}],"collection":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/comments?post=545727"}],"version-history":[{"count":3,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts\/545727\/revisions"}],"predecessor-version":[{"id":545730,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts\/545727\/revisions\/545730"}],"wp:attachment":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/media?parent=545727"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/categories?post=545727"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/tags?post=545727"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}