Article

[DOSSIER] Les fondamentaux de la blockchain

Publié le 3 mai 2018

Architecte Programme pour l’IRT SystemX, Eric THEA, propose une introduction technique à la blockchain. Publié dans la revue REE, cet article décrit les éléments constitutifs de cette nouvelle technologie.

L’auteur

Eric THEA © D.R.

Eric THEA est coordinateur technique du programme territoires intelligents de l’IRT SystemX. Il travaille sur les thèmes de la mobilité, de l’énergie et des nouveaux usages basés sur la blockchain dans la ville de demain. Il est diplômé de l’Ecole Polytechnique et de l’université de Stanford.

Résumé

Cet article est une introduction technique à la blockchain. Après une mise en perspective et une justification de son intérêt pour l’émergence de nouveaux cas d’usage, l’article décrit les éléments constitutifs de la technologie. Puis une attention particulière est portée aux mécanismes de consensus, avant de conclure par un panorama des technologies et outils.

Téléchargez gratuitement le Livre Blanc : Blockchain, Myth or Reality, du Pôle Systematic ici.

Introduction

La blockchain (chaîne de blocs) est une technologie nouvelle, qui repose sur des éléments techniques anciens et connus. En effet, c’est bien l’assemblage astucieux de mécanismes d’échanges distribués, de consensus et de cryptographie, au service d’usages nouveaux, qui créent l’innovation dont on parle tant aujourd’hui.

Plus précisément, une blockchain est :

  • une structure de données distribuée, c’est-à-dire partagée et répliquée parmi les nœuds d’un réseau,
  • dont le contenu est validé grâce à un mécanisme de consensus,
  • et qui est sécurisée par des outils cryptographiques.

Intérêt de la blockchain

Avant de plonger dans la description de la technologie, intéressons-nous aux propriétés de la blockchain et aux cas d’usage nouveaux qu’elle permet d’engendrer.

Découvrez le Groupe Thématique Confiance Numérique, Sécurité & Défense du Pôle Systematic Paris-Region

Propriétés de la blockchain

Désintermédiation. C’est la propriété la plus connue, à savoir la suppression du tiers de confiance remplacé par la technologie. En réalité, il serait plus exact de dire que la place des tiers de confiance va être déplacée et évoluer, sans toutefois disparaitre (cf. la notion d’oracles, voir § Technologies et outils de la blockchain). Un exemple concret de désintermédiation est l’application blockchain la plus connue: le Bitcoin. Il s’agit d’une monnaie électronique qui fonctionne sans passer par les intermédiaires traditionnels que sont les banques. Ainsi, les échanges se font directement de pair-à-pair entre les participants, et c’est le réseau qui valide les transactions grâce à un mécanisme de consensus.

Résilience. La blockchain est partagée et répliquée sur tous les nœuds du réseau. Grâce à cette démultiplication de l’information, le système apparait résilient contre certaines pannes : ainsi si un nœud du réseau devient défaillant, les autres nœuds restent disponibles et le service continue à être rendu. A l’inverse, dans une architecture centralisée, si le nœud central tombe en panne, l’ensemble du système s’écroule.

Transparence. Le contenu de la blockchain est validé par des membres du réseau grâce à un mécanisme de consensus, ce qui impose une certaine transparence dans le système. Cette transparence n’est toutefois pas complétement incompatible avec la notion de confidentialité.

Immuabilité. La blockchain est une structure de données dans laquelle on peut rajouter des informations, sans pouvoir en soustraire : une fois qu’une transaction est inscrite dans la blockchain, elle ne peut en principe être retirée. C’est l’utilisation d’outils cryptographiques, associée au consensus, qui garantissent cette propriété d’immuabilité.

Automatisation. Sans être une propriété fondamentale de la blockchain, elle est particulièrement mise en avant dans les nouvelles générations d’implémentations (cf. les smart contracts d’Ethereum, voir § Technologies et outils de la blockchain). Ainsi, les transactions peuvent être automatiquement déclenchées lorsque des conditions prédéfinies sont remplies, sans intervention humaine et sans possibilité d’empêcher leur exécution.

De nouveaux cas d’usage

