Unterstützte Dateiformate

Zur Überprüfung von Dateien oder Archiven ist es notwendig, die aus den Originaldateien berechneten Prüfsummen als Dateien zu speichern. Normalerweise werden diese Prüfsummendateien zusammen mit den Originaldateien zum Beispiel auf Backup-Medien gesichert und an einem geschützten Ort wie einem Banktresor aufbewahrt. Im Falle des Falles lassen sich solche Backups wiederherstellen. Im Internet begegnen einem Prüfsummendateien vorwiegend auf FTP- oder anderen Download-Servern. In der Regel tragen die Prüfsummendateien dabei denselben Namen wie die Originaldateien ergänzt um eine charakteristische Endung wie .md5 für MD5-Prüfsummendateien.

GNU-Dateiformat

Das gebräuchlichste Dateiformat für Prüfsummendateien im Internet ist das GNU-Format. Die Daten werden dabei zeilenweise als Text abgelegt, pro berechneter Originaldatei wird dabei eine einzelne Zeile belegt. Die Zeilen folgen einem festen Aufbau, zunächst steht die Prüfsumme, nach dem Leerzeichen folgt ein Stern * zu Kennzeichnung, dass es sich um Binärdaten handelt und direkt darauf die Referenz für die Originaldatei. Normalerweise wird hier lediglich der Dateiname ohne Pfad abgelegt, prinzipiell ist dies aber aufgrund des GNU-Formates möglich. Werden komplette Dateisystempfade wie z.B. C:\Temp\leisenfels_48.png  verwendet, so kann es bei der Prüfung der Prüfsummen auf einem anderen Computer mit unterschiedlicher Dateisystemstruktur vorkommen, dass die Referenz nicht aufgelöst werden kann. Deshalb sollten als Dateireferenzen lediglich die Namen der Originaldateien hier gespeichert werden. Die von der Digester-Software erzeugten GNU-Dateien enthalten deshalb stets nur die Namen ohne Pfade. Eine Prüfsummendatei leisenfels_48.png.md5 im GNU-Format sieht z.B. so aus:

            497f82bf72503317c62ecf6b2645a735 *leisenfels_48.png

Sollen mehrere Dateien in einem Verzeichnis berechnet und die Prüfsummen gemeinsam in eine einzelne Datei abgelegt werden (Übersichtlichkeit), so ist dies beim GNU-Format möglich. Die GNU-Datei enthält dann einfach mehrere Zeilen wie oben beschrieben. Auch die Erzeugung von GNU-Dateien pro Verzeichnis ist mit der Digester-Software möglich, wenngleich im Internet zumeist pro Originaldatei eine separate GNU-Datei anzutreffen ist.

Üblicherweise erhalten Prüfsummendateien im GNU-Format die Endung des verwendeten Algorithmus. Im Beispiel heißt die erzeugte Prüfsummendatei deshalb leisenfels_48.png.md5. Die Digester-Software ergänzt diese Endungen je nach Konfiguration, so dass beliebige Namen für die Prüfsummendateien verwendet werden können. Wegen dieser Eigenschaft ist es nicht möglich, gleichzeitig BSD- und GNU-Dateien zu erzeugen, da beide Formate dasselbe Namensschema verwenden. Mehr Flexibilität gegenüber den älteren Dateiformaten GNU/BSD bieten Dateien im neuen Digester XML-Format.

BSD-Dateiformat

Das nächste im Internet gebräuchliche Dateiformat zur Ablage von Prüfsummen ist das BSD-Dateiformat. Wie beim GNU-Dateiformat sind auch hier die Prüfsummen pro Originaldatei als einzelne Zeilen gespeichert, wobei die Zeilen etwas anders aufgebaut sind:

            MD5 (leisenfels_48.png) = 497f82bf72503317c62ecf6b2645a735

Als erstes ist der verwendete Algorithmus zur Prüfsummen-Berechnung aufgeführt (hier MD5), nach dem Leerzeichen folgt in runden Klammern die Referenz auf die Originaldatei und nach dem Gleichheitszeichen die Prüfsumme. Normalerweise wird hier lediglich der Dateiname ohne Pfad abgelegt, prinzipiell ist dies aber aufgrund des BSD-Formates möglich. Werden komplette Dateisystempfade wie z.B. C:\Temp\leisenfels_48.png  verwendet, so kann es bei der Prüfung der Prüfsummen auf einem anderen Computer mit unterschiedlicher Dateisystemstruktur vorkommen, dass die Referenz nicht aufgelöst werden kann. Deshalb sollten als Dateireferenzen lediglich die Namen der Originaldateien hier gespeichert werden. Auch die von der Digester-Software erzeugten BSD-Dateien enthalten deshalb stets nur die Namen ohne Pfade.

