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
Blockchain
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
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
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.
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
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
Menaces potentielles
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.
Lectures additionnelles: