Chainlink VRF: l’aléatoire vérifiable on-chain

Traduction de https://blog.chain.link/chainlink-vrf-on-chain-verifiable-randomness/

Nous sommes ravis d’annoncer Chainlink VRF, qui utilise des fonctions aléatoires vérifiables pour générer un caractère aléatoire vérifiable on-chain. Nous pensons que de nombreux contrats intelligents bénéficieront de Chainlink VRF, en particulier ceux qui souhaitent fournir la preuve qu’ils utilisent effectivement une source d’aléa inviolable hors de leur contrôle. Nous tenons à remercier nos collaborateurs universitaires, l’ensemble de la communauté des développeurs qui nous ont fait part de leurs commentaires sur Chainlink VRF, ainsi que les nombreux membres de l’équipe qui ont déployé leurs efforts pour faire de cette première mise en œuvre une réalité fonctionnelle, merci.

Chainlink VRF permet de faciliter et d’accélérer le développement de contrats intelligents axés sur les jeux blockchain, la sécurité, les protocoles de niveau 2 et divers autres cas d’utilisation. Les développeurs peuvent facilement intégrer Chainlink VRF pour utiliser le caractère aléatoire vérifiable dans leurs contrats intelligents grâce à notre documentation récemment publiée.

La nécessité d’un caractère aléatoire vérifiable

Un état d’esprit sensible à la sécurité est nécessaire pour créer et défendre avec succès un contrat intelligent contre les adversaires qui cherchent à voler les fonds détenus par ce contrat. Les développeurs de contrats intelligents utilisant le caractère aléatoire comme entrée clé doivent également considérer la manipulation de ce caractère aléatoire comme un risque critique. Les systèmes bien conçus qui s’appuient sur le caractère aléatoire doivent idéalement être à la fois prouvés équitables et incertains pour tous les participants au contrat, tout en réduisant le risque qu’un adversaire puisse exploiter leur contrat en prédisant ses résultats.

Chainlink VRF cherche à répondre à ces deux exigences en fournissant son caractère aléatoire avec des preuves cryptographiques qui peuvent être vérifiées on-chain, montrant que le caractère aléatoire est effectivement imprévisible. En raison de la nature vérifiable on-chain du caractère aléatoire de Chainlink VRF, les nœuds participants ne peuvent que retenir une demande, pour laquelle ils seraient pénalisés financièrement en utilisant Chainlink, et éventuellement retirés des futures requêtes qui auraient payé des frais pour leur caractère aléatoire.

En utilisant Chainlink VRF, vous pouvez construire des contrats intelligents fiables pour toutes les applications qui nécessitent des résultats imprévisibles pour :

  • Rendre les jeux plus fiables en utilisant une source d’aléatoire qui est vérifiable on-chain, ce qui permet aux développeurs de fournir des preuves supplémentaires aux utilisateurs sensibles à la sécurité.
  • Rendre les jeux plus amusants en générant des scénarios et des environnements stimulants et imprévisibles, et en attribuant des récompenses imprévisibles aux joueurs, comme des butins.
  • Générer des affectations de tâches et de ressources dont le caractère aléatoire est prouvé, par exemple en affectant de manière aléatoire des juges à des affaires ou des auditeurs à des entreprises faisant l’objet d’un examen.
  • Choisissez un échantillon représentatif d’observateurs pouvant voter sur une proposition pour laquelle le contrat doit établir un consensus (les sondages sont un moyen efficace de fournir une résistance supplémentaire à la sybille).

Limites des méthodes existantes en matière de sécurité

Les solutions existantes pour fournir un caractère aléatoire aux contrats intelligents ont des limites qui sont surmontées par le caractère aléatoire vérifiable de Chainlink VRF. L’utilisation de données existantes on-chain, comme un blockhash, et/ou de divers éléments aléatoires off-chain qui doivent ensuite être placés on-chain, présente son propre ensemble de défis uniques.

