zk-SNARK: Prova inovadora de conhecimento zero e suas aplicações

IntermediárioNov 28, 2023
A tecnologia zk-SNARK representa um avanço significativo nos campos da proteção da privacidade e verificação encriptada. Não é apenas promissor no fornecimento de fortes garantias de privacidade mas também prático no reforço da escalabilidade da blockchain e de várias outras aplicações.
zk-SNARK: Prova inovadora de conhecimento zero e suas aplicações

Antecedentes

A prova de conhecimento zero (ZKP) é uma tecnologia criptográfica que foi proposta pela primeira vez por S. Goldwasser, S. Micali e C. Rackoff no início dos anos 80 num artigo intitulado The Knowledge Complexity Of Interactive Proof Systems. Neste artigo, foi conceituado como um modelo teórico para abordar o problema da verificação de afirmações matemáticas sem revelar a evidência. Este conceito ganhou atenção significativa na comunidade académica, uma vez que desafiava os limites das técnicas tradicionais de encriptação e forneceu uma nova abordagem para o tratamento de informações sensíveis.

Com o tempo, o ZKP evoluiu de um conceito teórico abstrato para protocolos concretos que podem ser integrados em várias aplicações. Em 2010, Groth publicou um artigo intitulado Short Pairing-based Non-Interactive Zero-Knowledge Argumentos, que se tornou um trabalho seminal no desenvolvimento do zk-SNARK, uma solução importante no ZKP. A aplicação prática mais significativa do ZKP é o sistema de prova de conhecimento zero utilizado pelo Z-cash em 2015, que alcançou a proteção da privacidade para transações e montantes. Posteriormente, o zk-SNark combinou-se com contratos inteligentes, levando a uma gama mais ampla de aplicações.

Princípios técnicos do zk-SNARK

Os princípios que o ZKP tradicional precisa de aderir são os seguintes:

  • Completude: Se uma afirmação for verdadeira, um provador honesto pode convencer o verificador da sua verdade.
  • Solidez: Se uma declaração for falsa, qualquer provador fraudulento terá apenas uma pequena probabilidade de induzir o verificador a acreditar que a afirmação é verdadeira.
  • Conhecimento zero: Se uma afirmação for verdadeira, o verificador não aprenderá nenhuma informação adicional além do facto de que a afirmação é verdadeira. Por outras palavras, o processo de verificação não revela nenhuma informação que possa ser usada para construir uma prova.

O princípio do ZKP pode ser entendido através de um exemplo simples: Se preciso provar a A que tenho o número de telefone do B, não preciso dizer diretamente o número de telefone de A B. Em vez disso, posso discar diretamente o número de telefone do B e uma vez que a chamada esteja ligada, pode provar que tenho realmente o número de telefone do B. Este processo não divulga a informação do número do B.

E o zk-SNARK atualiza ainda nesta base, com as seguintes características:

  • Conhecimento zero: O verificador não pode obter nenhuma informação útil da prova.
  • Conciso: A prova é de tamanho pequeno (normalmente apenas algumas dezenas de bytes) e o tempo de verificação é curto (normalmente apenas alguns milissegundos).
  • Não interativo: O provador só precisa enviar a prova ao verificador uma vez, sem mais comunicação.
  • Parâmetros Confiáveis: Tanto o provador como o verificador precisam de utilizar uma Cadeia de Referência Comum (CRS) gerada por um terceiro fidedigno. O CRS pode conter algumas informações confidenciais e, se vazado ou adulterado, pode ameaçar a segurança do sistema.

No artigo de Groth, ele propôs um método não interativo de prova de conhecimento zero baseado em pares que transforma um problema computacional num Programa Aritmético Quadrático (QAP), e depois constrói uma prova eficiente usando criptografia de curva elíptica e funções hash. Os projetos posteriores do zk-SNARK geralmente envolvem quatro etapas:

  • Configuração: Realizado por um terceiro de confiança, gera um CRS que inclui uma chave de prova (pk) para gerar provas e uma chave de verificação (vk) para verificar provas. Este processo só precisa de ser executado uma vez, e o CRS pode ser reutilizado várias vezes.
  • Codificação do problema: O problema de computação f (x) = y é transformado numa forma QAP A (x) ·B (x) = C (x) ·Z (x), onde A (x), B (x), C (x) são polinómios determinados pela estrutura do circuito de f, Z (x) é um polinómio fixo, x é um ponto escolhido aleatoriamente e y é o saída de f. Esta etapa pode ser executada pelo provador ou verificador, ou pode ser feita com antecedência por um terceiro.
  • Geração de Prova: Realizada pelo provador, usa pk, x e a entrada w de f para gerar uma prova π para provar que eles sabem um w que satisfaz f (w) = y, sem revelar o valor específico de W. Este processo envolve cálculos polinomiais, operações de curva elíptica e operações de função hash, gerando finalmente um π composto por vários pontos de curva elíptica e um valor de hash.
  • Verificação da prova: Realizada pelo verificador, usa vk, x, y e π para verificar se o provador realmente conhece um w que satisfaz f (w) = y. Este processo também envolve cálculos polinomiais, operações de curva elíptica e operações de função hash, produzindo, em última análise, um valor booleano indicando a validade da prova.

Para ajudar a compreender, vamos considerar um exemplo simples: Suponha que tenha um mapa do tesouro que o possa guiar até à localização exata do tesouro enterrado. Quer provar a alguém que sabe a localização do tesouro sem revelar o conteúdo do mapa ou a localização real do tesouro. Se usar a tecnologia zk-SNARK, teria de criar um enigma complexo do mapa do tesouro. Seleciona uma pequena peça do puzzle (uma prova) e mostra-a à pessoa, o que a convence de que sabe como o puzzle completo se encaixa, ou seja, a localização do tesouro, sem ver o puzzle inteiro. No entanto, para conseguir isso, teria de obter marcações especiais de uma gráfica de confiança, que servem como prova de que a sua peça do puzzle é genuína.

Por que precisamos do zk-SNARK?

A abordagem tradicional às provas de conhecimento zero envolve métodos de prova interativos, onde um provador pergunta repetidamente a um verificador “sim ou não?” perguntas até ser alcançada uma resposta correta. Este processo é ineficiente. No entanto, o zk-SNARK elimina a necessidade de interações repetidas, obtendo um CRS de um terceiro de confiança. Todos os provadores podem comparar diretamente o CRS para determinar a veracidade. Isto melhora muito a eficiência das provas de conhecimento zero.

Além disso, o zk-SNARK oferece as seguintes vantagens:

  • Proteção de privacidade: o zk-SNARK permite que um provador demonstre conhecimento ou cumprimento de certas condições a um verificador sem revelar qualquer informação privada. Isto é particularmente útil em cenários que envolvem dados confidenciais ou privados, tais como autenticação de identidade, votação anónima e transações privadas.
  • Escalabilidade: o zk-SNARK comprime problemas computacionais complexos em provas pequenas e rápidas, reduzindo a carga computacional e os requisitos de armazenamento para os verificadores. Isso é benéfico em cenários que exigem verificação e armazenamento eficientes de grandes quantidades de dados, como computação em nuvem, escalabilidade de blockchain e computação verificável.
  • Segurança: O zk-SNARK baseia-se em problemas matematicamente difíceis, tais como o problema do logaritmo discreto e o problema de mapeamento bilinear, que fornecem alta segurança. Sob o pressuposto da computação não quântica, a menos que o terceiro de confiança vaze ou adultere o CRS, é impossível para um provador falsificar uma prova ou um verificador para forjar um resultado de verificação.

Aplicações do mundo real do zk-SNARK

A primeira aplicação do zk-SNARK é o Zcash, que permite aos utilizadores envolverem-se em transações totalmente anónimas, ocultando informações como remetentes, receptores e montantes usando o zk-SNARK. No atual espaço Web3, a tecnologia zk-SNARK desempenha um papel significativo na escalabilidade do blockchain e na gestão de reservas cambiais.

Escalabilidade Blockchain

