Blockkedjor en introduktion för datavetare
Vem är jag?
Varför ska ni lära er om blockkedjor?
Alla ska gå härifrån och kunna... förklara Bitcoin är uppbyggt bygga en egen blockkedja läsa på själva om blockkedjeprojekt
Vad är en blockkedja? "A persistent, transparent, public, append-only ledger." -- Finn Brunton En serie händelser, i tidsordning, som alla kan enas om är den riktiga utan att någon central auktoritet bestämmer. Konsensus genom algoritmer, inte genom tilltro till andra i nätverket.
Varför Bitcoin? 0
Vad vill vi göra?
Vad är problemet? Hur vet Vitalik att Satoshi inte redan gett bort myntet? Roger To Roger, I give this Bitcoin. Hur ska vi andra veta vem som är myntets rättmätige ägare? Satoshi Signed, 2019-05-24 Satoshi Vitalik To Vitalik, I give this Bitcoin. Signed, 2019-05-25 Satoshi
Vad ska vi gå igenom? Preliminaries Kryptografiskt säkra hashar Proof-of-work Övriga (i mån av tid) Transaction splitting och combining Hard fork Andra förslag?
SHA Secure Hash Algorithm "one-way hash functions are the workhorses of modern cryptography" -- Bruce Schneier SHA Proof-of-work Bitcoin
SHA Proof-of-work Bitcoin
Hashing-algoritmer Algoritm H, range = N SHA S, range N, t.ex. N=2256 Input: godtyckliga bitar, {0,1}* Output: tal i {0, 1,, N-1}, {0,1}log N En hashing-algoritm med två extra egenskaper: Egenskaper: Deterministisk "Bra" om den är uniform, d.v.s. Prob(H(x)) Prob(H(x) 1/N SHA Givet S(x) kan du inte gissa x, på annat sätt än att testa olika värden En liten ändring av input ger en kraftig ändring i output. Proof-of-work Bitcoin
SHA-256 SHA Proof-of-work Bitcoin
SHA Proof-of-work Bitcoin
Hur stort är 2256? Hur länge behöver jag leta efter en kollision? SHA Proof-of-work Bitcoin
Förklaring av hur stort 52! är SHA Proof-of-work Bitcoin
52! = 8.1*1067 2256 = 1.2*1077 SHA Proof-of-work Bitcoin
SHA Proof-of-work Bitcoin
SHA Proof-of-work Bitcoin
Problem Jag är en forskare som genererar data från mätningar, som jag delar med kollegor. Jag är rädd att den ska läcka ut innan jag publicerat den, eller bli stulen. Jag genererar nya dataset då och då. Jag vill kunna bevisa i framtiden att jag haft en viss data sedan en viss tidpunkt men jag vill inte avslöja vad det är för data just nu. Om någon stjäl min data och publicerar mina resultat i deras namn vill jag kunna bevisa det. Men jag vill hålla datan hemlig tills vidare. SHA Proof-of-work Bitcoin
SHA Proof-of-work Bitcoin
SHA Proof-of-work Bitcoin
Vad är problemet med en timestamp?
SHA Proof-of-work Bitcoin
POW Proof-of-work SHA Proof-of-work Bitcoin
nonce = 0 dddd Hej Erland, hash(email) hash(emailhash + nonce) Jag skulle vilja. Ok? BigInt emailhash := hash(email) int nonce = 0 BigInt hash; do { hash = hash(emailhash + nonce) } while (hash % 100000!= 0); SHA nonce++ No Yes send email + nonce Proof-of-work Bitcoin
Bitcoin "Vires in numeris" (Latin: Strength in numbers) SHA Proof-of-work Bitcoin
Påminnelse: Vad vill vi göra?
Påminnelse: Vad vill vi göra? Roger Satoshi Vitalik
+ + Proof of work Bitcoin
Mining Det är i snitt 10 minuter mellan varje nytt block. Om det skapas för många block för fort, ökar svårighetsgraden (måste börja med fler 0:or) Den som lyckas skapa ett block får Transaktionsavgiften för varje transaktion i blocket (frivillig) 12.5 Bitcoin
Field Size Description Data type Comments 4 version int32_t Block version information (note, this is signed) 32 prev_block char[32] The hash value of the previous block this particular block references 32 merkle_roo t char[32] The reference to a Merkle tree collection which is a hash of all transactions related to this block 4 timestamp uint32_t A timestamp recording when this block was created (Will overflow in 2106 [2]) 4 bits uint32_t The calculated difficulty target being used for this block 4 nonce uint32_t The nonce used to generate this block to allow variations of the header and compute different hashes 1 txn_count var_int Number of transaction entries, this value is always 0
Vad krävs för att någon ska kunna modifiera en gammal transaktion?
Alla ska gå härifrån och kunna... förklara Bitcoin är uppbyggt bygga en egen blockkedja läsa på själva om blockkedjeprojekt
Frågor? Maila: rikard.hjort@gmail.com
Transaction splitting/combining Hard fork Annat?
Övningar - Implementera, med träd eller fält som underliggande struktur, ett merkle-träd med följande metoder (det går bra att använda inbyggda hashfunktioner i Java för ändamålet): void insert(object data) int gettophash() boolean verify() // Kollar att alla hashar stämmer överens med datan. List<Object> getdata() // Hämtar alla data-objekt Implementera en enkel blockkedja som en länkad lista. Vid insert behöver proof-of-work utföras, med en förutbestämd svårighetsgrad. Bra att ha: class Block med instansvariabler för previous hash, data, merkleroot, nonce. Metoden: makeblock(merkletree datatree) // Baseras på senaste blocket i kedjan, utför proof-of-work. Metoden: boolean appendblock(block) // returnerar false om verifieringen inte gick igenom, returnerar annars true och lägger till blocket i kedjan.