Zcash – Wikipédia, a enciclopédia livre

Logo da Zcash

Zcash é uma criptomoeda voltada ao uso de criptografia para prover uma melhoria em privacidade quando comparada a outras criptomoedas como o Bitcoin. O protocolo Zerocoin foi melhorado e transformado no sistema Zerocash, e finalmente na criptomoeda Zcash em 2016. O desenvolvimento de melhorias no protocolo e a referência de implementação é liderada pelo Zerocoin Electric Coin Company, coloquialmente conhecida como Zcash Company.[1] O fundador e CEO da Zcash Company é Zooko Wilcox-O'Hearn. A sua equipe de fundadores incluem o criptógrafo Matthew D. Green da Universidade Johns Hopkins. Roger Ver foi um dos investidores iniciais da Zcash Company.

Detalhes[editar | editar código-fonte]

Pagamentos em Zcash são publicados em um blockchain público, mas os usuários são capazes de usar um recurso opcional de privacidade para ocultar o remetente, o destinatário e a quantia que está sendo transacionada.[2] Como o Bitcoin, Zcash tem uma quantidade total fixa de 21 milhões de unidades.[3] Nos primeiros quatro anos, 20% das moedas criadas nesse período são alocadas em uma "recompensa para fundadores" divididas entre investidores, desenvolvedores, e uma fundação sem fins lucrativos.[4]

As transações podem ser "transparentes" e similares a transações bitcoin no caso em que são controlados por uma t-addr (endereço transparente), ou podem ser um tipo de prova de conhecimento nulo chamados zk-SNARKs; nesse caso as transações são ditas como "blindadas"e são controladas por um z-addr (endereço blindado). As moedas de Zcash estão ou em um conjunto transparente ou em um conjunto blindado; Em dezembro de 2017, apenas cerca de 4% das moedas Zcash estavam no conjunto blindado e nesse momento a maior parte dos programas de carteiras não dava suporte para os z-addrs e nenhuma carteira baseada na web oferecia suporte.[5]

Zcash proporciona aqueles que optam por transações privadas a opção de "divulgação seletiva", permitindo a um usuário comprovar o pagamento para fins de auditoria. Um motivo para permitir isso é oferecer a escolha ao cumprimento de regras de impostos e contra lavagem de dinheiro. "As transações são auditáveis, mas a divulgação está sob o controle do participante."[6] Wilcox foi palco de reuniões virtuais com agências de lei nos EUA para explicar esses princípios fundamentais e ficou registrado que eles dizem que "eles não desenvolveram a moeda para facilitar atividades ilegais".

Transações[7][8][editar | editar código-fonte]

Pagamentos em Zcash são publicados em um blockchain público. Entretanto, os usuários podem escolher o grau de privacidade dos valores transferidos, que podem ser de dois tipos:[2]

  • Transação de valores transparentes são análogos a transação de valores de bitcoins, mantendo o valor transferido, remetente e destinatários públicos; são referenciados por t-addrs (endereços transparentes);
  • Transação de valores blindadas são acompanhados por paying keys e armazenadas como tuplas denominadas notes; payment keys são chaves públicas associadas à chave pública do destinatário e exigem o conhecimento de spending keys para gastar o valor transferido; são referenciadas por z-addrs (endereços blindados).

Uma transação em si é representada por JoinSplits Descriptions, que descrevem um JoinSplit Transfer e um tipo de prova de conhecimento nulo (zk-SNARKs), que garante a privacidade do remetente, destinatário e valor transferido. Um JoinSplit Transfer, por sua vez, recebe como entrada um valor transparente e até dois blindados e produz saídas do mesmo tipo.

Zcash ainda proporciona àqueles que optam por transações privadas a opção de "divulgação seletiva", permitindo a um usuário comprovar um pagamento para fins de auditoria. Um motivo para essa permissão é oferecer a escolha ao cumprimento de regras de impostos e contra lavagem de dinheiro. "As transações são auditáveis, mas a divulgação está sob o controle do participante."[6] Wilcox foi palco de reuniões virtuais com agências de lei nos EUA para explicar esses princípios fundamentais e ficou registrado que "eles não desenvolveram a moeda para facilitar atividades ilegais". Em dezembro de 2017, apenas cerca de 4% das moedas Zcash estavam no conjunto blindado e a maior parte dos programas de carteiras não dava suporte a z-addrs.[5]

Gasto de transações blindadas[editar | editar código-fonte]

Ao gerar o note de uma transação blindada em Zcash, um commitment é criado e seu hash é adicionado a uma lista contendo o hash de todos os outros commitments conhecidos (uma cópia desta lista é armazenada em cada nó da rede).

