Vous êtes sur la page 1sur 77

Fonctionnement d’une crypto-monnaie : le Bitcoin

Bastien Vialla
But de la présentation

• Ce que l’on va voir :

• Posséder des bitcoins

• Echanger des bitcoins

• Miner des bitcoins

• Ce que l’on ne verra pas :

• La partie système économique


Historique

• Créer en 2009 par un certain Satoshi Nakamoto

• Première mise en pratique « distributed crypto-


currency », Wei Dai en 1998, cypherpunks mailing list

• Monnaie décentralisée : monnaie peer-to-peer évitant les


banques

• Utiliser la cryptographie pour la creation et le transfert de


monnaie au lieu des banques centrales.
Les personnages principaux

Alice Bob

1. Alice veut acheter 5 btc de « marchandises » à Bob.


2. Alice veut arnaquer Bob pour avoir la « marchandise » et
garder son argent
Bitcoin vu de la Lune

Bitcoin est un fichier numérique contenant un registre.

Alice 10
Bob 0,01
Carol 1
David 12556
Eve 12,51
… …
Bitcoin vu de la Lune
Alice 10
Alice 10
Bob 0,01
Bob 0,01
Carol 1
Carol 1
Alice 10 David 12556
David 12556
Bob 0,01 Eve 12,51
Eve 12,51
Carol 1 … …
… …
Alice 10
David 12556
Bob 0,01
Eve 12,51
Carol 1
… …
David 12556

Eve 12,51

… …

Alice 10

Bob 0,01

Carol 1

David 12556

Eve 12,51

… … Alice 10

Bob 0,01

Carol 1

David 12556

Eve 12,51

… …

Alice 10

Bob 0,01 Alice 10

Carol 1 Bob 0,01

David 12556 Carol 1

Eve 12,51 David 12556

… … Eve 12,51

… …
Bitcoin vu de la Lune

Alice 10
Bob 0,01
Carol 1
David 12556 Alice 10
Eve 12,51 Bob 0,01
… … Carol 1
David 12556
Eve 12,51
… …

Alice -> Bob


5 btc
Bitcoin vu de la Lune

Alice 5
Bob 5,01
Carol 1
David 12556 Alice 10
Eve 12,51 Bob 0,01
… … Carol 1
David 12556
Eve 12,51
… …

Alice -> Bob


5 btc
Bitcoin vu de la Lune

Alice 5
Bob 5,01
Carol 1
David 12556 Alice 5
Eve 12,51 Bob 5,01
… … Carol ,01
1
David 12556
Eve 12,51
… …

Alice -> Bob


5 btc
Bitcoin vu de la Lune

• Les transactions bitcoin sont connus de tout le réseau.

• Les utilisateurs du réseau sont anonymes.

• Comment assurer la sécurité ?


Les transactions
Le registre

Alice 10
Bob 0,01
Carol 1
David 12556
Eve 12,51
… …
Le registre

Alice -> Bob 5btc


David -> Carol 0,4btc
Eve -> Freddy 1btc
Tyron -> Shae 10btc


Transactions
Eve -> Alice
4 btc txn #312…
Inputs
txn #8E4…

Outputs
Alice 4.0 txn #4A2…
Inputs
txn #312…
txn #2E3… txn #2E3…
Inputs Outputs
txn #647…
Bob 5.0
txn #7B9…
Alice 1.0
Outputs
Fred -> Alice
Alice 2.0 Alice -> Bob
2 btc
5 btc
Transactions
Eve -> Alice 1. Le montant des inputs est égal au montant

4 btc txn #312… des outputs.
Inputs
txn #8E4…

Outputs
Alice 4.0 txn #4A2…
Inputs
txn #312…
txn #2E3… txn #2E3…
Inputs Outputs
txn #647…
Bob 5.0
txn #7B9…
Alice 1.0
Outputs
Fred -> Alice
Alice 2.0 Alice -> Bob
2 btc
5 btc
Transactions
Eve -> Alice 1. Le montant des inputs est égal au montant

