Bastien Vialla - lirmm.fr · Historique • Créer en 2009 par un certain Satoshi Nakamoto •...

77
Fonctionnement d’une crypto-monnaie : le Bitcoin Bastien Vialla

Transcript of Bastien Vialla - lirmm.fr · Historique • Créer en 2009 par un certain Satoshi Nakamoto •...

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

Bob

1.Alice veut acheter 5 btc de « marchandises » à Bob. 2.Alice veut arnaquer Bob pour avoir la « marchandise » et garder son argent

Alice

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

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

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

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

… …

Bitcoin vu de la Lune

Alice -> Bob 5 btc

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

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

Bitcoin vu de la Lune

Alice -> Bob 5 btc

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

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

Bitcoin vu de la Lune

Alice -> Bob 5 btc

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

Alice 5Bob 5,01

,01Carol 1David 12556Eve 12,51… …

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

txn #4A2…Inputs

Outputs

txn #312…txn #2E3…

Bob 5.0 Alice 1.0

Alice -> Bob 5 btc

txn #312…Inputs

Outputs

txn #8E4…

Alice 4.0

txn #2E3…Inputs

Outputs

txn #647…txn #7B9…

Alice 2.0

Eve -> Alice 4 btc

Fred -> Alice 2 btc

Transactions

txn #4A2…Inputs

Outputs

txn #312…txn #2E3…

Bob 5.0 Alice 1.0

Alice -> Bob 5 btc

txn #312…Inputs

Outputs

txn #8E4…

Alice 4.0

txn #2E3…Inputs

Outputs

txn #647…txn #7B9…

Alice 2.0

Eve -> Alice 4 btc

Fred -> Alice 2 btc

1. Le montant des inputs est égal au montant des outputs.

Transactions

txn #4A2…Inputs

Outputs

txn #312…txn #2E3…

Bob 5.0 Alice 1.0

Alice -> Bob 5 btc

txn #312…Inputs

Outputs

txn #8E4…

Alice 4.0

txn #2E3…Inputs

Outputs

txn #647…txn #7B9…

Alice 2.0

Eve -> Alice 4 btc

Fred -> Alice 2 btc

Spend no

Spend no

okok

1. Le montant des inputs est égal au montant des outputs. 2. Les inputs ne sont pas utilisés dans une autre transaction.

Transaction chain

txn …Inputs …Outputs

Bob 5.0

txn …Inputs …Outputs

Alice 5.0

txn …Inputs …Outputs

Bob 5.0

txn …Inputs …Outputs

Fred 3.0

txn …Inputs …Outputs

Eve 5.0

txn …Inputs …Outputs

Jim 5.0

txn …Inputs …Outputs

Dave 7.0

Fred 2.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

Clé privée Clé publiqueAlice Message

Authentification

Utilisation d’une signature numérique

Clé privée

Clé publiqueAlice

MessageSigner( )->( Message Signature )

Authentification

Utilisation d’une signature numérique

Clé privée

Clé publique

Alice

MessageSigner( )->( Message Signature )

Freddy

MessageVerifier( )->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

Txn43125…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

Txn43825…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

Txn43825…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

Txn43825…Signature

Elliptic Curve Digital Signature Algorithm

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 »

Désaccord sur le réseau

Alice 5btc

Alice 5btc

Alice 5btc

Bob 5btc

Bob 5btc

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 #342…

txn #… txn #… txn #…

block #13A…

txn #… txn #… txn #…

block #8E0…

txn #… txn #… txn #…

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

Temps

block #342…

txn #… txn #… txn #…

block #13A…

txn #… txn #… txn #…

block #8E0…

txn #… txn #… txn #…

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

txn …Inputs …

OutputsBob 5.0

txn …Inputs …

Outputs

Alice 5.0

txn …Inputs …

Outputs

Bob 5.0

txn …Inputs …

OutputsFred 3.0

txn …Inputs …

OutputsEve 5.0

txn …Inputs …

OutputsJim 5.0

Fred 2.0

Transaction chain Possession des bitcoins

Block chain Ordre des transactions

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 #…

txn #…

txn #… txn #…

txn #…txn #…

txn #…txn #…

Transactions non confirmées

block #342…block #13A…

txn #… txn #… txn #…

block #8E0…

txn #… txn #… txn #…

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

Création d’un bloc

txn #…

txn #…

txn #…

txn #…Transactions non confirmées

block #342…block #13A…

txn #… txn #… txn #…

block #8E0…

txn #… txn #… txn #…

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

txn #… txn #… txn #…

S’accorder sur l’ordre des transactions

Block Chain block #342…

txn #… txn #… txn #…

…block #13A…

txn #… txn #… txn #…

block #8E0…

txn #… txn #… txn #…

prev #13A…

prev #8E0…prev #723…

block #ABC…

txn #… txn #… txn #…

prev #13A…

Eve

Jim

Problème : Quel bloc choisir ?

S’accorder sur l’ordre des transactions

block

txn #… txn #… txn #…

prev #723…

noncex

f(block(x)) < cible

f est une fonction de hachage

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

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 transactionsf(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 transactionsf(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…

txn #… txn #… txn #…

prev #723…

nonce153327

ID

S’accorder sur l’ordre des transactionsf(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 #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

nonce

153327

Eve

block

txn #… txn #… txn #…

prev #723…

nonce

Jim

S’accorder sur l’ordre des transactionsf(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 #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

nonce

153327

Eve

block

txn #… txn #… txn #…

prev #723…

nonce

Jim

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 #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

nonce

153327

Eve

txn #… txn #… txn #…

prev #723…

nonce

0985

Jimblock #0982…

Deux blocs sont validés en même temps

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

nonce

153327

block #0982…

txn #… txn #… txn #…

prev #723…

0985

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

153327

block #0982…

txn #… txn #… txn #…

prev #723…

0985

block

txn #… txn #… txn #…

prev #0254…

block

txn #… txn #… txn #…

prev #0254…

Noeud 4

Noeud 153Un noeud mine à la suite du premier bloc reçu. nonce

nonce

nonce

Deux blocs sont validés en même temps

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

random number

153327

block #0982…

txn #… txn #… txn #…

prev #723…

random number

0985

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

random number

153327

block #0982…

txn #… txn #… txn #…

prev #723…

random number

0985

block #A2…

txn #… txn #… txn #…

prev #0254…

block

txn #… txn #… txn #…

prev #A2…

Noeud 4

Noeud 153

block #A2…

txn #… txn #… txn #…

prev #0254…

Un noeud mine sur la branche la plus longue.

Deux blocs sont validés en même temps

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

random number

153327

block #0982…

txn #… txn #… txn #…

prev #723…

random number

0985

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

random number

153327

block #0982…

txn #… txn #… txn #…

prev #723…

random number

0985

block #A2…

txn #… txn #… txn #…

prev #0254…

block

txn #… txn #… txn #…

prev #A2…

Noeud 4

Noeud 153

block #A2…

txn #… txn #… txn #…

prev #0254…

block

txn #… txn #… txn #…

prev #A2…

Les transactions de la branche éliminée deviennent non confirmées.

Deux blocs sont validés en même temps

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

random number

153327

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

random number

153327

block #A2…

txn #… txn #… txn #…

prev #0254…

block

txn #… txn #… txn #…

prev #A2…

Noeud 4

Noeud 153

block #A2…

txn #… txn #… txn #…

prev #0254…

block

txn #… txn #… txn #…

prev #A2…

Deux blocs sont validés en même temps

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

random number

153327

block #A2…

txn #… txn #… txn #…

prev #0254…

block

txn #… txn #… txn #…

prev #A2…

Sécurisé Pas Sécurisé

• 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

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

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

Alice -> Bob …

prev #723…

random number

153327

block #865E…

Alice -> Alice …

prev #723…

random number

4552

block #24BA…

txn#… txn#… txn#…

prev #865E…

random number

78045

…block #43EB…

txn#… txn#… txn#…

prev #57A3…

random number

4552

Alice calcule en privé une branche plus longue

block #0254…

txn# … txn# … txn# …

prev #723…

random number

153327

Attaque « double spending » le retour

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

Alice -> Bob …

prev #723…

random number

153327

block #865E…

Alice -> Alice …

prev #723…

random number

4552

block #24BA…

txn#… txn#… txn#…

prev #865E…

random number

78045

…block #43EB…

txn#… txn#… txn#…

prev #57A3…

random number

4552

Alice broadcast sa branche

block #0254…

txn# … txn# … txn# …

prev #723…

random number

153327

Attaque « double spending » le retour

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #0254…

Alice -> Bob …

prev #723…

random number

153327

block #865E…

Alice -> Alice …

prev #723…

random number

4552

block #24BA…

txn#… txn#… txn#…

prev #865E…

random number

78045

…block #43EB…

txn#… txn#… txn#…

prev #57A3…

random number

4552

La branche la plus courte est supprimée. Les transactions deviennent non confirmées.

block #0254…

txn# … txn# … txn# …

prev #723…

random number

153327

Attaque « double spending » le retour

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #… txn #…

prev #8E0…

block #865E…

Alice -> Alice …

prev #723…

random number

4552

block #24BA…

txn#… txn#… txn#…

prev #865E…

random number

78045

…block #43EB…

txn#… txn#… txn#…

prev #57A3…

random number

4552

La transaction Alice -> Alice est validée.

Attaque « double spending » le retour

txn #4A2…Inputs

Outputs

txn #312…

Bob 5.0

Alice -> Bob 5 btctxn #312…

Inputs

Outputs

txn #8E4…

Alice 5.0

Eve -> Alice 3 btc

txn #4A2…Inputs

Outputs

txn #312…

Alice 5.0

Alice -> Alice 5 btc

La transaction Alice -> Bob n’est plus valide car les inputs sont déjà utilisés.

« 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 #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #1A…

txn #… …

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

random number

153327

S’accorder sur l’ordre des transactions

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #1A…

txn #… …

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

random number

153327block #5B3…

txn #… txn #53… txn #…

prev #8E0…

S’accorder sur l’ordre des transactions

block #8E0…

txn #… txn #… txn #…

prev #723…

block #723…

txn #… txn #1A…

txn #… …

prev #8E0…

block #0254…

txn #… txn #… txn #…

prev #723…

random number

153327

block #5B3…

txn #… txn #53… txn #…

prev #8E0…