Wat is een hashfunctie?
Een hashfunctie zet elke inhoud — een zin, een programma, een back-up van enkele gigabytes — om in een tekenreeks van vaste lengte, genaamd hashwaarde of digest. Drie eigenschappen bepalen haar: de uitvoer heeft altijd dezelfde grootte, ongeacht de invoer, dezelfde inhoud levert altijd dezelfde hashwaarde op, en teruggaan van hashwaarde naar invoer moet in de praktijk onmogelijk zijn. Dit derde punt onderscheidt een cryptografische hash van een controlesom zoals CRC32.
In de praktijk bepalen twee toepassingen het merendeel. Integriteit controleren : de uitgever publiceert de hash van zijn bestand, u herberekent die, en de gelijkheid bewijst dat de download niet is gewijzigd. Inhouden vergelijken : in plaats van de documenten zelf te bewaren, bewaart men hun hashwaarden — identiek betekent identieke inhoud, zonder iets over die inhoud prijs te geven.
Welk algoritme kiest u vandaag?
SHA-256 is het standaardantwoord: gestandaardiseerd door de NSA, daarna overal overgenomen, in elke taal geïmplementeerd, en zonder bekende botsing. SHA-512 is geschikt voor grote volumes wanneer de processor 64 bits breed is, en is op die architectuur vaak sneller dan zijn neef. SHA-384 brengt buiten een langere variant niets bijzonders. Voor het ondertekenen van een bericht met sleutel is de HMAC-SHA-256 de referentie: hij koppelt de geheime sleutel aan de hash, zodat alleen de bezitter van de sleutel dezelfde waarde kan produceren.
De MD5 en de SHA-1 blijven nuttig voor niet-gevoelige controles — een index, een cache, een duplicaatdetectie — waar snelheid meer telt dan weerstand. De CRC32, is daarentegen geen cryptografische hash: hij detecteert toevallige wijzigingen, maar een opzettelijke wijziging maakt men in enkele seconden.
Waarom gelden MD5 en SHA-1 als gekraakt?
Omdat onderzoekers voor elk ervan twee verschillende documenten met dezelfde hash hebben gemaakt. Bij MD5 dateert de demonstratie al van 2004; bij SHA-1 werd in 2017 een echte botsing geproduceerd onder de naam SHAttered. Eén botsing volstaat om een handtekening te kraken: als de aanvaller het document kiest en de uitgever het alleen maar hasht, kan hij een schijnbaar onschuldig document aanleveren dat in werkelijkheid een andere inhoud ondertekent. Daarom hebben TLS-certificaten, software-updates en pakkethandtekeningen deze algoritmen vaarwel gezegd.
Wat hashen niet doet
Hashen is niet versleutelen: een hash is per opzet onomkeerbaar, maar hij beschermt de inhoud niet door die onleesbaar te maken. Hashen versleutelt niets, vervangt noch TLS noch een versleutelingssleutel, en beschermt ook niet alleen een wachtwoord — dat is werk voor bcrypt, scrypt of Argon2, die opzet traag zijn. En twee keer hashen versterkt niets: algoritmen aan elkaar rijgen voegt alleen een kwetsbare laag toe waar één niet-gekraakte functie volstaat.
Aanbevolen voor
Systeembeheerders en CIO's die controlesommen van distributies controleren, ontwikkelaars die artefacten verzegelen of webhooks authenticeren, auditors en compliance-teams die de integriteit van back-ups controleren, journalisten en analisten die documenten vergelijken zonder ze te verspreiden, studenten cryptografie die werken met hashwaarde, botsing en zout — en iedereen die een inhoud wil hashen snel en spoorloos, aanvullend gevolgd door de wachtwoordgenerator, deBase64-encoder en -decoder, de JWT-decoder, de regex-tester en de tekenteller.