Hva er hashing?
Innholdsfortegnelse
Hvordan fungerer en hash-funksjon?
Hvorfor er de viktige?
Kryptografiske hash-funksjoner
Mining
Avsluttende tanker
Hva er hashing?
Hjem
Artikler
Hva er hashing?

Hva er hashing?

Avansert
Publisert Jul 29, 2019Oppdatert Nov 18, 2022
7m

Hashing refererer til prosessen med å generere en utdata med fast størrelse fra en inndata av variabel størrelse. Dette gjøres ved bruk av matematiske formler som er kjent som hash-funksjoner (implementert som hashing-algoritmer). 

Ikke alle hash-funksjoner involverer bruk av kryptografi, men det er de såkalte kryptografiske hash-funksjonene som er kjernen i kryptovalutaer. Takket være dem kan blokkjeder og andre distribuerte systemer oppnå betydelige nivåer av dataintegritet og sikkerhet.

Både konvensjonelle og kryptografiske hash-funksjoner er deterministiske. Det at de er deterministiske, betyr at så lenge inndataene ikke endres, vil hashing-algoritmen alltid produsere de samme utdataene (også kjent som «digest» eller «hash»).

Vanligvis er hashing-algoritmene til kryptovalutaer laget som enveisfunksjoner, noe som betyr at det ikke er lett å snu dem uten store mengder beregningstid og -ressurser. Det er med andre ord ganske enkelt å lage utdataene fra inndataene, men relativt vanskelig å gå i motsatt retning (å generere inndata bare basert på utdata). Generelt er det slik at jo vanskeligere det er å finne inndataene, jo sikrere anses hashing-algoritmen for å være.


Hvordan fungerer en hash-funksjon?

Ulike hash-funksjoner produserer utdata med ulik størrelse, men den mulige utdatastørrelsen for hver hashing-algoritme er alltid konstant. For eksempel kan SHA-256-algoritmen bare produsere utdata på 256 bits, mens SHA-1 alltid genererer utdata på 160 bits.

For å illustrere det kan vi kjøre ordene «Binance» og «binance» gjennom SHA-256-hashing-algoritmen (den som brukes i Bitcoin).

SHA-256

Inndata

Utdata (256 bits)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Legg merke til at en liten endring (stor/liten forbokstav) resulterte i en helt annen hash-verdi. Men siden vi bruker SHA-256, har utdataene alltid en fast størrelse på 256 bits (dvs. 64 tegn) – uavhengig av størrelsen på inndataene. Og det spiller ingen rolle hvor mange ganger vi kjører de to ordene gjennom algoritmen – utdataene er konstante.

Hvis vi kjører de samme inndataene gjennom SHA-1-hashing-algoritmen, får vi følgende resultater:

SHA-1

Inndata

Utdata (160 bits)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Merk deg at forkortelsen SHA står for Secure Hash Algorithms (sikre hash-algoritmer). Det sikter til et sett med kryptografiske hash-funksjoner som inkluderer SHA-0- og SHA-1-algoritmene sammen med SHA-2- og SHA-3-gruppene. SHA-256 er en del av SHA-2-gruppen, sammen med SHA-512 og andre varianter. For tiden er det bare SHA-2- og SHA-3-gruppene som anses som sikre.


Hvorfor er de viktige?

Tradisjonelle hash-funksjoner har mange bruksområder, inkludert databaseoppslag, analyse av store filer og databehandling. Mens kryptografiske hash-funksjoner brukes mye innen informasjonssikkerhet, for eksempel meldingsautentisering og digitale fingeravtrykk. Når det gjelder Bitcoin, er kryptografiske hash-funksjoner en viktig del av mining-prosessen og spiller også en rolle i genereringen av nye adresser og nøkler.

Den virkelige kraften i hashing kommer når man jobber med enorme mengder informasjon. For eksempel kan man kjøre en stor fil eller et datasett gjennom en hash-funksjon og deretter bruke utdataene for raskt å verifisere nøyaktigheten og integriteten til dataene. Dette er mulig på grunn av den deterministiske måten hash-funksjoner er designet på: inndata resulterer alltid i en forenklet, komprimert utdata (hash). Denne teknikken fjerner behovet for å lagre og «huske» store datamengder.

Hashing er spesielt nyttig for blokkjedeteknologien. Bitcoin-blokkjeden har flere operasjoner som involverer hashing, og de fleste av dem innenfor prosessen med mining. Faktisk benytter nesten alle kryptovalutaprotokoller hashing for å koble og komprimere grupper av transaksjoner til blokker, og også for å produsere kryptografiske koblinger mellom hver blokk, noe som dermed skaper en blokkjede.


Kryptografiske hash-funksjoner

En hash-funksjon som benytter kryptografiske teknikker, kan som nevnt defineres som en kryptografisk hash-funksjon. For å knekke en kryptografisk hash-funksjon kreves det generelt en stor mengde forsøk med mye rå kraft. For at en person skal kunne «snu» en kryptografisk hash-funksjon, må vedkommende gjette hva inndata var, ved prøving og feiling helt til de tilsvarende utdataene blir produsert. Men det er også en mulighet for at forskjellige inndata produserer nøyaktig samme utdata, og da oppstår en «kollisjon».

Teknisk sett må en kryptografisk hash-funksjon ha tre egenskaper for å anses som sikker. Vi kan omtale disse som kollisjonsmotstand, førbildemotstand og sekundær førbildemotstand.

Før vi snakker om hver egenskap, kan vi oppsummere logikken bak dem i tre korte setninger.

  • Kollisjonsmotstand: umulig å finne to ulike inndata som produserer samme hash som utdata.

  • Førbildemotstand: umulig å «snu» hash-funksjonen (finne inndataene basert på gitte utdata).

  • Sekundær førbildemotstand: umulig å finne andre inndata som kolliderer med spesifiserte inndata.


Kollisjonsmotstand

Som nevnt oppstår det en kollisjon når forskjellige inndata produserer nøyaktig samme hash. Det vil si at en hash-funksjon anses som motstandsdyktig mot kollisjon inntil noen oppdager en kollisjon. Vær oppmerksom på at det alltid vil eksistere kollisjoner for alle hash-funksjoner fordi de mulige inndataene er uendelige, mens de mulige utdataene er begrenset.

Sagt på en annen måte har en hash-funksjon kollisjonsmotstand når muligheten for å finne en kollisjon er så lav at det krever millioner av år med beregninger. Så til tross for at ingen hash-funksjoner kan være helt kollisjonsfrie, er noen av dem sterke nok til å anses som motstandsdyktige (f.eks. SHA-256).

Av de ulike SHA-algoritmene er SHA-0- og SHA-1-gruppene ikke lenger sikre fordi det har blitt oppdaget kollisjoner. Foreløpig anses SHA-2- og SHA-3-gruppene som motstandsdyktige mot kollisjoner.


Førbildemotstand

Egenskapen førbildemotstand er relatert til konseptet med enveisfunksjoner. En hash-funksjon anses å ha førbildemotstand når det er veldig lav sannsynlighet for at noen finner inndataene som genererte bestemte utdata.

Merk at denne egenskapen er forskjellig fra den forrige fordi en angriper her prøver å gjette hva som var inndataene, ved å se på gitte utdata. En kollisjon, derimot, oppstår når noen finner to forskjellige inndata som genererer samme utdata, men det spiller ingen rolle hvilke inndata som ble brukt.

Egenskapen førbildemotstand er verdifull for å beskytte data fordi en enkel hash av en melding kan bevise autentisiteten uten å måtte avsløre informasjonen. I praksis lagrer og bruker mange tjenesteleverandører og nettapplikasjoner hasher som genereres fra passord, istedenfor selve passordene.


Sekundær førbildemotstand

For å gjøre det enkelt kan vi si at sekundær førbildemotstand befinner seg et sted mellom de to andre egenskapene. Et sekundært førbildeangrep oppstår når noen finner spesifikke inndata som genererer samme utdata, fra andre inndata som de allerede kjenner til.

Med andre ord innebærer et sekundært førbildeangrep å finne en kollisjon, men istedenfor å lete etter to tilfeldige inndata som genererer samme hash, søker de etter inndata som genererer den samme hashen som ble generert av andre spesifikke inndata.

Derfor er alle hash-funksjoner som er motstandsdyktige mot kollisjoner, også motstandsdyktige mot sekundært førbildeangrep, for sistnevnte innebærer alltid en kollisjon. Men det er fortsatt mulig å utføre et førbildeangrep på en funksjon som er motstandsdyktig mot kollisjoner, for det innebærer å finne én inndata fra én utdata.


Mining

Det er mange trinn i Bitcoin-mining som involverer hash-funksjoner, for eksempel å sjekke saldo, koble sammen inndata og utdata for transaksjoner og hashe transaksjoner innenfor en blokk for å danne et Merkle-tre. Men en av hovedårsakene til at Bitcoins blokkjede er sikker, er at minerne må utføre enormt mange hashing-operasjoner før de til slutt finner en gyldig løsning for neste blokk.

Konkret må mineren prøve flere forskjellige inndata når de oppretter en hash-verdi for kandidatblokken. Kort sagt kan de bare validere blokken sin hvis de genererer en utdata-hash som begynner med et visst antall nuller. Antall nuller er det som bestemmer vanskelighetsgraden på miningen, og den igjen varierer i henhold til hash-raten som er dedikert til nettverket.

I dette tilfellet representerer hash-raten hvor mye datakraft som investeres i Bitcoin-mining. Hvis nettverkets hash-rate øker, justerer Bitcoin-protokollen automatisk vanskelighetsgraden på miningen slik at den gjennomsnittlige tiden som trengs for mining av en blokk, holder seg rundt 10 minutter. Og motsatt: Hvis flere minere bestemmer seg for å slutte med mining, noe som får hash-raten til å synke betraktelig, blir vanskelighetsgraden på miningen justert, slik at miningen blir lettere (helt til den gjennomsnittlige blokktiden kommer tilbake til 10 minutter).

Det er verdt å merke seg at minerne ikke finner kollisjoner, for det er flere hasher de kan generere som gyldige utdata (starter med et visst antall nuller). Så det finnes flere mulige løsninger for en bestemt blokk, og minerne trenger bare å finne én av dem – basert på nivået som er bestemt av vanskelighetsgraden på miningen. 

Fordi Bitcoin-mining er en dyr prosess, har minerne ingen grunn til å prøve å lure systemet, for det vil føre til store økonomiske tap. Jo flere minere som blir med i en blokkjede, jo større og sterkere blir den.


Avsluttende tanker

Det er ingen tvil om at hash-funksjoner er viktige verktøy innen informatikk, spesielt når man jobber med enorme mengder data. Når hashing-algoritmer kombineres med kryptografi, kan de være ganske allsidige, og de tilbyr sikkerhet og autentisering på mange forskjellige måter. Derfor er kryptografiske hash-funksjoner viktige for nesten alle kryptovalutanettverk, så for alle som er interessert i blokkjedeteknologi, er det absolutt nyttig å forstå disse egenskapene og mekanismene.