Conheça a tecnologia por trás da privacidade do Monero

A privacidade no Monero tem uma abordagem diferente das outras criptomoedas. Ao invés de adicionar um serviço de privacidade sobre uma blockchain transparente, o Monero tem diversas tecnologias de privacidade já embutidas em seu protocolo padrão, fazendo com que a sua blockchain principal seja opaca (não-transparente).

De maneira simplificada, o Monero utiliza cinco elementos fundamentais para garantir a privacidade de seus usuários. Eles são os seguintes:

  • Privacidade obrigatória: aumenta o conjunto do anonimato
  • Assinaturas em anel: escondem o remetente da transação
  • RingCT (transações confidenciais usando assinaturas em anel): escondem a quantia
  • Redes de anonimato (I2P e TOR): escondem a transmissão da transação (o endereço IP do remetente)
  • Endereços stealth (camuflados): escondem o destinatário
O uso obrigatório dos recursos de privacidade é uma medida que protege todos os usuários da rede. O conjunto do anonimato aumenta sempre que aumenta o número de usuários que não podem ser distinguidos uns dos outros.

Privacidade obrigatória

Um conceito importante a ser aprendido é o conjunto do anonimato. Em qualquer sistema ou moeda, o conjunto do anonimato corresponde ao número de pessoas participantes indistinguíveis umas das outras.

Quanto maior é o conjunto do anonimato, mais privado (anônimo) é o sistema. Se o conjunto do anonimato for pequeno, as pessoas que estão no sistema dificilmente terão privacidade, mesmo que elas utilizem excelentes ferramentas e recursos para isso.

Para dar um exemplo, vamos imaginar duas moedas que tem o mesmo número de transações diárias. A moeda A tem privacidade opcional, e apenas 1% das transações da rede utilizam os recursos de privacidade. A moeda B tem privacidade obrigatória, e 100% de suas transações utilizam os recursos de privacidade.

Na moeda A, como o conjunto do anonimato é menor, será muito mais fácil rastrear as transações de alguém. Além disso, os usuários poderão ser rotulados como suspeitos quando decidirem usar os recursos de privacidade.

Na moeda B, como o conjunto do anonimato é maior (todos os participantes usam recursos de privacidade), se torna muito mais difícil isolar algum usuário específico na multidão. Além disso, como todos usuários obrigatoriamente estão usando os recursos de privacidade, nenhum deles se tornará mais suspeito do que outro.

Os desenvolvedores do Monero entendem que as transações de uma criptomoeda devem ser o mais indistinguíveis o possível uma das outras. Ou seja, nenhuma deve chamar mais atenção do que a outra, e os seus registros na blockchain devem ser um monte de caracteres monótonos e sem sentido para um observador externo. Em função disso, o Monero tem tecnologias para esconder cada um dos elementos que diferenciam as transações umas das outras: o endereço do remetente, a quantia, o endereço IP de quem envia e o endereço do destinatário. Continue lendo o artigo para aprender quais as soluções que os desenvolvedores do Monero usaram para mascarar cada uma destas informações.

Saídas de transação – onde as moedas são armazenadas

Assim como a oferta do dinheiro brasileiro é dividida em diferentes notas e moedas de real (BRL), a oferta monetária da Monero é dividida em saídas de transação, também conhecidas pelo termo em inglês “transaction outputs” (TXO). Cada saída de transação pode armazenar uma determinada quantia de Monero, desde centavos a milhões.

As saídas de transação seriam equivalentes às moedas ou notas que você tem em sua carteira. Como analogia, você precisa juntar 4 moedas de R$0,50 para pagar R$2,00 para alguém. De maneira semelhante, você pode juntar 4 saídas de 0,50 XMR para pagar 2 XMR para alguém, ou mesmo usar uma única saída de 5 XMR e receber uma saída de troco contendo 3 XMR.

Ao contrário do Bitcoin, no Monero as saídas de transação não estão vinculados a endereços públicos.

Cada saída de transação só possui dois estados possíveis:

  • Saída não gasta (UTXO): uma saída que contém uma quantia em XMR
  • Saída gasta (STXO): uma saída que já foi gasta em uma transação e contém 0 XMR

No Monero, as únicas pessoas que sabem o estado de uma determinada saída (se ela já foi gasta ou não) são os usuários que enviam e recebem a saída. Como não é possível saber, apenas olhando na blockchain, se uma saída de transação já foi gasta ou não, a blockchain do Monero só possui um único conjunto de saídas de transação.

