vault-rs
v0.1.0
Published
A secure CLI tool for managing encrypted secrets locally - a safe alternative to plain .env files
Maintainers
Readme
🔐 vault-rs
Uma ferramenta CLI moderna e segura em Rust para gerenciar segredos (chaves de API, senhas, tokens) de forma criptografada no disco local. Uma alternativa segura e robusta aos arquivos .env em texto puro.
✨ Características
- 🔐 Criptografia de nível empresarial: ChaCha20Poly1305 (AEAD) com nonces aleatórios
- 🔑 Derivação de chave segura: Argon2id com parâmetros otimizados para segurança
- 🧹 Limpeza automática de memória: Dados sensíveis são zeroizados automaticamente
- 🚀 Injeção transparente de variáveis: Execute comandos com segredos sem expô-los
- 📦 Instalação global: Use
vaultde qualquer diretório após instalação - 🔍 Busca inteligente: Encontra vaults automaticamente em diretórios pais
- 🛡️ Zero trust: Senha mestra solicitada a cada operação sensível
🚀 Instalação Rápida
Via NPM (Mais Fácil - Não Requer Rust)
npm install -g vault-rsVia Cargo
cargo install vault-rsDo Código Fonte
git clone https://github.com/lucasfiduniv/vault-rs.git
cd vault-rs
cargo install --path .Requisitos
Para instalação via NPM:
- Node.js 14+ (apenas para instalação, o binário é nativo)
Para instalação via Cargo:
- Rust 1.70+ (edition 2021)
- Windows: Visual Studio Build Tools ou MinGW-w64
- Linux/Mac: GCC ou Clang
📖 Uso
Inicializar um Vault
vault initCria dois arquivos no diretório atual:
.vault- Arquivo criptografado com os segredos.vault.salt- Salt para derivação de chave (não sensível sozinho)
Gerenciar Segredos
# Adicionar ou atualizar
vault set DATABASE_URL "postgresql://user:pass@localhost/db"
vault set API_KEY "sk-1234567890abcdef"
vault set JWT_SECRET "my-secret-token"
# Recuperar
vault get DATABASE_URL
# Listar todas as chaves
vault list
# Remover
vault remove DATABASE_URLExecutar Comandos com Segredos
# Injetar segredos como variáveis de ambiente
vault run -- npm start
vault run -- python app.py
vault run -- cargo build --release
vault run -- docker-compose upCarregar Variáveis no Shell
Opção 1: Comando Simplificado (Recomendado)
vault loadOpção 2: Exportar Manualmente
PowerShell:
vault export | Invoke-ExpressionBash/Zsh:
eval $(vault export)Depois disso, execute seus comandos normalmente:
npm start
python app.py
cargo buildAbrir Shell com Variáveis Carregadas
# Abre novo shell com variáveis já disponíveis
vault shell
# Especificar shell
vault shell bash # Linux/Mac📚 Exemplo Completo
# 1. Instalar
cargo install vault-rs
# 2. Inicializar vault no projeto
cd meu-projeto
vault init
# 3. Adicionar segredos
vault set DATABASE_URL "postgresql://localhost/mydb"
vault set REDIS_URL "redis://localhost:6379"
vault set JWT_SECRET "super-secret-key-123"
vault set STRIPE_API_KEY "sk_live_..."
# 4. Verificar segredos
vault list
# 5. Executar aplicação
vault run -- npm start
# Ou carregar no shell atual
vault load
npm start🔒 Segurança
Criptografia
- Algoritmo: ChaCha20Poly1305 (AEAD)
- Nonces: Aleatórios para cada operação de criptografia
- Tamanho da chave: 256 bits (32 bytes)
Derivação de Chave
- Algoritmo: Argon2id (recomendado pelo OWASP)
- Iterações: 15.000
- Threads: 2
- Paralelismo: 1
- Tamanho do salt: 256 bits (32 bytes)
Gerenciamento de Memória
- Dados sensíveis são limpos da memória usando
zeroizeimediatamente após uso - Senhas mestras nunca persistem em texto puro
- Segredos descriptografados são zeroizados quando o processo filho termina
Boas Práticas Implementadas
- ✅ Salt único por vault
- ✅ Nonces aleatórios para cada criptografia
- ✅ Limpeza automática de memória
- ✅ Senha solicitada a cada operação sensível
- ✅ Nenhum dado sensível em logs ou arquivos temporários
🏗️ Arquitetura
vault-rs/
├── src/
│ ├── main.rs # CLI e lógica principal
│ ├── crypto.rs # Criptografia e derivação de chave
│ └── vault.rs # Estruturas de dados do vault
├── Cargo.toml # Dependências e metadados
└── README.md # Esta documentação📦 Dependências Principais
| Crate | Versão | Propósito |
|-------|--------|-----------|
| clap | 4.4 | Interface de linha de comando |
| chacha20poly1305 | 0.10 | Criptografia simétrica |
| argon2 | 0.5 | Derivação de chave |
| serde / serde_json | 1.0 | Serialização |
| zeroize | 1.6 | Limpeza segura de memória |
| rpassword | 7.3 | Entrada de senha sem eco |
| anyhow | 1.0 | Tratamento de erros |
🛠️ Comandos Disponíveis
| Comando | Descrição |
|---------|-----------|
| vault init | Inicializa um novo vault |
| vault set <KEY> <VALUE> | Adiciona ou atualiza um segredo |
| vault get <KEY> | Recupera o valor de um segredo |
| vault list | Lista todas as chaves armazenadas |
| vault remove <KEY> | Remove um segredo |
| vault run -- <COMMAND> | Executa comando com segredos injetados |
| vault load | Carrega variáveis no shell atual |
| vault export | Mostra comandos para exportar variáveis |
| vault shell | Abre novo shell com variáveis carregadas |
⚠️ Avisos Importantes
- Nunca commite arquivos do vault: Adicione
.vaulte.vault.saltao.gitignore - Backup da senha mestra: Se você perder a senha mestra, os dados serão irrecuperáveis
- Permissões de arquivo: Mantenha os arquivos do vault com permissões restritas
- Ambiente de produção: Considere usar soluções gerenciadas para produção
🤝 Contribuindo
Contribuições são bem-vindas! Por favor:
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Veja CONTRIBUTING.md para mais detalhes.
📝 Licença
Este projeto está licenciado sob os termos da licença MIT ou Apache-2.0, à sua escolha.
🙏 Agradecimentos
- Comunidade Rust por ferramentas incríveis
- Mantenedores das crates de criptografia utilizadas
- Todos os contribuidores e usuários
📊 Status do Projeto
- ✅ Criptografia robusta implementada
- ✅ CLI completa e funcional
- ✅ Gerenciamento seguro de memória
- ✅ Documentação completa
- 🔄 Em desenvolvimento ativo
🔮 Roadmap
- [ ] Suporte para múltiplos vaults
- [ ] Backup e restore de vaults
- [ ] Migração de senha mestra
- [ ] Autocomplete para shells
- [ ] Integração com IDEs
- [ ] Validação de formatos de segredos
- [ ] Histórico de alterações
- [ ] Expiração de segredos
📚 Documentação Adicional
📧 Contato e Suporte
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Security: Veja SECURITY.md para reportar vulnerabilidades
🤝 Contribuindo
Contribuições são muito bem-vindas! Veja nosso Guia de Contribuição para começar.
📄 Licença
Este projeto está licenciado sob os termos da licença MIT ou Apache-2.0, à sua escolha.
Veja LICENSE para mais detalhes.
⭐ Se este projeto foi útil para você, considere dar uma estrela no GitHub!
Feito com ❤️ em Rust
