Tips en Trucs 2020

Controlesom (Checksum)

Een controlesom (checksum) is een reeks cijfers en letters aangemaakt door een cryptografische hash functie losgelaten op een bestand. Je kunt het resultaat, de controlesom gebruiken om te controleren of een bestand echt, foutloos en niet gewijzigd is ten opzichte van het oorspronkelijke bronbestand. Voor een algemenere definitie, zie Wikipedia.

Een controlesom berekenen

De populairste Linux opdracht om een controlesom te berekenen is md5sum. De md5sum opdracht gebruikt het MD5 message-digest algoritme om een 128 bit hash waarde uit de inhoud van een bestand te berekenen

Om de md5sum controlesom van de tekst pindanet te berekenen, gebruik je de volgende opdracht:

dany@pindabook:~> echo -n pindanet | md5sum
dc1ba338b39f01f7dd88fe133362bf5e  -

De reeks letters en cijfers is de controlesom. Het koppelteken erachter staat voor standaard invoer (standard input: STDIN). Als je de controlesom van de inhoud van een bestand maakt, wordt het koppelteken vervangen door de bestandsnaam. We passen de te testen tekst aan door een hoofdletter te gebruiken:

dany@pindabook:~> echo -n Pindanet | md5sum
1081e2b824a0e59a52ff6e287145c51a  -

Zoals je kunt merken, krijgen we een totaal andere controlesom, zelf met een minimaal verschil.

De controlesom van de inhoud van een bestand

Voer daarvoor de md5sum opdracht uit met als optie een bestand:

dany@pindabook:~> md5sum datums.txt 
a424dfe81912a3919bd9591990a69674  datums.txt

Passen we het tekstbestand datums.txt aan door een hoofdletter te vervangen door een kleine letter. Daarna berekenen we opnieuw de controlesom:

dany@pindabook:~> md5sum datums.txt 
22bef6d6a87e3b6408e2bcc257455177  datums.txt

Opnieuw krijgen we door een kleine aanpassing een volledig andere controlesom. Zo valt een kleine aanpassing direct op.

Een hash algoritme kiezen

Om een controlesom aan te maken, heb je de mogelijkheid om te kiezen uit verschillende hash algoritmes (wiskundige formules). Elk hash algoritme heeft specifieke eigenschappen. Zo heeft MD5 enkele gedocumenteerde zwakke punten. De GNU Core Utilities, levert naast de md5sum opdracht nog andere controlesom opdrachten die gebruik maken van andere algoritmes en langere hash waarden (bevatten meer bits). Het gebruikte algoritme en de lengte van de hash waarde bepaald de sterkte, betrouwbaarheid van de controlesom. De volgende opdrachten werken gelijkaardig (of bijna) en zijn op de meeste Linux systemen standaard aanwezig:

SHA-256 (sha256sum) en SHA-512 (sha512sum) worden voor de meeste toepassingen aangeraden en worden over het algemeen als betrouwbaar beschouwd. Zo gebruikt openSUSE de sha256sum om de integriteit van de gedownloade installatie ISO-bestanden te controleren. Een SHA-256 controlesom van ons voorbeeldbestand bereken je met de opdracht:

dany@pindabook:~> sha256sum datums.txt 
aff20e3830954074989f72b099a873fc75452b3cf2d365620ba2726ac3ebbaef  datums.txt

En een SHA-512 controlesom:

dany@pindabook:~> sha512sum datums.txt 
45d74c47ad349336cab20a6f64d7b0a91b99c3ff9c98b16864914a217b09a23048b386c47201edb0bff340bf29ceff2fb360d0db3313b06ffe4b50ff45394767  datums.txt

Praktisch voorbeeld

Een praktisch voorbeeld is een controlesom om een gedownload bestand te controleren. Zo wil je bijvoorbeeld openSUSE installeren. Op de download pagina van openSUSE vinden we voor de netwerkinstallatie volgende informatie:
checksum

Met een klik op de koppeling Controlesom download je een tekstbestand met daarin de controlesom van de inhoud van het installatie ISO bestand. Het ISO installatiebestand zelf kan je via drie verschillende manieren downloaden, via een Metalink, Torrent of de klassieke download vanaf een Mirror server. Klik je op de knop Mirror selecteren, krijg je niet alleen een koppeling om het installatie ISO bestand te downloaden, maar ook verschillende controlesommen:
Mirrors

Na het downloaden van het ISO bestand, controleer je het ISO bestand met de opdracht:

dany@pindabook:~> sha256sum Downloads/openSUSE-Leap-15.2-NET-x86_64.iso 
02a77812443dd3e47c36611c8837bf8d1659aea6b4d16c9db6841c564d59b7af  Downloads/openSUSE-Leap-15.2-NET-x86_64.iso

En inderdaad, de controlesom komt overeen met de controlesom op de webpagina. Om de installatie op een computer te kunnen starten, moet je het ISO bestand op een DVD branden of op een USB-stick schrijven. Ook daarbij kunnen fouten optreden, een controle van het op een USB-stick geschreven ISO installatiebestand dringt zich op. Eerst bepalen we welke apparaatnaam de USB-stick kreeg. Bij het inpluggen van de USB-stick, wordt dit door het besturingssysteem opgemerkt. Dit kunnen we zichtbaar maken met de volgende opdracht:

dany@pindabook:~> dmesg -T
...
[di sep  1 19:24:59 2020] usb 1-2: new high-speed USB device number 8 using xhci_hcd
[di sep  1 19:24:59 2020] usb 1-2: New USB device found, idVendor=13fe, idProduct=3100, bcdDevice= 1.00
[di sep  1 19:24:59 2020] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[di sep  1 19:24:59 2020] usb 1-2: Product: USB DISK 2.0
[di sep  1 19:24:59 2020] usb 1-2: Manufacturer:         
[di sep  1 19:24:59 2020] usb 1-2: SerialNumber: 07A408027B5109AD
[di sep  1 19:25:00 2020] usb-storage 1-2:1.0: USB Mass Storage device detected
[di sep  1 19:25:00 2020] scsi host4: usb-storage 1-2:1.0
[di sep  1 19:25:00 2020] usbcore: registered new interface driver usb-storage
[di sep  1 19:25:00 2020] usbcore: registered new interface driver uas
[di sep  1 19:25:01 2020] scsi 4:0:0:0: Direct-Access              USB DISK 2.0     PMAP PQ: 0 ANSI: 0 CCS
[di sep  1 19:25:01 2020] sd 4:0:0:0: Attached scsi generic sg1 type 0
[di sep  1 19:25:03 2020] sd 4:0:0:0: [sdb] 7634944 512-byte logical blocks: (3.91 GB/3.64 GiB)
[di sep  1 19:25:03 2020] sd 4:0:0:0: [sdb] Write Protect is off
[di sep  1 19:25:03 2020] sd 4:0:0:0: [sdb] Mode Sense: 23 00 00 00
[di sep  1 19:25:03 2020] sd 4:0:0:0: [sdb] No Caching mode page found
[di sep  1 19:25:03 2020] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[di sep  1 19:25:03 2020]  sdb: sdb1
[di sep  1 19:25:03 2020] sd 4:0:0:0: [sdb] Attached SCSI removable disk
[di sep  1 19:26:18 2020]  sdb: sdb1 sdb2
...

Aan de hand van het tijdstip en de gebeurtenissen, kan ik afleiden dat de USB-stick de apparaatnaam sdb kreeg. Daarenboven staan de apparaten steeds in de map /dev/. De USB-stick is voor het besturingssysteem dus bereikbaar via het virtuele bestand /dev/sdb.

Om te bepalen hoeveel bytes naar de USB-stick (of DVD) werden geschreven, voer je de volgende opdracht uit:

dany@pindabook:~> ls -l Downloads/openSUSE-Leap-15.2-NET-x86_64.iso 
-rw-r--r-- 1 dany users 144703488  1 sep 19:08 Downloads/openSUSE-Leap-15.2-NET-x86_64.iso

Daaruit blijkt dat het installatie ISO bestand 144703488 bytes bevat. Met al deze gegevens kan ik nu de controlesom van de op USB-stick (of DVD) weggeschreven bytes bepalen, de head opdracht zorgt dat enkel de eerste 144703488 bytes op de USB-stick worden gebruikt om de controlesom te berekenen:

dany@pindabook:~> sudo head -c 144703488 /dev/sdb | sha256sum
[sudo] wachtwoord voor root: 
02a77812443dd3e47c36611c8837bf8d1659aea6b4d16c9db6841c564d59b7af  -

Deze opdracht kan meer tijd nodig hebben om de controlesom aan te maken. Dit is te wijten aan de transfersnelheid van de USB-stick. Het ISO installatiebestand werd correct naar de USB-stick geschreven en kan dus als installatiemedium gebruikt worden.