Em comparação, no Bitcoin, qualquer pessoa olhando a blockchain pode saber se um saída foi gasta ou não, pois essa informação é pública. Portanto, a blockchain do Bitcoin possui dois conjuntos de saídas (TXOs): o conjunto com as saídas de transação gastas (conjunto STXO) e o conjunto com as saídas de transação não gastas (conjunto UTXO).

Como funcionam as transações

Quando você faz um pagamento com Monero, você na verdade está pagando para pelo menos duas pessoas: o recipiente da transação e o minerador que irá incluir a transação no bloco.

Cada transação Monero contém:

  • Uma ou mais entradas (inputs): débitos na carteira do pagador. As entradas nada mais são do que saídas de transação que foram recebidas em transações prévias. Elas equivalem a todo o dinheiro que é usado na transação. Incluiem uma ou mais saídas recebidas em transações prévias
    • Entradas da transação = Saídas da transação + Taxa da transação
  • Entre duas e 16 saídas (outputs): cada saída é um crédito na carteira de um ou mais recipientes. Equivale a todo o dinheiro que sai da transação, depois de descontada a taxa da transação. Todo esse dinheiro deve sair em duas ou mais saídas novas, que são criadas a cada transação.
    • Saídas da transação = Entradas da transação – Taxa da transação
  • Taxa da transação: créditos na carteira do minerador. Equivale às entradas subtraídas das saídas da transação (à diferença entre as entradas e as saídas). A taxa da transação equivale às moedas que chegam para o minerador.
    •  Taxa da transação = Entradas da transação – Saídas da transação

Ao receber uma quantia de alguém, sua carteira recebe saídas de transação. Quando você for fazer uma nova transação, essas saídas de transação serão usadas como entradas da nova transação e o dinheiro sempre será direcionado para pelo menos duas novas saídas.

cxzxc

Assinaturas em anel – escondendo o remetente

Ao criar uma transação com Monero, você irá usar uma assinatura em anel para esconder qual saída de transação realmente está sendo gasta. Para fazer isso, a sua carteira automaticamente escolhe na blockchain diferentes saídas que já foram usadas em transações passadas por outras pessoas, que serão usados como chamarizes. Para um observador externo, todas essas saídas de transação são um possível remetente.

Veja o seguinte exemplo. Alice tem 10 XMR e quer enviar 1 XMR para seu amigo Bob. Os 10 XMR de Alice estão depositados em uma única saída de transação de sua carteira. Para preservar sua privacidade, a carteira de Alice cria uma transação com input composto por uma assinatura em anel que possui 11 membros (cada membro do anel é uma saída). Para criar a assinatura em anel, ela usa a sua saída verdadeira (a que realmente está sendo gasta) e a combina com outras dez saídas que Alice não controla, de outras dez pessoas diferentes, que são selecionados pela sua carteira de maneira não-aleatória da blockchain. Estas dez saídas chamarizes são também conhecidos como “mixin“, pois eles serão “inseridos” na transação e “misturados” à saída verdadeira.

  • Transação com uma entrada (uma assinatura em anel com 11 membros = 1 saída sendo gasta + 10 saídas chamarizes) e duas saídas
  • Entrada 1 (assinatura em anel):
    • Membro 1 do anel: Saída verdadeira (sendo gasta): Saída pertencente à Alice  (10 XMR)
    • Membro 2 do anel: Chamariz 1: Saída pertencente à Maria (??? XMR)
    • Membro 3 do anel: Chamariz 2: Saída pertencente a Paulo (??? XMR)
    • Membro 4 do anel: Chamariz 3: Saída pertencente a Luis (??? XMR)
    • Membro 5 do anel: Chamariz 4: Saída pertencente a João (??? XMR)
    • Membro 6 do anel: Chamariz 5: Saída pertencente a Carla (??? XMR)
    • Membro 7 do anel: Chamariz 6: Saída pertencente a Fábio (??? XMR)
    • Membro 8 do anel: Chamariz 7: Saída pertencente a José (??? XMR)
    • Membro 9 do anel: Chamariz 8: Saída pertencente a Ana (??? XMR)
    • Membro 10 do anel: Chamariz 9: Saída pertencente a Carlos (??? XMR)
    • Membro 11 do anel: Chamariz 10: Saída pertencente a Fernando (??? XMR)
  • Saídas (2):
    • Saída 1: endereço stealth 1, controlado por Bob (1 XMR)
    • Saída 2 (troco): endereço stealth 2, controlado por Alice (9 XMR)

