Hva er Hashing? [Steg-for-trinn-guide-under hette av Blockchain]

Så, hva som egentlig er hashing?

TLDR:

  1. Hashing genererer en verdi eller verdier fra en tekststreng ved hjelp av en matematisk funksjon.
  2. Hashing er en måte å muliggjøre sikkerhet under prosessen med overføring av meldinger når meldingen kun er ment for en bestemt mottaker. En formel genererer hash, noe som bidrar til å beskytte overføringssikkerheten mot manipulering.

Det er viktig å vite hvordan blockchain Hashing fungerer. For å gjøre det, må vi imidlertid først forstå et av hovedprinsippene som går inn i blockchain-opprettelsen. Blockchain-teknologien er en av de mest innovative og tidsbestemmende oppdagelsene i det siste århundret. Å se innflytelsen den har hatt de siste årene og hvilken innvirkning den vil ha i fremtiden, er det absolutt ikke en overdrivelse å si det. For å forstå hvordan forskjellige kryptovalutaer som Ethereum og Bitcoin fungerer.

 Så hva er hashing?

Enkelt sagt betyr hashing å ta en inputstreng av hvilken som helst lengde og gi ut en output med en fast lengde. I sammenheng med kryptovalutaer som bitcoin, blir transaksjonene tatt som input og kjørt gjennom en hashingalgoritme (bitcoin bruker SHA-256) som gir en utgang med fast lengde.

La oss se hvordan hasjprosessen fungerer. Vi skal legge inn visse innganger. For denne øvelsen skal vi bruke SHA-256 (Secure Hashing Algorithm 256).

Hva er Hashing? Under hetten på Blockchain

Som du kan se, i tilfelle SHA-256, uansett hvor stor eller liten inngangen din er, vil utgangen alltid ha en fast 256-bits lengde. Dette blir kritisk når du har å gjøre med en enorm mengde data og transaksjoner. Så i utgangspunktet, i stedet for å huske inngangsdataene som kan være enorme, kan du bare huske hasjen og holde oversikt. Før vi går videre, må vi først se de forskjellige egenskapene til hashing-funksjoner og hvordan de blir implementert i blockchain. 

Kryptografiske hashfunksjoner

En kryptografisk hashfunksjon er en spesiell klasse hashfunksjoner som har forskjellige egenskaper, noe som gjør den ideell for kryptografi. Det er visse egenskaper som en kryptografisk hashfunksjon må ha for å bli ansett som sikker. La oss løpe gjennom dem en etter en.

Eiendom 1: Deterministisk

Dette betyr at uansett hvor mange ganger du analyserer gjennom en bestemt inngang gjennom en hash-funksjon, vil du alltid få det samme resultatet. Dette er kritisk fordi hvis du får forskjellige hashes hver eneste gang, vil det være umulig å holde rede på innspillene.

Eiendom 2: Rask beregning

Hashfunksjonen skal være i stand til å returnere hash av inndata raskt. Hvis prosessen ikke er rask nok, vil systemet ganske enkelt ikke være effektivt.

Eiendom 3: Motstand mot forhåndsbilde

Hvilke motstandstilstander før bildet er at gitt H (A) er det umulig å bestemme A, hvor A er inngangen og H (A) er utgangshashen. Legg merke til bruken av ordet “uoppnåelig” i stedet for “umulig”. Vi vet allerede at det ikke er umulig å bestemme originalinngangen fra hash-verdien. La oss ta et eksempel.

Anta at du triller en terning og utgangen er hasj av tallet som kommer opp fra terningen. Hvordan vil du kunne bestemme hva det opprinnelige nummeret var? Det er enkelt alt du trenger å gjøre er å finne ut hasjene til alle tallene fra 1-6 og sammenligne. Siden hashfunksjoner er deterministiske, vil hasjen til en bestemt inngang alltid være den samme, slik at du ganske enkelt kan sammenligne hasjene og finne ut den originale inngangen..

Men dette fungerer bare når den angitte datamengden er veldig mindre. Hva skjer når du har enorme mengder data? Anta at du har å gjøre med en 128-biters hash. Den eneste metoden du trenger for å finne den originale inngangen, er å bruke “brute-force metode”. Brute-force-metoden betyr i utgangspunktet at du må plukke opp en tilfeldig inngang, hash den og deretter sammenligne utdataene med målet hash og gjenta til du finner en kamp.

