Revista Bitcoin
[[alloc] init] lança proposta de Bitcoin protegido para transações privadas de Bitcoin
Bitcoin protegido é uma proposta apresentada pelos pesquisadores [[alloc] init] Clara Shikhelman, Misha Komarov e Aleksei Moskvin para um novo metaprotocolo de privacidade na camada base do Bitcoin para permitir transações protegidas de Bitcoin sem exigir operadores, soft forks ou outras alterações no consenso do Bitcoin. Você pode encontrar o white paper aqui e o anúncio do blog aqui.
O protocolo define uma estrutura transacional e um protocolo de indexação para transações fortes que preservam a privacidade, ao mesmo tempo em que conta com Bitcoin PIPEs para vincular fundos dentro e fora do sistema. Mais sobre o mecanismo PIPEs no final do artigo.
Seu design é um espelho do Bitcoin; existe um equivalente a um UTXO (uma nota), as transações consomem notas como entradas como uma transação normal de Bitcoin, uma testemunha prova que as entradas consumidas estão devidamente autorizadas, os nós (indexadores no caso de um metaprotocolo) analisam o histórico de transações e criam um estado atual de quais moedas são gastas e não gastas, etc.
Todos os detalhes, entretanto, são bem diferentes.
Uma transação Bitcoin protegida é apenas um bloco de dados com um prefixo (algo como “shbtc:”) incluído em uma transação Bitcoin usando OP_RETURN, o campo testemunha ou algum outro método de transporte de dados. Não tem significado para o Bitcoin, a rede Bitcoin não faz nada para verificá-lo ou impor quaisquer regras contra ele. É perfeitamente possível que transações inválidas de Shielded Bitcoin acabem na cadeia, e é trabalho de um Shielded Bitcoin Indexer, que observa passivamente a blockchain, (leia-se: nó) ignorar essas transações quando elas falham na validação e se recusar a aplicá-las para atualizar o estado dos saldos da rede.
Um indexador não exclui notas de um conjunto de notas não gastas como o Bitcoin faz com UTXOs. Ele usa um conjunto anulador. Esta é uma forma de um usuário postar publicamente uma prova criptografada e um anulador de que uma nota foi gasta, sem revelar qual nota foi gasta. A ideia é que, em vez de ver se uma nota está no “conjunto de notas não gastas”, você verifica se um anulador já foi usado. Os indexadores constroem uma árvore merkle que cresce para sempre e só pode ser adicionada a cada saída de nota criada e, em seguida, ao conjunto anulador.
Para usar este protocolo, tudo que você precisa é de um nó Bitcoin e um indexador Bitcoin protegido. Não há necessidade de um prestador de serviços, coordenador ou qualquer estado fora da rede para recuperar fundos. Funciona exatamente como o Bitcoin on-chain, tudo que você precisa é do seu nó/indexador e suas chaves.
Cada carteira de usuário deriva uma chave mestra secreta, a partir da qual todos os outros conjuntos de chaves envolvidos são criados.
Pense nisso de maneira muito semelhante a uma carteira HD em Bitcoin. Você pode gerar muitos conjuntos de endereços com esse relacionamento. Sk_spend é sua chave privada, sk_nf é usado para anular saídas de notas, vk_in é usado para descriptografar e visualizar notas recebidas, vk_out para visualizar suas transações de saída e sk_view é usado para gerar um endereço de recebimento.
Quando um usuário deseja fornecer um endereço a alguém para enviar fundos, ele gera um valor diversificador d semelhante a um valor de derivação e, em seguida, multiplica o valor pela sua chave sk_view. A chave pública resultante, pk_d e d, são o endereço do usuário.
O remetente então gera um valor aleatório, o r_seed, que é necessário para a criptografia da saída da nota, bem como para anular (chegaremos lá em um segundo). As saídas da transação contêm apenas três coisas criptografadas: o valor da saída, o valor d que o destinatário deu ao remetente e o valor r_seed do remetente. O remetente usa um par de chaves secretas efêmeras e a chave pública do destinatário para criar um segredo compartilhado. Ambas as partes podem gerar o mesmo segredo multiplicando a sua chave privada pela chave pública da outra. A saída da nota é criptografada usando esse segredo compartilhado, e o efêmero sk_eph é incluído sem criptografia para que o receptor possa gerar o segredo compartilhado.
No lado da entrada da imagem, duas coisas são necessárias para ter uma transação válida: um anulador público para as saídas de notas consumidas e uma prova de conhecimento zero provando que 1) a saída da nota está incluída na árvore merkle de notas, 2) a transação é autorizada pela chave sk_spend apropriada, 3) o anulador é derivado corretamente e 4) nenhuma inflação ocorreu.
Se você notar na imagem acima, o anulador usa a chave sk_nf, o valor ρ derivado de r_seed e a posição da nota na árvore merkle de saídas de notas. A prova de conhecimento zero garante que tudo isso é o motivo pelo qual você pode simplesmente contar anuladores para repetições em vez de excluir notas gastas. Mesmo que você nunca saiba a qual saída de nota corresponde um anulador, as provas de conhecimento zero em cada transação garantem que cada anulador adicionado ao conjunto veio de uma saída de nota válida. Contanto que você não tenha repetições, ele oferece a mesma garantia de gasto duplo.
Então aí está, o protocolo permite que você basicamente incorpore transações criptografadas de metaprotocolo no blockchain do Bitcoin, mas ainda fornece uma garantia de que nada está sendo gasto duas vezes e que as moedas não estão sendo infladas do nada.
Na verdade, este é um sistema muito bem projetado em termos de propriedades de privacidade e está no mesmo nível de algo como pools protegidos Zcash. Há considerações de privacidade a serem levadas em consideração no momento de entrar e sair do metaprotocolo, e elas serão detalhadas em um próximo lançamento em papel. Não há qualquer preocupação em medir a privacidade ou remixagem periódica como acontece com coinjoins.
Então, o pino. A intenção é construir uma peg usando PIPEs v2, um esquema de criptografia testemunha. PIPEs permitem criptografar uma chave privada com um programa/mecanismo que não divulgará a chave, a menos que você possa fornecer uma prova ZK de que uma determinada condição foi atendida (ou seja, o estado de algum UTXO, que uma transação foi confirmada, etc.). Isso permitiria que uma paridade funcionasse sem um operador, federação ou qualquer terceiro que custódia de fundos.
Isso não requer softforks ou alterações de protocolo no Bitcoin e ocorre totalmente fora da cadeia.
O plano com Shielded Bitcoin, e a próxima parte de seu trabalho, é um mecanismo de indexação que permite aos usuários depositar fundos em Shielded Bitcoin usando chaves PIPEs controladas criptograficamente, que seriam então “desbloqueadas” gerando uma prova ZK de transações legítimas de peg out confirmadas na cadeia.
Atualmente, está em andamento o trabalho no documento que define esse aspecto do sistema e deverá ser lançado em um futuro próximo.