Devido ao mecanismo de consenso e aos requisitos de segurança da blockchain, o seu rendimento e eficiência são bastante limitados. Para resolver este problema, uma solução comum é usar a tecnologia Layer2, que constrói uma camada adicional sobre a cadeia de blocos para migrar um grande número de transações ou cálculos da cadeia principal (Camada1) para a Camada2, melhorando assim o desempenho e a usabilidade do sistema.

O zk-SNARK desempenha um papel importante nesta solução, pois pode comprimir as transações ou cálculos na Camada2 numa prova pequena e rápida, que é então submetida para verificação na cadeia principal, garantindo a exatidão e consistência da Camada2. Atualmente, existem duas soluções principais de Layer2 baseadas no zk-SNARK: ZK-Rollup e Validium.

  • zk-Rollup: Esta solução armazena todos os dados de estado na cadeia principal mas usa provas para verificar a validade das transições de estado. Isso garante a disponibilidade e a segurança dos dados da Camada2 mas aumenta a carga de armazenamento na cadeia principal. Por exemplo, o ZKSync armazena dados de estado na cadeia principal Ethereum e garante a validade das transições de estado através de provas de conhecimento zero. Projetos semelhantes incluem Polygon ZKevm e Scroll.
  • Validium: Esta solução armazena todos os dados de estado na Camada2 ou outros terceiros de confiança e utiliza apenas provas para verificar a validade das transições de estado, enviando as provas para a cadeia principal. Isto reduz a carga de armazenamento na cadeia principal mas pode diminuir a disponibilidade e a segurança dos dados da Camada 2. O DeversiFi utiliza a tecnologia Validium para manter a velocidade e a eficiência das transações Layer2, garantindo a privacidade dos dados. Loopring fornece um modo Validium para aliviar a pressão de armazenamento na cadeia principal.

Fundos de Reserva em Bolsas

Devido à volatilidade e incerteza do mercado de criptomoedas, muitas bolsas precisam de manter uma certa quantidade de fundos de reserva para lidar com potenciais riscos ou exigências. No entanto, estes fundos de reserva muitas vezes carecem de transparência e fiabilidade, deixando os utilizadores incertos sobre se a bolsa realmente tem fundos de reserva suficientes para salvaguardar os seus ativos.

O zk-SNARK pode fornecer uma solução a este respeito, permitindo que as bolsas provem aos utilizadores ou organismos reguladores que possuem uma quantidade e valor adequados de fundos de reserva sem revelar detalhes ou localizações específicas dos ativos.

Um exemplo típico é o Gate.io, que utiliza uma combinação de árvores ZK-SNARK e Merkle. Criptografam os dados do utilizador e geram provas de fundos de reserva de 100 tokens diferentes usando circuitos restritos para demonstrar a sua capacidade de solvência a 100%.

Origem: https://www.gate.io/proof-of-reserves

Leituras adicionais: Como o ZK-SNARK melhora a Prova de Reservas do Gate.io

Além das aplicações Web3, o zk-SNARK também pode ser utilizado em domínios que não sejam blockchain, tais como:

  • Autenticação de Identidade: O zk-SNARK permite aos utilizadores provar a sua posse de certos atributos de identidade ou qualificações a terceiros sem revelar qualquer informação pessoal, como idade, nacionalidade, educação, etc. Isto é útil em cenários que exigem autenticação ou autorização de identidade, tais como compras online, educação online, assinaturas digitais, etc.
  • Votação Eletrónica: O ZK-SNARK permite aos utilizadores provar a sua participação em determinadas atividades de votação e a conformidade com protocolos ou regras específicas a terceiros sem revelar qualquer conteúdo de votação ou metadados. Isto é benéfico em cenários que exigem proteção da privacidade e segurança do voto, tais como eleições democráticas, governação comunitária, tomada de decisão pública, etc.

Limitações e Desafios Técnicos

