Escolar Documentos
Profissional Documentos
Cultura Documentos
Prefácio
Sobre o autor
Eu sou o Nico (“SerHack”), um pesquisador em segurança italiano,
contribuidor do Monero e autor deste livro. Encontrar boas fontes e aprender
sobre criptomoedas pode ser uma tarefa um tanto quanto desanimadora.
Especialmente para novos usuários, pode ser bastante desafiador encontrar
uma documentação técnica e ao mesmo tempo escrita de forma
compreensível. Quando comecei a aprender sobre o Monero pela primeira
vez, despendi uma quantidade enorme de tempo procurando e avaliando
diferentes materiais sobre o tema.
Decidi escrever Mastering Monero para guiá-lo nesta jornada, esteja você
querendo criar sua primeira carteira ou apenas curioso para aprender sobre
os detalhes técnicos por trás do Monero. Os primeiros capítulos foram
escritos para aqueles curiosos em saber porquê e como usar o Monero; eles
contém explicações e exemplos fáceis de entender, juntamente com
instruções práticas de uso. Os capítulos seguintes abordam progressivamente
tópicos mais avançados, compilando informações para desenvolvedores que
desejam desenvolver e contribuir com o ecossistema do Monero.
Eu pensava que o Bitcoin era a única criptomoeda que existia até um amigo
me apresentar o Monero em Maio de 2017. Fiquei completamente
surpreendido pela beleza desse novo paradigma: um mundo onde detalhes
sensíveis como saldo em conta e quantias transacionadas são mantidas de
forma confidencial para proteger tanto o remetente quanto o destinatário.
Com as funcionalidades de privacidade obrigatórias e habilitadas por padrão,
a blockchain inteira do Monero é encoberta; os usuários não têm sequer a
opção de se expor acidentalmente ao realizar transações.
Não ocorre uma movimentação real de notas ou ativos físicos; ambos bancos
simplesmente editam seus bancos de dados para representar que o saldo foi
transferido. Quando Maria realiza a transação (seja no caixa eletrônico,
usando o site do banco ou pelo app), esse sistema de pagamentos solicita ao
banco dela a subtração de 2.500,00 dólares do saldo em sua conta e depois
avisa ao banco de George para adicionar 2.500,00 dólares ao saldo dele.
Existem algumas desvantagens e riscos neste sistema, e ele ainda requer total
confiança nos bancos. Maria, George e os bancos devem assumir de boa fé
que as transações são legítimas e que os registros nos bancos de dados são
feitos de forma honesta. Essa confiança em intermediários e terceiros
representa um risco, uma vez que um banco ou agente desonesto pode
“criar” dinheiro ao editar tais registros de transações ou saldos de forma
fraudulenta.
Além do mais, Maria não possui efetivamente os 3.900,00 dólares e sim uma
promessa formal vinda de seu banco, e que ela deve confiar que será horada.
Não existe uma forma dela auditar seu banco e verificar se eles realmente
possuem esses 3.900,00 dólares. Na verdade, eles não precisam possuir essa
quantia, pois a maioria dos bancos operam legalmente no sistema de reserva
fracionária – o que permite que o valor dos ativos mantidos em caixa seja
ligeiramente inferior ao valor total dos saldos de seus correntistas.
A economia também pode ser usada como uma forma de atacar uma nação.
Às vezes, imprudência, especulações e acordos secretos entre governos
podem causar crises econômicas em um país, totais ou parciais. Devido à
globalização, tais atos podem levar à um “efeito dominó” e acabar por
desestabilizar outras economias também. Da mesma forma, um país
estrangeiro poderia “brincar” com a economia global em caso de guerra.
Como veremos nos próximos parágrafos, a última crise econômica em 2008
desempenhou um papel importantíssimo para o surgimento das
criptomoedas.
Uma vez que dados são gravados na blockchain, eles não podem mais ser
deletados, movidos ou alterados de nenhuma forma. Os registros são
imutáveis e cada participante da rede possui uma cópia correspondente da
blockchain para verificarem por si próprios. A maioria das blockchains de
criptomoedas empregam um modelo inteligente de mineração que encoraja a
participação na rede e mantém todos os registros de forma honesta e
sincronizados. Estes tipos de sistemas descentralizados são incrivelmente
robustos, uma vez que não existe um servidor ou banco de dados central
sequer que possa ser atacado ou manipulado de forma mal-intencionada.
Imagine que você tenha uma padaria e um de seus clientes paga por uma
porção de pães usando o endereço Bitcoin
3P3QsMVK89JBNqZQv5zMAKG8FK3kJM4rjt. Rapidamente você pesquisa na
blockchain e descobre que essa conta já recebeu mais de 5.000 Bitcoins!
Sabendo que seu cliente movimentou cerca de 50.000.000,00 de dólares
(cinquenta milhões!) recentemente, você pode querer cobrar mais caro dele
na próxima vez ou simplesmente roubá-lo. Esse problema de privacidade
representa um sério risco para nossa segurança pessoal.
Além de conseguir saber o saldo de seus clientes, você também poderá ver
cada transação que eles receberam ou enviaram, incluindo: a quantidade, o
dia, a hora e ambos endereços participantes. A análise de transações e
históricos pode ser usada para traçar um perfil dos seus hábitos de consumo,
renda, economias e com quem você interage.
Qualquer coisa que uma empresa monitore sobre você pode acabar sendo
roubada, cuidadosamente vendida ou usada de maneira antiética. Você
deveria exercitar enorme cautela em relação à sua pegada digital, já que
informações não podem ser “desvazadas” depois que seus dados pessoais
foram expostos.
Porém, uma série de truques matemáticos são utilizados para ocultar todos
os detalhes sensíveis e impossibilitar o rastreamento na blockchain. As
características de privacidade do Monero permitem à rede verificar a
validade de uma transação e determinar se o remetente possui ou não saldo
suficiente em conta, sem saber exatamente o valor da transação ou o próprio
saldo da conta! Ninguém pode ver o saldo em conta dos outros e as
transações não revelam a origem dos fundos que estão sendo transferidos.
A Figura 1.7 mostra como Maria pagaria a George pelo carro usando
Monero. O processo funciona da mesma forma que a transação em
criptomoeda mostrada na figura 1.5, porém, informações confidenciais são
ocultadas criptograficamente. Informações como o saldo das contas e o valor
das transações são marcados com “****” na ilustração, dado que nenhum
observador externo pode determinar tais valores.
Figura 1.7 – Maria envia dinheiro a George usando Monero. Os ****s
representam informações confidenciais, como endereços e saldos, que
são ocultados pelas características de privacidade do Monero.
Sua semente é usada para gerar seu(s) endereço(s) para receber moneroj.
Assim como seu endereço postal, você compartilha seu endereço Monero
com as pessoas que querem lhe enviar algo. A maioria das carteiras mostram
seu endereço em dois formatos diferentes – um conjunto de letras e número
ou de forma visual usando um código QR. Você pode compartilhar
tranquilamente qualquer um dos dois sempre que quiser fornecer seus
endereços a alguém.
A maioria dos softwares irão solicitar que você escreva sua semente em um
pedaço de papel sempre que criar uma nova carteira. Outros apps, no
entanto, pulam esse passo e você deve tomar a iniciativa de encontrar a
opção de backup e anotar sua semente em um papel. Certifique-se de fazê-lo
imediatamente, porque se algum dispositivo parar de funcionar você perderá
seus fundos para sempre.
Figura 2.1 – As carteiras encarregam-se das principais funções para que
você possa usar Monero.
Esta seção contém links para diversas carteiras de código aberto que são
desenvolvidas e confiadas pela comunidade Monero.
Carteiras Leves:
Monerujo – Android
Cake Wallet – iOS
Mymonero.com – Carteira Web, para Área de Trabalho, Android e iOS
SOFTWARE OFICIAL:
Seu endereço para receber Monero pode ser representado por uma
sequência alfanumérica ou um código QR. Você pode compartilhar o
que for mais conveniente para você, ou ambos. Neste exemplo, temos:
4BKjy1uVRTPiz4pHyaXXawb82XpzLiowSDd8rEQJGqvN6AD6kWosLQ6VJXW9
sghopxXgQSh1RTd54JdvvCRsXiF41xvfeW5
Por fim, sua carteira adicionará uma pequena taxa para recompensar a rede
por encaminhar e processar sua transação. Sua carteira irá recomendar uma
taxa apropriada baseando-se no estado atual da rede, a urgência da sua
transação e algumas outras considerações. Você pode aprender como essas
taxas funcionam e por que são necessárias para manter a rede no Capítulo 4.
Exemplo
Imagine que seus amigos Khan e Maria lhe devem, cada um, 0,06552376
XMR por um lanche que vocês dividiram. Você só recebe 1 pagamento, com
as seguintes informações:
Maria:
OutProofV1To53Qu2gegZbUevosKCTwrEdqiECgFyUygutXMEdhrHg1EtXMrFNas
zWYFjdU4aXFZ2iPF8G8jzoDJzCoW5dsWvb4mVN65abAya3U47cGXs7WABrTzG5aP
fV4YBANhwPgwD2
O Monero permite que você seja seu próprio banco, uma vez que ninguém
controla seus fundos a não ser você mesmo! Esse empoderamento financeiro
raiz é um dos maiores benefícios das criptomoedas. Entretanto, com grandes
poderes vêm grandes responsabilidades! Cuidar da sua segurança
operacional (OpSec) é importante para manter você e seus fundos seguros.
A maioria das pessoas são melhores do que isto e não postam nas redes
sociais sobre o saldo de sua conta bancária ou seu patrimônio financeiro.
Além de indelicado, representa um risco à segurança e pode comprometer
relações interpessoais quando desigualdades financeiras estão envolvidas.
Mesmo assim, muitas pessoas ingenuamente dizem quanto Bitcoin ou
Monero eles compraram.
Para evitar a perda acidental, sempre tenha certeza que sua semente está
guardada em um local seguro. Pergunte a si mesmo: “Se meu celular ou esse
site parar de funcionar, eu tenho outra forma de acessar meus fundos?” Você
deve considerar manter uma segunda cópia escrita da sua semente em um
segundo local seguro. Você não vai querer perder seu dispositivo e o backup
da sua semente ao mesmo tempo caso sua casa seja afetada por uma
enchente ou por um incêndio.
Para evitar a perda por roubo, nunca compartilhe sua semente ou chaves com
ninguém. Qualquer pessoa com acesso a sua semente poderá roubar 100%
dos seus fundos e as características de privacidade do Monero garantirão que
seja impossível para você determinar para onde eles foram enviados.
Como mencionado na seção 2.4.2, você deve sempre se perguntar “se este
site desaparecer, eu tenho alguma outra forma de acessar meus fundos?”.
Uma boa dica é só manter seus moneroj em uma correta se você pretende
negociá-los em breve. Caso contrário, mova-os para uma carteira que você
controle.
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.
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.
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 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.
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.
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.
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.
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.
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.
Esses nós formam uma rede ponto-a-ponto, permitindo aos usuários Monero
uma forma de comunicação resiliente e eficiente. Executar um nó não requer
nenhum conhecimento ou equipamento especial – se você baixar e instalar o
software do Monero agora, você poderá ter seu nó rodando antes mesmo de
terminar este capítulo!
Figura 4.2 – O Monero utiliza uma rede ponto-a-ponto distribuída,
formada por uma rede de dispositivos voluntários compartilhando
novos dados uns com os outros. Os nós mantém uma cópia completa da
blockchain e formam a base da rede. Dado que executar um nó requer
uma quantidade significativa de espaço em disco, alguns dispositivos
(especialmente carteiras para dispositivos móveis) conectam-se a um nó
remoto para requisitar informação e transmitir transações.
Para entender o motivo por trás disso, imagine uma Rede de Táxis do
Monero com poucos veículos mas muitos motoristas que podem utilizar
esses carros temporariamente se eles submeterem um trajeto aprovado. Ao
longo do dia, passageiros interessados ligam e solicitam corridas por toda a
cidade. Todas as solicitações dos passageiros que ainda não foram pegas são
listadas em tempo-real em uma “pool” de corridas pendentes.
Figura 4.4 – No primeiro estágio de preparação para montar um plano
de corridas, cada motorista olha para pool de corridas pendentes e faz
um rascunho do trajeto completo.
Ao invés de uma autoridade central de táxis designar cada corrida que chega
à determinado carro ou motorista, cada taxista olha para a pool e monta sua
própria lista com 5 a 10 corridas que ele seria capaz de completar nos
próximos 30 minutos. Essa etapa de planejar o trajeto é fácil e rápida para os
taxistas mais experientes! Assim que um motorista monta a lista de viagens
que consegue incluir no próximo “bloco” de corridas, ele completa uma
última tarefa descrita abaixo, e depois submete seu trajeto para a Rede de
Táxis do Monero.
Até agora, esse processo parece bastante intuitivo! Viagens não realizadas
são listadas na pool; quando um taxista submete com sucesso um bloco de
corridas, os passageiros são transportados até seu destino e removidos da
pool de corridas pendentes.
Figura 4.5 – Após os taxistas terem completado a tarefa (relativamente)
fácil de planejar um trajeto, eles devem resolver um desafio difícil –
nessa analogia, encontrar uma forma de reorganizar as letras dos
endereços para formar uma frase.
Porém, a Rede de Táxis do Monero possui uma regra bem peculiar: para que
um motorista submeta seu plano com um bloco de corridas à rede Monero,
eles devem realizar antes uma tarefa difícil e ao mesmo tempo inútil.
Imagine que o motorista precise pegar as letras de todos os endereços de
destino dos passageiros e usar algumas delas para formar cinco frases em seu
idioma local (com mais de 50 palavras no total) que digam qualquer coisa,
mas que precisam estar gramaticalmente corretas. Um taxista submetendo
um trajeto que tenha planejado precisa incluir tanto a lista de corridas quanto
uma frase sem sentido (“nonce”) que contenha as letras dos destinos, ou seu
trajeto será automaticamente rejeitado. Existem várias frases sem sentido
válidas que podem ser formadas usando a maioria das letras (por exemplo,
{a,e,e,g,i,m,n,r,r,s,t,o,o} pode ser reorganizado para formar “Rims enrage
too!” e “Monero is great!”), e as frases resultantes não têm qualquer
utilidade senão permitir o envio do conjunto de corridas à Rede de Táxis do
Monero.
Uma propriedade desse tipo de tarefa, que terá paralelos com a criptomoeda
Monero, é que é muito difícil encontrar um nonce, mas ao mesmo tempo
muito fácil verificá-lo. Neste exemplo dos táxis, é bastante difícil
reorganizar manualmente uma dúzia de endereços em 50 palavras que
formem uma frase válida. No entanto, é bastante trivial para qualquer um
revisar o resultado do nonce e verificar que ele completa o bloco de corridas.
Quando um taxista submete seu nonce no formato mostrado abaixo, você
rapidamente consegue ver que “Apple jam is very bad” é uma sentença
válida e que as letras dos destinos dos passageiros foram utilizadas de
maneira correta. Essa verificação é praticamente instantânea comparada ao
tempo que os taxistas levam para reorganizar as letras e formar várias frases.
Figura 4.6 – Encontrar uma frase nonce ao reorganizar os endereços é
complicado e requer tempo. Porém, a validade das frases enviadas é
fácil de ser verificada ao rapidamente conferir se elas usam somente
letras dos endereços das corridas incluídas no trajeto.
Por que a Rede de Táxis do Monero impõe uma tarefa tão difícil e inútil a
seus taxistas? Na verdade, essa é uma forma infalível de garantir que seus
clientes sejam servidos de forma justa e imparcial! Imagine que alguns
taxistas hajam de forma antiética, talvez ignorando corridas que venham de
algumas regiões da cidade ou só selecionando corridas de passageiros que
estão indo às empresas que tenham pago suborno a eles. Sem a
obrigatoriedade do nonce, esse pequeno grupo de taxistas mal-intencionados
poderia dominar o processo de seleção de corridas da empresa toda ao
constantemente submeter seus trajetos (injustos e excludentes) assim que um
carro fica disponível. Desta forma, eles poderiam sistematicamente tratar
alguns grupos de clientes de forma inferior, o que é absolutamente antiético
de acordo com os princípios da Rede de Táxis do Monero, que se dedica a
servir todos os passageiros com igualdade e imparcialidade.
Por esse motivo, a Rede de Táxis do Monero não conta com uma autoridade
central que seja responsável por controlar a atribuição e a realização de
corridas. Em vez disso, essa tarefa é distribuída aos taxistas individuais,
empregando a competição do nonce sem utilidade para selecioar
aleatoriamente qual proposta de trajeto é aceita. Isso garante que,
estatisticamente, os carros sejam frequentemente atribuídos aos taxistas
honestos, e por consequência, que a Rede de Táxis do Monero tenha uma
excelente reputação por prover um serviço justo à todos os clientes.
4.4.1 Benefícios
4.4.1.1 Resistência à censura
Existe outro desafio para as blockchains que não foi mencionado na analogia
dos táxis, mas que é resolvido pelos sistemas prova de trabalho.
Especificamente, um minerador mal-intencionado pode tentar gastar duas
vezes uma mesma saída. Tal fato refere-se a um ataque onde o minerador
cria blocos alternativos para desfazer suas transações antigas, “roubando de
volta” o dinheiro que havia gasto. Esse tipo de ataque precisaria ser
executado da seguinte forma:
A essa altura, Martin ficou com os itens que comprou de Valerie e também
roubou de volta os moneroj que ele inicialmente tinha usado para pagá-la.
Uma criptomoeda com mais mineradores e maior taxa total de hash será
mais difícil de atacar dessa forma, já que o minerador mal-intencionado
precisaria ter mais poder computacional do que o restante da rede global.
Aumentar o hashrate total ao incluir mais mineradores ajuda a proteger a
rede contra ataques.
Na maioria dos contextos, “otimização” é uma coisa boa. Talvez você esteja
surpreso que o algoritmo de prova de trabalho do Monero propositalmente
combata o aumento da velocidade de mineração. Isso acontece porque a
habilidade de criar equipamentos de mineração mais potentes pode levar a
uma perigosa centralização de mineradores. Esses riscos são perfeitamente
observados na história da mineração do Bitcoin.
Por enquanto, parece que a rede Monero tem mitigado a ameaça inesperada
dos ASICs com sucesso. Para continuar desencorajando os ASICs, agora o
Monero faz pequenas alterações no algoritmo de mineração a cada
atualização da rede. O projeto também está explorando algoritmos
completamente novos para proteger a rede de ASICs a longo prazo. Uma vez
que o Monero realiza atualizações de rotina (também chamados hard forks) a
cada 6 meses, tal medida deve desincentivar as tentativas de se produzir
ASICs para o Monero, já que cada reformulação, além de ser demorada e
cara, tornaria-se obsoleta imediatamente.
Essa noção de expandir um banco de dados que só aceita adições, onde cada
grupo de registros é criptograficamente protegido por hashes associados aos
blocos anteriores, é o conceito principal por trás da revolução das
blockchains.
Nonces aceitos: qualquer um dentre {307, 317, 347, 349, 359, etc}
Um aluno que gaste uma hora testando vários números para finalmente
chegar à reposta “359” para o desafio C terá que recomeçar sua procura por
um nonce válido do zero quando lhe for apresentada a uma variação do
desafio que diga, por exemplo, “Número primo de 3 dígitos”6 _ _” que não
repete nenhum algarismo.”
Se você tivesse somente um lápis e papel (ou até mesmo uma calculadora),
conseguiria resolver o desafio C ou o D? Provavelmente o desafio C, já que
você certamente encontraria uma resposta válida com 3 dígitos mais
rapidamente do que uma com 5 dígitos. Note que é possível ajustar a
dificuldade do problema de forma arbitrária, simplesmente alterando quantos
dígitos são necessários.
Agora, a criptografia não está mais limitada a espiões e militares; ela forma a
base da comunicação e segurança na era da internet e tem sido amplamente
estudada por pesquisadores acadêmicos e institucionais espalhados por todo
o planeta.
De modo geral:
A/B = q com resto r
Por exemplo:
12/4 = 3 com resto 0, que pode ser escrito como 3,0 na forma
decimal
13/4 = 3 com resto 1, que pode ser escrito como 3,25 na forma
decimal
27/5 = 5 com resto 2, que pode ser escrito como 5,4 na forma
decimal
Alguns exemplos de números primos incluem o 3, 5, 7, 11, 13, 97, 223, 997,
3413, 4421, 17837, 145601, 428567, 1171967 e números ainda maiores
como
2074722246773485207821695222107608587480996474721117292752992
589912196684750549658310084416732550077 ou os primos gêmeos
2.996.863.034.895 × 2^1.290.000 ± 1, que têm mais de 350.000 dígitos
cada!
No contexto dos relógios, ir dormir 5 horas após 11:00 da noite pode ser
representado como:
(11:00 da noite + 5 horas) mod 12 = ...
= 16:00 mod 12
= 04:00 (da manhã)
O alfabeto na base-58 é:
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuv
wxyz
Visto sob uma perspectiva mais ampla, as curvas selecionadas pelo NIST
também são implicitamente apoiadas pela NSA (Agência de Segurança
Nacional ou National Security Agency, em inglês). Esse tipo de apoio é visto
com suspeita pelas comunidades de criptografia e criptomoedas por conta de
incidentes passados onde a NSA usou sua autoridade sobre o NIST para
enfraquecer os algoritmos sugeridos pela última.
5.2.2 Hashing
O Capítulo 4 discutiu o conceito de hash e como ele é usado para uma
variedade de coisas, desde confirmar a veracidade de dados até distribuir
recompensas em um sistema prova de trabalho. Exemplos de hashes são
mostrados na seção de criptografia próxima ao final do Capítulo 4.
Um adversário que saiba que você criou suas chaves quando você retornou
do almoço, por volta das 12:45, saberia que os dígitos “1” e “2” aparecem na
sua chave e isso restringiria consideravelmente as opções possíveis.
No formato HH:MM, não existe uma hora do dia que tenha três “9”. Na
verdade, não existe nenhuma hora do dia que contenha três dígitos de
qualquer um dos números {6, 7, 8, 9} já que 17:89 h, 18:78 h, etc. são
horários impossíveis. Essa regra exclui muitas senhas de 4 dígitos, deixando
o adversário com uma “lista” muito menor de opções para adivinhar.
“Por trás da cortina”, uma semente é um inteiro de 256 bits único a partir do
qual chaves e endereços são derivados, por exemplo:
1126991085054359437260510514509403775521776267789095646916738451
34467691053980
Essas duas chaves privadas são multiplicadas pelo ponto gerador para
produzir duas chaves públicas da sua carteira (chave pública de gasto e
chave pública de visualização). Refere-se a esse método de derivação das
chaves como método determinístico.
Tamanho
Índice Descrição
em bytes
0 1 identifica o tipo da rede e o tipo do endereço – “18” para
a mainnet e “53” para a testnet (na base-58, “4” e “9”
respectivamente)
1 32 chave pública de gasto
33 32 chave pública de visualização
64 4 soma de verificação (hash criado com a função Keccak
dos 65 bytes anteriores, reduzido aos 4 primeiros bytes)
5.3.4 Subendereços
A privacidade nas transações Monero é atingida por três construções
principais: assinaturas em anel, endereços sigilosos (de uso único) e RingCT.
Juntas, elas mitigam o risco das transações serem associadas ao analisar-se
dados da blockchain. Entretanto, deve-se considerar os riscos de associações
“fora da blockchain” (em outras palavras, informações coletadas de outras
fontes que não seja a blockchain em si).
Por exemplo, imagine que seu endereço primário tenha recebido pagamentos
de várias pessoas diferentes. Graças à tecnologia de endereços sigilosos do
Monero, seu endereço público nunca é explicitamente armazenado nas
transações, então ninguém pode associar essas transações ao analisar a
blockchain (incluindo quem lhe enviou). Porém, essa privacidade
criptográfica é inteiramente contornada se dois dos seus pagadores
comunicarem-se um com o outro e descobrirem que eles têm enviado
moneroj para o mesmo endereço!
Porém, o byte da rede mainnet para subendereços é 0x42, por isso todos eles
começam com o dígito “8”.
5.3.4.2 Enviando para um subendereço
Você deve ter notado uma diferença importante entre os estilos das sementes
MyMonero e Electrum. O estilo MyMonero cria a chave privada de
visualização calculando o hash de um inteiro aleatório, enquanto que o estilo
Electrum calcula o hash da chave privada de gasto. Isso significa que as
sementes de 13 e 25 palavras não são compatíveis entre si – não é possível
criar uma conta no estilo Electrum que coincida com uma conta no estilo
My-Monero (ou vice-versa) porque o par de chaves de visualização sempre
serão diferentes.
5.4.1.1 Enviando
5.4.1.2 Recebendo
Tendo em conta quão bem Maria escondeu os moneroj que ela estava
enviando a George (escondido por uma chave privada da transação que nem
mesmo o George sabe), você deve estar se perguntando como ele poderá
achá-los!
Todas as transações que não são coinbase fazem uso da RingCT para
criptografar o valor da transação. O valor de cada transação é criptografado
de duas formas diferentes, e ambas formas são incluídas na mensagem.
Primeiro, o valor é criptografado por uma chave derivada de informações
públicas presentes no endereço do destinatário. Essa versão é armazenada no
campo edchInfo e só pode ser descriptografada e lida pelo destinatário,
usando o segredo compartilhado da transação.
Note aqui que você está incluindo várias informações: a chave pública P3
que você pegou na blockchain, o número aleatório s3 que você inventou, o
compromisso anterior c3 e o valor p2Hp(P2) formado a partir da sua própria
chave. Você continua:
c2 = Hs(M, s1G + c1P1, s1Hp(P1) + c1p2Hp(P2))
Mas ainda não acabou! Para esconder onde sua verdadeira chave está, você
inteligentemente define que s2 = u – c2 p2. A assinatura que você envia para
a blockchain e para o mundo contém várias quantidades: (c1, s1, s2, s2, J),
onde J = p2Hp(P2) é a imagem-chave utilizada em cada compromisso. Nós a
renomeamos aqui para evidenciar o fato de que o público não sabe quais
informações foram usadas para gerá-la.
Note que o exemplo acima de uma assinatura em anel no estilo LSAG foi
mostrado com propósito educativo e não deve ser utilizado como referência
para nenhuma implementação em produção.
O LMDB é escrito em C++ com conexões via API para várias linguagens de
programação e foi desenvolvido pela Symas Corporation. Aqui estão
algumas características do LMDB:
O cabeçalho do bloco
A transação base
Uma lista de identificadores de transações (hashes das transações
mineradas no bloco)
Todo bloco válido contém uma única transação base que direciona a
recompensa coinbase para o minerador. Essa transação base deve seguir as
regras de emissão de moeda e incluir o campo da altura do bloco.
tamanho do block_header
block_header
hash da Merkle root
número de transações (varint)
Se um bloco é minerado com tamanho (B) maior que a mediana dos últimos
100 blocos, parte da recompensa base é retida, de acordo com a fórmula:
Multa = RecompensaBase * ((B / MN) – 1)2
5.5.3.3 Taxas
R é a recompensa base
R0 é recompensa base de referência (10 XMR)
M é o limite do tamanho de bloco
M0 é o limite mínimo do tamanho de bloco (300 kB)
F0 é 0,002 XMR
60/300 é o fator de ajuste para levar em conta o aumento no limite do
tamanho de bloco sem multa (ajustado de 60 kB para 300 kB em 2017)
4 é o fator de ajuste para levar em conta o multiplicador da taxa padrão
(o menor nível de taxa utiliza um multiplicador de x1 e uma transação
com prioridade normal utiliza x4)
5.5.4 Bulletproofs
Bulletproofs são uma nova característica que reduzem drasticamente o
tamanho das transações, que por sua vez reduzem as taxas gerais por
transação! As transações do Monero costumavam ser bastante grandes
(geralmente > 12 kB), assim, as Bulletproofs foram uma melhoria muito
aguardada.
Uma vez que a RingCT oculta o valor das transações, cálculos complicados
são necessários para verificar se as entradas correspondem as saídas. As
propriedades algébricas úteis dos comprometimentos são valiosas por
permitirem transações ocultadas cuja validade pode ser confirmada por
qualquer participante.
Quando for submeter uma pull request no GitHub, certifique-se que sua
ramificação está atualizada. Evite deixar commits de merge ou de outros
programadores perdidos na ramificação que irá submeter. Caso exista algum
conflito, talvez seja solicitado a você que realize o rebase (mesmo se o
conflito for fácil de resolver).
Patches devem ser autocontidos. Uma boa regra geral é criar um patch
separado para cada problema, recurso ou mudança lógica. Siga o estilo de
código da porção que você está modificando e evite fazer alterações
desnecessárias, como mudanças nos espaços em branco ou indentação.
Sempre faça o squash apropriado (por exemplo, se um de seus patches
incluem um bug que é consertado em um patch subsequente, então ambos
patches precisam ser integrados).
Esses projetos são bem documentados para que você possa se familiarizar
com o código e sugerir melhorias! Existem muitos subprojetos com uma
variedade de oportunidades para você contribuir com o Monero. Por favor,
visite um dos repositórios, leia alguns problemas em aberto e pense como
você pode deixar seu legado no código-base do Monero.
$ Esse texto é um comando no terminal. Não execute esse comando
se você não sabe o que está tocando.
Nota: No momento em que escrevo, alguns componentes do ecossistema do
Monero estão mudando seus repositórios do GitHub para o GitLab.
6.3.2 Dependências
Para gerar o software Monero a partir do código-fonte, as dependências da
tabela abaixo precisarão estar inclusas no PATH do seu sistema. Algumas
das bibliotecas também estão presentes nesse repositório (mascadas como
Fornecida (Vendored)). Por padrão, a geração utiliza a biblioteca instalada no
sistema e ignora as fornecidas na fonte. Porém, se uma biblioteca não for
encontrada no sistema, as fornecidas na fonte serão geradas e utilizadas.
. . .
GCC libunbound ldns
CMake libsodium expat
pkg-config libminiupnpc GTest
Boost libunwind Doxygen
OpenSSL liblzma Graphviz
libzmq libreadline pcsclite
6.3.3 Instrução de geração
O Monero utiliza o sistema de geração CMake e um arquivo de geração
padrão makefile que invoca comandos cmake, conforme necessário. Uma vez
que você tenha instalado as dependências, mude para o diretório raiz do
código-fonte e execute o comando make para iniciar a geração. O processo
poderá levar até uma ou duas horas. Quando o código tiver terminado de
gerar, você encontrará os binários do Monero na pasta build.
Você pode (opcionalmente) digitar make debug para compilar uma versão de
depuração. Existem muitas comunidades com informações para lhe ajudar a
solucionar problemas. Pesquisas em sites de busca usando os erros de
geração que você encontrou provavelmente lhe guiarão a uma solução ou a
pessoas que poderão ajudar.
O endereço Monero mostrado acima não faz nenhum sentido para humanos,
porém atende os outros dois critérios com sucesso. Endereços públicos do
Monero contém ao menos 95 caracteres, o que os tornam difíceis de ler e
impossíveis de memorizar. Certamente deve existir uma forma de simplificar
os destinos de pagamento!
A Equipe Core do Monero lançou o padrão OpenAlias para “contornar” o
triângulo de Zooko criando uma forma legível por humanos para comunicar
endereços. O padrão OpenAlias é um registro DNS de texto em um Nome de
Domínio Completamente Qualificado (Fully Qualified Domain Name
(FQDN), em inglês). Cada registro de texto só precisa conter duas
informações: o prefixo e o endereços de destino. Um par chave-valor
recipient_name também pode ser adicionado, mas ele é opcional.
recipient_address=45ttEikQEZWN1m7VxaVN9rjQkpSdmpGZ82GwUps66neQ1P
qbQMno4wMY8F5jiDt2GoHzCtMwa7PDPJUJYb1GYrMP4CwAwNp
recipient_name=MoneroFFS
--daemon-address node.moneroworld.com:18089
Para receber qualquer informação da carteira RPC, você deve enviar uma
mensagem pelo método POST. A API JSON-RPC aceita mensagens no
formato:
{ “jsonrpc” : versão , “method” : método, “params”: parâmetros,
“id”: id }
Campo Descrição
version Versão do protocolo JSON-RPC (O Monero suporta a v2.0)
method Declara qual funcionalidade é chamada
params Especifica informações adicionais necessárias para o método
desejado
id Número para acompanhar as respostas (inteiros partindo do 0)
que retorna duas saídas: o saldo [total] e o saldo desbloqueado, que inclui
somente transações “profudas” o suficiente na blockchain para serem
consideradas “seguras” (por exemplo, confirmadas como disponíveis após 6
blocos).
{“id”: “0”,“jsonrpc”: “2.0”, “result”: { “balance”:
140000000000, “unlocked_balance”: 84000000000} }
que retorna:
{“id”: 0,“jsonrpc”: “2.0”,“result”: {“address”:
“42uMGYwvLuUGJzqdWZvr47CGCBz1qNNExZeegcjLPMbaFkBb3XG
g6Y1bUwaMbovzGWDXtaASxSBYtaiBB4wuDmrAMCygexH”, “addresses”: [{
“address”: “42uMGYwvLuUGJzqdWZvr47CGCBz1qNNExZeegcjLPMbaFkBb3XG
g6Y1bUwaMbovzGWDXtaASxSBYtaiBB4wuDmrAMCygexH”, “address_index”:
0, “label”: “Primary account”,“used”: false
},
{
“address”:
“894PaGJyxRjZU8nP7Dh4FuAyzr2dK3VT9ZZX95MxdAGP3HoHEpA
bNb8Htgp5LKzc1pXQ8zhpokTZtcUTnzeU823oUPUGSpv”,
“address_index”: 1,
“label”: “”,
“used”: false
},
]}}
que retorna:
{ “id”: 0, “jsonrpc”: “2.0”, “result”: {“address”:
“86KoCQsZHQvSUnp9fFn92e5QGUiZtH1qZ1nNx1Jv5eJs94ywbLR2k
11CjZTq5o4v8j9bx3CEAturCheJqJR7cYdQKT4xE3w”, “address_index”: 9
}}
que retorna:
{ “id”: “0”, “jsonrpc”: “2.0”, “result”: {“account_index”: 1,
“address”:
“88bV1uo76AaKZaWD389kCf5EfPxKFYEKUQbs9ZRJm23E2X2oYgV9bQ54FiY6hAB
83aDXMUSZF6KWyfeQqzLqaAeeFrk9iic” } }
7.3.3.5 Transferir
que retorna:
{ “id”: “0”, “jsonrpc”: “2.0”, “result”: { “fee”: 48958481211,
“tx_hash”: “985180f468637bc6d2f72ee054e1e34b8d5097988bb29a2e0cb
763e4464db23c”, “tx_key”:
“8d62e5637f1fcc9a8904057d6bed6c697618507b193e956f77c
31ce662b2ee07”, “amount”: 300000000, “tx_blob”: “”,
“tx_metadata”: “”, “multisig_txset”: “” } }
rpc_fields = {
“method” : “get_balance”
}
Salve todo o código acima como tutorial.py (ou qualquer nome que
queira) e execute:
$ python tutorial.py
Para uma saída mais limpa, podemos adicionar algumas linhas de código ao
final do script do tutorial para que ele imprima somente o saldo (ou o saldo
desbloqueado, se preferir):
# Get the balance from response array and convert to a string.
balance = str(response.json().get('result').get('balance'))
print(“Balance is “ + balance )
Agora, executando:
$ python tutorial.py
Deverá retornar simplesmente:
Balance is 426700000
Você pode usar métodos RPC como esse para desenvolver seu próprio
cliente para a carteira Monero!
print(“Secret_spend_key : “ + secret_spend_key)
print(“Secret_view_key : “ + secret_view_key)
print(“Public_spend_key : “ + public_spend_key)
print(“Public_view_key : “ + public_view_key)
Aqui está um script em Python que você pode verificar por si mesmo e usar
para gerar seus próprios endereços customizados em segurança. A
abordagem é simples: gerar endereços repetidamente até que um dos
resultados coincidam com seu critério. Recomenda-se usar textos curtos já
que o tempo necessário para gerar um endereço qualificado usando força
bruta aumenta drasticamente conforme o tamanho do texto desejado.
A maior parte do código está dentro de um while(1), um loop infinito que
será executado até que um endereço coincidente seja descoberto. Em cada
iteração no loop, o código chama a função generate_random_address do
exemplo anterior para gerar um novo endereço.
if (len(sys.argv) != 2):
print(“usage: python vanity_address.py
[desired_prefix]”)
exit()
if (sys.argv[1][0] != “4”):
print “Monero addresses must start with the character 4”
exit()
## multiply r*A
derivation = utils.generate_key_derivation(publicViewKey,
privateTxKey)
Existe uma alternativa? Sim! O Monero possui uma API C++ que pode lidar
com todas as funcionalidades, incluindo gerenciar carteiras e enviar
transações.
set(PROJECT_NAME tutorial-5)
project(${PROJECT_NAME})
if (NOT MONERO_DIR)
# Path of Monero source code
set(MONERO_DIR ~/monero)
endif()
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH}
“${MONERO_BUILD_DIR}” CACHE PATH “Add Monero directory for
library searching”)
# find boost
find_package(Boost COMPONENTS
system
filesystem
thread
date_time
chrono
regex
serialization
program_options
date_time
REQUIRED)
include_directories(
${MONERO_SOURCE_DIR}/src
${MONERO_SOURCE_DIR}/external
${MONERO_SOURCE_DIR}/build
${MONERO_SOURCE_DIR}/external/easylogging++
${MONERO_SOURCE_DIR}/contrib/epee/include
${MONERO_SOURCE_DIR}/version
${MONERO_SOURCE_DIR}/external/db_drivers/liblmdb)
# Specify source files
set(SOURCE_FILES main.cpp)
# Make executable
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
set(LIBRARIES
wallet
blockchain_db
cryptonote_core
cryptonote_protocol
cryptonote_basic
daemonizer
cncrypto
blocks
lmdb
ringct
device
common
mnemonics
epee
easylogging
device
pcsclite
sodium
${Boost_LIBRARIES}
pthread
unbound
crypto
ringct_basic)
if (Xmr_CHECKPOINTS_LIBRARIES)
set(LIBRARIES ${LIBRARIES} checkpoints)
endif()
foreach (l ${LIBS})
string(TOUPPER ${l} L)
find_library(Xmr_${L}_LIBRARY
NAMES ${l}
PATHS ${CMAKE_LIBRARY_PATH}
PATH_SUFFIXES “/src/${l}” “/src/ringct” “/src/”
“/external/db_drivers/lib${l}” “/lib” “/src/crypto”
“/contrib/epee/src” “/external/easylogging++/”
NO_DEFAULT_PATH
)
set(Xmr_${L}_LIBRARIES ${Xmr_${L}_LIBRARY})
Código Main.cpp
-- Configuring done
-- Generating done
-- Build files have been written to: /code/tutorial-5
e
$ make
Scanning dependencies of target tutorial-5
[ 50%] Building CXX object CMakeFiles/tutorial-5.dir/main.cpp.o
[100%] Linking CXX executable tutorial-5
[100%] Built target tutorial-5
Se você encontrar algum erro, por favor, primeiro verifique se você possui a
versão CMake correta (>= v3.5.2) e GCC (>= v5). O programa CMake irá
criar um arquivo makefile para você, depois basta executar o comando
abaixo.
1. Escolha o idioma
A Monero GUI oficial pode ser baixada em
https://getmonero.org/downloads. Uma vez que tenha extraído e aberto o
programa, você será apresentado com uma tela para seleção do idioma:
Idiomas
Se seu idioma não estiver listado acima, fique a vontade para enviar uma
tradução para ajudar aos demais usuários! Após selecionar o idioma, a
carteira irá perguntar se você deseja gerar uma nova semente ou restaurar
uma carteira já existente.
2. Especificar uma opção
A Monero GUI oferece três opções para o tipo da carteira: Mainnet, Testnet
e Stagenet.
Se essa for sua primeira carteira Monero, pressione “criar nova carteira”. O
software do Monero irá gerar uma nova semente para você e lhe mostrar a
semente mnemônica de 25 palavras.
Nova ou Restaurar
Histórico de transações
Histórico de
transações
8.1.4 Prova de pagamento com a carteira GUI
A verificação da prova de pagamento está disponível na GUI através da
opção “Provar/Verificar”. A captura de tela abaixo mostra a ID da transação,
o endereço e a chave da transação do exemplo com Maria e Khan do
Capítulo 2.
Prova de Pagamento
./monero/
./monero/monero-wallet-rpc
./monero/monero-blockchain-import
./monero/monero-blockchain-ancestry
./monero/monero-blockchain-usage
./monero/monero-wallet-cli
./monero/monero-blockchain-depth
./monero/monero-gen-trusted-multisig
./monero/monerod
./monero/monero-blockchain-export
./monero/monero-blockchain-blackball
View key:
9227a05c665f684f5b8fef815cedd8a911b426c9fa07554c70daacf87757b302
**************************************************************
Your wallet has been generated!
To start synchronizing with the daemon, use the "refresh"
command.
Use the "help" command to see the list of available commands.
[...]
Esse tutorial assume que você já configurou uma carteira fria em papel e que
agora está pronto para criar uma carteira “somente leitura” usando a GUI.
1. Abra o programa Monero GUI.
2. Na tela de início, selecione “Restaurar carteira das chaves ou semente
mnemônica”.
3. Edite os campos “Nome da carteira” e “Diretório da carteira” conforme
sua preferência.
4. Marque a opção “Restaurar das chaves”.
5. Insira o endereço público da carteira em papel que você criou.
6. Insira a chave privada de visualização da carteira em papel que você
criou.
7. Deixe o campo da chave privada de gasto em branco!
8. Insira a altura de restauração ou de criação e clique no botão
“Próximo”.
9. Na próxima tela, insira uma senha forte e clique no botão “Próximo”.
10. Na tela seguinte, selecione se deseja conectar-se a um nó local
(recomendado) ou um nó remoto. Se optar pelo nó local, selecione a
pasta que contém sua cópia da blockchain.
11. Na última tela, confirme se os detalhes da carteira estão corretos e abra
a carteira somente leitura!
Agora você poderá ver e confirmar transações que você enviou para sua
carteira fria em papel! Se você deseja testar o processo que acabou de
aprender para se familiarizar, siga os passos acima utizando as informações
da carteira do Fundo Geral de Doações do Monero:
Cada conta tem seu próprio saldo e pode ter vários subendereços associados
a ela. Dado que contas são apenas grupos de subendereços, não existe um
endereço da conta propriamente dito (a não ser que você considere o
primeiro subendereço da conta como o “endereço da conta”).
Assim, uma carteira pode ter várias contas e cada conta pode ter vários
subendereços. Dado que contas e subendereços são gerados de forma
determinística a partir da semente, você só precisa saber sua semente para
restaurar a estrutura de contas e subendereços quando estiver restaurando
uma carteira (embora qualquer rótulo que você tenha dado às contas ou
subendereços precisarão ser anotados separadamente).
Endereço
Quando você envia Monero para alguém, você só precisa de uma
informação: o endereço Monero da pessoa. Um endereço público Monero é
um conjunto de 95 caracteres começando com um “4”.
Air Gap
Um “espaço de ar” (air gap, em inglês) ou air wall (em referência a
“firewall”) é uma medida de segurança aplicada em redes com um ou mais
computadores, usada para garantir que uma rede segura esteja fisicamente
isolada de redes não seguras, como por exemplo, a Internet pública ou uma
rede local insegura.
ASIC
Circuitos integrados de aplicação especifica (ASIC, na sigla em inglês) são,
como o nome já diz, um circuito integrado customizado para um uso
específico, ao invés de serem projetados para uso geral. Por exemplo, um
chip projetado para ser usado em um gravador de voz digital ou um
minerador Bitcoin de alta eficiência são considerados ASICs.
Resistência a ASIC
Resistência a ASIC refere-se às medidas tomadas por algumas criptomoedas
para garantir que seu algoritmo de mineração não seja compatível com estes
equipamentos especializados. Veja os Capítulos 4, 5 e 6 para aprender mais
sobre como a comunidade Monero ativamente garante que nosso algoritmo
CryptoNight seja acessível somente para mineradores com CPU e GPU.
Bitmonero
BitMonero, antigo nome do Projeto Monero, veja o Capítulo 1. Algumas
referências antigas ainda existem; por exemplo, os logs e a blockchain são
salvos na pasta ~/.bitmonero por padrão.
Bloco
Um bloco é um contêiner de transações, com um bloco sendo adicionado à
blockchain a cada 2 minutos em média.
Blockchain
Uma blockchain é um banco de dados distribuído que cresce constantemente
com o registro de todas as transações que aconteceram em determinada
criptomoeda. Comumente, refere-se a esse banco de dados como registo,
pois os dados contém uma grande lista de transação que já ocorreram. No
Monero, essas transações são agrupadas em blocos a cada 2 minutos (em
média), e todos os mineradores e nós na rede possuem cópias desses blocos.
Bulletproofs
Bulletproofs são um novo sistema matemático para verificar valores
ocultados de transações. As Bulletproofs encolheram o tamanho das
transações em aprox. 80%, reduzindo drasticamente as taxas.
Troco
Monero enviado como parte de uma transação, que retorna para sua conta ao
invés de ir para o destinatário.
Consenso
Consenso descreve uma propriedade de redes distribuídas, como o Monero,
onde a maioria dos participantes seguem as regras e rejeitam participantes
mal-intencionados.
Criptomoeda
Uma moeda digital onde técnicas de encriptação são utilizadas para regular a
geração de unidades de moeda e verificar a transferência de fundos,
normalmente operando independentemente de um banco central.
Assinatura criptográfica
Um método criptográfico para provar a posse de informações, bem como
para provar que a informação não foi modificada depois de assinada.
Chamarizes
Durante a construção de uma transação Monero, o termo “chamariz” se
refere a uma saída (que não pertence ao remetente) que é selecionada na
blockchain de forma pseudoaleatória para servir como mistura para a
assinatura em anel. Ver seção 5.4.3.
Denominações
Uma denominação é uma descrição própria de uma quantidade de
determinada moeda. Ela é, normalmente, uma subunidade dessa moeda. Por
exemplo, tradicionalmente, um centavo é 1/100 “avos” de uma unidade
particular de moeda.
Dificuldade
A dificuldade é um parâmetro da rede que impacta quanto tempo levará para
os mineradores encontrarem novos blocos, aumentando ou diminuindo o
limitar para o valor do hash que precisa ser satisfeito para completar um
bloco. Se mais mineradores juntam-se à rede, a dificuldade aumenta para
evitar que os blocos sejam descobertos muito rapidamente (e o contrário,
caso a taxa de hash da rede diminua).
Encriptação
Em criptografia, encriptação é o processo de codificar mensagens ou
informações de uma forma que somente partes autorizadas consigam
decodificar e ler o que foi enviado. Encriptação por si só não evita a
interceptação, mas impede o acesso ao conteúdo por parte do interceptador.
Taxas
Toda transação inclui uma taxa que é coletada por qualquer minerador que
inclua a transação em um bloco completado. Usuários que tenham
transações de alta prioridade podem anexar uma taxa relativamente alta para
incentivar os mineradores a confirmar sua transação mais rapidamente.
Fungibilidade
Em economia, fungibilidade é uma propriedade de bens ou produtos cujas
unidades individuais sejam essencialmente intercambiáveis. Criptomoedas
com registros transparentes carecem dessa propriedade, já que cada moeda
tem um histórico único e é armazenado publicamente. O Monero alcança a
fungibilidade combinando tecnologias de privacidade para evitar que
informações sensíveis sejam armazenadas na blockchain, fazendo assim com
que todos moneroj sejam indistinguíveis.
Blocos Fluffy
Um bloco é composto por um cabeçalho e transações. Blocos Fluffy (Fluffy
Blocks) contém somente um cabeçalho, uma lista de índices de transações e
quaisquer transações que o nó recebendo o bloco ainda não tenha. Esse tipo
de bloco economiza largura de banda, porque os nós talvez já tenham
informações sobre a maioria ou todas as transações em um bloco e eles não
precisam recebê-las novamente.
I2P
A rede I2P oferece elevada proteção à privacidade para comunicações na
Internet. Muitas atividades que poderiam prejudicar sua privacidade na
Internet pública podem ser conduzidas anonimamente dentro da I2P.
Endereço integrado
Um endereço integrado é um endereço combinado com uma ID do
pagamento criptografada de 64 bits. Um endereço integrado possui 106
caracteres.
Kovri
Kovri é uma implementação em C++ da rede I2P. O Kovri está atualmente
em desenvolvimento ativo e ainda não foi integrado com o Monero. Quando
o Kovri for integrado em seu nó Monero, suas transações serão ainda mais
seguras do que antes.
Mineração
Processo de computar criptograficamente uma prova matemática para um
bloco, este contendo um número de transações, que são posteriormente
adicionadas à blockchain.
Monero
A criptomoeda mais privada.
Nó
Um dispositivo na internet executando o software Monero, com uma cópia
completa da blockchain do Monero, ativamente ajudando a rede.
OpenAlias
De maneira simples, OpenAlias é um registro DNS TXT em uma FQDN
(nome de domínio completamente qualificado). A Equipe Core do Monero
lançou um padrão chamado OpenAlias que permite endereços muito mais
legíveis para humanos e que “contorna” o triangulo de Zooko. A OpenAlias
pode ser utilizada por qualquer criptomoeda e já está implementada no
Monero.
ID do pagamento
ID do pagamento é um anexo arbitrário e opcional da transação que consiste
de 32 bytes (64 caracteres hexadecimais) ou 8 bytes (no caso de endereços
integrados).
Comprometimento de Pedersen
Comprometimentos de Pedersen são algoritmos criptográficos que permitem
a quem está provando comprometer-se com um certo valor sem revelá-lo ou
sem poder alterá-lo.
Quando você gasta Monero, o valor das entradas que você está gastando e o
valor das saídas que você está enviando são criptografados e opacos a
qualquer um, exceto o destinatário de cada umas das saídas.
Comprometimentos de Pedersen permitem que você envie Monero sem
revelar o valor das transações. Eles também tornam possível que pessoas
verifiquem se as transações na blockchain são válidas e se não estão criando
Monero do nada.
Contanto que o valor das saídas criptografadas criadas (que incluem uma
saída para o destinatário e uma saída na forma de troco para o remetente) e a
taxa não criptografada da transação sejam iguais à soma das entradas que
estão sendo gastas, a transação é legítima e pode se verificar que ela não está
criando Monero do nada.
Comprometimentos de Pedersen significam que as somas podem ser
verificadas como sendo iguais, mas o valor em Monero de cada uma das
somas e o valor em Monero das entradas e saídas individuais são
indeterminadas. Comprometimentos de Pedersen também significam que
mesmo a razão entre uma entrada e outra, ou uma saída e outra são
indeterminadas.
Não fica claro quais entradas estão realmente sendo gastas, já que as
assinaturas em anel listam tanto as entradas reais quanto as entradas
chamarizes. Portanto, você não sabe realmente quais comprometimentos de
Pedersen de entrada precisam ser somados. E isso não é um problema,
porque a assinatura em anel RingCT só precisa provar que para uma
combinação de entradas, as saídas são iguais à soma das entradas. Por
motivos matemáticos, isso é impossível de forjar.
Assinaturas em anel
Em criptografia, uma assinatura em anel é um tipo de assinatura digital que
pode ser realizada por qualquer membro de um grupo de usuários onde cada
um possui chaves. Portanto, a mensagem assinada com uma assinatura em
anel é endossada por alguém em um grupo particular de pessoas. Uma das
propriedades da segurança de uma assinatura em anel é que é
computacionalmente inviável determinar qual chave dos membros do grupo
foi utilizada para produzir a assinatura.
Por exemplo, uma assinatura em anel poderia ser usada para prover uma
assinatura anônima de “um oficial de alto escalão da Casa Branca”, sem
revelar qual oficial assinou a mensagem. Assinaturas em anel são boas para
essa aplicação, porque o anonimato de uma assinatura em anel não pode ser
revocado, e porque o grupo para uma assinatura em anel pode ser
improvisado (não requer uma configuração anterior).
Tamanho do anel
Tamanho do anel refere-se ao número total de possíveis signatários em um
assinatura em anel. Se um tamanho de anel de 11 for selecionado em uma
determinada transação, isso significa que existem 10 saídas chamarizes além
da sua saída “real”.
Endereço sigiloso
Endereços sigilosos são uma parte importante da privacidade inerente ao
Monero. Eles permitem e requerem que o remetente crie, em nome do
destinatário, endereços aleatórios de uso único para cada transação. O
destinatário pode publicar somente um endereço, e ainda ter todos seus
pagamentos recebidos indo para endereços únicos na blockchain, os quais
não podem ser associados de volta com o endereço publicado nem com
qualquer endereço de outras transações. Ao usar endereços sigilosos,
somente o remente e o destinatário conseguem determinar para onde um
pagamento foi enviado.
Emissão em cauda
As recompensas dos blocos do Monero nunca chegarão a zero. Elas cairão
gradualmente até atingir a emissão em causa no final de Maio de 2022.
Neste ponto, as recompensas serão fixadas em 0,6 XMR por bloco.
Transações
Um contêiner assinado criptograficamente que detalha a transferência de
Monero para um destinatário (ou destinatários).
Carteira
Uma conta Monero, ou carteira, armazena as informações necessárias para
enviar e receber moneroj. Além disso, o software da carteira Monero
mantém um histórico privado das suas transações e permite que você assine
mensagens criptograficamente. Ela também inclui o software de mineração
do Monero e uma agenda de endeços.
Mastering Monero
1. Prefácio
1. Sobre o autor
2. Como este livro está organizado
2. Capítulo 1
3. Introdução às criptomoedas e ao Monero
1. 1.1 Pagamento através de bancos
2. 1.2 Introdução às blockchains
1. 1.2.1 O que é uma blockchain?
2. 1.2.2 Benefícios da blockchain
3. 1.2.3 Problemas da blockchain
3. 1.3 Apresentando o Monero
1. 1.3.1 Princípios do Monero
2. 1.3.2 “Aplicações” do Monero na vida real
3. 1.3.3 Monero: comunidade e software descentralizados de
código aberto
4. 1.3.4 História do Monero
5. 1.3.5 Discussão ética
4. Capítulo 2
5. Primeiros passos: receber, guardar e enviar Monero
1. 2.1 O que é uma carteira?
2. 2.2 Selecionando a(s) melhore(s) carteira(s) para suas necessidades
1. 2.2.1 Carteiras de software e para dispositivos móveis
2. 2.2.2 Carteira de hardware
3. 2.2.3 Carteiras em papel
4. 2.2.4 Carteiras web
5. 2.2.5 Carteiras frias
6. 2.2.6 Links para as carteiras Monero
7. 2.2.7 Conectando-se a um nó remoto (opcional)
3. 2.3 Usando Monero
1. 2.3.1 Recebendo Monero
2. 2.3.2 Enviando Monero
3. 2.3.3 Prova de pagamento
4. 2.4 Segurança operacional
1. 2.4.1 Nunca diga quanto Monero você possui
2. 2.4.2 Mantenha sua semente segura
3. 2.4.3 Precauções com transações
4. 2.4.4 Segurança em relação às corretoras
5. 2.5 “Primeiros passos” para negócios
1. 2.5.1 Monero é ideal para comerciantes
2. 2.5.2 Ferramentas intuitivas para aceitar Monero
6. Capítulo 3
7. Como o Monero funciona
1. 3.1 Transação e o Registro
2. 3.2 Panorama das tecnologias de privacidade
1. 3.2.1 Transações confidenciais em anel (RingCT)
2. 3.2.2 Endereços sigilosos (de uso único)
3. 3.2.3 Assinaturas em anel
4. 3.2.4 Kovri e análise de tráfego
3. 3.3 Comentários finais
8. Capítulo 4
9. A Rede Monero
1. 4.1 Anatomia simplificada de um bloco
2. 4.2 Os nós são a base da rede
1. 4.2.1 Nós retransmitem dados da rede aos pares
2. 4.2.2 Nós armazenam a blockchain
3. 4.2.3 “Nós locais” versus “nós remotos”
3. 4.3 Mineradores criam novos blocos
1. 4.3.1 Mineradores adicionam novos blocos à cadeia mais
longa
2. 4.3.2 Uma tarefa difícil garante estabilidade e imparcialidade
3. 4.3.3 Os “táxis” do Monero utilizam um desafio difícil para
garantir a imparcialidade
4. 4.3.4 Os mineradores são pagos pelo seu serviço
4. 4.4 Sistemas prova de trabalho
1. 4.4.1 Benefícios
2. 4.4.2 A “dificuldade” ajusta o tempo entre blocos
3. 4.4.3 O algoritmo CryptoNight
4. 4.4.4 Breve nota sobre provas de trabalho alternativas
5. 4.5 Conceitos criptográficos para provas de trabalho
1. 4.5.1 Hashes (conceito geral)
2. 4.5.2 Nonces (conceito geral)
6. 4.6 Resumo sobre o conceito de prova de trabalho
10. Capítulo 5
11. Uma imersão profunda no Monero e em criptografia
1. 5.1 Fundamentos de matemática
1. 5.1.1 Divisão Euclidiana (A/B)
2. 5.1.2 Números primos
3. 5.1.3 Aritmética modular
4. 5.1.4 Representação dos inteiros
5. 5.1.5 Curvas elípticas
2. 5.2 Fundamentos de criptografia
1. 5.2.1 Criptografia simétrica e assimétrica
2. 5.2.2 Hashing
3. 5.2.3 Gerador de números pseudoaleatórios do Monero
(PRNG)
3. 5.3 Gerando chaves e endereços Monero
1. 5.3.1 Escolhendo uma semente
2. 5.3.2 Derivação das chaves
3. 5.3.3 Geração de endereços
4. 5.3.4 Subendereços
5. 5.3.5 Outros métodos para derivação de chaves
4. 5.4 As tecnologias de privacidade
1. 5.4.1 Endereço sigiloso
2. 5.4.2 Transações confidenciais em anel
3. 5.4.3 Assinaturas em anel
4. 5.4.4 Recursos adicionais
5. 5.5 A blockchain do Monero
1. 5.5.1 Lightning Memory Mapped Database
2. 5.5.2 A estrutura de um bloco
3. 5.5.3 A economia da mineração
4. 5.5.4 Bulletproofs
6. 5.6 Fungibilidade
12. Capítulo 6
13. Comunidade e contribuição
1. 6.1 Cultura da comunidade
1. 6.1.1 Princípios de transparência
2. 6.1.2 Diversas mentes brilhantes trabalham no Monero
2. 6.2 Cultura do código
1. 6.2.1 Crie uma pull request com melhorias
2. 6.2.2 Etiqueta quanto aos patches
3. 6.2.3 Orientações gerais
4. 6.2.4 Repositórios para o Monero
5. 6.2.5 Lista de e-mail de comunicados sobre o Monero
(Monero-announce)
14. 6.3 Introdução ao desenvolvimento do Monero
1. 6.3.1 Baixando o código-fonte do Monero
2. 6.3.2 Dependências
3. 6.3.3 Instrução de geração
4. 6.3.4 Solução de problemas de geração
5. 6.3.5 Gerando a Interface Gráfica do Usuário do software Monero
15. Capítulo 7
16. Integração do Monero para desenvolvedores
1. 7.1 OpenAlias: endereços convenientes em texto (para humanos)
2. 7.2 Monero_URI: informações convenientes em texto (para
computadores)
3. 7.3 Monero RPC
1. 7.3.1 Inicialização e configuração (configurar e proteger)
2. 7.3.2 Formato JSON RPC
3. 7.3.3 Exemplos de chamadas RPC
4. 7.4 A integração do Monero na prática (Tutoriais em Python e
C++)
1. 7.4.1 Tutorial 1 – Obter seu saldo
2. 7.4.2 Tutorial 2 – Como gerar um endereço pseudoaleatório
3. 7.4.3 Tutorial 3 – Gerador de endereços “customizados”
4. 7.4.4 Tutorial 4 – Como criar um endereço sigiloso
5. 7.5 API C++ do Monero
1. 7.5.1 Bibliotecas do Monero
2. 7.5.2 Primeiros passos com C++
3. 7.5.3 Tutorial 5 – Recuperando todas as chaves a partir da
chave privada de gasto
17. Capítulo 8
18. Guia da carteira e dicas para resolução de problemas
1. Instruções específicas para a Monero GUI oficial
1. 1. Escolha o idioma
2. 2. Especificar uma opção
3. 3. Anote sua semente
4. 4. Insira uma senha
5. 5. Baixe a blockchain do Monero
2. E então… Bem-vindo à Monero GUI!
1. 8.1.2 Recebendo Monero com a carteira GUI
2. 8.1.3 Enviando Monero com a carteira GUI
3. Histórico de transações
4. 8.1.4 Prova de pagamento com a carteira GUI
3. 8.2 Instruções específicas para a carteira Monero CLI
1. 8.2.1 Configurando uma carteira com a CLI
2. 8.2.2 Recebendo Monero
3. 8.2.3 Enviando Monero
4. 8.2.4 Prova de pagamento
4. 8.3 Resolução de problemas comuns
1. 8.3.1 Problema: Transferi moneroj para minha carteira mas
meu saldo ainda está em 0 XMR.
2. 8.3.2 Problema: Minha carteira GUI parece lenta ou trava
toda hora
5. 8.4 Como adicionar uma carteira somente leitura
19. Glossário
1. Conta
2. Endereço
3. Air Gap
4. ASIC
5. Resistência a ASIC
6. Bitmonero
7. Bloco
8. Blockchain
9. Bulletproofs
10. Troco
11. Transação base (ou coinbase)
12. Interface de linha de comando
13. Consenso
14. Criptomoeda
15. Assinatura criptográfica
16. Chamarizes
17. Denominações
18. Dificuldade
19. Encriptação
20. Taxas
21. Fungibilidade
22. Blocos Fluffy
23. I2P
24. Endereço integrado
25. Kovri
26. Mineração
27. Semente mnemônica
28. Monero
29. Nó
30. OpenAlias
31. ID do pagamento
32. Comprometimento de Pedersen
33. Assinaturas em anel
34. Tamanho do anel
35. Endereço sigiloso
36. Emissão em cauda
37. Transações
38. Carteira
1. Title Page