4 btc txn #312… des outputs.
Inputs 2. Les inputs ne sont pas utilisés dans

txn #8E4… une autre transaction.

Outputs
Alice 4.0 txn #4A2…
Spend no Inputs
txn #312… ok
txn #2E3… txn #2E3… ok
Inputs Outputs
txn #647…
Bob 5.0
txn #7B9…
Alice 1.0
Outputs
Fred -> Alice
Alice 2.0 Alice -> Bob
2 btc
Spend no 5 btc
Transaction chain

txn …
Inputs … txn … txn …
Outputs Inputs … Inputs …
Eve 5.0 Outputs Outputs
Fred 3.0 Bob 5.0
txn …
Inputs …
Outputs txn … txn …
Jim 5.0 Inputs … Inputs …
Outputs Outputs
txn … Bob 5.0 Alice 5.0
Fred 2.0
Inputs …
Outputs
Dave 7.0
Problème : Comment être sûr de l’origine de la
transaction ?
Authentification

Utilisation d’une signature numérique


Authentification

Utilisation d’une signature numérique

Alice Clé privée Clé publique Message


Authentification

Utilisation d’une signature numérique

Alice Clé publique

Signer( Clé privée Message )->( Message Signature )


Authentification

Utilisation d’une signature numérique

Alice

Signer( Clé privée Message )->( Message Signature )

Freddy

Verifier( Clé publique Message Signature )-> Valide / Non Valide


Signature numérique

• Les utilisateurs sont représenter par leurs couple de clés

• Il est très difficile de trouver la clé privée à partir de la clé


publique

• La signature est différente pour tout les messages

Txn
43125…
Signature
Signature numérique

• Les utilisateurs sont représenter par leurs couple de clés

• Il est très difficile de trouver la clé privée à partir de la clé


publique

• La signature est différente pour tout les messages

Txn
43825…
Signature
Signature numérique

• Les utilisateurs sont représenter par leurs couple de clés

• Il est très difficile de trouver la clé privée à partir de la clé


publique

• La signature est différente pour tout les messages

Txn
43825…
Signature
Signature numérique

• Les utilisateurs sont représenter par leurs couple de clés

• Il est très difficile de trouver la clé privée à partir de la clé


publique

• La signature est différente pour tout les messages

Elliptic Curve Digital


Txn
Signature Algorithm
43825…
Signature
Problème : Comment contrer la latence du
réseau ?
Latence et attaque « double spending »

Alice -> Bob


5 btc

Alice -> Alice


5 btc

Le temps de validation d’une transaction doit être supérieur à


celui d’un broadcast.
Latence et attaque « double spending »

Alice -> Bob


5 btc

Alice -> Alice


5 btc

Le temps de validation d’une transaction doit être supérieur à


celui d’un broadcast.
Latence et attaque « double spending »

Alice -> Bob


5 btc

Alice -> Alice


5 btc

Le temps de validation d’une transaction doit être supérieur à


celui d’un broadcast.
Latence et attaque « double spending »

Alice -> Bob


5 btc

Alice -> Alice


5 btc

Le temps de validation d’une transaction doit être supérieur à


celui d’un broadcast.
Latence et attaque « double spending »

Bob Bob
5btc 5btc

Alice Alice
5btc 5btc

Alice
5btc

Désaccord sur le réseau


Latence et attaque « double spending »

• L’ordre de reception des transactions n’est pas le même


que l’ordre d’émission

• L’utilisation de timestamp n’est pas sûre


S’accorder sur l’ordre des transactions
S’accorder sur l’ordre des transactions

Block Chain

block #8E0… block #13A… block #342…


prev #723… prev #8E0… prev #13A…

txn #… txn #… txn #…


txn #… txn #… txn #…
txn #… txn #… txn #…
… … …