Un exemple d’exploit que les développeurs de contrats intelligents cherchant à s’appuyer sur une blockchain pour le caractère aléatoire devraient chercher à éviter est la confiance excessive dans les garanties de caractère aléatoire basées sur le hachage des blocs. Par exemple, supposons qu’un contrat prenne des décisions basées sur la parité du dernier bit dans le hash du bloc à une certaine hauteur. Cela ressemble à un résultat 50/50, mais considérez qu’un mineur (ou une coalition de mineurs) qui produit un tiers des blocs en moyenne peut décider de jeter les blocs gagnants pour lesquels le dernier bit du blockhash est un, renonçant à la récompense du bloc d’environ 2–3 ETH. Dans ce cas, le mineur pourrait faire passer le résultat zéro d’une probabilité fiable de 50 % à une probabilité de 2/3, ce qui entraînerait la perte des fonds des utilisateurs de tout contrat intelligent reposant sur cette méthode de génération aléatoire. Si le comportement de zéro-bit du contrat profite au mineur de plus de 12–18 ETH, ce comportement serait économiquement rationnel, créant une limite supérieure pour la valeur qu’un contrat utilisant cette méthode devrait sécuriser.

Afin d’éviter ce genre de problèmes, les développeurs de contrats intelligents se tournent déjà vers des solutions off-chain, où un nombre aléatoire est généré off-chain et introduit on-chain. Cependant, sans vérification cryptographique de l’impartialité de la valeur off-chain, le résultat peut être manipulé par le fournisseur off-chain et/ou par la couche de transport de données qui introduit cette valeur aléatoire on-chain. De même, les utilisateurs de l’application sont obligés de supposer que la valeur aléatoire est produite de manière équitable et qu’elle a été introduite on-chain sans être modifiée en cours de route vers l’application.

Nous pensons que les développeurs de contrats intelligents qui envisagent d’utiliser une source d’aléa pour le contrat intelligent devraient chercher à éviter d’autres compromis et risques de sécurité clés, notamment les suivants :

  • Inaccessibilité ou incompatibilité avec les contrats intelligents.
  • Manipulation par l’opérateur centralisé du générateur de nombres aléatoires.
  • L’exploitation par les mineurs d’une blockchain en tant qu’utilisateurs de l’application.
  • Exigences de confiance déraisonnablement élevées de la part des utilisateurs finaux de l’application.

Pour aider à faire face à ces risques et à d’autres risques de sécurité indésirables, Chainlink VRF offre la transparence et la preuve cryptographique que chaque résultat est généré de manière équitable.

Comment Chainlink VRF fonctionne

Comment Chainlink VRF fonctionne

En bref, un contrat intelligent demande un caractère aléatoire en fournissant une seed à Chainlink. La seed, qui doit être imprévisible pour les oracles auxquels elle est fournie, est utilisée pour générer un nombre aléatoire, qui est ensuite envoyé au contrat on-chain. Chaque oracle utilise sa propre clé secrète lors de la génération du caractère aléatoire. Lorsque le résultat est publié on-chain avec une preuve, il est vérifié à l’aide de la clé publique de l’oracle et de la seed de l’application. En s’appuyant sur les capacités largement acceptées de vérification des signatures et des preuves d’une blockchain, cela permet aux contrats de ne consommer que des données aléatoires qui ont également été vérifiées par le même environnement on-chain exécutant le contrat lui-même.