No exemplo acima, a saída que realmente está sendo gasta na entrada está indicada em vermelho, e as dez saídas selecionadas como chamarizes estão indicadas em azul. Para cada entrada que a transação tiver (para cada saída que for gasta), a carteira irá fazer uma assinatura em anel, selecionando dez saídas chamarizes para fazer parte do anel.

Qualquer saída que faça parte do conjunto de saídas da blockchain do Monero pode ser usada como chamariz nas assinaturas em anel. Ou seja, as saídas que são usadas como chamarizes podem ser controlados por qualquer pessoa: você não precisa da permissão de ninguém para adicioná-los à assinatura em anel da entrada da sua transação. Além disso, a carteira pode escolher essas saídas chamarizes de maneira completamente offline, basta que ela tenha uma cópia da blockchain.

Ao criar uma transação com assinatura em anel, a carteira cria entradas para a transação que impedem que um observador externo consiga determinar qual é a saída que realmente está sendo gasta. Portanto, continuando nosso exemplo, a carteira de Alice irá enviar para rede a seguinte informação: “quero realizar uma transação com uma entrada que irá gastar uma destas 11 saídas

  • Transação com uma entrada e duas saídas:
  • Entrada 1 (assinatura em anel):
    • Membro 1 do anel: (??? XMR)
    • Membro 2 do anel: (??? XMR)
    • Membro 3 do anel: (??? XMR)
    • Membro 4 do anel: (??? XMR)
    • Membro 5 do anel: (??? XMR)
    • Membro 6 do anel: (??? XMR)
    • Membro 7 do anel: (??? XMR)
    • Membro 8 do anel: (??? XMR)
    • Membro 9 do anel: (??? XMR)
    • Membro 10 do anel: (??? XMR)
    • Membro 11 do anel: (??? XMR)
  • Saídas
    • Saída 1: endereço stealth 1 (??? XMR)
    • Saída 2 (troco): endereço stealth 2 (??? XMR)

As pessoas que observarem a transação na rede (e, mais tarde, na blockchain) só obterão a seguinte informação: “foi incluída na rede uma transação com 1 input contendo um anel de 11 membros (composto por 1 saída verdadeira + 10 saídas chamarizes)“. Com a exceção das pessoas envolvidas na transação, mais ninguém sabe qual saída realmente está sendo gasta ou quais saídas são as chamarizes. Além disso, o valor contido em cada saída e o endereço do destinatário também não são informados de maneira pública na rede, mas falaremos sobre isso mais adiante…

Uma vez selecionadas as saídas que serão gastas, a carteira de Alice precisa finalizar a criação da transação com outros elementos importantes. Um deles é a imagem chave…

Imagem chave

Mas se ninguém consegue saber, apenas olhando para a blockchain, quais saídas já foram gastas e quantos XMR estão armazenados em cada saída, como que as pessoas irão saber se uma saída que elas estão recebendo já foi gasto anteriormente? Para responder essa pergunta, precisamos aprender sobre a imagem chave. Ela é uma tecnologia de importância fundamental no Monero, pois impede o gasto duplo, ou seja, ela impede que uma saída seja gasta mais de uma vez.

Cada imagem chave é um hash (conjunto de números e caracteres) que serve como uma referência de sentido único para a saída verdadeira (o membro da assinatura em anel que realmente está sendo gasto). Isso significa que o usuário que controla uma saída consegue gerar uma imagem chave a partir das chaves pública e privada da saída, mas observadores externos não conseguem determinar qual saída gerou uma determinada imagem chave. Portanto, cada saída na blockchain possui uma única imagem chave possível.

Além de conter o registro de todas as transações já realizadas, a blockchain do Monero armazena outras informações importantes: quais foram todas as saídas que já foram criadas e quais foram todas todas as imagens chave que já foram utilizadas. Ao verificarem a lista de imagens chaves já utilizadas, os mineradores conseguem verificar que nenhuma saída do bloco que está sendo criado já foi gasta mais de uma vez. Isso é possível, pois, ao criar uma transação gastando uma saída, o usuário obrigatoriamente deve incluir uma imagem chave nova, que jamais apareceu na blockchain, para provar que ele não está gastando uma saída que nunca foi gasta anteriormente (não está fazendo um gasto duplo).

