SecurityInsider
Le blog des experts sécurité Wavestone

Protocole Bitcoin : Le Blockchain au service des intérêts communs


Après avoir abordé les grands principes du système Bitcoin dans un précédent post, l’ambition de cet article est de revenir sur le fonctionnement du protocole et de la confiance distribuée.

La transaction : Base de toute monnaie

La transaction représente l’échange de bitcoin entre plusieurs adresses. Une adresse fonctionne comme un compte bancaire ; l’adresse peut être vue comme une clé qui aurait fonction de numéro de compte celle-ci est associée à une clé privée qui serait le code de la carte bancaire. 
Chaque utilisateur dispose d’un nombre quasi-illimité d’adresses qui sont gérées par des  Wallets. Il existe plus de 1048 adresses, il est donc peu probable que deux utilisateurs génèrent le même couple adresse/clé. Ces adresses sont jetables comme nous l’avons vu dans le précédent article. Lors d’une transaction, les informations associées (montant, adresse émettrice et destinataire) sont transmises en clair sur le réseau. À noter que la transaction est basée sur la cryptographie asymétrique (ECDSA).

Le blockchain : Une archive numérique, décentralisée et publique

Le blockchain est le livre d’histoire du système qui contient toutes les informations sur les transactions depuis son commencement. Le blockchain (chaîne de bloc) fonctionne comme les annales d’un pays où les historiens archivent les évènements de l’année courante et publient leur travail à la fin de l’année, il y a alors un léger décalage entre le temps réel et le temps des archives.

Annales :

Blockchain :

Les transactions 42 et 43 ne sont considérées comme vraies qu’à la publication de l’archive de la période 28 et non à leur émission.

L’archive d’une période est le bloc

Le bloc prend la forme d’un hash à plusieurs entrées :
  • Le hash du bloc précédent
  • Toutes les transactions qui n’ont pas été inventoriées
  • Un nombre aléatoire (aussi appelé nonce)

Le hash doit commencer par un certain nombre de zéro, ce nombre varie en fonction de la quantité de puissance de calcul sur le réseau. C’est pour cette raison que le temps de calcul d’un bloc est en moyenne constant (10min). Les mineurs (ceux qui calculent le bloc) font varier le nonce jusqu’à trouver un hash de la forme voulu. Au fur et à mesure que les transactions ont lieu pendant le calcul du bloc, celles-ci sont rajoutées en entrée : le caractère aléatoire et imprévisible de la fonction de hash SHA-256 assure les mêmes chances pour un mineur de trouver un bloc valide malgré l’ajout continu des transactions.

Dès la découverte d’un bloc, le mineur publie son résultat, le nonce et les transactions qu’il a pris en compte. Les autres utilisateurs peuvent alors constater en recalculant le hash que le bloc est valide, ils vérifient aussi que les transactions utilisées pour son calcul ne sont pas fausses : cette vérification est facile car toutes les transactions sont publiques. Le bloc est intégré au blockchain : cela signifie qu’il sert d’input pour le calcul du nouveau bloc. Lorsqu’un utilisateur (ou nœud) se connecte au système après une absence, il récupère les derniers blocs du blockchain principal. Actuellement, la chaîne principale est proche des 350000 blocs de longueur soit près de 30Go de données.

L’activité de calcul des blocs est appelé minage (mining). Pour encourager le minage, la découverte d’un bloc est rémunérée : concrètement cela signifie que dans le calcul d’un bloc, la première transaction référencée par le mineur est cette récompense ex nihilo qu’il se verse sur une adresse qu’il utilise. La rémunération du système baisse progressivement, celle-ci est divisée par deux tous les quatre ans : il y a en fait une quantité maximale de bitcoin prévue par le système (21M), celle-ci sera atteinte en 2140 avec le versement de la dernière prime.
Par souci de sécurité, les émetteurs des transactions enregistrées versent aussi des frais (très faibles) au mineur. Le but est de protéger le système contre le spamming de transactions.

Cas d’étude : Comment le protocole gère les conflits ?


Les nœuds considèrent toujours la chaîne la plus longue comme étant la chaîne légitime, et les mineurs travaillent à étendre celle-ci. Si deux mineurs, Alice et Bob, diffusent simultanément (1) deux versions différentes du nouveau bloc (n+1), les autres nœuds et mineurs du réseau ne les recevront pas forcément tous dans le même ordre à cause des temps de propagation dans le réseau. Dans ce cas, chacun travaille sur la version du bloc (n+1) reçu en premier, mais conserve l’autre version. Lorsque le bloc (n+2) est trouvé, dans notre cas par David (2) qui travaillait sur la version de Bob, il est integré à la chaine principale (après publication et vérification). Il existe alors une chaîne de taille n+2. Celle-ci est donc reconnu comme chaîne principale, nouveau point de départ de leur travail (4) et la version d’Alice est abandonnée (3).

Un système qui limite les attaques

Nous avons vu que miner avec des fausses transactions ne permettait pas de frauder. Cependant, un utilisateur malicieux peut transférer un bitcoin vers une première cible, puis avant que cette transaction ne soit enregistrée dans le bloc suivant (donc avant qu’il ne soit réellement dépossédé de son bitcoin), il pourrait transférer ce même bitcoin vers une seconde cible : après tout, une transaction non enregistrée n’est qu’un chèque signé tandis qu’une transaction enregistrée est un chèque encaissé. Lors du calcul d’un bloc, seule l’une des deux transactions sera pris en compte, et l’une des deux cibles sera alors victime : c’est la double-dépense. Le destinataire d’une transaction doit donc attendre quelques blocs pour être sûr qu’il est bien propriétaire du bitcoin qu’on lui a transmis.

Une autre attaque est possible si l’attaquant dispose de plus de la moitié de la puissance de calcul totale dans le réseau il est alors capable de miner plus rapidement que les autres. Il peut alors recalculer à partir d’un ancien bloc, sans tenir compte de certaines transactions par exemple. Son blockchain finira par rattraper la chaîne principale pour ensuite la dépasser et devenir à son tour la chaîne principale. Cependant l’attaquant pourrait risquer d’abîmer la confiance des utilisateurs dans le système, sans compter l’effet boule de neige d’une telle modification du « temps » dans le blockchain. L’attaque 51%, ainsi nommée, est donc hautement improbable. Aujourd’hui, le bitcoin est protégé par sa popularité : entre 1000 et 2000 mineurs, datacenters classiques ou distribués (regroupement de particuliers), minent à travers le monde.

Bitcoin, une monnaie numérique autonome

Le protocole Bitcoin est a permis de construire un système monétaire s’affranchissant des autorités de contrôle. Avec un tel protocole, le réseau est capable de se protéger tout seul contre les attaques et la confiance n’a jamais été rompue. Dans un dernier article, nous reviendrons sur la philosophie de ces projets et leur situation actuelle.


Benoit Perron

1 commentaire:

  1. On parle beaucoup de l’utilisation de blockhain autre que la blockchain des Bitcoin au sein d’une entreprise.

    Quel est l’utilité de mettre en place des blockhains privées au sein d’une entreprise?


    Pour moi la révolution apporté par la blockchain c’est la confiance distribuée. Mais au sein d’une entreprise il n’y a pas de problèmes de confiance. Autant utilisé une base de données centralisée…

    RépondreSupprimer