Урок 3

Como combinar a prova de reservas com a tecnologia zk-SNARK?

Esta lição explica o que é a tecnologia zk-SNARK e como as Prova de Reservas são otimizadas usando a tecnologia zk-SNARK

Antecedentes

Prova de Conhecimento Zero (PCZ) é uma técnica criptográfica proposta pela primeira vez por S. Goldwasser, S. Micali e C. Rackoff no início da década de 1980 em um artigo intitulado “A Complexidade do Conhecimento dos Sistemas de Prova InterativaNo artigo, foi conceitualizado como um modelo teórico para resolver o problema de verificar declarações matemáticas sem revelar a evidência. Este conceito atraiu ampla atenção na academia porque desafia os limites das técnicas criptográficas tradicionais e fornece novos métodos para processar informações sensíveis.

Com o tempo, a 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 “Argumentos de Conhecimento Zero Não-Interativos Baseados em Pares CurtoQue se tornou o marco teórico para zk-SNARK (Argumento Zero-Conhecimento Sucinto Não-Interativo de Conhecimento), uma solução importante em ZKP. O progresso mais importante na aplicação da prova de conhecimento zero é o sistema de prova de conhecimento zero usado pela Z-cash em 2015, que fornece proteção de privacidade para transações e quantias. Posteriormente, zk-SNARK combinado com contratos inteligentes, estendendo sua aplicação para uma variedade mais ampla de cenários de aplicação.

Princípios Básicos de zk-SNARK

A ZKP tradicional adere a três princípios:

  • Completude: Se a afirmação for verdadeira, um provador honesto sempre pode convencer o verificador.
  • Sanidade: Se a afirmação for falsa, qualquer probador fraudulento só pode induzir o verificador com uma pequena probabilidade.
  • Zero-conhecimento: Se a afirmação for verdadeira, o verificador não será capaz de adquirir nada além do fato de que a afirmação é verdadeira. Em outras palavras, o processo de verificação não revelará nenhuma informação que possa ser usada para construir a prova.

O princípio de ZKP pode ser compreendido através de um exemplo simples: Se eu precisar provar para A que tenho o número de telefone de B, não preciso revelar diretamente o número de telefone de B. Em vez disso, posso ligar diretamente para o número de telefone de B e provar que tenho o número de telefone de B depois de completar a ligação. Esse processo não irá vazar o número de telefone de B.
zk-SNARK aprimora ainda mais esses princípios com as seguintes características:

  • Zero-knowledge: O verificador não obtém nenhuma informação útil da prova.
  • Succinct: O tamanho da prova é pequeno (geralmente algumas dezenas de bytes) e o tempo de verificação é curto (geralmente alguns milissegundos);
  • Não interativo: O provador só precisa enviar a prova ao verificador uma vez, sem necessidade de comunicação adicional.
  • Parâmetros confiáveis: Tanto o provador quanto o validador precisam usar uma String de Referência Comum (CRS) gerada por uma terceira parte confiável, que pode conter informações sensíveis que, se vazadas ou adulteradas, podem ameaçar a segurança do sistema.

No artigo de Groth, ele propôs um método de prova de conhecimento zero não interativo baseado em emparelhamentos para transformar um problema computacional em um Programa Aritmético Quadrático (QAP). Este método utiliza criptografia de curva elíptica e funções de hash para construir uma prova eficaz. Designs subsequentes de zk-SNARK geralmente envolvem quatro etapas.

  • Configuração do Sistema: Realizada por uma terceira parte confiável. Envolve a geração de um CRS, incluindo uma chave de prova (pk) e uma chave de verificação (vk). Este processo só precisa ser executado uma vez, e o CRS pode ser reutilizado várias vezes.
  • Problema de codificação: Transformar um problema computacional f (x) = y em uma 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 selecionado aleatoriamente e y é a saída de f. Este processo pode ser realizado por um comprobador ou verificador, ou por uma terceira parte antecipadamente.
  • Geração de Prova: Realizada pelo comprovante. Envolve usar a entrada w de pk, x e f para gerar uma prova \pi, provando que ele conhece um w que satisfaz f (w) = y sem revelar o valor específico de w. Esse processo envolve cálculos polinomiais, operações de curva elíptica e operações de função hash, gerando, em última instância, um \pi composto por vários pontos de curva elíptica e um valor de hash.
  • Verificação de Prova: Realizada pelo verificador. Envolve o uso de vk, x, y e \pi para verificação, determinando se o provador conhece um w que satisfa f (w) = y. Este processo também envolve cálculo polinomial, operações de curva elíptica e operações de função de hash. Finalmente, ele obtém um valor booleano indicando se a prova é válida.

