Deterministic Password Generator — gerador determinístico de senhas por derivação de chave. A senha não é guardada em lugar nenhum — ela é recalculada, toda vez, a partir da sua senha-mestra e do nome do serviço. Mesmas entradas, mesma senha, em qualquer aparelho, sem cofre e sem servidor.
Tudo acontece no navegador. A página é estática, não faz nenhuma requisição depois de carregar e funciona offline.
senha-mestra (segredo) ─┐
serviço + login + versão ├─> SHA-256 ─> salt ─> Argon2id ─> 128 bytes ─> senha
+ formato (público) ─┘ 64 MiB · 3 passagens
A pasta docs/ explica o projeto inteiro, do "o que é um hash?" até a
análise matemática do modelo criptográfico:
- Ciclo de vida dos dados — o que acontece com cada dado que você digita, do teclado ao esquecimento
- As bibliotecas — Argon2id, SHA-256, HMAC e a aritmética da renderização, cada uma do nível básico ao acadêmico
- O código explicado — arquivo por arquivo, sem pressupor que você programe
- Manual de deploy — como publicar num repositório diferente do que guarda o código
- Digite a senha-mestra — a única que você precisa decorar.
- Confira a impressão digital (três símbolos coloridos). Se ela mudou desde a última vez, você digitou errado.
- Informe o serviço (
github.com) e o login. - Escolha o formato e clique em Gerar senha.
Para trocar a senha de um serviço sem mexer na mestra, aumente a Versão.
Ganha: não existe cofre para vazar, arquivo para perder, backup para manter ou sincronização para interceptar. Cada serviço recebe uma senha independente. O algoritmo é público e reimplementável.
Perde: se você esquecer a senha-mestra, não há recuperação — não existe servidor nem cópia. Você precisa lembrar (ou anotar) os parâmetros: formato, versão e login. E não dá para trocar uma senha isolada sem usar o campo Versão.
Nada disso protege contra uma senha-mestra fraca ou um aparelho comprometido por keylogger ou extensão maliciosa.
npm ci
npm run dev # servidor de desenvolvimento
npm test # vetores conhecidos + testes do núcleo criptográfico
npm run build # tsc --noEmit + build de produção em dist/
npm run preview # serve o dist/ como ele vai para o arRequer Node 24 ou superior (a implementação de referência usa o Argon2id nativo do Node).
O algoritmo está especificado em
spec/dpgen-v1.md, e
spec/reference.mjs é uma implementação completa em Node
com zero dependências:
echo -n 'sua senha-mestra' | node spec/reference.mjs \
--service github.com --login roni --counter 1 --preset standardGuarde uma cópia desse arquivo junto das suas anotações. São duzentas linhas de JavaScript — é a única dependência real do seu esquema de senhas.
O núcleo criptográfico são cinco arquivos pequenos, sem abstração nenhuma pelo caminho:
| Arquivo | Responsabilidade |
|---|---|
src/crypto/spec.ts |
Constantes do algoritmo, alfabetos, presets, perfis de custo |
src/crypto/salt.ts |
Normalização das entradas e construção do salt |
src/crypto/derive.ts |
Argon2id e montagem da senha |
src/crypto/render.ts |
Bytes → senha, com conformidade de política |
src/crypto/fingerprint.ts |
Impressão digital da senha-mestra |
npm test compara a implementação do app (Argon2id em WASM, via hash-wasm)
com os vetores gerados pela referência (Argon2id nativo do Node). Passar nos
dois é um cross-check entre implementações independentes do mesmo algoritmo.
Conferindo as promessas você mesmo, no navegador:
- Nada é enviado — abra a aba Rede e recarregue: só há requisições ao próprio domínio. Ou desligue a internet e continue usando.
- Nada é guardado — em
Application → Storage,localStorage,sessionStorage, cookies e IndexedDB ficam vazios. Só existe o cache de arquivos estáticos do service worker. - CSP — o build de produção declara
default-src 'none', sem violações no console.
- Ajuste
REPO_URLemsrc/config.tseVITE_SITE_URLno.envpara o seu usuário/organização. - Confirme que
baseemvite.config.tscorresponde ao nome do repositório (/dpgen/). Se você usar um repositório<usuario>.github.io, mude para/. - Em Settings → Pages, selecione GitHub Actions como origem.
- Faça push na
main. O workflowdeploy.ymlroda os testes, constrói e publica.
MIT. Ferramenta livre, fornecida como está, sem garantias — revise o código antes de confiar suas contas a ela.