Bulletproofs++ : Un pas de plus vers des transactions sans lien avec plusieurs types d'actifs
Blockstream Research

Bulletproofs++ : Un pas de plus vers des transactions sans lien avec plusieurs types d'actifs

Liam Eagen

La protection de la vie privée et la sécurité vont de pair en tant que propriétés appréciées des utilisateurs de Bitcoin. Chez Blockstream, nous avons été à l'avant-garde du développement d'une série de méthodes visant à améliorer la confidentialité pour les utilisateurs de Bitcoin, en commençant par les meilleures pratiques pour les portefeuilles Green et Jade et le développement de MuSig2 et des transactions confidentielles (CT). Alors que les transactions Bitcoin vanille offrent une confidentialité limitée, les transactions confidentielles ont fait des progrès notables en masquant les montants des transactions. Cependant, l'anonymat total reste difficile à atteindre et nous décrivons ici quelques nouvelles pistes de solution appliquée pour atteindre cet objectif de protection de la vie privée.

Depuis la création de Bitcoin, les transactions entièrement dissociables, capables de masquer à la fois le montant et les liens entre les transactions, suscitent de plus en plus d'intérêt. Si des cryptomonnaies comme Monero et ZCash ont amélioré la confidentialité grâce aux signatures en anneau et aux SNARK, aucune n'a permis un anonymat complet avec la prise en charge de plusieurs types d'actifs. Avant que l'anonymat complet puisse être mis en place, une étape cruciale réside dans l'avancement de Bulletproofs++ (BP++). Cette amélioration vise à renforcer l'efficacité des transactions confidentielles tout en préservant la prise en charge actuelle de plusieurs types d'actifs sans qu'il soit nécessaire de faire confiance à un tiers.

Bulletproofs++ est un nouveau système d'exécution de signature basé sur un logarithme discret, plus efficace, qui nous permet d'améliorer l'efficacité au niveau du poids des transactions confidentielles. Les transactions confidentielles permettent aux utilisateurs de masquer le montant de leur transaction, en garantissant que le flux net de fonds dans une transaction est nul. Pour éviter l'inflation secrète et les sorties "négatives", les protocoles de transactions confidentielles utilisent des “range proofs” pour prouver que chaque montant de sortie se situe dans une fourchette positive.

Les premiers protocoles de préservation de la vie privée : Transactions confidentielles

Le protocole CT actuellement déployé sur Liquid utilise des signatures en anneau borroméen pour les “range proofs” et des actifs confidentiels pour prendre en charge plusieurs types d'actifs. Il s'agit de l'un des premiers protocoles de transaction préservant la vie privée, dont les origines remontent directement aux premiers travaux de Greg Maxwell sur les “zero-knowledge proofs” et sur Bitcoin. Depuis lors, les “zero-knowledge proofs” ont connu un développement sans précédent. Blockstream continue de jouer un rôle actif dans l'écosystème plus large de la recherche sur les “zero-knowledge proofs”, en particulier dans le développement des Bulletproofs (BP). BP a été la première à atteindre des tailles de preuve réduites sans nécessiter de faire confiance à un tiers.

Bulletproofs++ : Amélioration de la taille des transactions et de l'efficacité

La capacité de stocker, d'effectuer et de vérifier des transactions à moindre coût est essentielle pour toute application de la blockchain. Naturellement, nous voulons que tout système de preuve utilisé pour les transactions privées soit aussi petit et facile à vérifier que possible, afin de limiter la quantité de données stockées sur la blockchain. La taille de la “range proof” de 64 bits de BP++ n'est que de 416 octets, ce qui est 39 % plus petit que BP et 10 fois plus petit que les “range proofs” actuelles de Liquid. La réduction de la taille des preuves permettrait de diminuer les frais de transaction et les besoins de stockage des nœuds. Sur un ordinateur portable ordinaire, la vérification des “range proofs” BP++ sont environ quatre fois plus rapides que BP, ce qui rend BP++ plus efficace pour la vérification de la blockchain. Chaque “range proof” BP++ a la taille de sept signatures Schnorr et peut être vérifiée dans le temps qu'il faut pour vérifier 20 signatures Schnorr. Grâce à BP++, nous apporterons toutes les améliorations de BP en plus des autres améliorations supplémentaires à Liquid.

