Explications sur les Signatures à Seuil
Accueil
Articles
Explications sur les Signatures à Seuil

Explications sur les Signatures à Seuil

Avancé
Publié le Jul 21, 2019Mis à jour le Apr 29, 2021
12m
Le système de signature à seuil (TSS, pour Threshold Signature Scheme) est une primitive cryptographique pour la génération et la signature de clés distribuées. L'utilisation de TSS dans les clients blockchain est un nouveau paradigme qui peut offrir de nombreux avantages, en particulier en termes de sécurité. Sur le plan général, la TSS peut influencer la conception de systèmes de gestion des clés (comme les portefeuille crypto) et ouvrir la voie à une assistance native dans des cas d'utilisation DeFi . Cela dit, la SST en est toujours a ses balbutiements en tant que technologie, et il faut donc tenir compte des risques et des limitations.

Dans cet article, nous couvrirons ce qu'est une TSS, quels sont les avantages potentiels qu'elle apporte à l'espace de la blockchain, comment elle peut être mise en œuvre dans un client blockchain, sa comparaison au partage secret Shamir et au Multisig, les différentes façons de l'utiliser pour une gestion de clés distribuées et enfin nous discuterons des risques et des limitations.

Le pouvoir de la cryptographie

Pour comprendre la TSS, nous avons d'abord besoin de connaissances de base à propos de la cryptographie. Depuis les années 1970, de plus en plus de systèmes Internet (comme TLS et PGP) utilisent la cryptographie asymétrique, qui est aussi connue sous le nom de cryptographie de clé publique (PKC). PKC utilise deux clés : l'une publique et l'autre privée. Bien que la clé publique ne soit pas gardée secrète et puisse être publiée et utilisée par quiconque, la clé privée est un élément d'information secret qui incarne la sécurité du système.
Le Chiffrement et les signatures numériques sont les deux usages les plus courants pour PKC. Les systèmes de chiffrement et de signature numérique dépendent tous deux de trois algorithmes. Premièrement, la génération de paires clés privées et publiques. Deuxièmement, la génération d'un chiffrement et/ou d'une signature, et troisièmement, le processus de déchiffrement/vérification. En ce qui concerne les signatures numériques, l'algorithme de signature nécessite la clé privée, connue uniquement par son propriétaire, pour produire une signature unique. La signature est attachée à un message en particulier, de manière à ce que quiconque détenant la clé publique puisse vérifier son authenticité et son exactitude.


Blockchain

Il ne fait aucun doute que la blockchain est une technologie très puissante. Elle fournit une couche de consensus qui organise et enregistre les événements. Une telle infrastructure nous donne, à nous les utilisateurs, le pouvoir potentiel de construire des économies décentralisées et même des gouvernements. De manière assez surprenante, la cryptographie nécessaire pour exécuter une blockchain de base peut s'appuyer uniquement sur des signatures numériques. Dans le contexte d'une blockchain, les clés privées représentent des identités alors qu'une signature est une déclaration publique ou une revendication faite par une identité. La blockchain classe les déclarations et les valide selon un ensemble de règles, ce qui garantit, entre autres, que les signatures sont infalsifiables et correctes.
Contrairement à la cryptographie plus classique utilisée dans la blockchain, la boîte à outils cryptographiques moderne inclut des tours de magie impressionnants: des preuves à divulgation nulle de connaissance, le chiffrement homomorphique et le calcul multi-parties, pour n'en nommer que quelques-uns. Comme nous l'avons vu au cours de la dernière décennie, la recherche sur la blockchain a fortement développé la cryptographie appliquée, avec des percées récentes dans tous les domaines susmentionnés et bien plus encore. 

Dans cet article, nous nous concentrerons sur une seule de ces percées: les signatures à seuil sécurisées (TSS) efficaces.


MPC et le système de signature à seuil (TSS)

Le calcul multi-partis (MPC pour Multi-Party Computation) est une branche de la cryptographie qui est née avec l'oeuvre fondatrice de Andrew C. Yao, il y a près de 40 ans. Dans le MPC, un ensemble de parties n'ayant aucun lien de confiance les uns envers les autres essaient de calculer conjointement une fonction sur leurs entrées tout en gardant ces entrées privées.

Par exemple, disons que n employés d'une entreprise veulent savoir lequel d'entre eux perçoit le plus haut salaire sans se révéler mutuellement leur salaire réel. Ici, les intrants privés sont les salaires et la sortie sera le nom de l'employé qui perçoit le plus haut salaire. En faisant ce calcul à l'aide de MPC nous nous assurons qu'aucun des salaires n'est divulgué pendant le calcul.

