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.

Outputs de transação (TXO) – 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 outputs de transações. Cada output de transação pode armazenar uma determinada quantia de Monero, desde centavos a milhões.

Os outputs 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 outputs de 0,50 XMR para pagar 2 XMR para alguém, ou mesmo usar um único output de 5 XMR e receber um output de troco contendo 3 XMR.

Ao contrário do Bitcoin, esses outputs não estão vinculados a endereços públicos.

Cada output de transação (TXO) só possui dois estados possíveis:

  • Output não-gasto (UTXOs): ainda contém a quantia em XMR
  • Output gasto (STXOs): já foi utilizado em uma transação e contém 0 XMR

No Monero, as únicas pessoas que sabem o estado de um determinado output (se ele já foi gasto ou não) são os usuários que enviam e recebem o output. Como não é possível saber, apenas olhando na blockchain, se um output de transação foi gasto ou não, a blockchain do Monero só possui um único conjunto de outputs de transação (TXOs).

Em comparação, no Bitcoin, qualquer pessoa olhando a blockchain pode saber se um output foi gasto ou não, pois essa informação é pública. Portanto, a blockchain do Bitcoin possui dois conjuntos de outputs (TXOs): outputs de transação gastos (STXOs) e outputs de transação não-gastos (UTXOs).

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:

  • Entrada(s) = um ou mais inputs: débitos na carteira do pagador. Os inputs nada mais são do que outputs que foram recebidos em transações prévias. Equivale a todo o dinheiro que é usado na transação. Inclui um ou mais outputs recebidos em transações prévias
    • Inputs da transação = Outputs da transação + taxa da transação
  • Saídas = dois ou mais outputs: créditos na carteira do recipiente. Equivale a todo o dinheiro que sai da transação, depois de descontada a taxa da transação. Todo esse dinheiro deve sair em dois ou mais outputs novos, que jamais foram usados. O máximo de outputs permitidos por transação é 16.
    • Outputs da transação = Inputs da transação – taxa da transação
  • Taxa da transação: créditos na carteira do minerador. Equivale aos inputs subtraídos dos outputs da transação. A taxa da transação equivale às moedas que chegam para o minerador. Ela corresponde à diferença entre os inputs e os outputs.
    •  Taxa da transação = Inputs da transação – Outputs da transação

Ao receber uma quantia de alguém, sua carteira recebe outputs. Quando você for fazer uma nova transação, esses outputs serão usados como inputs da nova transação e o dinheiro sempre será direcionado para pelo menos dois novos outputs.

Conjunto de outputs

Ao contrário do que essa imagem sugere, a assinatura em anel do Monero não é interativa. Isso significa que você não precisa falar com as outras pessoas para poder usar os outputs delas como chamarizes no anel da sua transação.

Assinaturas em anel – escondendo o remetente

Ao criar uma transação com Monero, você irá usar uma assinatura em anel para esconder qual output realmente está sendo gasto. Para fazer isso, a sua carteira automaticamente escolhe diferentes outputs aleatórios de outras pessoas, que serão usados como chamarizes. Para um observador externo, todos esses outputs 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 um único output 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 é um output). Para criar a assinatura em anel, ela usa o seu output verdadeiro (que realmente está sendo gasto) e o combina com outros dez outputs 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. Estes dez outputs chamarizes são também conhecidos como “mixin“, pois eles serão “inseridos” na transação e “misturados” ao output verdadeiro.

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

No exemplo acima, o output que realmente está sendo gasto no input está indicado vermelho, e os dez outputs selecionados como chamarizes estão indicados em azul. Para cada input que a transação tiver (para cada output que for gasto), a carteira irá fazer uma assinatura em anel, selecionando dez outputs chamarizes para fazer parte do anel.

Qualquer output que faça parte do conjunto de outputs da blockchain do Monero pode ser usado como chamarizes em assinaturas em anel. Ou seja, os outputs que são usados 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 sua transação. Além disso, a carteira pode escolher esses outputs chamarizes de maneira completamente offline, basta que ela tenha uma cópia da blockchain.

Ao fazer as assinaturas em anel, a carteira cria inputs para a transação que não permitem que um observador externo não consiga determinar qual é o output que realmente está sendo gasto. Portanto, continuando nosso exemplo, a carteira de Alice irá enviar para rede a seguinte informação: “quero realizar uma transação com um input, que irá gastar um destes 11 outputs

  • Transação com um input de entrada + dois outputs de saída:
  • Entrada(s): input 1 da transação (assinatura em anel 1):
    • 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
    • Output 1: endereço stealth 1 (??? XMR)
    • Output 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 output verdadeiro + 10 outputs chamarizes)“. Com a exceção das pessoas envolvidas na transação, mais ninguém sabe qual output realmente está sendo gasto ou quais outputs são os chamarizes. Além disso, o valor contido em cada output 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 selecionados os outputs que serão gastos, 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 outputs já foram gastos e quantos XMR estão armazenados em cada output, como que as pessoas irão saber se um output que elas estão recebendo já foi gasto anteriormente? Para responder essa pergunta, precisamos aprender sobre o conceito da imagem chave. Ela é de importância fundamental no Monero, pois é o mecanismo que impede o gasto duplo, ou seja, ela impede que um output seja gasto mais de uma vez.

