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. Une attention particulière est ensuite portée aux mécanismes de consensus, avant de conclure par un panorama des technologies et des outils.

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.

Les propriétés de la blockchain
La désintermédiation. C’est la propriété la plus connue, à savoir la suppression du tiers de confiance qui se trouve 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 disparaître (cf. la notion « d’oracles » à la section « 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.
La 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 : 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.
La 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é.
L’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é.
L’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 la section « 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’en empêcher l’exécution.

De nouveaux cas d’usages
Grâce à ses propriétés, et notamment la désintermédiation, la blockchain est une nouvelle technologie qui pourrait bouleverser des domaines d’activité aussi variés que la finance, la logistique, l’énergie, la mobilité, etc. [9][10]. En collaboration avec ces secteurs, l’IRT SystemX travaille sur différents cas d’usage de la technologie : le passeport du véhicule connecté, l’interconnexion de plateformes (plateformes logistiques, plateformes de covoiturage), les places de marché décentralisées (pour les Green Bonds, pour l’échange d’énergie, pour les services de mobilité (cf Mobility-as-a-Service)) etc…

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 cryptomonnaie (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 cryptomonnaie 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 est 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, voir la section « Focus sur les 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 :

  • les « Soft forks » pour lesquels les transactions considérées comme valides par la nouvelle version sont également valables pour l’ancienne version ;
  • les « Hard forks » pour lesquels les 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)* 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

* 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.

Focus sur les 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 ou 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 n’est prédominant dans le système et ce mécanisme empêche également les attaques de type déni de service.
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* 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. 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 deux 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 B, 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 six 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 une 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.

Dans notre cas, un nonce est simplement un nombre arbitraire.

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 cryptomonnaie), 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 cryptomonnaies 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 cryptomonnaie 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 Fabric) 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 résilience. 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 de 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 permis de rembourser 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 deux aspects :

  • 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 Signature), 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.

Conclusion

Cette introduction à la blockchain s’est attachée à décrire les fondamentaux de la blockchain. Depuis 2 ans, on observe une mobilisation de la recherche sur le sujet, traduisant tout le potentiel de la technologie mais aussi sa faible maturité.

Pionnier dans ce domaine, l’IRT SystemX travaille avec ses partenaires académiques et industriels à lever les verrous techniques, économiques, juridiques ou de gouvernance nécessaires à la concrétisation de nouveaux services et usages basés sur cette nouvelle technologie.

 

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
[9] O. Dib, K. Brousmiche, A. Durand, E. Thea, E. Ben Hamida, Consortium Blockchains: Overview, Applications and Challenges. To appear in IARA International Journal On Advances in Telecommunications 2018
[10] Rapport du groupe de travail Blockchain des Assises Nationales de la mobilité, https://www.assisesdelamobilite.gouv.fr/syntheses.html

 

Cet article a été initialement publié dans la Revue de l’Électricité et de l’Électronique (2018). Il est retranscrit ici sous un format légèrement adapté.