43
Rikard Hjort, 24 maj 2019 Blockkedjor en introduktion för datavetare

New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Blockkedjor

en introduktion för datavetare

Page 2: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Vem är jag?

Page 3: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Varför ska ni lära er om blockkedjor?

Page 4: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Page 5: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Alla ska gå härifrån och kunna ...

❏ … förklara Bitcoin är uppbyggt❏ … bygga en egen blockkedja ❏ … läsa på själva om blockkedjeprojekt

Page 6: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Page 7: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

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.

Page 8: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Varför Bitcoin?

0

Page 9: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Vad vill vi göra?

Page 10: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Vad är problemet?To Roger,I give this Bitcoin.

Signed, 2019-05-24

Satoshi

Roger

To Vitalik,I give this Bitcoin.

Signed, 2019-05-25

Satoshi

Vitalik

Hur vet Vitalik att Satoshi inte redan gett bort myntet?

Hur ska vi andra veta vem som är myntets rättmätige ägare?

Satoshi

Page 11: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Vad ska vi gå igenom?

Preliminaries

❏ Kryptografiskt säkra hashar❏ Timestamp server❏ Merkle-träd❏ Proof-of-work

Övriga (i mån av tid)

❏ Transaction splitting och combining❏ Hard fork❏ Andra förslag?

Page 12: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Page 13: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

S H ASecure Hash Algorithm

SHA Merkle-trädTimestamp

serverProof-of-work Bitcoin

Timestamp server

Merkle-träd

"one-way hash functions are the workhorses of modern cryptography"-- Bruce Schneier

Page 14: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019 SHA Proof-of-work BitcoinTimestamp

serverMerkle-träd

Page 15: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Hashing-algoritmer

Algoritm H, range = N

Input: godtyckliga bitar, {0,1}*Output: tal i {0, 1, …, N-1}, {0,1}log N

Egenskaper:

❏ Deterministisk❏ "Bra" om den är uniform, d.v.s.

Prob(H(x)) ≈ Prob(H(x) ≈ … ≈ 1/N

SHA S, range N, t.ex. N=2256

En hashing-algoritm med två extra egenskaper:

❏ 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.

SHA Proof-of-work BitcoinTimestamp

serverMerkle-träd

Page 16: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

SHA-256

SHA Proof-of-work BitcoinTimestamp

serverMerkle-träd

Page 17: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019 SHA Proof-of-work BitcoinTimestamp

serverMerkle-träd

Page 18: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Hur stort är 2256?Hur länge behöver jag leta efter en kollision?

SHA Proof-of-work BitcoinTimestamp

serverMerkle-träd

Page 19: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Förklaring av hur stort 52! är

SHA Proof-of-work BitcoinTimestamp

serverMerkle-träd

Page 20: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

52! = 8.1*1067

2256 = 1.2*1077

SHA Proof-of-work BitcoinTimestamp

serverMerkle-träd

Page 21: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Timestamp server

SHATimestamp

serverMerkle-träd Proof-of-work Bitcoin

Page 22: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019 SHATimestamp

serverMerkle-träd Proof-of-work Bitcoin

Page 23: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

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å.

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.

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.

SHATimestamp

serverMerkle-träd Proof-of-work Bitcoin

Page 24: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019 SHATimestamp

serverMerkle-träd Proof-of-work Bitcoin

Page 25: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Merkle-träd

SHA Merkle-trädTimestamp

serverProof-of-work Bitcoin

Timestamp server

Merkle-träd

Page 26: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Vad är problemet med en timestamp server?

Page 27: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019 SHA Proof-of-work BitcoinTimestamp

serverMerkle-träd

Page 28: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

P O WProof-of-work

SHA Merkle-trädTimestamp

serverProof-of-work Bitcoin

Timestamp server

Merkle-träd

Page 29: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

ddddHej Erland,

Jag skulle vilja ….

hash(email)

nonce = 0

hash(emailHash + nonce)

Ok?

nonce++

No

Yes

send email + nonce

BigInt emailHash := hash(email)int nonce = 0BigInt hash;do {

hash = hash(emailHash + nonce)} while (hash % 100000 != 0);

SHA Proof-of-work BitcoinTimestamp

serverMerkle-träd

Page 30: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Bitcoin

SHA Merkle-trädTimestamp

serverProof-of-work Bitcoin

Timestamp server

Merkle-träd

"Vires in numeris"

(Latin: Strength in numbers)

Page 31: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Påminnelse: Vad vill vi göra?

Page 32: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Påminnelse: Vad vill vi göra?Roger

Vitalik

Satoshi

Page 33: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Page 34: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Timestamp server + Merkle-träd +Proof of work⇒ Bitcoin

Page 35: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Page 36: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

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

Page 37: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

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_root

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

Page 38: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Page 39: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Vad krävs för att någon ska kunna modifiera en gammal transaktion?

Page 40: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Alla ska gå härifrån och kunna ...

❏ … förklara Bitcoin är uppbyggt❏ … bygga en egen blockkedja ❏ … läsa på själva om blockkedjeprojekt

Page 41: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Frågor?Maila: [email protected]

Page 42: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

❏ Transaction splitting/combining

❏ Hard fork❏ Annat?

Page 43: New Blockkedjorholmer/Kurser/LET3750105/forelasn... · 2019. 5. 27. · Rikard Hjort, 24 maj 2019 Vad är problemet? To Roger, I give this Bitcoin. Signed, 2019-05-24 Satoshi Roger

Rikard Hjort, 24 maj 2019

Ö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.