Une bibliothèque Python sans sécurité qui rend le bitcoin plus sûr

Jusqu’à présent, chaque proposition d’amélioration du bitcoin (BIP) qui avait besoin de primitives cryptographiques devait réinventer la roue. Chacun est venu groupé avec sa propre implémentation Python personnalisée de la courbe elliptique SECP256K1 et des algorithmes connexes, chacun subtilement différent les uns des autres. Ces incohérences ont introduit des responsabilités silencieuses et rendu la révision des BIP inutilement compliquée. Ce problème a récemment été mis en évidence dans Bitcoin Optech Newsletter # 348, et c’est quelque chose au moins une poignée de développeurs de la communauté de développement de Bitcoin ont longtemps ressenti: il devrait y avoir une norme unifiée et réutilisable pour le code cryptographique SECP256K1 de référence bip256k1.

La semaine dernière, Jonas Nick et Tim Ruffing de Blockstream Research et Sebastian Falbesoner ont fait de grands progrès vers cela. Dans le cadre de leur proposition CHILLDKG existante, l’équipe a publié SECP256K1LAB. Un nouveau, intentionnellement peu sûr Bibliothèque Python pour le prototypage, l’expérimentation et les spécifications du BIP. Ce n’est pas pour une utilisation de la production (car il n’est pas constant et donc vulnérable aux attaques de canaux latéraux), mais il comble un écart critique: il offre une référence propre et cohérente pour les fonctionnalités SECP256K1, y compris les signatures de schnorr de style BIP-340, ECDH et de faible niveau / groupe. L’objectif est simple: rendre plus facile et plus sûr d’écrire de futurs BIP en évitant les implémentations redondantes et uniques. Pour les auteurs BIP, cela signifie: moins de code personnalisé, moins de problèmes de spécifications et un chemin plus clair du prototype à la proposition.

> Pourquoi ne pas simplement utiliser la vraie bibliothèque SECP256K1?

Bitcoin Core comprend déjà une bibliothèque C rapide et constante pour la cryptographie SECP256K1. Alors pourquoi les auteurs BIP ne sont-ils pas simplement utilisés?

Lorsqu’un auteur BIP soumet une proposition, il devrait inclure une implémentation de référence pour expliquer comment fonctionne l’idée. Ces implémentations ne doivent pas être écrites en python, mais C est souvent trop de niveau de niveau pour le prototypage. Python est plus facile à lire, plus facile à modifier et rend plus clair ce que l’auteur essaie d’exprimer. Ces qualités le rendent particulièrement bien adapté aux spécifications de l’écriture.

Lors de l’introduction d’une nouvelle idée cryptographique, il est utile d’avoir quelque chose de clair, concis et sûr à expérimenter. En principe, des outils comme HACSpec sont une bonne option pour les spécifications formelles, car le code HACSpec est également une rouille valide. Mais dans la pratique, HacSpec peut être difficile à travailler et à lire, en particulier pour les lecteurs de BIP qui ne connaissent pas la rouille.

La lisibilité de Python continue d’en faire la langue à laquelle de nombreux auteurs reviennent lorsqu’ils ont besoin d’expliquer comment quelque chose fonctionne.

Pourquoi les auteurs BIP continuent de relancer SECP256K1 encore et encore

Cela a commencé avec BIP 340 Signatures Schnorrlorsque les auteurs BIP ont écrit le code de référence d’origine dans Python, il serait donc facile de suivre les calculs. Ils ont défini exactement comment effectuer la signature et la vérification de style schnorr à l’aide des paramètres de courbe de SECP256K1. Ils ont dû tout construire à partir de zéro: l’arithmétique sur le terrain, les opérations de groupe, la génération de non -ce déterministe et les règles d’encodage. Le code Python était clair et éducatif. Mais il a été adapté spécifiquement à ce seul BIP, et non conçu pour être réutilisé par les futurs.

De la même manière, BIP 324 Transport P2P cryptéajoutait un cryptage à la façon dont les nœuds Bitcoin devraient se parler et utilisé un protocole appelé bruit qui repose sur des échanges de clés, des secrets partagés et un chiffrement symétrique. Bien qu’il s’appuie sur la même courbe SECP256K1 utilisée dans BIP 340, il n’a réutilisé aucun du code d’implémentation réel. Toute la logique cryptographique telle que l’ECDH, la sérialisation et les modèles de poignée de main a été réimplémentée à partir de zéro dans Python. Même si les mathématiques sous-jacentes sont les mêmes, chaque bip finit par écrire sa propre version de la logique. Cela conduit à des efforts dupliqués et introduit le potentiel d’incohérences subtiles.

Ce que SECP256K1LAB est réellement

SECP256K1LAB est une bibliothèque Python conçue dans un but: faciliter la rédaction et le test des spécifications cryptographiques pour Bitcoin. Python est déjà le langage le plus populaire et le plus largement utilisé pour les implémentations de référence et les vecteurs de test dans les BIP, donc avoir une bibliothèque partagée et réutilisable est tout simplement logique. Il n’est pas conçu pour une utilisation en production. Il est conçu pour le prototypage, pas les performances. Il offre une interface unifiée et unifiée à la fonctionnalité Core SECP256K1, avec du code lisible et une configuration minimale. Plus d’informations sur la vôtre à chaque fois que vous souhaitez tester une idée ou démontrer comment quelque chose devrait fonctionner.

Cas d’utilisation du monde réel: chilldkg

SECP256K1LAB a d’abord été développé dans le cadre de l’œuvre sur Chilldkgune nouvelle proposition BIP pour la génération de clés distribuée. Au lieu d’écrire une autre implémentation Python personnalisée de SECP256K1 juste pour cette seule spécification, les auteurs ont utilisé SECP256K1LAB pour gérer tous les blocs de construction cryptographiques d’une manière qu’il pourrait être exploité par d’autres. En réutilisant une base de code partagée et lisible, leur espoir est que les futurs bips cryptographiques n’auront pas à repartir de zéro. Avec SECP256K1LAB, il y a enfin une base sur laquelle les nouvelles propositions peuvent s’appuyer et s’améliorer ensemble.

Où ça pourrait aller

Il y a encore une question ouverte: SECP256K1LAB devrait-il vivre dans le référentiel BIPS? Cela s’avère déjà utile comme référence partagée pour les propositions cryptographiques, mais il y a une discussion en cours sur l’endroit où il appartient vraiment au processus de développement de Bitcoin plus large. Qu’il reste en tant que bibliothèque autonome ou soit plus étroitement intégrée au flux de travail BIP, une chose est claire – il comble un écart qui existe depuis des années. Si vous êtes un auteur BIP, un réviseur de spécifications ou simplement curieux d’améliorer l’outillage cryptographique autour de Bitcoin, nous serions ravis de votre contribution. Vous pouvez rejoindre la discussion sur la liste de diffusion Bitcoin-DEV ou contribuer directement au Repo GitHub SECP256K1LAB.

Ceci est un article invité de Kiara Bickers. Les opinions exprimées sont entièrement les leurs et ne reflètent pas nécessairement celles du magazine BTC Inc ou Bitcoin.

Laisser un commentaire