Hash – The Puzzle of Bitcoin


I det föregående inlägget har vi förklarat idéerna bakom Bitcoin-systemet, men en fråga förblev oförklarlig: Vad är detta blodiga hårda pussel som Bitcoin gruvarbetarna hela tiden försöker lösa?

Kom ihåg att gruvarbetarna i Bitcoin-systemet är i ständig konkurrens: Den som löser pusslet först kommer att få eran att lägga till ett nytt block i blockkedjan och tjäna lite pengar också. Därför försöker gruvarbetarna värmt att vara de första att lösa pusslet. I följande avsnitt kommer vi att ta upp följande frågor:

  • Vad exakt är detta pussel?
  • Hur är det integrerat i Bitcoin-systemet?

The Puzzle - A Cryptographic Hash Puzzle

Var inte rädd för ordet "kryptering", i vårt sammanhang betyder det helt enkelt att "hash" -pusslet är relaterat till kryptografiens värld, dvs att bygga obrytbara system.

Kanske är den bästa verkliga analogien till ett hashpussel ett fingeravtryck.

Fingeravtryck på blå bakgrund

Föreställ dig att du får ett fingeravtrycksprov och du ombeds upptäcka höjden, vikten och det övergripande utseendet på den person som detta fingeravtryck tillhör. Vad skulle du göra?

För att göra det lite svårare, antar att det inte finns något samband mellan fingeravtryck och andra mänskliga funktioner (som hårfärg), så det enda sättet att testa om detta fingeravtryck kom från din bästa vän är att ta sitt fingeravtryck och jämföra det med det andra.

Ditt bästa val skulle då vara att ta fingeravtryck från varje person på jorden och sedan jämföra det med fingeravtrycket i fråga tills du hittar en match och stopp. Om du är olycklig skulle rätt person vara den sista som du kontrollerade, vilket innebär att du kommer att fortsätta leta efter honom de närmaste 13 555 åren, förutsatt att du kontrollerar en person per minut (och jordens befolkning är cirka 7,125 miljarder människor). Men om du har tur är du förväntad att leta efter den personen bara hälften av den tiden, okej! Dåliga nyheter ah?

Låt oss gå tillbaka till vårt hashpussel. I ett hashpussel är fingeravtrycket du får en lista med tecken (låt oss kalla det ett ord), som "hund", varefter din uppgift är att hitta rätt person (i vårt fall är detta också ett ord) som producerade fingeravtrycket. Därför är det enda du kan göra att prova alla möjliga kombinationer av siffror (av viss längd), en efter en.

crypto

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

Konceptuellt sett har du en maskin som varje gång du lägger några siffror i den ger en utgång från någon annan kombination av siffror. Du vet ingenting om den här maskinen och den fungerar som magi - du ser inte någon korrelation mellan karaktärerna som du lägger in och karaktärerna som den producerar. Den enda regeln som du har observerat är att oavsett hur många tecken du placerar i maskinen har den producerade utmatningen alltid samma längd.

En liten teknik: De tecken som används av maskinen (både din ingång och dess utgång) består bara av de tio siffrorna 0-9 och de sex bokstäverna a-f. Detta innebär att varje tecken på ingången eller utgången kan vara en av 16 tecken.

Pusslet är i huvudsak ett ord (lista med tecken), kalla det A, som representerar maskinens utgång, för att lösa det är din uppgift att hitta rätt ingång (ett annat ord), kalla iti B, så att när du sätter B i maskinen får du A som utgång.

Börja med ett enkelt fall, anta att maskinen producerar utgångar med ett enda tecken. Detta innebär att det bara finns 16 olika möjliga utgångar. Anta som ett exempel att du fick karaktären 'd' (som pussel) och maskinen fungerar på ett sådant sätt att varje karaktär som sätts in leder till ett annat utmatat karaktär. Således, om du försöker alla möjliga tecken 0-9 och a-f hittar du matchen, dvs det tecken som när det sätts in i maskinen producerar tecknet 'd' som en utgång. I synnerhet krävs minst 16 jämförelser för att vara det helt säker att en match hittas.