Quando um note é gasto, cria-se um valor que representa tal operação, denominado nullifier, e seu hash é adicionado a outra lista (também com cópia em todos os nós da rede). O conteúdo de um nullifier é derivado de um commitment a partir de seu spending key. O armazenamento como hash evita a possibilidade de se linkar commitments a nullifiers, garantindo a privacidade do output da transação.

Ao realizar uma transação blindada, deve-se então revelar o nullifier de cada valor blindado enviado e o commitment de cada valor blindado recebido. A transação só se completa se não houver colisão de hashes.

zk-SNARK[9][editar | editar código-fonte]

A blindagem de uma transação no Zcash consiste na formulação de um zk-SNARK que permite verificar, com alta probabilidade, a validade das seguintes premissas:

  • a soma dos valores de entrada condiz com a soma dos valores de saída;
  • o commitment de cada note de entrada existe na lista de commitments;
  • o spending key de cada note de entrada é conhecido pelo remetente;
  • os nullifiers revelados condizem com os notes de entrada;
  • os spending keys de cada note de entrada foram criptograficamente ligados a uma assinatura da transação de modo que esta não possam ser modificada por alguém que não os conheça;
  • cada note de saída foi gerado de modo que seus nullifiers não colidam com os de outros notes.

A adição de zk-SNARKs à blindagem de transações facilita a validação mas retarda a construção do bloco, uma vez que a formulação dos parâmetros de uma prova é custosa (pode levar até 40 segundos) mas facilmente verificável (não toma mais que alguns milissegundos). A validação é modelada como equações algébricas cujas soluções equivalem ao conhecimento da chave privada, da seguinte maneira:

Computação→ Circuito Aritmético→ R1CS → QAP → zk-SNARK

  • Um programa que verifica as premissas acima é convertido para um circuito aritmético: uma equação matemática que representa toda a computação feita em tal validação;
  • As saídas de cada porta do circuito são modeladas como R1CS (Rank 1 Constraint System), i.e., uma equação de matrizes cujas linhas representam portas do circuito e colunas representam variáveis:
    O vetor equivale à solução em cada porta do circuito;
  • O R1CS é modelado como um QAP (Quadratic Arithmetic Program): conjunto de polinômios cuja solução do produto equivale à solução do R1CS;
  • Um zk-SNARK verifica o conhecimento de uma solução para o produto de polinômios e valida a transação.

Atualização da rede[editar | editar código-fonte]

A primeira atualização da rede de Zcash será feita através de um hard fork no número de bloco 347500[10] , que está previsto para ser no dia 25 de junho de 2018. Um novo recurso vai ser introduzido, que permitirá que os usuários configurem tempos de expiração para transações.[11] Cinco pospostas para melhoria do Zcash, nominalmente as 143, 200, 201, 203 serão implementadas[12]. Esta atualização também melhorou a verificação de assinatura, que ajuda a melhorar a velocidade das transações.

Ver também[editar | editar código-fonte]

Referências[editar | editar código-fonte]

  1. «THE ZEROCOIN ELECTRIC COIN COMPANY LLC» 
  2. a b «Snowden: Anonymous 'Zcash' Could Solve Bitcoin Surveillance Risks» 
  3. «Zcash, a Harder-to-Trace Virtual Currency, Generates Price Frenzy» 
  4. «Cypherpunk Desert Bus: My Role In The 2016 Zcash Trusted Setup Ceremony» 
  5. a b arXiv:1712.01210Acessível livremente  |nome1= sem |sobrenome1= em Authors list (ajuda); Em falta ou vazio |título= (ajuda)|nome1= sem |sobrenome1= em Authors list (ajuda); Em falta ou vazio |título= (ajuda)
  6. a b «How Zcash Tries to Balance Privacy, Transparency in Blockchain» (em inglês) 
  7. «Anatomy of A Zcash Transaction – Zcash Blog» Verifique valor |url= (ajuda). Zcash Blog (em inglês). 23 de novembro de 2016 
  8. «zcash/zips» (PDF). GitHub (em inglês). Consultado em 26 de junho de 2018 
  9. Buterin, Vitalik (12 de dezembro de 2016). «Quadratic Arithmetic Programs: from Zero to Hero». Vitalik Buterin. Consultado em 26 de junho de 2018 
  10. «Zcash - Overwinter Network Upgrade» Verifique valor |url= (ajuda). z.cash (em inglês) 
  11. «Overwinter – A Zcash network upgrade». eCoin4Dummies.com 
  12. «zcash/zips». GitHub (em inglês) 

Ligações externas[editar | editar código-fonte]