Les deux principales propriétés du MPC sont la justesse et la confidentialité :

  • Justesse: la sortie produite par un algorithme est correcte (comme attendu).

  • Confidentialité : les données secrètes d'entrée qu'une partie prenante détient ne seront pas divulguées aux autres parties.

Nous utiliserons MPC pour calculer une signature numérique de manière distribuée. Voyons voir comment les propriétés listées ci-dessus peuvent être appliquées aux signatures. Rappelez vous, pour les signatures, nous avons trois étapes à valider:

  • Génération de clés : la première étape est aussi la plus complexe. Nous devons générer une clé publique et l'utiliser pour vérifier les futures signatures. Mais nous devons aussi générer un secret individuel pour chaque partie, que nous appellerons la bribe secrète. En termes de justesse et de confidentialité, nous disons que la fonction va produire la même clé publique pour toutes les parties d'un côté, et de l'autre une bribe secrète pour chacun de ces éléments tel que: (1) confidentialité: aucune donnée secrète n'est divulguée entre les parties, et (2) justesse: la clé publique est une fonction des bribes secrètes.

  • Signature: cette étape implique une fonction de génération de signature. L'entrée de chaque partie sera sa bribe secrète, créé comme sortie de l'étape précédente (génération de clés distribuées). Il y a aussi une entrée publique connue de tous, qui correspond au message à signer. La sortie sera une signature numérique, et la propriété de confidentialité s'assure qu'aucune fuite de bribe secrète n'a eu lieu pendant le calcul.

  • Vérification : l'algorithme de vérification reste tel qu'il est dans le cadre classique. Pour être compatible avec les signatures de clés uniques, tout le monde ayant connaissance de la clé publique doit pouvoir vérifier et valider les signatures. C'est exactement les noeuds validateurs de la blockchain font.

Le système de signature à seuil (TSS) est donc le nom que nous donnons à cette composition de génération de clés distribuées (DKG) et de signatures distribuées d'un schéma de signature à seuil.


Combinaison TSS et blockchain

La façon naturelle d'utiliser les TSS dans une blockchain est de modifier un client blockchain pour générer des clés et des signatures à l'aide de TSS. Ici, nous utilisons le client blockchain pour consulter l'ensemble des commandes exécutées par un noeud complet. En pratique, la technologie TSS nous permet de remplacer toutes les commandes privées liées aux clés par des calculs distribués.

Pour l'expliquer plus en détail, nous commençons par décrire brièvement comment de nouvelles adresses sont créées sur le design d'une blockchain classique. Formulé simplement, nous pouvons créer une nouvelle adresse en générant une clé privée, puis en calculant la clé publique à partir de la clé privée. Puis, l'adresse au sein de la blockchain est dérivée de la clé publique.

Maintenant, en utilisant TSS, nous aurions un ensemble de n parties qui calculent conjointement la clé publique, chacune détenant une bribe secrète de la clé privée (les actions individuelles ne sont pas révélées aux autres parties). De la clé publique, nous pouvons tirer l'adresse de la même manière que dans un système traditionnel, rendant la blockchain agnostique à la manière dont l'adresse est générée. L'avantage étant que la clé privée n'est plus un point critique localisé, car chaque partie ne détient qu'une fraction de celle-ci.

Il en va de même lors de la signature des transactions. Dans ce cas, au lieu d'avoir une seule partie qui signe avec sa clé privée, nous lançons une génération de signatures distribuées entre plusieurs parties. Chaque partie peut donc produire une signature valide tant qu'elle agit honnêtement. Encore une fois, nous sommes passés du calcul local (point critique unique) à un calcul interactif.

Il est important de mentionner que la génération de clés distribuées peut être effectuée de manière à permettre différents types de structures d'accès : le paramètre général "t hors de n" sera capable de résister à t échecs arbitraires dans les opérations liées à des clés privées, sans compromettre la sécurité.


TSS vs Multisig

Certaines blockchains offrent des fonctionnalités TSS comme une partie intégrée ou programmable du logiciel. Cette fonctionnalité s'appelle multisig ou multi-signature. Pour mieux comprendre les différences, nous pouvons considérer le multisig comme une TSS dans la couche d'application de la blockchain.

