Eerder vanavond heb ik op TV naar "Opgelicht" gekeken. Wat Erik Westhovens daarin suggereerde, namelijk dat het certificaat van
https://www.digid.nl/ SHA1 als hash-algoritme zou gebruiken, is onjuist. En los daarvan, voor zover bekend is SHA1 wel verzwakt, maar nog niet gekraakt (hoewel het gebruik ervan wordt afgeraden, stikt het nog van de certificaten die van SHA1 afhankelijk zijn qua veiligheid). Onderaan deze bijdrage een korte uitleg over hash-algoritmes.
Het DigiD certificaat is niet erg fraai, daar schrijf ik verderop wat over; eerst maar eens het SHA1 misverstand uit de wereld helpen. In Internet Explorer gebeurt iets vergelijkbaars (zie verderop). Gebruikmakend van Firefox (Engelstalig) klik je op het slotje. In het popup venstertje klik je op de knop onderaan: [More Information...]. In de "Page info" dialoogbox klik je op [View certificate].
Onderin de "Certificate Viewer" dialoogbox zie je:
SHA1 Fingerprint 1A:5A:44:84:80:D9:AA:84:C9:9B:7C:81:72:83:57:C6:04:3E:DC:5B
MD5 Fingerprint 21:40:5A:68:8C:CE:BB:B3:9C:A1:4B:EC:29:FB:0A:AC
Een weetje: de hierboven getoonde hashes maken geen onderdeel uit van het certificaat!Het
in het certificaat gebruikte hash-algoritme vind je door de "Details" tab te openen. Selecteer in de bovenste box "www.digid.nl" en in de onderste "Certificate Signature Algorithm". Daar zie je:
PKCS #1 SHA-256 With RSA Encryption
Dat betekent dat "QuoVadis CSP - PKI Overheid CA - G2" dit certificaat digitaal heeft ondertekend gebruik makend van het SHA-256 hash-algoritme en RSA asymmetrische versleuteling.
Fingerprints, Thumbprints en VingerafdrukkenHoe zit het dan met die "fingerprints" (ook aangeduid met "thumbprints", "vingerafdrukken", "message digests" of gewoon hashes)? Firefox
berekent deze
over het hele certificaat, voor je zodat je, bij onzekerheid over de
echtheid certificaat, bijv. de eigenaar kunt bellen en deze hashes mondeling vergelijken.
Dat Firefox hiervoor nog de
wel gekraakte MD5 en scheurtjes-vertonende SHA1 gebruikt is jammer. Aan de andere kant, het is ontzettend veel moeilijker om een vervalst exemplaar van zo'n klein bestandje als een certificaat te maken, zodanig dat er geen totale onzin in staat tewijl tegelijkertijd,
zowel de MD5-
als de SHA1 hash hetzelfde zijn.
BewijsNu hoef je mij niet te geloven; je kunt zelf controleren dat het zo werkt. Daarvoor heb je wel een programma nodig dat dergelijke cryptografische hashes kan berekenen. Via
https://www.security.nl/posting/406569/Tor-node+ontdekt+die+malware+aan+downloads+toevoegt#posting406594, achter "4)" vind je meer info over dat soort tools.
Gebruikmakend van Firefox gaat dat als volgt: open zoals boven beschreven de certificaat dialoogbox, en klik daarna op de "Details" tab.
Selecteer het onderste certificaat (www.digid.nl) en klik linksonder op de knop [Export...].
Open de onderste keuzebalk ("Save as type:) en kies voor het type:
X.509 Certificate (DER) *.der.
Sla het bestand op, bijv. op jouw bureaublad, als "www.digid.nl.der". Dat ".der" formaat is de meest compacte, binaire, representatie van het certificaat (dit is ook het formaat waarin de webserver dat certificaat via het internet naar jouw browser stuurt).
Gebruik vervolgens het gewenste tooltje om de cryptografische hash over dat bestand te berekenen. Bijvoorbeeld bij de "DigitalVolcano Hash Tool 1.1" gaat dat als volgt:
- Zorg dat je scherm verder leeg is
- Start het programma ("DigitalVolcano Hash Tool 1.1")
- Kies het gewenste "Hash Type"
- Sleep het certificaat, "www.digid.nl.der" (afhankelijk van de instellingen op jouw PC kan dit ook getoond worden als "www.digid.nl"), op het venster van "DigitalVolcano Hash Tool 1.1".
Als ik dat doe verschijnt:
1a5a448480d9aa84c99b7c81728357c6043edc5b,C:\Users\ErikvS\Desktop\www.digid.nl.der
Een paar zaken vallen op: soms worden bij getoonde hashes kleine- en soms hoofdletters gebruikt, en de "bytes" (elke twee karakters) worden soms door dubbele punten, soms door spaties en soms nergens door gescheiden. Dit wetende zie je dat het hier om dezelfde SHA1 hash gaat als Firefox toonde. Dit kunstje kun je nu ook nadoen met MD5.
Internet ExplorerMet Internet Explorer gebeurt iets vergelijkbaars. Ga naar
https://www.digid.nl/, klik op het slotje en klik onderaan op "View Certificates" (ook hiervan gebruik ik een Engelstalige versie, maar je snapt waarschijnlijk wel wat de NL vertaling hiervan is). In de "Certificate" dialoogbox open je de "Details" tab, en vervolgens scroll je met de scrollbalk helemaal naar beneden. Selecteer de onderste regel.
Op de onderste twee regels zie je dan staan:
Thumbprint algorithm sha1
Thumbprint 1a 5a 44 84 80 d9 aa 84 c9 9b...
In de box daaronder zie je de volledige "vingerafdruk":
1a 5a 44 84 80 d9 aa 84 c9 9b 7c 81 72 83 57 c6 04 3e dc 5b
(waarom Microsoft hier met een spatie begint is mij een raadsel).
Vraag: ik weet bijna zeker dat je vroeger, vanuit MSIE, certificaten kon opslaan. Ergens bij een update lijkt die functionaliteit te zijn verdwenen. Of droom ik, en heeft dit nooit gekund?
Nb. exact dezelfde dialoogbox zie je trouwens door op je desktop op het (vanuit Firefox) opgeslagen bestandje "www.digid.nl.der" te dubbel-klikken.
Ik
hoop dat Logius eerst iets aan RC4 doet voordat ze aan het certificaat gaat sleutelen! (zie
https://www.security.nl/posting/406116/https+lekjes%3A+DigiD%2C+KPN%2C+ABP%2C+SNS%2C+Triodos%2C+ASN).
Informatie in het DigiD certificaatOver het certificaat
zelf: Opnieuw gebruikmakend van Firefox, klik je op het slotje. In het popup venstertje verschijnt:
You are connected to
digid.nl
which is run by
(unknown)
Verified by: QuoVadis TrustLink BV
The connection to this website is secure.
Dat woord "(unknown)" wekt natuurlijk geen vertrouwen. Echter, voor zover ik weet doet Firefox dit bij alle "standaard" certificaten (ook bij Google, Facebook, Twitter etc. - en zelfs security.nl :)
Uitsluitend indien sprake is van een
EV (Extended Validation) certificaat, meestal aangeduid met groen, toont Firefox hier iets anders dan "(unknown)". Waarom de, qua cryptografie al vele jaren zeer sterke "PKI Overheid" certificaten, niet de kwalificatie
EV hebben, mag Joost weten (anderzijds betekent een EV-certificaat niet dat jouw browser uitsluitend met de site met dat EV-certificaat communiceert. In de achtergrond kan jouw browser, onzichtbaar, meerdere verbindingen met allerlei andere https sites opzetten, zonder dat je
daar de certificaten van kunt bekijken. Zo heel veel zegt zo'n EV certificaat dus ook weer niet).
Toch is er m.i.
wel iets mis met het certificaat van DigiD. En dat is de wijze waarop het "Subject" is ingevuld (ik heb dit eerder aangekaart onder "V1 Server-authenticatie in
https://www.security.nl/posting/406474/Website+naar+https%3F+%28voorbeeld%3A+Tweakers_net%29):
Is nu: Had moeten zijn:
-----------------------------------------
CN = www.digid.nl
OU = DigiD Logius
O = Logius Rijksoverheid
L = 's-Gravenhage
ST = Zuid-Holland
C = NL
-----------------------------------------
Wat is een (cryptografisch) hash-algoritmeKorte uitleg: een hash is een soort "checksum" waarbij het resultaat een vaste lengte heeft. Dit zou er als volgt uit kunnen zien: stel je wilt dat de hash altijd 4 cijfers lang is. Dan begin je met het getal 1000. Vervolgens tel je de waarde van elke byte uit het "te hashen" bestand hierbij op. Als het resultaat langer is dan 4 cijfers (dus groter is dan 9999) bewaar je slechts de meest rechtse 4 cijfers (de rest gooi je weg). Dit is een matige hash om onopzettelijke wijzigingen te detecteren, maar zelfs dan is het niet erg betrouwbaar. Als je in een tekstbestand twee letters van plaats verwisselt levert dat dezelfde hash op... Een goede
cryptografische hash zit wiskundig zo in elkaar dat het redelijkerwijs onmogelijk is om twee verschillende bestanden te vinden die dezelfde cryptografische hash opleveren.
Het resultaat van cryptografische hashes wordt (voor zover ik weet) altijd met een hexadecimaal getal weergegeven (naast de cijfers 0 t/m 9 worden ook de letters A t/m F gebruikt).
SHA1 is een cryptografisch hash-algoritme dat een hexadecimaal getal van 160 bits, dus 20 bytes, oplevert.
MD5 is 128 bits lang, 16 bytes dus.
MD5 is, voor de meeste toepassingen, gekraakt: zie bijv.
http://www.win.tue.nl/hashclash/rogue-ca/.