Pular para o conteúdo principal

Chaves na prova de participação do Ethereum

Última edição: , Invalid DateTime

O Ethereum protege os ativos do usuário usando a criptografia de chave pública-privada. A chave pública é usada como base para um endereço Ethereum — ou seja, é visível para o público em geral e utilizada como um identificador único. A chave privada (ou “secret”) deve sempre ser acessível apenas ao proprietário da conta. A chave privada é usada para “assinar” as transações e os dados para que a criptografia possa provar que o proprietário aprova alguma ação de uma chave privada específica.

As chaves do Ethereum são geradas usando a criptografia de curva elíptica(opens in a new tab).

No entanto, quando o Ethereum mudou de prova de trabalho para prova de participação, um novo tipo de chave foi adicionado ao Ethereum. As chaves originais ainda funcionam exatamente como antes — não houve alterações nas chaves baseadas em curva elíptica que protegem as contas. No entanto, os usuários precisavam de um novo tipo de chave para participar da prova de participação colocando ETH em stake e executando validadores. Essa necessidade surgiu dos desafios de escalabilidade associados a muitas mensagens trocadas entre inúmeros validadores que exigiam um método criptográfico que pudesse ser agregado facilmente para reduzir a quantidade de comunicação necessária para a rede chegar a consenso.

Esse novo tipo de chave usa o esquema de assinatura Boneh-Lyn-Shacham (BLS)(opens in a new tab). O BLS permite uma agregação de assinaturas muito eficiente, mas também permite a engenharia reversa de chaves agregadas de validadores individuais e é ideal para gerenciar ações entre validadores.

Os dois tipos de chaves de validação

Antes da mudança para prova de participação, os usuários do Ethereum tinham uma única chave privada baseada em curva elíptica para acessar seus fundos. Com a introdução da prova de participação, os usuários que quisessem ser participantes individuais também precisavam de uma chave de validação e uma chave de saque.

A chave de validação

A chave de assinatura de validação consiste em dois elementos:

  • Chave de validação privada
  • Chave de validação pública

O objetivo da chave de validação privada é assinar operações em cadeia, como propostas de bloco e atestações. Por causa disso, essas chaves devem estar guardadas numa carteira quente.

Essa flexibilidade tem a vantagem de mover rapidamente as chaves de assinatura do validador de um dispositivo para outro, no entanto, se elas se perderem ou forem roubadas, um ladrão poderá agir maliciosamente de algumas maneiras:

  • Remover o validador por:
    • Ser um proponente e assinar dois blocos diferentes da beacon para o mesmo slot
    • Ser um atestador e assinar uma atestação que "envolve" outra
    • Ser um atestador e assinar duas atestações diferentes com o mesmo destino
  • Forçar uma saída voluntária, que interrompe o validador de fazer stake, e conceder acesso ao seu saldo de ETH para o proprietário da chave de saque

A chave pública do validador é incluída nos dados de transação quando um usuário deposita ETH no contrato de depósito de stake. Isso é conhecido como dados de depósito e permite que o Ethereum identifique o validador.

Chave de saque

A chave de saque será necessária para mover o saldo do validador depois que ela for ativada na próxima atualização Shangai. Assim como as chaves de validador, as chaves de saque também consistem em dois componentes:

  • Chave de saque privada
  • Chave de saque pública

Perder esta chave significa perder acesso ao saldo do validador. No entanto, o validador ainda pode assinar certificados e blocos, pois essas ações exigem a chave privada do validador, mas haverá pouco ou nenhum incentivo se as chaves de retirada forem perdidas.

Separar as chaves de validação das chaves da conta Ethereum permite que vários validadores sejam executados por um único usuário.

esquema da chave de validação (opens in a new tab)

Obtendo chaves de uma frase semente

Se cada 32 ETH em stake precisavam de um novo conjunto de 2 chaves completamente independentes, o gerenciamento de chaves se tornaria rapidamente complicado, especialmente para usuários que executam vários validadores. Em vez disso, várias chaves de validação podem ser obtidas de um único segredo comum e armazenar esse segredo único permite acesso a várias chaves de validação.

Mnemônicos(opens in a new tab) e caminhos são recursos importantes que os usuários geralmente encontram ao acessar(opens in a new tab) suas carteiras. Mnemônico é uma sequência de palavras que atuam como uma semente inicial para uma chave privada. Quando combinado com dados adicionais, o mnemônico gera um hash conhecido como “chave mestra”. Isso pode ser considerado como a raiz de uma árvore. Os galhos dessa raiz podem ser obtidos usando um caminho hierárquico de forma que os nós filhos possam existir como combinações de hash do nó pai e de seus índices na árvore. Leia sobre as normas BIP-32(opens in a new tab) e BIP-19(opens in a new tab) para geração de chaves baseadas em mnemônicos.

Esses caminhos possuem a seguinte estrutura, que será familiar para usuários que já interagiram com carteiras de hardware:

1m/44'/60'/0'/0`
2

As barras nesse caminho separam os componentes da chave privada da seguinte forma:

1master_key / purpose / coin_type / account / change / address_index
2

Essa lógica permite aos usuários anexar o maior número possível de validadores a uma única frase mnemônica, pois a raiz da árvore pode ser comum e a diferenciação pode ocorrer nas ramificações. O usuário pode obter qualquer número de chaves da frase mnemônica.

1 [m / 0]
2 /
3 /
4[m] - [m / 1]
5 \
6 \
7 [m / 2]
8

Cada galho é separado por uma /, então m/2 significa iniciar com a chave mestra e seguir a ramificação 2. No esquema abaixo, uma única frase mnemônica é usada para armazenar três chaves de saque, cada uma com dois validadores associados.

lógica da chave de validação (opens in a new tab)

Leitura adicional

Este artigo foi útil?