Chainlink VRF: Aleatoriedade Verificável On-Chain
12 de Maio, 2020 Chainlink
Tradução do artigo Chainlink VRF: On-Chain Verifiable Randomness.
Estamos empolgados em anunciar o Chainlink VRF, que utiliza funções aleatórias verificáveis para gerar uma aleatoriedade verificável On-Chain. Vemos muitos contratos inteligentes excelentes se beneficiando do Chainlink VRF, especificamente aqueles que gostariam de fornecer comprovações de que estão realmente usando uma fonte de aleatoriedade à prova de adulteração para além de seu controle.
Gostaríamos de agradecer aos nossos colaboradores acadêmicos, à comunidade de desenvolvedores, que nos deu feedback sobre o Chainlink VRF e aos muitos membros da equipe que se esforçaram para tornar essa implementação inicial uma realidade de trabalho, obrigado.
O Chainlink VRF ajuda a habilitar e acelerar o desenvolvimento de smart contracts focados em jogos de blockchain, segurança, protocolos de Layer 2 e vários outros casos de uso. Os desenvolvedores podem integrar facilmente o Chainlink VRF para utilizar aleatoriedade verificável em seus contratos inteligentes por meio de nossa documentação de desenvolvedor, lançada recentemente.
A necessidade de Aleatoriedade Verificável
É necessária uma mentalidade sensível à segurança para criar e defender, com sucesso, um Smart Contract contra adversários que procuram roubar os fundos mantidos por esse tipo de contrato. Desenvolvedores de contratos inteligentes que usam aleatoriedade como uma entrada principal também devem ver a manipulação dessa aleatoriedade como um risco crítico. Sistemas bem feitos que confiam na aleatoriedade idealmente desejam que isso seja comprovadamente justo e igualmente incerto para todos os participantes do contrato, ao mesmo tempo em que reduz, com sucesso, o risco de que um adversário possa explorar seu contrato ao prever seus resultados.
O Chainlink VRF procura atender a esses dois requisitos, fornecendo sua aleatoriedade junto com provas criptográficas, que podem ser verificadas On-Chain, mostrando que a aleatoriedade é realmente imprevisível. Devido à natureza verificável On-Chain da aleatoriedade do Chainlink VRF, os nós participantes só podem reter uma solicitação pela qual seriam penalizados financeiramente usando os próximos recursos de staking da Chainlink e, possivelmente, removidos de consultas futuras que teriam pago taxas por sua aleatoriedade.
Usando o Chainlink VRF, você pode criar Smart Contracts confiáveis para qualquer aplicativo que exija resultados imprevisíveis para:
- Tornar os jogos mais confiáveis, usando uma fonte de aleatoriedade verificável On-Chain, permitindo que os desenvolvedores forneçam provas adicionais para usuários sensíveis à segurança;
- Tornar os jogos mais divertidos, gerando cenários e ambientes desafiadores e imprevisíveis, além de atribuir recompensas imprevisíveis aos jogadores, como saques;
- Gerar atribuições comprovadamente aleatórias de funções e recursos, por exemplo, designando juízes aleatoriamente para casos ou auditores para empresas sob escrutínio;
- Escolher uma amostra representativa de observadores qualificados para votar em uma proposta para a qual o contrato precisa estabelecer consenso (as pesquisas são uma maneira eficiente de fornecer uma extra resistência sybil).
Limitações de segurança dos métodos existentes
As soluções existentes para fornecer aleatoriedade a contratos inteligentes têm limitações que são superadas pela aleatoriedade verificável do Chainlink VRF. Tanto o uso de dados existentes On-Chain, como um hash de bloco, e/ou várias aleatoriedades Off-Chain (que precisam ser colocadas On-Chain) apresentam seu próprio conjunto de desafios únicos.
Um exemplo de uma exploração que os desenvolvedores de contratos inteligentes, que procuram confiar em uma blockchain para aleatoriedade, devem procurar evitar é a dependência excessiva de garantias de aleatoriedade baseadas em hash de bloco. Por exemplo, suponha que um contrato tome decisões com base na paridade do último bit no hash do bloco, em uma determinada altura. Isso parece um resultado 50/50, mas considere que um minerador (ou mineradores) que produz um terço dos blocos, em média, pode decidir jogar fora os blocos vencedores para os quais o último bit do block hash é igual a um, renunciando à recompensa do bloco de aproximadamente 2–3 ETH. Nesse caso, o minerador pode influenciar o resultado zero de uma probabilidade confiável de 50% para uma probabilidade de 2/3, levando à perda de fundos do usuário de qualquer contrato inteligente que dependa desse método de geração de aleatoriedade.
Em um esforço para evitar problemas como esses, os desenvolvedores de contratos inteligentes já recorrem às soluções Off-Chain, onde um número aleatório é gerado Off-Chain e colocado On-Chain. No entanto, sem a verificação criptográfica de que o valor Off-Chain é imparcial, há uma oportunidade do resultado ser manipulado pelo provedor e/ou pela camada de transporte de dados que coloca esse valor aleatório On-Chain. Da mesma forma, os usuários do aplicativo são forçados a assumir que a aleatoriedade é produzida de forma justa e foi trazida On-Chain sem ser alterada no caminho para o aplicativo.
As principais compensações e riscos de segurança adicionais que acreditamos que os desenvolvedores de contratos inteligentes, que consideram uma fonte de aleatoriedade para o contrato inteligente, devem procurar evitar incluem o seguinte:
- Inacessibilidade ou incompatibilidade com contratos inteligentes
- Manipulação pelo operador centralizado do gerador de números aleatórios
- Exploração por mineradores de blockchain como um dos usuários do aplicativo
- Requisitos de confiança excessivamente altos dos usuários finais do aplicativo
Para ajudar a lidar com esses e outros riscos de segurança indesejáveis, a Chainlink VRF oferece transparência e prova criptográfica de que cada resultado é gerado de forma justa.
Como funciona o VRF Chainlink
O Chainlink VRF funciona combinando dados de bloco que ainda são desconhecidos, quando a solicitação é feita — com a chave privada pré-comprometida do nó do oráculo — para gerar um número aleatório e uma prova criptográfica. Cada oráculo usa sua própria chave secreta ao gerar aleatoriedade. Quando o resultado é publicado On-Chain junto com uma prova, ele é verificado — On-Chain — antes de ser enviado para o contrato de um usuário. Contar com os recursos amplamente aceitos de assinatura e verificação de prova de uma blockchain, permite que os contratos consumam apenas aleatoriedades que também foram verificadas pelo mesmo ambiente On-Chain executando o próprio contrato.
O benefício fundamental de usar o Chainlink VRF é sua aleatoriedade verificável. Mesmo que um nó seja comprometido, ele não pode manipular e/ou fornecer respostas tendenciosas — a prova criptográfica On-Chain falharia. O pior cenário é que o nó comprometido não retorne uma resposta a uma solicitação, que ficará imediatamente e para sempre visível na blockchain. Os usuários não confiariam mais em nós que param de responder e/ou não fornecem aleatoriedade com uma prova válida. Mesmo no cenário improvável de que um nó seja comprometido, sua aleatoriedade resultante não pode ser manipulada. Os nós comprometidos só podem reter uma solicitação sem resposta, pela qual seriam penalizados financeiramente usando os próximos recursos de staking do Chainlink e removidos de consultas futuras que pagariam taxas por sua aleatoriedade, criando uma perda econômica substancial imediata e de longo prazo para operadores de nó de baixa qualidade e/ou mau comportamento. Resumindo, a Chainlink VRF não pode manipular um aplicativo que o utiliza adequadamente; ele só pode ficar offline ou reter um único resultado antes de ser removido como fonte de qualquer aleatoriedade futura. Isso cria segurança superior para desenvolvedores de contratos inteligentes e seus usuários.
Um benefício adicional do Chainlink VRF é que, à medida que mais usuários o utilizam, as taxas pagas aos operadores de nó aumentam, criando um incentivo para que os operadores de nó forneçam o máximo de garantias de segurança possível. A segurança criptoeconômica por meio de staking provavelmente será algo que os usuários pedirão para aumentar ao longo do tempo e justificar com suas taxas cada vez maiores, que pagam por segurança adicional. Isso leva a um recurso global compartilhado que é apoiado por taxas de usuário e permite que usuários adicionais, que gastariam fundos para criar sua própria solução RNG, implementem esses mesmos fundos para aumentar a segurança coletiva de um recurso compartilhado para todo o ecossistema da blockchain. A capacidade da Chainlink de suportar várias cadeias, como Polkadot , Tezos e muitos outros, significa que o universo de usuários que pagam por esse recurso da comunidade continuará crescendo em um efeito de rede entre a utilização e o aumento progressivo das garantias de segurança criptoeconômica.
Exemplo de integração: PoolTogether
PoolTogether , o jogo de economia sem perdas no Ethereum, é algo que achamos realmente empolgante e estamos entusiasmados que, após extensa pesquisa técnica de sua equipe, eles usarão o Chainlink VRF para fornecer garantias aos seus usuários sobre a aleatoriedade comprovadamente justa de suas inscrições.
PoolTogether é um jogo de savings sem perdas que agrupa os depósitos dos usuários e distribui os juros ganhos no pool para um vencedor selecionado aleatoriamente em sorteios diários e semanais.
Ao implementar a aleatoriedade verificável do Chainlink VRF, os usuários do PoolTogether poderão verificar se cada vencedor é selecionado com uma fonte imparcial de aleatoriedade. Além de estar mais seguro de sua própria segurança, o PoolTogether também poderá provar aos seus usuários que uma parte importante de sua arquitetura está operando de maneira comprovadamente segura e verificável, fornecendo aos usuários mais motivos para acreditar que o PoolTogether realmente fornecerá um pagamento a eles, se eles se tornarem participantes de seu contrato inteligente.
Passo a passo técnico
Chainlink VRF é uma implementação da função aleatória verificável de Goldberg (VRF) conforme descrito neste documento. O “aleatório” em “função aleatória verificável” significa “totalmente imprevisível (distribuído uniformemente) para quem não conhece a seed ou a chave secreta”.
A chave secreta VRF é um número que o oráculo escolhe na distribuição uniforme em {0, …, #secp256k1–1}, de forma criptograficamente segura. (secp256k1 é a curva elíptica usada pela criptografia da ethereum.) Associada a essa chave secreta está uma chave pública, que é usada para identificar o oráculo. O oráculo registra a chave pública com o maquinário On-Chain, junto com o job-ID da Chainlink ao qual ele responderá.
Quando um contrato consumidor faz uma solicitação de aleatoriedade, ele transmite um log Ethereum solicitando a saída VRF correspondente do oráculo especificado na solicitação do consumidor. Ao ver este log , o oráculo constrói a saída da seguinte forma:
Primeiro, ele “faz o hash da entrada na curva ”, obtendo uma amostra aleatória criptograficamente segura de secp256k1, usando os dados imprevisíveis do bloco e a chave pública do oráculo como entradas. Ele faz isso por recursivamente transformando as entradas em hash e usando keccak256, até que a saída seja menor que a ordem do campo base de secp256k1 (“ p ” naquela descrição de secp256k1 ), e é a ordenada x de algum ponto (x,y) em secp256k1 (ou seja, y2=x3+7 no campo base). (x,y) é então o hash da entrada para a curva.
Então ele multiplica (x,y), como um ponto de curva secp256k1 por sua chave secreta para obter um ponto Ɣ. O hash keccak256 de Ɣ, como um uint256, é a saída VRF. Assim, gera uma prova de que Ɣ é o mesmo múltiplo de (x,y), que a chave pública do oráculo é do gerador secp256k1. Esta prova é muito semelhante a uma assinatura de Schnorr: primeiro, ela assegura um nonce n de {0, …, #secp256k1–1}, assim como fez para sua chave secreta, então calcula u = n×g , onde g é o gerador secp256k1 e recebe o endereço Ethereum de u . Então, calcula v = n× (x,y). A seguir, coloca os hashes juntos (x,y), sua chave pública VRF, Ɣ, o endereço de u, e v , recebe o restante desse módulo de hash #secp256k1 e o chama de c. Finalmente, ele calcula s = nc × k módulo #secp256k1 , onde k é sua chave secreta VRF. A prova é, então, sua chave pública, Ɣ, c , s , e sua seed de entrada. Ele envia isso de volta para o maquinário VRF On-Chain, que verifica a prova e envia a saída de volta para o contrato consumidor , assumindo que a prova verifica.
Para verificar a prova, o contrato seria idealmente
- Verificar se a chave pública e Ɣ são pontos secp256k1 válidos,
- Verificar se o endereço do ponto c×pk + s×g corresponde ao endereço de u , (onde pk é a chave pública do oráculo)
- Calcular o “hash to curve” (x,y) da chave pública e da seed, e verifique se o hash de h, sua chave pública, Ɣ, o endereço de u e c× Ɣ+ s× (x,y ) corresponde à c .
Para uma intuição de por quê isso é criptograficamente seguro, veja a analogia da “seta” na seção “Assinatura e verificação” no capítulo 3 do livro Programming Bitcoin de Jimmy Song . No nosso caso, o “alvo” especial que estamos tentando atingir é c. Para uma prova completa da segurança desse esquema, consulte o Apêndice B de “Tornando o NSEC5 prático para DNSSEC”.
Infelizmente, multiplicações escalares em secp256k1 como c× Ɣ são extremamente caras para serem computadas diretamente no EVM, portanto, para eficiência, usamos o truque de Vitalik para verificar se uma testemunha passada para a prova como c×Ɣ, realmente corresponde ao produto c×Ɣ . Desta forma, empurramos o fardo de realmente calcular c× Ɣ Off-Chain, e só temos que verificar se o valor que nos foi passado como c× Ɣ na verdade é c× Ɣ, o que é muito mais barato.
Assim, além das entradas/etapas acima, a verificação On-Chain de uma prova envolve testemunhas para c×Ɣ e s×(x,y), e a verificação inclui verificar se essas testemunhas são pontos de curva secp256k1 válidos e correspondem aos produtos que pretendem ser — usando o truque de Vitalik. Além disso, usamos o endereço Ethereum para u e verificamos se ele corresponde ao ponto c×pk+s×g usando o truque de Vitalik.
A Evolução Planejada do VRF Chainlink
A próxima abordagem da Chainlink para descentralização altamente escalável e econômica de redes Oracle usando assinaturas de limite também fornecerá extrema descentralização e disponibilidade para Chainlink VRF. Ao combinar essas duas abordagens, obtemos todos os benefícios da capacidade exclusiva da Chainlink VRF de fornecer aleatoriedade verificável On-Chain, combinada com a capacidade de ter milhares de nós de maneira econômica, fornecendo o tempo de atividade/disponibilidade da Chainlink VRF.
Ao permitir que o ecossistema mais amplo de nós da Chainlink participe da geração de números aleatórios Chainlink VRF, chegamos a uma rede globalmente distribuída de operadores de nós que são incentivados economicamente a gerar e transmitir dados aleatórios verificáveis On-Chain. O uso de Chainlink Threshold Signatures em combinação com uma rede altamente descentralizada de operadores de nós, ajudará a impedir que adversários roubem fundos de usuários. Não apenas as respostas do Chainlink VRF serão verificáveis na cadeia; eles também terão tempo de atividade/disponibilidade extrema, que em combinação com garantias criptoeconômicas e a disponibilidade do Chainlink nas várias blockchains, onde a aleatoriedade verificável seria útil, provavelmente tornará a Chainlink VRF um padrão de como os contratos inteligentes consomem aleatoriedade.
Além dos benefícios mencionados acima, atualmente estamos melhorando o Chainlink VRF e continuando as pesquisas de ponta na produção de aleatoriedade descentralizada e colaboração com outros sistemas RNG. A partir de nossa pesquisa inicial, acreditamos que o Chainlink VRF poderia ser combinado com o VDF e outros métodos de geração de aleatoriedade, tanto On-Chain quanto Off-Chain. Estamos empolgados em colaborar com a maior indústria de blockchain e a maior comunidade acadêmica sobre como se tornar a melhor fonte possível de aleatoriedade comprovadamente justa para contratos inteligentes.
Experimente o Chainlink VRF e nos dê seu feedback
Se você é um desenvolvedor de contrato inteligente e gostaria de saber como pode usar nossa implementação inicial da Chainlink VRF, visite a documentação do desenvolvedor para integrá-la na testnet e participe da discussão técnica no Discord .
Estamos nos estágios finais da revisão de segurança da Chainlink VRF e queremos envolver nossos usuários tanto na comunidade de desenvolvedores, quanto na comunidade acadêmica. Se você tiver comentários sobre nossa abordagem à VRF e/ou quiser fornecer sugestões para sua melhoria, ficaremos felizes em ouvi-lo(a) em custom@chain.link.
Se criar e oferecer suporte aos contratos inteligentes seguros e confiáveis que resolvem problemas do mundo real parece interessante em geral, estamos adicionando membros adicionais à equipe no momento! Saiba mais em nossa página de Carreiras .
Se você quiser saber mais sobre a Chainlink em geral, visite o site da Chainlink ou nos siga no Twitter ou Reddit .