vrijdag 4 mei 2012

"Hashing.." wat zeg je?

Een veelgebruikte term in de cryptografie is het 'hashen". Het is in principe het omzetten van een tekst naar een zogeheten "hash" die niet omkeerbaar is. Het is geen versleuteling. Het is een wiskundige berekening die een bepaalde tekenreeks teruggeeft. De volgende uitgangspunten zijn belangrijk:
  • De hash veranderd als er wijzigingen in de tekst plaats vinden
  • Een andere tekst mag niet dezelfde hash opleveren.

Het wordt onder andere gebruikt in het ondertekenen van e-mail of documenten. Ook wordt hashing veel gebruikt voor het veilig opslaan van wachtwoorden. De daadwerkelijke controle is dan niet dat het ingetypte wachtword gelijk is aan het opgeslagen wachtwoord, maar of de hash van het ingetypte wachtwoord gelijk is aan de opgeslagen hash van het wachtwoord. Vooral daarbij is het is het belangrijk dat een andere tekst niet dezelfde hash mag opleveren. Anders kan een systeem iemand toelaten (omdat de hash overeenkomt met wat er opgeslagen is) terwijl er een foutief wachtwoord is ingevuld. Dit heet een hash-collision.



Bij het ondertekenen van een e-mail wordt er nooit een asymmetrische versleuteling over de e-mail zelf gedaan, dat zou veel te veel tijd in beslag nemen bij grotere e-mails. Wat er in weze gebeurt is dat er een hash van de tekst wordt berekend. Deze hash wordt dan versleuteld met de sleutel van de verzender.
Als er nu een wijziging onderweg plaats vindt op de tekst, dan zal tijdens de controle de nieuwe hash niet meer overeen komen met de originele hash (welke bij ondertekening wordt toegevoegd) en weten we dat de ondertekening vals is.

Dit zelfde principe wordt ook gebruikt bij het ondertekenen van certificaten. Vroeger werden de meeste certificaten voorzien van een MD5 (Message Digest 5) hash. Deze hash leverde een tekenreeks van 32 karakters. Gezien het aantal hash-collisions met MD5 is dit niet meer aan te raden. Een logische opvolger was SHA1 (Secure Hashing Algoritm) die een tekenreeks van 40 karakters geeft. Hoe hoger het aantal karakters, hoe kleiner de kans is op een hash-collision. Maar - zoals altijd - zit er een addertje onder het gras. Het maken (en dus ook het controleren) van een goede hash kost veel tijd. Hoe groot dit verschil is tussen de verschillende algoritmes wil ik in een later stadium proberen te meten.

Maar hoe zien deze hashes er nou uit.


Hiervoor heb ik een kleine applicatie gemaakt. Die je precies het verschil tussen de verschillende hash algoritmes laat zien. Het is een applicatie die bedoeld is voor het demonstreren van het hashing concept.



Wanneer de tekst in het inputvenster wordt aangepast, worden alle onderstaande hashes realtime aangepast.
De applicatie is overigens hier te downloaden: http://dl.dropbox.com/u/16978891/HashDemonstrator.zip

Mocht je de zipfile niet vertrouwen, haal hem gerust door een online virusscanner zoals http://virusscan.jotti.org/en

Indien je geïnteresseerd bent in de source-code, neem dan even contact op, of laat een berichtje achter.

Geen opmerkingen:

Een reactie posten