No contexto deste artigo, tentamos responder à pergunta sobre o que é confidencialidade e como isso pode ser alcançado no Bitcoin e em outras moedas digitais. Além disso, aqui você aprenderá sobre mecanismos específicos para obter confidencialidade e como eles são aplicados na prática. O tópico será interessante para quem trabalha diretamente com criptomoedas, bem como para os amantes de protocolos que aumentam o nível de privacidade do usuário.
Vamos definir os termos
O tópico confidencialidade (privacidade) e como garantir que seja bastante volumoso. É melhor começar a estudá-lo com um entendimento das definições básicas.
O conceito de privacidade inclui dois componentes principais: rastreabilidade e anonimato. Não rastreabilidade, ou rastreabilidade, implica a incapacidade de atribuir um grupo de atividades a algum usuário na rede. O anonimato, ou anonimato, está associado à incapacidade de estabelecer com segurança a identidade de um usuário nesta rede.
Privacidade padrão do Bitcoin
O Bitcoin tem a propriedade de anonimato, mas é muito fácil perder na prática. A propriedade de rastreabilidade não é totalmente alcançada. Podemos analisar o gráfico da transação e concluir que eles estão envolvidos em determinadas carteiras anônimas. Se pelo menos um endereço foi comprometido no contexto do anonimato, o envolvimento em certos indivíduos pode ser estabelecido. A implementação mais simples de uma carteira de bitcoin é capaz de fornecer apenas um nível mínimo de privacidade.
Por exemplo, para cada pagamento recebido ou alteração, o usuário cria um novo endereço. O auditor que analisa o gráfico de transações, nesse caso, não pode mais relacionar com confiabilidade fatos específicos relacionados às ações do usuário e à distribuição de moeda entre eles. Mas mesmo nessa situação, a privacidade não é tão confiável quanto pode parecer.
Geralmente na rede Bitcoin, sua privacidade depende dos contra-agentes. Quem aceita o pagamento conhece a história da origem das moedas e quem as envia sabe para onde as envia. Além disso, há uma série de metadados que podem estar disponíveis para pessoas de fora: a natureza da transação, dados sobre a carteira, dados sobre a localização do usuário, etc.
Que tipo de dados de transação devem ser ocultados antes de tudo, a fim de garantir o nível máximo de confidencialidade? Isso inclui dados sobre a origem das moedas, que se relacionam à propriedade de permutabilidade ou fungibilidade. É muito importante para qualquer dinheiro e objetos de valor. No nível do protocolo Bitcoin, essa propriedade é fornecida (todas as moedas são iguais e as regras para processá-las são comuns a todos), mas na prática a fungibilidade é fácil de quebrar. Por exemplo, alguns comerciantes podem analisar o histórico da origem das moedas aceitas e recusar pagamentos se isso lhes causar dúvidas.
A próxima coisa que faz sentido ocultar é a soma das transferências, os endereços do remetente e do destinatário no corpo da transação. Também é importante ocultar os endereços de rede dos usuários, o que geralmente é alcançado usando o darknet, onde são utilizados protocolos como Freenet, TOR e I2P. Como ocultar os valores, histórico e endereços?
Coinjoin
O método mais simples para ofuscar um gráfico de transação é chamado CoinJoin. Vamos começar com ele. Sua essência é criar uma transação conjunta, como resultado da qual a origem das moedas enviadas se torna ambígua. Um grupo é formado por usuários que criam uma transação comum, dentro da qual vários pagamentos são feitos simultaneamente. Ou seja, os usuários não precisam criar transações separadas.
Gregory Maxwell propôs essa idéia pela primeira vez em 2013 no popular fórum BitcoinTalk. Desde então, muitas modificações deste método foram propostas e desenvolvidas. Cada um deles melhorou certas propriedades dos pagamentos. Vamos falar sobre como o CoinJoin funciona em sua forma pura e, depois disso, veremos algumas de suas modificações mais interessantes.
Como funciona o CoinJoin
Imagine um grupo de três usuários em que todos desejam comprar mercadorias em uma loja online (ao mesmo tempo, cada um tem sua própria loja).

Eles criam uma transação para três entradas, uma de cada usuário, três saídas, uma para cada loja online. Além disso, existem mais três saídas para alteração. Além disso, todas as saídas são aleatoriamente misturadas entre si. Cada usuário verifica novamente a transação recebida e assina a entrada correspondente. Se for bem-sucedida, a transação é considerada correta, se espalha para a rede e recebe confirmação.
Diferenças entre CoinJoin e transação regular
O diagrama abaixo mostra a diferença entre gráficos de transações regulares e transações CoinJoin.

