Guia de propriedade de conta e contrato da Ethereum


O material que decidimos publicar hoje nasceu há cerca de 6 meses e ainda não perdeu sua relevância (talvez tenhamos que atualizá-lo um pouco). Em seguida, ainda fomos surpreendidos ao olhar para empresários e startups que pretendiam conduzir ICOs, mas, ao mesmo tempo, incapazes de fazer uma transação com a transferência de uma transmissão. Hoje deixamos de nos surpreender, mas esses personagens não se tornaram muito menos.


Em geral, a compreensão da importância de guardar suas chaves secretas e a capacidade de fazer isso é a base de uma economia descentralizada que, esperamos, em breve substituirá substancialmente o modelo centralizado clássico. Você precisa entender claramente que, assim que transferir o gerenciamento de sua chave secreta para alguém - por exemplo, um banco, bolsa de valores, estado -, imediatamente a magia da descentralização desaparece e você pode alterar com segurança o blockchain para o Postgres sem muita perda de significado. Em resumo, neste artigo, falaremos sobre o básico do armazenamento seguro de chaves privadas usando a blockchain Ethereum como exemplo.


Se este artigo não é novidade para você - super, estamos muito felizes por você estar em nosso "clube". A propósito, agora você tem para onde enviar todos os cripto-neófitos, para que eles não percam acidentalmente todos os seus éteres por estupidez.


Conteúdo:


0. Faça você mesmo!

1. Informações introdutórias
1.1 Contas
1.2 Carteiras
1.3 Contratos
1.4 Carteiras Multisig

2. Propriedade
2.1 Bastante seguro
2.1.1 Laptop e sistema operacional
2.1.2 Nó Ethereum
2.1.2.1 Instalação no Linux
2.1.2.2 Instale no macOS
2.1.3 Conta
2.1.4 Coletamos assinaturas em um único todo
2.1.4.1 Carteira MultiSig padrão
2.1.4.2 MixBytes MultiSig
2.2 Um pouco menos seguro
2.3 Usual
2.3.1 Carteira Ethereum
2.3.2 MEW


Autores:
Alexey Therealal Makeev
Pavel pkruglov Kruglov
Sergey BoogerWooger Prilutsky


0. Faça você mesmo!


Em quem devo confiar para possuir e gerenciar meus valores na blockchain? O melhor de tudo - por si mesmo. Em um caso extremo, a uma pessoa a quem você pode confiar uma mala com dinheiro de valor equivalente. Orientações adicionais são direcionadas para você ou seu pessoal de confiança. Qualquer acesso de curto prazo a computadores / equipamentos dos quais o controle ocorrerá é possível apenas para pessoas com um nível adequado de confiança.


Por que isso é assim? A mecânica atual dos bancos nos ensinou que, não importa quantos códigos PIN e senhas dos bancos na Internet perdemos, sempre podemos chegar a uma agência bancária, mostrar um passaporte e retirar dinheiro ou começar a restaurar o acesso. Mesmo que os fraudadores tenham sacado dinheiro de uma conta bancária, é possível contestar a operação com alguma probabilidade. No mundo da blockchain, isso não é verdade - se uma operação (por exemplo, transferência de dinheiro) for concluída, ela será protegida por todo o poder das tecnologias criptográficas.


Em seguida, serão fornecidas informações básicas básicas para entender o panorama geral e, sem detalhes de segurança da informação, recomendações para a propriedade segura de contas / contratos no Ethereum.


1. Informações introdutórias


1.1 Contas


A entidade básica que pode pertencer à rede Ethereum é uma conta (em termos do ethereum: conta externa) - um par de chaves públicas e privadas. A chave privada deve ser mantida em segredo, o público (mais precisamente, o endereço obtido) pode ser publicado livremente.


O dinheiro pode ser transferido para o "endereço" (na rede Ethereum - éter, éter). Para indicar a propriedade de quaisquer fundos, contratos, transações (o remetente da transação), o endereço é usado (por exemplo, 0x36c9cc925dd58747044f52d0a57917df64555a3d ). No entanto, para executar qualquer ação em nome do endereço da sua conta, você precisa de uma chave privada (secreta). É o armazenamento seguro de chaves secretas que é a principal função de qualquer carteira criptográfica. Além disso, as carteiras criptografam a chave privada com uma senha que deve ser inserida durante o uso da chave para assinar transações; é nesse momento que a carteira criptográfica usa a chave secreta para criar uma assinatura para a transação.


Para possuir uma conta, você precisa entender exatamente onde e como a chave secreta correspondente a um endereço específico é armazenada. Se você inserir a conta pessoal da bolsa e a bolsa realizar transações para você (ou seja, assinar cada uma delas com uma chave secreta), ela saberá a chave secreta. E esse endereço realmente não pertence a você, mas à troca. No caso de trocas centralizadas, geralmente você não possui chaves secretas para os endereços que vê na interface do Exchange. No caso de trocas descentralizadas, você assina a transação na sua máquina e a chave secreta não é transferida para lugar algum. Nesse caso, você controla sua conta de forma totalmente independente.


Normalmente, as contas (endereços e suas chaves secretas) são armazenadas em um arquivo especial chamado keystore. As chaves secretas nele são criptografadas usando uma senha que você digita toda vez que precisar assinar uma transação enviada à rede. Isso significa que, mesmo que seu arquivo seja copiado, será muito difícil extrair a chave secreta sem saber a senha. É quase impossível se você usar uma senha longa e complexa, e muito mais fácil se você usar uma senha como "lena1984", que os invasores experimentam. De qualquer forma, vazar esse arquivo é um problema sério.


Além da senha que controla o acesso às informações da conta (descriptografando a chave secreta quando necessário), algumas carteiras criptográficas usam uma longa sequência de palavras chamada semente.


Conhecendo a semente, você pode recriar a mesma chave secreta. Seed é uma informação que permite gerar um novo arquivo de armazenamento de chaves do zero e definir uma senha que você deseja. Este arquivo de armazenamento de chaves será usado para gerenciar os mesmos endereços que o anterior. Portanto, armazene as sementes com muita segurança, talvez até na forma de uma cópia impressa bem escondida. Não use textos significativos da literatura, como "moroz i solntse den chudesniy", para que os atacantes possam classificar esses textos com mais eficiência do que um conjunto aleatório de palavras como "shop ban trick track chrome bunny bunny york".


Então lembre-se:


  • semente - para recriar completamente uma conta do zero;
  • senha - para descriptografar a chave privada armazenada no arquivo keystore quando for necessário assinar a transação enviada à rede.

A maioria das carteiras ajuda a gerar uma semente confiável. No caso de carteiras da Web, geralmente a geração é feita estritamente no seu navegador usando JavaScript (o programa é executado no seu computador, dentro do seu navegador e apenas o navegador vê a semente gerada). Mas você precisa entender que, se um cavalo de Troia estiver sendo executado no seu computador, ou se o seu navegador tiver uma extensão maliciosa, sua semente poderá ser roubada. A situação em que a semente é gerada no lado do serviço (ou seja, pode espioná-la) é geralmente inaceitável. Mesmo que o serviço possa ser confiável, o próprio serviço pode ser invadido.


As contas podem ser transferidas entre computadores como arquivos, no entanto, você precisa saber que é impossível "completamente" excluir um arquivo de um disco / unidade flash. Ao excluir de um disco, o computador não exclui todos os bytes do arquivo, mas apenas marca o arquivo como excluído; programas especiais podem restaurar esse arquivo. Se uma conta tem ou será de grande valor, ela não deve viajar entre computadores e redes. Todas as unidades e unidades flash usadas para transferi-la devem ser fisicamente destruídas ou usadas para fazer backup da conta e ser armazenadas com tanta segurança quanto a própria conta.


1.2 Carteiras


