Hash – Puzzle of Bitcoin


I forrige innlegg har vi forklart ideene bak Bitcoin-systemet, men ett spørsmål forble uforklarlig: Hva er dette blodige harde puslespillet som Bitcoin-gruvearbeiderne hele tiden prøver å løse?

Husk at i Bitcoin-systemet er gruvearbeiderne i kontinuerlig konkurranse: Den som løser puslespillet først, vil tjene æren av å legge en ny blokk til blokkjeden og tjene litt penger også. Derfor prøver gruvearbeiderne febrilsk å være de første til å løse gåten. I den følgende delen skal vi ta opp følgende spørsmål:

  • Hva er egentlig dette puslespillet?
  • Hvordan er det integrert i Bitcoin-systemet?

The Puzzle - A Cryptographic Hash Puzzle

Ikke vær redd for ordet 'kryptografi', i vår sammenheng betyr det ganske enkelt at 'hasj'-puslespillet er relatert til kryptografiens verden, dvs. å bygge uknuselige systemer.

Den beste virkelige analogien til et hasjpuslespill er kanskje et fingeravtrykk.

Fingeravtrykk på blå bakgrunn

Se for deg at du får en fingeravtrykkprøve, og du blir bedt om å oppdage høyden, vekten og det generelle utseendet til personen som dette fingeravtrykket tilhører. Hva ville du gjort?

For å gjøre det litt vanskeligere, antar du at det ikke er noen sammenheng mellom fingeravtrykk og andre menneskelige funksjoner (som hårfarge), så den eneste måten å teste om dette fingeravtrykket kom fra din beste venn, er å ta fingeravtrykket sitt og sammenligne det med det andre.

Det beste valget ditt, da, ville være å ta fingeravtrykk fra hver person på jorden og deretter sammenligne det med det aktuelle fingeravtrykket til du finner en fyrstikk og stopper. I tilfelle du er uheldig, ville den rette personen være den siste som du sjekket, noe som betyr at du fortsetter å lete etter ham de neste 13 555 årene, forutsatt at du sjekker en person per minutt (og jordens befolkning er omtrent 7,125 milliarder mennesker). Men hvis du er heldig, forventes det at du ser etter den personen bare halvparten av den tiden. Dårlige nyheter ah?

La oss gå tilbake til hasjpuslespillet vårt. I et hash-puslespill er fingeravtrykket du får en liste over tegn (la oss kalle det et ord), som "hund", hvoretter oppgaven din er å finne den rette personen (i vårt tilfelle er dette også et ord) som produserte fingeravtrykket. For å gjøre dette er det eneste du kan gjøre å prøve alle mulige kombinasjoner av sifre (av en viss lengde), én etter én.

krypto

