Capítulo 3

Como o Monero funciona

Os primeiros dois capítulos abordaram tudo que você precisa saber sobre POR QUE usar Monero (Capítulo 1) e COMO usar Monero (Capítulo 2). Até agora, você já aprendeu tudo que era necessário para começar a usar Monero sozinho!

O restante deste livro contém detalhes extras para aqueles que desejam imergir em como o Monero funciona “por trás das cortinas”. Os capítulos 3 e 4 descrevem as tecnologias por trás do Monero, como suas características de privacidade, a blockchain e o processo de mineração – focando no entendimento dos conceitos, sem seguir para a matemática avançada. Os capítulos seguintes contém todos os detalhes minuciosos para desenvolvedores e nerds apaixonados por criptografia.

3.1 Transação e o Registro

Para construir as bases necessárias para entender as tecnologias de privacidade do Monero, iremos considerar como moneroj são enviados e recebidos no registro da blockchain. Neste capítulo, focaremos na funcionalidade da blockchain – seu papel como um banco de dados compartilhado e à prova de adulteração que mantém uma lista das transações Monero. Os detalhes sobre segurança da blockchain (mineração, hashes, etc.) são outro tópico, reservados para o Capítulo 4.

Quando você cria uma carteira pela primeira vez, ela gera uma nova semente que você manterá em segredo e usará para acessar seus moneroj na blockchain. Esse processo de inicialização é feito por seu dispositivo e pode ser executado completamente offline; nada é enviado ou armazenado na rede durante a geração da carteira.

Nos bastidores, sua carteira calcula dois conjuntos de chaves a partir da sua semente. Suas chaves privadas são cuidadosamente mantidas em segredo, uma vez que você as usa para provar sua identidade e acessar seus moneroj. Suas chaves públicas podem ser, assim como sugere o nome, tornadas públicas aos demais usuários Monero. Chaves públicas e privadas são geradas em conjunto, usando propriedades matemáticas específicas que criam uma relação especial entre as chaves.

Para receber moneroj, você fornece seu endereço (criado a partir de suas chaves públicas) ao remetente. Quando alguém (um cliente, corretora ou um amigo) envia Monero a você, eles irão transmitir uma transação que transfere alguns moneroj que eles possuem a uma nova entrada no registro que você (e somente você) poderá desbloquear com suas chaves privadas.

Usando uma linguagem técnica, a saída da transação deles é armazenada na blockchain para que você acesse-a e gaste-a com suas chaves privadas, quando bem entender. Essa terminologia pode parecer um pouco confusa já que o uso da palavra “saída” em criptomoedas tem um significado diferente da sua definição habitual.

Toda vez que você recebe moneroj, você ganha uma nova saída; toda vez que você gasta moneroj, você usa uma de suas saídas e gera uma nova para alguém. Na verdade, todos os moneroj que você “possui” são simplesmente saídas na blockchain que você desbloqueia usando suas chaves privadas.

Quando sua carteira está escaneando ou sincronizando, isso geralmente significa que ela está usando suas chaves privadas para verificar todas as transações e saídas na blockchain para identificar registros relevantes. O saldo da sua carteira representa a soma de todas as saídas que suas chaves privadas conseguem desbloquear e gastar.

Quando você envia moneroj da sua carteira, você usa umas de suas saídas como entradas para uma transação que você transmite à rede. Conceitualmente, a blockchain é simplesmente um registro dessas transações, cada uma consumindo a saída do remetente em forma de entradas, para gerar uma nova saída para o destinatário.

O processo descrito acima foi ligeiramente simplificado para representar as partes mais cruciais (chaves públicas e privadas, transações, e entradas e saídas). As seções a seguir fornecem explicações não-técnicas dos conceitos principais por trás do conjunto de características de privacidade do Monero.

3.2 Panorama das tecnologias de privacidade

Os princípios gerais e terminologias introduzidos acima são compartilhados pela maioria das criptomoedas. O Monero oferece funcionalidades e privacidade aperfeiçoadas através de técnicas criptográficas únicas que protegem os usuários e suas atividades de serem vistas publicamente.

A Figura 3.1 mostra como estas características complementares trabalham juntas para proteger detalhes sensíveis das transações:

  • RingCT oculta o valor da transação.
  • Assinaturas em anel protegem o remetente ao ofuscar qual saída foi gasta.
  • Endereços sigilosos garantem que o endereço do destinatário não seja armazenado na blockchain.
  • Kovri rompe o elo entre suas transações e sua localização física ao ofuscar a origem da transmissão e ocultar sinais de atividade Monero na rede.