Für die Ablage der Prüfsummen zu mehreren Originaldateien in eine einzelne Prüfsummendatei gelten dieselben Regeln wie für die GNU-Dateien (1 Zeile pro Originaldatei). Der Zeilenaufbau des BSD-Dateiformates ist eher an die mathematische Beschreibung von Hash-Funktionen angegliedert. So kann eine Zeile in etwa wie folgt übersetzt werden: Wende die Hash-Funktion MD5 auf den Datei-Parameter leisenfels_48.png an, das Ergebnis dieser Operation ist der Wert X.

Üblicherweise erhalten auch Prüfsummendateien im BSD-Format die Endung des verwendeten Algorithmus. Im Beispiel heißt die erzeugte Prüfsummendatei deshalb leisenfels_48.png.md5. Die Digester-Software ergänzt diese Endungen je nach Konfiguration. Wegen dieser Eigenschaft ist es nicht möglich, gleichzeitig BSD- und GNU-Dateien zu erzeugen, da beide Formate dasselbe Namensschema verwenden. Mehr Flexibilität gegenüber den älteren Dateiformaten GNU/BSD bieten Dateien im neuen Digester XML-Format.

OpenPGP-Dateiformat

OpenPGP-Signaturen stellen die mit Abstand zuverlässigste Form der Prüfung von Dateien aus dem Internet dar, da sich hier sowohl die Inhalte auf Konsistenz prüfen lassen und darüberhinaus die Herkunft der Signatur-Dateien bestimmt werden kann. Jede Signatur nach OpenPGP-Standard wird mit einem oder mehreren geheimen Schlüsseln erzeugt, die Kennungen der verwendeten Schlüssel sind dabei in jeder Signatur-Datei enthalten. Zum vollständigen Abgleich von Signaturen ist dann jeweils der öffentliche Schlüssel des Erzeugers der Signatur-Dateien erforderlich. Öffentliche Schlüssel sind meist auf den Internet-Seiten des jeweiligen Download-Anbieters herunterzuladen und können einfach in die Digester-Software importiert werden.

Eine typische Signaturdatei gemäß OpenPGP-Standard sieht z.B. folgendermaßen aus:

-----BEGIN PGP SIGNATURE-----
Version: Digester 1.6.3

iEYEABECAAYFAk/4NgcACgkQJFLzC/zoww/htgCfY0Denq1XxXT83PGa9LcdAkeC57AAoI7YXdmme2SrI5JrpxT/ueUwn3UT
=civA
-----END PGP SIGNATURE-----

Signaturdateien können sowohl im ASCII-Format vorliegen (siehe Abbildung) oder im Binärformat. Binärdateien haben den Vorteil, dass etwas weniger Platz zur Speicherung benötigt wird. Innerhalb der Digester XML-Dateien werden OpenPGP-Signaturen immer im ASCII-Format abgelegt, da dort Binärdaten nicht ohne weiteres speicherbar sind. Im Gegensatz zu den übrigen hier vorgestellten Formaten kann jede Signatur-Datei nur eine einzige Signatur enthalten, so dass eine Speicherung der Signaturen für ganze Verzeichnisse hier nicht möglich ist. Das exakte Dateiformat für OpenPGP-Signaturen wird von RFC 4880 festgelegt.

Typische Endungen für Signaturdateien sind .asc und .sig, innerhalb der Digester-Software kann aber jede beliebige Dateiendung zur Generierung hinterlegt werden. Um erzeugte Signaturdateien kenntlich zu machen, lässt sich ein frei einzugebender einzeiliger Text als Version im Kopf der ASCII-Signaturen unterbringen. Hier können Sie z.B. den Namen Ihrer Firma oder Organisation eintragen.

Digester XML-Format

Wegen der oben beschriebenen Einschränkungen sollten weder GNU- noch BSD-Dateiformate zur Speicherung von Prüfsummen zum Einsatz kommen. Dies kann aber zum Beispiel für FTP-Server sinnvoll sein, weil Kunden häufig besser mit diesen älteren Formaten zurecht kommen. Wo immer möglich bietet sich das neue XML-basierte Dateiformat an, das zusammen mit der Digester-Software effizient eingesetzt werden kann. Hier können ebenso einzelne Prüfsummendateien pro Originaldatei erzeugt werden, aber auch beliebige Zusammenfassungen von Prüfsummen auch über Datenträgergrenzen hinweg vorgenommen werden.