Na blockchain do Monero, não há nenhum vínculo informando quais são as imagens chaves correspondentes às saídas que já foram criados. Portanto, ao analisarmos a blockchain do Monero, apesar de ser impossível sabermos se as saídas já foram gastos ou não, nós sabemos que eles só podem ser gastos uma única vez, pois somente uma única imagem chave poderá ser gerada para cada saída.

Vamos voltar ao nosso exemplo:

  • Transação com uma entrada e duas saídas
  • Entrada 1 (assinatura em anel):
    • Membro 1 do anel: (??? XMR)
      • a638c2996fd6fd549abb5b446cdb376a204256acbe342f891aa1634d950eb0c8
    • Membro 2 do anel: (??? XMR)
      • 41b6f0944606d6c1a43545ae6834ac36aa9786e90a1d611e376103d6c2d835b8
    • Membro 3 do anel: (??? XMR)
      • 49dee81438b9179a8fa24faca90113a3d9ab18929679f27f2cb4785b4afa595e
    • Membro 4 do anel: (??? XMR)
      • 4511a10c5c01df4a8b7bf7b200e726065c43abfcf75051ec1348ef77bb6d90b9
    • Membro 5 do anel: (??? XMR)
      • 63bfd00dfd9eda2922dcb0444d02ef5e84f3814f1c05e684ab0aacf30d93a749
    • Membro 6 do anel: (??? XMR)
      • 91c5dd8666fd08f91491db060ad419b4e202b56437a6360af41f317f49f1966a
    • Membro 7 do anel: (??? XMR)
      • ae7623d0b7d07ff77aeea29e614e943cedaccc5a6dd57bdaf3c457d63eab5967
    • Membro 8 do anel: (??? XMR)
      • 0a99cfd7e094ac673d3436a9c816e15182dc266c1d366a5978abc499d53ccbfa
    • Membro 9 do anel: (??? XMR)
      • 1e29ab1ba6863591b3269e376d710063179048a740b4438140532ef40a626cb8
    • Membro 10 do anel: (??? XMR)
      • ff4162870f3ada4f913c498e9277ecbafa7c16cbdc799efbd29579c3195b59f2
    • Membro 11 do anel: (??? XMR)
      • c911630c190d9096a19bfd2f99459dde05ef0385bd5736caf84b0f20986d2a94
  • Imagem chave
    • d810537b568727ab42e458cf3a72f894a5503633b8c8caaa615c183edee5ba8a

A rede verificará se a imagem chave não foi utilizada anteriormente (prevenindo que uma mesma saída seja gasta duas vezes – um gasto duplo) e se ela não é um número inválido (prevenindo que pessoas gastem saídas que não pertencem a elas). Graças à tecnologia das imagens chave, a rede consegue verificar essas informações sem saber qual é a saída que realmente está sendo gasta na assinatura em anel e sem saber qual saída corresponde à imagem chave utilizada. Além disso, as imagens chaves são usadas pelas carteiras do Monero para saber quais saídas do usuário já foram gastas.

Como funcionam os trocos?

Os trocos no Monero não funcionam como na vida real. Na vida real, você entrega uma nota ou uma moeda para a pessoa que você quer pagar, e a pessoa lhe entrega uma nota ou moedas como troco.

No Monero, ao criar uma transação onde o troco é necessário, Alice cria uma transação com duas saídas: uma saída com o valor do pagamento para Bob e uma saída com o valor de troco que ela quer receber para ela mesma.

Isto pode parecer estranho, mas, na verdade, o que a carteira de Alice faz é gastar uma saída com um valor maior do que é necessário para pagar a transação, e criar uma saída nova com o troco, que será enviado de volta para sua própria carteira. Veja o exemplo abaixo:

Alice tem 10 XMR em sua carteira e gostaria de enviar 1 XMR para Bob. Nesse caso, a carteira de Alice irá criar uma transação com uma entrada (gastando uma saída de 10 XMR) e com duas saídas (criando duas saídas, uma saída de 1 XMR para Bob e uma saída de 9 XMR para ela mesma, que será o seu troco).

Transações confidenciais em anel (RingCT) – escondendo a quantia