Le lecteur est invité à se référer à l’article de Gilles Deleuze et Sara Tucci pour une cartographie des usages potentiels de la blockchain. Par ailleurs, deux autres articles détaillent des cas d’usage concrets : celui de l’autoconsommation collective (article de Karl Axel Strang et Caroline Plaza), où l’on voit effectivement bien comment la désintermédiation, la transparence et l’immuabilité permettent ce nouveau mécanisme d’échanges d’énergie, et celui de la gestion de l’énergie (article de Thierry Chambon) où ces mêmes propriétés sont aussi mises à profit.

Constituants techniques de la blockchain

Repartons de la définition initiale : une blockchain est une structure de données distribuée, dont le contenu est validé grâce à un mécanisme de consensus, et qui est sécurisée par des outils cryptographiques. Regardons maintenant chacun de ces éléments constitutifs.

Structure de données

La structure de données correspond à une liste chaînée de transactions. Ainsi, chaque élément de la liste représente un bloc de plusieurs transactions, et possède un pointeur vers le bloc précédent : chaque nouveau bloc bi qui est ajouté contient effectivement une référence au contenu du bloc précédent bi-1. L’ensemble forme donc une chaîne de blocs, ou blockchain.

Figure 1 : chaîne de blocs

 

Réseau distribué

Nœuds. Les participants d’une blockchain sont des nœuds informatiques qui forment un réseau pair-à-pair (peer-to-peer en anglais). Selon l’implémentation de la blockchain, le réseau est soit public (tout le monde peut y accéder) soit privé ou semi-privé (seuls les comptes autorisés peuvent participer, on parle aussi de blockchain de consortium). Chaque nœud possède une copie locale de l’ensemble de la blockchain (ou de ses en-têtes, qui en constituent un « résumé »). Lorsqu’il rejoint pour la première fois le réseau, un nœud peut typiquement récupérer la blockchain et vérifier l’intégrité des blocs qui la constituent. On voit ici bien apparaitre la propriété de transparence de la blockchain. Ce nœud, comme chaque autre nœud, dispose ainsi de l’historique de toutes les transactions qui ont été réalisées dans le réseau depuis son origine jusqu’à ce jour. Il pourra à partir de là maintenir cette copie de la blockchain à jour, le système étant bien sûr conçu de manière à ce que toutes ces copies soient identiques ou convergent vers une vue identique (cf. le mécanisme de consensus). On note ici que la blockchain est un registre qui croît indéfiniment à mesure que les nouvelles transactions y sont enregistrées : cette inflation de la taille de la blockchain est aujourd’hui un verrou technologique et fait l’objet de recherche.

Chaque nœud peut émettre des transactions et demander au réseau d’ajouter ces transactions à la blockchain, ces transactions en attente sont ensuite validées par certains nœuds particuliers appelés les «mineurs» (miners en anglais) (également appelés générateurs de blocs ou valideurs).

Mineurs. Les mineurs sont des nœuds prêts à partager leur puissance de calcul pour valider les transactions et ajouter des blocs à la blockchain, généralement en échange d’une rémunération en crypto-monnaie (cas des blockchains publiques). La rémunération dépend de l’implémentation de la blockchain, mais elle peut prendre au moins deux formes non exclusives : soit via des frais de transaction (c’est-à-dire que le nœud qui émet la transaction paie le mineur pour son travail), soit via la création ex-nihilo de valeur (c’est le cas par exemple pour Bitcoin où, à chaque ajout de bloc, le système crée de la crypto-monnaie et l’attribue au mineur qui a réalisé cet ajout).

Mécanisme de consensus

Tous les mineurs sont en compétition pour ajouter le prochain bloc à la blockchain mais un seul d’entre eux sera sélectionné pour le faire (et lui seul sera rémunéré), cette sélection étant aléatoire pour chaque nouveau bloc. Ce caractère aléatoire est très important pour la sécurité de la blockchain: puisque personne ne sait quel mineur sera choisi, un mineur malveillant a une faible probabilité d’être sélectionné, et a donc peu d’intérêt à attaquer le système puisqu’il a peu de chance de réussir dans son entreprise. Cela conduit à la fameuse attaque des 51%: si plus de la moitié du pouvoir de validation du réseau est détenue par un attaquant, il a alors statistiquement plus de chances que son attaque réussisse qu’elle n’échoue, et donc le réseau peut être considéré comme étant sous son contrôle.