So lassen sich mit dem Digester XML-Format komplette Verzeichnisbäume einer Festplatte sichern, wobei eine einzelne Prüfsummendatei natürlich sehr viel übersichtlicher ist als ggf. tausende von Dateien. Zudem lässt sich diese Datei auch auf anderen Medien speichern, da optional absolute Dateipfade mit gespeichert werden können. Hier sehen Sie zunächst ein Beispiel für eine Prüfsummendatei im Digester XML-Format (jnlp-1_5-mr-spec.pdf.digest):

<?xml version="1.0" encoding="UTF-8"?>
<summary version="1.1" date="Sat Jul 07 15:13:43 CEST 2012" targets="1">
  <comment>Created with Leisenfels Digester</comment>
  <target relpath="jnlp-1_5-mr-spec.pdf" length="227496"
          modified="Tue May 29 10:56:56 CEST 2012" digests="6" pgpsigs="1">
      <digest algorithm="SHA-1" size="20"
              format="hex">9346cb18d8cf8d5066e661dc468540b14275285f</digest>
      <digest algorithm="SHA-1" size="20" pos="8192"
              format="hex">0ad56058ddd6fba142c38f4552bf4fe16f93103f</digest>
      <digest algorithm="SHA-1" size="20" pos="16384"
              format="hex">68bb5167eb62667d3f5ea9bfd529e438daed0586</digest>
      <digest algorithm="SHA-1" size="20" pos="32768"
              format="hex">36b31b4fe0a50557bf66f1976eb2c07b5228616f</digest>
      <digest algorithm="SHA-1" size="20" pos="65536"
              format="hex">57010aa5db867eecc6553b5842f04f158df09cb2</digest>
      <digest algorithm="SHA-1" size="20" pos="131072"
              format="hex">128e90d30b816addb24b1106195accdf78952a6a</digest>
      <pgpsig keyid="0x2452F30BFCE8C30F" keyname="Leisenfels Development"
              keyemail="devel@leisenfels.com"
      keyurl="http://ftp.leisenfels.com/security/pgpkeys/devel@leisenfels.com.asc"
              size="194" format="ascii">-----BEGIN PGP SIGNATURE-----
Version: Digester 1.6.3

iEYEABECAAYFAk/4NgcACgkQJFLzC/zoww/htgCfY0Denq1XxXT83PGa9LcdAkeC
57AAoI7YXdmme2SrI5JrpxT/ueUwn3UT
=civA
-----END PGP SIGNATURE-----</pgpsig>
   </target>
</summary>

Wie zu erkennen ist, handelt es sich beim XML-Format ebenso um Textdateien, die mit den meisten  Texteditoren oder Textverbeitungsprogrammen angesehen werden können. Das XML-Format bietet den Vorteil, dass auch andere Zeichenkodierungen (Zeichensätze) für die Daten verwendet werden können (hier UTF-8). So lassen sich hier z.B. auch japanische Schriftzeichen in Dateinamen kodieren. Jede XML-Datei besteht aus sogenannten Tags, also Ausdrücken in spitzen Klammern, wobei jedes Tag durch ein zweites mit demselben Namen und führendem "/"-Symbol abgeschlossen wird. Dazwischen stehen entweder Daten oder weitere Tags zur Strukturierung. Tags lassen sich auch direkt durch ein "/"-Symbol innerhalb des ersten Tags abschließen, wodurch das zweite Tag weggelassen werden kann (Kurzschreibform).

Die XML-Dateien beziehen sich auf das Dokumentformat summary in der Version 1.0 bzw. 1.1. Zeit und Datum während des Schreibens der Prüfsummendatei folgt im Attribut date. Mit dieser Angabe lassen sich solche XML-Dateien auch verschieben oder kopieren, wobei der ggf. zur Prüfung herangezogene Zeitstempel der Datei auf der Ebene des Dateisystems verloren gehen kann. Aus diesem Grund ist der Zeitpunkt des Schreibens der Prüfsummendatei nochmals in der Datei selbst dokumentiert.

Die Anzahl der in der Prüfsummendatei beschriebenen Originaldateien liefert das Attribut targets, da die Möglichkeit besteht, hier beliebige Prüfsummen zu beliebigen Originaldateien abzulegen. Das nächste XML-Tag comment enthält eine Beschreibung zur Kennzeichnung der Datei. Dieser Text lässt sich innerhalb der Digester-Software einstellen, so dass auch Hinweise zum FTP-Server oder Nutzungsinformationen hier abgelegt werden können.

Das zur Ablage der Prüfsummen verwendete Tag target kann nun beliebig häufig wiederholt werden, im Beispiel wurde nur die Datei jnlp-1_5-mr-spec.pdf berechnet. Das Attribut relpath (kurz: relativer Pfad) enthält analog zu den GNU/BSD-Dateien den Dateinamen ohne Pfade des Computers. Diese Referenz kann allgemein aufgelöst werden, solange die Digester XML-Datei im selben Verzeichnis wie die Originaldatei oder Prüflingsdatei gespeichert wird. Zusätzlich kann die Digester-Software so eingestellt werden, dass auch das Attribut abspath angelegt wird (kurz: absoluter Pfad). Dort werden dann die kompletten Zugriffspfade zu den Originaldateien wie z.B. C:\Temp\jnlp-1_5-mr-spec.pdf gespeichert.

Da absolute Referenzen zumindest auf dem Computer aufgelöst werden können, auf dem die Digester XML-Datei erzeugt wurde, lassen sich die Prüfsummendateien an einem beliebigen Platz auf demselben Computer speichern und später wieder korrekt verarbeiten. So könnte man mit der Digester-Software zum Beispiel alle Laufwerke des Betriebssystems in einem Durchlauf scannen, Prüfsummen berechnen lassen und das Gesamtergebnis mit allen Prüfsummen und weiteren Daten in eine einzige Digester XML-Datei speichern. Dies ist sehr übersichtlich, da Prüfsummendateien nicht wie beim GNU/BSD-Format pro Originaldatei bzw. pro Verzeichnis abgelegt werden müssen.

Eine wichtige Angabe zu den verarbeiteten Originaldateien ist die Länge in Bytes. Diese Angabe kann dazu herangezogen werden, ob eine Prüfung der enthaltenen Prüfsummen überhaupt durchgeführt werden muss. Beispielsweise könnte man entscheiden, dass die Originaldateien auf einem FTP-Server nur dann neu berechnet werden müssen, wenn entweder der Zeitstempel oder die Länge der Datei sich geändert hat. Diese Zusatzinformationen, die nur in den Digester XML-Dateien vorzufinden sind, können unnötige Prüfungen oder Berechnungen von Prüfsummen vermeiden helfen. Dies kann insbesondere beim Abgleich von Originaldateien auf entfernten Servern mit lokalen Prüflingsdateien, dem sogenannten Mirroring,  erhebliche Geschwindigkeitsvorteile bringen.

Ähnlich wie das Attribut date enthält das Attribut modified einen Zeitstempel, hier aber denjenigen der Originaldatei zum Zeitpunkt der Berechnung der Prüfsummen. Wie oben bereits geschildert, lässt sich durch solche Zusatzinformationen die Entscheidung erleichtern, ob eine Prüfung überhaupt durchzuführen ist. Durch die Speicherung dieses Datum innerhalb der Prüfsummendatei können Veränderungen der Originaldateien sehr einfach festgestellt werden. Außerdem gehen Zeitstempel auf Ebene des Betriebssystems zum Beispiel durch Kopieren der Originaldateien von einem Laufwerk auf ein anderes in der Regel verloren.

Die Angabe digests benennt die Anzahl der nun folgenden Prüfsummen. Gegenüber GNU/BSD-Dateien können in Digester XML-Dateien Prüfsummen von Algorihmen in beliebiger Kombination abgelegt werden. So lassen sich zum Beispiel MD5- und SHA-1-Prüfsummen gemeinsam in einer Digester XML-Datei speichern.

Nun zu den Prüfsummen in den digest-Tags: Die Angabe algorithm beschreibt den verwendeten Hash-Algorithmus (hier MD5 und SHA-1). Jedes digest-Tag beinhaltet die Angaben zu exakt einer Prüfsumme, hier sind deshalb zwei solche Abschnitte eingetragen. Das nächste Attribut size beschreibt die Länge der folgenden Prüfsumme in Bytes. Diese Angabe ist wichtig, wenn die Daten aus einer Digester XML-Datei zum Beispiel in eine Datenbank mit Feldern fester Länge importiert werden soll. Das Attribut format gibt das Format der Prüfsumme an, wobei aktuell innerhalb der Digester-Software die Werte "hex" für hexadezimale Prüfsummen und "base64" für Prüfsummen in der Base64-Kodierung erzeugt werden können. Base64 kommt beispielsweise bei der kodierten Übertragung von E-Mail-Anhängen zum Einsatz, im Normalfall sollten Prüfsummen in hexadezimaler Darstellung gespeichert werden. Vor dem schließenden digest-Tag findet sich nun die Prüfsumme. Aufgrund der Einstellung "hex" stehen hier exakt die Werte wie in den GNU/BSD-Dateien, diese würden bei "base64" abweichen.