Acima está um gráfico em que cada transação possui uma ou duas saídas e, abaixo da transação, já existem três saídas. O gráfico inferior é mais complicado e mais difícil de analisar. Quando o CoinJoin é colocado em prática na carteira Bitcoin, um grande grupo de usuários é formado. As transações podem ter dezenas de entradas e saídas (às vezes mais). Representado em um avião, o gráfico dessas transações será muito confuso. Uma moeda que passou por uma cadeia dessas transações tem milhares de origens possíveis. É difícil encontrar o real entre todas as opções.
Moeda Chaumiana
Chegamos à modificação CoinJoin chamada Chaumian CoinJoin. E o mesmo Gregory Maxwell sugeriu. Ele usa um operador centralizado e usa uma assinatura cega. O operador é necessário para executar a mistura de entradas e saídas e, em seguida, fazer a transação final. Mas o operador não pode roubar moedas ou violar a confidencialidade da mistura devido à assinatura cega.
O usuário pré-cega os dados antes de transmiti-los ao operador. Quando o operador assina esses dados, ele não vê o conteúdo real. Os dados assinados são retornados ao usuário, após o que ele remove o ofuscamento e tudo parece uma assinatura eletrônica normal.
Como é a interação entre o usuário e o operador na formação da transação geral? Cada usuário prepara uma entrada com antecedência, onde as moedas pertencentes a ele são gastas, um endereço para receber troco e um endereço cego para enviar um pagamento, após o qual ele combina esses dados em uma sequência e os transfere para o operador.
O operador verifica o valor de entrada e pagamento, assina o endereço de saída e retorna a assinatura ao usuário. No entanto, o operador não vê o endereço para o qual o usuário deseja enviar o pagamento, porque está cego. Além disso, o usuário remove a ocultação do endereço de saída, reconecta anonimamente ao operador e envia a ele um endereço de saída assinado. O operador, por sua vez, verifica se realmente assinou esse endereço com sua chave e se ele já possui a entrada correspondente, mas não pode saber qual entrada corresponde a qual saída. Depois que todos os usuários concluem essas ações, eles se reconectam anonimamente ao operador e fornecem assinaturas que confirmam a propriedade das moedas na entrada da transação geral. A transação concluída pode ser distribuída à rede para confirmação.
Nesse caso, nem o usuário nem o operador podem desinsonizar moedas nos endereços de saída. E a formação de uma transação em condições normais não leva mais que um minuto. A interação do usuário deve ser realizada através de redes de dados anônimas, que podem ser usadas como TOR, I2P ou Bitmessage.
Entre os usuários, pode haver participantes inescrupulosos cujo objetivo é interromper o processo de criação de uma transação comum por qualquer meio. Existe uma lista completa de possíveis cenários de comportamento do usuário, incluindo fraudulentos. Vários mecanismos de proteção foram desenvolvidos para combater cenários adversos, que permitem que usuários honestos garantam a formação da transação final. Os mecanismos de proteção usam tempos limite, rastreamento de saídas não gastas, etc. Para obter mais detalhes sobre todos os cenários e mecanismos de proteção, você pode se familiarizar separadamente. Agora considere a próxima modificação do CoinJoin, chamada CoinShuffle.
Coinshuffle
A modificação do CoinShuffle foi proposta em 2014. Não há mais um operador central e isso se tornou uma vantagem. Os usuários formam independentemente uma transação comum, se comunicando. No entanto, eles ainda não podem violar a confidencialidade da mistura de endereços de saída. Outra vantagem dessa técnica é que os usuários não precisam usar redes adicionais para anonimizar o tráfego, pois todas as propriedades necessárias serão alcançadas usando um protocolo P2P de interação entre os participantes.
Aqui, a criptografia direcional é usada, onde um par de chaves (públicas e privadas) é usado. A mensagem é criptografada usando a chave pública e somente o proprietário da chave privada pode descriptografá-la. Para a comunicação entre os participantes, o protocolo DiceMix é usado e também é fornecida oposição aos infratores.
Apresentando o CoinShuffle
Vamos ver como o CoinShuffle funciona.

