Het is zoiets als twee personen met exact dezelfde vingerafdruk: in de mensenwereld is dat nog nooit voorgekomen. Marc Stevens van het Centrum Wiskunde & Informatica en Elie Bursztein van Google hebben het nu gepresteerd om twee verschillende pdf-documenten te maken met dezelfde digitale vingerafdruk. Het is een waarschuwing voor bedrijven die hun online beveiligingssysteem niet hebben geüpgraded.
Iedere keer als je op internet naar een https-website gaat, komt in je browser een hele beveiligingsmachinerie in werking om ervoor te zorgen dat je niet op een nepsite met dezelfde naam terechtkomt. Inloggen met een wachtwoord, en eventueel op die website een betaling verrichten, activeert weer andere beveiligingstechnieken om te voorkomen dat hackers hun slag slaan. Voor websites en bedrijven die laks zijn geweest met het upgraden van een van die beveiligingen, SHA-1, is uitstel nu echt geen optie meer.
In een persbericht stelt Stevens: “Men zou lessen getrokken moeten hebben uit waarschuwingen voor een vergelijkbare aanval op de voorganger van SHA-1, MD5. In 2009 heeft een internationaal team waar ik ook in zat, op die manier een valse Certification Authority gecreëerd. Ook hebben bepaalde landen in 2012 kwaadaardige, nep-updates van Windows geïnstalleerd op computers in het Midden-Oosten, voor spionage.”
Digitale vingerafdruk
Deze zeer ernstige hacks berusten op het kraken van een basiselement van digitale beveiliging, namelijk de hashfunctie. Een hashfunctie maakt van een digitaal bestand met een willekeurige lengte een digitale vingerafdruk (de hash) met een vaste lengte. Er zijn maar een paar veelgebruikte hashfuncties; het project van Stevens en Bursztein richtte zich op SHA-1, dat van elk bestand een vingerafdruk van 160 bits (nullen en enen) maakt.
Om dataverkeer te kunnen beveiligen, moet elke hash uniek zijn: er mag maar één bestand zijn met precies deze hash. Dat wil zeggen: het moet in de praktijk onmogelijk zijn om een afwijkend bestand te maken dat dezelfde hash heeft. Als iemand toch twee bestanden met dezelfde hash kan vinden of maken, heet dat een collision (botsing).
En dat is precies wat Stevens en Bursztien gepresteerd hebben. Ze noemen hun project SHAttered (‘vernietigd’), en op de gelijknamige webpagina presenteren ze twee pdf-documenten die overduidelijk verschillend zijn, maar dezelfde SHA-1-hash hebben. Dat vernietigt inderdaad de veiligheid van SHA-1.
Botsingen
In principe heeft elke hashfunctie talloze collisions. Een hash bevat immers veel minder tekens dan het bestand zelf, dus voor die laatste zijn er veel meer combinaties van tekens mogelijk. Maar een goede hashfunctie maakt het heel moeilijk om zo’n collision te vinden in het gigantisch aantal mogelijke bestanden.
Als je in het wilde weg bestanden gaat hashen met SHA-1, moet je er zo’n 280 (ongeveer 1.000.000.000.000.000.000.000.000) proberen voordat je er twee met dezelfde hash treft. Dat is in de praktijk onmogelijk. Stevens en zijn team hoefden ‘maar’ 9.223.372.036.854.775.808 keer een hash uit te rekenen voordat het raak was. Dat vergt allerlei slimme trucs en 6500 jaar rekentijd (op een groot aantal parallel draaiende computers), maar dankzij de enorme computercapaciteit van Google was dat mogelijk.
Dat zou allemaal nog tot daar aan toe zijn, als deze collision eenmalig was, een buitenissig incident. Maar met de twee bestanden die hier ‘in botsing’ komen, hebben Stevens en collega’s nog een truc uitgehaald. De botsende bestanden fungeren als bestanddeel van een pdf-document met een plaatje (een jpeg-bestand) erin. Stevens: “Omdat onze botsing helemaal vooraan in het pdf-bestand en vooraan de jpeg zit, kan onze botsing gebruikt worden om allerlei botsende pdf’s te maken.”
Laatje
Hun slimme constructie vormt een pdf die als het ware een laatje heeft, waarin je een willekeurig bestand kan stoppen, zonder dat dit de hash verandert. Je kunt dus een huur- of koopcontract opstellen, de hash gebruiken als waarborg voor online beveiliging, en achteraf straffeloos alle bedragen veranderen.
Wil je dit zelf proberen? De groep heeft al een online SHA-1 collider gemaakt waarmee je met twee kleine jpeg-plaatjes naar keuze twee pdf’s met dezelfde hash produceert. Deze tool heeft nu nog beperkte mogelijkheden.
Maar met de bekendmaking dat SHA-1 gekraakt is, gaat een periode van 90 dagen in waarin ze, zoals het bonafide onderzoekers betaamt, enkele details van hun tool nog geheimhouden. Zo heeft in principe iedereen die nu nog SHA-1 gebruikt, de kans om zijn producten te upgraden naar SHA-2 of een andere nog wel betrouwbare hashfunctie.
Dit ben ik echt (niet)
Ook is het nu mogelijk, om SHA-1-beveiligingscertificaten voor https-websites te vervalsen. Zo’n certificaat is als het ware een garantie dat een website, zeg https://ditbenikecht.nl echt deze site is, en geen kopie door een hacker met een ander IP-adres. Je zou misschien denken dat zo’n certificaat – immers ook maar een digitaal bestand – net zo makkelijk te kopiëren is als de website zelf, maar dat is niet waar.
Certificaten worden namelijk uitgegeven via een soort piramidesysteem van websites die elkaars betrouwbaarheid garanderen (Certification Authorities) en dankzij een ingenieus systeem van publieke en geheime sleutels en hashes, is voor iedereen – dus ook jouw browser – te controleren dat er niet mee geknoeid is.
Al in 2011 ontraden
Maar dan moet de gebruikte hashfunctie wel veilig zijn. Het gebruik van SHA-1 is al in 2011 door het gezaghebbende NIST (National Institute of Standards and Technology) ontraden, omdat er toen op theoretische gronden twijfels waren over de onkraakbaarheid. Maar IT-bedrijven zijn zeer traag geweest in het upgraden van hun systemen naar het veel veiligere SHA-2. Zelfs nu worden door sommige certification authorities van laag niveau nog SHA-1-certificaten uitgegeven. Ook wordt volgens Stevens SHA-1 nog bij circa tien procent van de creditcardbetalingen gebruikt.
Upgraden naar SHA-2 is technisch geen probleem, maar het kost tijd en menskracht – dus geld – om je systemen bij te werken. Bedrijven die tot nu toe geen upgrade gedaan hebben, dachten blijkbaar dat het zo’n vaart niet zou lopen. Maar twee van de meestgebruikte browsers, Chrome en Firefox, accepteren per heden geen certificaten op basis van SHA-1 meer. Dit houdt in dat deze browsers je niet naar een https-website laten gaan als ze met zo’n certificaat beveiligd zijn – tenzij je een alarmerende waarschuwing negeert en klikt op ‘toch doorgaan’, of iets dergelijks. Wel iets om in de gaten te houden, als je bijvoorbeeld een webwinkel met SHA-1-certificaat hebt.