Hash functions in blockchains
Daniel Augot INRIA Saclay–ˆ Ile-de-France Laboratoire d’informatique de l’´ Ecole polytechnique Head of project-team Grace (crypto)
Daniel Augot: 1/50
Hash functions in blockchains Daniel Augot INRIA Saclay - - PowerPoint PPT Presentation
Hash functions in blockchains Daniel Augot INRIA Saclay Ile-de-France Laboratoire dinformatique de l Ecole polytechnique Head of project-team Grace (crypto) Daniel Augot: 1/50 This talk Crypto is standard Power law!
Daniel Augot: 1/50
Daniel Augot: 2/50
Daniel Augot: 2/50
Daniel Augot: 2/50
Daniel Augot: 3/50
Daniel Augot: Transactions and Ledger 4/50
Bitcoin: A Peer-to-Peer Electronic Cash System
Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone.
1. Introduction
Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments
What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1
Daniel Augot: Transactions and Ledger 5/50
Daniel Augot: Transactions and Ledger 6/50
Daniel Augot: Transactions and Ledger 7/50
"This book must be produced whenever any money is deposited
Rebbeca Mary Marewitt Officer's signature Transaction March 27, 1869 Date stamp of the office to be affixed against each entry
Daniel Augot: Transactions and Ledger 8/50
"This book must be produced whenever any money is deposited
Rebbeca Mary Marewitt Officer's signature Transaction March 27, 1869 Date stamp of the office to be affixed against each entry adresse bitcoin registre public pas d'officier ni de signature "minage"
Daniel Augot: Transactions and Ledger 9/50
Daniel Augot: Transactions and Ledger 10/50
Daniel Augot: Transactions and Ledger 10/50
Daniel Augot: Transactions and Ledger 10/50
Daniel Augot: Hash functions and Proof-of-work 11/50
◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ . . . Daniel Augot: Hash functions and Proof-of-work 12/50
◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ . . . Daniel Augot: Hash functions and Proof-of-work 12/50
◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ . . . Daniel Augot: Hash functions and Proof-of-work 12/50
◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ it is not signature, neither encryption ◮ . . . Daniel Augot: Hash functions and Proof-of-work 12/50
◮ no better way than 2m calls to H
◮ no better way than 2m calls to H
◮ no better way than 2m/2 calls to H
◮ if x ∈ T return T[x] ◮ if x ∈ T return a random y, and set T[x] = y Daniel Augot: Hash functions and Proof-of-work 13/50
d95b82d3187458f83ad36abd509c7688f60cbda4 Daniel Augot: Hash functions and Proof-of-work 14/50
Daniel Augot: Hash functions and Proof-of-work 15/50
Daniel Augot: Hash functions and Proof-of-work 15/50
Daniel Augot: Hash functions and Proof-of-work 16/50
Daniel Augot: Hash functions and Proof-of-work 16/50
Daniel Augot: Hash functions and Proof-of-work 17/50
Daniel Augot: Hash functions and Proof-of-work 18/50
Daniel Augot: Hash functions and Proof-of-work 18/50
block2 block5 block1 block2 block4 block5 block0 Header Hash block3 block6
Daniel Augot: Hash functions and Proof-of-work 19/50
Daniel Augot: Opening the box: SHA-256 20/50
padding document hash init. vector
Daniel Augot: Opening the box: SHA-256 21/50
Daniel Augot: Opening the box: SHA-256 22/50
512 bits 256 bits 256 bits 64 intermediate variables A B C D E F G H 64
Ch Ma Σ1 Σ0
A B C D E F G H A B C D E F G H
Daniel Augot: Opening the box: SHA-256 23/50
Daniel Augot: Opening the box: SHA-256 24/50
Daniel Augot: Opening the box: SHA-256 25/50
Daniel Augot: Opening the box: SHA-256 26/50
Ch Ma Σ1 Σ0
Daniel Augot: Opening the box: SHA-256 27/50
Daniel Augot: SHA256(SHA256(x)) and mining 28/50
HashPrevBlock TimeStamp HashMerkleRoot Target Nonce Version 32 bits 32 bits 32 bits 32 bits 256 bits 256 bits 512 bits 512 bits
Daniel Augot: SHA256(SHA256(x)) and mining 29/50
Version 32 bits TimeStamp 32 bits Target 32 bits Nonce 32 bits HashPrevBlock 256 bits HashMerkleRoot 256 bits Padding 384 bits 512 bits 256 bits 256 bits 64 intermediate variables A B C D E F G H 512 bits 256 bits 256 bits 64 intermediate variables A B C D E F G H 64 64 Inititalisation vector 256 bits Daniel Augot: SHA256(SHA256(x)) and mining 30/50
Version TimeStamp Target Nonce HashPrevBlock HashMerkleRoot Padding 512 bits 256 bits 256 bits 64 intermediate variables A B C D E F G H Padding 256 bits 512 bits 256 bits 256 bits 64 intermediate variables A B C D E F G H 64 64 256 bits 64 intermediate variables A B C D E F G H 64 Initialisation vector 32 bits 32 bits 32 bits 32 bits 256 bits 256 bits 384 bits 256 bits Inititalisation vector
Daniel Augot: SHA256(SHA256(x)) and mining 31/50
Version TimeStamp Target Nonce HashPrevBlock HashMerkleRoot Padding 512 bits 256 bits 256 bits 64 intermediate variables A B C D E F G H Padding 256 bits 512 bits 256 bits 256 bits 64 intermediate variables A B C D E F G H 64 64 256 bits 64 intermediate variables A B C D E F G H 64 Initialisation vector 32 bits 32 bits 32 bits 32 bits 256 bits 256 bits 384 bits 256 bits Inititalisation vector H1 H2 H3
Daniel Augot: SHA256(SHA256(x)) and mining 32/50
◮ save 3 rounds at the end for H2: 1 + 61
64
◮ incrementing the nonce leads to just increment values at round 3
Daniel Augot: SHA256(SHA256(x)) and mining 33/50
Daniel Augot: Scrypt 34/50
Daniel Augot: Scrypt 35/50
Daniel Augot: Scrypt 36/50
Daniel Augot: Ethash 37/50
Daniel Augot: Ethash 38/50
Daniel Augot: Ethash 39/50
Daniel Augot: Ethash 40/50
Daniel Augot: Ethash 41/50
Daniel Augot: Ethash 42/50
Daniel Augot: Equihash 43/50
Daniel Augot: Equihash 44/50
Daniel Augot: Equihash 45/50
Daniel Augot: Equihash 46/50
Daniel Augot: Equihash 47/50
Daniel Augot: Equihash 48/50
Daniel Augot: Equihash 49/50
Daniel Augot: Equihash 50/50
Daniel Augot: Equihash 50/50