PLONK: Uma Análise Profunda das Vulnerabilidades do Protocolo Criptográfico
Este artigo explora o protocolo criptográfico PLONK, suas funcionalidades e as vulnerabilidades descobertas em suas implementações. Entenda como falhas de segurança podem comprometer a propriedade de zero-knowledge e a integridade de aplicações blockchain.
MundiX News·10 de maio de 2026·11 min de leitura·👁 2 views
PLONK (Permutations over Lagrange-bases for Oecumenical Noninteractive Arguments of Knowledge) é um protocolo zk-SNARK desenvolvido em 2019 que permite provar o conhecimento de um conjunto de variáveis que satisfazem um programa determinístico, sem revelar essas variáveis. Sua popularidade se deve a provas compactas, verificação rápida e uma configuração confiável reutilizável, tornando-o amplamente utilizado em diversas aplicações blockchain. No entanto, a segurança deste protocolo é de suma importância e tem sido objeto de investigação.
O protocolo PLONK opera com base em esquemas aritméticos, onde um programa é representado por uma rede de nós, cada um com duas entradas e uma saída, seguindo uma relação específica. A codificação das relações entre esses nós é feita através de uma subgrupo multiplicativo do campo finito. A configuração inicial do protocolo envolve parâmetros como entradas do provador (witness), entradas do verificador e entradas comuns, incluindo um reference string essencial para a construção de compromissos (commitments). O objetivo do provador é convencer o verificador de que suas atribuições de variáveis estão corretas em relação aos seletores do esquema e às substituições.
As vulnerabilidades em implementações de PLONK têm sido um foco de pesquisa. A ausência de polinômios de mascaramento pode violar a propriedade de zero-knowledge, embora sua exploração prática seja computacionalmente complexa. A vulnerabilidade "Frozen Heart" explora a incapacidade do verificador de conhecer o witness diretamente, permitindo que um provador desonesto manipule o transcript para gerar desafios pseudoaleatórios e, em certos cenários, criar valores de Public Input após a prova. Outra falha crítica, a "00 bug" no Aztec PLONK Verifier, permitia que qualquer prova fosse aceita como válida se certos pontos fossem iguais ao ponto no infinito da curva elíptica, devido a múltiplos erros na implementação da verificação.
A verificação de provas em PLONK envolve uma série de etapas complexas, incluindo a prova de conformidade com seletores, Public Inputs e substituições. A verificação final utiliza o emparelhamento de Weil para comparar certas expressões, garantindo a integridade do processo. No entanto, a segurança de um produto não é garantida apenas por protocolos criptográficos bem estudados. Erros de implementação, como os observados em ataques ao Fiat-Shamir transform, podem levar à violação da propriedade de zero-knowledge e à criação de provas válidas sem o conhecimento correspondente. Portanto, é crucial entender como as propriedades de segurança provadas para um protocolo são implementadas na prática, incluindo a formação do transcript, o tratamento de pontos no infinito e a manutenção da confidencialidade dos dados. Apenas com essa abordagem, as provas de zero-knowledge se tornam um componente real da segurança do produto, e não uma ilusão de confiabilidade criptográfica.
PLONK (Permutations over Lagrange-bases for Oecumenical Noninteractive Arguments of Knowledge) é um protocolo zk-SNARK desenvolvido em 2019 que permite provar o conhecimento de um conjunto de variáveis que satisfazem um programa determinístico, sem revelar essas variáveis. Sua popularidade se deve a provas compactas, verificação rápida e uma configuração confiável reutilizável, tornando-o amplamente utilizado em diversas aplicações blockchain. No entanto, a segurança deste protocolo é de suma importância e tem sido objeto de investigação.
O protocolo PLONK opera com base em esquemas aritméticos, onde um programa é representado por uma rede de nós, cada um com duas entradas e uma saída, seguindo uma relação específica. A codificação das relações entre esses nós é feita através de uma subgrupo multiplicativo do campo finito. A configuração inicial do protocolo envolve parâmetros como entradas do provador (witness), entradas do verificador e entradas comuns, incluindo um reference string essencial para a construção de compromissos (commitments). O objetivo do provador é convencer o verificador de que suas atribuições de variáveis estão corretas em relação aos seletores do esquema e às substituições.
As vulnerabilidades em implementações de PLONK têm sido um foco de pesquisa. A ausência de polinômios de mascaramento pode violar a propriedade de zero-knowledge, embora sua exploração prática seja computacionalmente complexa. A vulnerabilidade "Frozen Heart" explora a incapacidade do verificador de conhecer o witness diretamente, permitindo que um provador desonesto manipule o transcript para gerar desafios pseudoaleatórios e, em certos cenários, criar valores de Public Input após a prova. Outra falha crítica, a "00 bug" no Aztec PLONK Verifier, permitia que qualquer prova fosse aceita como válida se certos pontos fossem iguais ao ponto no infinito da curva elíptica, devido a múltiplos erros na implementação da verificação.
A verificação de provas em PLONK envolve uma série de etapas complexas, incluindo a prova de conformidade com seletores, Public Inputs e substituições. A verificação final utiliza o emparelhamento de Weil para comparar certas expressões, garantindo a integridade do processo. No entanto, a segurança de um produto não é garantida apenas por protocolos criptográficos bem estudados. Erros de implementação, como os observados em ataques ao Fiat-Shamir transform, podem levar à violação da propriedade de zero-knowledge e à criação de provas válidas sem o conhecimento correspondente. Portanto, é crucial entender como as propriedades de segurança provadas para um protocolo são implementadas na prática, incluindo a formação do transcript, o tratamento de pontos no infinito e a manutenção da confidencialidade dos dados. Apenas com essa abordagem, as provas de zero-knowledge se tornam um componente real da segurança do produto, e não uma ilusão de confiabilidade criptográfica.