Neben Prüfsummen wie MD5, SHA-1 usw. lassen sich auch OpenPGP-Signaturen innerhalb des Digester XML-Formates unterbringen (Element pgpsig). Neben der Signatur selbst, die immer im ASCII-Format gespeichert wird, finden sich diverse Informationen zu den verwendeten OpenPGP-Schlüsseln. Innerhalb der Digester-Software können die folgenden Schlüssel-Merkmale ausgewählt werden:

Ein weiterer Vorteil des Digester XML-Formates, der zusammen mit der Digester-Software voll ausgeschöpft werden kann, sind die Zwischenprüfsummen. Während GNU/BSD-Dateien lediglich eine einzige Prüfsumme pro Originaldatei aufnehmen können, erlaubt der Einsatz von Digester XML-Dateien die Speicherung beliebig vieler Zwischenprüfsummen. Die oben dargestellte Digester XML-Datei enthält lediglich die endgültige Prüfsumme, die nach der Verarbeitung aller Bytes der Originaldatei gebildet worden ist. Die Digester-Software kann nun aber an definierten Positionen Zwischenergebnisse als Zwischenprüfsummen auskoppeln und mit Positionsangabe in die Digester XML-Dateien speichern.

Dies hat den Vorteil, dass Abweichungen der Originaldatei vom Prüfling häufig schneller festgestellt werden können, als wenn erst die gesamte Prüflingsdatei verarbeitet werden muss. Dabei kann man sich den Effekt zunutze machen, dass Prüflinge oftmals bereits in den ersten Datenblöcken von den Originaldaten abweichen. Gerade bei der Prüfung von Dateien, die auf entfernten Servern liegen, können sich dadurch erhebliche Geschwindigkeitsvorteile ergeben, da ggf. weniger Daten übertragen bzw. verarbeitet werden müssen.

Das folgende Beispiel zeigt eine Digester XML-Datei mit Zwischenprüfsummen, die nach 1 Kilobyte erzeugt worden sind (pos=1024). Der Modus bei der Erzeugung von Zwischenprüfsummen kann innerhalb der Digester-Software eingestellt werden. Aktuell lassen sich Zwischenergebnisse linear in festen Abständen (z.B. alle 10 Megabytes) oder exponenziell erzeugen (z.B. beginnend bei 16 Kilobytes, dann in Schritten der Zweierpotenz 32 Kilobytes , 64 Kilobytes usw.). Für beide Arten der Zwischenprüfsummen-Erzeugung lässt sich eine maximale Anzahl von Zwischenergebnissen festlegen, so dass die Digester XML-Dateien nicht beliebig groß werden.

<?xml version="1.0" encoding="UTF-8"?>
<summary version="1.0" date="Sat Feb 07 17:10:18 CET 2009" targets="1">
   <comment>Created with Leisenfels Digester</comment>
    <target relpath="leisenfels_48.png" length="1906"
           modified="Sun Jul 13 16:51:04 CEST 2008" digests="4">
        <digest algorithm="MD5" size="16"
                format="hex">497f82bf72503317c62ecf6b2645a735</digest>
        <digest algorithm="MD5" size="16" pos="1024"
                format="hex">13e5314fc870d2ec9ef84515cc34abdc</digest>
        <digest algorithm="SHA-1" size="20"
                format="hex">6e09d8f73240cefcaf15167ce3749d8e99ecba63</digest>
        <digest algorithm="SHA-1" size="20" pos="1024"
                format="hex">59877ebbf5854b8ac798b46a7ab5fd80339eacd2</digest>
   </target>
</summary>

Im Gegensatz zu den GNU/BSD-Dateien richtet sich die Endung der Digester XML-Dateien nicht nach dem verwendeten Algorithmus, da dort beliebige Algorithmen parallel abgelegt werden können. Stattdessen lässt sich die Endung innerhalb der Digester-Software konfigurieren, standardmäßig wird die Endung .digest verwendet. Dort lässt sich z.B. auch die sonst für XML-Dateien typische Endung .xml eintragen.

Die DTD (Document Type Definition) des Digester XML-Formates finden Sie in Abschnitt DTD Digester-XML .

 

Weiterführende Links