Nombres aléatoires et réseaux décentralisés : implémentations

Introduction

function getAbsolutelyRandomNumer() {
        return 4; // retourne un nombre absolument aléatoire !
}

Tout comme dans le cas du concept de chiffrement absolument rĂ©sistant en cryptographie, les vĂ©ritables protocoles de "Publicly Verifiable Random Beacon" (ci-aprĂšs PVRB) essaient simplement de se rapprocher le plus possible d'un schĂ©ma idĂ©al, car dans des rĂ©seaux rĂ©els, il ne peut pas ĂȘtre appliquĂ© tel quel : il faut convenir d'un seul bit, le nombre de tours doit ĂȘtre important, et tous les messages doivent ĂȘtre parfaitement rapides et toujours livrĂ©s. Évidemment, ce n'est pas le cas dans les rĂ©seaux rĂ©els. Ainsi, lors de la conception de PVRB pour des tĂąches spĂ©cifiques dans des blockchains modernes, en plus de l'impossibilitĂ© de contrĂŽler le random obtenu et de la rĂ©sistance cryptographique, de nombreux problĂšmes purement architecturaux et techniques surgissent.

La blockchain elle-mĂȘme constitue pour le PVRB un environnement de communication oĂč les messages = transactions. Cela permet de s'abstraire partiellement des problĂšmes de rĂ©seau, de la non-livraison des messages, des problĂšmes de logiciels intermĂ©diaires : tous ces risques sont pris en charge par un rĂ©seau dĂ©centralisĂ©, et la principale valeur de celui-ci pour le PVRB est l'impossibilitĂ© de rĂ©voquer ou d'altĂ©rer une transaction dĂ©jĂ  envoyĂ©e - cela empĂȘche les participants de se retirer du protocole, sauf s'ils ont rĂ©ussi une attaque sur le consensus. Ce niveau de sĂ©curitĂ© est acceptable, donc le PVRB doit ĂȘtre rĂ©sistant aux collusions des participants au mĂȘme titre que la chaĂźne principale de la blockchain. De plus, cela sous-entend que le PVRB doit faire partie du consensus, si le rĂ©seau s'accorde sur la chaĂźne principale de blocs, il doit Ă©galement s'accorder sur le seul random rĂ©sultant honnĂȘte. Autrement, PVRB est simplement un protocole autonome, implĂ©mentĂ© par un smart contract, fonctionnant de maniĂšre asynchrone par rapport Ă  la blockchain et aux blocs. Chacune de ces mĂ©thodes a ses propres avantages et inconvĂ©nients, et le choix entre elles est extrĂȘmement non trivial.

Deux façons d'implémenter le PVRB

Décrivons plus en détail deux variantes d'implémentation du PVRB - une version autonome, fonctionnant avec un smart contract indépendant de la blockchain, et une version intégrée au consensus - intégrée dans le protocole, selon lequel le réseau s'accorde sur la chaßne de blocs et les transactions incluses. Dans tous les cas, je ferai référence aux moteurs de blockchain populaires : Ethereum, EOS, et tous ceux qui leur ressemblent en termes de déploiement et de traitement des smart contracts.

Contrat autonome

Dans cette option, le PVRB est un contrat intelligent qui accepte les transactions des producteurs alĂ©atoires (RP), les traite, combine les rĂ©sultats et, en consĂ©quence, aboutit Ă  une certaine valeur, que tout utilisateur peut obtenir de ce contrat. Cette valeur peut ne pas ĂȘtre directement stockĂ©e dans le contrat, mais ĂȘtre reprĂ©sentĂ©e uniquement par des donnĂ©es Ă  partir desquelles il est possible d'obtenir de maniĂšre dĂ©terministe une seule et unique valeur alĂ©atoire rĂ©sultante. Dans ce schĂ©ma, les RP sont des utilisateurs de la blockchain, et toute personne peut ĂȘtre autorisĂ©e Ă  participer au processus de gĂ©nĂ©ration.