Cada imagem chave é um conjunto de números e caracteres que serve como uma referência de sentido único para o output verdadeiro (o membro da assinatura em anel que realmente está sendo gasto). Isso significa que o usuário que controla um output consegue gerar uma imagem chave a partir das chaves pública e privada do output, mas observadores externos não conseguem determinar qual output gerou uma determinada imagem chave. Portanto, cada output 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 contém duas listas:

  • uma lista contendo todos os outputs que já foram criados
  • uma lista contendo todas as imagens chave que já foram utilizadas

Essa segunda lista permite que os mineradores verifiquem que nenhum output foi gasto duas vezes, pois, ao criar uma transação gastando um output, o usuário obrigatoriamente deve incluir uma imagem chave nova, que jamais apareceu na blockchain, para provar que ele está gastando um output que nunca foi gasto anteriormente.

Note que a lista das imagens chaves não apresenta vínculo com a lista dos outputs que já foram criados. Portanto, apesar de ser impossível saber se os outputs da blockchain do Monero 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 output.

Vamos voltar ao nosso exemplo:

  • Transação com um input de entrada + dois outputs de saída:
  • Input 1 (assinatura em anel 1):
    • 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 um mesmo output seja gasto duas vezes – um gasto duplo) e se ela não é um número inválido (prevenindo que pessoas gastem outputs que não pertencem a elas). Graças à tecnologia das imagens chave, a rede consegue verificar essas informações sem saber qual é o output que realmente está sendo gasto na assinatura em anel e sem saber qual output corresponde à imagem chave utilizada. Além disso, as imagens chaves são usadas pelas carteiras do Monero para saber quais outputs do usuário já foram gastos.

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: um output com o valor do pagamento para Bob e um output 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 um output com um valor maior do que é necessário para pagar a transação, e criar um output novo 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 um output de 10 XMR) e com duas saídas (criando dois outputs, um output de 1 XMR para Bob e um output 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 todos outputs 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 output da transação. Agora imagine que você multiple o valor de cada output 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 output 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 inputs e outputs 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 dos inputs e outputs 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.

As transações coinbase são transações criadas pelos mineradores. Nesta transação o minerador cria a sua recompensa por ter minerado o bloco, ou seja, ele envia uma moeda nova para um endereço que ele próprio controla. Portanto, ela é uma transação muito especial, pois cria moedas novas e as insere em circulação. Por ter essa característica, a transação coinbase é diferente das demais transações do Monero: ela é a única transação que revela o valor que está sendo transmitido. Em outras palavras, as transações coinbase são as únicas transações que não são confidenciais e não utilizam a assinatura em anel.

Por que as assinaturas em anel funcionam?

No Monero, um output pode aparecer em um bloco por três motivos:

  1. Um output criando novas moedas em uma transação coinbase (criada por um minerador)
  2. Um output sendo gasto em uma transação comum
  3. Um output sendo usado como um chamariz na assinatura em anel 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 um output de uma transação em anel realmente está sendo gasto ou se está sendo usado como um chamariz, mesmo que ele apareça na blockchain em diversas transações. Como cada transação apresenta pelo menos um input contendo dez outputs chamarizes e um outpt verdadeiro, 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 os outputs 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 um output. 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 um output com endereço stealth, que jamais foi usado em outra transação. A única pessoa que poderá gastar esse output com 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á algum output que a carteira pode usar. Para verificar se o output já foi gasto, a carteira verifica na blockchain se a imagem chave do output 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 os inputs de seu endereço stealth e colocá-los em um endereço stealth de outra pessoa.

Ao analisar a blockchain do Monero, um observador externo só irá enxergar endereços stealth, que não apresentam nenhum vínculo identificável ao endereço público de Alice ou de Bob. Um exemplo de endereço stealth: 19ee620a7f66c880ce7ad3f7add65871e7f00eb33b1f8c352b8c4899b817aa50

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 outputs. Uma transação no Monero possui pelo menos uma entrada (um input que gasta um output antigo), duas saídas (dois outputs são criados) e uma taxa para o minerador (a diferença entre a(s) entrada(s) e as saídas da transação).

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: um output que realmente está sendo gasto e outros dez outputs chamarizes. Não é possível saber a quantia armazenada em cada output, 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 um novo output 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 output está sendo gasto, quantos Moneros existem em cada output e qual o endereço público do destinatário.

Um output pode surgir na blockchain do Monero por três motivos: como uma recompensa para um minerador, como um output sendo gasto ou como um chamariz em uma assinatura em anel. A blockchain do Monero registra todos os outputs que já foram utilizados em transações, mas, ao contrário da blockchain do Bitcoin, a blockchain do Monero não revela quais outputs já foram gastos.

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 o output que está sendo gasto) e não são confidenciais (a quantia contida no output é visível para todos usuários).