Agradecimentos especiais a Itamar Lesuisse da Argent e Daniel Wang da Loopring pelo feedback.
Um dos grandes desafios em tornar os aplicativos de criptomoeda e blockchain utilizáveis para usuários comuns é a segurança: como evitamos que os fundos dos usuários sejam perdidos ou roubados?
Perdas e roubos são um problema sério, muitas vezes custando aos usuários inocentes da blockchain milhares de dólares ou mesmo, em alguns casos, a maior parte de todo o seu patrimônio líquido.
Muitas soluções foram propostas ao longo dos anos: carteiras de papel, carteiras de hardware e minha favorita: carteiras multisig .
E, de fato, eles levaram a melhorias significativas na segurança. No entanto, todas essas soluções sofreram com vários defeitos - às vezes fornecendo muito menos proteção extra contra roubo e perda do que o realmente necessário, às vezes sendo incômodas e difíceis de usar, levando a uma adoção muito baixa e, às vezes, ambas.
Mas, recentemente, surgiu uma alternativa melhor: um novo tipo de carteira de contrato inteligente chamada carteira de recuperação social .
Essas carteiras podem potencialmente fornecer um alto nível de segurança e uma usabilidade muito melhor do que as opções anteriores, mas ainda há um caminho a percorrer antes que elas possam ser implantadas de maneira fácil e ampla.
Esta postagem abordará o que são carteiras de recuperação social, por que são importantes e como podemos e devemos avançar para uma adoção muito mais ampla delas em todo o ecossistema.
Os problemas de segurança da carteira têm sido uma pedra no sapato do ecossistema blockchain quase desde o início.
As perdas e roubos de criptomoedas eram desenfreados mesmo em 2011, quando o Bitcoin era quase a única criptomoeda existente; de fato, em meu papel pré-Ethereum como cofundador e redator da Bitcoin Magazine , escrevi um artigo inteiro detalhando os horrores dos hacks, perdas e roubos que já estavam acontecendo na época.
Aqui está uma amostra:
Ontem à noite, por volta das 21h PDT, cliquei em um link para ir para CoinChat[.]freetzi[.]com - e fui solicitado a executar o java. Eu fiz (pensando que este era um chatom legítimo), e nada aconteceu. Fechei a janela e não pensei nisso. Abri minha carteira bitcoin-qt aproximadamente 14 minutos depois e vi uma transação que NÃO aprovei ir para a carteira 1Es3QVvKN1qA2p6me7jLCVMZpQXVXWPNTC para quase toda a minha carteira...
As perdas dessa pessoa foram de 2,07 BTC, no valor de $ 300 na época e mais de $ 70.000 hoje. Aqui está mais um:
Em junho de 2011, o membro do Bitcointalk "allinvain" perdeu 25.000 BTC (no valor de $ 500.000 na época) depois que um intruso desconhecido de alguma forma obteve acesso direto ao seu computador. O invasor conseguiu acessar o arquivo wallet.dat do allinvain e rapidamente esvaziá-lo – enviando uma transação do próprio computador do allinvain ou simplesmente carregando o arquivo wallet.dat e esvaziando-o em sua própria máquina.
Em valores atuais, isso representa uma perda de quase um bilhão de dólares . Mas o roubo não é a única preocupação; também há perdas por perder as chaves privadas. Aqui está Stefan Thomas:
O desenvolvedor do Bitcoin, Stefan Thomas, tinha três backups de sua carteira – um pendrive criptografado, uma conta do Dropbox e uma máquina virtual Virtualbox. No entanto, ele conseguiu apagar dois deles e esquecer a senha do terceiro, perdendo para sempre o acesso a 7.000 BTC (no valor de $ 125.000 na época). A reação de Thomas: "[Estou] bastante dedicado a criar clientes melhores desde então."
Uma análise do ecossistema Bitcoin sugere que 1.500 BTC podem ser perdidos todos os dias - mais de dez vezes mais do que os usuários de Bitcoin gastam em taxas de transação e, ao longo dos anos, somando até 20% do suprimento total .
As histórias e os números apontam para a mesma verdade inescapável: a importância do problema de segurança da carteira é grande e não deve ser subestimada .
É fácil ver as razões sociais e psicológicas pelas quais a segurança da carteira é fácil de subestimar: as pessoas naturalmente se preocupam em parecer descuidadas ou burras na frente de um público sempre crítico, e muitas guardam para si mesmas suas experiências com seus fundos sendo hackeados. A perda de fundos é ainda pior, pois há um sentimento generalizado (embora, na minha opinião, muito incorreto) de que "não há ninguém para culpar além de você".
Mas a realidade é que todo o objetivo da tecnologia digital , blockchains incluídos, é tornar mais fácil para os humanos se envolverem em tarefas muito complicadas sem ter que exercer um esforço mental extremo ou viver com medo constante de cometer erros.
Um ecossistema cuja única resposta para perdas e roubos é uma combinação de tutoriais de 12 passos, meias medidas não muito seguras e o não tão ocasional semi-sarcástico "desculpe pela sua perda" terá dificuldade em obter ampla adoção.
Portanto, soluções que reduzem a quantidade de perdas e roubos ocorridos, sem exigir que todos os usuários de criptomoeda transformem a segurança pessoal em um hobby em tempo integral, são altamente valiosas para o setor.
As carteiras de hardware costumam ser apontadas como a melhor tecnologia da categoria para gerenciamento de fundos de criptomoedas.
Uma carteira de hardware é um dispositivo de hardware especializado que pode ser conectado ao seu computador ou telefone (por exemplo, através de USB) e que contém um chip especializado que só pode gerar chaves privadas e assinar transações.
Uma transação seria iniciada em seu computador ou telefone, deve ser confirmada na carteira de hardware antes de ser enviada. A chave privada permanece em sua carteira de hardware, portanto, um invasor que invade seu computador ou telefone não pode drenar os fundos.
As carteiras de hardware são uma melhoria significativa e certamente teriam protegido a vítima da sala de bate-papo Java, mas não são perfeitas. Vejo dois problemas principais com carteiras de hardware:
Ataques à cadeia de suprimentos : se você comprar uma carteira de hardware, estará confiando em vários atores envolvidos em sua produção - a empresa que projetou a carteira, a fábrica que a produziu e todos os envolvidos no envio que poderiam tê-la substituído por um falso.
As carteiras de hardware são potencialmente um ímã para esses ataques: a proporção de fundos roubados em relação ao número de dispositivos comprometidos é muito alta.
Para seu crédito, os fabricantes de carteiras de hardware, como a Ledger, colocaram muitas salvaguardas para se proteger contra esses riscos, mas alguns riscos ainda permanecem. Um dispositivo de hardware fundamentalmente não pode ser auditado da mesma forma que um software de código aberto.
Ainda há um único ponto de falha : se alguém roubar sua carteira de hardware logo após ficar atrás de você e pegar você digitando o PIN, eles podem roubar seus fundos.
Se você perder sua carteira de hardware, perderá seus fundos - a menos que a carteira de hardware gere e gere um backup no momento da configuração, mas, como veremos, eles têm seus próprios problemas...
Muitas carteiras, tanto de hardware quanto de software, têm um procedimento de configuração durante o qual produzem uma frase mnemônica , que é uma codificação legível de 12 a 24 palavras da chave privada raiz da carteira. Uma frase mnemônica se parece com isso:
vote dance type subject valley fall usage silk essay lunch endorse lunar obvious race ribbon key already arrow enable drama keen survey lesson cruel
Se você perder sua carteira, mas tiver a frase mnemônica, poderá inseri-la ao configurar uma nova carteira para recuperar sua conta, pois a frase mnemônica contém a chave raiz a partir da qual todas as outras chaves podem ser geradas.
Frases mnemônicas são boas para proteção contra perda, mas não fazem nada contra roubo. Pior ainda, eles adicionam um novo vetor para roubo: se você tiver a combinação padrão de carteira de hardware + backup mnemônico, alguém que roubar sua carteira de hardware + PIN ou seu backup mnemônico poderá roubar seus fundos.
Além disso, manter uma frase mnemônica e não jogá-la fora acidentalmente é em si um esforço mental nada trivial.
Os problemas com roubo podem ser amenizados se você dividir a frase ao meio e dar a metade para o seu amigo, mas (i) quase ninguém realmente promove isso, (ii) há problemas de segurança, como se a frase fosse curta (128 bits) então um atacante sofisticado e motivado que rouba uma peça pode ser capaz de usar força bruta em todas as \(2^{64}\) combinações possíveis para encontrar a outra, e (iii) isso aumenta ainda mais a sobrecarga mental.
O que precisamos é de um design de carteira que satisfaça três critérios principais:
Nenhum ponto único de falha : não há uma única coisa (e idealmente, nenhuma coleção de coisas que viajam juntas) que, se roubada, pode dar a um invasor acesso aos seus fundos ou, se perdida, pode negar o acesso aos seus fundos.
Baixa sobrecarga mental : tanto quanto possível, não deve exigir que os usuários aprendam novos hábitos estranhos ou exerçam esforço mental para sempre lembrar de seguir certos padrões de comportamento.
Máxima facilidade de transação : a maioria das atividades normais não deve exigir muito mais esforço do que em carteiras regulares (por exemplo, Status, Metamask...)
A melhor tecnologia da categoria para resolver esses problemas em 2013 era multisig. Você pode ter uma carteira com três chaves, onde quaisquer duas delas são necessárias para enviar uma transação.
Esta tecnologia foi originalmente desenvolvida dentro do ecossistema Bitcoin, mas excelentes carteiras multisig (por exemplo, veja Gnosis Safe ) agora também existem para Ethereum.
As carteiras multisig têm sido muito bem-sucedidas dentro das organizações: a Ethereum Foundation usa uma carteira multisig 4 de 7 para armazenar seus fundos , assim como muitas outras organizações no ecossistema Ethereum.
Para uma carteira multisig manter os fundos de um indivíduo , o principal desafio é: quem detém os fundos e como as transações são aprovadas? A fórmula mais comum é alguma variante de "duas chaves facilmente acessíveis, mas separadas, mantidas por você (por exemplo, laptop e telefone) e uma terceira mais segura, mas menos acessível, um backup, mantido offline ou por um amigo ou instituição".
Isso é razoavelmente seguro: não há um único dispositivo que possa ser perdido ou roubado que o leve a perder o acesso aos seus fundos. Mas a segurança está longe de ser perfeita: se você pode roubar o laptop de alguém, muitas vezes não é tão difícil roubar o telefone também.
A usabilidade também é um desafio, já que toda transação agora requer duas confirmações com dois dispositivos.
Isso nos leva ao meu método preferido para garantir uma carteira: recuperação social. Um sistema de recuperação social funciona da seguinte forma:
Existe uma única "chave de assinatura" que pode ser usada para aprovar transações
Existe um conjunto de pelo menos 3 (ou um número muito maior) de "guardiões", dos quais a maioria pode cooperar para alterar a chave de assinatura da conta.
A chave de assinatura tem a capacidade de adicionar ou remover guardiões, embora somente após um atraso (geralmente de 1 a 3 dias).
Em todas as circunstâncias normais, o usuário pode simplesmente usar sua carteira de recuperação social como uma carteira normal, assinando mensagens com sua chave de assinatura para que cada transação assinada possa ser executada com um único clique de confirmação, como faria em uma carteira "tradicional" como a Metamask .
Se um usuário perder sua chave de assinatura, é quando a funcionalidade de recuperação social entrará em ação. O usuário pode simplesmente entrar em contato com seus responsáveis e pedir que assinem uma transação especial para alterar a chave pública de assinatura registrada no contrato da carteira para uma nova .
Isso é fácil: eles podem simplesmente acessar uma página da Web como security.loopring.io , entrar, ver uma solicitação de recuperação e assiná-la. Tão fácil para cada guardião quanto fazer uma troca Uniswap.
Existem muitas escolhas possíveis para selecionar como guardião. As três escolhas mais comuns são:
Outros dispositivos (ou mnemônicos de papel) pertencentes ao próprio portador da carteira
Amigos e familiares
Instituições, que assinariam uma mensagem de recuperação se obtivessem uma confirmação de seu número de telefone ou e-mail ou talvez em casos de alto valor verificassem você pessoalmente por videochamada.
Os tutores são fáceis de adicionar: você pode adicionar um tutor simplesmente digitando seu nome ENS ou endereço ETH, embora a maioria das carteiras de recuperação social exijam que o tutor assine uma transação na página de recuperação para concordar em ser adicionado.
Em qualquer carteira de recuperação social bem projetada, o guardião NÃO precisa baixar e usar a mesma carteira; eles podem simplesmente usar sua carteira Ethereum existente, seja qual for o tipo de carteira.
Dada a grande conveniência de adicionar guardiões, se você tiver a sorte de que seus círculos sociais já sejam compostos por usuários Ethereum, eu pessoalmente sou a favor de contagens altas de guardiões (idealmente 7+) para aumentar a segurança.
Se você já possui uma carteira, não é necessário nenhum esforço mental contínuo para ser um guardião: todas as operações de recuperação que você fizer serão feitas por meio de sua carteira existente. Se você não conhece muitos outros usuários ativos do Ethereum, então um número menor de guardiões que você confia para serem tecnicamente competentes é o melhor.
Para reduzir o risco de ataques a tutores e conluio, seus tutores não precisam ser conhecidos publicamente: na verdade, eles não precisam saber a identidade uns dos outros . Isso pode ser feito de duas maneiras.
Primeiro, em vez de os endereços dos guardiões serem armazenados diretamente na cadeia, um hash da lista de endereços pode ser armazenado na cadeia, e o proprietário da carteira só precisaria publicar a lista completa no momento da recuperação.
Em segundo lugar, cada guardião pode ser solicitado a gerar de forma determinística um novo endereço de propósito único que eles usariam apenas para aquela recuperação específica; eles não precisariam realmente enviar nenhuma transação com esse endereço, a menos que uma recuperação seja realmente necessária.
Para complementar essas proteções técnicas, recomenda-se escolher um conjunto diversificado de tutores de diferentes círculos sociais (incluindo, idealmente, um tutor institucional) ; essas recomendações juntas tornariam extremamente difícil para os guardiões serem atacados simultaneamente ou em conluio.
No caso de você morrer ou ficar permanentemente incapacitado, seria um protocolo padrão socialmente acordado que os guardiões pudessem se anunciar publicamente, para que, nesse caso, eles pudessem se encontrar e recuperar seus fundos.
Uma resposta comum a sugestões para usar qualquer forma de multisig, recuperação social ou outra, é a ideia de que esta solução remonta a "confiar nas pessoas" e, portanto, é uma traição aos valores da indústria de blockchain e criptomoeda.
Embora eu entenda por que alguém pode pensar isso à primeira vista, eu diria que essa crítica decorre de um mal-entendido fundamental sobre o que a criptografia deveria ser.
Para mim, o objetivo da criptografia nunca foi eliminar a necessidade de toda a confiança.
Em vez disso, o objetivo da criptografia é dar às pessoas acesso a blocos de construção criptográficos e econômicos que dão às pessoas mais opções em quem confiar e, além disso, permitir que as pessoas construam formas de confiança mais restritas : dar a alguém o poder de fazer algumas coisas em seu nome sem dar-lhes o poder de fazer tudo.
Visto desta forma, o multisig e a recuperação social são uma expressão perfeita deste princípio : cada participante tem alguma influência sobre a capacidade de aceitar ou rejeitar transações, mas ninguém pode movimentar fundos unilateralmente.
Essa lógica mais complexa permite uma configuração muito mais segura do que seria possível se houvesse uma pessoa ou chave que controlasse unilateralmente os fundos.
Essa ideia fundamental, de que as informações humanas devem ser manejadas com cuidado, mas não descartadas imediatamente, é poderosa porque funciona bem com os pontos fortes e fracos do cérebro humano.
O cérebro humano é muito pouco adequado para lembrar senhas e rastrear carteiras de papel, mas é um ASIC para acompanhar os relacionamentos com outras pessoas. Esse efeito é ainda mais forte para usuários menos técnicos: eles podem ter mais dificuldade com carteiras e senhas, mas são igualmente hábeis em tarefas sociais como "escolha 7 pessoas que não vão me atacar".
Se pudermos extrair pelo menos algumas informações de entradas humanas em um mecanismo, sem que essas entradas se transformem em um vetor de ataque e exploração, devemos descobrir como.
E a recuperação social é muito robusta: para que uma carteira com 7 guardiões seja comprometida, 4 dos 7 guardiões precisariam se descobrir de alguma forma e concordar em roubar os fundos, sem que nenhum deles avisasse o dono: certamente um desafio muito mais difícil do que atacar uma carteira protegida apenas por um único indivíduo .
A recuperação social, conforme explicado acima, lida com o risco de você perder sua carteira. Mas ainda existe o risco de sua chave de assinatura ser roubada : alguém invade seu computador, se esgueira por trás de você enquanto você já está conectado e bate em sua cabeça ou até mesmo usa alguma falha na interface do usuário para induzi-lo a assinar uma transação que você não pretendia assinar.
Podemos estender a recuperação social para lidar com esses problemas adicionando um cofre . Cada carteira de recuperação social pode vir com um cofre gerado automaticamente. Os ativos podem ser movidos para o cofre apenas enviando-os para o endereço do cofre, mas podem ser movidos para fora do cofre apenas com um atraso de 1 semana.
Durante esse atraso, a chave de assinatura (ou, por extensão, os responsáveis) pode cancelar a transação. Se desejado, o cofre também pode ser programado para que algumas operações financeiras limitadas (por exemplo, negociações Uniswap entre alguns tokens da lista branca) possam ser feitas sem demora.
Atualmente, as duas principais carteiras que implementaram a recuperação social são a carteira Argent e a carteira Loopring :
A carteira Argent é a primeira grande, e ainda a mais popular, "carteira de contrato inteligente" atualmente em uso, e a recuperação social é um de seus principais pontos de venda. A carteira Argent inclui uma interface pela qual os guardiões podem ser adicionados e removidos:
Para proteger contra roubo, a carteira tem um limite diário: as transações até esse valor são instantâneas, mas as transações acima desse valor exigem a aprovação dos responsáveis para finalizar o saque.
A carteira Loopring é mais conhecida por ser construída pelos desenvolvedores (e, claro, incluindo suporte para) o protocolo Loopring , um pacote ZK para pagamentos e câmbio descentralizado. Mas a carteira Loopring também possui um recurso de recuperação social, que funciona de maneira muito semelhante à do Argent.
Em ambos os casos, as empresas de carteira fornecem gratuitamente um guardião, que conta com um código de confirmação enviado pelo celular para autenticá-lo. Para os outros guardiões, você pode adicionar outros usuários da mesma carteira ou qualquer usuário Ethereum fornecendo seu endereço Ethereum.
A experiência do usuário em ambos os casos é surpreendentemente suave. Havia dois desafios principais. Primeiro, a suavidade em ambos os casos depende de um "retransmissor" central executado pelo fabricante da carteira que republica as mensagens assinadas como transações. Em segundo lugar, as taxas são altas. Felizmente, esses dois problemas são superáveis.
Conforme mencionado acima, existem dois desafios principais: (i) a dependência de retransmissores para resolver transações e (ii) altas taxas de transação . O primeiro desafio, a dependência de retransmissores, é um problema cada vez mais comum nas aplicações Ethereum.
A questão surge porque existem dois tipos de contas no Ethereum: contas de propriedade externa (EOAs) , que são contas controladas por uma única chave privada, e contratos . No Ethereum, existe uma regra de que toda transação deve começar a partir de um EOA; a intenção original era que os EOAs representassem "usuários" e os contratos representassem "aplicativos", e um aplicativo só poderia ser executado se um usuário falasse com o aplicativo.
Se quisermos carteiras com políticas mais complexas, como multisig e social recovery, precisamos usar contratos para representar os usuários. Mas isso representa um desafio: se seus fundos estão em um contrato, você precisa ter alguma outra conta que tenha ETH que possa pagar para iniciar cada transação, e precisa de bastante ETH para o caso de as taxas de transação ficarem muito altas.
Argent e Loopring contornam esse problema executando pessoalmente um "retransmissor". O retransmissor escuta "mensagens" assinadas digitalmente fora da cadeia enviadas pelos usuários e envolve essas mensagens em uma transação e as publica na cadeia.
Mas, a longo prazo, essa é uma solução ruim; adiciona um ponto extra de centralização. Se o retransmissor estiver inoperante e um usuário realmente precisar enviar uma transação, ele sempre poderá enviá-la de seu próprio EOA, mas, no entanto, é introduzido um novo compromisso entre centralização e inconveniência.
Há esforços para solucionar esse problema e obter comodidade sem centralização; as duas categorias principais giram em torno de fazer uma rede de retransmissora descentralizada generalizada ou modificar o próprio protocolo Ethereum para permitir que as transações comecem a partir de contratos . Mas nenhuma dessas soluções resolve as taxas de transação e, de fato, elas pioram o problema devido à complexidade inerentemente maior dos contratos inteligentes.
Felizmente, podemos resolver esses dois problemas ao mesmo tempo, buscando uma terceira solução: mover o ecossistema para os protocolos da camada 2 , como rollups otimistas e rollups ZK.
Os rollups otimistas e ZK podem ser projetados com abstração de conta incorporada, contornando qualquer necessidade de retransmissores. Os desenvolvedores de carteiras existentes já estão analisando os rollups, mas migrar para rollups em massa é um desafio em todo o ecossistema.
Uma migração em massa em todo o ecossistema para rollups é uma oportunidade tão boa quanto qualquer outra para reverter os erros anteriores do ecossistema Ethereum e dar às carteiras multisig e contratos inteligentes um papel muito mais central para ajudar a proteger os fundos dos usuários.
Mas isso requer um reconhecimento mais amplo de que a segurança da carteira é um desafio e que não fomos tão longe na tentativa de enfrentar e desafiar quanto deveríamos.
Multisig e recuperação social não precisam ser o fim da história; pode muito bem haver designs que funcionem ainda melhor. Mas a simples reforma de mudar para rollups e garantir que esses rollups tratem carteiras de contratos inteligentes como cidadãos de primeira classe é um passo importante para fazer isso acontecer.
Também publicado aqui.