Bem vindo! Novo em Zcash?
A rede Zcash é jovem, mas está evoluindo rapidamente! Cadastre-se e estaremos em contato com mais informações sobre como você pode começar a usar Zcash!

Idioma

Cultivando o Sapling: As novas bases de Crypto

Sean Bowe | Jul 26, 2017

A próxima principal atualização do protocolo Zcash, denominada Sapling, apresentará uma série de melhorias no desempenho, segurança e usabilidade das nossas transações blindadas. Este é o primeiro de uma série de postagens do blog que explorará os progressos realizados no desenvolvimento da Sapling.

BLS12-381: uma nova curva zk-SNARK

O Zk-SNARKs da Zcash atualmente contam com uma construção amigável de curva elíptica Barreto-Naehrig para o emparelhamento implementada dentro do libsnark, que foi projetada por nossos cientistas há muitos anos . Desde então, a otimização de Kim-Barbulescu para o algoritmo de peneira de número de campo reduziu o nível de segurança conjecturado desta curva para cerca de 110 bits, embora a segurança concreta da curva dada pesquisa atual ainda permaneça em torno de 128 bits como originalmente pretendido.

Como uma precaução extra, aproveitamos a oportunidade para atualizar a curva elíptica na atualização Sapling. No início deste ano, eu apresentava uma nova curva chamada BLS12-381. Esta curva visa a segurança de 128 bits usando recomendações mais conservadoras sugeridas por vários trabalhos recentes.

Agora existe, em linguagem Rust, uma implementação desta curva. Ela vem com fortes garantias de segurança de memória, pois não usa nenhum otimização de código ou de montagem não segura{}. Apesar de ser uma curva maior, esta nova implementação é mais eficiente do que a implementação do BN254 que atualmente usamos no Zcash.

Pairing crate benchmarks

As velocidades são especialmente pronunciadas no emparelhamento e: math:mathbb{G}_2 aritmética, o que aumenta o desempenho da prova e verificação do zk-SNARK.

Novo algoritmo de multi-exponenciação

A parte mais cara da criação de uma prova zk-SNARK é a avaliação de grandes polinômios nos grupos de curva elíptica \(\mathbb{G}_1\) e \(\mathbb{G}_2\). Isso é feito com o chamado algoritmo de "multi-exponenciação" que calcula \(\prod_{i=0}^{n}{b_{i}^{s_i}}\) para algum grande número de expoentes \(\Vec{s}\) que residem na memória, e um grande número de bases \(\vec{b}\) que residem no disco dentro da chave provando zk-SNARK.

Atualmente, usamos a implementação do algoritmo Bos-Coster da libsnark. No pior caso, esse algoritmo usa tanta memória quanto o número de bases operadas e, portanto, a única via para diminuir o uso da memória é trabalhar com subconjuntos menores das bases ao mesmo tempo. Por exemplo, Ariel Gabizon implementou esse tipo de otimização em uma mudança para libsnark.

O libsnark implementou recentemente uma variante do algoritmo de Pippenger que divide a multi-exponenciação em regiões bitwise do expoente, acumulando bases em baldes e realizando somas por partes. Este algoritmo não é apenas mais eficiente do que o Bos-Coster, mas é muito conveniente no contexto da prova em fluxo contínuo. Com este algoritmo, podemos evitar carregar a chave de prova na memória antes de construir uma prova, que é uma fonte primária de uso de memória em nosso sistema.

Novo sistema de prova

É claro que a realização de menos multi-exponenciações também seria uma ótima maneira de melhorar o desempenho em tempo de execução. Estamos considerando fortemente o uso de um novo sistema de provas zk-SNARK, descoberto por Jens Groth, para substituir a PGHR (Pinnochio). Este sistema de prova faz suposições criptográficas mais fortes, mas possui provas menores e provas/verificações mais rápidas.

Além disso, o novo sistema de comprovação da Groth nos permite projetar cálculos multi-party mais baratos e outros recursos realmente interessantes sobre os quais falaremos mais em uma futura postagem de blog.

Próximos passos

Embora os esforços acima combinados ofereçam melhorias substanciais ao uso da memória e tempo de prova, reduzir o tamanho do nosso circuito zk-SNARK terá um efeito muito mais notável. Construímos uma série de novas primitivas criptográficas em cima da construção BLS12-381 que nos permitem reduzir o tamanho de nossos circuitos aritméticos, reduzir o tamanho dos endereços Zcash e simplificar o protocolo.

Na nossa próxima postagem no blog, falaremos mais sobre esses primórdios e quanto todas essas melhorias ajudarão o desempenho de nossos zk-SNARKs.

Sapling, zkSNARKs, protocol | Veja todas as tags