En d'autres termes, le multisig et le TSS tentent essentiellement d'atteindre des objectifs similaires, mais le TSS utilise la cryptographie hors chaîne, tandis que le multisig se produit sur la chaîne. Cependant, la blockchain a besoin d'une manière d'encoder le multisig, ce qui pourrait nuire à la confidentialité parce que la structure d'accès (le nombre de signataires) est exposée sur la blockchain. Le coût d'une transaction multisig est plus élevé parce que les informations sur les différents signataires doivent également être communiquées sur la blockchain.

Dans la TSS, les détails concernant les signataires sont inclus dans une transaction à apparence régulière, réduisant les coûts et maintenant la confidentialité. Par contre, le multisig peut être non interactif, ce qui permet d'éviter la difficulté d'utiliser une couche de communication complexe entre les différents signataires.

Le principal point de différence, c'est donc que le multisig est spécifique à la blockchain et doit être réimplémenté pour chaque blockchain, et dans certains cas il n'est pas du tout pris en charge. À l'inverse, TSS se fonde sur une cryptographie pure, son support est donc toujours possible. Pour aller plus loin, vous trouverez un article brillant illustrant bien les différences ici.


TSS vs Système de partage secret Shamir

Le système de partage secret Shamir (SSSS pour Shamir Secret Sharing Scheme) permet de stocker une clé privée d'une manière distribuée de telle sorte que, alors que la clé privée est inutilisée, elle soit stockée dans plusieurs endroits à la fois. Il y a deux différences entre SSSS et TSS :

  • Génération de clé: avec le SSSS, il y a une seule partie appelée le dealer, qui est en charge de générer les bribes secrètes de clé privée. Cela signifie qu'au moment de la génération de clés, la clé privée est générée à un seul endroit et ensuite distribuée par le dealer en différents lieux. Dans le TSS, il n'y a pas de dealer car son rôle est distribué de telle sorte que la clé privée complète ne se trouve jamais à un seul endroit.

  • Signature : en SSSS, les parties doivent reconstruire la clé privée complète afin de signer, ce qui donne une fois de plus des points critiques uniques à chaque fois qu'une signature est nécessaire. Avec la TSS, la signature est effectuée de manière distribuée sans jamais reconstruire les bribes secrètes.

Comme nous pouvons le constater, dans le TSS, la clé privée (qui représente la sécurité du système) n'est jamais à un seul endroit et ce peut importe le moment ou les actions en cours.


Portefeuilles à seuil

Un portefeuille basé sur la technologie TSS est un peu différent d'un portefeuille crypto traditionnel. Généralement, un portefeuille conventionnel génère une phrase seed et l'utilise pour générer les adresses de manière déterministe. L'utilisateur peut ensuite utiliser cette structure déterministe hiérarchique (HD) pour 1) atteindre les clés privées qui correspondent aux adresses du portefeuille et signer des transactions avec, et pour 2) récupérer toutes les clés du portefeuille en utilisant la phrase seed.

Dans un portefeuille à seuil, les choses sont plus complexes. Bien qu'il soit possible de générer une structure HD, sa génération doit être calculée de manière distribuée, comme un autre protocole MPC. Les parties doivent décider ensemble de la prochaine clé à utiliser. En d'autres termes, chaque partie aura une phrase seed lui appartenant. Les phrases seed sont générées séparément et ne sont jamais combinées, de sorte à ce qu'une partie seule ne puisse dériver les autres clés privées à partir de sa phrase seed.

Les portefeuilles basés sur TSS ont également une fonctionnalité de sécurité pratique, qui permet une rotation des clés privées sans changer l'adresse de clé publique correspondante ni l'adresse blockchain. La rotation des clés privées, aussi connue sous le nom de partage secret proactif, est un autre protocole MPC qui prend les bribes secrètes comme entrée, et donne un nouvel ensemble de bribes secrètes en sortie. Les anciennes bribes secrètes peuvent ensuite être supprimées et les nouvelles seront utilisées à leur place.

Une telle structure ajoute une dimension temporelle à la sécurité, ce qui signifie qu'un attaquant doit être à plusieurs endroits en même temps pour attaquer un portefeuille à seuil. Combiner des bribes secrètes avant la rotation et après la rotation ne donnera pas d'influence supplémentaire à l'attaquant s'il veut forger une signature.

Un inconvénient de ce type de portefeuille est que l'absence d'une phrase seed le rend incompatible avec les systèmes de portefeuille à clé unique. Il est donc important de déterminer quelles parties détiendront les bribes secrètes.