Så, hva vil skje hvis du bruker denne metoden?

  • Beste tilfelle: Du får svaret ditt ved første forsøk selv. Du må seriøst være den heldigste personen i verden for at dette skal skje. Oddsen for at dette skjer er astronomisk.
  • I verste fall: Du får svaret etter 2 ^ 128 – 1 ganger. I utgangspunktet betyr det at du finner svaret ditt på slutten av alle dataene.
  • Gjennomsnittlig scenario: Du finner den et sted i midten, så i utgangspunktet etter 2 ^ 128/2 = 2 ^ 127 ganger. For å sette det i perspektiv, 2 ^ 127 = 1,7 X 10 ^ 38. Det er med andre ord et enormt antall.

Så selv om det er mulig å bryte motstanden før bildet via brute force-metoden, tar det så lang tid at det ikke betyr noe.

Eiendom 4: Små endringer i inngangen endrer hasj.

Selv om du gjør en liten endring i innspillene dine, vil endringene som vil gjenspeiles i hasjen være enorme. La oss teste det med SHA-256:

Hva er Hashing? Under hetten på Blockchain

Ser du det? Selv om du nettopp har endret saken i det første alfabetet i inngangen, se på hvor mye som har påvirket utgangshashen. Dette er en kritisk funksjon fordi denne egenskapen til hashing fører til en av blockchainens største egenskaper, dens uforanderlighet (mer om det senere.)

Eiendom 5: Kollisjonssikker

Gitt to forskjellige innganger A og B hvor H (A) og H (B) er deres respektive hashes, er det umulig for H (A) å være lik H (B). Hva det betyr er at for det meste vil hver inngang ha sin egen unike hash. Hvorfor sa vi “for det meste”? La oss snakke om et interessant konsept kalt “The Birthday Paradox”.

Hva er bursdagsparadokset?

Hvis du møter en tilfeldig fremmed ute på gatene, er sjansen veldig liten for dere begge å ha samme bursdag. Forutsatt at alle dager i året har samme sannsynlighet for å ha bursdag, er sjansen for at en annen person deler bursdagen din 1/365, som er 0,27%. Det er med andre ord veldig lavt.

Men når det er sagt, hvis du samler opp 20-30 personer i ett rom, stiger oddsen for to personer som deler nøyaktig samme bursdag astronomisk. Det er faktisk en sjanse på 50-50 for to personer som deler samme bursdag i dette scenariet!

Hva er Hashing? Under hetten på Blockchain

Bildekreditt: (YouTube)

Hvorfor skjer det? Det er på grunn av en enkel sannsynlighetsregel som går som følger. Anta at du har N forskjellige muligheter for en hendelse, så trenger du kvadratrot av N tilfeldige gjenstander for at de skal ha 50% sjanse for en kollisjon.

Så når du bruker denne teorien på bursdager, har du 365 forskjellige muligheter for bursdager, så du trenger bare Sqrt (365), som er ~ 23 ~, tilfeldig utvalgte personer for 50% sjanse for at to personer skal dele bursdager.

Hva er anvendelsen av dette i hashing?

Anta at du har en 128-biters hash som har 2 ^ 128 forskjellige muligheter. Ved å bruke bursdagsparadokset har du 50% sjanse til å bryte kollisjonsmotstanden på sqrt (2 ^ 128) = 2 ^ 64. forekomst.

Som du kan se, er det mye lettere å bryte kollisjonsmotstand enn å bryte preimage-motstand. Ingen hashfunksjon er kollisjonsfri, men det tar vanligvis så lang tid å finne en kollisjon. Så hvis du bruker en funksjon som SHA-256, er det trygt å anta at hvis H (A) = H (B) så A = B.

Eiendom 6: Puzzle Friendly

Dette er en fascinerende egenskap, og applikasjonen og virkningen som denne eiendommen har hatt på kryptovaluta er enorm (mer om det senere når vi dekker gruvedrift og kryptopuslespill). La oss først definere eiendommen, etter det vil vi gå gjennom hver periode i detalj.

For k hver utgang “Y”, hvis k er valgt fra en fordeling med høy min-entropi, er det umulig å finne en inngang x slik at H (k | x) = Y.