Temps
txn …
txn … txn …
Transaction chain Inputs …
Inputs …
Inputs …
Possession des bitcoins Outputs
Outputs Outputs
Eve 5.0
Fred 3.0 Bob 5.0

txn … txn … txn …


Inputs … Inputs … Inputs …
Outputs Outputs Outputs
Jim 5.0 Bob 5.0 Alice 5.0
Block chain Fred 2.0

Ordre des transactions


block #8E0… block #13A… block #342…
prev #723… prev #8E0… prev #13A…

txn #… txn #… txn #…


txn #… txn #… txn #…
txn #… txn #… txn #…
… … …
Block Chain

• Les transactions d’un même bloc sont considérés


émises en même temps

• Les transactions qui ne sont dans aucun bloc sont dites


non confirmées
Création d’un bloc

txn #… txn #…
Transactions txn #…
txn #…
txn #…
txn #…
non confirmées
txn #… txn #… txn #…

block #8E0… block #13A… block #342…


prev #723… prev #8E0… prev #13A…

txn #… txn #…
txn #… txn #…
txn #… txn #…
… …
Création d’un bloc

txn #…
Transactions txn #…
txn #…
non confirmées
txn #…

block #8E0… block #13A… block #342…


prev #723… prev #8E0… prev #13A…

txn #… txn #… txn #…


txn #… txn #… txn #…
txn #… txn #… txn #…
… … …
S’accorder sur l’ordre des transactions

Block Chain block #342…


prev #13A… Eve
txn #…
txn #…
block #8E0… block #13A… txn #…
prev #723… prev #8E0… …

txn #… txn #…
txn #… txn #… block #ABC…
txn #… txn #… prev #13A…
… …
txn #…
Jim
txn #…
txn #…

Problème : Quel bloc choisir ?
S’accorder sur l’ordre des transactions

Le temps de validation doit être supérieure à celle d’un


broadcast.

block
prev #723…
f est une fonction de hachage
txn #…
txn #…
txn #… f(block(x)) < cible

nonce
x
Fonction de hachage

f(« Semindoctus »)
f345 5473 d291 c514 fe41 9bf2 5217 69e5 df61 b7b7

f(« Je ne cherche pas, je trouve »)


1542 e9ea 5eb2 a242 f93a 8be2 ff53 a60a b1da 3146

f(« Je ne cherche pas, je trouve. »)


