coldvinc, je beeld zit op enkele vlakken toch fundamenteel fout...
Beetje offtopic en nogal technisch, maar bon
coldvinc zei:
MD5 hasht twee dezelfde strings op dezelfde manier. Met andere woorden MD5 is niet collision resistant.
concreet voorbeeld:
De string "hello" gehasht door MD5 geeft "5d41402abc4b2a76b9719d911017c592", hoeveel keer je "hello" ook hasht het zal altijd "5d41402abc4b2a76b9719d911017c592" zijn.
Alle hashing functions hashen 2 strings op dezelfde manier. MD5, SHA1, SHA2, bij allen krijg je hetzelfde resultaat wanneer je dezelfde string als input van de functie gebruikt. Dat is noodzakelijk en fundamenteel, want het hele idee van cryptografische hashes te gebruiken steunt hierop.
Concreet voorbeeld: we gebruiken het (populaire) wachtwoord 1234
Gehasht met ... geeft dit ... :
MD5: 81dc9bdb52d04dc20036dbd8313ed055
SHA1: 7110eda4d09e062aa5e4a390b0a572ac0d2c0220
En dit elke keer weer.
En dat is dus fundamenteel omdat wachtwoorden niet worden opgeslagen, maar de hashes. Wanneer de gebruiker vervolgens opnieuw inlogt, wordt voor die gebruiker zijn wachtwoord gehashed en vergeleken met de opgeslagen hash. Hashes gelijk = gebruiker wordt ingelogd.
Stel dat een cryptografische functie niet hetzelfde resultaat zou geven voor dezelfde inputstring, is ze onbruikbaar om in te loggen.
Collisions zijn dan ook iets volledig anders. Het gaat niet om dezelfde string die hetzelfde resultaat geeft, maar 2 verschillende strings die dezelfde hash creëren. Hoe hoger de collision rate, hoe gevaarlijker. Je kan in principe een cryptografische functie uitvinden die 50% collision rate geeft (de output van de functie is bvb. 1 bit, 0 of 1) en dan heb je uiteraard direct iemands account "gehackt".
Je kan met MD5 ook perfect gaan salten en dynamisch salten. Op dat vlak is er geen verschil met SHA1 of 2. Het verschil zit in de sterkte van het algoritme. MD5 kan ondertussen gekraakt worden in een paar seconden en is dus gebroken, SHA-1 is theoretisch te breken (is de reden waarom SHA-2 nu wordt aangeraden), SHA-2 is nog niet gebroken.
Bij dynamische hashes krijg je dus ook weer gewoon dezelfde inputstring die gebruikt wordt als input voor je functie, en dezelfde outputstring.