Consensus. Il existe différentes façons de réaliser cette sélection aléatoire des mineurs : ce sont les mécanismes de consensus. Les blockchains publiques utilisent habituellement un consensus par preuve de travail (Proof of Work, cf. § Mécanismes de consensus), de sorte que plus la puissance de calcul d’un mineur est élevée, plus grande est la probabilité qu’il soit sélectionné. Comme la puissance de calcul est coûteuse, le coût d’acquisition de 51% de la puissance totale de calcul du réseau est élevé. C’est une façon de sécuriser le réseau, en rendant le coût d’une attaque disproportionnée par rapport au bénéfice. Les blockchains privées (dans lesquelles les nœuds appartiennent à une même entité) ou les blockchains semi-privées (dans lesquelles les nœuds appartiennent à un consortium de différents utilisateurs autorisés) n’ont pas besoin d’un mécanisme de consensus aussi coûteux que le Proof of Work, car les participants sont connus et de confiance dans une certaine mesure. Dans ce cas, le mécanisme de consensus utilisé est beaucoup plus simple. Voir ci-dessous pour plus de détails sur différentes implémentations de consensus.

Forks. Une fois que le bloc d’un mineur a été sélectionné, il est ajouté à la blockchain et l’information est diffusée. En raison d’effets de réseau, il peut exister des cas où plusieurs mineurs sont sélectionnés quasi-simultanément, si bien qu’il existe différentes versions de la blockchain dans différentes régions du réseau. C’est ce qu’on appelle un «fork» (embranchement) : la blockchain se subdivise en branches. Le mécanisme de consensus doit alors être assez robuste pour résoudre ce scénario. En d’autres termes, tous les nœuds « honnêtes » devraient converger dans le futur, d’une façon ou d’une autre, pour revenir à une seule et unique version de la blockchain [4]. Dans la pratique, le consensus par la preuve de travail atteint cet objectif en obligeant les mineurs à travailler sur la branche la plus longue qu’ils rencontrent.

En outre, le logiciel des mineurs est parfois mis à jour pour corriger des bugs, modifier des protocoles, ou ajouter des fonctionnalités. Cela peut également créer des forks, car différents nœuds peuvent gérer les transactions différemment en fonction de leur version de logiciel. Nous distinguons habituellement :

  • «Soft forks» où les transactions considérées comme valides par la nouvelle version sont également valables pour l’ancienne version.
  • «Hard forks» où des transactions jugées invalides par l’ancienne version peuvent être valables pour la nouvelle version.

Outils cryptographiques

Des outils cryptographiques sont utilisés pour garantir l’intégrité de la blockchain, l’identité du participant, l’authenticité des transactions et (parfois) la confidentialité du contenu.

Fonction de hachage. La fonction de hachage est notamment utilisée pour chaîner les blocs entre eux. Ainsi, l’en-tête d’un bloc contient le «hash», résultat de l’application d’une fonction de hachage (hash function)[1], du bloc précédent. Ce hash est un élément clé de l’intégrité de la blockchain. Ainsi, si un attaquant du système modifie le contenu d’un bloc bm, n’importe qui peut le détecter en calculant le hash du bloc, et en comparant ce résultat avec le hash stocké dans le bloc suivant bm+1 pour voir qu’il existe une incohérence. Afin d’éviter d’être détecté, l’attaquant devrait donc changer tous les blocs et leurs hachages, du bloc bm au dernier bloc en cours. Cependant, les blocs ne peuvent pas être facilement modifiés compte tenu du protocole défini pour l’ajout de blocs (voir section précédente sur le mécanisme de consensus). On perçoit donc là une propriété importante de la blockchain : l’immuabilité. Une fois qu’une transaction est inscrite dans la blockchain, elle est très difficilement modifiable.

Identité. Une identité sur la blockchain est définie par une adresse numérique, dérivée d’une paire de clés: une clé privée qui n’est connue que par son propriétaire et une clé publique destinée à être partagée avec d’autres utilisateurs. D’un point de vue technique, ces deux clés correspondent à des nombres hexadécimaux et sont liées entre elles par une fonction mathématique. Ces clés sont utilisées pour l’identification et pour la signature des transactions. Perdre sa clé privée revient à perdre son identité sur la blockchain.