Para ilustrar com um exemplo simples, suponha que você tenha um mapa do tesouro que pode guiá-lo até a localização exata de um tesouro enterrado. Você deseja provar a alguém que conhece a localização do tesouro, mas não quer revelar o conteúdo do mapa do tesouro ou a localização real do tesouro. Se você usar a tecnologia zk-SNARK, precisará criar um quebra-cabeça complexo do mapa do tesouro. Você escolhe um pequeno pedaço do quebra-cabeça crucial (uma prova) e mostra para a outra pessoa, convencendo-os de que você sabe como todo o quebra-cabeça, ou seja, a localização do tesouro, se encaixa sem revelar todo o quebra-cabeça. No entanto, para fazer isso, você precisa obter algumas marcas especiais de uma gráfica confiável, que são usadas para provar a autenticidade da sua peça do quebra-cabeça.

Combinação de Reservas de Exchange com zk-SNARK

A discussão anterior mencionou que zk-SNARK permite definir uma string de referência comum, o que significa que as restrições podem ser definidas no circuito em execução. Tomando a reserva da Gate.io como exemplo, ele define cinco restrições principais no circuito, como mostrado abaixo:

① Antes de inserir os ativos líquidos do usuário na árvore de Merkle, o nó correspondente ao ID do usuário está vazio.
② Calcular os ativos/passivos totais do usuário com base na lista de ativos do usuário e no preço de cada ativo. Os ativos totais devem ser maiores do que os passivos totais.
③ Adicione os ativos/passivos do usuário aos ativos/passivos da exchange.
④ Calcular o hash de estado do usuário usando o ID do usuário, ativos/passivos totais e lista de ativos. Inserir o estado do usuário na árvore de Merkle para obter uma nova Raiz de Merkle.
⑤ O valor de hash do nó raiz da árvore antes do usuário anterior criar uma operação de usuário deve ser igual ao valor de hash após o usuário subsequente criar uma operação de usuário.
(A operação ① pode evitar que os dados do nó sejam falsos, a operação ② pode evitar contas com saldo negativo, e a operação ⑤ pode garantir que os dados do usuário não sejam alterados antes e depois da operação.)
Isso garante a resolução do problema de saldo negativo. Os dados da exchange só precisam passar pelo circuito para realizar automaticamente verificações de restrição e obter o número do ativo. No entanto, essa solução requer certa potência de computação e condições de hardware. Leva 15 dias para calcular a prova de ativos de 10 milhões de usuários em uma máquina de 32 núcleos com 128GB de RAM. O cálculo da Prova de Reservas pode ser paralelizado. Se houver 10 máquinas, leva apenas 1,5 dias.

Conclusão

Ao definir restrições relevantes, zk-SNARK pode evitar a ocorrência de problemas de valor negativo e proteger melhor a privacidade e segurança dos usuários. A Prova de Reservas da Gate.io agora pode comprovar as taxas de reserva para mais de 100 moedas, e os usuários podem visualizá-la com um simples clique.linkNa próxima lição, vamos levá-lo a verificar a segurança dos seus ativos em 3 minutos.

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
Каталог
Урок 3

