Grunnleggende om Cryptocurrency: Hashing Basics & History

En historie med hasj

En generisk hashfunksjon er en spesiell type programmeringsfunksjon som brukes til å kartlegge data av vilkårlig størrelse til data fra en fast størrelse. Hash-funksjoner stammer fra et behov for å komprimere data for å redusere mengden minne som kreves for å lagre store filer. Det mest brukte tilfellet for en hash-funksjon er for en annen spesifikk datastruktur kalt a hasjbord, som er mye brukt for rask dataoppslag. Hash-funksjoner hjelper med å øke hastigheten på en tabell eller databaseoppslag ved å oppdage to nøyaktig samme hashes.

De hjelper også med å minifisere koder for enorme filer som mp3, PDF eller bilder for å gjøre arbeidet med disse ganske store filtypene håndterbare. For rask identifisering er et viktig krav til hashfunksjoner at de sende en streng med alfanumeriske tegn i fast lengde.

Mens hovedårsaken til begynnelsen av en hash-funksjon kom fra et behov for å komprimere innhold, ble en sekundær fordel snart en stift for hashing: unike unike identifikatorer. Ideelt sett bør ikke to forskjellige meldinger returnere samme hasj når du hasher flere meldinger. To forskjellige hashmeldinger som resulterer i samme utgangshash kalles a kollisjon.

Fra et databasestyringsperspektiv vil dette bety at to forskjellige objekter ender opp med å bli lagret i samme celle – ikke noe bra hvis man ønsker å definere unike identifikatorer. Hvis vi vurderer en hashfunksjon med uendelige innganger (som betyr at vi kan hash hvilken som helst streng), kan vi utlede nøyaktig hvorfor kollisjoner faktisk er uunngåelig.

Pigeonhole-prinsippet

Innen kryptografisk matematikk finnes det et konsept som kalles duehull-prinsippet som sier at hvis vi passer inn (n) elementer i (m) mellomrom hvor n > m, da eksisterer det i prinsippet minst ett rom (m) okkupert av mer enn to elementer (n).

For eksempel sjekker fem individer strøkene sine i en av tre tilgjengelige kappekuber. Ettersom antall lagrede strøk (n) er større enn tilgjengelige kubbies (m), er det garantert at minst en cubby har mer enn ett strøk.

Vanligvis er programvareingeniører interessert i hashfunksjoner med en uendelig domene (det vil si at de tar som inputstrenger av alle mulige lengder) og a endelig rekkevidde. Igjen følger duhullsprinsippet, siden vårt område (n) er mindre enn vårt domene (m), følger det at kl minst en kollisjon må eksistere. En effektiv hash-funksjon ser derfor bare ut til å minimere antall kollisjoner – hvorfor dette betyr noe vil bli tydeligere om et øyeblikk, men for nå, la oss gå tilbake til historien om hasj.

Mens hash-funksjoner stammer strengt fra databasevedlikehold & ledelsesbehov som favoriserte hastighet fremfor alt, utviklet deres verktøy seg raskt. En spesiell gren av hash-funksjoner som favoriserte personvern, sikkerhet, & åpenhet kom snart inn i feltet; en gren av hashfunksjoner som vil forbli i fokus for denne artikkelen: kryptografiske hashingfunksjoner.

Kryptografisk hasj

Kryptografiske hashfunksjoner, som navnet treffende antyder, favoriserer bevaring av absolutt uforstyrrede meldinger. Mens minimering av kollisjoner er god praksis for andre hashfunksjoner, er minimering av kollisjoner en spesifikk kryptografisk funksjon krav. I stedet for å maksimere verktøyet for et raskt scenario eller tabelloppslagsscenario, er kryptografiske hashingfunksjoner bygget med et motstandsscenario i tankene: en der en kodebryter (kryptoanalytiker) aktivt prøver å forårsake en kollisjon. Vi definerer nå standard hash-funksjon notasjoner & etablere hash-funksjon prinsipper innenfor kryptografiperspektivet.

Hash funksjon notasjon

En generisk kryptografisk hashfunksjon har to innganger: meldingen den kommer til å komprimere eller hash (x) & en eller flere offentlige nøkler som representerer den faste lengden på vår hash i alfanumeriske tegn. Vårt hashresultat kalles meldingen fordøye eller bare fordøye (x *). Dette ser slik ut:


H (s, x) = x *

La oss glose over denne notasjonen ved å gå gjennom et eksempel fra virkeligheten, og hashing en streng ved hjelp av en tidligere standard hashing-funksjon MD5. Si at vi vil bruke MD5 til å hashe en “Hello World!” streng. Vi vet også at MD5 alltid sender ut en streng på 128 bits (0’er) & 1’s). Denne notasjonen vil se slik ut:

H (128, x) = ed076287532e86365e841e92bfc50d8c

Faktisk, hvis du går videre & prøv å gi MD5 hash-funksjonen “Hello World!” selv bør du se nøyaktig samme resulterende hash. Rått. La oss nå gå videre til å sette notasjonen for en kollisjon; i tillegg til tidligere variabler H, s, x, & x * introduserer vi nå en ny melding (x ’). Tallmessig oppstår en kollisjon når hashing to forskjellige meldinger (x & x ’) resulterer i nøyaktig samme meldingsfordøyelse (x *):

Hvis H (128, x) = H (128, x ’), sies vår hashfunksjon (H) å ha en kollisjon ved x & x ’.

Vi har nå satt notasjonen for den nåværende kjennetegnstandarden for hash-funksjonskryptografi; hvis en motstander mulig (beregningsmessig) kan forårsake en kollisjon, en hash-funksjon anses ikke lenger som praktisk sikker.

Avsluttende tanker til neste gang

Den siste matematiske definisjonen er der den fascinerende fangst-22 for hash-funksjonalitet lever. Hash-funksjoner stammer fra et behov for å komprimere & send ut standardiserte ensartede data for lagringskomfort, noe som betyr at de spytter ut pseudorandom strenger av en fast lengde. Likevel for å skape en helt kollisjonsbestandig hash-funksjon, vil hver eneste melding (x) måtte ha en hashutgang av samme lengde som inngangen. Uten hashes med en fast lengde mister vi evnen til å bruke dem som en praktisk datastruktur, men ved å tilordne en fast lengde, gjør vi hashfunksjonen vår ikke helt kollisjonsfri.

PS – Jeg er sikker på at noen av dere smarte informasjonskapsler la merke til at vi i vårt MD5-eksempel noterte en hash-funksjon som returnerer en lengdestreng 128, ennå vår “Hello World!” hash returnerte en 32 alfanumerisk tegnstreng. Kom tilbake neste gang & vi går dypere inn i hashfunksjoner for å forklare hvor denne forskjellen stammer.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map