L'option du contrat autonome est bonne :

  • pour sa portabilitĂ© (les contrats peuvent ĂȘtre transfĂ©rĂ©s d'une blockchain Ă  une autre)
  • pour sa simplicitĂ© de mise en Ɠuvre et de test (les contrats sont faciles Ă  Ă©crire et Ă  tester)
  • pour la commoditĂ© de mise en Ɠuvre de schĂ©mas Ă©conomiques (il est facile de crĂ©er son propre token dont la logique sert les objectifs du PVRB)
  • pour la possibilitĂ© de dĂ©ploiement sur des blockchains dĂ©jĂ  en fonctionnement

Il présente également des inconvénients :

  • des restrictions sĂ©vĂšres sur les ressources lors des calculs, le volume des transactions et le stockage (en d'autres termes, cpu/mem/io)
  • des limitations sur les opĂ©rations Ă  l'intĂ©rieur du contrat (toutes les instructions ne sont pas accessibles, il est difficile de connecter des bibliothĂšques externes)
  • l'impossibilitĂ© d'organiser des Ă©changes de messages plus rapidement que les transactions ne sont incluses dans la blockchain

Cette option convient pour la mise en Ɠuvre d'un PVRB qui doit ĂȘtre lancĂ© dans un rĂ©seau existant, ne contenant pas de cryptographie complexe et ne nĂ©cessitant pas beaucoup d'interactions.

Intégré au consensus

Dans cette version, le PVRB est implĂ©mentĂ© dans le code du nƓud blockchain, intĂ©grĂ© ou fonctionnant parallĂšlement Ă  l'Ă©change de messages entre les nƓuds de la blockchain. Les rĂ©sultats du protocole sont directement inscrits dans les blocs produits, et les messages du protocole sont envoyĂ©s via le rĂ©seau P2P entre les nƓuds. Puisque le protocole aboutit Ă  des nombres qui doivent ĂȘtre enregistrĂ©s dans les blocs, le rĂ©seau doit parvenir Ă  un consensus Ă  leur sujet. Cela signifie que les messages PVRB, tout comme les transactions, doivent ĂȘtre validĂ©s par les nƓuds et inclus dans les blocs afin que tout participant au rĂ©seau puisse valider le respect du protocole PVRB. Cela nous amĂšne automatiquement Ă  une solution Ă©vidente : si le rĂ©seau parvient Ă  un consensus concernant le bloc et les transactions qu'il contient, alors le PVRB doit faire partie du consensus, et ne pas ĂȘtre un protocole sĂ©parĂ©. Autrement, il pourrait y avoir une situation oĂč le bloc est valide du point de vue du consensus, mais le protocole PVRB n'a pas Ă©tĂ© respectĂ©, et d'un point de vue PVRB, le bloc ne peut pas ĂȘtre acceptĂ©. Donc, si l'option « intĂ©grĂ©e au consensus » est choisie, le PVRB devient une partie importante du consensus.

En dĂ©crivant les implĂ©mentations du PVRB au niveau du consensus dans le rĂ©seau, il est impĂ©ratif de ne pas nĂ©gliger les questions de finalitĂ©. La finalitĂ© est un mĂ©canisme utilisĂ© dans des consensus dĂ©terministes, fixant un bloc (et la chaĂźne le menant) comme final, et qui ne sera jamais abandonnĂ©, mĂȘme si un fork parallĂšle apparaĂźt. Par exemple, le Bitcoin n'a pas ce mĂ©canisme — si une chaĂźne de plus grande complexitĂ© est publiĂ©e, elle remplacera toute chaĂźne de moindre complexitĂ©, quelle que soit la longueur des chaĂźnes. En revanche, dans EOS, les blocs finaux sont appelĂ©s Last Irreversible Blocks, qui apparaissent en moyenne tous les 432 blocs (12*21 + 12*15, prĂ©-vote + prĂ©-engagement). Ce processus est essentiellement l'attente des signatures des block-producers (BP) Ă  un niveau de 2/3. Lorsqu'il y a des forks plus anciens que le dernier LIB, ils sont simplement rejetĂ©s. Ce mĂ©canisme garantit que la transaction est incluse dans la blockchain et ne sera jamais annulĂ©e, quelle que soit la puissance de l'attaquant. De plus, les blocs finaux sont ceux signĂ©s par 2/3 des BP dans Hyperledger, Tendermint et d'autres consensus basĂ©s sur le pBFT. De plus, il est logique de rendre le protocole garantissant la finalitĂ© une surcouche du consensus, car il peut fonctionner de maniĂšre asynchrone avec la production et la publication des blocs. Voici un bon exemple. article sur la finalitĂ© dans Ethereum.

La finalitĂ© est extrĂȘmement importante pour les utilisateurs qui, sans elle, peuvent devenir victimes d'une attaque de « double dĂ©pense », lorsque le BP « retient » des blocs et les publie aprĂšs que le rĂ©seau a « vu » une bonne transaction. S'il n'y a pas de finalitĂ©, la fourche publiĂ©e remplace le bloc contenant la transaction « bonne » par un autre, d'une « mauvaise » fourche, dans laquelle les mĂȘmes fonds sont transfĂ©rĂ©s Ă  l'adresse de l'attaquant. Dans le cas du PVRB, les exigences en matiĂšre de finalitĂ© sont encore plus strictes, car la construction de fourches pour le PVRB signifie que l'attaquant peut prĂ©parer plusieurs variantes de randomness dans le but de publier celle qui lui est la plus favorable et de limiter le temps d'une attaque possible — une bonne solution.

Ainsi, la meilleure option serait de combiner PVRB et finalitĂ© en un seul protocole — alors le bloc finalisĂ© = randomness finalisĂ©, et c'est exactement ce que nous devions obtenir. Maintenant, les joueurs recevront une randomness garantie en N secondes et peuvent ĂȘtre sĂ»rs qu'il est impossible de le revenir en arriĂšre ou de rejouer.

L'option avec consensus intégré est bonne :

  • la capacitĂ© de mise en Ɠuvre asynchrone par rapport Ă  la production de blocs — les blocs sont produits comme d'habitude, mais parallĂšlement, le protocole PVRB peut fonctionner, qui produit des randoms pas Ă  chaque bloc
  • la possibilitĂ© d'implĂ©menter mĂȘme une cryptographie lourde, sans les restrictions imposĂ©es par les contrats intelligents
  • la possibilitĂ© d'organiser des Ă©changes de messages plus rapidement que les transactions ne sont intĂ©grĂ©es dans la blockchain, par exemple, une partie du protocole peut fonctionner entre les nƓuds sans diffusion des messages sur le rĂ©seau

Il présente également des inconvénients :

  • des difficultĂ©s lors des tests et du dĂ©veloppement — il faudra Ă©muler des erreurs rĂ©seau, des nƓuds manquants, des hard forks du rĂ©seau
  • des erreurs dans l'implĂ©mentation nĂ©cessitent un hard fork du rĂ©seau

Les deux mĂ©thodes d'implĂ©mentation du PVRB ont droit de citĂ©, mais l'implĂ©mentation sur des contrats intelligents dans les blockchains modernes est tout de mĂȘme fortement limitĂ©e en ressources de calcul, et toute transition vers une cryptographie sĂ©rieuse est souvent simplement impossible. Et nous aurons besoin d'une cryptographie sĂ©rieuse, comme cela sera dĂ©montrĂ© plus loin. Cependant, ce problĂšme est clairement temporaire, une cryptographie sĂ©rieuse dans les contrats est nĂ©cessaire pour rĂ©soudre de nombreuses tĂąches, et progressivement elle apparaĂźt (par exemple, les contrats systĂšmes pour zkSNARKs dans Ethereum).

La blockchain qui assure un canal de communication transparent et fiable pour le protocole n'est pas gratuite. Tout protocole dĂ©centralisĂ© doit tenir compte de la possibilitĂ© d'attaques Sybil ; toute action peut ĂȘtre rĂ©alisĂ©e par le biais de la collusion de plusieurs comptes. Par consĂ©quent, lors de la conception, il est essentiel d'Ă©valuer les capacitĂ©s des attaquants Ă  crĂ©er un nombre arbitraire de participants au protocole agissant en accord.

PVRB et variables de bloc.

Je n'ai pas menti en disant qu'il n'existe pas de bon PVRB, vĂ©rifiĂ© par de nombreuses applications de jeux, dans les blockchains pour le moment. D'oĂč alors un tel nombre d'applications de jeux sur Ethereum et EOS ? Cela m'Ă©tonne autant que vous. D'oĂč provient tant de 'hasards' 'robustes' dans un environnement entiĂšrement dĂ©terministe ?

La mĂ©thode prĂ©fĂ©rĂ©e pour obtenir du hasard dans la blockchain consiste Ă  prendre une information 'imprĂ©visible' d'un bloc et Ă  s'en servir pour gĂ©nĂ©rer du hasard, simplement en hachant une ou plusieurs valeurs. Voici un bon article sur les problĂšmes de tels schĂ©mas. ici. Vous pouvez utiliser l'une des valeurs 'imprĂ©visibles' d'un bloc, comme le hachage du bloc, le nombre de transactions, la difficultĂ© du rĂ©seau et d'autres valeurs inconnues Ă  l'avance. Ensuite, vous les hachez, une ou plusieurs, et, en thĂ©orie, cela devrait donner un vĂ©ritable hasard. Vous pourriez mĂȘme ajouter dans le livre blanc que votre schĂ©ma est 'post-quantum secure' (puisqu'il existe des fonctions de hachage rĂ©sistantes aux quantiques :)).

Mais mĂȘme les hachages post-quantiques ne suffisent pas, hĂ©las. Le secret rĂ©side dans les exigences relatives au PVRB, je rappelle celles-ci de l'article prĂ©cĂ©dent :

  1. Le résultat doit avoir une distribution prouvée équitable, c'est-à-dire reposant sur une cryptographie résistante à la preuve.
  2. Il est impossible de contrĂŽler l'un des bits du rĂ©sultat. Par consĂ©quent, le rĂ©sultat ne peut pas ĂȘtre prĂ©dit Ă  l'avance.
  3. Il est impossible de saboter le protocole de génération en ne participant pas au protocole ou en surchargeant le réseau avec des messages attaquants.
  4. Tout ce qui prĂ©cĂšde doit ĂȘtre rĂ©sistant aux collusions d'un nombre admissible de participants malhonnĂȘtes au protocole (par exemple 1/3 des participants).

Dans ce cas, seule l'exigence 1 est respectĂ©e, et l'exigence 2 n'est pas respectĂ©e. En hachant des valeurs imprĂ©visibles du bloc, nous obtiendrons une rĂ©partition uniforme et de bons alĂ©atoires. Cependant, le BP a au moins la possibilitĂ© de « publier le bloc ou non ». Ainsi, le BP peut au moins choisir entre DEUX options d'alĂ©atoire : le sien et celui qui sera obtenu si le bloc est créé par quelqu'un d'autre. Le BP peut « jeter un coup d'Ɠil » Ă  l'avance sur ce qui se passera s'il publie le bloc et dĂ©cider simplement de le faire ou non. Ainsi, en jouant par exemple Ă  « pair/impair » ou « rouge/noir » Ă  la roulette, il peut publier le bloc seulement s'il voit un gain. Cela rend Ă©galement non fonctionnelle la stratĂ©gie d'utilisation, par exemple, du hachage du bloc « du futur ». Dans ce cas, on dit que « le random sera celui qui est obtenu par le hachage des donnĂ©es actuelles et le hachage du futur bloc d'une hauteur, par exemple, N + 42, oĂč N est la hauteur actuelle du bloc. Cela renforce un peu le schĂ©ma, mais permet quand mĂȘme au BP, mĂȘme dans le futur, de choisir de retenir le bloc ou de le publier.

Dans ce cas, le logiciel du BP est compliquĂ©, mais pas trop. Lors de la validation et de l'inclusion de la transaction dans le bloc, une vĂ©rification rapide est effectuĂ©e pour savoir s'il y aura un gain, et peut-ĂȘtre un ajustement d'un des paramĂštres de la transaction pour obtenir une probabilitĂ© Ă©levĂ©e de gain. Cependant, attraper un BP intelligent derriĂšre de telles manipulations est pratiquement impossible, chaque fois, de nouvelles adresses peuvent ĂȘtre utilisĂ©es, permettant de gagner petit Ă  petit sans Ă©veiller de soupçons.

Ainsi, les mĂ©thodes utilisant des informations du bloc ne conviennent pas pour ĂȘtre une implĂ©mentation universelle du PVRB. Dans une version limitĂ©e, avec des restrictions sur les tailles de paris, des limites sur le nombre de joueurs et/ou une inscription KYC (afin de ne pas donner Ă  un joueur la possibilitĂ© d'utiliser plusieurs adresses), ces schĂ©mas peuvent fonctionner pour de petites jeux, mais pas plus.

PVRB et commit-reveal.

Eh bien, merci au hachage et Ă  la relative imprĂ©visibilitĂ© du hachage du bloc et d'autres variables. S'il est possible de rĂ©soudre le problĂšme du front-running des mineurs, quelque chose de plus solide devrait Ă©merger. Ajoutons Ă  ce schĂ©ma les utilisateurs - qu'ils influencent aussi le random : n'importe quel employĂ© du support technique vous dira que la chose la plus alĂ©atoire dans les systĂšmes informatiques, ce sont les actions des utilisateurs 🙂

Un schĂ©ma naĂŻf oĂč les utilisateurs envoient simplement des nombres alĂ©atoires et oĂč le rĂ©sultat est calculĂ© comme, par exemple, le hachage de leur somme, n'est pas adaptĂ©. Dans ce cas, le dernier joueur peut contrĂŽler le rĂ©sultat en choisissant son propre alĂ©a. C'est pourquoi on utilise un modĂšle trĂšs rĂ©pandu de commit-reveal. Les participants envoient d'abord des hachages de leurs alĂ©as (commits), puis rĂ©vĂšlent leurs alĂ©as rĂ©els (reveals). La phase "reveal" commence seulement aprĂšs que les commits nĂ©cessaires aient Ă©tĂ© collectĂ©s, permettant aux participants d'envoyer exactement l'alĂ©a dont ils ont envoyĂ© le hachage prĂ©cĂ©demment. Maintenant, assemblons tout cela avec les paramĂštres du bloc, pris de maniĂšre optimale dans le futur (l'alĂ©a ne peut ĂȘtre connu que dans l'un des blocs futurs), et voilĂ  — l'alĂ©a est prĂȘt ! DĂ©sormais, chaque joueur influence l'alĂ©a rĂ©sultant et peut « battre » un BP malveillant en recouvrant son alĂ©a avec le sien, qui est inconnu Ă  l'avance. On peut Ă©galement ajouter une protection contre le sabotage du protocole par une non-rĂ©vĂ©lation Ă  l'Ă©tape de reveal — en exigeant simplement lors du commit de joindre Ă  la transaction une certaine somme — un dĂ©pĂŽt de garantie, qui ne sera restituĂ© qu'Ă  la procĂ©dure de reveal. Dans ce cas, faire un commit sans faire de reveal serait dĂ©savantageux.

C'Ă©tait une bonne tentative, et des schĂ©mas comme ceux-ci existent Ă©galement dans des DApp de jeux, mais hĂ©las, cela ne suffit toujours pas. Maintenant, le rĂ©sultat peut ĂȘtre influencĂ© non seulement par le mineur, mais aussi par n'importe quel participant au protocole. Il est toujours possible de contrĂŽler la valeur elle-mĂȘme, avec une moindre variabilitĂ© et contre rĂ©munĂ©ration, mais, comme dans le cas du mineur, si les rĂ©sultats du tirage valent plus que le coĂ»t de participation au protocole PVRB, alors le random-producer (RP) peut dĂ©cider de faire le reveal et peut toujours choisir parmi au moins deux options d'alĂ©a.
Cependant, il existe maintenant la possibilitĂ© de punir ceux qui font un commit sans faire de reveal, et ce schĂ©ma sera encore utile. Sa simplicitĂ© est un avantage sĂ©rieux — des protocoles plus complexes nĂ©cessitent des calculs beaucoup plus puissants.

PVRB et signatures déterministes.

Il existe un autre moyen de faire en sorte que le RP fournisse un nombre pseudo-alĂ©atoire sur lequel il ne pourra pas influencer, en lui fournissant un "modĂšle" : c'est une signature dĂ©terministe. Une telle signature est, par exemple, RSA, et ne l'est pas en ECS. Si le RP possĂšde une paire de clĂ©s : RSA et ECC, et qu'il signe une certaine valeur avec sa clĂ© privĂ©e, alors dans le cas de RSA, il obtiendra UNE ET UNE SEULE signature, tandis qu'avec ECS, il peut gĂ©nĂ©rer un nombre quelconque de signatures valides diffĂ©rentes. Cela est dĂ» au fait que lors de la crĂ©ation de la signature ECS, un nombre alĂ©atoire est choisi par le signataire, et il peut ĂȘtre choisi comme bon semble, permettant au signataire de choisir parmi plusieurs signatures. Dans le cas de RSA : "une valeur d'entrĂ©e" + "une paire de clĂ©s" = "une signature". Il est impossible de prĂ©dire quelle signature aura un autre RP, donc le PVRB avec des signatures dĂ©terministes peut ĂȘtre organisĂ© en combinant des signatures RSA de plusieurs participants qui ont signĂ© la mĂȘme valeur. Par exemple - le prĂ©cĂ©dent alĂ©atoire. Ce schĂ©ma permet d'Ă©conomiser de nombreuses ressources, car les signatures sont Ă  la fois une confirmation de la conformitĂ© au protocole et une source d'alĂ©atoire.

Cependant, mĂȘme avec des signatures dĂ©terministes, le schĂ©ma reste vulnĂ©rable Ă  la problĂ©matique de "l'acteur final". Le dernier participant peut encore dĂ©cider s'il publie sa signature ou non, contrĂŽlant ainsi le rĂ©sultat. Il est possible d'amĂ©liorer le schĂ©ma, d'y ajouter des hachages de blocs, de crĂ©er des tours pour que le rĂ©sultat ne puisse pas ĂȘtre prĂ©dit Ă  l'avance, mais toutes ces techniques, mĂȘme avec de nombreuses amĂ©liorations, laissent tout de mĂȘme la problĂ©matique de l'influence d'un participant sur le rĂ©sultat collectif dans un environnement non fiable non rĂ©solue et peuvent fonctionner uniquement dans des conditions de contraintes Ă©conomiques et de temps. De plus, la taille des clĂ©s RSA (1024 et 2048 bits) est assez grande, et la taille pour les transactions blockchain est un paramĂštre extrĂȘmement important. Apparemment, il ne sera pas possible de rĂ©soudre le problĂšme simplement, avançons.

PVRB et les schémas de partage secret

En cryptographie, il existe des schĂ©mas qui permettent Ă  un rĂ©seau de convenir d'une valeur unique pour le PVRB, tout en Ă©tant rĂ©sistant Ă  toute action malveillante d'une partie des participants. Un des protocoles intĂ©ressants Ă  connaĂźtre est le schĂ©ma de partage de secret de Shamir. Ce schĂ©ma permet de diviser un secret (par exemple une clĂ© secrĂšte) en plusieurs parts et de distribuer ces parts Ă  N participants. Le secret est distribuĂ© de maniĂšre Ă  ce que M parts sur N soient suffisantes pour le reconstituer, et cela peut ĂȘtre n'importe quelle combinaison de M parts. Pour faire simple, ayant un graphique d'une fonction inconnue, les participants Ă©changent des points sur ce graphique, et aprĂšs avoir reçu M points, toute la fonction peut ĂȘtre reconstituĂ©e.
Une bonne explication est donnée dans wiki et pour s'y essayer pratiquement, il est utile de jouer avec sur la démo page.

Si le schéma FSSS (Fiat-Shamir Secret Sharing) était applicable tel quel, alors ce serait un PVRB infaillible. Dans sa version la plus simple, le protocole pourrait ressembler à ceci :

  • Chaque participant gĂ©nĂšre son propre random et distribue des parts de celui-ci aux autres participants.
  • Chaque participant dĂ©voile sa part des secrets des autres participants.
  • Si un participant a recueilli plus de M parts, alors son numĂ©ro peut ĂȘtre calculĂ© et il sera unique, quel que soit l'ensemble des participants qui ont dĂ©voilĂ© leurs parts.
  • La combinaison des randoms dĂ©voilĂ©s constitue le PVRB recherchĂ©.

Ici, un participant individuel n'influence plus les rĂ©sultats du protocole, sauf dans les cas oĂč sa contribution est essentielle au seuil de rĂ©vĂ©lation du random. Ainsi, ce protocole, en prĂ©sence d'une fraction nĂ©cessaire de participants fonctionnant selon le protocole et de RPs accessibles, fonctionne, remplissant les exigences de rĂ©sistance cryptographique et Ă©tant rĂ©sistant au problĂšme du « dernier acteur ».

Cela pourrait ĂȘtre la solution idĂ©ale, ce schĂ©ma PVRB basĂ© sur le partage de secret de Fiat-Shamir est dĂ©crit, par exemple, dans celui-ci l'article. Mais, comme mentionnĂ© prĂ©cĂ©demment, essayer de l'appliquer directement dans une blockchain entraĂźne dĂ©jĂ  des limitations techniques. Voici un exemple d'implĂ©mentation de test du protocole dans un contrat intelligent EOS et la partie la plus importante — la vĂ©rification de la part publiĂ©e d'un participant : codeLe code montre que la validation du proof exige plusieurs multiplications scalaires, et des nombres trĂšs grands sont utilisĂ©s. Il faut comprendre que dans les blockchains, la vĂ©rification se produit au moment oĂč le producteur de blocs traite la transaction, et chaque participant doit pouvoir vĂ©rifier facilement la validitĂ© du protocole. Par consĂ©quent, les exigences de vitesse pour la fonction de vĂ©rification sont trĂšs strictes. Dans cette variante, le systĂšme s'est avĂ©rĂ© non fonctionnel, car la vĂ©rification dĂ©passait la limite de temps de la transaction (0,5 seconde).

L'efficacitĂ© de la vĂ©rification est l'une des exigences les plus importantes pour l'utilisation de pratiquement tous les schĂ©mas cryptographiques avancĂ©s dans la blockchain. La crĂ©ation de proofs, la prĂ©paration de messages — ces procĂ©dures peuvent ĂȘtre rĂ©alisĂ©es hors chaĂźne et exĂ©cutĂ©es sur des ordinateurs haute performance, mais il n'est pas possible d'Ă©viter la vĂ©rification — c'est une autre exigence essentielle pour le PVRB.

PVRB et signatures seuil

En dĂ©couvrant le schĂ©ma de partage de secrets, nous avons ouvert toute une classe de protocoles, regroupĂ©s sous le mot-clĂ© « seuil ». Lorsque la divulgation d'informations requiert la participation de M participants honnĂȘtes sur N, et que l'ensemble des participants honnĂȘtes peut ĂȘtre n'importe quel sous-ensemble de N, on parle de schĂ©mas « Ă  seuil ». Ces derniers permettent de rĂ©soudre le problĂšme du « dernier acteur ». Si un attaquant ne divulgue pas sa part du secret, un autre participant honnĂȘte le fera Ă  sa place. Ces schĂ©mas permettent de convenir d'une et d'une seule valeur, mĂȘme en cas de sabotage du protocole par certains participants.

La combinaison de signatures dĂ©terministes et de schĂ©mas Ă  seuil a permis de dĂ©velopper un schĂ©ma trĂšs pratique et prometteur pour la rĂ©alisation du PVRB — ce sont les signatures Ă  seuil dĂ©terministes. Voici article sur les diffĂ©rentes applications des signatures Ă  seuil, et voici encore un bon longread de Dash.

Le dernier article dĂ©crit les signatures BLS (BLS signifie Boneh-Lynn-Shacham, voici Un article qui possĂšde une qualitĂ© trĂšs importante et extrĂȘmement pratique pour les programmeurs — les clĂ©s publiques, secrĂštes et les signatures BLS peuvent ĂȘtre combinĂ©es entre elles grĂące Ă  des opĂ©rations mathĂ©matiques simples, tout en restant des clĂ©s et signatures valides, permettant ainsi d'agrĂ©ger facilement de nombreuses signatures en une seule et de nombreuses clĂ©s publiques en une seule. Elles possĂšdent Ă©galement une dĂ©terminisme et produisent le mĂȘme rĂ©sultat avec les mĂȘmes donnĂ©es d'entrĂ©e. GrĂące Ă  cette qualitĂ©, les combinaisons de signatures BLS elles-mĂȘmes sont des clĂ©s valides, ce qui permet de rĂ©aliser un scĂ©nario oĂč M participants sur N produisent une seule et unique signature, qui est dĂ©terminĂ©e, publiquement vĂ©rifiable et imprĂ©visible jusqu'Ă  ce que le MĂšme participant ne l'ait rĂ©vĂ©lĂ©e.

Dans le schéma des signatures BLS par seuil, chaque participant signe à l'aide de BLS quelque chose (par exemple, un aléatoire précédent), et la signature globale par seuil est le random recherché. Les propriétés cryptographiques des signatures BLS répondent aux exigences de qualité du random, la partie seuil protÚge contre l'« acteur final », et la combinabilité unique des clés permet de réaliser de nombreux autres algorithmes intéressants, qui, par exemple, permettent d'agréger efficacement les messages du protocole.

Donc, si vous construisez un PVRB dans votre blockchain, vous arriverez trÚs probablement à un schéma de signatures BLS par seuil, qui est déjà utilisé par plusieurs projets. Par exemple, DFinity (ici un benchmark implémentant le schéma, et ici un exemple d'implémentation du partage secret vérifiable), ou Keep.network (voici leur random beacon yellowpaper, mais voici exemple un contrat intelligent qui gÚre le protocole).

Implémentation PVRB

Malheureusement, nous ne voyons toujours pas de protocole PVRB prĂȘt, rĂ©alisĂ© sur les blockchains, prouvant sa sĂ©curitĂ© et sa robustesse. Bien que les protocoles eux-mĂȘmes soient prĂȘts, il est techniquement difficile de les appliquer aux solutions existantes. Pour les systĂšmes centralisĂ©s, PVRB n'a pas de sens, tandis que les systĂšmes dĂ©centralisĂ©s sont strictement limitĂ©s dans toutes les ressources informatiques : CPU, mĂ©moire, stockage, I/O. La conception de PVRB consiste Ă  combiner diffĂ©rents protocoles pour crĂ©er quelque chose qui rĂ©ponde Ă  toutes les exigences d'au moins un blockchain viable. Un protocole calcule efficacement, mais nĂ©cessite davantage de messages entre les RP, tandis qu'un autre nĂ©cessite trĂšs peu de messages, mais la crĂ©ation d'une preuve peut prendre des dizaines de minutes, voire des heures.

Je vais énumérer les facteurs que vous devez prendre en compte lors du choix d'un PVRB de qualité :

  • SoliditĂ© cryptographique. Votre PVRB doit ĂȘtre strictement inbiasable, sans possibilitĂ© de contrĂŽler un seul bit. Dans certains schĂ©mas, ce n'est pas le cas, donc faites appel Ă  un cryptographe.
  • ProblĂšme de “dernier acteur”. Votre PVRB doit ĂȘtre rĂ©sistant aux attaques, lorsque l'attaquant, contrĂŽlant un ou plusieurs RP, peut choisir l'un des deux rĂ©sultats.
  • ProblĂšme de sabotage du protocole. Votre PVRB doit ĂȘtre rĂ©sistant aux attaques, lorsque l'attaquant, contrĂŽlant un ou plusieurs RP, dĂ©cide s'il y a du hasard ou non et peut influencer cela de maniĂšre garantissant ou avec une probabilitĂ© donnĂ©e.
  • ProblĂšme du nombre de messages. Vos RP doivent envoyer un minimum de messages Ă  la blockchain et Ă©viter autant que possible les actions synchrones telles que 'j'ai envoyĂ© certaines informations, j'attends une rĂ©ponse d'un participant spĂ©cifique'. Dans les rĂ©seaux P2P, surtout gĂ©ographiquement dispersĂ©s, on ne peut pas compter sur une rĂ©ponse rapide.
  • ProblĂšme de complexitĂ© computationnelle. La vĂ©rification de toute Ă©tape de PVRB on-chain doit ĂȘtre extrĂȘmement simple, car elle est effectuĂ©e par tous les clients complets du rĂ©seau. Si la mise en Ɠuvre est faite via un smart contract, les exigences de vitesse sont trĂšs strictes.
  • ProblĂšme d'accessibilitĂ© et de vivacitĂ©. Votre PVRB doit aspire Ă  ĂȘtre rĂ©sistant aux situations oĂč une partie du rĂ©seau devient inaccessible pendant un certain temps et oĂč une partie des RP cesse simplement de fonctionner.
  • ProblĂšme de configuration de confiance et de distribution initiale des clĂ©s. Si votre PVRB utilise un protocole de configuration primaire, c'est une autre histoire importante et complexe. Voici exemple. Si les participants doivent Ă©changer leurs clĂ©s avant le dĂ©but du protocole, c'est Ă©galement un problĂšme si la composition des participants change
  • ProblĂšmes de dĂ©veloppement. La disponibilitĂ© des bibliothĂšques dans les langues nĂ©cessaires, leur sĂ©curitĂ© et leur performance, leur accessibilitĂ©, des tests complexes, etc.

Par exemple, avec les signatures BLS de seuil, il y a un problĂšme majeur : avant de commencer Ă  travailler, les participants doivent absolument Ă©changer leurs clĂ©s, en formant un groupe au sein duquel le seuil fonctionnera. Cela signifie qu'il faudra au moins un tour d'Ă©change dans un rĂ©seau dĂ©centralisĂ©, et Ă©tant donnĂ© que le random gĂ©nĂ©rĂ©, par exemple, est nĂ©cessaire pour les jeux, pratiquement en temps rĂ©el, cela signifie qu'un sabotage du protocole est possible Ă  ce stade, et les avantages du schĂ©ma de seuil sont perdus. Ce problĂšme est dĂ©jĂ  plus simple que les prĂ©cĂ©dents, mais exige nĂ©anmoins le dĂ©veloppement d'une procĂ©dure distincte pour former des groupes de seuil, qui devra ĂȘtre sĂ©curisĂ©e Ă©conomiquement par le biais de dĂ©pĂŽts et de pĂ©nalitĂ©s (slashing) pour les participants ne respectant pas le protocole. De plus, la vĂ©rification BLS avec un niveau de sĂ©curitĂ© acceptable ne peut tout simplement pas ĂȘtre intĂ©grĂ©e, par exemple, dans une transaction standard EOS ou Ethereum - il n'y a tout simplement pas assez de temps pour la vĂ©rification. Le code des contrats est du WebAssembly ou de l'EVM, exĂ©cutĂ© par une machine virtuelle. Les fonctions cryptographiques ne sont pas encore implĂ©mentĂ©es nativement et fonctionnent des dizaines de fois plus lentement que les bibliothĂšques cryptographiques standard. De nombreux protocoles ne rĂ©pondent pas aux exigences simplement en raison du volume des clĂ©s, par exemple 1024 et 2048 bits pour RSA, ce qui est 4 Ă  8 fois plus que la signature standard d'une transaction dans Bitcoin et Ethereum.

Le fait qu'il existe des implĂ©mentations dans diffĂ©rentes langues de programmation joue Ă©galement un rĂŽle - elles sont assez rares, surtout pour les nouveaux protocoles. L'option d'intĂ©gration dans le consensus nĂ©cessite d'Ă©crire le protocole dans le langage de la plateforme, il faudra donc chercher du code en Go pour geth, en Rust pour Parity, en C++ pour EOS. Le code en JavaScript devra ĂȘtre recherchĂ© par tout le monde, et comme JavaScript et la cryptographie ne sont pas vraiment des amis, WebAssembly aidera, qui prĂ©tend dĂ©sormais sĂ©rieusement au rĂŽle de prochain standard internet important.

Conclusion

J'espĂšre que dans le prĂ©cĂ©dent article J'ai pu vous convaincre que la gĂ©nĂ©ration de nombres alĂ©atoires sur la blockchain est essentielle pour de nombreux aspects de la vie des rĂ©seaux dĂ©centralisĂ©s. Cet article a montrĂ© que cette tĂąche est extrĂȘmement ambitieuse et complexe, mais de bonnes solutions existent dĂ©jĂ . En rĂ©alitĂ©, la conception finale du protocole ne sera possible qu'aprĂšs de vasts tests prenant en compte tous les aspects, depuis la configuration jusqu'Ă  l'Ă©mulation des pannes. C'est pourquoi vous ne trouverez probablement pas de recettes toutes faites dans les livres blancs des Ă©quipes ou dans les articles, et nous ne nous risquerons pas Ă  Ă©crire 'faites ceci, c'est assurĂ©ment correct' dans les un Ă  deux prochaines annĂ©es.

Pour notre PVRB dans la blockchain en dĂ©veloppement Haya, nous avons optĂ© pour l'application de signatures BLS Ă  seuil. Nous prĂ©voyons d'implĂ©menter le PVRB au niveau du consensus, car la vĂ©rification dans les contrats intelligents avec un niveau de sĂ©curitĂ© acceptable est encore impossible. Il est possible que nous utilisions deux schĂ©mas : d'abord un partage de secret coĂ»teux pour crĂ©er un random_seed Ă  long terme, puis nous l'utiliserons comme base pour la gĂ©nĂ©ration haute frĂ©quence de random avec des signatures BLS dĂ©terministes Ă  seuil, mais il se pourrait que nous nous contentions d'un seul schĂ©ma. Il est malheureusement impossible de dire Ă  l'avance Ă  quoi ressemblera le protocole ; ce qui est encourageant, c'est que, comme en science, dans les tĂąches d'ingĂ©nierie, un rĂ©sultat nĂ©gatif est aussi un rĂ©sultat, et chaque nouvelle tentative de rĂ©soudre un problĂšme reprĂ©sente une nouvelle Ă©tape pour ceux qui travaillent sur la question. Pour rĂ©pondre aux exigences commerciales, nous abordons une tĂąche pratique spĂ©cifique : fournir aux applications de jeu une source d'entropie fiable. C'est pourquoi nous devons Ă©galement prĂȘter attention Ă  la blockchain elle-mĂȘme, notamment aux questions de finalitĂ© de la chaĂźne et de gouvernance du rĂ©seau.

Et mĂȘme si nous ne voyons pas encore dans les blockchains un PVRB prouvĂ© et rĂ©silient qui aurait Ă©tĂ© utilisĂ© suffisamment longtemps pour passer les tests sur de vĂ©ritables applications, Ă  travers de multiples audits, des charges et, bien sĂ»r, de vĂ©ritables attaques, le nombre de voies possibles prouve qu'il existe une solution. L'un de ces algorithmes rĂ©soudra finalement le problĂšme. Nous serons heureux de partager nos rĂ©sultats et remercions les autres Ă©quipes qui se penchent Ă©galement sur cette question pour leurs articles et leur code, qui permettent aux ingĂ©nieurs de ne pas retomber dans les mĂȘmes piĂšges.

Ainsi, lorsque vous rencontrez un programmeur qui conçoit un hasard dĂ©centralisĂ©, faites preuve de prudence et de bienveillance, et offrez un soutien psychologique si nĂ©cessaire 🙂

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster