Op maandag 01 oktober 2001 23:10 schreef Wilson_Fisk het volgende:
Ik las een stukje over hashing maar er was bij mij een gedeelte niet geheel duidelijk;
als ik bijvoorbeeld een x aantal files heb waarvan er een y aantal dezelfde grootte hebben, zullen deze toch een verschillend "beeld"(beeld-ID) krijgen door middel van de erop toegepaste hash functie, in de veronderstelling zijnde dat alle y's verschillen (afgezien van de grootte dan).
Over het algemeen zal dit inderdaad zo zijn.
Is het dan aannemelijk dat de hash functie de inhoud van de files "beoordeeld" ?
Je bedoelt het waarschijnlijk goed

Een hash wordt berekend met behulp van de inhoud van een string. In dit geval is de inhoud van die string de inhoud van het bestand. Meestal geeft een hashing algoritme voor iedere string een hash met dezelfde lengte (onafhankelijk van de lengte van de string), of in ieder geval heeft iedere hash een beperkte lengte ten opzichte van mogelijke input strings.
Hieruit kun je direct al concluderen dat er niet voor iedere mogelijke input string een andere hash kan bestaan, aangezien de beperkte lengte van een hash minder waarden waarden mogelijk maakt. Hieruit volgt dus ook direct al dat hashing one-way is, je kunt aan een hash niet zien wat het origineel is, omdat er meerdere originelen met diezelfde hash bestaan. Hoe langer je de hashes maakt, hoe kleiner de kans dat je twee strings vindt met dezelfde hash (het gebruikte algoritme speelt in deze waarschijnlijkheid natuurlijk ook een rol).
Wanneer je een hash hebt en vervolgens exact dezelfde hash vindt voor een bepaalde string, kun je er bij een goed hashing algoritme dus redelijkerwijs vanuit gaan dat het origineel van de eerste hash gelijk was aan de string waar je de tweede hash van nam. Dit kan voor veel doeleinden gebruikt worden. Bijvoorbeeld in een communicatieprotocol als FTP of HTTP (ik weet niet of dat daar op die manier ook in gebruikt wordt), door na het verzenden van een bericht ook de hash van het bericht mee te sturen (deze is immers maar kort, dus geen probleem) waarna de ontvanger de hash berekent van het ontvangen bericht (volgens hetzelfde algoritme) en deze vergelijkt met de ontvangen hash. Op die manier kan de ontvanger controleren of het bericht foutloos doorgekomen is (in deze context spreken we ook wel van checksums). Vaak moet je dit nog wat gecompliceerder zien, bijvoorbeeld bij Compact Disc specificaties (daarop bevindt zich ook VEEL data voor foutcontrole en -correctie). Achter een hashing algoritme kan overigens een flinke portie wiskunde zitten.
Een ander voorbeeld is een 'hash table' die gebruikt wordt als index voor database records. Het opzoeken van een string in een database vergt erg veel tijd, maar het berekenen van een hash over die string niet (vervolgens verwijs je naar het record waar deze hash in de hash table aan gekoppeld is en je hebt je record gevonden).
E.G. 2 text files met exact dezelfde grootte maar verschillende inhoud, is het dan zo dat de ordening van de letters de cruciale faktor is?
Euh...
welke karakters (letters?) in
welke volgorde staan, daarop wordt dus een hash berekend.
Ik ga ervan uit dat de naam van de files er niet toe doen, want files met verschillende namen kunnen exact dezelfde beeld ID krijgen.
Ligt eraan hoe jij je hash functie toepast. De bestandsnaam meenemen in je berekening zal meestal niet zoveel nut hebben, want je wilt zien of de
inhoud van twee of meer bestanden overeen komt, niet de naam. Maar als je wilt kun je natuurlijk ook best iets met de bestandsnaam doen in je algoritme.
Wie kan hier meer duidelijkheid over geven...
Ik hoop dat bij deze enigszins gedaan te hebben, anders moet je nog maar even wat zoeken op het net, of in dit forum.
Nu ik er toch aan denk, hier zijn al enkele discussies geweest over 'de veiligheid' van een hash. Imho raakten deze discussies voor een groot deel kant noch wal, omdat een hash niet veilig of onveilig
kan zijn. Het ging men hier vooral om het gebruik van hashing in authenticatie systemen, of als manier om wachtwoorden 'op te slaan'. Dit kan zo veilig zijn als je zelf wilt, je systeem is niet veilig als je een bepaald hashing of encryptie algoritme gebruikt, maar als je deze op de juiste manier toepast. Daarvoor moet je wel eerst begrijpen wat een hash precies inhoudt, wat je van het algoritme kunt verwachten en vooral ook wat je er niet van kunt verwachten.
Er werd in deze threads ook veel geroepen over het onveilig zijn van hashes omdat ze 'zo te kraken' zouden zijn. Vaak werden beweringen op zo'n manier gedaan dat er geen nee en geen ja op geantwoord kon worden (en was ook gelijk duidelijk dat de spreker niet goed begreep wat je hebt aan een hashing algoritme

).
Als je meer wilt weten over de waarschijnlijkheid van het vinden van twee strings met dezelfde hash mbv een bepaald algoritme, of over het veilig of onveilig kunnen toepassen van hashes in bijvoorbeeld een authenticatie systeem, geef maar een gil, wellicht kan ik er nog iets zinnigs over zeggen (of iemand anders natuurlijk).