Gerador de wordlist Diceware em português brasileiro, a partir de dicionários em texto simples.
O programa produz uma lista de exatamente 6ⁿ palavras (por padrão, 6⁵ = 7 776), formatada no padrão canônico Diceware — cada palavra precedida pelo código numérico correspondente ao lançamento de n dados de seis faces.
O método Diceware, criado por Arnold Reinhold em 1995, permite gerar passphrases seguras e memoráveis usando dados físicos como fonte de aleatoriedade. A robustez do método depende de duas propriedades da lista de palavras:
- Tamanho exato de 6ⁿ entradas — cada lançamento de n dados mapeia univocamente para uma palavra, sem viés.
- Unicidade de prefixo — palavras com início idêntico aumentam o risco de erro de digitação e dificultam a memorização. A lista gerada por este programa garante unicidade de prefixo pelo comprimento mínimo necessário.
Este projeto pretende construir uma wordlist Diceware que possa ser oficial amplamente adotada para o português brasileiro de forma reproduzível e auditável.
O pipeline de geração opera em três etapas:
1. Pré-processamento por prefixo único
O programa lê o dicionário de entrada (uma palavra por linha, ordenado lexicograficamente) e retém apenas a primeira palavra de cada prefixo de comprimento k. O valor de k começa em 4 e é incrementado automaticamente até que o número de candidatas supere o alvo de 6ⁿ palavras.
abacate ← mantida (prefixo "abac" visto pela primeira vez)
abacaxi ← descartada (prefixo "abac" já registrado)
abaciais ← descartada (prefixo "abac" já registrado)
abadessa ← mantida (prefixo "abad" novo)
2. Refinamento por comprimento
Das candidatas obtidas, o programa filtra por comprimento mínimo crescente (a partir de 6 letras), descartando os grupos mais curtos inteiros enquanto o total permanecer acima do alvo. Quando o descarte de um grupo inteiro ultrapassaria o alvo para baixo, apenas as palavras necessárias daquele grupo são removidas — as últimas em ordem lexicográfica, preservando as primeiras.
3. Formatação Diceware
As 6ⁿ palavras resultantes, ordenadas lexicograficamente e normalizadas para minúsculas, são emparelhadas
com os códigos gerados por itertools.product(range(1, 7), repeat=n) — que produz exatamente a sequência
11...1 até 66...6 na ordem correta.
O projeto não possui dependências externas além da biblioteca padrão do Python 3.9 ou superior.
git clone https://github.com/dclobato/diceware.git
cd dicewarepython3 diceware.py [-h] [-d N] entrada saida
| Argumento | Descrição |
|---|---|
entrada |
Arquivo de dicionário (uma palavra por linha, ordenado lexicograficamente). |
saida |
Arquivo de saída no formato Diceware. |
-d N, --dados N |
Número de dados. O alvo será 6^N palavras. Padrão: 5 (7 776 palavras). |
# Configuração padrão: 5 dados → 7 776 palavras
python3 diceware.py br-sem-acentos.txt lista.txt
# 4 dados → 1 296 palavras (lista compacta)
python3 diceware.py br-sem-acentos.txt lista-4d.txt -d 4
# 6 dados → 46 656 palavras (exige dicionário muito rico)
python3 diceware.py br-sem-acentos.txt lista-6d.txt -d 6Configuração: 5 dado(s) → alvo de 7,776 palavras (6^5).
Buscando comprimento de prefixo mínimo para superar 7,776 candidatas...
Prefixo 4: 6,958 candidatas
Prefixo 5: 12,450 candidatas
→ Usando prefixo de 5 letras (12,450 candidatas).
Refinando por comprimento mínimo...
→ Comprimento mínimo final: 7 letras
→ Distribuição: {7: 1204, 8: 2891, 9: 2109, ...}
Concluído. Palavras escritas: 7,776 → 'lista.txt'
Exemplo das primeiras entradas:
11111 abafado
11112 abafador
11113 abaixado
11114 abandonar
11115 abastado
──────────────────────────────────────────────────────────
Entropia da passphrase (lista com 7,776 palavras, 5 dado(s))
──────────────────────────────────────────────────────────
Palavras Espaço de busca Entropia Avaliação
──────────────────────────────────────────────────────────
1 7.78x10^3 12.92b fraco x
2 6.05x10^7 25.85b fraco x
3 4.71x10^11 38.77b fraco x
4 3.66x10^15 51.70b fraco x
5 2.84x10^19 64.62b aceitável
──────────────────────────────────────────────────────────
bits/palavra = log₂(7,776) = 12.9248 b
──────────────────────────────────────────────────────────
A entropia de uma passphrase Diceware é calculada como:
H = w × log₂(N)
onde N é o tamanho da lista e w é o número de palavras escolhidas. Como N = 6ⁿ, isso se reduz a
w × n × log₂(6) — exatamente o valor canônico da especificação original de Reinhold.
Para a lista de 7 776 palavras (5 dados), cada palavra contribui com 12,92 bits de entropia.
Nota sobre o NIST SP 800-63B-4 (julho 2025): A versão vigente do NIST SP 800-63B-4 abandonou limiares de entropia em bits como critério normativo para senhas escolhidas pelo usuário, cuja distribuição real é impossível de modelar, e passou a exigir comprimento mínimo de 15 caracteres como principal controle. Para passphrases Diceware, porém, a entropia é exata (distribuição uniforme e conhecida), de modo que
H = w × log₂(N)continua sendo a medida correta. As faixas da tabela abaxio refletem o consenso da comunidade de segurança (EFF, Reinhold), não recomendações normativas do NIST.
| Faixa | Avaliação |
|---|---|
| < 60 bits | Fraco - inadequado para uso moderno |
| 60 - 80 bits | Aceitável - uso pessoal de baixo risco |
| 80 - 100 bits | Forte - recomendado pelo NIST SP 800-63B |
| > 100 bits | Excelente - resistente a ataques futuros |
Para atingir 80 bits com a lista padrão, são necessárias 7 palavras (~90,5 b). Com 6 palavras chega-se a ~77,5 b, razoável para uso cotidiano. O EFF recomenda passphrases de pelo menos 6 palavras para contas de alto valor.
O programa aceita qualquer arquivo de texto com uma palavra por linha, preferencialmente sem acentuação e ordenado lexicograficamente. As fontes abaixo podem ser consideradas
https://www.ime.usp.br/~pf/dicios/
Coleção mantida pelo Instituto de Matemática e Estatística da USP. Disponibiliza listas de palavras do português em diferentes formatos, incluindo versões sem acento. É a fonte disponível publicamente para o português brasileiro e recomendada como ponto de partida para este projeto.
https://github.com/fserb/pt-br
Repositório com listas de palavras do português brasileiro derivadas de fontes abertas, organizadas por frequência e categoria. Útil para complementar o dicionário do IME-USP com vocabulário mais contemporâneo.
https://github.com/LibreOffice/dictionaries/tree/master/pt_BR
Dicionário ortográfico utilizado por LibreOffice, Mozilla Firefox e outros projetos de código aberto. O arquivo
.dic pode ser convertido para o formato de entrada deste programa com um pré-processamento simples:
# Remove metadados da primeira linha e a informação de afixo após a barra
tail -n +2 pt_BR.dic | cut -d'/' -f1 | sort > br-hunspell.txthttps://github.com/thoughtworks/dadoware
Implementação alternativa de wordlist Diceware para o português (projeto arquivado em Jun, 2025. Útil como referência para comparação e validação da lista gerada por este projeto.
Cada linha do arquivo de saída segue o formato canônico Diceware, com código e palavra separados por tabulação:
11111 abafado
11112 abafador
11113 abaixado
...
66664 zurziu
66665 zurrapa
66666 zurzona
Para usar a lista na prática, role n dados físicos (ou use um gerador de números aleatórios criptograficamente seguro), localize o código resultante na lista e anote a palavra correspondente. Repita para cada palavra da passphrase desejada.
MIT License. Consulte o arquivo LICENSE para os termos completos.