A tecnologia das transações confidenciais (CT) em anel (ring), também conhecidas como RingCTs, é usada para esconder a quantia que está sendo transmitida em cada transação. Ela usa um recurso de criptografia conhecido como comprometimento Pedersen, que é usado para prevenir que outras pessoas fiquem sabendo a quantia que está sendo gasta na transação. Ao usá-lo, você consegue comprovar aos demais usuários que você tem a permissão para usar uma certa quantia, mas sem precisar revelar essa quantia.

Isso é usado para verificar que a soma de todos os inputs deve ser igual à soma de todas saídas da transação. Por exemplo:

1+2+3+4 = 3+5+2

Literalmente, “tudo que entrar na transação, tem que sair”, e é dessa maneira que nós nos certificamos que nenhuma moeda foi criada ou destruída na transação.

Somente o remetente e o destinatário sabem os valores de cada saída da transação. Agora imagine que você multiple o valor de cada saída por um número aleatório A:

(1A) + (2A) + (3A) + (4A) = (3A) + (5A) + (2A)

que também poderia ser escrito como

A * ( 1+2+3+4) = A * (3 + 5 + 2)

Então podemos estar certos que 1+2+3+4 = 3+5+2 ainda é verdade.

No RingCT, somente o remetente e o destinatário sabem os valores de cada saída da transação. Todo resto dos usuários enxergam apenas valores multiplicados (2A), (3A)…, então as outras pessoas conseguem verificar que ninguém está trapaceando, mas elas não ficam sabendo de A, então não sabem qual os valores exatos envolvidos. É claro que essa explicação é apenas uma idéia geral, e ela não é implementada exatamente como descrito acima.

O comprometimento Pedersen esconde a quantia a ao adicionar um número aleatório A. O valor do comprometimento é calculado para um conjunto de entradas e saídas na transação, e é então transmitido à rede. Vamos ver um exemplo simplificado:

Alice está enviando 1 XMR para Bob. Alice cria o comprometimento da seguinte maneira:

Quantia real (a): 1
Número aleatório (A): 273
Comprometimento (número fornecido à rede): 274

A carteira do Alice irá fornecer o número 274 para a rede. A rede irá então verificar se as somas da entradas e saídas no comprometimento é mesmo 274. Se elas forem diferentes, a transação é rejeitada. Se elas forem 274, então a transação é autorizada.

Agora, tudo o que foi explicado anteriormente é usado para formar uma assinatura em anel da RingCT. Isso resulta em uma quantia desconhecida de Monero sendo gasta. A chave pública do comprometimento é o que será utilizado pela rede para verificar o comprometimento.

Transações coinbase – Recompensando os mineradores e controlando quantas moedas há em circulação

Você pode estar se perguntando: “se ninguém sabe quantas moedas há em cada endereço, e ninguém sabe quantas moedas são transmitidas em cada transação, como é que as pessoas sabem quantas moedas de Monero estão em circulação?” Para respondermos essa pergunta, vamos aprender sobre as transações coinbase.

Cada bloco que é minerado na rede Monero pode possuir dois tipos diferentes de transações: uma ou mais transações comuns e uma transação coinbase. Veja o exemplo abaixo:

Exemplo de um bloco minerado na rede Monero contendo quatro transações: três transações comuns, criadas pelos usuários comuns, cada uma pagando uma taxa de mineração para o minerador, e uma transação coinbase, criada pelo próprio minerador, pagando uma recompensa de 2,27 XMR para o minerador.

As transações comuns são as transações realizadas no dia-a-dia entre os usuários comuns. As transações comuns incluem as taxas de transações, que são uma das fontes de rendimento dos mineradores. Até um certo limite, quanto mais transações um minerador incluir em um bloco, mais ele irá lucrar. Os mineradores não são obrigados a incluir transações em seu bloco, ou seja, eles podem minerar blocos vazios, sem transações. Esse tipo de transação tem as seguintes características:

  • possui no mínimo uma entrada (com assinatura em anel incluindo 11 saídas de transação)
  • possui no mínimo duas saídas
  • esconde o valor transmitido (usa RingCT)
  • inclui uma taxa de mineração

