الدرس رقم 3

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

Esta lição explica o que é a tecnologia zk-SNARK e como a prova de reservas é otimizada usando a tecnologia zk-SNARK

Antecedentes

Zero-Knowledge Proof (ZKP) é uma técnica criptográfica proposta pela primeira vez por S. Goldwasser, S. Micali e C. Rackoff no início dos anos 80 num artigo intitulado A Complexidade do Conhecimento dos Sistemas de Prova InterativosNo artigo, foi conceptualizado como um modelo teórico para resolver o problema de verificar declarações matemáticas sem revelar a evidência. Este conceito tem atraído atenção generalizada 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, 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 emparelhamento curto“, que se tornou o marco teórico para zk-SNARK (Argumento de 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 pelo Z-cash em 2015, que fornece proteção de privacidade para transações e montantes. Posteriormente, zk-SNARK combinado com contratos inteligentes, estendendo sua aplicação a uma gama mais ampla de cenários de aplicação.

Princípios básicos do zk-SNARK

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

  • Completude: Se a afirmação for verdadeira, um provador honesto pode sempre convencer o verificador.
  • Solidez: Se a afirmação for falsa, qualquer provador fraudulento só pode induzir o verificador em erro com uma pequena probabilidade.
  • Zero-conhecimento: Se a afirmação for verdadeira, o verificador não poderá 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 entendido através de um exemplo simples: Se eu precisar provar a 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 conseguir completar a chamada. Este processo não irá divulgar o número de telefone de B.
zk-SNARK melhora ainda mais esses princípios com as seguintes características:

  • Conhecimento zero: O verificador não obtém qualquer 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 mais comunicação.
  • Parâmetros confiáveis: Tanto o provador quanto o validador precisam usar uma Common Reference String (CRS) gerada por um terceiro confiável, que pode conter informações confidenciais 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. Os projetos 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 provador ou verificador, ou por um terceiro previamente.
  • Geração de Prova: Realizada pelo provador. 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 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 satisfaz f (w) = y. Este processo também envolve cálculos polinomiais, operações de curva elíptica e operações de função de hash. Finalmente, obtém um valor booleano que indica se a prova é válida.

Para ilustrar com um exemplo simples, suponha que tenha um mapa do tesouro que o pode guiar até à localização exata de um tesouro enterrado. Quer 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 utilizar a tecnologia zk-SNARK, precisa de criar um quebra-cabeças complexo do mapa do tesouro. Escolhe uma pequena peça crucial do quebra-cabeças (uma prova) e mostra-a à outra pessoa, convencendo-a de que conhece como o quebra-cabeças inteiro, ou seja, a localização do tesouro, se encaixa sem revelar o quebra-cabeças inteiro. No entanto, para fazer isto, precisa de obter algumas marcas especiais de uma casa de impressão de confiança, que são usadas para provar a autenticidade da sua peça do quebra-cabeças.

Combinação das Reservas da Exchange com zk-SNARK

A discussão anterior mencionou que zk-SNARK permite definir uma string de referência comum, o que significa que podem ser estabelecidas restrições no circuito em execução. Tomando a reserva da Gate.io como exemplo, 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 utilizador com base na lista de ativos do utilizador e no preço de cada ativo. Os ativos totais devem ser superiores aos passivos totais.
③ Adicione os ativos/passivos do usuário aos ativos/passivos da troca.
④ 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 de o utilizador anterior criar uma operação de utilizador deve ser igual ao valor de hash após o utilizador subsequente criar uma operação de utilizador.
(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, esta solução requer certa potência de computação e condições de hardware. São necessários 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, levará apenas 1,5 dias.

Conclusão

Ao definir restrições relevantes, zk-SNARK pode evitar a ocorrência de problemas de valor negativo e melhor proteger 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 clicando simplesmente noligação. Na próxima lição, vamos levá-lo a verificar a segurança dos seus ativos em 3 minutos.

إخلاء المسؤولية
* ينطوي الاستثمار في العملات الرقمية على مخاطر كبيرة. فيرجى المتابعة بحذر. ولا تهدف الدورة التدريبية إلى تقديم المشورة الاستثمارية.
* تم إنشاء الدورة التدريبية من قبل المؤلف الذي انضم إلى مركز التعلّم في Gate. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.
الكتالوج
الدرس رقم 3

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

Esta lição explica o que é a tecnologia zk-SNARK e como a prova de reservas é otimizada usando a tecnologia zk-SNARK

Antecedentes

Zero-Knowledge Proof (ZKP) é uma técnica criptográfica proposta pela primeira vez por S. Goldwasser, S. Micali e C. Rackoff no início dos anos 80 num artigo intitulado A Complexidade do Conhecimento dos Sistemas de Prova InterativosNo artigo, foi conceptualizado como um modelo teórico para resolver o problema de verificar declarações matemáticas sem revelar a evidência. Este conceito tem atraído atenção generalizada 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, 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 emparelhamento curto“, que se tornou o marco teórico para zk-SNARK (Argumento de 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 pelo Z-cash em 2015, que fornece proteção de privacidade para transações e montantes. Posteriormente, zk-SNARK combinado com contratos inteligentes, estendendo sua aplicação a uma gama mais ampla de cenários de aplicação.

Princípios básicos do zk-SNARK

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

  • Completude: Se a afirmação for verdadeira, um provador honesto pode sempre convencer o verificador.
  • Solidez: Se a afirmação for falsa, qualquer provador fraudulento só pode induzir o verificador em erro com uma pequena probabilidade.
  • Zero-conhecimento: Se a afirmação for verdadeira, o verificador não poderá 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 entendido através de um exemplo simples: Se eu precisar provar a 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 conseguir completar a chamada. Este processo não irá divulgar o número de telefone de B.
zk-SNARK melhora ainda mais esses princípios com as seguintes características:

  • Conhecimento zero: O verificador não obtém qualquer 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 mais comunicação.
  • Parâmetros confiáveis: Tanto o provador quanto o validador precisam usar uma Common Reference String (CRS) gerada por um terceiro confiável, que pode conter informações confidenciais 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. Os projetos 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 provador ou verificador, ou por um terceiro previamente.
  • Geração de Prova: Realizada pelo provador. 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 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 satisfaz f (w) = y. Este processo também envolve cálculos polinomiais, operações de curva elíptica e operações de função de hash. Finalmente, obtém um valor booleano que indica se a prova é válida.

Para ilustrar com um exemplo simples, suponha que tenha um mapa do tesouro que o pode guiar até à localização exata de um tesouro enterrado. Quer 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 utilizar a tecnologia zk-SNARK, precisa de criar um quebra-cabeças complexo do mapa do tesouro. Escolhe uma pequena peça crucial do quebra-cabeças (uma prova) e mostra-a à outra pessoa, convencendo-a de que conhece como o quebra-cabeças inteiro, ou seja, a localização do tesouro, se encaixa sem revelar o quebra-cabeças inteiro. No entanto, para fazer isto, precisa de obter algumas marcas especiais de uma casa de impressão de confiança, que são usadas para provar a autenticidade da sua peça do quebra-cabeças.

Combinação das Reservas da Exchange com zk-SNARK

A discussão anterior mencionou que zk-SNARK permite definir uma string de referência comum, o que significa que podem ser estabelecidas restrições no circuito em execução. Tomando a reserva da Gate.io como exemplo, 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 utilizador com base na lista de ativos do utilizador e no preço de cada ativo. Os ativos totais devem ser superiores aos passivos totais.
③ Adicione os ativos/passivos do usuário aos ativos/passivos da troca.
④ 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 de o utilizador anterior criar uma operação de utilizador deve ser igual ao valor de hash após o utilizador subsequente criar uma operação de utilizador.
(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, esta solução requer certa potência de computação e condições de hardware. São necessários 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, levará apenas 1,5 dias.

Conclusão

Ao definir restrições relevantes, zk-SNARK pode evitar a ocorrência de problemas de valor negativo e melhor proteger 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 clicando simplesmente noligação. Na próxima lição, vamos levá-lo a verificar a segurança dos seus ativos em 3 minutos.

إخلاء المسؤولية
* ينطوي الاستثمار في العملات الرقمية على مخاطر كبيرة. فيرجى المتابعة بحذر. ولا تهدف الدورة التدريبية إلى تقديم المشورة الاستثمارية.
* تم إنشاء الدورة التدريبية من قبل المؤلف الذي انضم إلى مركز التعلّم في Gate. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.