Le raisonnement mécanisé Joël Quinqueton, [email protected].
Bastien Vialla - lirmm.fr · Historique • Créer en 2009 par un certain Satoshi Nakamoto •...
Transcript of Bastien Vialla - lirmm.fr · Historique • Créer en 2009 par un certain Satoshi Nakamoto •...
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é ?
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
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
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
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
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
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
• 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
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)
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
• 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 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
…
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…