Imagine um pequeno grupo de usuários: a astuta Alice, o sábio Bob, o barbudo Charlie e o laranja Dave. Cada um deles tem uma moeda não gasta no blockchain do Bitcoin nos endereços A, B, C e D, respectivamente. Todo mundo quer gastar uma moeda e esconder a história de sua origem. Para esse fim, cada membro do grupo descobre o endereço para o qual as moedas A, B, C ou D devem ser enviadas, respectivamente, mas não divulga esse endereço para os outros membros.
Além disso, cada um gera um novo par de chaves para criptografia direcional, após o qual os membros do grupo trocam chaves abertas para criptografia entre si, e a nova chave pública é assinada com uma chave privada que corresponde a um endereço com uma moeda não gasta. Da mesma forma, todas as mensagens dos participantes serão assinadas durante a interação subsequente. Essa foi a primeira etapa.

Os participantes embaralham e formam uma fila. Alice será a primeira por ser astuta, Bob a segunda por ser sábio etc. Agora, Alice pega A 'e criptografa direcionado a Dave usando a chave pública de Dave, respectivamente. O texto cifrado resultante Alice novamente criptografa e aponta para Charlie. Esse texto cifrado é novamente criptografado, mas já direcionado a Bob. Alice passa o resultado da criptografia para Bob. Bob descriptografa a mensagem com sua chave privada. Então ele pega B 'e criptografa direcionado para Dave, depois para Charlie e adiciona à lista. Ele aleatoriamente embaralha essa lista e a passa para Charlie. Charlie, por sua vez, descriptografa os itens da lista com sua chave privada, adiciona C ', criptografado direcionado a Dave, na lista e mistura aleatoriamente todos os itens da lista. A lista é transferida para Dave, que a descriptografa, recebe dados de endereços abertos para o envio de moedas, adiciona o endereço D ', os mistura aleatoriamente e, com base nesses endereços, entradas e valores conhecidos de transações, forma uma transação geral.

Dave distribui a transação em branco para o resto do grupo. Além disso, cada um verifica cuidadosamente se a saída da transação tem o endereço necessário e se o valor corresponde. Se tudo estiver bem, o participante assina a transação, confirmando a propriedade das moedas de sua entrada. Os participantes trocam assinaturas e, se a transação coletar todas as assinaturas necessárias, ela poderá ser distribuída à rede para confirmação.
Se um dos participantes começar a se desviar do cenário principal de interação, o restante poderá analisar conjuntamente o histórico da interação e remover os infratores do grupo para repetir tudo sem eles. Esta é uma característica importante.
Observe que já existem implementações prontas do CoinShuffle. E, na prática, eles funcionam efetivamente mesmo em grupos de várias dezenas de usuários. Atualmente, a integração deste protocolo é esperada em algumas carteiras de bitcoin, incluindo as móveis.
Quais são as desvantagens do método CoinJoin?
Obviamente, há muita dificuldade na interação fora da cadeia para a formação de uma transação, ou seja, é necessário organizar a formação de grupos e a interação dos participantes entre si. Mas uma desvantagem mais significativa é que o CoinJoin em sua forma pura não oculta a quantidade de transferências. Como resultado, é vulnerável à análise CoinJoin Sudoku, que se baseia em uma comparação das somas dos resultados das transações e permite desvendar o histórico da origem das moedas após sua confusão repetida. Sim, esse problema pode ser combatido, por exemplo, para usar apenas determinados valores para os valores de saída da transação (0,1 VTS, 1 VTS, 10 VTS, etc.), mas isso cria dificuldades e limitações adicionais. Portanto, considere um método completamente diferente que resolva o problema dos valores de transferência em aberto - transações confidenciais.
Transações confidenciais
Uma característica do método Transações Confidenciais (CT) é que ele oculta completamente os valores reais nas entradas e saídas da transação de terceiros. Todos podem verificar se a soma de todas as saídas não excede a soma de todas as entradas, o que já é suficiente para validar esta transação.
Isso foi possível através do uso de prova de zero conhecimento - esta é uma prova criptográfica do conhecimento de um segredo, mas sem divulgá-lo. Para provar que a soma das saídas não excede a soma das entradas, é utilizado o Compromisso de Petersen, que é baseado em transformações em um grupo de pontos em uma curva elíptica. Para combater a emissão descontrolada de moedas nesse esquema, a prova do uso de valores permitidos na saída da transação é necessariamente aplicada. Para verificar se foram utilizados valores não negativos que não excedem a ordem dos pontos base, são utilizadas as chamadas provas de intervalo.
E tudo ficaria bem, mas a criação dessas mesmas Range Proofs é muito cara em termos de recursos de computação. Além disso, eles têm um volume muito grande. Teoricamente, é possível integrar transações confidenciais no protocolo Bitcoin, mas ninguém tem pressa em fazer isso por causa de seu grande volume. No entanto, já existem sistemas contábeis em que as transações confidenciais são aplicadas com sucesso.
Tocar transações confidenciais
A metodologia a seguir é chamada de transações confidenciais em anel. Para confundir o histórico da origem das moedas, as assinaturas de anel são usadas aqui. O remetente na entrada de sua transação não se refere a uma saída específica (UTXO), mas a várias ao mesmo tempo. Além disso, com a ajuda de uma assinatura de anel, ele prova que possui as moedas de uma das várias saídas, mas não foi revelado qual. Daqui resulta que é impossível acompanhar de forma inequívoca a história da origem das moedas.
O uso de assinaturas de anel dessa maneira foi proposto pela primeira vez no protocolo CryptoNote, com base no qual várias criptomoedas funcionam. Transações confidenciais em anel usam CT. Eles permitem criar transações com muitas entradas e saídas, onde é impossível rastrear sem ambiguidade a origem de cada entrada, a quantidade de transferências está oculta e a interação com outros usuários para criar uma transação não é necessária.
Endereços furtivos
Essa abordagem é uma técnica para calcular secretamente os endereços para os quais as moedas serão enviadas. Essa idéia foi descrita pela primeira vez por Peter Todd. As chaves públicas são usadas como identificadores de usuário: se você deseja aceitar pagamentos, precisa anunciar sua chave pública.
O remetente usa seu par de chaves e sua chave pública para calcular uma nova chave pública única, que já será indicada na transação como um endereço. Acontece que apenas o remetente e o destinatário podem saber o endereço para o qual as moedas são enviadas. Para um observador de terceiros, a conexão entre o ID do usuário e o endereço na saída da transação não pode ser estabelecida.
Aplicação prática
Onde esses métodos são aplicados na prática?

