Encaminhe o título original 'Um paradigma de conhecimento zero: Parte 1 - O que é um zk-VM?'
O que são provas de conhecimento zero (ZKPs)?
Se você não tem conhecimento prévio de provas de conhecimento zero (ZKP), este vídeo da Wired explica o conceito em cinco níveis de dificuldade de forma interativa com exemplos e demonstrações facilmente compreensíveis. Altamente recomendado.
Em termos mais simples, os ZKPs permitem que uma parte (provador) prove a outra parte (o verificador) que sabe algo sem revelar o que é essa coisa ou qualquer informação adicional. Mais especificamente, ZKPs provam o conhecimento de um pedaço de dados, ou conhecimento do resultado de uma computação, sem revelar os dados ou entradas. O processo de criação de uma prova de conhecimento zero envolve uma série de modelos matemáticos para transformar os resultados de uma computação em um pedaço de informação sem sentido que prova a execução bem-sucedida do código, que pode ser verificada posteriormente.
Em alguns casos, é preciso menos trabalho para verificar a prova, que é construída após várias rodadas de conversões algébricas e criptografia, do que seria necessário para executar a computação. Essa combinação única de segurança e escalabilidade é o que torna a criptografia de conhecimento zero uma ferramenta tão poderosa.
zkSNARKs: Conhecimento Zero Sucinto Argumento Não Interativo do Conhecimento
zkSTARKs: Conhecimento Zero Escalável Argumento Transparente de Conhecimento
(Nota: A ponte do Succinct usa SNARKs, mas o SP1 é um protocolo baseado em STARK)
Vale a pena notar que todos os STARKs são SNARKs, mas nem todos os SNARKs são STARKs.
Para uma melhor compreensão geral de SNARKs e STARKs, recomendamos a leitura desta série de artigos @krzhang/privacy-in-cryptocurrencies-zero-knowledge-and-zk-snarks-1-2-68ce1838fd9c>escrita por Yan Zhang e Yi Sun da Axiom, e esta coleção de artigos no github de Ventali Tan.
Uma máquina virtual (VM) é um programa que executa programas. No contexto, um zkVM é um computador virtual que é implementado como um sistema para gerar provas de conhecimento zero, ou um circuito universal, ou ferramenta, para gerar ZKPs para qualquer programa ou computação.
zkVMs eliminam a necessidade de aprender matemática complicada e criptografia para projetar e codificar ZK, e permite que qualquer desenvolvedor execute programas escritos em suas linguagens preferidas e gere ZKPs, tornando muito mais fácil integrar e interagir com conhecimento zero. Em linhas gerais, a maioria das referências a zkVMs inclui implicitamente as cadeias de ferramentas do compilador e os sistemas de prova anexados à máquina virtual que executa os programas, e não apenas a máquina virtual em si. Abaixo, resumimos os principais componentes de uma zkVM e suas funções:
Os principais componentes de uma zkVM
O projeto e a implementação de cada componente são regidos pela escolha da prova (SNARKs ou STARKs) e pela arquitetura do conjunto de instruções (ISA) do zkVM. Tradicionalmente, um ISA especifica do que uma CPU é capaz de fazer (tipos de dados, registros, memória etc.) e a sequência de ações que a CPU executa quando executa um programa. No contexto, o ISA determina o código de máquina que é interpretável e executável pela VM. A escolha de um ISA pode gerar diferenças radicais na acessibilidade e usabilidade do zkVM, bem como na velocidade e eficiência dos processos de geração de prova, e sustenta a construção de qualquer zkVM.
Abaixo estão alguns exemplos de zkVMs e seus componentes para sua referência.
zkVMs e seus componentes
Por enquanto, vamos nos concentrar nas interações entre cada componente em um alto nível para fornecer uma estrutura para entender os processos algébricos e criptográficos, bem como as compensações de design de um zkVM em um artigo posterior.
O diagrama a seguir é um fluxograma de processo generalizado abstrato de um zkVM, dividido e categorizado entre o formato (entradas / saídas) de um programa à medida que ele se move através dos componentes de um zkVM. Examinaremos cada processo em profundidade nos próximos artigos.
Fluxo geral para um zkVM
O fluxo de processo de um zkVM é geralmente o seguinte:
O provador recebe o traço e o representa como um conjunto de polinômios ligados por um conjunto de restrições, essencialmente traduzindo a computação em álgebra mapeando os fatos matematicamente.
O provador se compromete com esses polinômios usando um Esquema de Compromisso Polinomial (PCS). Um esquema de compromisso é um protocolo que permite ao provador criar uma impressão digital de alguns dados X, que é chamado de compromisso com X, e depois provar fatos sobre X sem revelar X, usando o compromisso com X. O PCS é a impressão digital; uma versão sucinta "pré-processada" das restrições na computação. Isso permite que o provador prove fatos sobre o cálculo, agora expressos em uma equação polinomial, usando valores aleatórios propostos pelo verificador nas etapas seguintes.
O provador executa um Polynomial Interactive Oracle Proof (PIOP) para mostrar que os polinômios comprometidos representam um traço de execução que satisfaz as restrições dadas. Um PIOP é um protocolo de prova interativo que consiste em uma série de rodadas em que o provador envia compromissos para polinômios, o verificador responde com valores de campos aleatórios e o provador fornece avaliações do polinômio nesses valores aleatórios, semelhante a "resolver" a equação polinomial usando valores aleatórios para persuadir probabilisticamente o verificador.
Aplicação da heurística Fiat-Shamir; o provador executa o PIOP em um modo não interativo, onde o comportamento do verificador é limitado ao envio de pontos de desafio pseudoaleatórios. Na criptografia, a heurística Fiat-Shamir converte uma prova interativa de conhecimento em uma assinatura digital para verificação. Essa etapa criptografa a prova e a torna zero conhecimento.
O provador deve convencer o verificador de que as avaliações polinomiais alegadas estão corretas, no que diz respeito aos compromissos polinomiais que enviou ao verificador. Para fazer isso, o provador produz uma prova de "avaliação" ou "abertura", que é fornecida pelo esquema de compromisso polinomial (impressão digital).
Resumidamente, uma prova zkVM prova, para um determinado programa, um determinado resultado, e dadas as condições iniciais, que há alguma entrada que faz com que o programa produza o resultado dado quando executado a partir das condições iniciais dadas. Podemos combinar essa instrução com o fluxo do processo para chegar à seguinte descrição de um zkVM.
Uma prova zkVM prova, para um determinado programa VM e uma dada saída, que há alguma entrada que faz com que o programa dado produza a saída dada quando executado na VM.
Quais são os critérios pelos quais devemos avaliar zkVMs? Em outras palavras, quando devemos dizer que um zkVM é melhor do que outro? Na verdade, a resposta depende do caso de uso.
A pesquisa de mercado da Lita sugere que, para a maioria dos casos de uso comercial, as propriedades mais importantes, fora da velocidade, eficiência e sucintidade, são velocidade ou eficiência em tempo de núcleo, dependendo da aplicação. Algumas aplicações são sensíveis ao preço e querem otimizar para baixo consumo de energia e baixo uso de capital na prova; Para estes, a eficiência do tempo de núcleo é provavelmente a métrica mais importante para otimizar. Outros aplicativos, particularmente aplicativos relacionados a finanças ou negociação, são sensíveis à latência e desejam otimizar a velocidade.
A maioria das comparações de desempenho divulgadas se concentra exclusivamente na velocidade, que é importante, mas não uma medida holística de desempenho. Há também algumas propriedades importantes que medem a confiabilidade de um zkVM; a maioria dos quais não está à altura dos padrões de produção, mesmo para os principais operadores históricos do mercado.
Propomos que as zkVMs sejam avaliadas com base nos seguintes critérios, separados em dois subconjuntos:
Principais critérios para avaliar zk-VMs
Linha de base: Mede a confiabilidade de zkVMs
Desempenho: Mede os recursos de um zkVM
4.1 Linha de base: pressupostos de correção, segurança e confiança
Ao avaliar zkVMs para aplicativos de missão crítica, a correção e a segurança devem ser consideradas como a linha de base. É necessário que haja razões suficientes para confiar na correcção e numa segurança suficientemente forte. Além disso, as suposições de confiança precisam ser suficientemente fracas para o aplicativo.
Sem essas propriedades, o zkVM é potencialmente pior do que inútil para o aplicativo, pois pode falhar no desempenho especificado e expor os usuários a hacking e exploits.
i. Correção
A correção é composta por três propriedades:
Você pode ter completude sem solidez; Se o sistema de prova prova tudo, incluindo falsidade, obviamente é completo, mas não é sólido. Inversamente, você pode ter solidez sem completude; Se o sistema de prova prova que um programa existiu, mas não consegue provar os cálculos, obviamente ele é sólido (afinal, ele nunca prova nenhuma falsidade), mas não completo.
ii. Segurança
Na prática, todas as três propriedades de correção têm tolerâncias diferentes de zero. Isso implica que todas as provas são probabilidades estatísticas de correção, e não certezas absolutas. Uma tolerância refere-se à probabilidade máxima tolerável de que uma propriedade falhe. Tolerâncias zero são, naturalmente, o ideal, mas zkVMs não atingem tolerâncias zero em todas essas propriedades na prática. A solidez e a completude perfeitas parecem ser incompatíveis com a sucintura, e não há métodos conhecidos para alcançar o conhecimento zero perfeito. Uma maneira comum de medir a segurança é em bits de segurança, onde uma tolerância de 1 / (2^n) é referida como n bits de segurança. Mais bits de segurança é melhor.
Se um zkVM está perfeitamente correto, isso não implica necessariamente que ele é confiável. A correção implica apenas que o zkVM satisfaz suas propriedades de segurança até as tolerâncias reivindicadas. Isso não implica que as tolerâncias alegadas sejam baixas o suficiente para estarem prontas para o mercado. Além disso, se um zkVM é suficientemente seguro, isso não implica que ele esteja correto; segurança refere-se às tolerâncias reivindicadas, não as tolerâncias que são realmente alcançadas. Somente quando uma zkVM é perfeitamente correta e suficientemente segura é que se pode dizer que a zkVM é confiável até as tolerâncias reivindicadas.
iii. Pressupostos de confiança
Quando zkVMs têm suposições de confiança, isso geralmente assume a forma de um processo de instalação confiável. Um processo de configuração para um sistema de prova ZK é executado uma vez, antes que a primeira prova seja gerada usando o sistema de prova, a fim de gerar algumas informações chamadas "os dados de configuração". Em um processo de configuração confiável, um ou mais indivíduos geram alguma aleatoriedade que é incorporada aos dados de configuração, e é preciso assumir que pelo menos um desses indivíduos excluiu a aleatoriedade que eles incorporaram aos dados de configuração.
Existem dois modelos comuns de pressuposto de confiança na prática.
Uma suposição de confiança da maioria honesta afirma que, de algum conjunto de N indivíduos, mais de N/2 desses indivíduos exibiram integridade em alguma interação particular com o sistema, que é comumente usado por blockchains
Uma suposição de confiança "1 em N" afirma que, de algum conjunto de N indivíduos, pelo menos um desses indivíduos exibiu integridade em alguma interação particular com o sistema, que é comumente usado por ferramentas e aplicativos baseados em MPC.
É geralmente aceito que todo o resto sendo igual, zkVMs sem suposições de confiança são mais seguros do que zkVMs que exigem suposições de confiança.
4.2 O Trilema do zkVM: Equilibrando Velocidade, Eficiência e Sucintura em zkVMs
O trilema zkVM: velocidade, eficiência e sucintura
Velocidade, eficiência e sucintura são propriedades de escala deslizante. Todos esses fatores contribuem para o custo do usuário final do zkVM. Como eles devem ser ponderados em uma avaliação depende da aplicação. Muitas vezes, a solução mais rápida não é a mais eficiente ou a mais sucinta; a solução mais sucinta não é a mais rápida nem a mais eficiente; e assim por diante. Vamos primeiro definir cada propriedade antes de explicar sua relação
i. Velocidade
A velocidade deve ser definida e medida em relação a programas, entradas e sistemas de teste específicos para garantir que possa ser avaliada quantitativamente. Essa métrica é crítica para aplicativos sensíveis à latência, onde a disponibilidade imediata de provas é essencial, mas vem com maior sobrecarga e tamanhos de prova maiores
ii. Eficiência
O provador consome dois tipos de recursos: núcleo-tempo e espaço. A eficiência pode, portanto, ser subdividida em eficiência de tempo de núcleo e eficiência de espaço.\
Eficiência do Core-Time: Quantidade média de tempo que o provador opera em todos os núcleos multiplicado pelo número de núcleos que executam o provador. Para um provador single-core, o consumo de tempo de núcleo e a velocidade são a mesma coisa. Para um provador com capacidade multi-core rodando no modo multi-core em um sistema multi-core, o consumo de tempo de núcleo e a velocidade não são a mesma coisa. Se um programa utilizar totalmente 5 núcleos ou threads por 5 segundos, isso seria 25 segundos de tempo do usuário e 5 segundos de tempo de relógio de parede.
Eficiência de espaço: refere-se à capacidade de armazenamento usada, como RAM
O tempo do usuário é interessante como um proxy para a energia consumida pela execução de uma computação. Em uma situação em que todos os núcleos são totalmente utilizados quase o tempo todo, o consumo de energia de uma CPU deve permanecer relativamente constante. Nessa situação, o tempo do usuário gasto por uma execução de código vinculada à CPU, predominantemente no modo de usuário, deve ser aproximadamente linearmente proporcional ao número de watts-hora (ou seja, energia) consumidos por essa execução de código.
Economizar no consumo de energia, ou no uso de recursos computacionais, deve ser interessante do ponto de vista de quaisquer operações de comprovação que tenham escala suficiente para que sua conta de energia (ou sua conta de computação em nuvem) para comprovação seja um custo operacional considerável. Por esses motivos, o tempo do usuário é uma métrica interessante. Os custos mais baixos de comprovação permitem que os prestadores de serviços repassem preços de prova mais baixos para clientes sensíveis aos custos.
Ambos os tipos de eficiência estão relacionados ao consumo de energia do processo de prova e à quantidade de capital utilizado pelo processo de prova, que se relaciona com o custo financeiro da prova. Para operacionalizar a definição de eficiência para medição, a definição deve ser feita em relação a um ou mais programas de teste, uma ou mais entradas de teste para cada um desses programas e um ou mais sistemas de teste.
iii. Sucinta
A sucinta é uma composição de três métricas distintas, com a complexidade da verificação de provas subdividida:
A verificação é tipicamente uma operação de núcleo único, portanto, a velocidade e a eficiência do tempo de núcleo são geralmente equivalentes neste contexto. Assim como a velocidade e a eficiência, operacionalizar a definição de sucção requer a especificação de conjuntos de programas de teste, entradas de teste e sistemas de teste.
Com cada propriedade de desempenho definida, ilustramos agora os efeitos dimunitivos da otimização de uma propriedade sobre as outras.
Em geral, otimizar para uma qualidade significa não otimizar para outra qualidade e, portanto, uma análise multidimensional é necessária para escolher uma solução ideal caso a caso.
Uma boa maneira de ponderar essas propriedades em uma avaliação pode ser definir níveis aceitáveis para cada propriedade e, em seguida, determinar quais propriedades são mais importantes. As propriedades mais importantes devem ser otimizadas, sujeitas a manter níveis suficientemente bons em todas as outras propriedades.
Abaixo resumimos cada imóvel e suas principais considerações:
Propriedades de avaliação de zkVMs
Com a tabela acima, concluímos o primeiro artigo de nossa série. Nos próximos artigos, construiremos o fluxograma mostrado acima para explicar processos aritméticos e criptográficos comuns em zkVMs.
Se você achou isso útil, visite nosso site e gitbook para saber mais sobre o que estamos construindo na Lita.
Além disso, siga-nos no X e no Discord para ficar atualizado para não perder o resto da série
Encaminhe o título original 'Um paradigma de conhecimento zero: Parte 1 - O que é um zk-VM?'
O que são provas de conhecimento zero (ZKPs)?
Se você não tem conhecimento prévio de provas de conhecimento zero (ZKP), este vídeo da Wired explica o conceito em cinco níveis de dificuldade de forma interativa com exemplos e demonstrações facilmente compreensíveis. Altamente recomendado.
Em termos mais simples, os ZKPs permitem que uma parte (provador) prove a outra parte (o verificador) que sabe algo sem revelar o que é essa coisa ou qualquer informação adicional. Mais especificamente, ZKPs provam o conhecimento de um pedaço de dados, ou conhecimento do resultado de uma computação, sem revelar os dados ou entradas. O processo de criação de uma prova de conhecimento zero envolve uma série de modelos matemáticos para transformar os resultados de uma computação em um pedaço de informação sem sentido que prova a execução bem-sucedida do código, que pode ser verificada posteriormente.
Em alguns casos, é preciso menos trabalho para verificar a prova, que é construída após várias rodadas de conversões algébricas e criptografia, do que seria necessário para executar a computação. Essa combinação única de segurança e escalabilidade é o que torna a criptografia de conhecimento zero uma ferramenta tão poderosa.
zkSNARKs: Conhecimento Zero Sucinto Argumento Não Interativo do Conhecimento
zkSTARKs: Conhecimento Zero Escalável Argumento Transparente de Conhecimento
(Nota: A ponte do Succinct usa SNARKs, mas o SP1 é um protocolo baseado em STARK)
Vale a pena notar que todos os STARKs são SNARKs, mas nem todos os SNARKs são STARKs.
Para uma melhor compreensão geral de SNARKs e STARKs, recomendamos a leitura desta série de artigos @krzhang/privacy-in-cryptocurrencies-zero-knowledge-and-zk-snarks-1-2-68ce1838fd9c>escrita por Yan Zhang e Yi Sun da Axiom, e esta coleção de artigos no github de Ventali Tan.
Uma máquina virtual (VM) é um programa que executa programas. No contexto, um zkVM é um computador virtual que é implementado como um sistema para gerar provas de conhecimento zero, ou um circuito universal, ou ferramenta, para gerar ZKPs para qualquer programa ou computação.
zkVMs eliminam a necessidade de aprender matemática complicada e criptografia para projetar e codificar ZK, e permite que qualquer desenvolvedor execute programas escritos em suas linguagens preferidas e gere ZKPs, tornando muito mais fácil integrar e interagir com conhecimento zero. Em linhas gerais, a maioria das referências a zkVMs inclui implicitamente as cadeias de ferramentas do compilador e os sistemas de prova anexados à máquina virtual que executa os programas, e não apenas a máquina virtual em si. Abaixo, resumimos os principais componentes de uma zkVM e suas funções:
Os principais componentes de uma zkVM
O projeto e a implementação de cada componente são regidos pela escolha da prova (SNARKs ou STARKs) e pela arquitetura do conjunto de instruções (ISA) do zkVM. Tradicionalmente, um ISA especifica do que uma CPU é capaz de fazer (tipos de dados, registros, memória etc.) e a sequência de ações que a CPU executa quando executa um programa. No contexto, o ISA determina o código de máquina que é interpretável e executável pela VM. A escolha de um ISA pode gerar diferenças radicais na acessibilidade e usabilidade do zkVM, bem como na velocidade e eficiência dos processos de geração de prova, e sustenta a construção de qualquer zkVM.
Abaixo estão alguns exemplos de zkVMs e seus componentes para sua referência.
zkVMs e seus componentes
Por enquanto, vamos nos concentrar nas interações entre cada componente em um alto nível para fornecer uma estrutura para entender os processos algébricos e criptográficos, bem como as compensações de design de um zkVM em um artigo posterior.
O diagrama a seguir é um fluxograma de processo generalizado abstrato de um zkVM, dividido e categorizado entre o formato (entradas / saídas) de um programa à medida que ele se move através dos componentes de um zkVM. Examinaremos cada processo em profundidade nos próximos artigos.
Fluxo geral para um zkVM
O fluxo de processo de um zkVM é geralmente o seguinte:
O provador recebe o traço e o representa como um conjunto de polinômios ligados por um conjunto de restrições, essencialmente traduzindo a computação em álgebra mapeando os fatos matematicamente.
O provador se compromete com esses polinômios usando um Esquema de Compromisso Polinomial (PCS). Um esquema de compromisso é um protocolo que permite ao provador criar uma impressão digital de alguns dados X, que é chamado de compromisso com X, e depois provar fatos sobre X sem revelar X, usando o compromisso com X. O PCS é a impressão digital; uma versão sucinta "pré-processada" das restrições na computação. Isso permite que o provador prove fatos sobre o cálculo, agora expressos em uma equação polinomial, usando valores aleatórios propostos pelo verificador nas etapas seguintes.
O provador executa um Polynomial Interactive Oracle Proof (PIOP) para mostrar que os polinômios comprometidos representam um traço de execução que satisfaz as restrições dadas. Um PIOP é um protocolo de prova interativo que consiste em uma série de rodadas em que o provador envia compromissos para polinômios, o verificador responde com valores de campos aleatórios e o provador fornece avaliações do polinômio nesses valores aleatórios, semelhante a "resolver" a equação polinomial usando valores aleatórios para persuadir probabilisticamente o verificador.
Aplicação da heurística Fiat-Shamir; o provador executa o PIOP em um modo não interativo, onde o comportamento do verificador é limitado ao envio de pontos de desafio pseudoaleatórios. Na criptografia, a heurística Fiat-Shamir converte uma prova interativa de conhecimento em uma assinatura digital para verificação. Essa etapa criptografa a prova e a torna zero conhecimento.
O provador deve convencer o verificador de que as avaliações polinomiais alegadas estão corretas, no que diz respeito aos compromissos polinomiais que enviou ao verificador. Para fazer isso, o provador produz uma prova de "avaliação" ou "abertura", que é fornecida pelo esquema de compromisso polinomial (impressão digital).
Resumidamente, uma prova zkVM prova, para um determinado programa, um determinado resultado, e dadas as condições iniciais, que há alguma entrada que faz com que o programa produza o resultado dado quando executado a partir das condições iniciais dadas. Podemos combinar essa instrução com o fluxo do processo para chegar à seguinte descrição de um zkVM.
Uma prova zkVM prova, para um determinado programa VM e uma dada saída, que há alguma entrada que faz com que o programa dado produza a saída dada quando executado na VM.
Quais são os critérios pelos quais devemos avaliar zkVMs? Em outras palavras, quando devemos dizer que um zkVM é melhor do que outro? Na verdade, a resposta depende do caso de uso.
A pesquisa de mercado da Lita sugere que, para a maioria dos casos de uso comercial, as propriedades mais importantes, fora da velocidade, eficiência e sucintidade, são velocidade ou eficiência em tempo de núcleo, dependendo da aplicação. Algumas aplicações são sensíveis ao preço e querem otimizar para baixo consumo de energia e baixo uso de capital na prova; Para estes, a eficiência do tempo de núcleo é provavelmente a métrica mais importante para otimizar. Outros aplicativos, particularmente aplicativos relacionados a finanças ou negociação, são sensíveis à latência e desejam otimizar a velocidade.
A maioria das comparações de desempenho divulgadas se concentra exclusivamente na velocidade, que é importante, mas não uma medida holística de desempenho. Há também algumas propriedades importantes que medem a confiabilidade de um zkVM; a maioria dos quais não está à altura dos padrões de produção, mesmo para os principais operadores históricos do mercado.
Propomos que as zkVMs sejam avaliadas com base nos seguintes critérios, separados em dois subconjuntos:
Principais critérios para avaliar zk-VMs
Linha de base: Mede a confiabilidade de zkVMs
Desempenho: Mede os recursos de um zkVM
4.1 Linha de base: pressupostos de correção, segurança e confiança
Ao avaliar zkVMs para aplicativos de missão crítica, a correção e a segurança devem ser consideradas como a linha de base. É necessário que haja razões suficientes para confiar na correcção e numa segurança suficientemente forte. Além disso, as suposições de confiança precisam ser suficientemente fracas para o aplicativo.
Sem essas propriedades, o zkVM é potencialmente pior do que inútil para o aplicativo, pois pode falhar no desempenho especificado e expor os usuários a hacking e exploits.
i. Correção
A correção é composta por três propriedades:
Você pode ter completude sem solidez; Se o sistema de prova prova tudo, incluindo falsidade, obviamente é completo, mas não é sólido. Inversamente, você pode ter solidez sem completude; Se o sistema de prova prova que um programa existiu, mas não consegue provar os cálculos, obviamente ele é sólido (afinal, ele nunca prova nenhuma falsidade), mas não completo.
ii. Segurança
Na prática, todas as três propriedades de correção têm tolerâncias diferentes de zero. Isso implica que todas as provas são probabilidades estatísticas de correção, e não certezas absolutas. Uma tolerância refere-se à probabilidade máxima tolerável de que uma propriedade falhe. Tolerâncias zero são, naturalmente, o ideal, mas zkVMs não atingem tolerâncias zero em todas essas propriedades na prática. A solidez e a completude perfeitas parecem ser incompatíveis com a sucintura, e não há métodos conhecidos para alcançar o conhecimento zero perfeito. Uma maneira comum de medir a segurança é em bits de segurança, onde uma tolerância de 1 / (2^n) é referida como n bits de segurança. Mais bits de segurança é melhor.
Se um zkVM está perfeitamente correto, isso não implica necessariamente que ele é confiável. A correção implica apenas que o zkVM satisfaz suas propriedades de segurança até as tolerâncias reivindicadas. Isso não implica que as tolerâncias alegadas sejam baixas o suficiente para estarem prontas para o mercado. Além disso, se um zkVM é suficientemente seguro, isso não implica que ele esteja correto; segurança refere-se às tolerâncias reivindicadas, não as tolerâncias que são realmente alcançadas. Somente quando uma zkVM é perfeitamente correta e suficientemente segura é que se pode dizer que a zkVM é confiável até as tolerâncias reivindicadas.
iii. Pressupostos de confiança
Quando zkVMs têm suposições de confiança, isso geralmente assume a forma de um processo de instalação confiável. Um processo de configuração para um sistema de prova ZK é executado uma vez, antes que a primeira prova seja gerada usando o sistema de prova, a fim de gerar algumas informações chamadas "os dados de configuração". Em um processo de configuração confiável, um ou mais indivíduos geram alguma aleatoriedade que é incorporada aos dados de configuração, e é preciso assumir que pelo menos um desses indivíduos excluiu a aleatoriedade que eles incorporaram aos dados de configuração.
Existem dois modelos comuns de pressuposto de confiança na prática.
Uma suposição de confiança da maioria honesta afirma que, de algum conjunto de N indivíduos, mais de N/2 desses indivíduos exibiram integridade em alguma interação particular com o sistema, que é comumente usado por blockchains
Uma suposição de confiança "1 em N" afirma que, de algum conjunto de N indivíduos, pelo menos um desses indivíduos exibiu integridade em alguma interação particular com o sistema, que é comumente usado por ferramentas e aplicativos baseados em MPC.
É geralmente aceito que todo o resto sendo igual, zkVMs sem suposições de confiança são mais seguros do que zkVMs que exigem suposições de confiança.
4.2 O Trilema do zkVM: Equilibrando Velocidade, Eficiência e Sucintura em zkVMs
O trilema zkVM: velocidade, eficiência e sucintura
Velocidade, eficiência e sucintura são propriedades de escala deslizante. Todos esses fatores contribuem para o custo do usuário final do zkVM. Como eles devem ser ponderados em uma avaliação depende da aplicação. Muitas vezes, a solução mais rápida não é a mais eficiente ou a mais sucinta; a solução mais sucinta não é a mais rápida nem a mais eficiente; e assim por diante. Vamos primeiro definir cada propriedade antes de explicar sua relação
i. Velocidade
A velocidade deve ser definida e medida em relação a programas, entradas e sistemas de teste específicos para garantir que possa ser avaliada quantitativamente. Essa métrica é crítica para aplicativos sensíveis à latência, onde a disponibilidade imediata de provas é essencial, mas vem com maior sobrecarga e tamanhos de prova maiores
ii. Eficiência
O provador consome dois tipos de recursos: núcleo-tempo e espaço. A eficiência pode, portanto, ser subdividida em eficiência de tempo de núcleo e eficiência de espaço.\
Eficiência do Core-Time: Quantidade média de tempo que o provador opera em todos os núcleos multiplicado pelo número de núcleos que executam o provador. Para um provador single-core, o consumo de tempo de núcleo e a velocidade são a mesma coisa. Para um provador com capacidade multi-core rodando no modo multi-core em um sistema multi-core, o consumo de tempo de núcleo e a velocidade não são a mesma coisa. Se um programa utilizar totalmente 5 núcleos ou threads por 5 segundos, isso seria 25 segundos de tempo do usuário e 5 segundos de tempo de relógio de parede.
Eficiência de espaço: refere-se à capacidade de armazenamento usada, como RAM
O tempo do usuário é interessante como um proxy para a energia consumida pela execução de uma computação. Em uma situação em que todos os núcleos são totalmente utilizados quase o tempo todo, o consumo de energia de uma CPU deve permanecer relativamente constante. Nessa situação, o tempo do usuário gasto por uma execução de código vinculada à CPU, predominantemente no modo de usuário, deve ser aproximadamente linearmente proporcional ao número de watts-hora (ou seja, energia) consumidos por essa execução de código.
Economizar no consumo de energia, ou no uso de recursos computacionais, deve ser interessante do ponto de vista de quaisquer operações de comprovação que tenham escala suficiente para que sua conta de energia (ou sua conta de computação em nuvem) para comprovação seja um custo operacional considerável. Por esses motivos, o tempo do usuário é uma métrica interessante. Os custos mais baixos de comprovação permitem que os prestadores de serviços repassem preços de prova mais baixos para clientes sensíveis aos custos.
Ambos os tipos de eficiência estão relacionados ao consumo de energia do processo de prova e à quantidade de capital utilizado pelo processo de prova, que se relaciona com o custo financeiro da prova. Para operacionalizar a definição de eficiência para medição, a definição deve ser feita em relação a um ou mais programas de teste, uma ou mais entradas de teste para cada um desses programas e um ou mais sistemas de teste.
iii. Sucinta
A sucinta é uma composição de três métricas distintas, com a complexidade da verificação de provas subdividida:
A verificação é tipicamente uma operação de núcleo único, portanto, a velocidade e a eficiência do tempo de núcleo são geralmente equivalentes neste contexto. Assim como a velocidade e a eficiência, operacionalizar a definição de sucção requer a especificação de conjuntos de programas de teste, entradas de teste e sistemas de teste.
Com cada propriedade de desempenho definida, ilustramos agora os efeitos dimunitivos da otimização de uma propriedade sobre as outras.
Em geral, otimizar para uma qualidade significa não otimizar para outra qualidade e, portanto, uma análise multidimensional é necessária para escolher uma solução ideal caso a caso.
Uma boa maneira de ponderar essas propriedades em uma avaliação pode ser definir níveis aceitáveis para cada propriedade e, em seguida, determinar quais propriedades são mais importantes. As propriedades mais importantes devem ser otimizadas, sujeitas a manter níveis suficientemente bons em todas as outras propriedades.
Abaixo resumimos cada imóvel e suas principais considerações:
Propriedades de avaliação de zkVMs
Com a tabela acima, concluímos o primeiro artigo de nossa série. Nos próximos artigos, construiremos o fluxograma mostrado acima para explicar processos aritméticos e criptográficos comuns em zkVMs.
Se você achou isso útil, visite nosso site e gitbook para saber mais sobre o que estamos construindo na Lita.
Além disso, siga-nos no X e no Discord para ficar atualizado para não perder o resto da série