7ff4 3f79 87a4 a2a0 b7a5 f4e5 7253 7e1a 9424 92bc
S’accorder sur l’ordre des transactions
f(prev#723…, txn#…, … , txn#…, x) < 100…
f(prev#723…, txn#…, … , txn#…, 153324) = 5668… < 100…
f(prev#723…, txn#…, … , txn#…, 153325) = 8955… < 100…
f(prev#723…, txn#…, … , txn#…, 153326) = 2504… < 100…
f(prev#723…, txn#…, … , txn#…, 153327) = 0254… < 100…
S’accorder sur l’ordre des transactions
f(prev#723…, txn#…, … , txn#…, x) < 100…
f(prev#723…, txn#…, … , txn#…, 153324) = 5668… < 100…
f(prev#723…, txn#…, … , txn#…, 153325) = 8955… < 100…
f(prev#723…, txn#…, … , txn#…, 153326) = 2504… < 100…
f(prev#723…, txn#…, … , txn#…, 153327) = 0254… < 100…

ID

block #0254…
prev #723…

txn #…
txn #…
txn #…

nonce
153327
S’accorder sur l’ordre des transactions
f(prev#723…, txn#…, … , txn#…, x) < 100…
f(prev#723…, txn#…, … , txn#…, 153324) = 5668… < 100…
f(prev#723…, txn#…, … , txn#…, 153325) = 8955… < 100…
f(prev#723…, txn#…, … , txn#…, 153326) = 2504… < 100…
f(prev#723…, txn#…, … , txn#…, 153327) = 0254… < 100…
block #0254…
prev #723… Eve
txn #…
txn #…
txn #…

block #8E0… block #723…
nonce
prev #723… prev #8E0…
153327
txn #… txn #…
txn #… txn #…
txn #… txn #… block
… …
prev #723…

txn #…
Jim
txn #…
txn #…

nonce
S’accorder sur l’ordre des transactions
f(prev#723…, txn#…, … , txn#…, x) < 100…
f(prev#723…, txn#…, … , txn#…, 153324) = 5668… < 100…
f(prev#723…, txn#…, … , txn#…, 153325) = 8955… < 100…
f(prev#723…, txn#…, … , txn#…, 153326) = 2504… < 100…
f(prev#723…, txn#…, … , txn#…, 153327) = 0254… < 100…
block #0254…
prev #723… Eve
txn #…
txn #…
txn #…

block #8E0… block #723…
nonce
prev #723… prev #8E0…
153327
txn #… txn #…
txn #… txn #…
txn #… txn #… block
… …
prev #723…
Jim
txn #…
txn #…
txn #…

nonce
S’accorder sur l’ordre des transactions

• Cette opération est appelé le minage

• Il faut10 min pour le réseau pour valider un bloc (~145


000 000 GHash/s)

• La cible est ajustée toutes les deux semaines

• Il faut en moyenne 23 000 ans pour un pc pour trouver un


bloc

• La validation de deux bloc en même temps est peu


probable
Problème : Que se passe-t-il si deux blocs sont
validés en même temps ?
Deux blocs sont validés en même temps

block #0254…
prev #723… Eve
txn #…
txn #…
txn #…

block #8E0… block #723…
nonce
prev #723… prev #8E0…
153327
txn #… txn #…
txn #… txn #…
txn #… txn #…
block #0982…
… …

Jim
prev #723…

txn #…
txn #…
txn #…

nonce

0985
Deux blocs sont validés en même temps
block #0254… block
prev #723…
block #8E0… block #723… prev #0254…
txn #…
txn #…
prev #723… prev #8E0…
txn #…
txn #…

nonce txn #…
txn #…
txn #… txn #…
153327 …
txn #… txn #…
txn #… txn #…
… …
block #0982…
prev #723…
Noeud 153
Un noeud mine à txn #…
txn #…
txn #…

la suite du premier bloc reçu.



nonce
0985

block #0254…
prev #723…
block #8E0… block #723…
txn #…
txn #…
prev #723… prev #8E0…
txn #…

nonce
txn #… txn #…
txn #… 153327
txn #…
txn #… txn #…
… …
block #0982… block
prev #723…
prev #0254…
txn #…

Noeud 4 txn #…
txn #…
… txn #…
nonce txn #…
txn #…
0985 …
Deux blocs sont validés en même temps
block #0254… block #A2…
prev #723…
block #8E0… block #723… prev #0254…
txn #…
txn #…
prev #723… prev #8E0…
txn #…
txn #…

random number txn #…
txn #…
txn #… txn #…
153327 …
txn #… txn #…
txn #… txn #…
… …
block #0982…
prev #723…

Noeud 153
Un noeud mine sur la branche
txn #…
txn #…
txn #…

la plus longue.
random number

0985

block #0254… block #A2…


prev #723…
block #8E0… block #723… prev #0254…
txn #…
txn #…
prev #723… prev #8E0…
txn #… txn #…
… txn #…
random number txn #…
txn #… txn #… …
txn #… 153327
txn #…
txn #… txn #…
… …
block #0982… block
prev #723… prev #A2…

Noeud 4 txn #…
txn #…
txn #… txn #…
… txn #…
random number txn #…

0985
Deux blocs sont validés en même temps
block #0254… block #A2… block
prev #723…
block #8E0… block #723… prev #0254…
prev #A2…
txn #…
txn #…
prev #723… prev #8E0…
txn #…
txn #…
… txn #…
random number txn #…
txn #…
txn #…
txn #… txn #… txn #…
153327 …
txn #… txn #… …
txn #… txn #…
… …
block #0982…

Les transactions de la branche


prev #723…

txn #…
Noeud 153
txn #…

éliminée deviennent
txn #…

random number

non confirmées.
0985

block #0254… block #A2…


prev #723…
prev #0254…
block #8E0… block #723…
txn #…
txn #…
prev #723… prev #8E0… txn #… txn #…
… txn #…
random number txn #…
txn #… txn #… …
153327
txn #… txn #…
txn #… txn #…
… …
block #0982… block
prev #723…
prev #A2…
txn #…

Noeud 4
txn #…
txn #…
… txn #…
random number txn #…
txn #…
0985 …
Deux blocs sont validés en même temps
block #0254… block #A2… block
prev #723…
block #8E0… block #723… prev #0254… prev #A2…
txn #…
txn #…
prev #723… prev #8E0…
txn #… txn #…
txn #…
… txn #…
random number txn #…
txn #… txn #…
txn #… txn #… …
153327 …
txn #… txn #…
txn #… txn #…
… …

Noeud 153

block #0254… block #A2… block


prev #723… prev #A2…
block #8E0… block #723… prev #0254…
txn #…
txn #…
prev #723… prev #8E0…
txn #… txn #… txn #…

Noeud 4
… txn #… txn #…
random number txn #… txn #…
txn #… txn #… … …
txn #… 153327
txn #…
txn #… txn #…
… …
Deux blocs sont validés en même temps

• On considère une transaction valide au bout d’environ 6


blocs (~1h)

• Probabilité d’invalidation < 0,01%

• Pour des « marchandises » coûteuses il est conseillé


d’attendre un peu plus longtemps

block #0254… block #A2… block


block #8E0… block #723…
prev #723… prev #A2…
prev #0254…


prev #723… prev #8E0…
txn #…
txn #…
txn #… txn #… txn #…
txn #… txn #… … txn #… txn #…
txn #… txn #… random number txn #… txn #…
txn #… txn #… … …
… 153327

Sécurisé Pas Sécurisé


Attaque « double spending » le retour
Attaque « double spending » le retour

• Alice achète pour 5 btc de « marchandises » à Bob

• Alice veut trouver un moyen d’obtenir la marchandise


dans dépenser de btc
Attaque « double spending » le retour

Alice calcule en privé une branche plus longue


block #865E… block #24BA… block #43EB…
prev #57A3…


prev #723… prev #865E…
txn#…
txn#…
txn#…
Alice -> Alice txn#…
txn#…
… txn#…


random number
random number random number
4552
4552 78045

block #723… block #0254… block #0254…


block #8E0…
prev #723… prev #723…
prev #723… prev #8E0…
Alice -> Bob

… txn# …
txn# …
txn# …
txn #… …
txn #…
txn #… random number random number
txn #…
txn #… txn #…
153327 153327
… …
Attaque « double spending » le retour

Alice broadcast sa branche

block #865E… block #24BA… block #43EB…


prev #57A3…


prev #723… prev #865E…
txn#…
txn#…
txn#…
Alice -> Alice txn#…
txn#…
… txn#…


random number
random number random number
4552
4552 78045

block #723… block #0254… block #0254…


block #8E0…
prev #723… prev #723…
prev #723… prev #8E0…
Alice -> Bob

… txn# …
txn# …
txn# …
txn #… …
txn #…
txn #… random number random number
txn #…
txn #… txn #…
153327 153327
… …
Attaque « double spending » le retour

La branche la plus courte


est supprimée.
Les transactions deviennent block #865E… block #24BA… block #43EB…
prev #57A3…

non confirmées. …
prev #723… prev #865E…
txn#…
txn#…
txn#…
Alice -> Alice txn#…
txn#…
… txn#…


random number
random number random number
4552
4552 78045

block #723… block #0254… block #0254…


block #8E0…
prev #723… prev #723…
prev #723… prev #8E0…
Alice -> Bob

… txn# …
txn# …
txn# …
txn #… …
txn #…
txn #… random number random number
txn #…
txn #… txn #…
153327 153327
… …
Attaque « double spending » le retour

La transaction Alice -> Alice est validée.

block #865E… block #24BA… block #43EB…


prev #57A3…


prev #723… prev #865E…
txn#…
txn#…
txn#…
Alice -> Alice txn#…
txn#…
… txn#…


random number
random number random number
4552
4552 78045

block #8E0… block #723…

prev #723… prev #8E0…

txn #… txn #…
txn #… txn #…
txn #… txn #…
… …
Attaque « double spending » le retour
La transaction Alice -> Bob txn #4A2…
n’est plus valide car les inputs sont déjà utilisés. Inputs
txn #312…

Outputs
Bob 5.0

Eve -> Alice txn #4A2… Alice -> Bob


3 btc txn #312… 5 btc
Inputs
Inputs txn #312…
txn #8E4…

Outputs
Outputs
Alice 5.0
Alice 5.0
Alice -> Alice
5 btc
« Double Spending » le retour

• Alice est en compétition avec le reste du réseau

• Un bloc est validé par le réseau toute les 10 minutes

• Alice doit posséder 50 % de la puissance du réseau.

• La pool ghash.io à dépasser les 50 % du réseau, validant


6 blocs de suite
D’où viennent les bitcoins ?
Création des bitcoins

• Le noeud qui valide un bloc reçoit une récompense (~25


btc)

• La récompense pour la validation est divisé par 2 tout les


2 ans

• La quantité de bitcoins émise est finie (~21 millions)


Que ce passera-t-il quand les récompenses seront
nulles ?
En 2100

• La récompense donner par le réseau est nulle

• Un système de frais est disponible

• Chaque transactions contient une somme qui serait


donné au mineur

• Les mineurs traiteront en priorité les transactions avec le


le plus de récompenses
Conclusion

• Monnaie décentralisée et sécurisée

• Echappe au contrôle des états

• Associer aux activités illégales

• Plusieurs autres variantes de crypto-monnaies sont


apparues semblables au Bitcoin :

• Litecoin, Dogecoin, Primecoin, Nxt, Peercoin, ….


Dogecoin
Dogecoin

• Créer le 8 décembre 2013

• Avoir meilleure réputation que Bitcoin

• Logo représente Shiba Inu, internet meme

• Orienter vers le fun et la charité


Financement de l’équipe de bobsled de Jamaïque
Sponsor un pilote de Nascar
Financement d’un athlète indien de luge pour Sotchi 2014

Doge 4 kids : aider des enfants handicapés en leurs donnant un


chiot pour qu’il grandissent ensemble.

Doge 4 Water : Donner l’accès à l’eau potable à des villages du


Kenya

Doge 4 Housing : Aider des familles en difficultés en payant une


partie de leurs loyer

Doge 4 Homeless : Apporter de la nourriture et des vêtements


pour les sans-abris


Exemple bloc
S’accorder sur l’ordre des transactions

block #0254…
block #8E0… block #723…
prev #723…
prev #723… prev #8E0…
txn #…
txn #… txn #… txn #…
txn #… txn #1A… txn #…
txn #… txn #… …
… … random number

153327
S’accorder sur l’ordre des transactions
block #723…
prev #8E0…

txn #…
txn #1A…
txn #…

block #0254…
block #8E0… prev #723…
prev #723…
txn #…
txn #… txn #…
txn #… txn #…
txn #… …
… random number
block #5B3…
prev #8E0… 153327

txn #…
txn #53…
txn #…

S’accorder sur l’ordre des transactions
block #723…
prev #8E0…

txn #…
txn #1A…
txn #…

block #0254…
block #8E0… block #5B3… prev #723…
prev #723… prev #8E0…
txn #…
txn #… txn #… txn #…
txn #… txn #53… txn #…
txn #… txn #… …
… … random number

153327

Vous aimerez peut-être aussi