Figura 3.1

3.2.1 Transações confidenciais em anel (RingCT)

RingCT é uma tecnologia criptográfica que oculta a quantidade de moneroj que está sendo gasta em uma transação. Na maioria das criptomoedas, o valor das transações é enviado em texto simples, ou seja, visível a qualquer observador. A RingCT mantém essa informação confidencial ao permitir que o remetente prove que ele possui moneroj suficientes para uma transação, sem revelar o valor ou a quantidade! Isso é possível graças a comprometimentos e provas de intervalo.

Quando você envia moneroj, você se “compromete” de forma privada a enviar determinado valor, revelando o mínimo de informação necessária para a rede confirmar a legitimidade da transação, sem divulgar publicamente o valor em si. Um comprometimento válido garante que a transação não esteja criando moneroj de forma fraudulenta ou gastando moneroj em excesso.

Prova de intervalo é outro mecanismo importante em RingCT, como um método para garantir que a quantidade que foi firmada no compromisso é maior que zero e menor que determinado número. Isso é necessário para impedir que remetentes comprometam-se a enviar quantidades negativas ou absurdamente grandes de moneroj. Juntos, comprometimentos e provas de intervalo protegem a oferta de moneroj contra manipulação fraudulenta e tentativas de falsificação.

Anteriormente à RingCT, as transações Monero eram divididas em denominações específicas (por exemplo, 12,5 XMR seriam enviados na forma de 10 XMR + 2 XMR + 0,5 XMR) e os valores das transações eram visíveis a observadores externos. A RingCT foi ativada em Janeiro de 2017 e imediatamente atingiu adoção em massa. Dentro de um mês após sua ativação, aproximadamente 98% das novas transações já estavam voluntariamente usando o protocolo RingCT!

Para manter a política do Monero de impor privacidade por padrão, a RingCT tornou-se obrigatória para todas as transações Monero a partir de Setembro de 2017. Para gastar saídas pré-RingCT, elas precisam primeiro ser convertidas em saídas RingCT com quantidades ocultas.

3.2.2 Endereços sigilosos (de uso único)

Todas transações Monero utilizam endereços sigilosos para proteger a privacidade do destinatário. Para evitar o armazenamento do endereço da carteira do destinatário na blockchain, cada transação Monero é enviada a um endereço de uso único descartável e exclusivo. O destinatário pode acessar os fundos enviados a um endereço sigiloso sem expor qualquer conexão com seus endereços públicos ou outras transações.

Figura 3.2

Para contextualizar sobre a utilização de códigos de uso único aleatórios para proteger a identidade de um destinatário, imagine que seu amigo André esteja enfrentando uma doença crônica e você deseja presenteá-lo com alguns livros raros que você tem sobre como lidar com a doença. Infelizmente você está saindo de férias para viajar e André, que não está em casa, só retornará dentro de duas semanas. Talvez você possa pedir a um vizinho que fique com os livros temporariamente e depois repasse-os ao destinatário.

Seu vizinho precisará verificar que qualquer pessoa tentando pegar os livros realmente seja o destinatário correto. E uma vez que seu amigo é uma pessoa reservada, você deseja preservar sua identidade. Seria inapropriado pedir a seu vizinho que verifique o RG de André e confirme seu nome. Como você poderia providenciar a entrega dos livros e ao mesmo tempo preservar a privacidade de André? Basta que você invente um código aleatório de uso único e diga a seu vizinho que a pessoa que apresentar esse código poderá levar os livros (por exemplo: dê esses livros à pessoa que saiba a frase “PolarComboTango357”). Seu vizinho será capaz de repassar os livros a André sem ter que saber nenhuma informação extra sobre o destinatário.

