███████╗██╗ ██╗███████╗ ██╔════╝██║ ██║██╔════╝ █████╗ ██║ ██║█████╗ ██╔══╝ ╚██╗ ██╔╝██╔══╝ ███████╗ ╚████╔╝ ███████╗ ╚══════╝ ╚═══╝ ╚══════╝
EVE is a secure, offline Diceware passphrase generator written in Rust.
Rather than generating passwords you can't remember, EVE produces human-readable passphrases using a cryptographically secure RNG, making them both memorable and mathematically strong.
- True entropy - uses a CSPRNG seeded directly from the operating system
- Curated French wordlist - 55'555 words sourced from ArthurPons
- Configurable length: Choose how many words compose your passphrase at runtime
- Leaves memory clean: properly wipes all sensitive data in memory before exiting
- Fully offline: no network calls, no telemetry, no external services
git clone https://github.com/b0cal/eve
cd eve
cargo build --releaseThe compiled binary will be at target/release/eve
- Rust stable (1.70 or later) - install via rustup
- The wordlist file
wordlist-fr.txtmust be present in the working directory, or its path passed via theWORDLIST_PATHenvironment variable (see Usage)
./eveYou will be prompted to enter the number of words for your passphrase:
> Combien de mots doivent composer la passphrase ? 8
La passphrase est: reproche-promo-courtisan-cloporte-argent-junior-incendiaire-parthe
EVE implements the Diceware method, originally designed around physical dice, adapted here with a larger wordlist and a software CSPRNG:
- Five dice are rolled to produce a 5-digit number (e.g.
12634) - That number is looked up in a wordlist of 55'555 words
- Steps 1-2 are repeated for the requested number of words
- Words are joined with dashes to form the final passphrase
Each word drawn from a 55,555-word list contributes ~15.76 bits of entropy (log₂(55,555)), compared to 12.2 bits with the classic, 7,776-word Diceware list. The table below shows the total entropy and a rough security estimate for each word count:
| Words | Entropy | Security estimate |
|---|---|---|
| 5 | ~78.8 bits | Strong for most personal use |
| 6 | ~94.6 bits | Resistant to well-funded attackers |
| 7 | ~110.3 bits | Secure beyond 2030 |
| 8 | ~126.1 bits | Secure beyond 2050 |
For more context on passphrase strength and thread modelling see NIST SP 800-64B, Appendix A
The wordlist contains 55,555 words - not a power of 2. When mapping a uniformly distributed RNG output to a wordlist that doesn't divide the RNG range evenly, some words are marginally more likely than others. This is called modulo bias.
In practie, the bias per word is on the order of 10⁻⁶ - negligible for passphrase generation. The entropy gain from the larger wordlist (~2.84 extra bits per word over classic Diceware) far outweighs this theoretical impurity. A future release may implement rejection sampling to eliminate the bias entirely.
Generate and open the full API documentation locally
# Just EVE's own documentation
cargo doc --open --no-deps
# EVE + all dependencies
cargo doc --open.
├── Cargo.lock
├── Cargo.toml
├── README.md
├── src
│ ├── lib.rs ← core logic: wordlist loading, dice rolling, passphrase generation
│ └── main.rs ← CLI entrypoint: user interaction and error handling
├── THIRD_PARTY_LICENSE.md
└── wordlist-fr.txt
EVE is MIT licensed - you are free to fork it, adapt it, and use it in any project, including commercial ones. No contribution process is set up at this time.
If you find a bug or have a suggestion, feel free to open an issu
- RNG: EVE uses
StdRngseeded fromSysRng, which draws entropy from the operating system (/dev/urandomon Linux). This is cryptographically appropriate for passphrase generation - Wordlist: Loaded once at startup into memory and never written to disk
- Network: EVE makes no network calls whatsoever
- Modulo bias: See the note on modulo bias in the How it works section
- Threat model: EVE generates strong passphrases but does not protect against keystroke logging, phishing or shoulder surfing. Physical and operational security remain your responsibility
- Auditability: The codebase is intentionally small. If you have specific threat model requirements, the full logic lives in
src/lib.rs
MIT - see LICENSE for details.
The French Diceware wordlist (wordlist-fr.txt) is sourced from diceware-fr-alt by ArthurPons, used under the MIT license.