Avec les “range proofs” des CTs et BPs actuels, nous prouvons qu'une valeur se trouve dans une plage en prouvant la connaissance des bits de la valeur. Par exemple, pour prouver qu'une valeur se situe dans [0, 2^64 -1], nous devons prouver que nous connaissons 64 bits. Bulletproofs++ nous permet d'utiliser des bases plus larges, ce qui réduit le nombre de chiffres nécessaires pour représenter un nombre. Par exemple, une valeur dans [0, 2^64 - 1] peut être représentée en utilisant seulement 16 chiffres hexadécimaux, soit une réduction de 4 fois par rapport aux bits. Cela est possible grâce à une nouvelle technique appelée argument réciproque, qui permet de mettre en œuvre un argument de recherche. L'argument réciproque, lorsqu'il est instancié en tant qu'argument de recherche, est également connu sous le nom d'argument de recherche de la dérivée logarithmique.

Le support d’actifs multiples et l'argument réciproque

L'argument réciproque est une technique utilisée dans le protocole Bulletproofs++ pour permettre la prise en charge de plusieurs actifs dans la même transaction. Il permet essentiellement à différents types de jetons de participer à la transaction tout en gardant les types de toutes les entrées et sorties privées. L'idée peut être expliquée en utilisant l'analogie d'un tableau à l'intérieur d'un “zero-knowledge proof”.

Nous pouvons considérer l'argument réciproque comme un moyen d'utiliser un tableau dans un “zero-knowledge proof” ; étant donné un index et un montant, nous pouvons ajouter ou soustraire ce montant du tableau à cet index. Chaque entrée et chaque sortie d'une transaction a un type et un montant. Pour vérifier que tous les montants de chaque type s'équilibrent, nous passerons en revue chaque entrée et ajouterons le montant au tableau à l'index donné par le type. Ensuite, nous allons parcourir chaque sortie et retirer le montant du tableau à l'index donné par son type. L'opération ne s'équilibre que si toutes les entrées du tableau sont nulles.

# Start with empty table
T = {}

# Add all the inputs
for (v, t) in I:
    T[t] += v

# Remove all the outputs
for (v, t) in O:
    T[t] -= v

# Check all the amounts in the table are zero
for (t, v) = T.items():
    assert(v == 0)

Bulletproofs++

Actuellement, nous avons fusionné le premier des deux PRs dans libsecp256k1zkp en implémentant l'argument de norme. Cet argument s'appuie sur l'argument intérieur de BP et est la primitive sous-jacente qui donne à BP++ sa petite taille. Ensuite, nous fusionnerons le deuxième PR qui supporte les “zero-knowledge proofs”. Après cela, nous implémenterons le support pour les actifs multiples et les preuves nécessaires pour migrer de manière privée les actifs existants vers le format d'actifs BP++. L'implémentation dans libsecp256k1zkp nous permet de profiter des performances de pointe de libsecp et de déployer facilement sur Liquid.

À plus long terme, grâce à la nouvelle flexibilité de BP++ et à certaines orientations de recherche de Blockstream, nous voyons une voie vers des transactions encore plus privées sur Liquid, et potentiellement sur Bitcoin, qui peut également fournir une dissociation entre les transactions et les montants du “shield” (et les types d'actifs “shield” dans Liquid).

Les protocoles de transaction sans lien sont à la pointe de la recherche sur les “zero-knowledge proof”, en particulier lorsqu'ils sont mis en œuvre sans nécessiter de faire confiance à un tiers. BP++ constituera le noyau confidentiel d'un protocole de transaction multi-actifs et sans lien pour Liquid.

Outre le noyau CT, qui utilisera les techniques développées dans BP++, les transactions sans lien nécessitent de prouver des déclarations beaucoup plus complexes. Ce domaine fait encore l'objet de recherches actives.

La confidentialité a toujours été un élément important de l'éthique Bitcoin ; la monnaie nécessite la fongibilité et la fongibilité nécessite la confidentialité. Notre objectif est d'apporter cette confidentialité à l'écosystème Bitcoin, avec BP++ comme première étape. Le fait d’implanter Simplicity à BP++ permettra à tout projet supportant Simplicity d'intégrer et d'interopérer avec BP++.

Pour en savoir plus, lisez la dernière version de l'article "Bulletproofs++ : Next Generation Confidential Transactions via Reciprocal Set Membership Arguments", actuellement hébergé et librement disponible sur l'archive IACR eprint, et consultez notre travail d'implémentation en cours sur GitHub.

If you have specific preferences, please, mark the topic(s) you would like to read: