Skip to content

v1.7.1 — diceware snippet fix

Choose a tag to compare

@doug445 doug445 released this 25 Aug 03:10
· 70 commits to main since this release
Immutable release. Only release title and notes can be modified.

A documentation fix. No script, no on-disk behaviour, and nothing in the
encryption path changed — if you are already running v1.7.0 there is nothing
here you need to re-run.

Fixed

The diceware passphrase recipe in the README did not work, and overstated its
own entropy.

The snippet carried the EFF wordlist URL as a comment and then went straight to
shuf, with no step that actually downloads the file. Anyone who had not
already fetched eff_large_wordlist.txt by hand got:

shuf: eff_large_wordlist.txt: No such file or directory

The second problem was quieter. The command used shuf -n 8, which samples
without replacement, while the paragraph directly above it computes strength
from log2(7776) = 12.92 bits per word. That figure describes independent
draws. Sampling without replacement is a different model, and it cannot produce
the repeated word that a genuine sequence of dice rolls sometimes should.

The recipe now fetches the list, verifies it against a published SHA-256, and
draws with shuf -r:

# EFF long wordlist: 7,776 lines of "11111<TAB>abacus"
curl -O https://www.eff.org/files/2016/07/18/eff_large_wordlist.txt

# Verify it before trusting it for entropy
echo 'addd35536511597a02fa0a9ff1e5284677b8883b83e986e43f15a3db996b903e  eff_large_wordlist.txt' \
    | sha256sum -c

# Eight words, drawn with replacement, from the kernel CSPRNG
shuf -r -n 8 --random-source=/dev/urandom eff_large_wordlist.txt | cut -f2 | paste -sd' '

The checksum is not ceremony. A truncated or substituted wordlist lowers your
entropy silently — the passphrase still reads as eight ordinary English words.
A list cut to its first 100 lines yields 53 bits instead of 103, and nothing in
the output tells you that happened.

Full changelog: v1.7.0...v1.7.1