Como combinar a prova de reservas com a tecnologia zk-SNARK?

Esta lição explica o que é a tecnologia zk-SNARK e como as Prova de Reservas são otimizadas usando a tecnologia zk-SNARK

Antecedentes

Prova de Conhecimento Zero (PCZ) é uma técnica criptográfica proposta pela primeira vez por S. Goldwasser, S. Micali e C. Rackoff no início da década de 1980 em um artigo intitulado “A Complexidade do Conhecimento dos Sistemas de Prova InterativaNo artigo, foi conceitualizado como um modelo teórico para resolver o problema de verificar declarações matemáticas sem revelar a evidência. Este conceito atraiu ampla atenção na academia porque desafia os limites das técnicas criptográficas tradicionais e fornece novos métodos para processar informações sensíveis.

Com o tempo, a 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 “Argumentos de Conhecimento Zero Não-Interativos Baseados em Pares CurtoQue se tornou o marco teórico para zk-SNARK (Argumento Zero-Conhecimento Sucinto Não-Interativo de Conhecimento), uma solução importante em ZKP. O progresso mais importante na aplicação da prova de conhecimento zero é o sistema de prova de conhecimento zero usado pela Z-cash em 2015, que fornece proteção de privacidade para transações e quantias. Posteriormente, zk-SNARK combinado com contratos inteligentes, estendendo sua aplicação para uma variedade mais ampla de cenários de aplicação.

Princípios Básicos de zk-SNARK

A ZKP tradicional adere a três princípios:

  • Completude: Se a afirmação for verdadeira, um provador honesto sempre pode convencer o verificador.
  • Sanidade: Se a afirmação for falsa, qualquer probador fraudulento só pode induzir o verificador com uma pequena probabilidade.
  • Zero-conhecimento: Se a afirmação for verdadeira, o verificador não será capaz de adquirir nada além do fato de que a afirmação é verdadeira. Em outras palavras, o processo de verificação não revelará nenhuma informação que possa ser usada para construir a prova.

O princípio de ZKP pode ser compreendido através de um exemplo simples: Se eu precisar provar para A que tenho o número de telefone de B, não preciso revelar diretamente o número de telefone de B. Em vez disso, posso ligar diretamente para o número de telefone de B e provar que tenho o número de telefone de B depois de completar a ligação. Esse processo não irá vazar o número de telefone de B.
zk-SNARK aprimora ainda mais esses princípios com as seguintes características:

  • Zero-knowledge: O verificador não obtém nenhuma informação útil da prova.
  • Succinct: O tamanho da prova é pequeno (geralmente algumas dezenas de bytes) e o tempo de verificação é curto (geralmente alguns milissegundos);
  • Não interativo: O provador só precisa enviar a prova ao verificador uma vez, sem necessidade de comunicação adicional.
  • Parâmetros confiáveis: Tanto o provador quanto o validador precisam usar uma String de Referência Comum (CRS) gerada por uma terceira parte confiável, que pode conter informações sensíveis que, se vazadas ou adulteradas, podem ameaçar a segurança do sistema.

No artigo de Groth, ele propôs um método de prova de conhecimento zero não interativo baseado em emparelhamentos para transformar um problema computacional em um Programa Aritmético Quadrático (QAP). Este método utiliza criptografia de curva elíptica e funções de hash para construir uma prova eficaz. Designs subsequentes de zk-SNARK geralmente envolvem quatro etapas.

  • Configuração do Sistema: Realizada por uma terceira parte confiável. Envolve a geração de um CRS, incluindo uma chave de prova (pk) e uma chave de verificação (vk). Este processo só precisa ser executado uma vez, e o CRS pode ser reutilizado várias vezes.
  • Problema de codificação: Transformar um problema computacional f (x) = y em uma 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 selecionado aleatoriamente e y é a saída de f. Este processo pode ser realizado por um comprobador ou verificador, ou por uma terceira parte antecipadamente.
  • Geração de Prova: Realizada pelo comprovante. Envolve usar a entrada w de pk, x e f para gerar uma prova \pi, provando que ele conhece um w que satisfaz f (w) = y sem revelar o valor específico de w. Esse processo envolve cálculos polinomiais, operações de curva elíptica e operações de função hash, gerando, em última instância, um \pi composto por vários pontos de curva elíptica e um valor de hash.
  • Verificação de Prova: Realizada pelo verificador. Envolve o uso de vk, x, y e \pi para verificação, determinando se o provador conhece um w que satisfa f (w) = y. Este processo também envolve cálculo polinomial, operações de curva elíptica e operações de função de hash. Finalmente, ele obtém um valor booleano indicando se a prova é válida.

