« Projets étudiants cryptographie et sécurité/Lagorce Mahieu Bitcoin » : différence entre les versions

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Ligne 15 : Ligne 15 :


Le 27 septembre 2012, la fondation Bitcoin est créée.
Le 27 septembre 2012, la fondation Bitcoin est créée.


== Principe de fonctionnement ==

Lorsque qu'un nouvel ordinateur cherche a se connecter au réseau, il commence par chercher d'autres ordinateurs connectés.

Au tout début du bitcoin, cette tâche était réalisée en se connectant à un réseau IRC (Internet Relay Chat, fonctionne comme un chat). Dorénavant, la méthode est plus simple car la liste des adresses IP des ordinateurs travaillant sur le réseau se trouve dans le code source du logiciel.

Une fois la connexion effectuée, il faut télécharger la base de données de toutes les transactions effectuées depuis le début du projet (La Blockchain). Pour qu'une transaction puisse être validée, il faut qu'elle soit signée au sens cryptographique du terme à l'aide de la cryptographie asymétrique. Ceci est possible du fait qu'une adresse Bitcoin est aussi l'empreinte cryptographique d'une clef publique. Une transaction reçoit en entrée la référence d'une transaction précédente, qui prouve que les fonds du porte-monnaie sont bien réels, et produit en sortie une ou plusieurs adresses Bitcoin avec les montants correspondants. Une transaction équilibre toujours ses entrées et ses sorties.

Une fois ces étapes terminées, le logiciel est opérationnel et l'ordinateur peut commencer a « miner » du bitcoin.

Quand un nœud du réseau Bitcoin reçoit une nouvelle transaction, il commence par la valider localement à l'aide des transactions antérieures dont il dispose, il la stocke dans un pool de transaction en attente, puis il la diffuse aux nœud voisin qui feront le même traitement. Ces actions sont répetées jusqu'à ce que tous les nœuds du réseaux soient informés de la nouvelle transaction.
Cependant, la nouvelle transaction n'est pas encore prête à être ajoutée dans le registre des transactions.

Cet ajout dans le registre se fait en 2 temps :
*Certains nœuds du réseau tente de construire un nouveau bloc en regroupant :
*Des transactions récentes prises dans le pool, en vérifiant la validité de chacune d'entre elles.
*Des informations générales comme la date ou l'heure
*Et rendent le tout infalsifiable avec un somme de contrôle (un hash) calculée par un procédé cryptographique, qui servira également d'identificateur unique du bloc.

L'utilisation d'une preuve de travail rend ce travail extrêmement difficile. Ceci dans le but de forcer une cadence de production des blocs valides d'environ 10 minutes. Et ce peut importe le nombre de nœuds travaillant sur le réseau.
Quand un mineur parvient a construire un bloc valide, il le diffuse aux autres. Le mineur qui parvient a reconstruire le bloc se voit récompensé par l'attribution ne nouveaux bitcoins (actuellement ce nombre est 25). C'est le seul moyen de création de nouveaux bitcoins.

Dans un deuxième temps, chaque nœud qui reçoit le nouveau bloc valide essaie d'ajouter ce nouveau bloc à sa version locale du registre. Il commence par vérifier que chaque transaction du bloc est nouvelle et valide par rapport à se propre version du registre, et que ce bloc vient bien se greffer à l'extrémité de sa blockchain. Si oui, ce bloc devient localement valide et le nœud le diffuse à ses voisins, jusqu'à ce que le nœud soit validé par tout le réseau.

Il peut arriver que des nœuds différents valident des blocs différents et construisent donc un registre différents. Ces anomalies sont appelées des « forks » et sont le plus souvent temporaires et corrigées par le protocole de construction de la blockchain.

Les bitcoins d'un utilisateur sont stockés dans un porte-monnaie électronique qui contient les clés privées utilisées pour signer les transactions qu'il a effectuées. Le fichier correspondant est wallet.dat. La perte de ce fichier rend impossible l'utilisation de ce porte-monnaie, les bitcoin ne pouvant plus être signés.


== Technologies employées ==


Bitcoin utilise le concept de preuve de travail, initialement imaginé pour résoudre le problème du spam, et implémenté par exemple dans le système Hashcash ;
*Les algorithmes de hashage sont SHA-256 et RIPEMD-160. Un double hash en SHA-256 est utilisé pour obtenir le hash des blocs et donc la preuve de travail, tandis qu'un SHA-256 suivi d'un RIPEMD-160 est utilisé pour construire les adresses bitcoins ;
*Les signatures de transactions sont effectuées en utilisant la cryptographie à courbes elliptiques, dite ECDSA. En l'occurrence, la courbe employée est secp256k1 ;
*Le logiciel originel écrit par Nakamoto utilise Berkeley DB pour la gestion de ses bases de données. Depuis la version 0.8.0, BerkeleyDB n'est plus utilisée que pour le porte-clef. Les transactions et blocs sont eux stockés dans une base LevelDB.
*Au sein d'un bloc, les transactions sont stockées sous la forme d'un arbre de Merkle ;
*La validation des transactions fait appel à un langage de script interne conçu par Nakamoto. Ce langage, volontairement minimaliste et non Turing-complet, doit permettre au logiciel de s'adapter aisément à des évolutions ultérieures et permettre des fonctionnalités avancées comme les Smart contract.


== Limite et risques ==
== Limite et risques ==

Version du 20 mars 2016 à 12:50

Présentation globale

Bitcoin (de l'anglais « Bit » : unité d'information binaire et « Coin » : monnaie). Le bitcoin est une monnaie cryptographique et un système de paiement peer-to-peer inventé par Satoshi Nakamoto. Son invention est annoncée en 2008 et le logiciel open source est publié en 2009.

L'unité de compte est le bitcoin. Le nombre maximal de bitcoin en circulation ne peut dépasser 21 millions d'unités. Ce nombre est divisible jusqu'à la huitième décimale.


Création

Le bitcoin est une amélioration du concept de B-Money, imaginé par Wei Dai en 1999 et de bitgold décrit par Nick Szabo en 2005. Dans le 1er, les serveurs devaient déposer un dépôt de garantie dans un mécanisme peu explicite. Le second corrige ce problème à l'aide de l'utilisation d'une preuve de calcul, mais garde le défaut de n'utiliser qu'une majorité d'adresse pour valider la légitimité d'une chaine de transaction, ce qui laissait le problème de contrôle du nombre des adresses.

L'identité réelle de Satoshi Nakamoto reste aujourd'hui inconnue. Il n'existe aucune trace de lui avant la création du Bitcoin. La seule information dont la communauté dispose est qu'il s'agit d'un Japonais de 40 ans. Son dernier message sur les forum de la communauté date du 12 décembre 2010 dans lequel il dit nommer Gavin Andresen comme successeur et lui fournir une clé d'alerte. Cette clé privée et unique permet d'atténuer les effets d'une potentielle attaque sur le système Bitcoin, comme la découverte d'une faille permettant de modifier a posteriori les transactions.

Le 27 septembre 2012, la fondation Bitcoin est créée.


Principe de fonctionnement

Lorsque qu'un nouvel ordinateur cherche a se connecter au réseau, il commence par chercher d'autres ordinateurs connectés.

Au tout début du bitcoin, cette tâche était réalisée en se connectant à un réseau IRC (Internet Relay Chat, fonctionne comme un chat). Dorénavant, la méthode est plus simple car la liste des adresses IP des ordinateurs travaillant sur le réseau se trouve dans le code source du logiciel.

Une fois la connexion effectuée, il faut télécharger la base de données de toutes les transactions effectuées depuis le début du projet (La Blockchain). Pour qu'une transaction puisse être validée, il faut qu'elle soit signée au sens cryptographique du terme à l'aide de la cryptographie asymétrique. Ceci est possible du fait qu'une adresse Bitcoin est aussi l'empreinte cryptographique d'une clef publique. Une transaction reçoit en entrée la référence d'une transaction précédente, qui prouve que les fonds du porte-monnaie sont bien réels, et produit en sortie une ou plusieurs adresses Bitcoin avec les montants correspondants. Une transaction équilibre toujours ses entrées et ses sorties.

Une fois ces étapes terminées, le logiciel est opérationnel et l'ordinateur peut commencer a « miner » du bitcoin.

Quand un nœud du réseau Bitcoin reçoit une nouvelle transaction, il commence par la valider localement à l'aide des transactions antérieures dont il dispose, il la stocke dans un pool de transaction en attente, puis il la diffuse aux nœud voisin qui feront le même traitement. Ces actions sont répetées jusqu'à ce que tous les nœuds du réseaux soient informés de la nouvelle transaction. Cependant, la nouvelle transaction n'est pas encore prête à être ajoutée dans le registre des transactions.

Cet ajout dans le registre se fait en 2 temps :

  • Certains nœuds du réseau tente de construire un nouveau bloc en regroupant :
  • Des transactions récentes prises dans le pool, en vérifiant la validité de chacune d'entre elles.
  • Des informations générales comme la date ou l'heure
  • Et rendent le tout infalsifiable avec un somme de contrôle (un hash) calculée par un procédé cryptographique, qui servira également d'identificateur unique du bloc.

L'utilisation d'une preuve de travail rend ce travail extrêmement difficile. Ceci dans le but de forcer une cadence de production des blocs valides d'environ 10 minutes. Et ce peut importe le nombre de nœuds travaillant sur le réseau. Quand un mineur parvient a construire un bloc valide, il le diffuse aux autres. Le mineur qui parvient a reconstruire le bloc se voit récompensé par l'attribution ne nouveaux bitcoins (actuellement ce nombre est 25). C'est le seul moyen de création de nouveaux bitcoins.

Dans un deuxième temps, chaque nœud qui reçoit le nouveau bloc valide essaie d'ajouter ce nouveau bloc à sa version locale du registre. Il commence par vérifier que chaque transaction du bloc est nouvelle et valide par rapport à se propre version du registre, et que ce bloc vient bien se greffer à l'extrémité de sa blockchain. Si oui, ce bloc devient localement valide et le nœud le diffuse à ses voisins, jusqu'à ce que le nœud soit validé par tout le réseau.

