Pular para o conteúdo principal

Protegendo um Validador

Cada candidato a validador é encorajado a executar suas operações de forma independente, pois configurações diversas aumentam a resistência da rede. Os candidatos a validador devem começar sua fase de configuração agora para estar a tempo para o lançamento.

Gerenciamento de Chaves - Carteiras de Hardware e HSM

É de missão crítica que um atacante não possa roubar a chave de um validador. Se isso for possível, coloca em risco toda a participação delegada ao validador comprometido. Módulos de segurança de hardware 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
  • A assinatura de transações ocorre dentro do dispositivo
  • Chaves privadas nunca saem da carteira de hardware
  • Uma frase mnemônica de 24 palavras controla o acesso a todas as chaves
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 frases mnemônicas com segurança offline em múltiplas localizações

Suporte HSM

Módulos HSM devem suportar assinaturas ed25519 para CrossFi Chain. O YubiHSM2 suporta ed25519 e esta biblioteca 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 suportam operações de validador CrossFi através do aplicativo Cosmos. O aplicativo Ledger pode armazenar blocos recentes e ajuda a mitigar ataques de assinatura dupla.

Operações Suportadas:

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

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

Tipos de Chaves

Validadores CrossFi usam dois tipos distintos de chaves privadas, cada uma servindo propósitos diferentes:

Chave de Conta (Chave do Operador do Validador)

  • Propósito: Controla a conta do validador para tarefas operacionais
  • Uso:
    • Receber recompensas de staking e comissões
    • Atualizar informações do validador (descrição, taxa de comissão)
    • Operações de auto-delegação e des-delegação
    • Votação de governança do validador
  • Armazenamento: Pode ser armazenada em carteiras de hardware (Ledger) para maior segurança
  • Prefixo: Usa prefixos mpvaloper e mpvaloperpub
  • Criação: Gerada com crossfid keys add <nome> --ledger para integração de carteira de hardware

Chave de Consenso (Chave Tendermint)

  • Propósito: Usada pelo Tendermint/CometBFT para assinar blocos e votos de consenso
  • Uso:
    • Assinatura de propostas de bloco
    • Assinatura de prevote e precommit em rodadas de consenso
    • Deve estar disponível 24/7 para produção contínua de blocos
  • Armazenamento: Armazenada no arquivo priv_validator.json por padrão
  • Prefixo: Associada com chave pública mpvalconspub
  • Segurança: Pode ser isolada usando Tendermint KMS para proteção aprimorada
  • Criação: Gerada automaticamente quando o nó é inicializado com crossfid init
Aviso Crítico de Segurança
  • Nunca copie priv_validator.json entre múltiplos nós - isso causará assinatura dupla e resultará em slashing
  • Não é possível migrar chaves existentes para carteiras de hardware - só é possível para novos validadores
  • Faça backup de ambos os tipos de chaves de forma segura e separadamente

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

Nós Sentinela (Proteção DDOS)

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

Uma forma recomendada de mitigar esses riscos é que os validadores estruturem cuidadosamente sua topologia de rede em uma arquitetura chamada de nó sentinela.

Nós validadores devem se conectar apenas a nós completos que confiam porque os operam eles mesmos ou são executados por outros validadores que conhecem socialmente. Um nó validador tipicamente executa em um centro de dados. A maioria dos centros de dados fornece links diretos às redes dos principais provedores de nuvem. O validador pode usar esses links para se conectar a nós sentinela na nuvem. Isso desloca a carga 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 ativados ou ativados para mitigar ataques nos existentes.

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

Para configurar sua arquitetura de nó sentinela, você pode seguir as instruções abaixo:

Nós validadores devem editar seu config.toml:


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

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

# Definir como 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 compartilhados com outros pares)

# Exemplo de ID: 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?

Ataques de negação de serviço ocorrem quando um atacante envia uma avalanche de tráfego de internet para um endereço IP para impedir que o servidor nesse endereço IP se conecte à internet.

Um atacante escaneia a rede, tenta aprender o endereço IP de vários nós validadores, e os desconecta da comunicação inundando-os com tráfego.

Uma forma recomendada de mitigar esses riscos é que os validadores estruturem cuidadosamente sua topologia de rede usando uma arquitetura de nó sentinela.

Espera-se que nós validadores se conectem apenas a nós completos que confiam porque operam os nós completos eles mesmos ou os nós completos confiáveis são executados por outros validadores que conhecem socialmente. Um nó validador é tipicamente executado em um centro de dados. A maioria dos centros de dados fornece links diretos às redes dos principais provedores de nuvem. O validador pode usar esses links para se conectar a nós sentinela na nuvem. Esta mitigação desloca a carga 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 ativados ou ativados para mitigar ataques nos existentes.

Nós sentinela podem ser rapidamente ativados ou mudar 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. Esta estratégia garante que propostas de bloco e votos do validador tenham uma chance muito maior de chegar ao resto da rede.

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

Guia de Configuração de Carteira de Hardware

Configuração de Carteira de Hardware Ledger

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

Passo 1: Preparar seu Dispositivo Ledger

Instalar Ledger Live

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

Instalar Aplicativo Cosmos

  • No Ledger Live:
    • Navegue para a seção Manager
    • Conecte e desbloqueie seu dispositivo Ledger
    • Procure pelo aplicativo "Cosmos"
    • Clique em Install para adicionar o aplicativo Cosmos ao seu dispositivo
    • Nota: Você pode precisar habilitar o Modo Desenvolvedor nas configurações do Ledger Live se o aplicativo Cosmos não estiver visível.

Inicializar ou Restaurar Frase Semente

  • Para novos dispositivos:
    • Siga a configuração do dispositivo para gerar uma nova frase de recuperação de 24 palavras
    • Escreva todas as 24 palavras na ordem exata mostrada
    • Verifique a frase inserindo as palavras solicitadas
  • Para dispositivos existentes:
    • Use sua frase de recuperação existente se já tiver uma
    • Garanta que você tenha backups seguros offline da frase
  • ⚠️ Crítico: Armazene sua frase de recuperação em múltiplas localizações seguras offline. A perda desta frase significa perda permanente do seu validador!

Passo 2: Criar Conta de Validador com Ledger

Verificar Configuração do Daemon CrossFi

  • Garanta que seu binário crossfid esteja compilado com suporte Ledger:
    crossfid version --long
  • A saída deve incluir suporte Ledger nas tags de build.

Conectar e Desbloquear Ledger

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

Criar Chave de Validador

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

Verificar Endereço no Dispositivo

  • Sempre verifique se o endereço coincide com o que está exibido no seu Ledger:
    crossfid keys show <nome-validador> -d
  • Este comando irá:
    • Exibir o endereço no seu terminal
    • Solicitar verificação de endereço no seu dispositivo Ledger
    • Exigir que você confirme o endereço na tela do dispositivo
  • Sempre verifique se os endereços coincidem antes de prosseguir com qualquer transação.

Passo 3: Melhores Práticas de Segurança

🔐 Segurança Mnemônica

  • Armazenar frases de recuperação apenas offline
  • Usar múltiplas localizações seguras
  • Nunca compartilhar com ninguém
  • Considerar soluções de backup em metal
  • Testar processo de recuperação em dispositivo sobressalente

🔄 Segurança Operacional

  • Sempre verificar endereços no dispositivo
  • Manter firmware do Ledger atualizado
  • Usar PIN único do dispositivo
  • Habilitar timeout de auto-bloqueio
  • Monitorar atualizações de firmware

Integração com Tendermint KMS

Para segurança adicional da sua chave de consenso (a chave usada para assinatura de blocos), considere usar o Sistema de Gerenciamento de Chaves Tendermint (KMS).

O que é Tendermint KMS?

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

  • Isola chaves de consenso de nós validadores
  • Previne assinatura dupla através de rastreamento de estado
  • Suporta módulos de segurança de hardware (HSM)
  • Fornece alta disponibilidade através de redundância
  • Executa em um servidor separado para segurança aprimorada

Visão Geral da Configuração KMS

Instalar Dependências

  • Instale dependências necessárias para compilação 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 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 KMS

  • Crie diretório de configuração KMS e arquivos:
    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 KMS

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

Configuração de Nó para KMS

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

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

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

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

Para exemplos detalhados de configuração KMS e configurações avançadas, consulte:

Criando um Novo Validador com Carteira de Hardware

Uma vez que você tenha configurado sua carteira de hardware e opcionalmente configurado KMS, siga estes passos para criar seu validador:

Financiar sua Conta de Validador

  • Envie tokens XFI para seu endereço de carteira de hardware:
    # Obter seu endereço de validador
    crossfid keys show <nome-validador> --address

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

Sincronizar seu Nó

  • Garanta que seu nó validador esteja completamente sincronizado antes de criar o validador:
    # Verificar status de sincronização
    crossfid status | jq .SyncInfo.catching_up

    # Aguardar até catching_up mostrar "false"

Criar Transação de Validador

  • Crie seu validador usando a carteira de hardware:
    crossfid tx staking create-validator \
    --amount=<quantidade-stake>xfi \
    --pubkey=$(crossfid tendermint show-validator) \
    --moniker="<nome-validador>" \
    --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=<nome-validador>
  • ⚠️ Importante: Você precisará confirmar esta transação no seu dispositivo Ledger.

Verificar Criação de Validador

  • Verifique se seu validador foi criado com sucesso:
    # Encontrar seu validador
    crossfid query staking validators | grep -A 10 -B 10 "<nome-validador>"

    # Verificar status do seu validador
    crossfid query staking validator $(crossfid keys show <nome-validador> --bech val -a)
Dica Profissional

Para segurança aprimorada e operações automatizadas, considere configurar Cosmovisor com systemd para gerenciamento automático de nós e atualizações.