Blockstream / Blockstream/Jade
Errors in dice-generated recovery phrase lookup table at indices 19, 658, and 1866
- Dominant language
- C
- Stars
- 496
- Forks
- 127
- PR merge metrics
- No merged PRs in 30d
Description
## Summary
The PDF guide for generating a Jade recovery phrase with dice contains three errors in its 2,048-entry BIP39 lookup table.
Guide:
https://storage.googleapis.com/dxp-production-assets/content/blockstream-jade/add-more-security-functionality/create-a-recovery-phrase-using-dice/JadeDiceRollsGuide.pdf
Canonical BIP39 English word list:
https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
## Incorrect entries
| Index | Current entry in PDF | Correct entry | Error |
| ----: | --------------------------- | --------------------------- | ------------------------ |
| 19 | `D1=1, D2=1, D3=4 — act` | `D1=1, D2=3, D3=4 — act` | Incorrect D2 value |
| 658 | `D1=6, D2=3, D3=3 — FALSE` | `D1=6, D2=3, D3=3 — false` | Incorrect capitalization |
| 1866 | `D1=15, D2=10, D3=3 — TRUE` | `D1=15, D2=10, D3=3 — true` | Incorrect capitalization |
## Details
### Index 19
The PDF currently contains:
```text
1 1 4 act 19
```
It should contain:
```text
1 3 4 act 19
```
The dice result `1,1,4` is already correctly assigned to index 3, `about`.
Because of this error:
* `1,1,4` appears twice in the table.
* The valid result `1,3,4` is missing.
* A user who rolls `1,1,4` sees two possible words.
* A user who rolls `1,3,4` cannot find the corresponding entry.
### Index 658
The PDF currently contains:
```text
6 3 3 FALSE 658
```
The canonical BIP39 word is lowercase:
```text
6 3 3 false 658
```
### Index 1866
The PDF currently contains:
```text
15 10 3 TRUE 1866
```
The canonical BIP39 word is lowercase:
```text
15 10 3 true 1866
```
BIP39 mnemonic words should match the canonical lowercase word list. The uppercase entries are inconsistent with that list and could cause confusion or validation/import problems in implementations that require exact lowercase input.
## Full-table audit
I compared all 2,048 entries in the PDF against the canonical BIP39 English word list and independently recalculated the expected dice coordinates using the zero-based BIP39 index:
```text
D1 = floor(index / 128) + 1
D2 = floor((index mod 128) / 8) + 1
D3 = (index mod 8) + 1
```
The audit found:
* All indices from 0 through 2047 are present exactly once.
* Every word is assigned to the correct BIP39 index.
* Index 19 is the only incorrect dice-coordinate entry.
* `FALSE` and `TRUE` are the only capitalization mismatches.
* No additional spelling, index-assignment, or dice-coordinate errors were found.
## Suggested fix
Please update the following three rows in the PDF:
```text
Index 19:
1 3 4 act 19
Index 658:
6 3 3 false 658
Index 1866:
15 10 3 true 1866
```
## AI-assisted audit note
This report was prepared with assistance from **OpenAI ChatGPT, GPT-5.6 Thinking**, on **August 3, 2026 at approximately 00:37 UTC+1**.
The audit used the following sources:
* Blockstream Jade dice guide:
https://storage.googleapis.com/dxp-production-assets/content/blockstream-jade/add-more-security-functionality/create-a-recovery-phrase-using-dice/JadeDiceRollsGuide.pdf
* Canonical BIP39 English word list:
https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
* BIP39 specification:
https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki
The AI-assisted review compared the 2,048 table entries with the canonical BIP39 English word list and checked the expected dice coordinates using:
```text
D1 = floor(index / 128) + 1
D2 = floor((index mod 128) / 8) + 1
D3 = (index mod 8) + 1
```
The reported findings were also checked against the surrounding table entries to detect duplicated or missing dice combinations.
This report is intended to help identify and reproduce documentation errors. It is not a formal code review, security audit, or substitute for independent verification by the Jade maintainers. The PDF and source files should be rechecked directly before applying or publishing any corrections.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.