Auteurs : Omer Shlomovits, ZenGo.
Le schéma de signature par seuil (TSS) est un primitive cryptographique permettant la génération de clés distribuées et de signatures. L'introduction de TSS dans le client de la blockchain représente un nouveau paradigme, offrant de nombreux avantages, notamment en matière de sécurité. En termes larges, TSS peut redéfinir la conception des systèmes de gestion des clés (tels que les portefeuilles de cryptomonnaie) et offrir un support natif pour les cas d'utilisation DeFi. Cependant, en tant que technologie émergente, TSS présente également certains risques et limitations.
Cet article détaillera les concepts fondamentaux de TSS, les avantages potentiels qu'il apporte au domaine de la blockchain, les méthodes de mise en œuvre dans les clients de la blockchain, et ses différences avec le partage secret de Shamir et les signatures multiples. Nous examinerons également les différentes manières d'utiliser TSS pour la gestion des clés distribuées, et explorerons les risques et limitations associés.
La puissance de la cryptographie
Pour comprendre le concept de TSS, nous devons d'abord maîtriser quelques connaissances de base sur la cryptographie. Depuis les années 1970, de plus en plus de systèmes Internet (comme TLS et PGP) ont commencé à utiliser la cryptographie asymétrique, également appelée cryptographie à clé publique (PKC). PKC repose sur deux clés : la clé publique et la clé privée. La clé publique est ouverte, et toute personne peut la publier et l'utiliser, tandis que la clé privée est le secret central qui protège la sécurité du système.
La cryptographie et les signatures numériques sont les deux principales applications de la PKC. Ces deux techniques reposent sur trois algorithmes : d'abord, la génération de paires de clés privées et publiques, ensuite la génération de ciphertext/signe, et enfin le processus de décryptage/validation. Prenons l'exemple de la signature numérique, où l'algorithme de signature utilise la clé privée, connue uniquement du propriétaire, pour générer une signature unique qui est jointe au message. Ensuite, quiconque détient la clé publique peut vérifier l'authenticité et la précision de cette signature.
Blockchain
Sans aucun doute, la blockchain est une technologie puissante avec un grand potentiel, fournissant une couche de consensus pour organiser et enregistrer des événements. Cette infrastructure donne aux utilisateurs la possibilité de construire une économie décentralisée, voire un gouvernement décentralisé. Fait surprenant, la cryptographie utilisée pour faire fonctionner une blockchain de base repose uniquement sur des signatures numériques. Dans une blockchain, la clé privée représente l'identité, tandis que la signature est une déclaration ou un prétention publique faite par cette identité. La blockchain garantit l'inaltérabilité et l'exactitude des signatures en ordonnant ces déclarations et en les vérifiant selon un ensemble de règles.
Comparé aux techniques de cryptographie traditionnelles utilisées dans la blockchain, la cryptographie moderne a introduit de nombreuses avancées passionnantes, telles que les preuves à connaissance nulle, le chiffrement homomorphe et le calcul multipartite. Au cours de la dernière décennie, la recherche en blockchain a considérablement fait progresser le développement de la cryptographie appliquée, réalisant des percées significatives dans ces domaines et plus encore.
Cet article se concentrera sur l'une de ces percées, à savoir le schéma de signature par seuil (TSS) sécurisé et efficace.
MPC et schéma de signature par seuil (TSS)
Le calcul multipartite (MPC) est une branche de la cryptographie dont les origines remontent à environ 40 ans aux recherches pionnières d'Andrew C. Yao. Le cœur du MPC réside dans la capacité d'un groupe de parties participants, qui ne se font pas confiance, à calculer ensemble le résultat d'une fonction sans divulguer leurs informations d'entrée.
Par exemple, supposons qu'un certain nombre d'employés d'une entreprise souhaitent savoir qui a le salaire le plus élevé, mais ne veulent pas divulguer leurs salaires réels. Dans ce scénario, l'entrée de chaque employé est son salaire, et la sortie finale est le nom de l'employé ayant le salaire le plus élevé. Grâce au MPC, ce calcul peut être effectué sans exposer aucune information salariale des employés.
Les deux caractéristiques principales du MPC sont la précision et la confidentialité :
Précision : la sortie de l'algorithme est le résultat correct attendu.
Confidentialité : les données d'entrée de chaque partie participante ne seront pas divulguées à d'autres parties.
Nous utiliserons la technologie MPC pour calculer de manière distribuée des signatures numériques et explorer comment appliquer les caractéristiques ci-dessus au processus de signature. Comme mentionné précédemment, la signature se divise généralement en trois étapes :
Génération de clés : la première étape est la plus complexe de tout le processus. Cette étape nécessite la génération d'une clé publique pour vérifier les signatures ultérieures. En outre, il est nécessaire de générer un "fragment secret" indépendant pour chaque partie participante. En termes de précision et de confidentialité, cette fonction produira la même clé publique pour toutes les parties participantes tout en générant des fragments secrets différents pour chaque participant, garantissant ainsi : (1) Confidentialité : les données des fragments secrets ne seront pas divulguées entre les parties, et (2) Précision : la clé publique est le résultat d'un calcul fonctionnel de tous les fragments secrets.
Signature : cette étape implique la fonction de génération de signature. Les entrées des parties sont leurs fragments secrets, dérivés de la sortie de l'étape précédente (génération de clés distribuée). De plus, il existe une entrée publique bien connue, à savoir le message à signer. La sortie est la signature numérique, et la confidentialité garantit que les fragments secrets ne seront pas divulgués tout au long du processus de calcul.
Validation : l'algorithme de validation reste conforme aux méthodes traditionnelles. Pour assurer la compatibilité avec un schéma de signature unique, quiconque possède la clé publique peut vérifier et confirmer la signature, ce qui constitue la tâche principale exécutée par les nœuds de validation de la blockchain.
Le schéma de signature par seuil (TSS) est le nom que nous attribuons à la combinaison de la génération de clés distribuées (DKG) et du processus de signature distribué.
Combiner TSS avec la blockchain
Une manière intuitive d'adopter TSS dans la blockchain consiste à modifier le client de la blockchain pour qu'il génère des clés et des signatures via la technologie TSS. Ici, le "client de la blockchain" fait référence à un ensemble de commandes exécutées par tous les nœuds. Dans les applications pratiques, TSS peut remplacer toutes les commandes liées aux clés privées par des calculs distribués.
Pour illustrer, nous présentons brièvement comment créer une nouvelle adresse dans une conception de blockchain traditionnelle. En termes simples, on génère d'abord une clé privée, puis on calcule la clé publique à partir de la clé privée, et enfin on dérive l'adresse de la blockchain à partir de la clé publique.
Dans le mode TSS, la clé publique est calculée collectivement par n participants, chaque participant ne détenant qu'un fragment secret de la clé privée (et les fragments ne se divulguent pas mutuellement). Nous pouvons dériver l'adresse à partir de la clé publique de la même manière que dans les systèmes traditionnels, ce qui signifie que la méthode de génération d'adresse n'est pas limitée par la blockchain. L'avantage de cette méthode est que chaque partie ne détient qu'une partie de la clé privée, ce qui signifie que la clé privée n'est plus une source de point de défaillance unique.
La signature des transactions peut également être effectuée de manière similaire. La différence réside dans le fait que la clé privée n'est plus utilisée pour une signature unilatérale, mais qu'une signature distribuée est générée par une collaboration entre plusieurs parties. Ainsi, tant qu'un nombre suffisant de participants agissent de bonne foi, une signature valide peut être produite, ce qui permet de passer d'un calcul local (point de défaillance unique) à un calcul interactif.
Il convient de mentionner que la génération de clés distribuées peut prendre en charge différents types de structures d'accès : le modèle général "t sur n" garantit qu'il est toujours possible d'effectuer des opérations liées aux clés en toute sécurité, même en cas de défaillance aléatoire pouvant atteindre t.
TSS et signatures multiples
Certaines blockchains offrent la fonctionnalité TSS comme une partie intégrée ou programmée du logiciel, que nous appelons généralement signatures multiples. Pour mieux comprendre les différences entre les deux, on peut considérer la signature multiple comme une TSS au niveau de l'application de la blockchain.
En d'autres termes, les signatures multiples et TSS poursuivent essentiellement des objectifs similaires, mais TSS utilise des techniques cryptographiques hors chaîne, tandis que la signature multiple se produit sur la chaîne. Cependant, la blockchain nécessite une méthode spécifique pour encoder les signatures multiples, ce qui peut affecter la confidentialité, car la structure d'accès (nombre de signataires) sera exposée sur la blockchain. De plus, le coût des transactions de signature multiple est relativement élevé, car chaque signataire doit faire passer ses informations sur la blockchain.
Dans TSS, les détails du signataire sont intégrés dans les transactions ordinaires, ce qui réduit les coûts et protège la confidentialité. D'autre part, les signatures multiples peuvent être réalisées par des méthodes non interactives, évitant ainsi les tracas d'exécuter une couche de communication complexe entre différents signataires.
La principale différence réside dans le fait que les signatures multiples sont spécifiques à la blockchain, nécessitant une mise en œuvre distincte pour chaque blockchain, et peuvent même ne pas être prises en charge dans certaines blockchains. En revanche, TSS est entièrement basé sur la cryptographie et peut toujours être pris en charge. Pour en savoir plus sur les différences entre les deux, veuillez consulter cet endroit.
TSS et le schéma de partage secret de Shamir
Le schéma de partage secret de Shamir (SSSS) fournit une méthode de stockage distribué de clés privées, permettant de les stocker à plusieurs endroits lorsque la clé privée est au repos. SSSS et TSS diffèrent principalement sur deux points :
Génération de clés : dans SSSS, un rôle appelé "distributeur" est responsable de la génération des fragments secrets de la clé privée. Le distributeur génère la clé privée complète à un seul endroit, la divise en plusieurs fragments secrets, puis les distribue à différents endroits. Dans TSS, il n'y a pas de distributeur, car tout le processus est distribué, la clé privée complète n'est jamais générée à un seul endroit.
Signature : dans SSSS, les parties doivent d'abord reconstruire la clé privée complète pour effectuer la signature, ce qui expose chaque signature au risque de point de défaillance unique. Dans TSS, le processus de signature est réalisé de manière distribuée sans avoir à reconstruire les fragments secrets.
Ainsi, dans le schéma TSS, la clé privée ne se trouve jamais à un seul endroit tout au long de son cycle de vie, ce qui améliore considérablement la sécurité du système.
Portefeuille par seuil
Les portefeuilles basés sur la technologie TSS diffèrent légèrement des portefeuilles de cryptomonnaie traditionnels. Les portefeuilles traditionnels dérivent généralement de manière déterministe l'adresse du portefeuille en générant des mnémoniques. Les utilisateurs peuvent tirer parti de cette structure de déterminisme hiérarchique (HD) : 1) obtenir la clé privée associée à l'adresse du portefeuille et signer des transactions ; 2) restaurer toutes les clés du portefeuille via des mnémoniques.
Le mécanisme de fonctionnement des portefeuilles par seuil est alors plus complexe. Bien qu'il prenne également en charge la génération de structures HD, ce processus doit être effectué de manière distribuée, similaire à un autre protocole MPC. Les parties participantes doivent décider ensemble de la clé à utiliser ensuite. En d'autres termes, chaque partie a ses propres mnémoniques indépendants. Ces mnémoniques sont générés séparément et ne sont pas combinés, de sorte qu'aucune partie ne peut dériver seule la clé privée complète à partir de ses propres mnémoniques.
En outre, les portefeuilles basés sur TSS disposent d'une fonctionnalité de sécurité puissante, à savoir la possibilité de faire tourner la clé privée sans changer la clé publique et l'adresse de la blockchain. La rotation de la clé privée, également appelée partage secret actif, est un autre protocole MPC qui utilise d'anciens fragments secrets comme entrée pour générer un nouvel ensemble de fragments secrets. Les anciens fragments secrets peuvent être supprimés, tandis que les nouveaux fragments peuvent continuer à être utilisés.
Cette architecture introduit une dimension temporelle à la sécurité des portefeuilles par seuil, ce qui signifie qu'un attaquant doit être présent au même moment à plusieurs endroits pour réussir une attaque sur le portefeuille. Même s'il tente de falsifier une signature, les fragments secrets obtenus par l'attaquant avant et après la rotation de la clé privée ne peuvent pas être combinés pour former la clé complète, ce qui ne représente pas une menace supplémentaire pour la sécurité.
Cependant, une limitation de ce type de portefeuille est qu'il ne prend pas en charge les mnémoniques et n'est pas compatible avec les systèmes de portefeuille à clé unique. Par conséquent, il est particulièrement important de clarifier quelles parties détiennent les fragments secrets.
Les architectures possibles sont les suivantes :
TSS externalisé : les utilisateurs confient le calcul à "n" serveurs. La génération, la gestion et la signature des clés seront efficacement externalisées à des fournisseurs de services, qui ne sont pas propriétaires des actifs mais obtiennent une certaine compensation en offrant une sécurité.
Collaboration entre plusieurs appareils : les utilisateurs exécutent TSS entre les appareils qu'ils possèdent, par exemple, les appareils IoT, les appareils mobiles et les ordinateurs portables travaillent ensemble.
Mode hybride : certaines parties sont contrôlées par des fournisseurs de services externes, d'autres fonctionnent sur les appareils des utilisateurs pour effectuer le calcul TSS ensemble.
La première méthode allège la charge de calcul TSS sur le client des utilisateurs, mais les fournisseurs de services peuvent conspirer pour voler les actifs des utilisateurs (bien que l'on suppose généralement qu'un nombre suffisant de fournisseurs de services ne seront pas compromis en même temps, cette possibilité ne peut pas être exclue).
La deuxième méthode donne aux utilisateurs un contrôle total, mais nécessite que plusieurs appareils soient en ligne pour participer au calcul TSS, rendant les opérations transactionnelles plus complexes.
La troisième méthode réalise un compromis entre les deux, permettant aux utilisateurs d'effectuer des transactions de manière simple et efficace tout en garantissant que les transactions ne peuvent être effectuées sans l'autorisation des utilisateurs.
TSS et contrats intelligents
Au fil des ans, les chercheurs ont exploré de nombreuses applications des signatures numériques, dont certaines sont devenues des technologies clés indispensables. Comme mentionné précédemment, TSS est un primitive cryptographique qui peut considérablement améliorer la sécurité. Dans le contexte de la blockchain, les solutions cryptographiques basées sur TSS peuvent remplacer de nombreuses fonctionnalités traditionnelles. Par exemple, les applications décentralisées, les solutions d'extension Layer 2, les échanges atomiques, le mélange de fonds, la transmission d'héritage, etc., peuvent être réalisées via le cadre TSS. Cela permet de remplacer progressivement les opérations de contrats intelligents sur chaîne, qui sont coûteuses et risquées, par des solutions plus économiques et fiables.
Par exemple, le verrouillage multi-saut utilise habilement des signatures à deux parties pour fournir un réseau de canaux de paiement plus sécurisé et plus privé, pouvant servir d'alternative au réseau Lightning de Bitcoin. ShareLock pourrait être la solution de mélange de fonds sur chaîne la moins coûteuse sur Ethereum, basée sur une validation de signature par seuil unique.
Risques
Ces dernières années, l'application de TSS a progressivement augmenté. Cependant, en tant que technologie relativement nouvelle, elle fait encore face à certaines limitations et problèmes potentiels. Comparé aux techniques de cryptographie à clé publique traditionnelles, le protocole TSS est plus complexe et n'a pas encore été largement "testé en conditions réelles". En général, par rapport aux signatures numériques simples, TSS nécessite des hypothèses cryptographiques supplémentaires, qui peuvent ne pas être assez robustes, introduisant ainsi des vecteurs d'attaque cryptographiques qui n'étaient pas présents dans les solutions traditionnelles (voir les présentations pertinentes de la conférence Breaking Bitcoin de 2019). Pour déployer TSS en toute sécurité dans un système, il est conseillé de rechercher l'assistance professionnelle d'ingénieurs en sécurité et d'experts en cryptographie.
D'un autre côté, grâce à l'augmentation continue des contributions communautaires, à l'examen par les pairs, à l'audit de code et à l'optimisation des algorithmes, les applications TSS existantes et émergentes deviennent de plus en plus matures.
Résumé
Cet article présente les concepts fondamentaux du schéma de signature par seuil (TSS), un primitive cryptographique très prometteur qui pourrait transformer notre interaction avec la blockchain.
Puisque cet article ne couvre pas le seuil ECDSA applicable dans BNB Chain et Bitcoin, les lecteurs intéressés peuvent consulter les derniers articles suivants. De plus, si vous souhaitez essayer certaines applications TSS, vous pouvez examiner le code source open source du portefeuille BNB Chain à deux parties ici, ou utiliser le portefeuille ZenGo, qui est un portefeuille BNB Chain non détenu à deux parties utilisant un mode hybride.
Lecture approfondie :
Schéma de signature ECDSA à deux parties sécurisé et efficace
Schéma ECDSA à plusieurs parties sécurisé et efficace, prenant en charge la génération de clés distribuées pratiques et les applications de garde de cryptomonnaie
ECDSA à deux parties basé sur un système de preuve de hachage et son instantiation efficace
ECDSA par seuil à plusieurs parties utilisant une configuration décentralisée efficace
ECDSA par seuil sécurisé à deux parties basé sur l'hypothèse ECDSA
ECDSA par seuil basé sur l'hypothèse ECDSA : plusieurs exemples