Você deve estar se perguntando que raios são todos esses termos do titulo. Recentemente passei por um episódio que me fez perceber o quanto é importante entender como funciona uma wallet e manter de forma segura a minha chave de acesso.
Bem, infelizmente eu perdi acesso a uma de minhas carteiras que possui uma quantidade bem relevante de criptos. Mas como isso aconteceu? Simplesmente o Hardware Wallet, por qualquer motivo, perdeu as configurações, resetou e a frase de segurança que anotei em um papel está errada. História triste, mas que já aconteceu com várias pessoas pelo mundo, não é mesmo?
Cold wallet
Cold Wallet é o termo utilizado para carteiras que não são tão utilizadas no dia a dia. Normalmente são “carteiras físicas” (Hardwallets), como as da foto do post. Até antes de acontecer todo o incidente, eu acreditava que as informações da carteira eram armazenadas dentro do dispositivo e que a frase de segurança servia apenas para recuperar a carteira em caso de falha do mesmo. Na realidade é ao contrario, a carteira armazena o código de acesso, que é gerado no primeiro acesso, normalmente de 12 a 24 palavras aleatórias. O nome desse sistema é Mnemonic, ele existe para facilitar o registro da sua carteira privada e essas palavras seguem um padrão chamado BIP39.
Utilizando um terminal CMD ou Linux, existem diversas formas de criar uma carteira. Extensões como a Metamask realizam o mesmo processo de forma mais simples e prática.
Ghost wallet
O termo não é tão popular, mas seu entendimento é bem simples: são carteiras que foram criadas de forma a nunca ser possível identificar seus portadores. O processo é relativamente simples, e mesmo uma pessoa que não tenha tanto conhecimento assim em tecnologia consegue. Na prática, uma carteira é composta por duas chaves, uma privada, responsável pela assinatura das transações e uma publica, que recebe os saldos na Blockchain e fica exposta. Uma chave não possui correlação direta com outra. Uma chave privada é um conjunto de caracteres humanamente impossível de descorar, e tentar anotar em um papel tem o risco alto de erro. Veja, utilizando o script Mnemonic to private key vamos gerar uma carteira aleatória:
Observe que primeiro foi gerado o Mnemoic, com 12 palavras, em seguida temos a chave pública e, logo após, a chave privada. Utilizando essas 12 palavras é possível recriar a private e public key, veja:
Pegando essa chave privada e importando para a Metamask, podemos utilizá-la normalmente como uma carteira.
Ok, mas se com simples passos é possível criar ou recuperar uma carteira usando o conjunto de 12 a 24 palavras, não seria possível criar um brute force e gerar todas as carteiras de cripto do mundo? Em teoria, sim. Mas vamos entender isso mais a fundo.
BIP39
No Github do Bitcoin é possível ver a lista de BIPs. Esse repositório possui uma série de diagramas e listas de dados utilizados para construir partes do ecossistema do Bitcoin. No caso especifico do BIP39 temos a lista de palavras possíveis em um Mnemoic, em vários idiomas. No site da Ledger é possível ver que o BIP39 é utilizado como padrão para geração das frases de segurança da carteira. Logo, é possível importar uma carteira Trezor ou Ledger em qualquer sistema que utiliza o padrão BIP39, como a Metamask.
Analisando os arquivos do BIP39 é possível verificar a existência de 2048 palavras. Parece pouco, mas estamos falando de 12^2048. Para quem entende um pouco de matemática, estamos falando desse pequeno número de possibilidades: 1,4561023592464101529830030778643e+2210. Na tentativa de recuperar minha carteira, e reduzindo bastante a quantidade de possibilidades já que sabia mais ou menos as palavras utilizadas, criei um script simples de brute force. Ele roda a uma velocidade média de 1000 hash por segundo, isso é, gera carteiras e as valida para saber se alguma possui a mesma public key da minha Cold Wallet. Em 2 dias rodando, já são mais de 87 milhões de carteiras geradas e testadas e, mesmo assim, não passou de 10% do total. Em média, a espera para tentar encontrar minha carteira vai demorar cerca de 20 dias, isso partindo de um grupo limitados de palavras. É claro que seria possível otimizar muito o script, utilizar múltiplos computadores para agilizar e até criar shaders de GPU para potencializar a quantidade de hash, entre outras coisas. Mesmo assim, com a capacidade de processamento dos hardwares atuais, levaria décadas para mapear todas as possibilidades de carteira, e nem sei se existira uma forma de armazenar todas elas. Por isso que, na minha visão, o valor das cripto está além da compreensão do usuário convencional.