Para ilustrar com um exemplo simples, suponha que você tenha um mapa do tesouro que pode guiá-lo até a localização exata de um tesouro enterrado. Você deseja provar a alguém que conhece a localização do tesouro, mas não quer revelar o conteúdo do mapa do tesouro ou a localização real do tesouro. Se você usar a tecnologia zk-SNARK, precisará criar um quebra-cabeça complexo do mapa do tesouro. Você escolhe um pequeno pedaço do quebra-cabeça crucial (uma prova) e mostra para a outra pessoa, convencendo-os de que você sabe como todo o quebra-cabeça, ou seja, a localização do tesouro, se encaixa sem revelar todo o quebra-cabeça. No entanto, para fazer isso, você precisa obter algumas marcas especiais de uma gráfica confiável, que são usadas para provar a autenticidade da sua peça do quebra-cabeça.

Combinação de Reservas de Exchange com zk-SNARK

A discussão anterior mencionou que zk-SNARK permite definir uma string de referência comum, o que significa que as restrições podem ser definidas no circuito em execução. Tomando a reserva da Gate.io como exemplo, ele define cinco restrições principais no circuito, como mostrado abaixo:

① Antes de inserir os ativos líquidos do usuário na árvore de Merkle, o nó correspondente ao ID do usuário está vazio.
② Calcular os ativos/passivos totais do usuário com base na lista de ativos do usuário e no preço de cada ativo. Os ativos totais devem ser maiores do que os passivos totais.
③ Adicione os ativos/passivos do usuário aos ativos/passivos da exchange.
④ Calcular o hash de estado do usuário usando o ID do usuário, ativos/passivos totais e lista de ativos. Inserir o estado do usuário na árvore de Merkle para obter uma nova Raiz de Merkle.
⑤ O valor de hash do nó raiz da árvore antes do usuário anterior criar uma operação de usuário deve ser igual ao valor de hash após o usuário subsequente criar uma operação de usuário.
(A operação ① pode evitar que os dados do nó sejam falsos, a operação ② pode evitar contas com saldo negativo, e a operação ⑤ pode garantir que os dados do usuário não sejam alterados antes e depois da operação.)
Isso garante a resolução do problema de saldo negativo. Os dados da exchange só precisam passar pelo circuito para realizar automaticamente verificações de restrição e obter o número do ativo. No entanto, essa solução requer certa potência de computação e condições de hardware. Leva 15 dias para calcular a prova de ativos de 10 milhões de usuários em uma máquina de 32 núcleos com 128GB de RAM. O cálculo da Prova de Reservas pode ser paralelizado. Se houver 10 máquinas, leva apenas 1,5 dias.

Conclusão

Ao definir restrições relevantes, zk-SNARK pode evitar a ocorrência de problemas de valor negativo e proteger melhor a privacidade e segurança dos usuários. A Prova de Reservas da Gate.io agora pode comprovar as taxas de reserva para mais de 100 moedas, e os usuários podem visualizá-la com um simples clique.linkNa próxima lição, vamos levá-lo a verificar a segurança dos seus ativos em 3 minutos.

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.