transação coinbase é criada pelo próprio minerador. Através dela o minerador cria a sua recompensa por ter minerado o bloco, enviando para si próprio uma moeda nova para um endereço que ele controla. Por ser um tipo especial de transação, que cria moedas novas e as insere em circulação, a transação coinbase não é confidencial. Dessa maneira os usuários da rede podem controlar quantas moedas estão em circulação. A transação coinbase tem as  seguintes características:

  • não possui entrada (não usa assinatura em anel)
  • possui uma única saída: a recompensa do bloco (não possui saída de troco)
  • revela o valor transmitido (não usa RingCT)
  • não inclui uma taxa de mineração

Por que as assinaturas em anel funcionam?

No Monero, uma saída de transação pode aparecer em um bloco por três motivos:

  1. Uma saída criando novas moedas em uma transação coinbase (criada por um minerador)
  2. Uma saída sendo gasta na assinatura em anel da entrada de uma transação comum
  3. Uma saída sendo usada como um chamariz na assinatura em anel da entrada de uma transação comum

Como não há uma maneira de se diferenciar entre as situações Nº2 e Nº3, observadores externos não fazem a menor idéia se uma saída de uma assinatura em anel realmente está sendo gasta ou se ela está sendo usada como um chamariz, mesmo que ele apareça na blockchain em diversas transações. Como cada transação apresenta pelo menos uma entrada contendo dez saídas chamarizes e uma saída verdadeira, apesar de estar aparecendo em um bloco, a probabilidade de que um membro do anel não esteja sendo gasto (90,9% de probabilidade) é muito maior do que a probabilidade de que ele esteja sendo gasto (9,09% de probabilidade).

Se você quer ver outras explicação sobre as assinaturas em anel e sobre o RingCT, veja esses ótimos vídeos:

Redes de anonimato — escondendo a transmissão das transações

Toda vez que a sua carteira de criptomoeda se conecta a uma rede ponto-a-ponto (P2P) para transmitir uma transação, ela vaza algumas informações, como o seu endereço IP e alguns metadados (ex: a data e a hora).

Toda vez que você se conecta a uma rede P2P, o seu endereço IP é revelado para outros nodos. Alguns destes nodos podem estar registrando o seu endereço IP e os IDs das transações que são transmitidas por ele. A fim de esconder essas informações vazadas, as carteiras oficiais do Monero oferecem conexão através das redes de anonimato I2P e Tor.

Para se informar mais sobre esse assunto, leia mais nosso artigo sobre as redes de anonimato no Monero e assista o vídeo abaixo para entender melhor como as redes de anonimato funcionam no Monero:

Endereços stealth  —  escondendo o recipiente

A Monero possui uma tecnologia chamada endereços stealth, que quebra o vínculo existente entre as saídas e os endereços públicos das carteiras, escondendo o destino da transação.

Com o Bitcoin, cada usuário possui uma única chave privada para cada endereço público. Cada endereço público corresponde a uma saída. Quando você envia bitcoins para alguém, a sua carteira escreve na blockchain o endereço público do destinatário. Para poder gastar os bitcoins vinculados ao endereço público, a pessoa precisará usar a sua chave privada. E, ao fazer isso, este endereço público irá aparecer novamente na rede.

Portanto, a carteira bitcoin possui apenas dois tipos de chaves:

  • Chave pública: usada para gerar o endereço público. O endereço público é usado para receber os bitcoins e ver o saldo da carteira.
  • Chave privada: é usada para gastar os bitcoins vinculados ao endereço público.

Com o Monero, as coisas são mais complexas. Quando você envia Monero para alguém, a sua carteira jamais escreve na blockchain o endereço público do destinatário. Ela cria uma saída com um endereço stealth, que jamais foi usado em outra transação. A única pessoa que poderá gastar essa saída com um endereço stealth é o usuário que recebe a transação.

No Monero cada carteira possui quatro tipos de chaves, um par de chaves públicas e um par de chaves privadas:

  • Chaves públicas (2): usadas para gerar o endereço público e o endereço stealth (chave pública de uso único)
    • Chave pública de visualização
    • Chave pública de gasto
  • Chaves privadas (2): usadas para ver o saldo ou criar transações
    • Chave privada de visualização: usada pela carteira para verificar na blockchain se há alguma saída de transação que a carteira pode usar. Para verificar se a saída já foi gasta, a carteira verifica na blockchain se a imagem chave da saída já foi utilizada.
    • Chave privada de gasto: usada para criar transações