Il existe quelques architectures possibles:

  • Externalisation de la TSS : l'utilisateur laissera n serveurs exécuter le calcul en son nom. Externaliser de manière concrète la gestion et la signature de la génération de clés aux fournisseurs de services qui ne sont pas les propriétaires des actifs, mais qui fournissent une couche de sécurité en échange de certains avantages ou incitations.

  • Utilisation de plusieurs appareils: l'utilisateur exécutera la TSS à l'aide de plusieurs appareils qu'il possède. Par exemple - une partie sera un appareil IoT, une autre partie sera le mobile de l'utilisateur, une autre partie son ordinateur portable, etc.

  • Hybride: La TSS s'exécutera de telle sorte que certaines parties soient contrôlées par des fournisseurs de services extérieurs et que certaines parties s'exécutent sur des appareils appartenant à l'utilisateur.

La première méthode permet de supprimer le gros calcul TSS du côté client de l'utilisateur. d'un autre côté, les prestataires de services peuvent conspirer (nous supposons que suffisamment d'entre eux ne sont pas attaqués en même temps, mais dans la pratique, ils pourraient) et voler les actifs de l'utilisateur.

La deuxième méthode donne à l'utilisateur un contrôle complet mais rend difficile la conduite des transactions car il a besoin de plusieurs appareils connectés en ligne afin d'engager le calcul TSS.

La troisième option est considérée comme la meilleure des deux mondes car elle permet à l'utilisateur de mener des transactions facilement et rapidement, mais sans faire de compromis sur une éventuelle possibilité que les transactions soient effectuées sans l'autorisation de l'utilisateur.


TSS et contrats intelligents

Au fil des années, les chercheurs ont trouvé de nombreuses utilisations pour les signatures numériques, et certaines sont, de façon surprenante, très pertinentes. Comme mentionné, la TSS est une primitive cryptographique qui peut grandement accroître la sécurité. Dans le contexte des blockchain, nous pouvons dire que de nombreuses fonctionnalités peuvent être remplacées par la cryptographie basée sur TSS. Applications décentralisées, solutions de scalabilité par couche 2 , swaps atomiques, mixage, héritage, et bien plus encore. Tout cela peut être implémenté par-dessus un cadre TSS. Cela permettrait de remplacer les opérations de contrats intelligents onéreuses et risquées sur chaîne par des alternatives moins coûteuses et plus fiables.
Pour donner quelques exemples concrets : Multi-Hop Locks utilise des signatures à deux parties de manière intelligente et peut être utilisé comme alternative au réseau Bitcoin lightning avec un réseau de canaux de paiement plus sécurisé et privé. ShareLock est probablement la solution de mixage sur chaîne la moins chère pour Ethereum, basée sur la vérification d'une signature à seuil unique.


Menaces potentielles

Au cours des dernières années, les implémentations de la TSS se sont démultipliées de manière significative. Toutefois, en tant que technologie relativement nouvelle, elle a encore quelques limites et amène certaines préoccupations. Comparée à la cryptographie de clé publique classique, les protocoles TSS peuvent être très complexes et doivent encore être testés sur le terrain. En général, la TSS exige des hypothèses cryptographiques additionnelles et plus vulnérables par rapport aux simples signatures numériques. Par conséquent, des vecteurs d'attaque cryptographique qui n'existaient pas dans les configurations traditionnelles sont maintenant découverts (voir cette présentation de la conférence Breaking Bitcoin 2019). Des ingénieurs de sécurité et des cryptographistes appliqués peuvent aider à déployer en toute sécurité des TSS dans votre système.

Du côté positif, les implémentations existantes et nouvelles sont de plus en plus solides en raison d'une augmentation des contributions de qualité, des évaluations par les pairs, des audits et des améliorations de performances algorithmiques.


Pour conclure

Dans cet article, nous avons introduit les bases du système de signature de seuil (TSS), qui est une primitive cryptographique fascinante et possédant le potentiel de changer de manière significative la manière dont nous utilisons la blockchain.

Comme cet article n'a pas discuté de l'ECDSA à seuil qui peut être utilisé dans la Binance Chain et avec Bitcoin, ceux qui s'y intéressent peuvent se référer à la liste suivante de documents récents. De plus, si vous voulez jouer avec certaines implémentations TSS, vous pouvez trouver un code pour le portefeuille Binance Chain à deux parties ici ou essayer le portefeuille ZenGo, qui utilise la méthode hybride pour fournir un portefeuille Binance Chain à deux parties sans détention par un tiers.


Lectures additionnelles: