Uma prova de conhecimento zero (“zero-knowledge proof”) permite a uma parte (um verificador) determinar a validade de uma declaração dada por outra parte (o provador) sem qualquer conhecimento do conteúdo da declaração. Por exemplo, a Binance pode querer provar que tem os fundos dos seus utilizadores totalmente reservados, sem revelar todos os saldos individuais dos utilizadores.
Uma “Prova de Reservas” pode ser construída com uma árvore Merkle que protege contra a falsificação dos seus dados internos, neste caso, os seus saldos líquidos totais de clientes, sendo responsabilidades da troca para os seus utilizadores. Isto pode então ser combinado com um zk-SNARK (um protocolo de prova de conhecimento zero) que assegura que os utilizadores podem verificar que o seu saldo faz parte do saldo líquido total de ativos, mas sem conhecerem os saldos individuais.
Neste artigo resumido e adaptado da Binance Academy, vamos ver como funciona o protocolo zk-SNARK e como é que ele pode ser utilizado para melhorar a transparência das criptomoedas.
Introdução
À luz dos eventos recentes do mercado, a segurança dos ativos criptográficos em custódia tornou-se um tópico crítico. Os utilizadores da blockchain valorizam muito a transparência e a abertura, mas também apoiam a privacidade e a confidencialidade. Isto cria um dilema no momento em que é necessário provar as reservas de fundos detidos pelos depositantes. Muitas vezes, existe um compromisso entre transparência, confiança e confidencialidade dos dados.
No entanto, este não tem de ser o caso. Combinando protocolos de prova de conhecimento zero como zk-SNARKs com árvores de Merkle, podemos encontrar uma solução eficaz para todas as partes.
Em que consiste a prova de conhecimento zero?
Uma prova de conhecimento zero permite a uma parte (o verificador) determinar a validade de uma declaração dada por outra parte (o provador) sem qualquer conhecimento do conteúdo da declaração. Vejamos um exemplo simples:
Temos um cofre fechado de que só nós conhecemos a combinação; o cofre, no nosso exemplo, não pode ser arrombado, forçado ou aberto de outra forma que não seja pelo conhecimento da combinação: e este facto também é estabelecido, verificado, e conhecido pelo nosso amigo que participa na experiência.
Nós dizemos ao nosso amigo que conhecemos a combinação, mas não a queremos dar nem abrir o cofre à frente dele. Em cima do cofre há um buraco que o nosso amigo pode fazer passar um papel com uma nota escrita. Para fazer disto uma prova de conhecimento zero, o nosso amigo não deve ter nenhuma informação extra sobre o processo, para além da declaração inicial.
Podemos provar ao nosso amigo que conhecemos a combinação abrindo o cofre, dizendo-lhe o que estava escrito na nota, e fechando-o novamente. Em nenhum momento, porém, revelámos a combinação.
Porque usamos provas de conhecimento zero?
Como vimos, as provas de conhecimento zero são adequadas para provar algo sem revelar informação sensível ou detalhes. Este pode ser o caso se não quisermos entregar informação financeira ou pessoal que pudesse ser utilizada de forma inadequada.
No mundo cripto, podemos provar que temos uma chave privada sem a revelar ou assinar digitalmente alguma coisa. Um exchange de criptomoeda também pode querer provar o estado das suas reservas sem revelar informação confidencial sobre os seus utilizadores, incluindo os seus saldos de conta individuais.
Para estes exemplos (e muitos outros), uma prova de conhecimento zero usaria algoritmos que pegariam numa entrada de dados e retornariam como saída as condições de “verdadeiro” ou “falso”.
Definindo em Termos Técnicos as Provas de Conhecimento Zero
Uma prova de conhecimento zero, em termos técnicos, segue uma estrutura específica com certos critérios. Já cobrimos os papéis de provador e verificador, mas também há três critérios adicionais que uma prova de conhecimento zero deve cobrir:
Completude. Se a afirmação for verdadeira, um verificador será convencido pela prova fornecida, sem necessidade de qualquer outra informação ou verificação;
Solidez [“soundness”]. Se a afirmação for falsa, o verificador não será convencido da verdade de uma afirmação pela prova fornecida;
Conhecimento zero. Se a afirmação for verdadeira, o verificador não aprende nenhuma outra informação para além de que a afirmação é verdadeira.
O que é um zk-SNARK?
Um zk-SNARK (iniciais de “Zero-Knowledge Succinct Non-Interactive Argument of Knowledge”) é um protocolo de prova que segue os princípios do conhecimento zero atrás referidos. Com um zk-SNARK, podemos provar que conhecemos o valor original “hashed” sem o revelar. Podemos também provar a validade de uma transação sem revelar qualquer informação sobre os montantes específicos, valores ou endereços envolvidos.
Os zk-SNARKs são normalmente usados e discutidos dentro da blockchain e do mundo da criptomoeda. Mas podemos perguntar porque é que alguém se daria ao trabalho de usar um zk-SNARK quando poderia usar um método simples de chaves públicas e privadas para assegurar a informação. O problema é que, nesse cenário, não seríamos capazes de implementar a prova matemática para garantir que não são incluídos saldos negativos e a soma da árvore Merkle.
No caso das reservas de um exchange, queremos provar que existe uma garantia 1:1 dos saldos dos clientes sem que sejam tornados públicos os identificadores e saldos de cada conta. Além disso, a tecnologia zk-SNARK torna a falsificação de dados ainda mais improvável.
Conclusão
Os zk-SNARKs fornecem a tecnologia necessária para assegurar simultaneamente a integridade e a privacidade dos dados. A sua aplicação para provar reservas e aumentar a transparência das CEX deverá ajudar a construir confiança na indústria da cadeia de bloqueio. Para muitos, um desenvolvimento como este há muito que se esperava e chega num momento crucial para os CEXs.
Se quiser saber mais, leia a versão completa (em inglês) deste artigo aqui. Inclui também um vídeo explicativo.