Signature. Lorsqu’un utilisateur enregistré souhaite ajouter une transaction à la blockchain, il l’envoie au réseau afin que les mineurs puissent la recevoir, la vérifier et l’ajouter à leur bloc. Mais pour être vérifiées, les transactions (qui sont des données) doivent être signées afin que le mineur puisse identifier incontestablement l’expéditeur. La signature est générée par une fonction cryptographique qui prend en entrée les données d’origine et la clé privée de l’expéditeur, et fournit en sortie une signature. Cette signature est vérifiable par toute personne utilisant une autre fonction qui vérifie la cohérence entre les données, la signature et la clé publique. Par conséquent, lors de l’envoi de données, l’expéditeur ajoute également la signature correspondante et sa clé publique.

 

Figure 2: principes (simplifiés) de fonctionnement de bitcoin

 

Mécanismes de consensus

Dans cette section, nous décrivons les principaux mécanismes de consensus utilisés aujourd’hui dans les blockchains. Il n’existe pas de mécanisme de consensus universel car, comme nous le verrons, chaque mécanisme présente des avantages et des inconvénients.

Preuve de travail (Proof of Work, PoW)

Ce mécanisme est notamment utilisé dans les blockchains publiques Bitcoin [1] et Ethereum [2]. Il garantit que chaque mineur fournit en moyenne une quantité suffisante de puissance de calcul avant de valider un bloc. Plus exactement, son pouvoir de validation est proportionnel à la puissance de calcul qu’il met en jeu (on parle de hashrate). Ainsi, dans un réseau distribué avec une puissance de calcul bien répartie, aucun acteur ne prédomine le système et ce mécanisme empêche également les attaques de type déni de service.

Ainsi, pour ajouter un bloc de données dans la blockchain, chaque mineur doit valider les données du bloc courant (i.e. sa cohérence avec les blocs précédents) et résoudre un puzzle cryptographique. Le puzzle consiste à trouver un nonce[2] parmi N entiers de sorte que le hash des données combinées avec le nonce commence par au moins « p » zéros. La seule stratégie pour résoudre ce puzzle est en pratique de tester tous les nonces possibles. Une fois qu’un mineur a résolu le puzzle, il peut ajouter les données correspondantes avec son hash et son nonce à la blockchain. Ainsi, la complexité de la résolution de ce puzzle est directement fonction du nombre « p » de zéros requis : plus « p » est grand, plus le puzzle est compliqué, i.e. plus le nombre de nonces à tester devra en moyenne être élevé. Ce paramètre permet au système blockchain d’ajuster la difficulté des puzzles pour contrôler le temps moyen de validation d’un bloc (car ce temps est directement corrélé au hashrate global du système). Par exemple, par conception, Bitcoin maintient un temps moyen de validation d’un bloc de 10 minutes en ajustant ce nombre « p » tous les 2016 blocs (environ 2 semaines).

Étant donné que ce protocole est utilisé sur un réseau décentralisé, bien que la probabilité soit faible, deux blocs Bi différents peuvent être générés quasi-simultanément (i.e. pour un même index « i » de bloc) par deux mineurs différents. Cela conduit la blockchain à se subdiviser en deux branches. Dans ce cas, il appartient au mineur validant le bloc suivant Bi+1 de choisir la branche (c’est-à-dire la version du bloc Bi) qu’il décidera d’utiliser. Ensuite, un troisième mineur ayant à valider un bloc devra également choisir une branche, et ainsi de suite. Le protocole demande aux mineurs d’opter pour la branche la plus longue, tandis que les branches sur lesquelles personne ne mine seront peu à peu abandonnées, créant des blocs orphelins. Il est généralement admis sur Bitcoin qu’une branche d’environ 6 blocs peut être considérée comme la branche principale. Ce qui signifie que pour être sûr qu’une transaction est valide et que le bloc qui la contient ne deviendra pas orphelin, il faut attendre environ 1 heure sur Bitcoin (c’est-à-dire 6 x 10 minutes). On entrevoit ici les limites de Bitcoin pour le passage à l’échelle de certaines applications [8].

La conséquence de ce mécanisme de consensus est évidente: il repose sur du travail informatique et donc de l’énergie électrique ; d’ailleurs plus la puissance de calcul utilisée dans le réseau est élevée, plus celui-ci est sécurisé. Cela explique les critiques qui sont parfois émises envers Bitcoin, à savoir qu’elle serait une blockchain très énergivore.

