Idioma

Como Gerar Parâmetros Segurança SNARK

Zooko Wilcox | Feb 29, 2016

Há uma série de desafios de criptografia para fazer um sistema financeiro aberto totalmente seguro e confiável.

Nossa prioridade atual no processo de desenvolvimento Zcash é gerar de forma segura "parâmetros públicos SNARK".

Qual é o problema?

A maneira mais simples de gerar "parâmetros públicos SNARK" também produz um tipo de criptografia "lixo tóxico", que faz falsificação da Zcash. Aqui está o nosso plano para evitar a falsificação.

Snarks - uma forma muito eficiente de provas de conhecimento-nulo - é um bloco de construção de criptografia em Zcash. Eles são o que permitem que os mineiros Zcash para validar transações e rejeitar transações inválidas sem revelar qualquer informação confidencial sobre o conteúdo das transações para esses mineiros.

SNARKs exige algo chamado de "parâmetros públicos". Os parâmetros públicos SNARK são números com uma estrutura de criptografia específica que são conhecidas por todos os participantes do sistema. Eles são gravados no protocolo e no software desde o início.

A maneira óbvia para a construção de parâmetros públicos SNARK é apenas para ter alguém para gerar um par de chaves pública/privada, semelhante a um par de chaves ECDSA [*], e depois destruir a chave privada.

O problema é que a chave privada. Qualquer um que recebe uma cópia do mesmo pode usá-lo para dinheiro falso. (No entanto, não pode violar a privacidade de qualquer usuário - a privacidade de transações não está em risco com isso.)

Mitigar esta ameaça é atualmente a nossa prioridade no processo de desenvolvimento da Zcash. Chamamos o material de chave privada "o subproduto resíduos tóxicos" - algo que é produzido como um efeito colateral indesejado da geração parâmetro público, e que precisamos para conter e destruir da forma mais segura possível.

O que podemos fazer sobre isso?

Nós já concebemos uma garantia multipartidária computacional em que com várias pessoas, cada uma gera um "caco" do par de chaves pública/privada, em seguida, cada um deles destrói o seu fragmento da chave privada de resíduos tóxicos, e, em seguida, todos eles reunem seus fragmentos da chave pública para formar os parâmetros públicos SNARK. Se esse processo funciona - ou seja, se pelo menos um dos participantes com sucesso destrói o seu fragmento chave privada - em seguida, o subproduto resíduos tóxicos nunca entra em existência.

Nós escrevmos um artigo sobre o ciência criptográfica por trás desse processo, que apresentamos na conferência IEEE “Oakland” Security and Privacy em 2015.

Nós estamos trabalhando na engenharia e detalhes operacionais de como implementar a computação multipartidárias segura, utilizando um conjunto de conhecidas pessoas, confiáveis para servir como participantes. Também estamos explorando se existem outras aplicações de SNARKs fora da Zcash que têm a mesma necessidade de parâmetros públicos, porque poderia gerar os parâmetros públicos para essas outras aplicações, ao mesmo tempo que fazemos para Zcash.

O que mais podemos fazer?

Então, isso resolveu o problema? Nós pensamos que esta solução é boa o suficiente para avançar. Ele elimina completamente a chave privada de resíduos tóxicos e se funcionar, seria extremamente difícil para qualquer adversário para derrotá-lo.

Infelizmente não há nenhuma maneira de confirmar, após o fato, que ele realmente funcionou. Será sempre possível se preocupar que tudo N de N dos participantes pode ter secretamente conivente em conjunto para partilhar os seus cacos de chave privada, ou que toda N de participantes N podem ter tido seus computadores comprometidos por um adversário que roubou todos os cacos de chave privada.

Por isso, também estamos explorando idéias de longo alcance que - se eles trabalham fora - poderia atenuar este risco e outros riscos como ele.

  • Talvez possamos aproveitar as modernas “Trusted Execution Environments” como a Intel SGX e ARM TrustZone de modo que mesmo se um participante - ou um computador comprometido que o participante está usando - tenta extrair o fragmento da chave privada, que não podem. Talvez pudéssemos fazer com que alguns participantes usam Intel SGX, outros usam ARM TrustZone, e outros usam nenhum dos dois, de modo que mesmo se a Intel SGX e ARM TrustZone foram ambos comprometido, o invasor ainda não conseguem criar o subproduto resíduos tóxicos porque pelo menos um dos outros participantes tenha destruído com sucesso o seu fragmento do mesmo.
  • Talvez poderia haver uma maneira de repetidamente estender os parâmetros públicos SNARK com cacos de chave pública recém-gerados feitas por novos participantes, de modo que um atacante seria um fracasso a menos que eles explorados não só todos os participantes originais, mas assim como todos os novos participantes.
  • Talvez poderia haver uma maneira de auditar o tamanho da base monetária Zcash, sem comprometer a privacidade de todos os usuários. Dessa forma, as pessoas poderiam, pelo menos, dizer: "Bem, não podemos ter 100% de certeza que alguém não roubou a chave privada resíduos tóxicos, mas pelo menos podemos dizer que eles têm (ainda) e não foi usado para dinheiro falso. ".
  • Talvez poderia haver uma nova forma de SNARK que tem parâmetros públicos e alheios a qualquer chave privada resíduos tóxicos. Ninguém sabe ao certo se tal coisa é possível, mas os cientistas, incluindo alguns daqueles da nossa equipe, continuam investigando ativamente os limites do que é possível tipos de sistemas de prova.

Moral da História

Há um tipo de "lixo tóxico de criptografia", que se fosse para ser criado e explorado, seria para permitir que o atacante de moeda falsificada (embora não lhes permitiria violar a privacidade de ninguém). Nosso plano para evitar isso, utiliza o seguro multipartidária computacional em que um conjunto de pessoas conhecidas contribuiem, de tal forma que, se qualquer um deles destrói com sucesso seu fragmento, em seguida, o lixo tóxico criptográfico nunca pode entrar em existência. Também estamos trabalhando em outras potenciais defesas de longo prazo contra os riscos como este.

[*]Eu estou simplificando aqui. Parâmetros Públicos SNARK não são apenas uma chave pública ECDSA - eles são mais como um conjunto de um milhão de chaves ECDSA públicas, cada uma das quais contém uma codificação de um fio específico no circuito de SNARK. Mas isso não importa para o ponto deste post.