Carteiras e Gerenciamento de Chaves
Gerencie keypairs, derivação HD e fluxos de assinatura em carteiras e validadores Rust sem vazar segredos.
Receita
use ed25519_dalek::SigningKey;
use rand::rngs::OsRng;
struct KeyStore {
signing: SigningKey,
}
impl KeyStore {
fn generate() -> Self {
Self {
signing: SigningKey::generate(&mut OsRng),
}
}
fn sign(&self, msg: &[u8]) -> ed25519_dalek::Signature {
use ed25519_dalek::Signer;
self.signing.sign(msg)
}
}Quando usar isso:
- Carteiras CLI e signers de bot para estratégias automatizadas
- Serviços de custódia com APIs de assinatura com suporte de HSM
- Chaves de identidade de validador separadas das carteiras operacionais "hot"
Exemplo de Trabalho
Documentação de caminho estilo HD com limite explícito de crate de derivação:
use ed25519_dalek::SigningKey;
use bip39::{Language, Mnemonic, Seed};
use rand::rngs::OsRng;
fn derive_from_mnemonic(words: &str, path: &str) -> anyhow::Result<SigningKey> {
let mnemonic = Mnemonic::parse_in(Language::English, words)?;
let seed = Seed::new(&mnemonic, "");
// Use a crate de derivação SLIP-0010 ou ed25519 específica da cadeia para `path`
let _ = (seed.as_bytes(), path);
Ok(SigningKey::generate(&mut OsRng)) // placeholder: substituir por derivação real
}O que isso demonstra:
- Análise de mnemônicos sem imprimir a seed no stdout
- Separação entre geração de seed e derivação de caminho específica da cadeia
- Propagação de erros com
Resultem vez de panics na UX da carteira
Mergulho Profundo
Como Funciona
- Mnemônico codifica entropia como palavras; BIP-39 padroniza listas de palavras.
- Caminhos HD como
m/44'/501'/0'/0'mapeiam contas por cadeia (Solana 501). - Keystore JSON criptografa a chave privada com chave derivada de senha.
- HSM/MPC movem a operação de assinatura para fora da memória do laptop.
Níveis de Chave
| Nível | Localização | Uso |
|---|---|---|
| Hot | Memória do App | Bots, pequenos saldos |
| Warm | Disco criptografado | Operações diárias com limites |
| Cold | Hardware/offline | Tesouraria, autoridade de upgrade |
Armadilhas
- Commit de mnemônicos no git - perda instantânea de fundos. Correção: scan git-secrets; use env + KMS em CI apenas para chaves de teste.
- Mesma chave para deploy e tesouraria - um vazamento drena tudo. Correção: chaves separadas por função com multisig na tesouraria.
- Erro de digitação no caminho de derivação - o usuário vê uma carteira vazia. Correção: exibir o caminho na UI e vetores de teste contra endereços conhecidos.
- Assinar JSON de usuário bruto - phishing troca campos. Correção: mensagens tipadas estruturadas com tags de domínio.
- Backup de seed na área de transferência - malware coleta a área de transferência. Correção: desencorajar área de transferência; preferir exibição em hardware.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Carteira de extensão de navegador | UX de dApp do consumidor | Assinatura de servidor headless |
| Custódia Fireblocks/Copper | Escala institucional | Produto de autocustódia |
| Carteiras API Turnkey | SLA de assinatura hospedada | Requisito completo on-premise |
| Carteira de papel | Exercício de armazenamento a frio | Necessidades de assinatura frequentes |
FAQs
Onde armazenar chaves de produção?
HSM ou KMS na nuvem com política IAM; chaves "hot" apenas com limite diário limitado.
Tipos de moeda BIP-44?
O tipo de moeda no caminho seleciona a curva/cadeia - consulte o registro SLIP-0044 para sua rede.
Como rotacionar chaves?
Instrução de transferência de autoridade on-chain, período de execução dupla, depois revogar permissões da chave antiga.
Padrões Multisig?
Squads, Gnosis Safe (EVM) ou programas multisig nativos - escolha de acordo com as capacidades da cadeia.
Testar sem fundos reais?
Chaves de devnet em variáveis de ambiente excluídas de builds de produção via flags cfg em tempo de compilação.
Keystore criptografado?
scrypt + AES do formato de keystore Ethereum ou arquivos criptografados com age para carteiras CLI.
Chaves de validador?
Contas de consenso e comissão separadas; nunca reutilize a seed da extensão do navegador.
Assinatura em CI?
Apenas chaves efêmeras; a assinatura de produção nunca deve ser executada em runners de CI compartilhados.
Logging de auditoria?
Registre pubkey, tipo de instrução e resultado da simulação - nunca segredos de pré-imagem de assinatura.
Primitivas criptográficas?
Veja Criptografia Aplicada para algoritmos.
Relacionado
- Criptografia Aplicada - curvas e hashes
- Programas Solana - autoridades de programa
- Segurança e Auditoria - auditorias de manuseio de chaves
- Fundamentos de Blockchain em Rust - exemplo de keygen
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.