(Bildekilde: https://blog.varonis.com/the-definitive-guide-to-cryptographic-hash-functions-part-1/)

Konseptuelt sett har du en maskin som hver gang du legger noen sifre i den, gir en utgang fra en annen kombinasjon av sifre. Du vet ingenting om denne maskinen, og den fungerer som magi - du ser ikke noen sammenheng mellom karakterene du legger inn og karakterene den produserer. Den eneste regelen du har observert, er at uansett hvor mange tegn du legger i maskinen, har den produserte effekten alltid samme lengde.

En liten teknikalitet: Tegnene som brukes av maskinen (både inndata og utdata) er bare sammensatt av de ti sifrene 0-9 og de seks bokstavene a-f. Dette betyr at hvert tegn på input eller output kan være ett av 16 tegn.

Puslespillet er egentlig et ord (liste over tegn), kall det A, som representerer maskinens utdata, for å løse det er oppgaven din å finne riktig input (et annet ord), kalle iti B, slik at når du legger B inn i maskinen vil du få A som utgang.

Begynn med en enkel sak, anta at maskinen produserer utganger med et enkelt tegn. Dette betyr at det bare er 16 forskjellige mulige utganger. Anta som et eksempel at du fikk tegnet ‘d’ (som puslespillet) og maskinen fungerer på en slik måte at hvert tegn som settes inn fører til et annet utputtet tegn. Så hvis du prøver alle mulige tegn 0-9 og a-f, vil du finne samsvaret, dvs. tegnet som når det settes inn i maskinen produserer tegnet ‘d’ som en utgang. Spesielt kreves det minst 16 sammenligninger for å være det helt sikker at en kamp blir funnet.

Hvis du kompliserer dette litt videre, kan du vurdere saken der maskinen produserer en utgang på 2 tegn i stedet for en, som i forrige eksempel. Dette betyr at det er 16X16 = 256 forskjellige mulige utganger. Så når du får et puslespill, for eksempel '4c', så må du prøve alle mulige innganger på 2 tegn (dvs. '00', '01' ... 'fd', 'fe', 'ff') for å garantere en suksess.

Vær oppmerksom på at å øke maskinens utgangslengde med et enkelt tegn øker antall forsøk du trenger å gjøre med en størrelsesorden (i vårt eksempel med en faktor på 16!). Dermed fører en utgang av et enkelt tegn til 16 forsøk, en utgang på 2 tegn fører til 256 forsøk, en utgang på 3 tegn fører til 4096 forsøk, og så videre.

Så, "hva er den store saken?", Kan man spørre. Datamaskiner går så raskt i disse dager, du kan bygge en programvare som vil beregne alle prøvene for deg på få sekunder!

Vel, du har kanskje lagt merke til at antall forsøk vokser i en eksponentiell vei! Dette betyr at for en utgang på x tegn, må du lage x16trials! For en utgang på 40 tegn må du gjøre 1461501637330902918203684832716283019655932542976 forsøk !! Dette tallet er så enormt at ingen moderne datamaskiner kan utføre dette antallet forsøk, selv om det fungerer konstant inntil solsystemets kollaps.

Hvis du fremdeles ikke er overbevist om at hash-puslespillet er vanskelig, kan det være lurt å prøve det og finne løsningen på følgende puslespill: Finn en liste over tegn som når du legger den gjennom SHA1-maskinen får du en utdata av alle null tegn (det vil si '000000 ...'). Maskinen er tilgjengelig på sha1-online.com. Lykke til ��

Forbindelsen til Bitcoin

Husk (fra forrige innlegg) at på hver kort tid (vanligvis 10 minutter) blir en enkelt ‘blokk’ lagt til ‘blokkeringskjeden’ av en enkelt ‘gruvearbeider’ (vinner av runden). Den gruvearbeideren, som legger den blokken til, er den første som fant en løsning på hasjpuslespillet. For å forstå dette puslespillet må vi vite hvordan ser en blokk ut. Detaljer følger.

Kort fortalt er en blokk i blokkjeden noen datastruktur som inneholder:

  1. En mangel på dette, dette er kjernen i løsningen, den delen av blokken som gir gruvearbeideren transaksjonsgebyret.
  2. En referanse til forrige blokk - dette er nødvendig for å kunne spore historien til alle transaksjoner, hver blokk refererer forgjengeren, på denne måten kan man gå tilbake i historikken til den første blokken (Du kan spore transaksjonshistorikken på blockchain .info)
  3. En liste over alle transaksjoner som skal behandles hvis denne blokken legges til blokkeringskjeden.

I figuren nedenfor kan du se disse tre egenskapene: nonce (i den siste gula raden), referansen ('forrige blokk hash'), og listen over transaksjoner i gråtonede rader (den markerte høyre siden av figuren er forklart snart).

blokkdiagram-ghash

(bildekilde: http://www.righto.com/2014/09/mining-bitcoin-med-pencil-and-paper.html)

Som nevnt leter gruvearbeiderne etter riktig mangel som ville løse gåten. Det hash-puslespillet som ble beskrevet i forrige spørsmål, var en spesifikk liste over tegn som maskinen har produsert som en utgang, for å løse den trenger man å finne en inngang som produserer dette spesifikk produksjon.

I bitcoin-systemet er imidlertid hash-puslespillet noe enklere: I stedet for å jage etter en spesifikk utgang, trenger gruvearbeideren å finne en inngang som produserer en utgang fra et stort sett med tillatte utganger. Det vil si at et puslespill kan være en liste over tegn slik at de første 16 tegnene er ‘0’ mens det ikke er noen begrensning for resten av karakterene, de kan være hva som helst. Selv om dette gjør puslespillet mye enklere, er det et tid- og energikrevende problem å løse. I figuren over utfører gruvearbeideren mange forsøk for å løse puslespillet. Det eneste feltet som er tillatt å endres i hver prøve er mangelen. I hver prøve kombinerer gruvearbeideren ikke-bruddet som den nettopp valgte, listen over transaksjoner som den ønsket å legge til blokkjeden og referansen til den forrige blokken sammen, og deretter lagt den inn til SHA1-maskinen. Hvis utgangen fra SHA1-maskinen begynner med 16 ‘0’ tegn, løste den puslespillet og vant spillet.

Håper du likte å lese, ses i neste innlegg!

Brayan Jackson
Brayan Jackson Administrator
Sorry! The Author has not filled his profile.
follow me