Mantenha os segredos de suas chaves privadas e API seguros ao desenvolver contratos inteligentes
Este artigo é uma tradução de Bernardo Perelló. O original de Coogan Brennan e Thomas Hay pode ser lido aqui.
ConsenSys - 7 de Outubro de 2020
Algumas vezes por ano se repete a história de um desafortunado desenvolvedor Ethereum que, ao construir um projeto de blockchain, acidentalmente carrega sua frase mnemônica super secreta - usada para gerar sua carteira - em sua página pública do GitHub. Em segundos, a carteira dele foi “hackeada” e seus fundos se foram.
Nada foi realmente hackeado, no entanto: a transação que transfere todos os ativos para o endereço do “hacker” é perfeitamente conforme. E é por isso que a rede processa e aceita. A rede não se importa com quem assina a transação ou qual foi sua intenção, apenas que sua criptografia esteja correta. A rede assume que qualquer pessoa em posse de um mnemônico, ou das chaves privadas geradas, é o legítimo proprietário dos ativos nas contas correspondentes.
Isso é um balde de água fria para a pessoa que perdeu o controle de sua carteira. A reação imediata é pensar que sua carteira foi hackeada. É compreensível! Mas, antes de chegar ao ponto em que você precisa se perguntar se sua carteira foi comprometida, é bom verificar se você não está prestes a expor involuntariamente suas informações privadas.
Aqui estão alguns passos definitivos para evitar cair em uma situação semelhante. (Dica bônus: as técnicas descritas neste artigo são uma ótima prevenção de segurança para qualquer projeto, blockchain ou não!).
Abaixo, descrevemos duas abordagens sobre como NÃO publicar segredos (chaves de API, chaves privadas, frases-semente, senhas de banco de dados) em seu repositório do GitHub:
Abordagem 1: Usando .gitignore, um arquivo .env e dotenv (supõe que estamos desenvolvendo padrões comuns ao Solidity e um fluxo de trabalho usando Truffle e MetaMask, embora isso tenha sido generalizado)
1º Passo: Leia a documentação em .gitignore. De verdade, leia a página inteira da documentação.
Um arquivo .gitignore permite especificar arquivos que não devem ser rastreados. Você criará um arquivo .gitignore dentro do diretório em que está desenvolvendo seu projeto. Dentro desse arquivo, você especificará os arquivos que não deseja rastrear. A documentação explicará os vários padrões de texto que você pode usar para não rastrear (ou rastrear) arquivos.
Aqui está um exemplo de um:
Na linha 20, adicionamos um arquivo .env
2º Passo: configurar um arquivo .env para armazenar suas variáveis de ambiente
As variáveis de ambiente, originalmente implementadas na versão 7 Unix (lançada em 1979 pela Bell Labs, clique aqui para obter uma cópia do manual) alteram o(s) processo(s) que um sistema de computação executa. Variáveis de ambiente foram implementadas em todos os sistemas operacionais que nossos alunos usam para construir dApps na Ethereum (Unix, Linux, MacOS, Windows). Nesse caso, seus segredos são tratados como variáveis de ambiente e colocados em um arquivo chamado .env.
Aqui está um exemplo de um arquivo .env
3º Passo: Leia a documentação sobre dotenv. Instale o dotenv.
Dotenv “é um módulo de dependência zero que carrega variáveis de ambiente de um arquivo .env em process.env.” (recuperado de em 25 de setembro de 2020)
Instale o dotenv usando o comando npm install dotenv
4º Passo: Adicione require('dotenv').config() ao início do seu aplicativo. Utilize process.env neste arquivo.
Exemplo de código: application.js
//Este é o cabeçalho da application.js
require('dotenv').config()
//Este é um exemplo do process.env logo mais no arquivo
var PrivateKey = new Buffer(process.env.["PRIVATE_KEY"], "hex"))
//Aqui está outro exemplo do uso do process.env
const APIKey = process.env.API_KEY;
Code language: JavaScript (javascript)
5º Passo: Agora, se você quiser publicar em um repositório GitHub existente ou direcionar para um novo repositório GitHub, poderá fazê-lo. Seus segredos não aparecerão como parte do seu repositório GitHub.
Tutorial em vídeo de uma outra fonte: Daniel Schiffman, do The Coding Train, fornece um tutorial em vídeo usando um aplicativo de meteorologia em seu vídeo 3.4 Ocultando chaves de API com variáveis de ambiente (dotenv) e enviando código para o GitHub.
Tutorial em texto de uma outra fonte: O Mason's Blog tem um tutorial chamado Como Implantar um Toiken ERC20 em 20 Minutos. Ele descreve como usar um arquivo .env e o dotenv no contexto de implantação de um contrato inteligente usando Truffle e Infura.
Abordagem 2: Usando segredos criptografados em ações do GitHub (apropriado para quem está familiarizado com o GitHub em nível de organização, com as permissões necessárias e conta do GitHub para poder colocá-los em prática).
1º Passo: Leia a documentação sobre Segredos Criptografados. Sério, leia a documentação.
Segredos criptografados permitem que você armazene e use segredos em um único repositório do GitHub ou em vários repositórios do GitHub. Leia a documentação sobre como usá-los, pois o GitHub faz um excelente trabalho ao explicar como usar os Segredos Criptografados no GitHub Actions.
2º Passo: Faça o que a documentação diz para você fazer. Esse é um ótimo material.
Conclusão
Agora você conhece duas abordagens para impedir que seus segredos sejam publicados no GitHub. Existem outras abordagens para fazer isso? Certamente. Aqui estão dois métodos que funcionam para nós. O ponto principal que estamos tentando transmitir é ter certeza de que você está pensando onde seus segredos podem aparecer e garantir que você tome medidas para se proteger. Fique seguro lá fora.
Latest comments (0)