Similar à forma como você pode usar um código aleatório para garantir que seu vizinho não saiba nada sobre quem receberá os livros, o Monero utiliza um sistema de códigos de uso único para impedir que a rede saiba sobre os destinatários de Monero! Ao invés de explicitamente armazenar o endereço do destinatário na blockchain (equivalente à “dê esses livros a André”), os fundos sempre serão enviados a um “endereço sigiloso” de uso único (equivalente à “dê esses livros à pessoa que saiba o código ‘PolarComboTango357’"). As técnicas criptográficas que asseguram endereços sigilosos aos destinatários são discutidas no Capítulo 5, porém seus pontos importantes estão detalhados abaixo.

Como estes endereços de uso único são gerados? O endereço público da sua carteira Monero contém 95 caracteres e incorpora duas chaves públicas (chave pública de visualização e chave pública de gasto) que são matematicamente derivadas da sua semente. Quando alguém lhe envia fundos, eles irão utilizar as chaves públicas do seu endereço juntamente com alguns dados aleatórios para gerar uma chave pública de uso único e exclusiva. Essas chaves públicas de uso único que são armazenadas em transações na blockchain são chamadas de endereços sigilosos porque é impossível para a rede ou para um observador externo conectar estes códigos aleatórios com a carteira que os originou.

Figura 3.3

Note que subendereços não são a mesma coisa que endereços sigilosos. Subendereços são endereços públicos reutilizáveis da sua carteira e estes não são armazenados na blockchain. Mesmo múltiplas transações enviadas a um único subendereço irão apontar para endereços sigilosos diferentes e não vinculados.

O aumento da privacidade ao não se armazenar endereços na blockchain é um claro benefício trazido pela implementação de endereços sigilosos. Uma consequência ainda maior é que a utilização dessas chaves de uso único exclusivas evitam que múltiplos pagamentos enviados ao mesmo endereço sejam associados entre si!

Suponha que você exponha sua arte em um local público e adicione um endereço para receber doações em criptomoedas. Se você usar uma moeda com blockchain transparente (por exemplo, Bitcoin), cada transação recebida naquele endereço será permanentemente armazenada de forma associável e pesquisável. Qualquer um poderá usar um explorador de blockchain para ver quantas doações em Bitcoin você recebeu, os valores e se você movimentou ou não esses fundos. Cada transação Bitcoin recebida é indexada no registro usando o endereço que você compartilhou publicamente.

Se você, em contrapartida, utilizar um endereço Monero, as doações recebidas não serão expostas à opinião pública. Cada doador irá gerar um endereço de uso único exclusivo e o armazenará no registro da blockchain. O endereço público que você colocou junto ao seu projeto para receber doações nunca será referenciado diretamente em uma transação, e os endereços sigilosos não fornecem nenhuma informação sobre o destinatário. Uma vez que cada doador mistura suas próprias informações aleatórias para criar um endereço sigiloso ao enviar transações, um doador não será capaz de reconhecer um endereço sigiloso que tenha sido gerado por outro doador.

3.2.3 Assinaturas em anel

Assinaturas em anel são uma característica do Monero projetada para proteger o remetente da transação ao ofuscar a origem dos moneroj que estão sendo enviados. Antes de começar a tratar das assinaturas em anel em si, discutiremos o conceito geral sobre assinaturas digitais.

Assinatura digital é um método criptográfico usado para confirmar a autenticidade e a origem de dados ou de uma mensagem. As assinaturas podem ser verificadas contra uma chave pública para confirmar a identidade do signatário e verificar se a mensagem está completa e sem modificações. Se a mensagem assinada for modificada, mesmo somente um caractere (intencionalmente ou por alguma falha acidental na comunicação), a assinatura será considerada inválida.

Diferentes implementações de assinaturas digitais são um dos componentes principais de todas criptomoedas. Para gastar uma de suas saídas, você cria uma mensagem descrevendo a transação para a rede, assina-a com sua chave privada correspondente e depois transmite o resultado à rede. Antes de executar a transação de fato, a rede verifica a validade da assinatura para certificar-se que a mensagem não foi alterada, ou forjada, por um terceiro que não possui a chave privada correta.

Em criptomoedas transparentes (por exemplo, Bitcoin) cada mensagem descrevendo a transação declara explicitamente quais saídas estão sendo gastas. Isso é útil pois torna fácil o controle, uma vez que a rede simplesmente mantém um registro de saídas de transações não gastas (UTXOs) que serão consideradas como entradas válidas em novas transações. Se alguém tentar gastar a mesma saída Bitcoin duas vezes, a segunda transação fraudulenta será prontamente rejeitada, já que a rede sabe que aquela saída já foi gasta por seu dono (quando ele assinou e transmitiu a primeira transação). Infelizmente, essa prova de titularidade direta é altamente prejudicial para a privacidade, ao indicar de forma definitiva a origem dos fundos e também quando determinada saída foi gasta.

O Monero utiliza uma construção diferente, conhecida como assinaturas em anel. Esse método de assinatura em grupo permite que um membro assine digitalmente a mensagem em nome do grupo, misturando as chaves públicas de todos os membros, tornando assim incerto qual deles efetivamente assinou a mensagem. É possível verificar criptograficamente que um dos membros do anel assinou a mensagem, mas é impossível determinar qual deles realmente construiu a assinatura.

Assinaturas em anel são usadas no Monero para combinar chaves de múltiplas saídas na blockchain, ofuscando assim quais saídas realmente estão sendo gastas. Suponha que Maria quer gastar uma de suas saídas Monero. Sua carteira irá selecionar de forma semi aleatória várias outras saídas antigas na blockchain (que não pertencem a Maria) e misturar chaves públicas à assinatura em anel como chamarizes. A rede é capaz de verificar que uma das saídas está sendo gasta, porém os chamarizes e quem realmente está gastando são criptograficamente indistinguíveis.

As assinaturas em anel protegem o remetente em todas as transações, uma vez que o destinatário e a rede Monero não conseguem determinar qual membro do anel é o verdadeiro dono dos fundos. Um importante resultado do uso das assinaturas em anel é que um observador externo não é capaz de provar que uma saída foi gasta! O fato de uma saída aparecer em uma assinatura em anel é totalmente inconclusivo, já que é impossível distinguir se ela está realmente sendo gasta ou simplesmente atuando de forma passiva como membro chamariz do anel.

Visto que é impossível dizer se uma saída em particular já foi gasta, você pode estar se perguntando o que impede um usuário desonesto de tentar gastar uma mesma saída duas vezes? Em blockchains transparentes com “uma saída, um gasto” (por exemplo, Bitcoin) isso é uma tarefa fácil: qualquer saída que tenha sido assinada criptograficamente e transferida uma vez é marcada como gasta e não pode ser usada novamente. As saídas Monero, entretanto, podem aparecer nas assinaturas em anel antes e depois que elas tenham sido gastas de verdade, assim, a reutilização de saídas deve ser prevenida de outra forma.

Isto é feito utilizando imagens-chave que são geradas e armazenadas com cada transação, unicamente derivadas a partir da verdadeira saída sendo gasta. A rede não pode determinar qual membro do anel está relacionado à imagem-chave; porém, outros participantes só precisam verificar se aquela imagem-chave já foi utilizada alguma outra vez ou não. Se um usuário mal-intencionado tentar gastar a mesma saída duas vezes, ele gerará a mesma imagem-chave duas vezes e a rede imediatamente rejeitará a segunda transação fraudulenta. Graças às imagens-chave, a rede consegue prevenir a reutilização de uma saída mesmo sem saber quais saídas estão gastas!

Figura 3.4

Originalmente a rede Monero não obrigava a utilização de assinaturas em anel, o que infelizmente permitia a criação de transações com “zero-mistura”, prejudiciais à privacidade. Essas transações antigas possuiam a mesma estrutura e pontos negativos das blockchains transparentes, ao invariavelmente identificar tanto o remetente quanto o destinatário, juntamente com a revelação de quando a saída foi gasta. A partir de 2016, a rede começou a requerer dois membros no anel para cada assinatura, obrigando privacidade por padrão para o remetente. Esse número mínimo do tamanho do anel foi aumentado para cinco possíveis signatários no final de 2017 e depois novamente aumentado para sete no início de 2018.

Perceba que entre 2016 e 2018, as regras para tamanho do anel foram postuladas na forma de um valor mínimo, e era permitido aos usuários criar transações com anéis maiores caso desejassem. Em teoria, pode-se pensar que usar mais chamarizes em uma transação garante uma maior privacidade. Porém, existe um problema prático que deve ser considerado – quando a maioria esmagadora das transações utilizam o tamanho de anel mínimo, tamanhos maiores e customizados destacam-se como atípicos, o que é prejudicial para a privacidade.

Esse problema foi resolvido na atualização da rede realizada no final de 2018; ao invés de especificar um tamanho mínimo de anel, as regras da rede passaram a requerer um tamanho de anel fixo. No momento em que este texto foi escrito, todas transações devem utilizar assinaturas em anel com exatamente onze membros. Esse número poderá aumentar no futuro, a medida que os estudos estatísticos sobre modelos contra ameaças e melhores práticas de privacidade forem evoluindo.

3.2.4 Kovri e análise de tráfego

Todo dispositivo conectado à internet recebe um endereço IP para ser identificado e para ajudar a encaminhar o tráfego para o usuário correto. Esse endereço IP, todavia, pode facilmente ser associado à localização e à identidade de um usuário.

A habilidade de associar transações e atividade Monero com endereços IP representa inúmeras desvantagens importantes. Algumas das medidas criptográficas para proteger os usuários do Monero descritas na seção anterior podem ser parcialmente contornadas se os endereços IP que se conectam a um nó forem analisados com o objetivo de se identificar usuários Monero.

Vale considerar os cenários indesejados que podem surgir quando a atividade na rede Monero é associada com localização física e identidades.

Dado que transmitir para a rede Monero revela um endereço IP, um nó recebendo uma transação pode ser capaz de identificar a localização física do remetente. Embora outras características de privacidade do Monero dificultem a associação de transações usando somente informações da blockchain, nós que monitoram transações podem inferir que múltiplas transações originadas do mesmo endereço IP estejam associadas entre si.

Além dessas preocupações com privacidade, endereços IP expostos podem levar à uma potencial censura. Um nó mal-intencionado pode optar por não retransmitir transações de certas pessoas ou grupos. Pior ainda, as informações geográficas reveladas por endereços IP podem levar pessoas mal-intencionadas a “darem uma passada” na casa de usuários de criptomoedas.

A associação entre endereços IP e atividade Monero não é uma ameaça somente para os usuários transmitindo transações. Atualmente, o tráfego da rede através de nós é visível para provedores de internet e outras entidades, o que poderia colocar donos de nós em risco caso seus governos ou provedores de internet decidissem responder negativamente ao movimento das criptomoedas.

Mineradores de criptomoedas também podem estar sujeitos a um tratamento injusto caso seus endereços IP sejam associados com sua atividade na rede Monero. Entidades mal-intencionadas podem querer atacar determinados mineradores, censurando seus blocos por conta de alguma discordância ideológica ou para restringir a mineração às empresas privadas e entidades governamentais.

Claramente, todas as partes envolvidas no ecossistema do Monero beneficiam-se da separação entre sua atividade na rede e seus endereços IP (e assim sua localização e identidade). Atualmente, existem muitas formas de atingir este tipo de privacidade caso você esteja em uma situação em que precise ocultar o uso do Monero em uma conexão monitorada.

Uma opção é usar uma rede privada virtual (VPN, na sigla em inglês) para enviar seu tráfego através de uma conexão criptografada em que nem seu provedor de internet e nem o governo podem monitorar. Essa rede VPN funciona estabelecendo um túnel seguro entre você e os servidores VPN, de forma que seu tráfego seja misturado com dados de outros usuários e retransmitido a partir de um endereço IP diferente. Note que o provedor da VPN pode registrar o tráfego se desejar, então informe-se bem antes de contratá-lo e use sempre uma empresa confiável.

Outra opção é usar a rede “Tor” (The Onion Router, em inglês) para direcionar seu tráfego através de uma rede privada de nós de retransmissão. O Tor foi originalmente desenvolvido pelo Laboratório de Pesquisa Naval dos Estados Unidos (United States Naval Research Laboratory, em inglês), e é usado por jornalistas, agências de inteligência e todos aqueles que precisam adotar medidas extras para evitar o monitoramento e a censura. Tor é uma rede privada gratuita, descentralizada e de código aberto projetada para que nenhum participante possa identificar a origem de nenhuma transmissão em particular. O Tor pode ser acessado através de navegadores dedicados e usuários com elevada necessidade de privacidade podem usar ainda uma distribuição Linux, como a Whonix, que direciona todo o tráfego através do Tor automaticamente.

A comunidade Monero também tem apoiado o desenvolvimento do Kovri, uma abordagem de privacidade baseada nas especificações descentralizadas do Projeto de Internet Invisível (Invisible Internet Project ou I2P, em inglês). Kovri está sendo projetado para usar encriptação e técnicas sofisticadas de redirecionamento para criar uma rede privada e distribuída através da internet, e também disponível para outras aplicações.

Até que o Kovri ou uma característica similar esteja diretamente integrada ao Monero, qualquer usuário com receios sobre análise de tráfego de internet são incentivados a usar o Tor ou um provedor confiável de VPN para manter sua conexão e endereço IP ocultos.

3.3 Comentários finais

O Monero utiliza muitas técnicas especiais de privacidade para proteger vários elementos da rede e todas as partes, em todas as transações. A RingCT oculta a quantidade enviada em cada transação. As assinaturas em anel protegem o remetente ao ocultar a origem dos fundos, enquanto que os endereços sigilosos garantem que o endereço do destinatário não seja armazenado na blockchain. O Kovri é uma tecnologia de redirecionamento que virá para quebrar o elo entre sua atividade Monero e sua localização física e identidade.

Todas essas características juntas garantem que os usuários do Monero permaneçam anônimos e que seus fundos não sejam rastreáveis. Ao eliminar criptograficamente todos os elos usados para analisar transações na blockchain, o Monero conquista a fungibilidade, que é uma característica necessária à uma moeda viável. Agora que concluiu a leitura deste capítulo, você aprendeu como o Monero protege as pessoas descritas nos exemplos de “aplicação na vida real” do Capítulo 1.