3. BitCoin - Historique
1977 : Première description du chiffrement RSA qui utilise une clé publique pour chiffrer et d’une clé privée pour déchiffrer des données
confidentielles.
– 1990 : Le mathématicien américain David Chaum invente DigiCash une monnaie électronique (centralisée et propriétaire) basée sur des
protocoles cryptographiques.
– 1994 : Nick Szabo avance l’idée de smart contract, protocole de transaction informatique qui exécute les termes d’un contrat.
– 18 juin 1996 : la NSA publie un rapport intitulé « Comment produire de la monnaie : la cryptographie du cash électronique anonyme ».
– 1999 : L’économiste Milton Friedman prévoit la création prochaine d’un e-cash fiable permettant de réaliser des transactions anonymes sur
Internet.
– Mai 1999 : Henri Massias, Xavier Serret-Avila, et Jean-Jacques Quisquater décrivent un service d’horodatage sécurisé sans tiers de
confiance. Ce document sera mentionné plus tard dans le livre blanc de Bitcoin.
– Juin 1999 : Shawn Fanning invente, avec Napster, la technologie pair-a-pair, ou peer-to-peer (P2P) technology. La plateforme de partage de
fichiers audio Napster fonctionnait cependant avec un serveur central (appelé farm) qui jouait le rôle d’un registre centralisé de tous les
fichiers appartenant à, ou demandés par les pairs. Ce système centralisé constituait le point unique de vulnérabilité (Single Point of Failure-
SPOF) de Napster et le site a été fermé par le FBI en 2001 pour violation des droits de propriété intellectuelle.
– De 1998 à 2005 : Nick Szabo développe le projet BitGold, une monnaie numérique décentralisée basée sur des chaînes infalsifiables de
preuves de travail et utilisant beaucoup d’éléments qu’on retrouvera dans Bitcoin : horodatage, signatures numériques, clés publiques… Le
système se révèle cependant trop vulnérable aux attaques.
– 2004 : Développement de Ripplepay, une tentative de système monétaire décentralisé.
– 1 novembre 2008 : Annonce de la naissance de Bitcoin. La première spécification et preuve de concept de Bitcoin est publiée sur
la Cryptography Mailing List par Satoshi Nakamoto.
– 9 novembre 2008 : dans un message adressé à Satoshi Nakamoto, Hal Finney parle pour la première fois de « Block chain ». Nakamoto
parlait jusqu’alors de « timestamp server ».
– 3 janvier 2009 : création du premier bloc.
– 20 novembre 2017 : L'office des changes interdit l'utilisation du Bitcoin
– 29 novembre 2017 : Le cours du Bitcoin a atteint 9.920 dollars
16. BitCoin – Base de donnée
Transaction N 1
A B : 10
C D : 5
Transaction N 2
B D : 3
D A : 2
Transaction N 3
D C : 1
A D : 1
17. BitCoin – Base de donnée
Transaction N 232
A B : 10
Cle Public A
Cle Public B
Signature avec Cle Prive
18. BitCoin – Vérification de la signature
Transaction N 232
@IUS*S??L{P_S()(
#@J((*NC*(SF
Cle Public A
Cle Public B
Signature avec Cle Prive
Cle Public A
Transaction N 232
A B : 10
Cle Public A
Cle Public B
19. BitCoin – Problème de vérification d’argent
Transaction N 1
A B : 10
C D : 5
Transaction N 2
B D : 3
D A : 2
Transaction N 3
D B : 7
A D : 1
20. BitCoin – Problème de vérification d’argent
Transaction N 1
A B : 10
C D : 5
Transaction N 2
B D : 3
D A : 2
Transaction N 3
D B : 7
A D : 1
B = 10
21. BitCoin – Problème de vérification d’argent
Transaction N 1
A B : 10
C D : 5
Transaction N 2
B D : 3
D A : 2
Transaction N 3
D B : 7
A D : 1
B = 7
22. BitCoin – Problème de vérification d’argent
Transaction N 1
A B : 10
C D : 5
Transaction N 2
B D : 3
D A : 2
Transaction N 3
D B : 7
A D : 1
B = 14
23. BitCoin – Problème de la duplication (Dbl Spending)
Transaction N 1
A B : 10
C D : 5
Transaction N 2
B D : 3
D A : 2
Transaction N 3
D B : 7
A D : 1
Transaction N 1
A B : 10
C D : 5
Transaction N 2
B A : 10
D A : 2
Transaction N 3
D B : 7
A D : 1
24. BitCoin – Condition de course
Envoie Argent(K1 ,K2, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K2.SetArgent() += A ;
K1.SetArgent()-= A ;
}
Envoie Argent(K1 ,K3, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K3.SetArgent() += A ;
K1.SetArgent()-= A ;
}
25. BitCoin – Condition de course
Envoie Argent(K1 ,K2, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K2.SetArgent() += Argent ;
K1.SetArgent()-= Argent ;
}
Envoie Argent(K1 ,K3, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K3.SetArgent() += A ;
K1.SetArgent()-= A ;
}
A = 100
26. BitCoin – Condition de course
Envoie Argent(K1 ,K2, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K2.SetArgent() += Argent ;
K1.SetArgent()-= Argent ;
}
Envoie Argent(K1 ,K3, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K3.SetArgent() += A ;
K1.SetArgent()-= A ;
}
True
27. BitCoin – Condition de course
Envoie Argent(K1 ,K2, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K2.SetArgent() += Argent ;
K1.SetArgent()-= Argent ;
}
Envoie Argent(K1 ,K3, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K3.SetArgent() += A ;
K1.SetArgent()-= A ;
}
260
28. BitCoin – Condition de course
Envoie Argent(K1 ,K2, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K2.SetArgent() += Argent ;
K1.SetArgent()-= Argent ;
}
Envoie Argent(K1 ,K3, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K3.SetArgent() += A ;
K1.SetArgent()-= A ;
}
40
29. BitCoin – Condition de course
Envoie Argent(K1 ,K2, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K2.SetArgent() += Argent ;
K1.SetArgent()-= Argent ;
}
Envoie Argent(K1 ,K3, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K3.SetArgent() += A ;
K1.SetArgent()-= A ;
}
40
30. BitCoin – Condition de course
Envoie Argent(K1 ,K2, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K2.SetArgent() += Argent ;
K1.SetArgent()-= Argent ;
}
Envoie Argent(K1 ,K3, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K3.SetArgent() += A ;
K1.SetArgent()-= A ;
}
False
31. BitCoin – Condition de course Problème
Envoie Argent(K1 ,K2, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K2.SetArgent() += Argent ;
K1.SetArgent()-= Argent ;
}
Envoie Argent(K1 ,K3, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K3.SetArgent() += A ;
K1.SetArgent()-= A ;
}
100 100
32. BitCoin – Condition de course Problème
Envoie Argent(K1 ,K2, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K2.SetArgent() += Argent ;
K1.SetArgent()-= Argent ;
}
Envoie Argent(K1 ,K3, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K3.SetArgent() += A ;
K1.SetArgent()-= A ;
}
True True
33. BitCoin – Condition de course Problème
Envoie Argent(K1 ,K2, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K2.SetArgent() += Argent ;
K1.SetArgent()-= Argent ;
}
Envoie Argent(K1 ,K3, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K3.SetArgent() += A ;
K1.SetArgent()-= A ;
}
34. BitCoin – Condition de course Problème
Envoie Argent(K1 ,K2, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K2.SetArgent() += Argent ;
K1.SetArgent()-= Argent ;
}
Envoie Argent(K1 ,K3, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K3.SetArgent() += A ;
K1.SetArgent()-= A ;
}
260 360
35. BitCoin – Condition de course Problème
Envoie Argent(K1 ,K2, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K2.SetArgent() += Argent ;
K1.SetArgent()-= Argent ;
}
Envoie Argent(K1 ,K3, Argent )
A = Get.Argent(K1) ;
If (isValid(OP) ){
K3.SetArgent() += A ;
K1.SetArgent()-= A ;
}
40 -20
36. BitCoin – Condition de course Sémaphore
Envoie Argent(K1 ,K2, Argent )
V(S1) ;
A = Get.Argent(K1) ;
If (isValid(OP) ){
K2.SetArgent() += Argent ;
K1.SetArgent()-= Argent ;
}
P(S1) ;
P(S2);
Envoie Argent(K1 ,K3, Argent )
V(S2)
A = Get.Argent(K1) ;
If (isValid(OP) ){
K3.SetArgent() += A ;
K1.SetArgent()-= A ;
}
P(S2);
P(S1);
MUTEX S1=1 , MUTEX S2=0 ;
37. BitCoin – Ajout Base de donnée
Transaction N 232
A B : 10
Cle Public A
Cle Public B
Signature avec Cle Prive
38. BitCoin – Ajout Base de donnée
Transaction N 2998
A B : 1000
Cle Public A
Cle Public B
Signature avec Cle Prive
39. BitCoin – Ajout Base de donnée Falsification
Transaction N 232
A B : 10
Cle Public A
Cle Public B
Signature avec Cle Prive
40. BitCoin – Ajout Base de donnée Complexité
Block N 232
A B : 10
Cle Public A
Cle Public B
Signature avec Cle Prive
Complexité (Prob Math .. – Hashage .. )
41. BitCoin – Ajout Base de donnée Complexité
Block N 232
A B : 10
Cle Public A
Cle Public B
Signature avec Cle Prive
Hash (Block , RAND) avec condition
42. BitCoin – Scénario d’attaque
Block N 232
A B : 10
Cle Public A
Cle Public B
Signature avec Cle Prive
Hash (Block , RAND) avec condition
Hash (Block , RAND) avec condition
Brute-force
43. BitCoin – Ajout Base de donnée Complexité
Block N 232
A B : 10
Cle Public A
Cle Public B
Signature avec Cle Prive
Cpm Block n+1 =f(Cmp Block n,Hash Block ,NOUNCE )
44. BitCoin – Le Miner
Block N 232
A B : 10
Cle Public A
Cle Public B
Signature avec Cle Prive
Cpm Block n+1 =f(Cmp Block n,Hash Block ,NOUNCE )
46. BitCoin – Pourquoi Les Mineurs existent ?
Le Mineur gagne après chaque validation de blocs une
Somme de BTC .
La Somme diffère en 2008 Le mineur gagner 50 BTC
Apres chaque 200.000 blocs le nombre est divise en deux
.
C’est le seul moyen don’t le Bitcoin est cree .
Donc la somme du BITCOIN qu’il existe est :
200.000 x (50 +25+12.5+…. ) =200.000 x50x 0
∞ 1
2 𝑛 = 200.000 x50x2 = 2.000.000
47. BitCoin – Pourquoi Les Mineurs existent ?
LE BITCOIN EST DE
QUANTITE LIMITE
49. Blockchain - Définition
Blockchain est une structure de données, il s'agit essentiellement d'une liste chaînée qui utilise
des pointeurs de hachage à la place des pointeurs normaux. Les pointeurs de hachage sont
utilisés pour pointer vers le bloc précédent
Blockchain est un mécanisme de consensus décentralisé dans un blockchain, toutes les paires
finissent par se mettre d'accord sur l'état d'une transaction.
55. Attaque par Déni de Service (DoS)
Cette attaque vise à perturber le
fonctionnement normal du réseau
en inondant les nœuds
d’informations. Par exemple, un
attaquant peut inonder le réseau de
nombreuses transactions de faible
valeur, comme ce fut le cas lors
d’une attaque à grande échelle sur
le réseau Bitcoin, en juillet 2015
(PoW est plus vulnérable du fait du
calcul de la preuve
cryptographique).
56. Attaque Sybil
L’attaquant perturbe le réseau
en créant un certain nombre de
nœuds malveillants qui vont
prendre part au processus
de miningou de minting (PoW
est plus vulnérable que PoS car il
est en général moins cher
d’acheter du matériel de minage
que d’acquérir une part
significative de la circulating
supply d’une crypto-monnaie)
57. Attaque des 51%
Dans le mécanisme PoW, l’attaque des 51% est déterminée
par la quantité de travail nécessaire pour attaquer une
chaîne. Un mineur qui possède 51% de la puissance est
capable d’attaquer la chaîne principale. Au sein du
mécanisme PoS, un utilisateur qui possède 51%
des coins est également capable d’attaquer la chaîne.
Acheter autant de crypto-monnaie peut sembler onéreux
au départ mais pas pour de riches utilisateurs dans un
système PoS qui reçoivent des intérêts de plus en plus
importants grâce à l’augmentation de leur stake. De plus,
l’attaquant n’a pas techniquement besoin d’acheter 51% de
la circulating supply car toutes les pièces du réseau ne sont
pas systématiquement disponibles pour le staking(stockées
sur de gros exchanges par exemple). Néanmoins, pour les
deux mécanismes PoW et PoS, un attaquant possédant 51%
de la puissance de calcul ou 51% de la circulating supply n’a
aucun intérêt sur le plan pécuniaire à mener une telle
attaque qui aurait pour conséquence de détruire toute la
confiance accordée au réseau et donc de faire s’effondrer la
valeur du coinsous-jacent. L’attaquant se retrouverait ainsi
avec une grande quantité de crypto-monnaies qui ne
vaudrait absolument plus rien.
59. Les Vulnérabilités dans la BlockChain
La majorité des vulnérabilité
dans la blockchain provient de
leurs implémentations et non
pas dans leurs logique
60. La clé privée :
Si t’as le clé privée t’as le pouvoir .
- Ce clé prive peut être enregistré sois dans :
- votre ordinateur ,
- écrit dans un papier ,
- stocké dans un hardware Wallet
63. Side Channels Attaques
Le contexte d’une attaque physique est le suivant :
On considère un appareil qui performe des opérations cryptographiques basée sur un clé secret .
Ce clé est stocke dans un dispositive et protège contre un accès externe .
On suppose qu’un attaquant a accès a cet appareil et il peut exécuter un nombre fois des entres de
son choix .
En addition , et durant que l’appareil fait les calcules , il est cabale de mesure des paramètres qui
sont relative a l’environnement .
Par exemple le temps d’exécution , le champ électromagnétique qui l’entoure . Ces types d’attaque
n’ont un accès direction au clé secret .
La notion accès diffère d’une situation a l’autre , dans des situations il peut avoir accès total dans
d’autre comment le vol d’un badge d’un responsable de la sécurité ou bien le propriétaire de
l’appareil lui-même veut l’attaquer on cite l’exemple des cartes PAYTV
Tous ses systèmes sont chiffrées .
64. Les SmartsCard
L’un des cibles du sidechannels sont les smart cards .
Il y’en plusieurs raisons pour ceci puisque ces diapositives sont faites pour performer des opérations
sécurises .
Ils sont portales , de petite taille et facile a les voler .
Ils sont des appareils qui exécute un process a la fois , un processeur plus simple qu’un ordinateur .
Un smart card est un micro ordinateur il se compose d’un processeur 8 bits ou 32 bits avec un ROM
EPROM et une RAM de mémoire petite donc il est possible de faire des calculs .
Le but principal de ces smarts cards (Dans la plupart des cas .. ) est d’exécuter des opérations
cryptographique sans divulguer le clé secret .
65. Les SmartsCard
- La source de courant : Les smart cards n’ont pas des batteries interne . Le courant dont il
a besoin vient du card Reader . La chose qui rend facile a l’attaque de calculer la
consommation d’énergie .
- L’horloge (Clock) : Les smarts cards n’ont pas d’horloge interne . Les coups d’horloge
peuvent être fourni par l’environnement externe .
Par conséquence l’attaquant pour mesurer le temps d’exécution avec précision .
66. La classification des attaques physiques
Les attaques invasive et non invasive
Le principe d'une attaque par sondage (appelée probing attack) est d'espionner l'activité électrique
d'un composant électronique du circuit en positionnant une sonde suffisamment proche dudit
composant. Dans la littérature scientifique, mesurer l'évolution de l'état d'une équipotentielle d'un
bus (un « fil ») est un exemple typique d'attaque par sondage. En récoltant des données de cette
manière, l'attaquant peut être en mesure de déduire tout ou une partie du secret du circuit
cryptographique.
Un exemple simple est de connecter un câble dans un bus de donne pour voir le transfert des
donnes .
Les attaques non-invasives qui se contentent de procéder à une observation extérieure du système
Attaque temporelle : étude du temps mis pour effectuer certaines opérations ; cryptanalyse
acoustique : étude du bruit généré par un ordinateur ou une machine qui chiffre. En effet, le
processeur émet du bruit qui varie en intensité et en nature selon sa consommation et les
opérations effectuées (typiquement des condensateurs qui se chargent ou se déchargent émettent
un claquement facilement mesurable) ; analyse d'émanations électromagnétiques : similaire à la
cryptanalyse acoustique mais en utilisant le rayonnement électromagnétique (émission d'ondes,
analyse d'une image thermique, lumière émise par un écran, etc.) ; analyse de consommation : une
consommation accrue indique un calcul important et peut donner des renseignements sur la clé ;
attaque par faute : introduction volontaire d'erreurs dans le système pour provoquer certains
comportements révélateurs. Ce type d'attaque peut être considérée comme invasive dans certains
cas (un laser peut abimer le matériel, etc.)
67. Les attaques de ce genre se divise en 5 majeurs groupes
Probing attack : Il consiste a ouvrir l’appareil pour observer directement ses paramètres internes ,et
donc ce sont des attaques invasives , passive .
Fault induction attaques : Ces types d’attaque essaie d’influencer le comportement du dispositif pour
qu’il divulgue des informations . La difficulté ne consiste pas a injecter les donnes , mais a comment
extraire les paramètres secret a partit de cet injection . , ce type d’attaque et considère une attaque
active .
Timing attack : Il exploite le temps d’execution .
Power analysis attacks : Il se concentre sur la consommation d’energie .
Electromagnetic analysis attacks : Il mesure le champ électromagnétique entoure dans
l’environnement durant l’operation .
72. Bonnes pratiques de sécurité
• Simplicité, modularité et réutilisabilité du code
• Ecriture de tests unitaires et de tests d’intégration
• Incitations économiques diverses :
• Limites de montants traités
• Séparation des conditions et des actions dans le
code (« Condition-Oriented programming »)
• Pré et post-conditions sur les fonctions
• Utilisation d’environnements de test (frameworks,
testnets…)
73. Chiffrement – Principe de Kerckhoffs
Ce principe exprime que la sécurité d'un crypto système ne doit reposer que sur le secret de la clef.
Autrement dit, tous les autres paramètres doivent être supposés publiquement connus. Il a été
reformulé, peut-être indépendamment, par Claude Shannon : « l'adversaire connaît le système »
* Cette formulation est connue sous le nom de la maxime de Shannon. Il est considéré aujourd'hui
comme un principe fondamental par les cryptologues, et s'oppose à la sécurité par l'obscurité. Le
principe de Kerckhoffs n'implique pas que le système de chiffrement soit public, mais seulement que sa
sécurité ne repose pas sur le secret de celui-ci. Une tendance plus récente est de considérer que quand
les systèmes de chiffrement sont publics, largement étudiés et qu'aucune attaque significative n'est
connue, ils sont d'autant plus sûrs.
Ce principe apparaît parmi les six « desiderata de la cryptographie militaire » énoncés par Kerckhoffs
dans son traité, qui sont :
- Le système doit être matériellement, sinon mathématiquement indéchiffrable ;
- Il faut qu’il n’exige pas le secret, et qu’il puisse sans inconvénient tomber entre les mains de l’ennemi ; -
-La clé doit pouvoir en être communiquée et retenue sans le secours de notes écrites, et être changée ou
modifiée au gré des correspondants ;
- Il faut qu’il soit applicable à la correspondance télégraphique ;
- Il faut qu’il soit portatif, et que son maniement ou son fonctionnement n’exige pas le concours de
plusieurs personnes ;
- Enfin, il est nécessaire, vu les circonstances qui en commandent l’application, que le système soit d’un
usage facile, ne demandant ni tension d’esprit, ni la connaissance d’une longue série de règles à observer.
74. BitCoin – Base de donnée
Transaction N 1
? ?? : 10
?? ??? : 5
Transaction N 2
? ?? : 3
???? ?? : 2
Transaction N 3
?? ? : 1
???? ?? : 1