Komplicera detta lite ytterligare, överväga fallet där maskinen producerar en utgång på 2 tecken istället för en enda, som i föregående exempel. Detta innebär att det finns 16X16 = 256 olika möjliga utgångar. Så när du får ett pussel, till exempel '4c', måste du prova alla möjliga ingångar på 2 tecken (dvs. '00', '01' ... 'fd', 'fe', 'ff') för att garantera en succé.

Observera att ökning av maskinens utgångslängd med ett enda tecken ökar antalet försök du behöver göra med en storleksordning (i vårt exempel med en faktor 16!). Således leder en utgång av ett enda tecken till 16 försök, en utgång på 2 tecken leder till 256 försök, en utgång på 3 tecken leder till 4096 försök, och så vidare.

Så, "vad är den stora saken?" Kan man fråga. Datorer är så snabba i dag, du kan bygga en mjukvara som beräknar alla tester för dig på några sekunder!

Du kanske har lagt märke till att antalet försök ökar i ett exponentiell sätt! Detta innebär att för en utgång på x tecken måste du göra x16trials! För en utgång på 40 tecken måste du göra 1461501637330902918203684832716283019655932542976 försök !! Detta nummer är så enormt att ingen modern dator kan göra detta antal försök även om det fungerar ständigt tills solsystemets kollaps.

Om du fortfarande inte är övertygad om att hash-pusslet är svårt, kanske du vill prova det och hitta lösningen på följande pussel: Hitta en lista med tecken som när du lägger det genom SHA1-maskinen får du en utgång av alla noll tecken (det är '000000 ...'). Maskinen finns på sha1-online.com. Lycka till ��

Anslutningen till Bitcoin

Kom ihåg (från föregående inlägg) att på varje kort tid (vanligtvis 10 minuter) läggs ett enda "block" till "blockkedjan" av en enda "gruvarbetare" (rundans vinodlare). Den gruvarbetare, som lägger till det blocket, är den första som hittade en lösning på hashpusslet. För att förstå detta pussel måste vi veta hur ser ett block ut. Detaljer följer.

I korthet är ett block i blockkedjan en viss datastruktur som innehåller:

  1. Icke desto mindre är detta lösningens kärna, den del av blocket som ger gruvarbetaren transaktionsavgiften.
  2. En referens till föregående block - detta krävs för att kunna spåra historiken för alla transaktioner, varje block hänvisar till sin föregångare, på så sätt kan man gå tillbaka i historiken till det första blocket (Du kan spåra transaktionshistoriken på blockchain .info)
  3. En lista över alla transaktioner som ska behandlas om detta block läggs till i blockkedjan.

I figuren nedan ser du dessa tre egenskaper: nonce (i den sista gulade raden), referensen ('föregående block hash') och listan över transaktioner i gråa rader (den markerade högra sidan av figuren förklaras snart).

blockschema-ghash

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

Som nämnts letar gruvarbetarna efter den rätta bristen som skulle lösa pusslet. Det hashpusslet som beskrivs i föregående fråga var en specifik lista över tecken som maskinen har producerat som en utgång, för att lösa den måste man hitta en ingång som producerar detta specifik produktion.

I bitcoin-systemet är dock hashpusslet något lättare: I stället för att jaga efter en specifik utgång måste gruvarbetaren hitta en ingång som producerar en utgång från en stor uppsättning tillåtna utgångar. Det vill säga ett pussel kan vara en lista med tecken så att dess första 16 tecken är "0" medan det inte finns någon begränsning för resten av karaktärerna, de kan vara vad som helst. Även om detta gör pusslet mycket enklare, är det ett tids- och energikrävande problem att lösa. I figuren ovan utför gruvarbetaren många försök för att lösa pusslet, det enda fältet som är tillåtet att ändras i varje försök är nonce. I varje försök kombinerar gruvarbetaren den missan som den just valde, listan över transaktioner som den ville lägga till blockkedjan och referensen till det föregående blocket tillsammans, mata in den sedan till SHA1-maskinen. Om utgången från SHA1-maskinen börjar med 16 "0" -tecken så löste den pusslet och vann spelet.

Hoppas att du gillade att läsa, se dig i nästa inlägg!

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