#dusk $DUSK @Dusk
Quatro números foi tudo o que foi preciso. O caminho de Fênix protegido de dusk — a parte que carrega toda a sua proposta de privacidade — verificou provas por meio de uma única chamada, e essa chamada nunca conferiu quatro valores de seletor com os compromissos que ficam bem ali na chave do verificador. $DUSK #dusk @Dusk já havia passado por três auditorias separadas antes que isso fosse encontrado em fevereiro.
O que me deixou de queixo caído foi a forma do erro. Espera-se que seletores sejam dados públicos, fixos, do lado do verificador nos PLONK padrão. Os widgets personalizados do dusk-plonk fizeram com que eles se tornassem números fornecidos pelo provador, e ninguém atualizou o modelo mental que decide o que precisa de vinculação criptográfica. A lógica do circuito em si estava correta ponta a ponta — a lacuna estava uma camada abaixo, na fiação de verificação.
O que mudou para mim foi perceber que "foi auditado três vezes" não é a mesma coisa que "foi auditado contra o modelo de ameaça correto". Um revisor que verifica a lógica de restrições pode passar direto por uma suposição estrutural que silenciosamente deixou de valer. Isso é mais difícil de pegar do que um bug normal de código, e não é exclusivo da Dusk — o mesmo padrão apareceu de forma independente no Jellyfish do Espresso.
Próximo passo que eu verificaria: se o empenho da Dusk por uma especificação padronizada de verificação em PLONK realmente é entregue, ou se fica apenas em uma discussão.