Investigando o cenário quanto à Privacidade
Neste artigo discutirei minhas opiniões sobre a tecnologia de privacidade existente em uso no criptoespaço. Como vários projetos têm foco principal em privacidade, explicarei as várias tecnologias de privacidade, o que ajudará a entender o rumo que o Decred tomou e que defendo que continue tomando. Um segundo artigo trará mais detalhes sobre como o Decred planeja abordar a privacidade. Os projetos que abordarei aqui são:
- Monero
- Zcash
- Grin/Beam
- Bitcoin
- Dash
Repare que eu irei discutir apenas as tecnologias de privacidade on-chain usadas em cada um desses casos, não todo o projeto. No final do artigo, montei uma tabela comparando os vários projetos e tecnologias que eles usam.
Motivação
O Decred focou principalmente em governança desde o seu lançamento em fevereiro de 2016, mas depois de fazer progressos significativos na área de governança, chegou a hora de começar a adicionar recursos de privacidade.
Embora a privacidade seja certamente um subdomínio separado da governança dentro do criptoespaço, a privacidade se conecta muito diretamente aos princípios centrais do Decred: Segurança, Adaptabilidade e Sustentabilidade.
Ao dar aos nossos usuários mais privacidade, aprimoramos a segurança financeira deles e do projeto. Recursos adicionais de privacidade podem ser adicionados com o consentimento de nossas partes interessadas de maneira incremental, permitindo que o Decred se adapte a um cenário tecnológico em constante mudança conforme necessário. Dar aos nossos usuários privacidade também torna o projeto substancialmente mais resiliente contra os agentes maliciosos, ampliando sua sustentabilidade a longo prazo.
Contexto
Toda a tecnologia existente de privacidade para criptomoedas pode ser reduzida a “truques matemáticos”. Explicando melhor, existem vários subdomínios da matemática dedicados a compreender como provar eficientemente certas afirmações, enquanto ofusca grande parte dos dados usados para provar tal afirmação. Várias técnicas desses subdomínios foram cuidadosamente aplicadas à tecnologia blockchain para criar os sistemas em produção hoje. Vou discutir essas técnicas, suas aplicações, suas restrições e suas falhas.
Monero
A privacidade do Monero faz uso de uma combinação de tecnologias, ring signatures (assinaturas em anel) e confidential transactions (transações confidenciais), que eles chamam de RingCT. A combinação dessas técnicas cria fortes garantias de privacidade, com algumas ressalvas. O RingCT é necessário para todas as transações na rede Monero.
Ring Signatures
Ring signatures (assinaturas em anel) foram a base do protocolo CryptoNote que gerou a Bytecoin e o Monero. A principal utilidade das ring signatures é que elas evitam que os adversários passivos rastreiem a origem das transações criando uma negação plausível sobre as saídas de transação não gastas (“UTXOs” – unspent transaction outputs) usadas para financiar a transação, por exemplo, uma transação típica mostrará 11 conjuntos de UTXOs de entrada, mas apenas um desses conjuntos contém os UTXOs de entrada reais.
As ring signatures permitem que um observador externo verifique se as assinaturas são de um dos conjuntos de UTXOs, mas não de qual conjunto. Atualmente, o Monero usa assinaturas de grupos anônimos espontâneos multicamadas (“MLSAG” – multilayered linkable spontaneous anonymous group), e eles provavelmente atualizarão isso para uma nova versão mais compacta, chamada “CLSAG”, em um futuro próximo.
Ring signatures adotam uma abordagem muito restrita para lidar com o rastreamento de transações na blockchain. Ofuscando quais entradas são usadas em uma determinada transação e a assinatura para essas entradas, a capacidade de vincular deterministicamente as transações é interrompida.
Ring signatures fazem exatamente o que precisam fazer e nada mais. A matemática e o código envolvidos são de complexidade moderada, usam primitivos simples e precisam de algumas milhares de linhas de código-fonte. O tamanho das assinaturas escala linearmente no número de entradas para assinaturas MLSAG e logaritmicamente para CLSAG. As ring signatures, juntamente com o restante da criptografia de curva elíptica (“ECC” – elliptical curve cryptography), dependem do problema do logaritmo discreto (“DLP” – discrete logarithm problem) ser difícil, ou seja, insolúvel no momento atual e se o DLP for solucionado, as ring signatures podem ser desfeitas para revelar o remetente real. Uma desvantagem notável das ring signatures é que não é possível limpar (prune) a blockchain ou criar um snapshot do conjunto UTXO porque não é possível determinar quais saídas de transação são gastas e quais não são. Isso se reflete em trabalhos recentes para que cada full node armazene apenas 1/8 de todas as transações históricas.
Confidential Transactions
Confidential transactions (“CT”) foram propostas por Greg Maxwell como um método para ofuscar as quantias usadas nas transações de Bitcoin. Isso é obtido usando os compromissos de Pedersen (saiba mais em commitment scheme), verificando a soma dos compromissos como zero e incluindo as provas de que cada compromisso de saída corresponde a um valor positivo. As provas de alcance são provas de zero conhecimento de baixa complexidade (“ZKP”). No contexto do RingCT, uma modificação adicional deve ser feita para manter a não rastreabilidade do remetente, mas essa modificação, que envolve compromissos somados a um escalar diferente de zero, não é relevante para o entendimento das propriedades do CT.
A primeira implementação de CT do Monero foi baseada no trabalho original de Maxwell, mas recentemente eles fizeram uma implementação significativamente mais eficiente, chamada Bulletproofs, proposta por Bünz et al. O uso de Bulletproofs reduz substancialmente o tamanho e melhora o dimensionamento das provas de alcance.
A CT é semelhante às ring signatures, já que é uma abordagem restrita para lidar com o ofuscamento das quantias da transação.
Quando o Monero foi lançado, o projeto implementou o protocolo CryptoNote, que não incluía a ofuscação da quantia da transação, de modo que as transações tinham quantias com denominações fixas que podiam ser analisadas por observadores passivos. A CT adicionou ofuscação às quantias que faltavam no Monero, o que melhorou substancialmente sua privacidade.
Como nas ring signatures, a segurança do CT depende do DLP ser de difícil solução, o que é esperado porque depende da ECC (criptografia de curvas elípticas). Ao contrário das ring signatures, a CT não pode ser desfeita pela solução do DLP porque os compromissos de Pedersen são um esquema de ocultação perfeita e computacionalmente vinculativo. A propriedade de ocultação perfeita significa que um conjunto de muitos pontos, uma quantia e um fator de ocultação neste caso, mapeiam para o mesmo compromisso, portanto, mesmo se você puder solucionar o DLP, não será possível determinar qual par de pontos foi mapeado para esse compromisso.
Ligação computacional indica que um adversário que pode solucionar o DLP pode gerar quantias e fatores de ocultação que mapeiam para um determinado compromisso, mas que não correspondem ao valor de entrada e ao fator de ocultação. Embora os compromissos perfeitamente ocultos sejam ótimos para a privacidade, mesmo no caso de um adversário poder solucionar o DLP, eles também são necessariamente arriscados, pois um adversário que pode solucionar o DLP pode criar uma inflação oculta, devido a compromissos que envolvem apenas recursos computacionais.
A matemática na proposta original de CT de Maxwell é de complexidade moderada, mas os Bulletproofs são mais eficientes em termos de espaço e de complexidade moderada a alta. O código-fonte para implementar Bulletproofs tem algumas milhares de linhas de código, utiliza primitivos diretos e sintetiza esses primitivos de maneira inovadora.
Zcash
A privacidade do Zcash usa ZKPs para ofuscar o remetente e a quantia das transações. O tipo específico de ZKP utilizado é um argumento não interativo sucinto de conhecimento zero, chamado zk-SNARK. Esse sistema garante uma opacidade substancial e exige que os usuários optem por usá-lo. Há transações transparentes e blindadas na rede Zcash, onde transações blindadas são aquelas protegidas por zk-SNARKs. A partir do segundo trimestre de 2018, aproximadamente 3,6% de todo o ZEC foi armazenado em endereços blindados.
zk-SNARKs
O uso de zk-SNARKs no contexto de criptomoedas foi proposto no artigo Zerocash por Ben-Sasson et al em 2014, e esse artigo foi a base para o Zcash. zk-SNARKs permitem a criação de transações sucintas que têm suas entradas, quantias e destinatários completamente ofuscados.
A ofuscação dos dados da transação é obtida pela construção de circuitos aritméticos que podem ser eficientemente verificados por terceiros sem ver os dados da transação, e esses circuitos são os payloads das transações blindadas. As entradas das transações totalmente blindadas são efetivamente indistinguíveis umas das outras, o que significa que o anonimato definido para uma transação específica é todo o segmento blindado do conjunto UTXO.
Os zk-SNARKs são uma ferramenta incrivelmente ampla que pode ser usada em uma variedade de problemas, por exemplo, controle de acesso, sistemas de votação e manutenção de registros genéricos.
Embora os zk-SNARKs sejam uma ferramenta muito poderosa que pode ser aplicada em uma grande variedade de cenários, ela tem um custo substancial em termos de complexidade. A matemática que suporta zk-SNARKs tem alta complexidade e requer o uso de primitivos menos comuns. Para criar um zk-SNARK no Zcash, é necessário levar a informação da transação e “compilá-la” em um circuito aritmético, que é computacionalmente intensivo e requer algumas dezenas de milhares de linhas de código.
Além da quantidade de código que está sendo usada para criar o circuito, esse código requer uma quantidade não-trivial de conhecimento nesse domínio para auditar com eficácia. Uma restrição mais concreta do zk-SNARKs é que eles exigem uma fase de configuração confiável para gerar os parâmetros para a rede e, se as informações da fase de configuração confiável forem comprometidas por um ator mal-intencionado, esse ator pode falsificar moedas enquanto deixa as transações protegidas existentes inalteradas. Um adversário que solucione o DLP tem um poder semelhante para forjar moedas, mas só pode exibir quantias das transações e memos, não os remetentes e destinatários. Devido à opacidade das transações protegidas, a limpeza (pruning) só pode funcionar no segmento transparente da chain do Zcash.
Grin/Beam
Tanto Grin quanto Beam implementam o sistema proposto no artigo Mimblewimble (“MW”) de Tom Elvis Jedusor de julho de 2016. A abordagem MW para a privacidade é reestruturar as transações na blockchain de forma que elas possam ser agregadas em blocos, ofuscando os remetentes e destinatários dentro cada bloco, enquanto as quantias são ofuscadas usando CT. A privacidade do MW se aplica a todas as transações.
Transaction aggregation
O artigo da MW propõe a reestruturação de transações da blockchain, de modo que transações inteiras possam ser combinadas diretamente. Essa capacidade de agregar baseia-se em alterar substancialmente a maneira como as transações são assinadas e, em seguida, usar o fato de que as assinaturas podem ser adicionadas para obter uma assinatura válida na transação agregada.
Os blocos minerados usando esse sistema consistem em uma única grande transação agregada, com suas quantias ofuscadas. Qualquer adversário que tente analisar historicamente tal blockchain só poderá observar as grandes transações agregadas que compõem cada bloco, que fornecem uma negação plausível em relação aos remetentes e destinatários.
Transaction aggregation (agregação de transações) faz uso de uma ferramenta ECC (criptografia de curvas elípticas) comum, a signature aggregation (agregação de assinaturas), de uma maneira nova, por isso é uma ferramenta ampla que está sendo aplicada de forma bastante restrita. A matemática por trás da signature aggregation é muito direta e usada extensivamente com ring signatures e CT.
O algoritmo de assinatura e o código para agregar transações é de algumas milhares de linhas ou menos e usa primitivos comuns. Apesar do utilitário derivado da transaction aggregation, as modificações no algoritmo de assinatura, a incapacidade de usar scripts de transação e as mudanças no processo de criação de transação são substanciais, então é improvável que elas sejam integradas a outras blockchains baseadas em Bitcoin.
Depois que os blocos são minerados, as transações incluídas foram agregadas, mas antes de serem mineradas, os mineradores e outros nodes da rede podem ver as transações individuais que foram publicadas antes de serem agregadas. Um adversário que monitore de perto as transações que estão sendo publicadas na rede poderia usar essas informações para vincular transações que não podem ser vinculadas olhando para os blocos minerados. Como o MW usa CT diretamente, um adversário que solucione o DLP poderia forjar moedas em silêncio, mas não desfazer agregações anteriores nem revelar quantias.
Um benefício adicional do uso do MW é que ele é construído para limpeza (pruning) com muita facilidade, reduzindo substancialmente o espaço de armazenamento dos full nodes.
Bitcoin
O Bitcoin não implementa nenhum recurso considerável de privacidade no Bitcoin Core além de permitir selecionar manualmente os UTXOs de entrada, mas uma carteira alternativa do Bitcoin, a Wasabi Wallet, implementa recursos de privacidade.
A Wasabi Wallet faz uso do processo Chaumian CoinJoin para privacidade. A privacidade com o Bitcoin requer que os usuários optem por participar.
Chaumian CoinJoin
Através da aplicação de blind signatures (assinaturas cegas), Chaumian CoinJoin cria uma negação plausível em relação à posse de moedas mistas. O processo CoinJoin envolve um servidor que mescla várias transações em uma única transação, dando alguma privacidade on-chain aos participantes, mas o servidor pode ver onde os fundos se originam e para onde foram enviados.
Ao usar blind signatures é possível ofuscar quais saídas estão relacionadas a qual conjunto de entradas, evitando que o servidor relacione entradas a saídas. Esse processo de mixagem ocorre episodicamente, desencadeado por um temporizador ou por um limite de participação.
O uso de blind signatures (assinaturas cegas) para o processo CoinJoin é uma aplicação restrita de uma técnica criptográfica simples. A matemática por trás das blind signatures é de baixa complexidade e bem estudada, exigindo algumas centenas de linhas de código ou menos para serem implementadas.
Para garantir que os resultados sejam indistinguíveis, várias denominações de saída são usadas. Como a ofuscação da quantia não é suportada no Bitcoin, a análise passiva pode ser usada para vincular entradas e saídas por meio de somas parciais, o que leva à necessidade de lidar com troco com cuidado.
A privacidade obtida com o uso do processo de blind signatures depende da capacidade de se conectar ao servidor pelo menos 3 vezes para cada mix através de diferentes caminhos de rede, que usam o suporte Tor integrado na Wasabi Wallet. Embora o Tor forneça uma quantidade decente de privacidade de rede, o Tor não foi projetado para impedir um adversário passivo global, por exemplo, a NSA, então o ganho de privacidade depende de quem são seus adversários.
Um adversário que soluciona o DLP pode personificar o servidor, forjar endereços de saída assinados, roubar UTXOs de entrada, desanonimizar mixes do ponto em que inicia o ataque em diante e forçar o servidor a interromper a operação, mas esse adversário não pode desanonimizar mixes anteriores. Chaumian CoinJoin não causa problemas com pruning.
Dash
A Dash implementou em 2014 um recurso de privacidade na sua carteira Core, chamado PrivateSend. O PrivateSend é um processo CoinJoin distribuído que usa várias rodadas de mixagem. A privacidade com o Dash é um processo opcional (os usuários optam por utilizar).
PrivateSend
O processo CoinJoin já foi abordado na seção sobre Bitcoin, mas um processo similar é usado no Dash. O processo PrivateSend CoinJoin envolve masternodes que mesclam várias transações em uma única transação, dando alguma privacidade on-chain aos participantes, mas o masternode que executa uma CoinJoin pode ver onde os fundos foram originados e para onde foram enviados. Os usuários podem especificar de 4 a 16 rodadas dessa mixagem, para aumentar o tamanho do conjunto de anonimato.
O PrivateSend é uma versão menos privada do Chaumian CoinJoin, embora com rodadas adicionais de mixagem. O CoinJoin distribuído é uma ferramenta muito restrita, destinada a ofuscar a origem das moedas on-chain, mas não a ofuscar os remetentes e destinatários da visualização pelos masternodesque executam cada CoinJoin. O algoritmo para o CoinJoin é simples, de baixa complexidade e pode ser implementado em algumas centenas de linhas de código. É difícil estimar quanto anonimato é obtido pelo processo PrivateSend, pois tem havido alegações de que alguns grandes participantes do mix para esse processo poderiam efetivamente desanonimizar as CoinJoins. No caso de um adversário solucionar o DLP, ele poderia se fazer passar por masternodes à sua escolha, potencialmente desanonimizando CoinJoins desse ponto em diante, mas isso manteria CoinJoins concluídas anteriormente não afetadas.
Conclusão
Como é fácil se perder nos detalhes, uma tabela comparando os recursos de privacidade desses projetos é mostrada abaixo. Depois de abordar os recursos de privacidade de vários outros grandes projetos de criptomoeda, agora você está apto a entender a abordagem única do Decred, que será descrita no próximo artigo.
Escrito em 21.08.2019 por Jake Yocom-Piatt, Decred Project Lead, Traduzido por Marcelo Martins Cybersecurity specialist. Hacking, teaching, breaking stuff.
Saiba mais em Investigando o cenário quanto à Privacidade