A equipe da Bitshares foi uma das primeiras a implementar o CT em conjunto com os Stealth Addresses, não apenas para a moeda base, mas também para os tokens que podem ser emitidos na plataforma. A criptomoeda Monero suporta assinaturas de anel e endereços secretos para garantir um alto nível de privacidade. Em janeiro de 2017, a equipe implementou o RingCT e, com a atualização em setembro de 2017, o uso do RingCT se tornou estritamente obrigatório. Deve-se notar o protocolo Mimblewimble, que usa uma versão modificada do CT, que está atualmente em desenvolvimento ativo, mas falaremos sobre isso mais tarde.
Existe um projeto do ZeroLink, que é uma estrutura para a criação de carteiras confidenciais com base na técnica Chaumian CoinJoin. Vale ressaltar que ele pode funcionar em Bitcoin, sem exigir nenhuma alteração no próprio protocolo.
Vamos passar para as perguntas freqüentes.
- É possível usar endereços furtivos no bitcoin?Sim, você pode usá-los agora, não são necessárias atualizações de protocolo para isso. Mas, para uma adaptação mais ampla dessa funcionalidade, é necessário especificar estritamente a ordem de cálculo e os formatos de dados para que todas as carteiras possam trabalhar entre si e, portanto, adicionar essa função às próprias carteiras. Peter Todd já criou um BIP separado para introduzir essa especificação, mas ainda está sendo considerado.
- É eficaz usar o CoinJoin em sua forma mais pura para bitcoins?Não, na sua forma pura, é ineficaz, porque essas transações se prestam a uma análise simples pela quantidade de transferências.
Como alternativa, você pode usar os mesmos valores para todos os participantes, evitando misturadores confiáveis que podem roubar moedas ou violar a confidencialidade.- Os métodos discutidos acima podem ser aplicados para garantir a confidencialidade em moedas digitais como Ethereum, Ripple e Stellar?Não é não. Ethereum, Ripple e Stellar usam um modelo de transação completamente diferente e uma maneira diferente de contabilizar moedas, as quais não podem ser aplicadas como métodos de obtenção de confidencialidade. Obviamente, você pode tentar integrar artificialmente endereços secretos ou transações confidenciais, mas isso será extremamente ineficaz em termos de desempenho da moeda. O motivo é que, no Bitcoin, a contabilidade é baseada em resultados não gastos (ou seja, UTXO), e essas moedas usam saldos e contas.Este tópico é abordado em uma das palestras do curso de privacidade de criptomoedas online da Blockchain .