Bem vindo! Novo em Zcash?
The Zcash network is young, but evolving quickly! Sign up and we'll be in touch with monthly highlights on ecosystem growth, network development and how to get started with Zcash!

Idioma

Determinístico constrói em Zcash

Kevin Gallagher | Oct 17, 2016

Como Mike Perry do Projeto Tor escreveu em 2013, enquanto as revelações Snowden estavam em curso, um dos mais temido cenários é o chamado ataque "bebedouro", onde um adversário ou malware "ataques do desenvolvimento de software e construir-se processos para distribuir cópias de si mesmo a dezenas ou mesmo centenas de milhões de máquinas em um único, oficialmente assinado, atualização instantânea."

Embora o mundo não tem testemunhado muitos desses ataques, no entanto, o blockchain Zcash e sua base de usuários pode ser considerado um dos principais alvos, tanto uma vez que pode ter interesse em manter o controle sobre sua própria privacidade, e porque se espera que a ZEC irá adquirir bens reais de valor monetário.

Estamos interessados em apresentar comprovadamente um seguro e confiável software para o mundo, como demonstrado pelos várias auditorias que já encomendados. Assim, para a nossa versão 1.0.0 RC, começamos a seguir um processo de construção determinista, cortesia de Gitian.

Gitian é um método de distribuição de software seguro, que permite que vários desenvolvedores criem binários idênticos. Ela foi originalmente desenvolvida pelo Bitcoin Core, e foi posteriormente adaptado para uso do Projeto Tor. assinaturas criptográficos e hash são aproveitados de modo a assegurar que o conjunto de ferramentas não foi adulterada e da mesma fonte oficial, foi usado para fazer os binários que são eventualmente lançados.

Como isso funciona

Em Gitian, você tem uma lista contendo um número de entradas, que todos têm hashes que lhes estão associados. Estes são o código-fonte da Zcash, suas dependências de terceiros, e os pacotes do sistema operacional. Há também saídas óbvias: os binários Zcash, que em breve estarão disponíveis através de um repositório de pacotes apt pública para distribuições baseadas em Debian. Para cada lançamento, temos várias pessoas do nosso projeto para construir os binários dentro de um ambiente fechado, e depois assinam os resultados com sua chave GPG, atestando as entradas que eles utilizaram e os resultados que foram gerados. O manifesto de hashes e assinaturas correspondentes é então publicada no GitHub e comparados com os outros. Se houver alguma diferença presente, então vamos estar ciente de que as entradas tenham sido modificado de alguma forma, seja de forma maliciosa ou não.

Nós nunca iremos lançar um binário que não foi construído de forma determinística. Estamos também arquitetamos um regime de segurança sofisticado torno para proteger a chave principal de assinatura usado para verificar downloads a partir de nossas origens.

A fonte mais comum de indeterminismo no software são os timestamps. Portanto, durante todo este processo, data e hora e outros metadados ou são retiradas de arquivos, ou vários invólucros são usados para fazer timestamps correspondem a uma data e hora de referência. Isso geralmente resulta em uma compilação que é reproduzível por qualquer pessoa.

A título de ilustração, quando começamos a usar Gitian, nós descobrimos uma única fonte de irreprodutibilidade para libsnark, a biblioteca que usamos para provar conhecimento-nulo. Dois dos nossos colaboradores compararam seus resultados e encontrou uma incompatibilidade:

::
- 1edeaed33a85eef3e190160e781d3b0cc6e389eda53c382ccc555241fa0e1e51 x86_64-unknown-linux-gnu/libsnark/libsnark-0.1-a97aa3c0de8.tar.gz + cec7ca83f5767d8553891906953ffbe38935ecbc379971b6cb7e449467495c00 x86_64-unknown-linux-gnu/libsnark/libsnark-0.1-a97aa3c0de8.tar.gz

Analisando em detalhes o diff, descobrimos diferentes formatos binários da biblioteca. Usando uma ferramenta chamada diffoscope, descobrimos que havia marcas de tempo codificadas no binário:

::
$ diffoscope libsnark-0.1-a97aa3c0de8.tar.gz libsnark-0.1-a97aa3c0de8.tar.gz.2 --- libsnark-0.1-a97aa3c0de8.tar.gz +++ libsnark-0.1-a97aa3c0de8.tar.gz.2 ├── libsnark-0.1-a97aa3c0de8.tar │ ├── ./lib/libsnark.a │ │ │ @@ -51,16 +51,16 @@ │ │ │ - [ 74] 21:08:27 │ │ │ - [ 7d] Oct 15 2016 │ │ │ + [ 74] 03:30:18 │ │ │ + [ 7d] Oct 16 2016 │ │ ╵ │ ╵

Nós rapidamente rastreamos essa função, que imprime a data e a hora da compilação , e desenvolvemos uma correção.

Pensamos que ter construção determinista é um marco emocionante para Zcash, e incentivamos outros projetos de código aberto para seguir o exemplo.

Detalhes Técnicos

O ambiente Zcash de construção determinista, que roda no Debian 8, é uma máquina virtual criada com Vagrant, aproveitando VirtualBox para virtualização. Ele roda gitian-builder e containers Linux (LXC) como convidados.

Ansible, é uma ferramenta de gerenciamento de configuração baseada em Python, é usado para provisionar o ambiente inicial. O script que interage com gitian-builder, ele próprio uma ferramenta baseada em Ruby, é escrito em Bash. Grande parte do nosso ferramental empresta a partir do excelente trabalho já realizado pelo Bitcoin Core, mas temos automatizado muitos dos passos necessários para iniciar o sistema.

Agradecemos à qualquer um que é tecnicamente inclinados e entusiasmados com Zcash para nos ajudar a produzir mais builds. Se você estiver interessado, contate-nos em nossa comunidade Slack canal #zcash-dev.