8/11/2009

MD5 checksum checkt authenticiteit van bestand

Filed under: — cybrarian @ 1:05 am

Om te controleren of de inhoud van een bestand op een bepaalde plaats overeenkomt met die van een (vermoedelijke) kopie van dat bestand op een andere plaats gebruiken we de “checksum” methode. Daarbij wordt op een bestand een berekening gedaan die tot een controlegetal leidt. Dezelfde berekening op dat bestand moet terug dat controlegetal opleveren, en als het bestand over een aantal instanties doorgegeven wordt en op het einde wordt de berekening gedaan, kan vergeleken worden met het controlegetal dat via een andere weg aangekomen is. Het systeem is bruikbaar bij downloads, attachments enz.

Op lager niveau zijn eenvoudigere checksums mogelijk, bv het parity bit bij geheugen, maar het bekendste is de MD5 checksum die tot een vrij uniek (en dus ook redelijk groot) getal leidt (128 bits; hexadecimaal voorgesteld met letters en cijfers)

We kiezen eerst een stuk tekst om te “checksummen”:
echo ‘Hallo MD5’

Hallo MD5

We sturen het naar het checksum programma:
echo ‘Hallo MD5’|md5sum

152a9ab5f280c42a2c6b8221a04819d1 –

Of beter, zonder naar de volgende lijn te gaan:
echo -n ‘Hallo MD5’

Hallo MD5cyb@linux /Documents

(de command prompt plakt er dan aan)

Met pipe teken naar volgend commando sturen:
echo -n ‘Hallo MD5’|md5sum

40b84da420b35a488b388a8e86dfec7e

Het teken dat het einde van een lijn aangeeft telde dus mee voor de checksum!

We maken er een bestand van:
echo -n ‘Hallo MD5’ > hallo.txt

En berekenen er de checksum van:
md5sum hallo.txt

40b84da420b35a488b388a8e86dfec7e hallo.txt

(naam van het bestand wordt herhaald)

We maken een kopie van dat bestand:
cp hallo.txt vaarwel.txt

En daarvan de check:
md5sum vaarwel.txt

40b84da420b35a488b388a8e86dfec7e vaarwel.txt

Inderdaad exact hetzelfde. De md5sum gaat dus over de INHOUD van het bestand en niet over de bestandsnaam. Gevolg: als een download een andere naam krijgt omdat die met dezelfde naam al eens werd afgehaald, blijft de checksum toch kloppen.

We hebben nu twee bestanden waarvan we aannemen dat ze hetzelfde zijn, test met
md5sum hallo.txt vaarwel.txt

40b84da420b35a488b388a8e86dfec7e hallo.txt
40b84da420b35a488b388a8e86dfec7e vaarwel.txt

Onthouden is voor computers, dus we sturen het resultaat naar een bestand:

md5sum hallo.txt vaarwel.txt > checksum.md5
Bekijk de inhoud met cat checksum.md5

Testen of de checksums kloppen met de bestanden (alles staat in deze map)
md5sum -c checksum.md5

hallo.txt: OK
vaarwel.txt: OK

Om meer bestanden in een directory MapMetBestanden op te nemen in de checksum moeten we een combinatie van shell-commando’s gebruiken:

find MapMetBestanden
om door de directory MapMetBestanden te gaan
find MapMetBestanden -type f
vraagt alleen naar files te kijken
find MapMetBestanden -type f -print0
haalt de “naar volgende lijn” eruit (vgl -n boven) en zet “nul” teken
find MapMetBestanden -type f -print0 | md5sum
geeft slechts 1 checksum
find MapMetBestanden -type f -print0 | xargs -0 md5sum
bestanden scheiden op basis van nul-teken geeft terug alle afzonderlijke bestanden met checksum
find MapMetBestanden -type f -print0 | xargs -0 md5sum >> checksumdir.md5
bewaart de resulterende checksums in het bestand checksumdir.md5

Powered by WordPress