Vamos explicar como funcionam os endereços stealth na Monero:

  1. Alice quer enviar dinheiro para Bob.
  2. Bob envia a sua chave pública de visualização para Alice.
  3. A carteira de Alice usa a chave pública de visualização de Bob para criar um endereço stealth, que é uma chave pública de uso único. Este endereço será utilizado uma única vez e somente Bob será capaz de acessá-lo no futuro.
  4. Para saber quanto tem de saldo, a carteira de Bob precisa vasculhar a blockchain, procurando cada um desses endereços stealth, para ver quais deles ela é capaz de abrir com as suas chaves privadas.
  5. Ao detectar um endereço stealth na blockchain, Bob conseguirá calcular uma chave privada de uso único correspondente ao endereço stealth.
  6. Quando Bob realizar um pagamento no futuro, ele irá usar sua chave privada de gasto e combiná-la com a chave privada de uso único para poder pegar a saídas de seu endereço stealth e colocá-las em um endereço stealth de outra pessoa.

Ao analisar a blockchain do Monero, um observador externo só irá enxergar endereços stealth, cada um representando uma saída. Estes endereços stealth não apresentam nenhum vínculo identificável com os endereços públicos de Alice e de Bob (que iniciam com 4 ou 8).

Por exemplo, se o endereço público de Bob é 888tNkZrPN6JsE…, ao receber uma transação com duas saídas, uma das saídas será recebida no endereço stealth 6bfe9b4b017399…

Apenas a carteira de Bob consegue deduzir que o endereço stealth está vinculado ao endereço público de Bob. Nenhum observador externo consegue deduzir, olhando na blockchain, que o endereço stealth está vinculado ao endereço público de Bob.

Se Alice precisar provar que ela enviou o dinheiro para Bob, a carteira de Alice consegue verificar e comprovar que o pagamento foi realizado.

Se você quer ver outra explicação sobre os endereços stealth, veja esse ótimo vídeo:

Um resumo sobre a tecnologia

Se você chegou até aqui e entendeu tudo, parabéns, você já é um profundo conhecedor da avançada tecnologia de privacidade do Monero. Vamos fazer uma breve revisão sobre os conceitos apresentados neste artigo.

Como pudemos aprender, para que qualquer transação seja aceita na rede Monero, ela obrigatoriamente deve usar todos os recursos de segurança da moeda. No Monero a privacidade não é opcional: a utilização dos recursos de privacidade é obrigatória e exigida a nível de protocolo para todos os usuários.

As moedas do Monero são guardadas dentro de saídas de transaçãoUma transação comum possui pelo menos uma entrada (que gasta uma saída de transação não gasta), duas saídas (duas saídas de transação são criadas) e uma taxa para o minerador (a diferença entre a(s) entrada(s) e as saídas da transação). Cada bloco minerado também inclui uma transação coinbase, que é usada para criar uma recompensa ao minerador.

Nas transações comuns do Monero, a privacidade para o remetente se dá através da assinatura em anel que é realizada para cada input da transação. Cada assinatura em anel contém onze membros: uma saída que realmente está sendo gasta e outras dez saídas chamarizes. Não é possível saber a quantia armazenada em cada saída de transação, que é escondida através da tecnologia chamada transação confidencial em anel (RingCT). A cada transação, graças à tecnologia do endereço stealth, o remetente cria uma nova saída de transação para o destinatário, que não possui nenhum vínculo com o endereço público do destinatário. Devido a essas três tecnologias, todas as informações mais críticas para a privacidade das transações são armazenadas de maneira ofuscada na blockchain, ou seja, um observador externo não sabe qual saída está sendo gasta, quantos Moneros existem em cada saída e qual o endereço público do destinatário.

Uma saída de transação pode surgir na blockchain do Monero por três motivos: como uma recompensa para um minerador, como uma saída sendo gasta ou como um chamariz em uma assinatura em anel. A blockchain do Monero registra todas as saídas que já foram utilizadas em transações, mas, ao contrário da blockchain do Bitcoin, a blockchain do Monero não revela quais saídas já foram gastas.

A única exceção são as transações coinbase, nas quais os mineradores criam sua própria recompensa por ter minerado um bloco. Como essas transações estão criando novas moedas que entram em circulação, elas precisam ser auditadas pela comunidade, portanto elas não utilizam assinatura em anel (não escondem a saída que está sendo gasta) e não são confidenciais (a quantia contida na saída é visível para todos usuários).