Um programa que opera com contas, contratos e outras entidades de blockchain é chamado carteira ou carteira criptográfica. Uma carteira pode conter várias contas e oferecer suporte ao trabalho simultâneo com elas. As carteiras vêm na forma de programas convencionais, como um dispositivo separado (hardware) ou como um serviço da web. O programa de carteira não "armazena bitcoins em si" na forma de dados, mas armazena apenas chaves para gerenciar endereços e pode se comunicar com o blockchain (gerar transações ou procurar informações no blockchain).


1.3 Contratos


Os contratos contêm lógica que será executada com precisão matemática, com um grande número de mineradores, a maioria interessada na execução justa do contrato. As alterações resultantes no estado do contrato serão certificadas criptograficamente e enviadas para a blockchain geral da Ethereum, onde qualquer participante pode vê-las. A propriedade do contrato é registrada no próprio contrato (usando os endereços dos proprietários, os endereços de suas contas), ou seja, faz parte da lógica ou do estado do contrato. Se a lógica do contrato exigir transações de vários proprietários, isso será chamado de assinatura múltipla (assinatura múltipla, assinatura múltipla). É com base nessa lógica que os contratos com carteira múltipla são implementados. A assinatura múltipla não se limita à proteção de contratos que armazenam transmissões; ela pode proteger o acesso a qualquer contrato.


1.4 Carteiras Multisig


Não os confunda com os programas de carteira descritos acima. Uma carteira multisig consiste em um contrato com várias assinaturas e uma interface gráfica para interação mais conveniente com o contrato. Os parâmetros de multi-assinatura são especificados no contrato:


  • proprietários (geralmente são contas);
  • O número de assinaturas para concluir a ação.

Às vezes, a retirada de pequenas quantias (o limite é definido no contrato) requer a assinatura de apenas um proprietário. Por exemplo, a carteira Ethereum Wallet (funciona com base no mecanismo de gráficos Mist, e é por isso que às vezes é chamada erroneamente de Mist) permite criar um contrato de multigestão de carteira e é conveniente trabalhar com ela. O programa de carteira pode gerenciar várias carteiras multisig.


Não confunda a implementação de carteiras multisig no Ethereum e no Bitcoin. Ao contrário do Ethereum, para usar bitcoins de um endereço multisig criado anteriormente no Bitcoin, todas as assinaturas necessárias devem ser "coletadas" antecipadamente e empacotadas em uma transação, enquanto no Ethereum várias transações de signatários podem ser realizadas de forma independente.


2. Propriedade


Vários métodos são descritos abaixo com diferentes saldos de segurança, preço e usabilidade. Todas as alternativas a seguir são nossa recomendação.


2.1 Bastante seguro


Uma carteira multisig com várias assinaturas, cujas contas são armazenadas em laptops diferentes. Para valores superiores a US $ 100.000, esse método é necessário. Assinaturas obrigatórias - pelo menos duas. O número total de assinaturas é uma ou duas a mais do que o necessário (em caso de perda / comprometimento de uma ou duas assinaturas). Como opção: existem três assinaturas no total, duas são obrigatórias (qualquer).


2.1.1 Laptop e sistema operacional


Comprado de uma empresa confiável que não tem idéia do uso do laptop. A empresa deve ter um motivo próximo de zero para integrar "indicadores" de software / hardware no laptop. Todos os laptops comprados de diferentes empresas. O ferro deve ser confiável e ter uma chance mínima de avaria normal. No caso de uma avaria / problema, resolvemos nós mesmos ou retiramos todos os discos rígidos e os entregamos para reparo, após o que NÃO usamos o laptop para armazenamento adicional de contas.


Sistema operacional: Linux ou macOS. Requisitos de hardware: SSD (necessariamente SSD!), Disco com mais de 256 GB, RAM com mais de 16 GB, processador Intel Core i5 ou superior. Deve haver um firewall entre o laptop e a Internet, por exemplo, em um roteador. O laptop deve estar limpo: não instale nenhum programa que não seja o sistema operacional e os nós Ethereum, não conecte unidades flash e discos de terceiros. Não há ferramentas de controle remoto!


2.1.2 Nó Ethereum


As carteiras usam o nó Ethereum para interagir com o blockchain. Precisamos do chamado nó Ethereum completo.


2.1.2.1 Instalação Linux


Texto oculto

Vamos considerar a instalação em distribuições compatíveis com deb (Debian, Ubuntu, CentOS). Vamos para https://github.com/ethereum/mist/releases e baixamos a versão mais recente, no momento da redação deste artigo, era 0.9.3:



Após o download, é bom verificar a integridade do pacote para evitar falsificação de arquivos. Para isso, a página contém hashes SHA256 de todos os arquivos, por exemplo, para Ethereum-Wallet-linux64-0-9-3.deb é 946b4b7dec1b6f2b58b6ef21d06a12dcee691fa2186baad7d99872f94240ced8 .


No Linux, o hash pode ser calculado usando o utilitário de console padrão sha256sum . Na janela do terminal, digite o seguinte comando:


$ sha256sum ~/Downloads/Ethereum-Wallet-linux64-0-9-2.deb 

Onde:


  • $ - prompt do terminal, o que significa que o comando será executado em nome do usuário (não é necessário entrar);
  • ~ - caminho para o diretório de usuário atual;
  • ~/Downloads/Ethereum-Wallet-linux64-0-9-2.deb - caminho completo para o arquivo.

Em resposta, devemos ver o hash mostrado acima (para o seu arquivo pode ser diferente). Para instalar o pacote, use o comando:


 $ sudo dpkg -i ~/Downloads/Ethereum-Wallet-linux64-0-9-2.deb 

Onde:


  • sudo - um comando que permite executar uma ação como root (administrador);
  • dpkg - um utilitário padrão para instalar um pacote deb;
  • -i - sinalizador de instalação do pacote (instalação).

Após executar o comando, você deve inserir a senha do usuário.


Outro método de instalação: clique duas vezes no arquivo no gerenciador de arquivos gráfico e siga as instruções.


2.1.2.2 Instale no macOS


Texto oculto

Para instalar, use a mesma página https://github.com/ethereum/mist/releases , apenas precisamos de um arquivo com a extensão * .dmg. No momento em que este artigo foi escrito, este artigo era Ethereum-Wallet-macosx-0-9-3.dmg . Após o download, verifique o hash do arquivo através do terminal. Para executar o terminal no macOS, você precisa:


  1. Inicie o Finder.
  2. Selecione o item "Transição" no menu do Finder, depois - "Utilitários".
  3. Encontre o ícone “Terminal” e inicie.

No terminal, digite o comando:


 $ shasum -a 256 ~/Downloads/Ethereum-Wallet-macosx-0-9-2.dmg 

Em seguida, clique duas vezes no arquivo dmg e instale a carteira.


2.1.2.3 Sincronização de nó


Antes de qualquer ação na blockchain, o nó Ethereum deve ser totalmente sincronizado (aguarde até que todos os indicadores de sincronização como o abaixo abaixo tenham terminado e desaparecido).



Com o tempo, o blockchain vai "inchar". Para compactá-lo (ou se já passou muito tempo desde a última sincronização), você pode remover completamente o blockchain (apenas blockchain! Não é uma conta), uma sincronização rápida será realizada. Os dados da Blockchain estão localizados no diretório chaindata , que pode ser encontrado:


  • em ~ / .ethereum / geth / no Linux;
  • em ~ / Library / Ethereum / geth / no macOS.

Para excluir dados da blockchain, portanto, você pode simplesmente excluir o diretório chaindata . É melhor fechar a carteira, renomear chaindata para chaindata.old, iniciar a carteira (a sincronização deve começar do zero e a interface principal não aparecerá por padrão - portanto, clique em Iniciar aplicativo), verifique se as contas estão no lugar (se não, renomeie algo em seguida, procuramos por eles no diretório renomeado), após o qual você pode excluir chaindata.old.


2.1.3 Conta


No primeiro início da Carteira Ethereum, siga as instruções:



Nesta etapa, crie uma senha complexa para sua futura carteira. Depois disso, a conta será criada.


Para se proteger contra falhas no disco rígido, faça uma cópia de backup da sua conta em uma unidade flash USB e guarde-a no seu laptop. Até o disco rígido ocioso no qual a conta estava localizada deve ser fisicamente destruído.


Para fazer backup da sua conta, você precisa copiar o arquivo-chave localizado em:


  • no Linux: ~ / .ethereum / keystore
  • no macOS: ~ / Biblioteca / Ethereum / keystore

Os mesmos diretórios podem ser abertos no Ethereum Wallet através do menu superior Arquivo -> Backup -> Contas .


2.1.4 Coletamos assinaturas em um único todo


Existem duas subopções aqui. A MultiSig Wallet padrão é adequada se o ativo que você possui é éter ou tokens ERC-20 e é transferido para o seu endereço (ou seja, não é necessário receber ações adicionais da sua parte). Para proteger qualquer contrato com várias assinaturas, desenvolvemos nossa solução com base na norma. Qual das opções a escolher depende do que precisa ser protegido.


2.1.4.1 Carteira MultiSig padrão


Para criar um multisig, você precisa fazer duas coisas:


  • copie os endereços públicos de outras contas criadas no laptop atual;
  • tenha éter (cerca de 0,2 ou mais) na carteira principal para enviar transações.

Depois que as condições forem atendidas, você poderá começar a criar. Na seção Contratos da carteira, clique em ADICIONAR CONTRATO DE CARTEIRA . Digite um nome para o contrato e selecione a opção Contrato com carteira múltipla. Você verá a seguinte mensagem:


Esta é uma conta conjunta controlada pelos proprietários do X. Você pode enviar até X éter por dia. Qualquer transação acima desse limite diário exige a confirmação de X proprietários.


Nesse estágio, você precisa escolher quantos proprietários a carteira do contrato terá e quantas assinaturas serão necessárias para concluir a transação além do limite diário. Em seguida, cole os endereços de todas as contas de proprietário (aquelas que criamos anteriormente em laptops diferentes) e pressione CREATE .



Para adicionar uma carteira multi-sig existente a outro computador (por exemplo, se o laptop precisar ser substituído ou reinstalado), você precisará importar uma carteira existente. As ações são executadas na janela principal da Carteira Ethereum:


  1. Na guia WALLETS, role para baixo até a seção Contratos da carteira e clique no botão ADICIONAR CONTRATO DE WALLET .
  2. Digite um nome conveniente para a carteira.
  3. Selecione IMPORT WALLET .
  4. Digite o endereço da carteira.
  5. Se uma das suas contas existentes for a proprietária da carteira, uma mensagem verde aparecerá confirmando isso.
  6. Pressione o botão CREATE .


Para transferir fundos de uma carteira multisig, como de costume, você precisa ir para a guia ENVIAR, selecione o endereço da carteira multisig da qual você transferirá, digite o valor e a senha para criar uma transação. No entanto, após digitar a senha, você verá as diferenças com uma transação normal:



Aqui você precisa aprovar a transação com o botão APROVAR .


A mesma mensagem será exibida no computador de outro proprietário:



E somente depois que o número mínimo exigido de proprietários aprovar a transação, os fundos serão transferidos.


2.1.4.2 MixBytes MultiSig


Para enviar uma transação para qualquer contrato protegido pelo MixBytes MultiSig, siga as mesmas etapas para o envio de uma transação e para um contrato regular, mas repita-as em vários laptops de controle. Com tantas assinaturas mínimas necessárias. Ao mesmo tempo, as primeiras solicitações registram apenas o fato da assinatura e a última assinatura executa a ação.


Descrevemos como enviar transações para o contrato. Os contratos podem ser gerenciados na Carteira Ethereum. No cabeçalho, na guia Contratos, acesse:



Aqui você pode adicionar um contrato existente - clique em ASSISTIR AO CONTRATO . No formulário exibido, é necessário inserir o endereço do contrato, seu nome (selecione qualquer um - ele permanece apenas em sua carteira), bem como a chamada ABI (interface binária do aplicativo, representada por um grande texto JSON):