Proof of Stake (PoS)

Ce mécanisme de consensus repose sur l’idée que plus un utilisateur a d’intérêts dans la blockchain (par exemple plus il possède de crypto-monnaie), moins il risque d’attaquer le système [3]. Ainsi, il devrait être favorisé dans le choix pour la prochaine génération de blocs.

Dans la pratique, il existe de nombreuses implémentations. Souvent, on combine des crypto-monnaies mises en gage avec un processus aléatoire (randomization). Un autre exemple est la sélection du valideur basée sur la durée de possession de la crypto-monnaie par son propriétaire. Des propositions alternatives combinent PoS avec d’autres mécanismes de consensus tels que le PoW. Bien que le PoS soit efficace, il a également des limites. Un problème bien connu s’appelle le problème de l’enjeu nul (nothing-at-stake issue). En effet, s’il existe une branche valide A et une autre B, le consensus devrait amener les générateurs de blocs (c’est-à-dire les mineurs) à choisir l’une d’entre elles. Dans le cas du Proof of Work, ce choix est basé sur la branche la plus longue, et les mineurs sont rationnellement incités à faire ce choix : en effet, s’ils travaillent sur la branche la plus courte, ils risquent de dépenser leur énergie en pure perte puisque cette branche sera probablement abandonnée par la suite. Cependant, dans le cas du Proof of Stake, s’il n’y avait aucun coût à choisir l’une ou l’autre, une stratégie serait de choisir les deux branches afin de maximiser ses chances de gagner de l’argent dans la génération de blocs. Dès lors, des solutions différentes ont été proposées pour résoudre ce problème spécifique, impliquant généralement un dépôt de garantie qui peut être perdu en cas de mauvais comportement dans le réseau.

Practical Byzantine Fault Tolerance (PBFT)

PBFT [6] est un algorithme de réplication capable de tolérer les «fautes byzantines». Dit simplement, cet algorithme garantit la cohérence du consensus tant que les deux tiers des nœuds du réseau sont sécurisés (c’est-à-dire qu’ils ne sont ni malveillants, ni défectueux). Ceci est permis par l’application de protocoles pour choisir un leader parmi eux, pour permettre à ce leader d’imposer les transactions valides, et enfin de pouvoir changer de leader de manière sécurisée. Cependant, cette méthode exige que tous les nœuds générateurs se connaissent et qu’ils doivent communiquer entre eux. Par conséquent, le réseau doit être privé et son échelle limitée pour rester performant [7].

Technologies et outils de la blockchain

Smart contract

Le concept de smart contract (également appelé chaincode dans l’implémentation Hyperledger) a d’abord été mis en œuvre par Ethereum. Ce sont des programmes informatiques exécutés par les mineurs. Leur déploiement et leur exécution sont déclenchés par les utilisateurs via des transactions. Comme toute autre transaction, les exécutions de smart contracts bénéficient également des propriétés de la blockchain: désintermédiation, immuabilité, transparence et disponibilité. Par ailleurs, on peut offrir un service automatisé sur la blockchain à travers un smart contract dont l’exécution est assurée par le réseau. Par exemple, un smart contract pourrait représenter la propriété d’un objet que l’on peut vendre ou acheter lors d’une vente aux enchères. Une fois placé sur le marché par son propriétaire, les acheteurs intéressés émettent leur offre en plaçant de l’argent sur ce contrat. Puis, une fois les enchères terminées, le propriétaire appelle la fonction de vente de son objet. Cette fonction sélectionne alors automatiquement la meilleure offre et transfère la propriété de l’objet au meilleur acheteur. Les autres enchérisseurs sont alors automatiquement remboursés de leur mise par le smart contract et le vendeur reçoit automatiquement son argent. De cette façon, toutes les transactions sont sécurisées par le smart contract et le réseau, sans intervention de tiers de confiance.

Oracles

Dans la section précédente, nous avons vu que les smart contracts permettent l’automatisation des transactions selon des conditions programmées. Cependant, les conditions sont limitées à des informations internes de la blockchain: les informations sur les transactions et le code source du smart contract. C’est ici qu’interviennent les oracles. Ils fournissent un service qui permet la communication entre la blockchain et le monde extérieur. De cette façon, un smart contract peut être au courant de la météo, des résultats d’un match de football, des informations de vol d’un avion spécifique, etc. puis utiliser ces informations dans le calcul de son état. Il est également possible de produire des données à destination du monde réel à partir de la blockchain. Par exemple, afin d’informer un utilisateur par courrier électronique de l’exécution du contrat.

Organisation autonome décentralisée (Decentralized Autonomous Organization, DAO)

Une organisation autonome décentralisée, ou DAO, est une organisation qui repose sur les règles mises en œuvre dans des smart contracts. L’exemple de DAO la plus célèbre, mise en œuvre sur Ethereum, s’appelle « the DAO », qui a été conçue pour financer de manière participative (crowdfunding) des projets à but lucratif. Ce qui l’a rendue si célèbre, c’est que, lancé en mai 2016, ce projet a réussi à collecter l’équivalent d’environ 150 millions de dollars en 28 jours. Malheureusement, un bug dans le programme informatique « the DAO » a été exploité pour détourner une partie de cet argent (environ 50 millions de dollars), soulignant ainsi les risques et la faible maturité de la technologie [5]. À la suite de ce bug, le projet a été arrêté et un hard fork de la blockchain Ethereum a remboursé les montants collectés auprès des participants. Malgré cet incident malheureux, le concept général de DAO continue de représenter, à juste titre, une perspective intéressante pour les applications blockchain.

Confidentialité des données

La notion de confidentialité englobe 2 notions :

  • Une transaction est considérée anonyme si nous ne pouvons pas identifier son émetteur / destinataire.
  • Une transaction est considérée privée si l’objet et le montant de la transaction sont inconnus.

Plusieurs outils cryptographiques peuvent être utilisés pour garantir la confidentialité des données. Citons le chiffrement homomorphe, qui permet de réaliser des calculs sur des données chiffrées sans avoir besoin au préalable de les déchiffrer. Citons également la technique de preuve à divulgation nulle de connaissance (Zero-Knowledge proof), qui permet à un interrogateur de vérifier qu’une information secrète est véridique, sans avoir à connaître réellement le secret. Citons enfin la signature de cercle (Ring Signatures), un protocole qui permet à une entité de signer une transaction avec une clé appartenant à un ensemble de clés, sans révéler quelle clé a effectivement signé la transaction.

Références

  1.  S. Nakamoto, “Bitcoin: A peer-to-peer electronic cash system”, May 2009: https://bitcoin.org/bitcoin.pdf
  2.  Buterin, Vitalik. “A next-generation smart contract and decentralized application platform.” white paper (2014).
  3.  A. Poelstra. On Stake and Consensus. https://download.wpsoftware.net/bitcoin/pos.pdf
  4. Juan A. Garay, Aggelos Kiayias, Nikos Leonardos: The Bitcoin Backbone Protocol: Analysis and Applications. EUROCRYPT (2) 2015: 281-310: https://eprint.iacr.org/2014/765.pdf
  5. N. Atzei, M. Bartoletti, T. Cimoli, A survey of attacks on Ethereum smart contracts, IACR Cryptology ePrint Archive 2016: 1007 (2016)
  6. M. Castro, B. Liskov, Practical Byzantine Fault Tolerance, Proceedings of the Third Symposium on Operating Systems Design and Implementation, New Orleans, USA, February 1999
  7. M. Vukolic: The Quest for Scalable Blockchain Fabric: Proof-of-Work vs. BFT Replication. LNCS 9591, Proc. iNetSeC 2015.
  8. K. Croman, C. Decker, I. Eyal, A. E. Gencer, A. Juels, A. Kosba, A. Miller, P. Saxena, E. Shi, E. Gün Sirer, D. Song, and R. Wattenhofer, On Scaling Decentralized Blockchains, FC 2016 International Workshops

[1]  Une fonction de hachage (hash function) prend une donnée d’entrée et produit un hash, une donnée de taille fixe qui est spécifique à l’entrée, telle une empreinte digitale. Cette fonction permet notamment de vérifier l’intégrité d’une donnée, en comparant le résultat de la fonction de hachage avec le hash d’origine
[2]   Dans notre cas, un nonce est simplement un nombre arbitraire.

 

Retrouvez 3 articles du dossier blockchain en ligne ci-dessous :

Retrouvez l’intégralité du dossier : Blockchain et ses applications au domaine de l’énergie dans la revue REE du mois de mai 2018.