Det gikk sannsynligvis over hodet på deg! Men det er ok, la oss nå forstå hva denne definisjonen betyr.

Hva er betydningen av “høy min-entropi”?

Det betyr at fordelingen som verdien er valgt fra fordeles enormt så mye at vi velger en tilfeldig verdi har en ubetydelig sannsynlighet. I utgangspunktet, hvis du ble bedt om å velge et tall mellom 1 og 5, er det en lav min-entropifordeling. Men hvis du skulle velge et tall mellom 1 og en gazillion, er det en høy min-entropifordeling.

Hva betyr “k | x”?

“|” betegner sammenføyning. Sammenkjøring betyr å legge til to strenger sammen. F.eks. Hvis jeg skulle sammenkoble “BLÅ” og “SKY” sammen, blir resultatet “BLÅTT”.

Så la oss se gjennom definisjonen.

Anta at du har en utgangsverdi “Y”. Hvis du velger en tilfeldig verdi “k” fra en bred fordeling, er det umulig å finne en verdi X slik at hasjen til sammenkoblingen av k og x vil gi utdata Y.

Nok en gang, legg merke til ordet “uoppnåelig”, det er ikke umulig fordi folk gjør dette hele tiden. Faktisk fungerer hele prosessen med gruvedrift på dette (mer om det senere).

Eksempler på kryptografiske hashfunksjoner

  • MD 5: Den produserer en 128-biters hash. Kollisjonsmotstand ble brutt etter ~ 2 ^ 21 hasj.
  • SHA 1: Produserer en 160-bit hash. Kollisjonsmotstand brøt etter ~ 2 ^ 61 hasj.
  • SHA 256: Produserer en 256-biters hash. Dette brukes for tiden av bitcoin.
  • Keccak-256: Produserer en 256-bit hash og brukes for tiden av ethereum.

Hashing og datastrukturer

En datastruktur er en spesialisert måte å lagre data på. Det er to datastrukturegenskaper som er kritiske hvis du vil forstå hvordan en blockchain fungerer. De er:

  1. Pekere.
  2. Koblede lister.

Pekere

Pekere er variabler i programmeringen som lagrer adressen til en annen variabel. Vanligvis lagrer normale variabler i ethvert programmeringsspråk data.

F.eks. int a = 10, betyr at det er en variabel “a” som lagrer heltallverdier. I dette tilfellet lagrer den et heltall som er 10. Dette er en normal variabel.

Pekere lagrer imidlertid adresser til andre variabler i stedet for å lagre verdier. Derfor kalles de pekere, fordi de bokstavelig talt peker mot plasseringen av andre variabler.

Koblede lister

En koblet liste er en av de viktigste elementene i datastrukturer. Slik ser en lenket liste ut:

Hva er Hashing? Under hetten på Blockchain

Det er en sekvens av blokker, som hver inneholder data som er koblet til neste blokker via en peker. Pekervariabelen, i dette tilfellet, inneholder adressen til neste node i den, og dermed blir forbindelsen opprettet. Den siste noden, som du kan se, har en nullpeker som betyr at den ikke har noen verdi.

En viktig ting å merke seg her, pekeren inne i hver blokk inneholder adressen til neste blokk. Slik oppnås pekingen. Nå spør du kanskje hva betyr det for den første blokken i listen? Hvor holder pekeren til den første blokken?

Den første blokken kalles “genese-blokken”, og pekeren ligger ute i selve systemet. Det ser liksom slik ut:

Hva er Hashing? Under hetten på Blockchain

Bilde med tillatelse: Coursera

Hvis du lurer på hva “hashpekeren” betyr, kommer vi dit litt.

Som du kanskje har gjettet nå, er dette strukturen til blockchain basert på. En blockchain er i utgangspunktet en koblet liste. La oss se hvordan blockchain-strukturen ser ut:

Hva er Hashing? Under hetten på Blockchain

Blockchain er en koblet liste som inneholder data og en hash-peker som peker på sin forrige blokk, og dermed oppretter kjeden. Hva er en hashpeker? En hashpeker er lik en peker, men i stedet for bare å inneholde adressen til forrige blokk inneholder den også hash av dataene i den forrige blokken. Denne lille tilpasningen er det som gjør blockchains så utrolig pålitelige og banebrytende.

