Skip to content
ronidominguesPublic

About

Deterministic Password Generator (DPGen): gerador determinístico de senhas por derivação de chave.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

DPGen

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

Documentação

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

Como usar

  1. Digite a senha-mestra — a única que você precisa decorar.
  2. Confira a impressão digital (três símbolos coloridos). Se ela mudou desde a última vez, você digitou errado.
  3. Informe o serviço (github.com) e o login.
  4. Escolha o formato e clique em Gerar senha.

Para trocar a senha de um serviço sem mexer na mestra, aumente a Versão.


O que este método troca pelo quê

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.


Rodando localmente

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 ar

Requer Node 24 ou superior (a implementação de referência usa o Argon2id nativo do Node).


Recuperando suas senhas sem este site

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 standard

Guarde 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.


Auditando

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.

Publicando no GitHub Pages

  1. Ajuste REPO_URL em src/config.ts e VITE_SITE_URL no .env para o seu usuário/organização.
  2. Confirme que base em vite.config.ts corresponde ao nome do repositório (/dpgen/). Se você usar um repositório <usuario>.github.io, mude para /.
  3. Em Settings → Pages, selecione GitHub Actions como origem.
  4. Faça push na main. O workflow deploy.yml roda os testes, constrói e publica.

Licença

MIT. Ferramenta livre, fornecida como está, sem garantias — revise o código antes de confiar suas contas a ela.

About

Deterministic Password Generator (DPGen): gerador determinístico de senhas por derivação de chave.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages