Pular para o conteúdo principal

Protegendo um validador

Cada candidato a validador é incentivado a executar suas operações de forma independente, já que configurações diversas aumentam a resiliência da rede. Os candidatos a validador devem iniciar a fase de configuração agora para estar prontos para o lançamento.

Gestão de Chaves - Carteiras de Hardware e HSM​

É de importância crítica que um atacante não possa roubar a chave de um validador. Se isso for possível, todo o stake delegado ao validador comprometido fica em risco. Módulos de segurança de hardware (HSM) e carteiras de hardware são estratégias importantes para mitigar esse risco.

Requisitos de Carteira de Hardware​

Carteiras de hardware (como dispositivos Ledger) fornecem armazenamento seguro de chaves onde:

  • Chaves privadas são geradas e armazenadas em hardware criptografado
  • Assinatura de transação ocorre dentro do dispositivo
  • As chaves privadas nunca saem da carteira de hardware
  • Uma frase mnemônica de 24 palavras controla o acesso a todas as chaves
aviso

Limitações Importantes

  • Não é possível migrar validadores existentes: A integração de carteira de hardware só é possível ao criar novos validadores
  • Backup é crítico: A perda da frase mnemônica resulta na perda permanente do controle do validador
  • Armazenamento offline necessário: Armazene as frases mnemônicas com segurança offline em vários locais

Suporte a HSM​

Os módulos HSM devem suportar ed25519 para CrossFi Chain. O YubiHSM2 suporta ed25519 e esta biblioteca de yubikey está disponível. O YubiHSM pode proteger uma chave privada, mas não pode garantir em um ambiente seguro que não assinará o mesmo bloco duas vezes.

Integração com Ledger​

Dispositivos Ledger dão suporte a operações de validador CrossFi por meio do aplicativo Cosmos. O aplicativo Ledger pode armazenar blocos recentes e ajuda a mitigar ataques de dupla assinatura.

Operações suportadas:

  • Gerenciamento de chave de conta (operações de validador, recompensas, delegação)
  • Assinatura de transação com confirmação de hardware
  • Verificação de endereço no dispositivo

Para instruções detalhadas de configuração, veja o Guia de Configuração da Carteira de Hardware abaixo.

Tipos de Chaves​

Os validadores CrossFi usam dois tipos distintos de chaves privadas, cada uma com propósitos diferentes:

Chave de Conta (Chave do Operador do Validador)​

  • Propósito: Controla a conta do validador para tarefas operacionais
  • Uso:
    • Recebimento de recompensas de staking e comissões
    • Atualização de informações do validador (descrição, taxa de comissão)
    • Autodelegação e operações de desdelegação
    • Votação na governança do validador
  • Armazenamento: Pode ser armazenado em carteiras de hardware (Ledger) para maior segurança
  • Prefixo: Usa os prefixos mpvaloper e mpvaloperpub
  • Criação: Gerado com crossfid keys add <name> --ledger para integração com carteira de hardware

Chave de Consenso (Chave Tendermint)​

  • Propósito: Usada por Tendermint/CometBFT para assinar blocos e votos de consenso
  • Uso:
    • Assinatura de propostas de bloco
    • Assinatura de prevote e precommit em rondas de consenso
    • Precisa ficar disponível 24/7 para produção contínua de blocos
  • Armazenamento: Armazenado no arquivo priv_validator.json por padrão
  • Prefixo: Associado à chave pública mpvalconspub
  • Segurança: Pode ser isolado usando Tendermint KMS para proteção aprimorada
  • Criação: Gerado automaticamente quando o nó é inicializado com crossfid init
perigo

Aviso Crítico de Segurança

  • Nunca copie priv_validator.json entre vários nós - isso causará assinaturas duplas e resultará em penalização
  • Não é possível migrar chaves existentes para carteiras de hardware - apenas para novos validadores
  • Faça backup de ambos os tipos de chaves com segurança e separadamente

Relação entre as Chaves: Ambas as chaves são essenciais para as operações do validador, mas cumprem funções totalmente diferentes. A chave de conta gerencia a entidade do validador, enquanto a chave de consenso lida com a assinatura real de blocos.

Nós sentinela (Proteção contra DDOS)​

Os validadores são responsáveis por garantir que a rede possa sustentar ataques de negação de serviço.

Uma maneira recomendada de mitigar esses riscos é que os validadores organizem cuidadosamente a topologia de rede em uma arquitetura de nó sentinela.

Os nós de validador devem conectar-se apenas a nós completos em quem confiam, pois os operam eles mesmos ou são operados por outros validadores que eles conhecem socialmente. Um nó de validador normalmente funciona em um data center. A maioria dos data centers oferece ligações diretas para as redes dos principais provedores de nuvem. O validador pode usar essas ligações para conectar-se a nós sentinela na nuvem. Essa mitigação transfere o peso de ataques de negação de serviço do nó do validador diretamente para seus nós sentinela, e pode exigir que novos nós sentinela sejam criados ou ativados para mitigar ataques aos existentes.

Topologia validador–sentinela​

Este diagrama mostra uma arquitetura típica de validador–sentinela usada em redes baseadas em Tendermint. Nós sentinela públicos expõem interfaces P2P e/ou RPC para a internet e outros pares, enquanto o nó do validador fica em um segmento de rede privado ou restrito e conecta-se apenas aos seus próprios nós sentinela.

Este é um diagrama de arquitetura conceitual, não um guia de implantação. Os operadores de nó são livres para escolher sua própria infraestrutura, regras de segurança e configuração de monitoramento.

Nós sentinela podem ser rapidamente criados ou alterar seus endereços IP. Como os links para os nós sentinela estão em espaço IP privado, um ataque baseado na internet não pode perturbá-los diretamente. Isso garante que as propostas de bloco do validador e os votos sempre cheguem ao restante da rede.

Para configurar a arquitetura do seu nó sentinela, você pode seguir as instruções abaixo:

Os nós de validador devem editar o config.toml:


# Lista separada por vírgulas de nós para manter conexões persistentes

# Não inclua pares privados nesta lista se não quiser que sejam anunciados
persistent_peers =[lista de nós sentinela]

# Defina true para habilitar o reator de troca de pares
pex = false

Nós sentinela devem editar seu config.toml:


# Lista separada por vírgulas de IDs de pares para manter privados (não serão difundidos para outros peers)

# ID de Exemplo: 3e16af0cead27979e1fc3dac57d03df3c7a77acc@3.87.179.235:26656

private_peer_ids = "node_ids_of_private_peers"

Como os validadores podem se proteger de ataques de negação de serviço (DoS)?​

Ataques de negação de serviço ocorrem quando um atacante envia um fluxo massivo de tráfego de internet para um endereço IP, impedindo que o servidor nesse IP se conecte à internet.

Um atacante varre a rede, tenta descobrir o endereço IP de vários nós validador e os desconecta da comunicação ao inundá-los com tráfego.

Uma maneira recomendada de mitigar esses riscos é que os validadores organizem cuidadosamente a topologia de rede usando uma arquitetura de nó sentinela.

Uma forma recomendada de mitigar esses riscos é que os validadores organizem cuidadosamente a topologia de rede em uma arquitetura de nós sentinela.

Nós sentinela podem ser rapidamente criados ou alterar seus endereços IP. Como os links para os nós sentinela estão em espaço IP privado, um ataque pela internet não pode perturbá-los diretamente. Essa estratégia aumenta muito a chance de que propostas de blocos do validador e votos tenham uma chance muito maior de chegar ao restante da rede.

Para mais detalhes sobre nós sentinela, consulte a Documentação Tendermint ou a Visão Geral da Arquitetura de Nós Sentinela no fórum.

Guia de Configuração da Carteira Ledger​

Guia de Configuração da Ledger Hardware Wallet​

Esta seção fornece instruções passo a passo para configurar um dispositivo Ledger para operações de validador CrossFi.

Pré-requisitos​

  • Dispositivo Ledger Nano S, Nano S Plus ou Nano X
  • Computador com conexão USB
  • Última versão do aplicativo Ledger Live
  • Daemon CrossFi (crossfid) compilado com suporte Ledger

Etapa 1: Prepare seu dispositivo Ledger​

Instalar Ledger Live

  • Baixe e instale o Ledger Live do site oficial: https://www.ledger.com/ledger-live
  • Conecte seu dispositivo Ledger e atualize o firmware via Ledger Live para a versão mais recente.

Instalar Aplicativo Cosmos

  • No Ledger Live:
    • Vá para a seção Gerenciar
    • Conecte e desbloqueie seu Ledger
    • Procure o aplicativo "Cosmos"
    • Clique em Instalar para adicionar o aplicativo Cosmos ao seu dispositivo
    • Observação: pode ser necessário habilitar o Modo de Desenvolvedor nas configurações do Ledger Live se o aplicativo Cosmos não estiver visível.

Inicializar ou Restaurar Frase de Semente

  • Para dispositivos novos:
    • Siga as instruções de configuração do dispositivo para gerar uma nova frase de recuperação de 24 palavras
    • Anote as 24 palavras na ordem exata em que forem mostradas
    • Verifique a frase inserindo as palavras solicitadas
  • Para dispositivos existentes:
    • Use a frase de recuperação existente, se já tiver uma
    • Certifique-se de ter backups offline seguros da frase
  • ⚠️ Crítico: Armazene sua frase de recuperação em vários locais seguros, offline. A perda desta frase resulta na perda permanente do seu validador!

Etapa 2: Criar Conta de Validador com Ledger​

Verificar Configuração do Daemon CrossFi

  • Certifique-se de que o binário crossfid foi compilado com suporte a Ledger:
    crossfid version --long
  • A saída deve incluir suporte a Ledger nas tags de build.

Conectar e Desbloquear Ledger

  • Conecte seu dispositivo Ledger ao computador e:
    • Digite seu PIN para desbloquear o dispositivo
    • Vá para e abra o aplicativo Cosmos
    • A tela deve exibir "Cosmos pronto"

Criar Chave do Validador

  • Crie uma nova chave usando o dispositivo Ledger:
    crossfid keys add <validator-name> --ledger
  • Substitua <validator-name> pelo identificador escolhido para o validador.
  • O comando irá:
    • Solicitará que você confirme a operação no seu dispositivo Ledger
    • Exibir o endereço do validador e a chave pública
    • Armazene a referência da chave no seu keyring local

Verificar Endereço no Dispositivo

  • Sempre verifique se o endereço corresponde ao que é exibido no Ledger:
    crossfid keys show <validator-name> -d
  • Este comando irá:
    • Exibir o endereço no seu terminal
    • Solicitar verificação de endereço no seu dispositivo Ledger
    • Exigir que confirme o endereço na tela do dispositivo
  • Sempre verifique se os endereços correspondem antes de prosseguir com qualquer transação.

Etapa 3: Boas Práticas de Segurança​

🔐 Segurança da Mnemonica

  • Armazene frases de recuperação offline apenas
  • Use vários locais seguros
  • Nunca compartilhe com ninguém
  • Considere soluções de backup em metal
  • Teste o processo de recuperação em um dispositivo reserva

🔄 Segurança Operacional

  • Sempre verifique endereços no dispositivo
  • Mantenha o firmware do Ledger atualizado
  • Use PIN de dispositivo único
  • Habilite o tempo limite de bloqueio automático
  • Monitore atualizações de firmware

Integração do Tendermint KMS​

Para maior segurança da sua chave de consenso (a chave usada para assinar blocos), considere usar o Tendermint Key Management System (KMS).

O que é o Tendermint KMS?​

Tendermint KMS (tmkms) é um serviço de gerenciamento de chaves que:

  • Isola as chaves de consenso dos nós validador
  • Previne assinatura dupla por meio de rastreamento de estado
  • Suporta módulos de segurança de hardware (HSM)
  • Proporciona alta disponibilidade por meio de redundância
  • Roda em um servidor separado para maior segurança

Visão Geral da Configuração do KMS​

Instalar Dependências

  • Instale as dependências necessárias para a compilação do KMS:

    # Ubuntu/Debian
    sudo apt update
    sudo apt install -y gcc clang pkg-config libusb-1.0-0-dev

    # Instalar Rust
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    source ~/.cargo/env

Instalar Tendermint KMS

  • Instale o KMS com suporte Ledger:

    # Para suporte Ledger
    cargo install tmkms --features=ledger

    # Para suporte YubiHSM2
    cargo install tmkms --features=yubihsm

    # Verificar instalação
    tmkms --help

Inicializar Configuração do KMS

  • Crie diretório e arquivos de configuração do KMS:
    tmkms init /path/to/kms/home
  • Isso cria:
    • tmkms.toml - Arquivo de configuração principal
    • kms-identity.key - Chave de identidade KMS
    • secrets/ - Diretório para armazenamento de chaves
    • state/ - Diretório para estado de consenso

Configurar e Iniciar o KMS

  • Edite o arquivo de configuração tmkms.toml para:
    • Especifique o seu dispositivo de hardware (Ledger/YubiHSM)
    • Configure as configurações de conexão do validador
    • Configure os caminhos de derivação de chaves
  • Inicie o serviço KMS:
    tmkms start -c /path/to/kms/home/tmkms.toml

Configuração do Nó para KMS​

Para usar o KMS com o seu nó validador CrossFi, atualize o config.toml:

# Em ~/.crossfi/config/config.toml
[priv_validator]
# Endereço TCP ou UNIX socket para o Tendermint ouvir para
# conexões de um processo PrivValidator externo
laddr = "tcp://127.0.0.1:26658"

# Caminho para o arquivo JSON contendo a chave privada a ser usada como validador
key_file = ""

# Caminho para o arquivo JSON contendo o último estado de assinatura de um validador
state_file = ""

Criando um Novo Validador com Carteira de Hardware​

Depois de configurar sua carteira de hardware e opcionalmente configurar o KMS, siga estes passos para criar seu validador:

Financie sua Conta de Validador

  • Envie tokens XFI para o endereço da sua carteira de hardware:

    # Obtenha o endereço do seu validador
    crossfid keys show <validator-name> --address

    # Você precisará de XFI suficiente para:
    # - Delegação mínima de auto (ver requisitos atuais)
    # - Taxas de transação para criação do validador
    # - Custos operacionais contínuos

Sincronize seu Nó

  • Certifique-se de que seu nó validador está totalmente sincronizado antes de criar o validador:

    # Verifique o status de sincronização
    crossfid status | jq .SyncInfo.catching_up

    # Aguarde até que catching_up mostre "false"

Criar Transação de Validador

  • Crie seu validador usando a carteira de hardware:
    crossfid tx staking create-validator \
    --amount=<stake-amount>xfi \
    --pubkey=$(crossfid tendermint show-validator) \
    --moniker="<validator-name>" \
    --chain-id=<chain-id> \
    --commission-rate="0.05" \
    --commission-max-rate="0.20" \
    --commission-max-change-rate="0.01" \
    --min-self-delegation="1000000" \
    --gas="auto" \
    --gas-prices="0.025xfi" \
    --from=<validator-name>
  • ⚠️ Importante: Você precisará confirmar esta transação no seu dispositivo Ledger.

Verificar Criação do Validador

  • Verifique se o seu validador foi criado com sucesso:

    crossfid query staking validators | grep -A 10 -B 10 "<validator-name>"

Verifique o status do seu validador

crossfid query staking validator $(crossfid keys show validator-name --bech val -a)


:::tip
Dica
Para maior segurança e operações automatizadas, considere configurar <PageReference href="/node-operators/setting-up-the-crossfi-chain-client/upgrade-your-node#cosmovisor-with-systemd">Cosmovisor com systemd</PageReference> para gerenciamento automático de nós e atualizações.
:::