Dieses KommandoZeilenProgramm arbeitet in der Art der bekannten Utilities "md5sum" oder "sha1sum" - das heisst, fuer eine Liste von Dateien oder fuer stdin werden "Message-Digests" erstellt. Es stehen die Message-Digests MD5, SHA1 und SHA256 zur Verfuegung. (Spaeter gibt's vielleicht irgendwann auch SHA512.)
Der Unterschied zu den ueblichen Utilities dieser Art ist, dass vor der Erstellung der MDs die Messages mit einer "PassPhrase" geprefixed werden koennen. Der MD-Wert ist dann natuerlich ein anderer, und er kann nur mit der PassPhrase reproduziert werden.
Dieses Dokument ist kein LehrText fuer Hash-Algorithmen. Deshalb gibt es hier keine tiefgehenderen Erklärungen.
Diese Seite kann in FirmenNetze gespiegelt werden - damit erwirbt die betreffende Firma keinerlei Rechte an diesem Dokument. Das ist schon deshalb nicht möglich, weil der Code unter der GPL steht.
Ein paar Beispiele. Als BeispielsDateien verwenden wir die beiden Dateien hash1 und hash2, die am 17. August auf der Crypto 2004 vorgestellt wurden, und die denselben MD5-Message-Digest haben.
$ csum --md5sum hash1 hash2 a4c0d35c95a63a805915367dcfe6b751 hash1 a4c0d35c95a63a805915367dcfe6b751 hash2 $
zeigt die MD5-CheckSumme der beiden Dateien hash1 und hash2. Diese beiden Dateien sind von besonderem Interesse, da sie auf der Crypto 2004 am 17. August 2004 vorgestellt wurden als zwei unterschiedliche Dateien, die aber denselben MD5-Message-digest haben.
Die KomandoZeilenOption "--md5sum" anstatt "--md5" unterdrueckt die Warnung fuer ein fehlendes PassWort.
$ csum --sha1sum hash1 hash2 2783c4ff4a3f20d25f2598a8b052b890c37dcac4 hash1 3c35410823ef00b12d020981c1cf8564c0f89bcc hash2 $
zeigt die SHA1-CheckSumme der beiden Dateien hash1 und hash2. Obwohl die MD5-CheckSummen fuer diese Dateien gleich sind, ist das fuer SHA1 nicht mehr der Fall.
$ csum --sha256sum hash1 hash2 8e278f3ad99b4f78e7b27ce324b8f7c0b2813d8ae22a82b47ad7f4d3b2f5be09 hash1 642900cf972f2a11f7dfa5e792f879cf89a7c6db85844b8b99e765297eb4e5be hash2 $
zeigt die SHA256-CheckSumme der beiden Dateien hash1 und hash2.
Mit der PassPhrase ("qwertz") sieht das Ganze so aus:
$ csum --md5 -p qwertz hash1 hash2 0664c274fb342ced94f7bcc70f5f0e7b hash1 37375f6b912e1e5b414926c7a48b2353 hash2 $ csum --sha1 -p qwertz hash1 hash2 5a06a57fad5b8b1843c1f9d3c50e17365647bac4 hash1 e84631e05c5d3201a465d1d44e4bc5e8698762f2 hash2 $ csum --sha256 -p qwertz hash1 hash2 49222800ee312cfad668d4aee0cae1ead0268747ac36b8ad9c35fcaa745dc566 hash1 68f084ee3a1742045fee40dceb036725c14b551656f930a0c0afc11388f4660b hash2 $
Diese PassPhrase kann auch anders angegeben werden, etwa vermoege der Option "--ask-passphrase", die das Programm veranlasst, die PassPhrase interaktiv nachzufragen, oder auch etwa durch Environment-Variablen:
$ export CSUMPASS=qwertz $ csum --sha256 hash1 hash2 49222800ee312cfad668d4aee0cae1ead0268747ac36b8ad9c35fcaa745dc566 hash1 68f084ee3a1742045fee40dceb036725c14b551656f930a0c0afc11388f4660b hash2 $
Weitere Optionen beziehen sich auf einen help-Text ("-h" oder "--help"), Verbosity ("-v" oder "--verbose"), Debugging-Output ("-d" oder "--debug").
Das Pruefen gegen eine vorhandene Datei mit CheckSummen ("-c", faengt gerade an, zu funktionieren. In einer PruefDatei muss etwas drinstehen, was durch csum selbst erzeugt wurde:
$ csum -p DasRichtigePassWort --sha256 hash1 hash2 > pruefdatei.sha256c $ csum -p DasRichtigePassWort --sha256 -c pruefdatei.sha256c number of file matches = 2 $ csum -p DasFalschePassWort --sha256 -c pruefdatei.sha256c number of FILE MISSMATCHES! = 2 $
Mit der "--verbose" Option kann man sich fuer jede einzelne Datei das PruefErgebnis ausgeben lassen.
Das Programm ist noch in einem fruehen Stadium der Entwicklung. LizenzLage wie Open-Source.
Hier ist der Source-Code csum.c,
und das Linux-Binary csum, das sofort ablauffähig ist, wenn man mir traut.
und hier die beiden schon erwaehnten TestDateien von der Crypto 2004: hash1 und hash2
Zur Produktion: die eigentlichen Hash-Algorithmen sind gar nicht von mir, sondern
von den WebSeiten
http://www.cr0.net:8040/code/crypto/md5/
http://www.cr0.net:8040/code/crypto/sha1/
http://www.cr0.net:8040/code/crypto/sha256/
entnommen. Dieser Code steht auch unter der GPL.
Das notwendige "makefile" zur Produktion ist oben im csum.c angedeutet.