Na secção anterior, introduzimos os princípios técnicos do zk-SNARK, que mencionava que o zk-SNARK melhora a eficiência da prova ao encontrar um terceiro de confiança para gerar CRS. No entanto, isso também leva a algumas limitações e desafios inerentes ao zk-SNARK.

  • Parâmetros Confiáveis: O zk-SNARK requer um CRS gerado por um terceiro de confiança, que pode conter informações confidenciais. Se vazado ou adulterado, pode comprometer a segurança do sistema. Para resolver este problema, alguns projetos adotaram a abordagem da Multi-Party Computation (MPC) para gerar o CRS, onde vários participantes contribuem conjuntamente para o processo de geração e destroem as suas informações secretas. No entanto, esta abordagem ainda enfrenta desafios como a integridade do participante, custos de comunicação e dificuldades de coordenação.
  • Universalidade: Atualmente, o zk-SNARK só pode ser aplicado a problemas computacionais específicos, tais como QAP ou R1CS, e não pode ser aplicado a problemas computacionais arbitrários. Para resolver esta limitação, alguns projetos exploraram o uso de Circuitos Gerais (GC) ou Prova Recursiva Geral (GRS) para estender a aplicabilidade do zk-SNARK. No entanto, esta abordagem vem com compensações como o aumento do tamanho da prova, a diminuição da eficiência e o aumento da complexidade.
  • Verificabilidade: Embora o zk-SNARK garanta que o provador não vaza nenhuma informação privada, não garante que o provador não enganará ou enganará o verificador. Para resolver este problema, alguns projetos introduziram Funções Aleatórias Verificáveis (VRF) ou Funções de Atraso Verificáveis (VDF) para melhorar a integridade do provador. No entanto, esta abordagem também aumenta a complexidade e sobrecarga do sistema.

Em resumo, existem várias abordagens para abordar as limitações inerentes do zk-SNARK.

Futuros cenários de aplicação

O zk-SNARK, como uma tecnologia criptográfica inovadora, tem amplos cenários de aplicação futuros, especialmente no domínio da privacidade:

  • Contratos Inteligentes de Privacidade: O zk-SNARK permite que os utilizadores provem a terceiros que executaram certos contratos inteligentes e obtiveram a saída correta sem revelar qualquer lógica ou estado do contrato. Isto é particularmente útil em cenários que envolvem segredos comerciais ou regras sensíveis, tais como gestão da cadeia de abastecimento, reclamações de seguro, proteção de direitos de autor, etc.1
  • Computação de preservação da privacidade: o zk-SNARK permite aos utilizadores provar a terceiros que realizaram determinadas tarefas computacionais e obtiveram os resultados corretos sem revelar quaisquer dados de entrada ou saída. Isso é aplicável em cenários que envolvem dados confidenciais ou privados, como diagnóstico médico, análise de dados, aprendizado de máquina, etc.
  • Comunicação que preserva a privacidade: O zk-SNARK permite aos utilizadores provar a terceiros que se envolveram em determinadas atividades de comunicação e cumpriram certos protocolos ou regras sem revelar qualquer conteúdo de comunicação ou metadados. Isto é benéfico em cenários em que a privacidade ou a segurança da comunicação precisam de ser protegidas, tais como mensagens instantâneas, redes sociais, e-mail, etc.

Conclusão

A tecnologia zk-SNARK representa um avanço significativo nos campos da proteção da privacidade e verificação encriptada. Não é apenas promissor no fornecimento de fortes garantias de privacidade mas também prático no reforço da escalabilidade da blockchain e de várias outras aplicações. Apesar da existência de desafios e limitações técnicas, através de investigação e inovação contínuas, esperamos que o zk-SNARK continue a evoluir, optimizando os sistemas existentes e inspirando novos modelos de aplicação para impulsionar o avanço da proteção da privacidade e da tecnologia de encriptação. Com a maturidade da tecnologia e a crescente ênfase na privacidade de dados na sociedade, o zk-SNARK tem o potencial de se tornar uma ferramenta indispensável na era digital, capacitando os utilizadores com um maior controlo sobre a sua informação e promovendo interações digitais seguras e transparentes.

learn.articles.author Wayne
learn.articles.translator Sonia
learn.articles.reviewer KOWEI、Piccolo、Elisa、Ashley He、Joyce
learn.articles.copyrightNoticeOne
learn.articles.copyrightNoticeTwo
learn.articles.start.now
learn.articles.start.now.voucher
learn.articles.create.account