FR 3100631 A1 20210312 FR 1909894 A 20190909 La présente invention concerne une méthode d’authentification sélective d’un utilisateur d’une chaine de blocs auprès d’un contrat intelligent déployé sur ladite chaine de blocs. L’utilisateur dispose d’un portefeuille de clés hiérarchique déterministe comportant un chemin entre la clé privée maitresse de l’utilisateur et une clé privée spécifique au contrat intelligent, ce chemin comportant une pluralité d’embranchement portant chacun un indice, le contrat intelligent étant identifié de manière univoque par un ou plusieurs indices des embranchements empruntés par ledit chemin. L’utilisateur peut émettre une transaction à partir d’une adresse de compte émetteur, obtenue par hachage de la clé publique correspondant à ladite clé privée spécifique dans un cryptosystème asymétrique, et signer cette transaction au moyen de la clé privée spécifique. Le contrat intelligent vérifie, à partir de la signature, que la transaction a bien été émise par l’adresse de compte émetteur en question. Figure pour l'abrégé: Fig. 4 MÉTHODE D’AUTHENTIFICATION SÉLECTIVE D’UN UTILISATEUR DE CHAINE DE BLOCS AUPRÈS D’UN CONTRAT INTELLIGENT La présente invention concerne le domaine général des chaines de blocs ( blockchains ) et plus particulièrement celui des contrats intelligents ( smart contracts ). Etat de la technique antérieure Certaines chaînes de blocs permettent d’enregistrer des contrats intelligents, encore dénommés contrats autonomes ou smart contracts . Un exemple d’une telle chaine de blocs est Ethereum. Un autre exemple d’une telle chaine de blocs est Hyperledger. On rappelle qu’un contrat intelligent est un programme qui est déployé (c’est-à-dire stocké) dans la chaine de blocs et peut être exécuté par n’importe quel nœud du réseau. De manière générale, un contrat intelligent peut stocker des données, envoyer et recevoir des paiements, stocker un montant en cryptomonnaie (ether dans Ethereum), et exécuter des actions de manière autonome et décentralisée comme un agent logiciel. De manière générale, un contrat intelligent vérifie si un certain nombre de conditions d’entrée sont remplies et, dans l’affirmative, s’exécute automatiquement pour fournir un résultat codé dans le contrat. Pour déclencher l’exécution d’un contrat intelligent, une transaction doit être émise depuis l’adresse de portefeuille ( wallet ) d’un utilisateur de la chaîne de blocs vers l’adresse du contrat intelligent. Selon la terminologie d’Ethereum, la transaction est émise par un EOA ( Externally Owned Account ) à destination d’un compte de contrat ( contract account ). On distingue en effet, les EOAs qui sont contrôlés par les utilisateurs au moyen d’applications de portefeuille, des comptes de contrats, qui sont contrôlés par des codes de logiciel autonomes (ou contrats intelligents) exécutés par la machine virtuelle Ethereum ou EVM ( Ethereum Virtual Machine ). Les comptes de portefeuilles (EOAs), à la différence des comptes de contrat ne disposent pas de capacité de stockage ni de ressources d’exécution de code propres. Chaque compte d’utilisateur est associé à un couple de clé publique-clé privée d’un cryptosystème asymétrique, généralement un cryptosystème sur courbe elliptique, l’adresse du compte de l’utilisateur étant obtenue par hachage de la clé publique en question. La clé privée est en revanche connue de l’utilisateur seul. Lorsque l’utilisateur veut transmettre une transaction à la chaîne de blocs à partir de son compte, il la signe avec sa clé privée, par exemple au moyen de l’algorithme ECDSA ( Elliptic Curve Digital Signature Algorithm ). Chacun peut alors vérifier que la transaction a bien été signée par le titulaire du compte. En particulier, lorsqu’un contrat intelligent reçoit une transaction, celui-ci peut vérifier à partir de l’adresse du compte de l’utilisateur ayant émis la transaction que celle-ci a bien été signée par le titulaire du compte. Ce mécanisme d’authentification est systématique et préalable à la vérification des conditions d’exécution du contrat intelligent. On distingue généralement deux types de contrats intelligents : les contrats intelligents d’enregistrement de données et ceux d’utilisation de jetons ( tokens ). Un contrat intelligent d’enregistrement de données permet d’enregistrer dans le registre distribué de la chaîne de blocs des données ou bien des empreintes de données. Un tel contrat intelligent est déployé sur le registre distribué et est donc adressable et accessible par tous les utilisateurs de la chaîne de blocs. Même si l’adresse du compte d’utilisateur ne permet pas de remonter directement à l’identité de ce dernier, il n’en demeure pas moins que ses transactions sont auditables et traçables en raison du caractère public du registre distribué. Ainsi, il est possible de corréler des transactions émises à destination de contrats intelligents différents, ce qui peut trahir son identité. L’utilisateur peut ainsi souhaiter qu’un auditeur externe ne réussisse à établir de lien entre des transactions dont il est à l’origine et à destination de contrats distincts. Un second type de contrat intelligent utilise des jetons ( tokens ) encore dénommés cryptoactifs. Un jeton se distingue d’une cryptodevise (telles que l’ether ou le bitcoin par exemple) associée à une chaîne de blocs au sens où il n’est pas reconnu par le protocole gérant la chaine de blocs. Les jetons sont en effet générés exclusivement par des contrats intelligents qui sont aussi en charge des opérations portant sur leur propriété, les transferts et les droits d’accès. Les cryptoactifs ont récemment connu un grand succès en tant que support de levées de fonds en ICO ( Initial Coin Offering ). Les contrats intelligents utilisant des jetons, comme ceux gérant l’enregistrement de données, sont auditables par nature de la chaine de blocs. En particulier, dès lors que l’on connaît l’adresse d’un contrat intelligent, il est possible de le consulter pour connaître le solde en jetons de chaque titulaire. On peut alors rapprocher des opérations effectuées par un même titulaire et suivre son activité en surveillant les mouvements de ses cryptoactifs d’un contrat intelligent à l’autre. Afin de protéger la confidentialité des opérations qu’il effectue sur la chaine de blocs en faisant appel à des contrats intelligents, un utilisateur peut recourir à différents comptes (et donc à différentes adresses), chaque compte étant associé de manière unique à un couple de clé privée -clé publique. L’ensemble des clés privées associées aux adresses de compte est conservé dans un portefeuille de clés propre à l’utilisateur. De manière générale, on distingue les portefeuilles non déterministes (ou aléatoires) des portefeuilles déterministes. Dans un portefeuille non déterministe, aussi connu sous l’acronyme JBOK (Just a Bunch Of Keys), les clés sont générées de manière aléatoire. Ce type de portefeuille n’est pas structuré et sa gestion est donc complexe. En outre, la maintenance du portefeuille implique d’effectuer des opérations de sauvegarde relativement lourdes. Enfin, en cas de perte du portefeuille, l’utilisateur n’aura plus accès à ses cryptoactifs. Pour remédier à ces difficultés, on a généralement recours à des portefeuilles hiérarchiques déterministes dans lesquels toutes les clés privées sont générées, de manière arborescente, à partir d’un même germe. Autrement dit, la connaissance du germe permet de retrouver l’ensemble des clés privées du portefeuille. On trouvera une description de la structure des portefeuilles déterministes dans l’ouvrage de A.M. Antonoupulos et al. intitulé « Mastering Ethereum » pages 79-97. La Fig. 1 représente de manière schématique l’interaction d’un utilisateur équipé d’un portefeuille hiérarchique déterministe avec deux contrats intelligents, déployés sur une chaîne de blocs. L’utilisateur est ici titulaire d’un portefeuille de clés 110 contenant une première clé privée, , et une seconde clé privée, , dérivées de manière déterministe d’une clé privée maîtresse, . Les clés publiques correspondantes dans un cryptosystème asymétrique sont notées , . Par exemple, dans le cas d’un cryptosystème sur courbe elliptique, elles sont obtenues par et où est le point générateur de la courbe elliptique. Les adresses des comptes d’utilisateur, à partir de laquelle, l’utilisateur pourra émettre des transactions vers une chaine de blocs, sont obtenues à partir des clés publiques au moyen d’une fonction de hachage ou d’une combinaison de fonctions de hachage, soit : où correspond à une fonction de hachage ou une combinaison de fonctions de hachage. L’utilisateur peut alors transmettre, à partir de son adresse de compte , une transaction signée au moyen de la clé privée , à destination du contrat intelligent déployé sur la chaine de blocs 120. De la même façon, il peut transmettre, à partir de son adresse de compte une transaction signée au moyen de la clé privée , à destination du contrat intelligent . Un utilisateur tiers ne pourra donc corréler les origines des deux transactions. Les transactions peuvent comprendre des données (ou des empreintes de données) à enregistrer lorsque les contrats sont du premier type ou bien des instructions relatives à des jetons lorsque les contrats sont du second type. Dans tous les cas, même en disposant d’un portefeuille hiérarchique déterministe, un utilisateur devra conserver en mémoire et maintenir un tableau donnant les relations entre les adresses de compte et les contrats intelligents pour pouvoir s’authentifier de ces derniers. L’objet de la présente invention est par conséquent de proposer une méthode d’authentification permettant à un utilisateur de s’authentifier auprès de contrats intelligents déployés sur une chaîne de blocs sans avoir à gérer la complexité d’un portefeuille de clés et sans compromettre la confidentialité des opérations qu’il réalise au moyen de ces contrats. Présentation de l’invention La présente invention est définie par une méthode d’authentification d’un utilisateur d’une chaine de blocs auprès d’un contrat intelligent déployé sur ladite chaine de blocs, l’utilisateur disposant d’un portefeuille hiérarchique déterministe de génération de clés privées, organisé selon une structure arborescente, l’utilisateur transmettant une transaction à destination du contrat intelligent, ladite méthode étant spécifique en ce que : - le portefeuille hiérarchique déterministe comporte un chemin au sein de la structure arborescente, entre une clé privée maîtresse de l’utilisateur, à la racine de la structure arborescente, et une clé privée spécifique au dit contrat intelligent, l’utilisateur disposant d’une adresse de compte émetteur obtenue par hachage d’une clé publique correspondant à ladite clé privée spécifique dans un cryptosystème asymétrique, ledit chemin empruntant une pluralité d’ embranchements au sein de la structure arborescente, chaque embranchement portant un indice, le contrat intelligent étant identifié de manière univoque par un ou des indices des embranchements empruntés par ledit chemin; - l’utilisateur génère une transaction et la signe au moyen de la clé privée spécifique avant de la transmettre à destination du contrat intelligent; - le contrat intelligent, après réception de la transaction, vérifie la validité de la signature à partir de l’adresse de compte émetteur et si la transaction a bien été émise par l’adresse de compte émetteur. Avantageusement, un ou plusieurs indices d’embranchements dudit chemin sont donnés par le nom du contrat intelligent et/ou le symbole définissant ce contrat et/ou l’adresse de ce contrat sur la chaine de blocs. Le portefeuille hiérarchique déterministe est de préférence conforme à la structure de BIP-32. Selon un exemple de réalisation un embranchement dudit chemin a pour indice le symbole définissant le contrat. Selon un autre exemple de réalisation, l’adresse du contrat sur la chaine de blocs est représentée par une pluralité d’octets et une séquence d’embranchements dudit chemin ont pour indices respectifs les octets de ladite pluralité. Dans ce cas, le dernier embranchement de la séquence d’embranchements conduit à une feuille de l’arborescence, la clé privée spécifique étant générée au niveau de cette feuille. Brève description des figures D’autres caractéristiques et avantages de l’invention apparaîtront à la lecture d’un mode de réalisation préférentiel de l’invention, décrit en référence aux figures jointes parmi lesquelles : , déjà décrite, représente de manière schématique l’interaction d’un utilisateur équipé d’un portefeuille hiérarchique déterministe avec deux contrats intelligents déployés sur une chaîne de blocs ; représente de manière schématique la structure d’un portefeuille hiérarchique déterministe ; et représentent respectivement une première et une seconde méthode de génération de clés privées dans un portefeuille hiérarchique déterministe ; représente de manière schématique l’interaction d’un utilisateur équipé d’un portefeuille hiérarchique déterministe avec un contrat intelligent, selon un mode de réalisation de l’invention. Méthode d’authentification d’un utilisateur d’une chaine de blocs auprès d’un contrat intelligent déployé sur ladite chaine de blocs, l’utilisateur disposant d’un portefeuille hiérarchique déterministe de génération de clés privées, organisé selon une structure arborescente, l’utilisateur transmettant une transaction à destination du contrat intelligent, caractérisée en ce que : le portefeuille hiérarchique déterministe comporte un chemin au sein de la structure arborescente, entre une clé privée maîtresse de l’utilisateur, à la racine de la structure arborescente, et une clé privée spécifique au dit contrat intelligent, l’utilisateur disposant d’une adresse de compte émetteur obtenue par hachage d’une clé publique correspondant à ladite clé privée spécifique dans un cryptosystème asymétrique, ledit chemin empruntant une pluralité d’ embranchements au sein de la structure arborescente, chaque embranchement portant un indice, le contrat intelligent étant identifié de manière univoque par un ou des indices des embranchements empruntés par ledit chemin; l’utilisateur génère une transaction et la signe au moyen de la clé privée spécifique avant de la transmettre à destination du contrat intelligent; le contrat intelligent, après réception de la transaction, vérifie la validité de la signature à partir de l’adresse de compte émetteur et si la transaction a bien été émise par l’adresse de compte émetteur. Méthode d’authentification selon la revendication 1, caractérisée en ce qu’un ou plusieurs indices d’embranchements dudit chemin sont donnés par le nom du contrat intelligent et/ou le symbole définissant ce contrat et/ou l’adresse de ce contrat sur la chaine de blocs. Méthode d’authentification selon la revendication 2, caractérisée en ce que le portefeuille hiérarchique déterministe est conforme à la structure de BIP-32. Méthode d’authentification selon la revendication 3, caractérisée en ce qu’un embranchement dudit chemin a pour indice le symbole définissant le contrat. Méthode d’authentification selon la revendication 3, caractérisée en ce que l’adresse du contrat sur la chaine de blocs est représentée par une pluralité d’octets et qu’une séquence d’embranchements dudit chemin ont pour indices respectifs les octets de ladite pluralité. Méthode d’authentification selon la revendication 5, caractérisée en ce que le dernier embranchement de la séquence d’embranchements conduit à une feuille de l’arborescence, la clé privée spécifique étant générée au niveau de cette feuille.