Desenvolvimento

3 out, 2017

Uma proposta para endereços de criptomoeda no DNS

Publicidade

Agora já está bem claro que a ideia de uma criptomoeda provavelmente não vai embora. Ela pode não ser Bitcoin ou Litecoin, talvez não tenha o mesmo valor que hoje, mas o conceito de criptomoeda está aqui para ficar: dinheiro digital.

Assim como o começo dos endereços IP, o uso de raw era bom no início. Mas, com a criptografia, você obtém longas strings hexadecimais das quais realmente ninguém consegue se lembrar de cor. Isso está longe de ser amigável.

É como tentar lembrar que 2a03:a800:a1:1952::ff é o endereço para o meu site. Isso não funciona muito bem, não é? É muito mais fácil dizer ma.ttias.be do que a representação oculta do IPv6.

Eu acho que precisamos de algo semelhante para criptomoedas. Algo independente e relativamente seguro. Então, aqui está a minha proposta, que eu elaborei no carro a caminho de casa.

Exemplo: criptomoeda no DNS

Aqui está o exemplo mais simples que posso dar:

$ dig ma.ttias.be TXT | sort
ma.ttias.be.	3600	IN    TXT   "ico:10 btc:1AeCyEczAFPVKkvausLSQWP1jcqkccga9m"
ma.ttias.be.	3600	IN    TXT   "ico:10 ltc:Lh1TUmh2WP4LkCeDTm3kMX1E7NQYSKyMhW"
ma.ttias.be.	3600	IN    TXT   "ico:20 eth:0xE526E2Aecb8B7C77293D0aDf3156262e361BfF0e"
ma.ttias.be.	3600	IN    TXT   "ico:30 xrp:rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv"

Os endereços de criptomoeda são publicados como registros TXT em um domínio de sua escolha. Deseja receber um pagamento? Diga simplesmente “envie para ma.ttias.be”, o cliente resolverá esse registro TXT e os endereços que acompanham, e usará o campo prioritário como diretriz para escolher qual endereço escolher primeiro.

Considere registros MX, mas implementados como TXT. Quanto menor a prioridade, mais preferencial eles são.

O formato TXT explicado

Um formato TXT pode conter praticamente qualquer coisa, por isso precisa de alguma padronização para que isso funcione. Aqui está a minha proposta:

ico:[priority] space [currency]:[address]

Vamos escolher o primeiro resultado como um exemplo e derrubá-lo.

$ dig ma.ttias.be TXT | sort | head -n 1
ma.ttias.be.	3600	IN    TXT   "ico:10 btc:1AeCyEczAFPVKkvausLSQWP1jcqkccga9m"

Isso é traduzido para:

  • ico:: um prefixo no registro TXT para denotar que isso é moeda, bem como SPF conhece o prefixo “v=spv1”. Esse é um valor fixo.
  • 10: a prioridade. Quanto menor, maior é a preferência.
  • btc: moeda preferida é btc ou Bitcoin.
  • 1AeCyEczAFPVKkvausLSQWP1jcqkccga9m: o endereço btc para aceitar os pagamentos.

Um formato simples e versátil.

A prioridade permite implementações round robin, caso você deseje diversificar seu portfólio. A adição de múltiplas criptomoedas permite ao remetente a liberdade de escolher qual moeda ele/ela prefere, enquanto ainda honra sua prioridade.

Tecnicamente, publiquei dois registros com uma prioridade de 10. Cabe ao remetente determinar qual moeda ele/ela prefere se estiver disponível para eles. Se não estiver, eles podem deslocar a cadeia e tentar outros endereços publicados.

Isso significa que apenas os endereços nos quais você deseja receber a moeda devem ser postados como registros DNS.

DNSSEC necessário

Para evitar o envenenamento de cache do DNS ou outros ataques man-in-the-middle, o DNSSEC deveria ser um forte requisito para garantir a integridade. Isso não deveria ser opcional.

Se as pessoas inteligentes acabarem por implementar algo assim, uma solução GPG/PKI adicional de pode ser acrescentada para maior segurança, assinando os endereços mais uma vez.

Agnóstico de moeda

Essa não é uma solução para Bitcoin, Litecoin ou Ripple. É uma solução para todas elas. E todas as novas moedas futuras.

Isso é totalmente agnóstico de moeda e pode ser usado para qualquer moeda virtual.

Múltiplos inquilinos

Se você quiser vários usuários no mesmo domínio, poderá resolver isso via subdomínios. Ou seja, “john.domain.tld” e “mary.domain.tld”.

Isso torna o formato do registro TXT simples e ele usa registros DNS básicos para delegação de contas.

Por que não um registro de recursos dedicado?

Pelo mesmo motivo, o registro de recursos do SPF desapareceu e foi substituído por uma alternativa TXT: disponibilidade.

Todo servidor e cliente DNS já entende registros TXT. Se tivermos de esperar pelos dois servidores, clientes e provedores para implementar algo como um registro de recurso ICO, levará anos. Basta olhar para o estado atual dos registros CAA, apenas um punhado de provedores oferecem, mesmo que isso já seja uma CA obrigatória.

Já existem esquemas de nomeação mais simples para criptografia!

Já existem esquemas de nomeação mais simples para criptografia!

Tecnicamente, sim, mas todos têm uma enorme falha: você precisa confiar no sistema de outra pessoa.

BitAlias, onename, ens para ethereum, okTurtles, e todos eles criam sobre o seu próprio sistema personalizado.

Mas acontece que já temos um sistema de tradução de nomes chamado DNS – seria muito melhor implementar uma variante de criptomoeda legível no DNS do que no sistema fechado de outra pessoa.

O validador regex

Com o exemplo dado acima, ele pode ser facilmente validado com o seguinte regex:

ico:([0-9]+) ([a-z]{3,}):([a-zA-Z0-9]+)

E isso se traduz para:

  • grupo #1: a prioridade.
  • grupo #2: a moeda.
  • grupo #3: o endereço.

Um validador completo com o cliente dig DNS seria traduzido para:

$ dig ma.ttias.be TXT | sort | grep -P 'ico:([0-9]+) ([a-z]{3}):([a-zA-Z0-9]+)'
ma.ttias.be.	3600	IN    TXT   "ico:10 btc:1AeCyEczAFPVKkvausLSQWP1jcqkccga9m"
ma.ttias.be.	3600	IN    TXT   "ico:10 ltc:Lh1TUmh2WP4LkCeDTm3kMX1E7NQYSKyMhW"
ma.ttias.be.	3600	IN    TXT   "ico:20 eth:0xE526E2Aecb8B7C77293D0aDf3156262e361BfF0e"
ma.ttias.be.	3600	IN    TXT   "ico:30 xrp:rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv"

Agora, quem vai tornar isso um RFC? Eu certamente não vou, já tenho muitas coisas para fazer.

***

Este artigo é de Mattias Geniar. A tradução do artigo foi feita pela Redação iMasters com autorização, e você pode acompanhar o artigo em inglês no link: https://ma.ttias.be/proposal-cryptocurrency-addresses-dns/