Generating High-Entropy Passphrases

Your Root CA passphrase protects everything. This guide shows you how to generate one using only physical objects โ€” no software, no trust required.

Why does this matter? Your Root CA private key is encrypted with your passphrase using AES-256. If an attacker gets the key file, your passphrase is the only thing standing between them and your entire PKI. A passphrase generated by your brain is predictable. A passphrase generated by physics is not.

Understanding Entropy

Entropy measures the randomness in your passphrase. It's expressed in bits. Each bit doubles the number of possible passphrases an attacker must try.

Bits of EntropyPossible CombinationsBrute-Force Time (1B guesses/sec)Rating
40~1 trillion~18 minutesโš ๏ธ Weak
64~18 quintillion~585 years๐Ÿ”’ Acceptable
80~1.2 ร— 10ยฒโด~38 million years๐Ÿ”’ Strong
128~3.4 ร— 10ยณโธ~10ยฒยฒ years๐Ÿ›ก๏ธ Military-grade
Recommendation: For a Trinity Root CA passphrase, aim for at least 80 bits of entropy. For air-gapped systems protecting critical infrastructure, aim for 128 bits.

Method 1: Diceware (Dice)

Diceware uses standard six-sided dice to select words from a public word list. Each word adds approximately 12.9 bits of entropy.

What You Need

Step-by-Step

Step 1: Roll 5 dice

Roll all 5 dice at once. Read them left-to-right to form a 5-digit number.

Roll: โš‚ โš„ โš โš… โšƒ
Result: 3 5 2 6 4 โ†’ 35264

Step 2: Look up the word

Find the number 35264 in the EFF word list. Let's say it maps to the word "kidney".

Step 3: Repeat for each word

Repeat the process to generate as many words as you need:

WordsEntropyUse Case
5 words~64 bitsPersonal / Developer use
6 words~77 bitsTeam / Organizational CA
7 words~90 bitsProduction Root CA
10 words~128 bitsAir-gapped / Critical infrastructure

Step 4: Assemble the passphrase

Join the words with spaces (or dashes, or no separator โ€” the entropy is the same).

kidney-atlas-flame-oyster-gutter-flint-widow
Why spaces don't matter: The security comes from the word selection, not the formatting. Whether you use kidney atlas flame or kidneyatlasflame, the entropy is identical โ€” the attacker knows the word list, not your specific rolls.

Method 2: Coin Flip (Binary)

A coin is a 1-bit random number generator. Heads = 1, Tails = 0. You can build any random value from coin flips.

What You Need

Approach A: Binary-to-Word

Each word on the EFF short list has an index from 1 to 1296. You need 11 coin flips to generate a number in range (2ยนยน = 2048, reject if > 1296).

Step 1: Flip 11 coins

Flips:  H T T H H T H T H H T
Binary: 1 0 0 1 1 0 1 0 1 1 0
Decimal: 1 + 0 + 0 + 128 + 64 + 0 + 16 + 0 + 4 + 2 + 0 = 622

Read the binary number from left to right. The leftmost flip is the most significant bit (1024), and the rightmost is the least (1).

Position values: 1024 512 256 128 64 32 16 8 4 2 1
Flips:              1   0   0   1  1  0  1 0 1 1 0
                 1024 + 0 + 0 + 128 + 64 + 0 + 16 + 0 + 4 + 2 + 0 = 1238

Step 2: Reject if out of range

If the number is greater than 1296, discard it and flip again. This happens about 37% of the time with 11 flips, so you'll occasionally need to re-do a set.

Step 3: Look up and repeat

Look up word #1238 in the short list. Repeat for 6โ€“10 words.

Approach B: Direct Binary Passphrase

For the technically inclined, you can skip the word list entirely and generate a raw binary passphrase encoded as hexadecimal.

Generate 128 bits

Flip a coin 128 times. Record each flip as 1 (heads) or 0 (tails). Group into nibbles (4 bits) and convert to hex:

Flips:  1001 1010 1100 0011 ...
Hex:     9     A    C    3  ...
Result: 9AC3... (32 hex characters = 128 bits)
Memorization challenge: A 32-character hex string is nearly impossible to memorize. This method is best for passphrases you'll store on paper in a safe or split across multiple physical locations using Shamir's Secret Sharing. For a passphrase you need to type from memory, use Diceware words instead.

Best Practices

Do

Don't

Entropy Comparison

MethodExampleEntropy
User-chosen passwordMyDog2024!~28 bits
Random 12-char alphanumerickX9mPq2vBn4R~71 bits
5 Diceware wordsatlas flame oyster gutter flint~64 bits
7 Diceware wordskidney atlas flame oyster gutter flint widow~90 bits
128 coin-flip hex9ac3e7f1...4b2d (32 chars)128 bits
The math is simple: Diceware entropy = logโ‚‚(7776) ร— number_of_words โ‰ˆ 12.9 ร— words. Coin flip entropy = exactly 1 bit per flip. No estimation, no guesswork โ€” pure mathematics.

Where Trinity Uses Your Passphrase

Trinity prompts for a passphrase during two critical operations:

CommandWhat's ProtectedEncryption
trinity initRoot CA private key (root.key)AES-256 (PEM-encrypted)
trinity initTransport private key (transport.key)AES-256 (PEM-encrypted)
trinity signDecrypts Root CA key for signingPassphrase โ†’ AES โ†’ Key

Both keys are encrypted with the same passphrase during trinity init. You only need to remember one passphrase, but it protects both your Root CA signing key and your Kyber transport key.

Ghost Mode Security: If you run trinity sign in Ghost Mode, the decrypted keys are automatically wiped from memory if the watchdog detects network connectivity. Your passphrase is your last line of defense โ€” make it strong.

Next Steps