L’avantage fondamental de l’utilisation du VRF Chainlink est son caractère aléatoire vérifiable. Même si un nœud est compromis, il ne peut pas manipuler et/ou fournir des réponses biaisées — la preuve cryptographique on-chain échouerait. Le pire scénario est que le nœud compromis ne renvoie pas de réponse à une demande, ce qui sera immédiatement et à jamais visible sur la blockchain. Les utilisateurs ne se fieraient plus aux nœuds qui cessent de répondre et/ou qui ne fournissent pas de preuve valide au hasard. Même dans le cas improbable où un nœud est compromis, le caractère aléatoire qui en résulte ne peut pas être manipulé. Les nœuds compromis ne peuvent que retenir une requête et ne pas donner de réponse, ce qui les pénaliserait financièrement en utilisant Chainlink et les retirerait des futures requêtes qui auraient payé des frais pour leur caractère aléatoire, créant ainsi une perte économique immédiate et à long terme substantielle pour les opérateurs de nœuds de faible qualité et/ou qui se comportent mal. En bref, le VRF de Chainlink ne peut pas manipuler une application qui l’utilise correctement ; il peut seulement se déconnecter ou retenir un seul résultat avant d’être retiré comme source de tout caractère aléatoire futur. Cela crée une sécurité supérieure pour les développeurs de contrats intelligents et leurs utilisateurs.

Un avantage supplémentaire du VRF Chainlink est que, à mesure que les utilisateurs l’utilisent, les frais d’utilisation payés aux opérateurs de nœuds augmentent, ce qui incite les opérateurs de nœuds à fournir autant de garanties de sécurité que possible. La sécurité cryptoéconomique via le staking sera probablement quelque chose que les utilisateurs demanderont d’augmenter au fil du temps et qu’ils justifieront par leurs frais de plus en plus importants, qui paient pour une sécurité supplémentaire. Cela conduit à une ressource globale partagée qui est soutenue par les frais d’utilisation, et permet aux utilisateurs supplémentaires qui auraient dépensé des fonds pour fabriquer leur propre solution RNG de déployer ces mêmes fonds pour augmenter la sécurité collective d’une ressource partagée pour l’ensemble de l’écosystème blockchain. La capacité de Chainlink à prendre en charge différentes blockchains, telles que Polkadot, Tezos et bien d’autres, signifie que l’univers des utilisateurs payant pour cette ressource communautaire continuera de croître dans un effet de réseau entre l’utilisation et l’augmentation progressive des garanties de sécurité cryptoéconomiques.

Example d’intégration: PoolTogether

PoolTogether, le jeu d’épargne sans perte sur Ethereum, est quelque chose que nous trouvons vraiment passionnant et nous sommes ravis qu’après une recherche technique approfondie par leur équipe, ils utiliseront Chainlink VRF pour fournir des garanties à leurs utilisateurs sur le caractère aléatoire prouvé de leur application.

Comment PoolTogther utilise Chainlink VRF

PoolTogether est un jeu d’épargne sans perte qui met en commun les dépôts des utilisateurs et distribue les intérêts gagnés sur la mise en commun à un gagnant sélectionné au hasard lors de tirages quotidiens et hebdomadaires. Le jeu encourage l’épargne grâce à un mécanisme de loterie.

En mettant en œuvre le caractère aléatoire vérifiable de Chainlink VRF, les utilisateurs de PoolTogether seront en mesure de vérifier que chaque gagnant soit sélectionné avec une source aléatoire impartiale. En plus d’être plus sûrs de leur propre sécurité, PoolTogether sera également en mesure de prouver à leurs utilisateurs qu’une partie clé de leur architecture fonctionne d’une manière sûre et aléatoire vérifiable, fournissant aux utilisateurs une plus grande raison de croire que PoolTogether leur fournira effectivement un paiement s’ils deviennent un participant de leur contrat intelligent.

Visite technique

Chainlink VRF est une implémentation de la fonction aléatoire vérifiable (VRF) de Goldberg telle que décrite dans cet article. Le mot “aléatoire” dans “fonction aléatoire vérifiable” signifie “entièrement imprévisible (uniformément distribué) pour quiconque ne connaît pas la seed ou la clé secrète”.

La clé secrète du VRF est un nombre que l’oracle choisit dans la distribution uniforme sur {0, …, #secp256k1–1}, d’une manière cryptographiquement sûre. (secp256k1 est la courbe elliptique utilisée par la cryptographie d’ethereum.) Associée à cette clé secrète, il y a une clé publique, qui est utilisée pour identifier l’oracle. L’oracle enregistre la clé publique avec la machine on-chain, ainsi que le job-ID Chainlink auquel il répondra.

Lorsqu’un contrat de consommation fait une demande de caractère aléatoire, il fournit une seed. Pour s’assurer que la sortie du VRF est difficile à prédire, il est bon d’incorporer des valeurs imprévisibles et difficiles à manipuler dans la seed, comme le plus récent blockhash, et peut-être des données du monde réel attestées cryptographiquement, comme le plus récent prix d’un actif. Vous pouvez les combiner dans un bytes32 qui sera utilisé comme entrée de la seed en utilisant keccak256. Le mécanisme VRF on-chain fournit une protection de base en mélangeant la seed fournie par le consommateur avec d’autres données pour empêcher les attaques par rejeu, mais il est essentiel de fournir également la vôtre.

Une fois que la machine on-chain a déterminé la seed, elle diffuse un log ethereum demandant la sortie VRF correspondante à l’oracle spécifié dans la demande du consommateur. En voyant ce log, l’oracle construit la sortie comme suit :

Tout d’abord, il “hache l’entrée de la courbe”, en obtenant un échantillon aléatoire cryptographiquement sécurisé de secp256k1, en utilisant la seed et la clé publique de l’oracle comme entrées. Il le fait en hachant récursivement les entrées en utilisant keccak256 jusqu’à ce que la sortie soit inférieure à l’ordre du champ de base de secp256k1 (“p” dans la description de secp256k1), et soit l’ordonnée x d’un point (x,y) sur secp256k1 (c’est-à-dire y2=x3+7 dans le champ de base). (x,y) est alors le hachage de l’entrée de la courbe.

Puis il multiplie (x,y), en tant que point de courbe secp256k1 par sa clé secrète pour obtenir un point Ɣ. Le hachage keccak256 de Ɣ, en tant que uint256, est la sortie du VRF. Il génère une preuve que Ɣ est le même multiple de (x,y) que la clé publique de l’oracle est du générateur secp256k1. Cette preuve est très similaire à une signature de Schnorr : D’abord, il échantillonne de manière sécurisée un nonce n parmi {0, …, #secp256k1–1}, comme il l’a fait pour sa clé secrète, puis il calcule u=n×g, où g est le générateur secp256k1, et prend l’adresse ethereum de u. Ensuite, il calcule v=n×(x,y). Il hache ensuite ensemble (x,y), sa clé publique VRF, Ɣ, l’adresse de u, et v, prend le reste de ce hachage modulo #secp256k1, et appelle cela c. Enfin, il calcule s=n-c×k modulo #secp256k1, où k est sa clé secrète VRF. La preuve est alors sa clé publique, Ɣ, c, s, et sa seed d’entrée. Il renvoie le tout à la machine VRF on-chain, qui vérifie la preuve, et renvoie la sortie au contrat consommateur, en supposant que la preuve soit vérifiée.

Pour vérifier la preuve, le contrat devrait idéalement :

Pour comprendre pourquoi ce schéma est sûr du point de vue cryptographique, voir l’analogie de la “flèche” dans la section “Signing and Verification” du chapitre 3 du livre Programming Bitcoin de Jimmy Song. Dans notre cas, la “cible” spéciale que nous essayons d’atteindre est c. Pour une preuve complète de la sécurité de ce schéma, voir l’annexe B de “Making NSEC5 Practical for DNSSEC”.

Malheureusement, les multiplications scalaires sur secp256k1 comme c×Ɣ sont extrêmement coûteuses à calculer directement sur l’EVM, donc pour plus d’efficacité, nous utilisons l’astuce de Vitalik pour vérifier qu’un témoin passé dans la preuve comme c×Ɣ, correspond en fait au produit c×Ɣ. De cette façon, nous repoussons la charge du calcul de c×Ɣ off-chain, et nous n’avons qu’à vérifier que la valeur qui nous a été transmise comme c×Ɣ est réellement c×Ɣ, ce qui est beaucoup moins cher.

Ainsi, en plus des entrées/étapes ci-dessus, la vérification on-chain d’une preuve implique des témoins pour c×Ɣ et s×(x,y), et la vérification inclut la vérification que ces témoins sont des points de courbe secp256k1 valides, et correspondent aux produits qu’ils prétendent être, en utilisant l’astuce de Vitalik. En outre, nous utilisons l’adresse ethereum pour u, et vérifions qu’elle correspond au point c×pk+s×g en utilisant l’astuce de Vitalik.

L’évolution prévue de Chainlink VRF

L’approche à venir de Chainlink en matière de décentralisation hautement évolutive et rentable des réseaux d’oracles à l’aide de Threshold Signature qui permettra également une décentralisation et une disponibilité extrêmes pour Chainlink VRF. En combinant ces deux approches, nous obtenons tous les avantages de la capacité unique de Chainlink VRF à fournir un caractère aléatoire vérifiable on-chain, combinée à la possibilité de disposer de manière rentable de milliers de nœuds assurant la disponibilité de Chainlink VRF.

En permettant à l’écosystème plus large des nœuds Chainlink de participer à la génération de nombres aléatoires Chainlink VRF, nous arrivons à un réseau globalement distribué d’opérateurs de nœuds qui sont économiquement incités à la fois à générer et à diffuser des données aléatoires vérifiables on-chain. L’utilisation des signatures de seuil Chainlink en combinaison avec un réseau hautement décentralisé d’opérateurs de nœuds aidera à empêcher les adversaires de voler les fonds des utilisateurs. Non seulement les réponses de Chainlink VRF seront vérifiables on-chain, mais elles auront également un temps de disponibilité extrême, ce qui, en combinaison avec les garanties cryptoéconomiques et la disponibilité de Chainlink sur les différentes blockchains où l’aléatoire vérifiable serait utile, est susceptible de faire de Chainlink VRF une norme pour la façon dont les contrats intelligents consomment l’aléatoire.

En plus des avantages mentionnés ci-dessus, nous améliorons actuellement Chainlink VRF et poursuivons à la fois la recherche de pointe sur la production de caractère aléatoire décentralisé et la collaboration avec d’autres systèmes RNG. D’après nos premières recherches, nous pensons que Chainlink VRF pourrait être combiné avec VDF et d’autres méthodes de génération de caractère aléatoire, à la fois on-chain et off-chain Nous sommes enthousiastes à l’idée de collaborer avec l’industrie de la blockchain et la communauté universitaire sur la façon de créer la meilleure source d’aléa possible pour les contrats intelligents.

Essayez Chainlink VRF et donnez-nous vos feedbacks

Si vous êtes un développeur de contrats intelligents et que vous souhaitez savoir comment utiliser notre implémentation initiale de Chainlink VRF, consultez la documentation du développeur pour l’intégrer sur testnet, et rejoignez la discussion technique sur Discord.

Nous voulons dialoguer avec nos utilisateurs, tant dans la communauté des développeurs que dans la communauté universitaire. Si vous avez des commentaires sur notre approche du VRF et/ou si vous souhaitez faire des suggestions pour l’améliorer, nous sommes impatients de vous entendre à l’adresse custom@chain.link.

Si la création et le soutien de contrats intelligents sécurisés et fiables qui résolvent des problèmes du monde réel vous semblent intéressants en général, nous ajoutons actuellement des membres à notre équipe principale ! Pour en savoir plus, consultez notre page Carrières.

Si vous souhaitez en savoir plus sur Chainlink en général, visitez le site Web de Chainlink ou suivez-nous sur Twitter ou Reddit.

--

--