Se for deg dette et øyeblikk, en hacker angriper blokk 3 og prøver å endre dataene. På grunn av egenskapene til hashfunksjoner vil en liten endring i data endre hasjen drastisk. Dette betyr at eventuelle små endringer gjort i blokk 3, vil endre hasjen som er lagret i blokk 2, nå som igjen vil endre dataene og hasjen til blokk 2 som vil resultere i endringer i blokk 1 og så videre og så videre . Dette vil forandre kjeden fullstendig, noe som er umulig. Dette er nøyaktig hvordan blokkjeder oppnår uforanderlighet.

Så hvordan ser en blokkoverskrift ut?

Hva er Hashing? Under hetten på Blockchain

En blokkoverskrift inneholder:

  • Versjon: Blokkversjonsnummeret.
  • Tid: gjeldende tidsstempel.
  • Gjeldende vanskelighetsmål. (Mer om dette senere).
  • Hash av forrige blokk.
  • Nonce (mer om dette senere).
  • Hash av Merkle-roten.

Akkurat nå, la oss fokusere på Hash av Merkle Root. Men før det må vi forstå hva et Merkle Tree er.

Hva er et Merkle Tree?

Hva er Hashing? Under hetten på Blockchain

Bilde med tillatelse: Wikipedia

Ovenstående diagram viser hvordan et Merkle-tre ser ut. I et Merkle-tre er hver ikke-bladknute hasj av verdiene til deres barnodd.

Bladknutepunkt: Bladknutene er noder i det laveste nivået av treet. Så med diagrammet ovenfor vil bladnodene være L1, L2, L3 og L4.

Hva er Hashing? Under hetten på Blockchain

Child Nodes: For en node er nodene under dens nivå som mates inn i dens noder. Skrevet diagrammet, nodene merket “Hash 0-0” og “Hash 0-1” er undernodene til noden merket “Hash 0”.

Rotnode: Den ene noden på det høyeste nivået merket “Top Hash” er rotnoden.

Hva er Hashing? Under hetten på Blockchain

Så hva har et Merkle Tree med blokkjeder å gjøre?

Hver blokk inneholder tusenvis og tusenvis av transaksjoner. Det vil være veldig tidseffektivt å lagre alle dataene i hver blokk som en serie. Å gjøre det vil gjøre det å finne en bestemt transaksjon ekstremt tungvint og tidkrevende. Hvis du bruker et Merkle-tre, vil du imidlertid redusere tiden som kreves for å finne ut om en bestemt transaksjon hører hjemme i den blokken eller ikke..

La oss se dette i et eksempel. Vurder følgende Merkle-tre:

Hva er Hashing? Under hetten på Blockchain

Bilde med tillatelse: Coursera

Anta nå at jeg vil finne ut om disse spesifikke dataene hører til i blokken eller ikke:

Hva er Hashing? Under hetten på Blockchain

I stedet for å gå gjennom den tungvint prosessen med å se på hver enkelt hash og se om den tilhører dataene eller ikke, kan jeg ganske enkelt spore den ved å følge stien av hashes som fører opp til dataene:

Hva er Hashing? Under hetten på Blockchain

Å gjøre dette reduserer tiden det tar.

Hashing i gruvedrift: Kryptopuslene.

Når vi sier “gruvedrift”, betyr det i utgangspunktet å søke etter en ny blokk som skal legges til i blockchain. Gruvearbeidere fra hele verden jobber kontinuerlig med å sikre at kjeden fortsetter å vokse. Tidligere pleide det å være enkelt for folk å bryte med bare bærbare datamaskiner, men over tid begynte folk å danne gruvebassenger for å samle seg i datamaskinkrefter og gruve mer effektivt.

Dette kunne imidlertid ha vært et problem. Det er et tak for hver kryptovaluta, f.eks. for bitcoin er det bare 21 millioner. Det er bare 21 millioner bitcoins der ute. Hvis gruvearbeiderne får fortsette, i denne hastigheten, vil de fiske ut alle bitcoins som eksisterer. I tillegg må det være en spesifikk tidsbegrensning mellom opprettelsen av hver blokk. For bitcoin er tidsfristen mellom blokkeringen 10 minutter. Hvis blokkene fikk lov til å opprettes raskere, ville det resultere i:

  • Flere kollisjoner: Flere hashfunksjoner vil bli generert som uunngåelig vil føre til flere kollisjoner.
  • Flere foreldreløse blokker: Hvis mange gruvearbeidere er over gruvedrift, vil de komme med nye blokker samtidig. Dette vil føre til at eller flere blokker ikke blir en del av hovedkjeden og blir foreldreløse blokker.

Så, for å begrense blokkeringen, settes et spesifikt vanskelighetsnivå. Gruvedrift er som et spill, du løser puslespillet og får belønninger. Å sette vanskeligheter gjør det puslespillet mye vanskeligere å løse og dermed mer tidkrevende. WRT-bitcoins er vanskelighetsmålet en streng på 64 tegn (som er det samme som en SHA-256-utgang) som begynner med en haug med nuller. Et antall nuller øker når vanskelighetsgraden øker. Vanskelighetsnivået endres etter hver 2016. blokk.

Gruveprosessen

Merk: Vi vil først og fremst snakke om Bitcoin-gruvedrift her.

Når bitcoin mining-programvaren ønsker å legge til en ny blokk i blockchain, er dette prosedyren den følger. Hver gang en ny blokk ankommer, blir alt innholdet i blokkene først hasjet. Hvis hasjen er mindre enn vanskelighetsmålet, legges den til i blockchain og alle i samfunnet anerkjenner den nye blokken.

Det er imidlertid ikke så enkelt som det. Du må være ekstremt heldig å få en ny blokk akkurat slik. Dette er hvor nonce kommer inn. Nonce er en vilkårlig streng som er sammenkoblet med blokkens hash. Etter det hashes denne sammenkoblede strengen igjen og sammenlignes med vanskelighetsgraden. Hvis det ikke er mindre enn vanskelighetsgraden, endres nonce og dette fortsetter å gjenta en million ganger til endelig kravene er oppfylt. Når det skjer, blir blokken lagt til i blockchain.

Så for å oppsummere:

  • Hashet av innholdet i den nye blokken er tatt.
  • En nonce (tilfeldig streng) legges til hasjen.
  • Den nye strengen hashes igjen.
  • Den siste hasjen sammenlignes deretter med vanskelighetsgraden og sees om den faktisk er mindre enn det eller ikke.
  • Hvis ikke, endres nonce og prosessen gjentas igjen.
  • Hvis ja, blir blokken lagt til i kjeden, og hovedboken blir oppdatert og varslet om tillegget.
  • Gruvearbeiderne som er ansvarlige for dette blir belønnet med bitcoins.

Husker du eiendom nummer 6 av hash-funksjoner? Puslespillvennligheten?

For k hver utgang “Y”, hvis k er valgt fra en fordeling med høy min-entropi, er det umulig å finne en inngang x slik at H (k | x) = Y.

Så når det kommer til gruvedrift av bitcoin:

  • K = Nonce
  • x = hasj av blokken
  • Y = vanskelighetsmålet

Hele prosessen er helt tilfeldig, det er ingen tankeprosess bak valget av nonces. Det er bare ren brutskraft der programvaren fortsetter å tilfeldig generere strenger til de når målet sitt. Hele prosessen følger Proof Of Work-protokollen, som i utgangspunktet betyr:

  • Puslespillløsningen skal være vanskelig.
  • Å sjekke svaret skal imidlertid være enkelt for alle. Dette gjøres for å sikre at ingen underhåndede metoder ble brukt for å løse problemet.

Hva er hash rate?

Hash-hastighet betyr i utgangspunktet hvor raskt disse hasjoperasjonene foregår under gruvedrift. En høy hashrate betyr at flere mennesker og programvaremaskiner deltar i gruveprosessen, og som et resultat går systemet problemfritt. Hvis hashfrekvensen er for rask, økes vanskelighetsgraden. Hvis hashhastigheten blir for treg, reduseres vanskelighetsgraden.

Konklusjon- Hva er hasj?

Hashing har virkelig vært grunnleggende i etableringen av blockchain-teknologi. Hvis man vil forstå hva blockchain handler om, bør de definitivt forstå hva hashing betyr.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me