Il peut arriver que des nœuds différents valident des blocs différents et construisent donc un registre différents. Ces anomalies sont appelées des « forks » et sont le plus souvent temporaires et corrigées par le protocole de construction de la blockchain.

Les bitcoins d'un utilisateur sont stockés dans un porte-monnaie électronique qui contient les clés privées utilisées pour signer les transactions qu'il a effectuées. Le fichier correspondant est wallet.dat. La perte de ce fichier rend impossible l'utilisation de ce porte-monnaie, les bitcoin ne pouvant plus être signés.


Technologies employées

Bitcoin utilise le concept de preuve de travail, initialement imaginé pour résoudre le problème du spam, et implémenté par exemple dans le système Hashcash ;

  • Les algorithmes de hashage sont SHA-256 et RIPEMD-160. Un double hash en SHA-256 est utilisé pour obtenir le hash des blocs et donc la preuve de travail, tandis qu'un SHA-256 suivi d'un RIPEMD-160 est utilisé pour construire les adresses bitcoins ;
  • Les signatures de transactions sont effectuées en utilisant la cryptographie à courbes elliptiques, dite ECDSA. En l'occurrence, la courbe employée est secp256k1 ;
  • Le logiciel originel écrit par Nakamoto utilise Berkeley DB pour la gestion de ses bases de données. Depuis la version 0.8.0, BerkeleyDB n'est plus utilisée que pour le porte-clef. Les transactions et blocs sont eux stockés dans une base LevelDB.
  • Au sein d'un bloc, les transactions sont stockées sous la forme d'un arbre de Merkle ;
  • La validation des transactions fait appel à un langage de script interne conçu par Nakamoto. Ce langage, volontairement minimaliste et non Turing-complet, doit permettre au logiciel de s'adapter aisément à des évolutions ultérieures et permettre des fonctionnalités avancées comme les Smart contract.

Limite et risques

Irréversibilité des transactions

Porte-monnaie

Il existe deux types de porte-monnaie qui sont :

  • Les porte-monnaie local. Un client télécharger depuis le site de bitcoin qui s’installe sur la machine et crée un fichier wallet.dat qui stock le porte-monnaie
  • Un porte-monnaie en ligne. Il s’agit d’un service web qui marche comme le local.

Tous deux comportent une signature unique qui vient du porte-monnaie et qui prouve mathématiquement quelle vient bien de celui-ci et qui empêche toute modification de la transaction après son émission.

Une transaction

Une transaction est un transfert entre porte-monnaie électronique. On transfert une valeur qui est incluse dans la chaine de bloc. Les transactions ne sont pas crypté il est donc possible de voir toute les transactions qui ont été effectués depuis le début de bitcoin.

Irréversibilité

Il s’agit du plus gros risque du bitcoin car il est anonyme et chaque transaction est irréversible donc si on vous pirate votre porte-monnaie et qu’une transaction est effectuée vous avez tout perdu et vous ne savez pas par qui.

Risques opérationnels

Les risque opérationnelle sont différents risque liée à l’environnement. Ils sont des risque comme :

  • Le fichier wallet corrompu ou encore mal protéger.
  • Des problèmes réseaux empêchant la récupération des blocs (attaque en déni de service, simple problème réseaux).

Risques de change

Les monnaies cryptographiques comme le bitcoin pour être échanger contre des monnaies fiduciaires ont besoin de passer par des plateformes d’échange priver mais ces plateformes peuvent avoir plusieurs problèmes :

  • Être de fausse plateforme
  • Sujet a des défaillances
  • Même la faillite

Risques technologique

Le bitcoin comme les autre monnaies cryptographique sont baser sur une base de donner mais la taille de cette base de donner croit de façon exponentielle ce qui rend les transactions en mode pair-à-pair plus long car plus assez de puissance pour les traité.

Limites

Le bitcoin est un monnaie dite « early adopters » car la quantité de bitcoin distribuer étant limiter les personne qui on adopter en premier cette monnaie on plus facilement en acquérir et donc sont devenu plus riche que les nouveau arrivent.

Bitcoin et Sécurité

en cour

Cours du Bitcoin

  • 9 février 2011 : Le bitcoin atteint la parité avec le dollar américain.
  • Juin 2011 : Le bitcoin dépasse les 31 USD.
  • Décembre 2011 : Redescente sous la barre des 4 dollars.
  • 29 novembre 2013 : Le bitcoin dépasse l'once d'or, a peu près de 1250 USD.


Acceptation

Le bitcoin est accepté comme moyen de paiment sur plusieurs plate-formes :

  • Wordpress : depuis le 16 novembre 2012
  • Reddit : Permet l'achat de Reddit Gold à l'aide de bitcoin depuis février 2013
  • Mega : Le successeur de Megaupload, depuis le 16 février 2016.
  • Baidu : L'équivalent chinois de Google depuis octobre 2013.
  • 29 octobre 2013 : Le premier distributeur-échanger de bitcoin est mis en service a Vancouver.

Autre monnaies

En cour