Wat zijn hashes?
Hashes zijn wiskundige formules die een reeks gegevens van variabele lengte bevatten, meestal in de vorm van tekst, en deze omzetten in kortere numerieke waarden met een vaste lengte. Hashes worden vaak gebruikt in computerdatabases om zoekopdrachten sneller en efficiënter te maken. Ze worden ook gebruikt in codering om ervoor te zorgen dat wachtwoorden niet worden aangetast en om digitale handtekeningen te authenticeren, naast andere toepassingen. Hashes worden ook wel hash-functies genoemd en kunnen ook worden beschouwd als algoritmen.
Hashes spelen een grote rol bij het faciliteren van database-zoekopdrachten. In een database die uit namen bestaat, bijvoorbeeld, als een gebruiker zoekt op "John Doe", moet de computer alle tekens in de zoekopdracht vergelijken met die van elk database-item. Elk teken in de naam zou 26 verschillende mogelijkheden hebben - de letters van het Engelse alfabet - terwijl de variabele lengte van de ingangen ook het zoeken zou vertragen.
Het gebruik van een hashfunctie daarentegen zou het leven van de computer veel gemakkelijker maken. Het veranderen van elke tekstreeks in een reeks getallen zou het zoeken vereenvoudigen, omdat de computer slechts tien mogelijkheden zou hebben om voor elk karakter te controleren: cijfers “0” tot “9.” De vaste lengte van de nummerreeks helpt de computer ook om zijn werk efficiënter.
In een database waarop een hashfunctie is toegepast, hebben alle vermeldingen een bijbehorend, uniek nummer. Dit wordt een hash-sleutel genoemd. In dit geval, wanneer u een zoekopdracht uitvoert, past de computer eerst de hash-functie toe op de invoer die u hebt geschreven, zoals "John Doe". Dit resulteert in een numerieke waarde, bijvoorbeeld "456789". De computer kan dan snel koppel dit resultaat aan de hash-toets die overeenkomt met de juiste invoer.
Hashes fungeren ook als digitale handtekeningen. Een afzender, Robert, wil bijvoorbeeld een document naar iemand verzenden en de ontvanger, Mary, wil ervoor zorgen dat er tijdens de route niet met het document is geknoeid. De afzender, Robert, hoeft het document alleen door een hash-functie te laten lopen, wat resulteert in een numerieke waarde. Robert codeert vervolgens de hash-sleutel en verzendt het document samen met de gecodeerde sleutel.
Mary ontvangt beide items en decodeert de hash-sleutel. Ze kan nu de numerieke waarde zien die het resultaat was van het document voordat het werd verzonden. Om te controleren of het document in haar handen exact hetzelfde is, voert ze het document uit via een hashfunctie op haar computer. Ten slotte vergelijkt ze beide sleutels. Als ze hetzelfde zijn, is het document niet gewijzigd op weg naar de ontvanger.
Er bestaan veel verschillende hash-functies, elk met hun eigen wiskundige formules. Om een hashfunctie te laten werken, moet elke botsing worden geminimaliseerd die optreedt wanneer twee database-items dezelfde hash-sleutel hebben. Hash-functies moeten ook eenrichtingsverkeer zijn. Dat betekent dat u een sleutel kunt maken uit een database-invoer of document, maar niet andersom. Met andere woorden, u kunt het originele document niet "reverse-engineeren" met de hash-toets.