Hashing refererer til processen med at generere et output i fast størrelse fra et input af variabel størrelse. Dette gøres ved brug af matematiske formler kendt som hashfunktioner (implementeret som hashingalgoritmer).
Selvom ikke alle hashfunktioner involverer brugen af kryptografi, er de såkaldte kryptografiske hashfunktioner kernen i kryptovalutaer. Takket være dem er blockchains og andre distribuerede systemer i stand til at opnå betydelige niveauer af dataintegritet og sikkerhed.
Både konventionelle og kryptografiske hashfunktioner er deterministiske. At være deterministisk betyder, at så længe et input ikke ændres, vil hashingalgoritmen altid producere det samme output (også kendt som digest eller hash).
Typisk er hashingalgoritmerne for kryptovalutaer designet som envejsfunktioner, hvilket betyder, at de ikke let kan tilbageføres uden store mængder computertid og ressourcer. Med andre ord er det ret nemt at oprette output fra input, men relativt vanskeligt at gå i den modsatte retning (at generere input fra output alene). Generelt gælder det, at jo vanskeligere det er at finde input, jo mere sikker anses hashingalgoritmen for at være.
Hvordan fungerer en hashfunktion?
Forskellige hashfunktioner producerer output af forskellig størrelse, men de mulige outputstørrelser for hver hashingalgoritme er altid konstante. SHA-256-algoritmen kan f.eks. kun producere output på 256 bit, mens SHA-1 altid vil generere en digest på 160-bit.
For at illustrere det kan vi køre ordene "Binance" og "binance" gennem SHA-256 hashingalgoritmen (den, der bruges i bitcoin).
Bemærk, at en mindre ændring (størrelsen på det første bogstav) resulterede i en helt anden hashværdi. Men eftersom vi bruger SHA-256, vil outputtet altid have en fast størrelse på 256-bit (eller 64 tegn) – uanset inputstørrelsen. Det betyder heller ikke noget, hvor mange gange vi kører de to ord gennem algoritmen. De to output forbliver konstante.
Omvendt, hvis vi kører de samme input gennem SHA-1-hashingalgoritmen, vil vi have følgende resultater:
Akronymet SHA står for Secure Hash Algorithms. Det refererer til et sæt kryptografiske hashfunktioner, der inkluderer SHA-0- og SHA-1-algoritmerne sammen med SHA-2- og SHA-3-grupperne. SHA-256 er en del af SHA-2-gruppen sammen med SHA-512 og andre varianter. I øjeblikket betragtes kun SHA-2- og SHA-3-grupperne som sikre.
Hvorfor betyder de noget?
Konventionelle hashfunktioner har en bred vifte af use cases, herunder databaseopslag, analyser af store filer og datastyring. På den anden side bruges kryptografiske hashfunktioner i vid udstrækning i informationssikkerhedsapplikationer, såsom meddelelsesgodkendelse og digitalt fingeraftryk. Når det kommer til bitcoin, er kryptografiske hashfunktioner en væsentlig del af miningprocessen og spiller også en rolle i genereringen af nye adresser og nøgler.
Den virkelige kraft ved hashing kommer, når man beskæftiger sig med enorme mængder information. Man kan f.eks. køre en stor fil eller et datasæt gennem en hashfunktion og derefter bruge dens output til hurtigt at verificere nøjagtigheden og integriteten af dataene. Dette er muligt på grund af hashfunktionernes deterministiske karakter: Inputtet vil altid resultere i et forenklet, kondenseret output (hash). En sådan teknik fjerner behovet for at gemme og "huske" store mængder data.
Hashing er især nyttigt inden for rammerne af blockchain-teknologi. Bitcoin-blockchainen har flere operationer, der involverer hashing, hvoraf de fleste af dem er inden for mining. Faktisk er næsten alle kryptovalutaprotokoller afhængige af hashing for at tilknytte og kondensere grupper af transaktioner i blokke og også for at producere kryptografiske links mellem hver blok, hvilket på effektiv vis skaber en blockchain.
Kryptografiske hashfunktioner
Igen kan en hashfunktion, der anvender kryptografiske teknikker, defineres som en kryptografisk hashfunktion. Generelt kræver brud på en kryptografisk hashfunktion et utal af brute force-forsøg. For at en person kan "tilbageføre" en kryptografisk hashfunktion, skal denne gætte, hvad inputtet var ved forsøg og fejl, indtil det tilsvarende output produceres. Der er dog også mulighed for, at forskellige input producerer nøjagtigt det samme output, i hvilket tilfælde der opstår en "kollision".
Teknisk set skal en kryptografisk hashfunktion følge tre egenskaber for at blive betragtet som effektivt sikker. Vi kan beskrive dem som kollisionsmodstand, preimage-modstand og anden preimage-modstand.
Før vi ser nærmere på hver egenskab, så lad os opsummere deres logik i tre korte sætninger.
Kollisionsmodstand: umuligt at finde to forskellige input, der producerer den samme hash som output.
Preimage-modstand: umuligt at "tilbageføre" hashfunktionen (finde input fra et givet output).
Anden preimage-modstand: umuligt at finde noget andet input, der kolliderer med et specificeret input.
Kollisionsmodstand
Som nævnt sker der en kollision, når forskellige input producerer nøjagtig den samme hash. Således betragtes en hashfunktion som kollisionsbestandig indtil det øjeblik, nogen finder en kollision. Bemærk, at kollisioner altid vil eksistere for enhver hashfunktion, fordi de mulige input er uendelige, mens de mulige output er endelige.
Sagt på en anden måde er en hashfunktion kollisionssikker, når muligheden for at finde en kollision er så lav, at det ville kræve millioner af års beregninger. Så på trods af, at der ikke er nogen kollisionsfri hashfunktioner, er nogle af dem stærke nok til at blive betragtet som resistente (f.eks. SHA-256).
Blandt de forskellige SHA-algoritmer er SHA-0- og SHA-1-grupperne ikke længere sikre, fordi der er fundet kollisioner. I øjeblikket betragtes SHA-2- og SHA-3-grupperne som modstandsdygtige over for kollisioner.
Preimage-modstand
Egenskaben af preimage-modstand er relateret til begrebet envejsfunktioner. En hashfunktion betragtes som preimage-resistent, når der er en meget lav sandsynlighed for, at nogen finder det input, der genererede et bestemt output.
Bemærk, at denne egenskab er forskellig fra den forrige, fordi en hacker ville forsøge at gætte, hvad der var inputtet ved at se på et givet output. En kollision opstår derimod, når nogen finder to forskellige inputs, der genererer det samme output, men det betyder ikke noget, hvilke input der blev brugt.
Egenskaben ved preimage-modstand er værdifuld til beskyttelse af data, fordi en simpel hash af en besked kan bevise dens ægthed uden behov for at videregive oplysningerne. I praksis gemmer og bruger mange tjenesteudbydere og webapplikationer hashes genereret fra adgangskoder i stedet for adgangskoder i klartekst.
Anden preimage-modstand
For at forenkle tingene kan vi sige, at den anden preimage-modstand er et sted imellem de to andre egenskaber. Et andet preimage-angreb opstår, når nogen er i stand til at finde et specifikt input, der genererer det samme output af et andet input, som de allerede kender.
Med andre ord involverer et andet preimage-angreb at finde en kollision, men i stedet for at søge efter to tilfældige input, der genererer den samme hash, søger de efter et input, der genererer den samme hash, der blev genereret af et andet specifikt input.
Derfor er enhver hashfunktion, der er modstandsdygtig over for kollisioner, også modstandsdygtig over for angreb på et andet preimage, da sidstnævnte altid vil indebære en kollision. Man kan dog stadig udføre et preimage-angreb på en kollisionsbestandig funktion, da det indebærer at finde et enkelt input fra et enkelt output.
Mining
Der er mange trin i bitcoin-mining, der involverer hashfunktioner, såsom kontrol af saldi, sammenkædning af transaktionsinput og -output og hashingtransaktioner inden for en blok for at danne et Merkle Tree. Men én af hovedårsagerne til, at Bitcoin-blockchainen er sikker, er det faktum, at minere skal udføre et utal af hashingoperationer for til sidst at finde en gyldig løsning til den næste blok.
Specifikt skal en miner prøve flere forskellige input, når denne opretter en hashværdi for deres kandidatblok. I bund og grund vil de kun være i stand til at validere deres blok, hvis de genererer en outputhash, der starter med et bestemt antal nuller. Antallet af nuller er det, der bestemmer miningvanskeligheden, og den varierer alt efter den hashhastighed, der er afsat til netværket.
I dette tilfælde repræsenterer hashhastigheden, hvor meget computerkraft der investeres i bitcoin-mining. Hvis netværkets hashhastighed stiger, justerer Bitcoin-protokollen automatisk miningvanskeligheden, så den gennemsnitlige tid, der er nødvendig for at mine en blok, forbliver tæt på 10 minutter. I modsætning hertil, hvis flere minere beslutter at stoppe miningen, hvilket får hashhastigheden til at falde betydeligt, vil miningvanskeligheden blive justeret, hvilket gør det lettere at mine (indtil den gennemsnitlige bloktid kommer tilbage til 10 minutter).
Bemærk, at minere ikke behøver at finde kollisioner, fordi der er flere hashes, de kan generere som et gyldigt output (start af et bestemt antal nuller). Så der er flere mulige løsninger til en bestemt blok, og minere skal kun finde én af dem – i henhold til tærsklen bestemt af miningvanskeligheden.
Eftersom bitcoin-mining er en omkostningsintensiv opgave, har minere ingen grund til at snyde systemet, da det ville føre til betydelige økonomiske tab. Jo flere minere der slutter sig til en blockchain, jo større og stærkere bliver den.
Sammenfatning
Der er ingen tvivl om, at hashfunktioner er vigtige værktøjer inden for datalogi, især når man beskæftiger sig med enorme mængder data. Når hashingalgoritmer kombineres med kryptografi, kan de være ret alsidige og tilbyde sikkerhed og godkendelse på mange forskellige måder. Som sådan er kryptografiske hashfunktioner afgørende for næsten alle kryptovalutanetværk, så forståelse af deres egenskaber og arbejdsmekanismer er bestemt nyttigt for alle, der er interesseret i blockchain-teknologi.