A ABI deve ser fornecida pelo desenvolvedor do contrato. Ou você pode tentar encontrar a ABI no serviço etherscan.io no endereço do contrato na guia Origem do contrato (apenas para contratos verificados):



Se tudo der certo, o contrato aparecerá na página de contratos da carteira. Entramos nele:



À esquerda, você pode ver o status do contrato e, à direita, selecionar a função para enviar a transação (Selecionar função): clique em Selecionar uma função , selecione a função desejada, um formulário é exibido onde é necessário preencher os parâmetros de chamada:



Quando os parâmetros necessários forem preenchidos, selecione em nome de qual conta executar a transação (Executar a partir de), pressione EXECUTE (você precisará digitar a senha da conta). Depois disso, a transação vai para a rede e atinge o contrato. Lembramos que, para que o MixBytes MultiSig funcione, você precisará executar um procedimento semelhante em dois ou mais laptops (dependendo do número mínimo necessário de assinaturas). Assinaturas em excesso do necessário não precisam ser enviadas.


2.2 Um pouco menos seguro


Estas são carteiras de hardware. Eles são um dispositivo físico do qual é impossível extrair (e, portanto, não roubar) uma chave privada. E para confirmar a transação, você deve clicar no botão físico no dispositivo. Portanto, se um hacker obtém acesso remoto ao seu computador, ao qual uma carteira de hardware será conectada naquele momento, um invasor ainda não poderá pressionar fisicamente um botão e transferir dinheiro para si mesmo.



Considere o exemplo do Ledger Nano S. Ao conectar o dispositivo pela primeira vez ao computador, você precisa inicializar o dispositivo, incluindo:


  • Defina um PIN de 8 dígitos. O código será solicitado sempre que o dispositivo for conectado ao computador e ao sair do modo de suspensão.
  • Grave uma frase de recuperação (semente) de 24 palavras. Isso é um gargalo, e aqui vamos abordar mais detalhadamente. Se alguém obtiver acesso à frase, poderá dizer adeus aos ativos. Portanto, é imperativo cuidar de seu armazenamento em local seguro. Coloque-o em um pedaço de papel e esconda-o. Além disso, recomendamos armazená-lo em dois lugares diferentes - de fato, faça uma cópia de backup em caso de perda. Existem várias maneiras de armazenar uma frase com segurança em formato digital - armazenamento em partes, esteganografia etc. Limitado apenas pela sua imaginação.

Tutorial em vídeo de inicialização

Nesta carteira de hardware, você pode armazenar moedas diferentes, seu número já está chegando a vinte e é atualizado constantemente. Os aplicativos Chrome são usados ​​para acessar carteiras individuais, resolvendo o problema de acesso em diferentes sistemas operacionais.


2.3 Usual


Existem muitas subopções aqui. Considere dois.


2.3.1 Carteira Ethereum


Como trabalhar com contas individuais é descrito na primeira decisão ("Bastante seguro", antes de chegar à seção "Coletamos assinaturas em um único todo") - este é um laptop limpo separado e a Ethereum Wallet.


2.3.2 MEW


Provavelmente a carteira mais popular da Ethereum no momento, porque é simples. Vamos ao site https://myetherwallet.com/ , selecionamos o arquivo com a chave, inserimos a senha e já podemos realizar transações. Sem criar um nó, baixar uma blockchain, etc., as próprias chaves não vão para o site; após o download no navegador, o aplicativo funciona de forma autônoma.



Mas existe o risco de o site ser substituído. Podemos garantir isso: basta baixar o site no seu computador e abri-lo localmente, o código fonte está disponível no Github . Faça o download do arquivo com a versão mais recente (no momento em que este foi escrito, era o arquivo etherwallet-v3.21.15.zip ), descompacte e abra o arquivo index.html . Temos o mesmo MEW, mas localmente.


Você precisa se lembrar: apesar do MEW não armazenar suas chaves secretas, invadir seu computador ou navegador permitirá que você descubra as chaves secretas no momento em que as digita.

Source: https://habr.com/ru/post/pt416339/


All Articles