From: Aneesh Karve <aneesh.karve@gmail.com>
To: Bitcoin Development Mailing List <bitcoindev@googlegroups.com>
Subject: [bitcoindev] Re: [BIP Proposal] Add BIP-0093 (Codex32) as application to BIP-0085
Date: Sun, 7 Sep 2025 16:13:17 -0700 (PDT) [thread overview]
Message-ID: <70561361-7237-43e8-bfb0-071c6fd60d54n@googlegroups.com> (raw)
In-Reply-To: <4064eb1b-f430-4ccd-958e-aa03c653439dn@googlegroups.com>
[-- Attachment #1.1: Type: text/plain, Size: 11418 bytes --]
Regarding my comment on 'hrp' I do see you have a table for that, which is
clear enough. It's intended as an enum, although I don't see "cl" in
BIP-93, the same way I see "ms"?
Is there anything we can do to simplify or clarify the derivation paths?
They are not "wrong" per se but these will be the longest derivation paths
in the BIP-85 spec and I'm wondering if there's room for "less is more" in
the derivation path.
> Pseudocode: character_value = int.from_bytes(drng.read(1), "big") >> 3
This is sensible with respect to deriving a single bech32 character but
here and in the description above the number of characters we are drawing
could be clarified consistent with the "Bytes Length Table" and there also
it should be clarified if this is bytes drawn or bytes retained or
something else. It could further be clarified that all draws are from the
same DRNG instance. For example, elsewhere in BIP-85 we pass the .read
*method* (not an invocation) since in RSA key gen the number of draws is
unknown ahead of time. In your case the number of draws is known but again
the pseudocode should clarify how many draws or iterations to obtain a
complete share or secret as a function of the derivation path segments.
Drawing and truncating a single byte per character is certainly clear to
understand but I keep wondering if implementers shouldn't draw ((chars * 5)
// 8) bytes in one shot? These bytes aren't expensive or anything but it's
less iterations, less total reads, etc. If my suggestion becomes hard to
read or write then feel free to keep as is.
On Thursday, September 4, 2025 at 9:50:57 AM UTC-7 Ben Westgate wrote:
> Thanks Javier for confirming my updates address your concerns,
> Andrew Poelstra and Russell O'Connor gave feedback on the bip85 codex32
> application, they:
> - support it for recoverable "uncle-Jim"-style child codex32 strings for
> forgetful relatives.
> - prefer wallets generate t fresh initial strings by directly encoding
> RNG entropy to maintain information-theoretic security.
> - see value in it to stretch entropy when users won’t provide enough for
> direct encoding but don't trust their hRNG.
> - consider codex32 backups for a bip85 root keys a very good idea.
>
> I welcome further feedback on the proposed before I submit it as a PR:
> https://github.com/bitcoin/bips/compare/master...BenWestgate:bips:codex32
>
> Best regards, Ben Westgate
>
> On Tuesday, September 2, 2025 at 4:37:20 AM UTC-5 Javier Mateos wrote:
>
> Hi Ben,
>
> Thank you for implementing those changes so promptly. I reviewed the
> commit and the updates address both concerns effectively.
>
> These changes should ensure consistent implementations across different
> codex32 tooling that uses BIP-85 derivation.
>
> The proposal looks technically sound, follows BIP-85's established pattern
> for applications, and is supported by comprehensive test vectors and a
> reference implementation.
>
> Looking forward to hearing feedback from other reviewers as well.
>
> Best regards,
> Javier Mateos
>
> El lunes, 1 de septiembre de 2025 a las 20:15:11 UTC-3, Ben Westgate
> escribió:
>
> Hi Javier,
>
> Thank you for your feedback.
>
> I added pseudocode for the character value selection. I added a column and
> row to the n table to clarify the t==0 constraint on n, removed the notes
> and in the unshared secret section made the normative statement: 'When threshold
> == "0", n MUST be *1* and the output is a codex32 secret.'
>
> I’ve updated the PR with these changes and would appreciate your review.
>
> Commit:
> https://github.com/BenWestgate/bips/commit/fa6e9788bf04d271792ed4ea89a112d12284ef02
>
> Best regards, Ben Westgate
>
>
> On Monday, September 1, 2025 at 6:34:39 AM UTC-5 Javier Mateos wrote:
>
> Hi Ben,
>
> Thank you for your proposal to integrate BIP-0093 (codex32) as an
> application within BIP-0085
>
> Reviewing the specification, I believe I see two areas where we could
> improve clarity for implementers:
>
> 1) The DRNG→5-bit extraction process could benefit from explicit
> pseudocode to avoid implementation variations
> 2) The rule 'threshold == 0 implies n == 1' currently appears as a note
> but could be clearer as a normative requirement"
>
> Best Regards,
> Javier Mateos
>
> El domingo, 31 de agosto de 2025 a las 19:29:46 UTC-3, Ben Westgate
> escribió:
>
> Hello bitcoin-dev,
>
> I’m Ben Westgate, a contributor interested in deterministic wallet backups
> and seed management.
>
> Per BIP-0002, I propose listing *BIP-0093 (codex32)*
> <https://github.com/bitcoin/bips/blob/master/bip-0093.mediawiki> as an
> application of
> *BIP-0085 (Deterministic Entropy from BIP32 Keychains)
> <https://github.com/bitcoin/bips/blob/master/bip-0085.mediawiki>*,
> similar to the existing BIP39 application. This allows wallets to derive
> codex32 backups from BIP-0032 master keys.
>
> *Summary*
>
> -
>
> Application number: 93'
> - Derivation path:
> m/83696968'/93'/{hrp}'/{threshold}'/{n}'/{byte_length}'/{id0}'/{id1}'/{id2}'/{id3}'/{index}'
>
> Codex32, defined in BIP-93, is a human-readable encoding with checksumming
> and share indexing designed for SSS backups of BIP-0032 seeds. This PR
> proposes a deterministic way to generate codex32 strings using BIP-85.
>
> *Rationale*
>
> -
>
> Mirrors the existing BIP-85 application for BIP-39.
> -
>
> Codex32 offers error correction, hand verification, identifiers, and
> secret sharing features compared to BIP-39.
> -
>
> Adds a standardized way for wallets to generate codex32 backups from
> BIP-85-derived entropy
> -
>
> Test vectors and reference implementation are linked to in the PR.
>
> *Risks and alternatives*
>
> -
>
> Wallet adoption of codex32 is still limited, though a draft PR #32652
> <https://github.com/bitcoin/bitcoin/pull/32652?utm_source=chatgpt.com>
> for importing codex32 strings to Bitcoin Core has support.
> - Codex32 implementers could use the BIP-85 dice application, but
> defining a direct application improves interoperability.
>
> PR:
> https://github.com/bitcoin/bips/compare/master...BenWestgate:bips:codex32
> <https://github.com/bitcoin/bips/compare/master...BenWestgate:bips:codex32?utm_source=chatgpt.com>
>
> Feedback is welcome.
> Best regards,
> Ben Westgate
>
>
>
> On Tuesday, September 2, 2025 at 4:37:20 AM UTC-5 Javier Mateos wrote:
>
>> Hi Ben,
>>
>> Thank you for implementing those changes so promptly. I reviewed the
>> commit and the updates address both concerns effectively.
>>
>> These changes should ensure consistent implementations across different
>> codex32 tooling that uses BIP-85 derivation.
>>
>> The proposal looks technically sound, follows BIP-85's established
>> pattern for applications, and is supported by comprehensive test vectors
>> and a reference implementation.
>>
>> Looking forward to hearing feedback from other reviewers as well.
>>
>> Best regards,
>> Javier Mateos
>>
>> El lunes, 1 de septiembre de 2025 a las 20:15:11 UTC-3, Ben Westgate
>> escribió:
>>
>>> Hi Javier,
>>>
>>> Thank you for your feedback.
>>>
>>> I added pseudocode for the character value selection. I added a column
>>> and row to the n table to clarify the t==0 constraint on n, removed the
>>> notes and in the unshared secret section made the normative statement:
>>> 'When threshold == "0", n MUST be *1* and the output is a codex32
>>> secret.'
>>>
>>> I’ve updated the PR with these changes and would appreciate your review.
>>>
>>> Commit:
>>> https://github.com/BenWestgate/bips/commit/fa6e9788bf04d271792ed4ea89a112d12284ef02
>>>
>>> Best regards, Ben Westgate
>>>
>>>
>>> On Monday, September 1, 2025 at 6:34:39 AM UTC-5 Javier Mateos wrote:
>>>
>>>> Hi Ben,
>>>>
>>>> Thank you for your proposal to integrate BIP-0093 (codex32) as an
>>>> application within BIP-0085
>>>>
>>>> Reviewing the specification, I believe I see two areas where we could
>>>> improve clarity for implementers:
>>>>
>>>> 1) The DRNG→5-bit extraction process could benefit from explicit
>>>> pseudocode to avoid implementation variations
>>>> 2) The rule 'threshold == 0 implies n == 1' currently appears as a note
>>>> but could be clearer as a normative requirement"
>>>>
>>>> Best Regards,
>>>> Javier Mateos
>>>>
>>>> El domingo, 31 de agosto de 2025 a las 19:29:46 UTC-3, Ben Westgate
>>>> escribió:
>>>>
>>>>> Hello bitcoin-dev,
>>>>>
>>>>> I’m Ben Westgate, a contributor interested in deterministic wallet
>>>>> backups and seed management.
>>>>>
>>>>> Per BIP-0002, I propose listing *BIP-0093 (codex32)*
>>>>> <https://github.com/bitcoin/bips/blob/master/bip-0093.mediawiki> as
>>>>> an application of
>>>>> *BIP-0085 (Deterministic Entropy from BIP32 Keychains)
>>>>> <https://github.com/bitcoin/bips/blob/master/bip-0085.mediawiki>*,
>>>>> similar to the existing BIP39 application. This allows wallets to derive
>>>>> codex32 backups from BIP-0032 master keys.
>>>>>
>>>>> *Summary*
>>>>>
>>>>> -
>>>>>
>>>>> Application number: 93'
>>>>> - Derivation path:
>>>>> m/83696968'/93'/{hrp}'/{threshold}'/{n}'/{byte_length}'/{id0}'/{id1}'/{id2}'/{id3}'/{index}'
>>>>>
>>>>> Codex32, defined in BIP-93, is a human-readable encoding with
>>>>> checksumming and share indexing designed for SSS backups of BIP-0032 seeds.
>>>>> This PR proposes a deterministic way to generate codex32 strings using
>>>>> BIP-85.
>>>>>
>>>>> *Rationale*
>>>>>
>>>>> -
>>>>>
>>>>> Mirrors the existing BIP-85 application for BIP-39.
>>>>> -
>>>>>
>>>>> Codex32 offers error correction, hand verification, identifiers,
>>>>> and secret sharing features compared to BIP-39.
>>>>> -
>>>>>
>>>>> Adds a standardized way for wallets to generate codex32 backups
>>>>> from BIP-85-derived entropy
>>>>> -
>>>>>
>>>>> Test vectors and reference implementation are linked to in the PR.
>>>>>
>>>>> *Risks and alternatives*
>>>>>
>>>>> -
>>>>>
>>>>> Wallet adoption of codex32 is still limited, though a draft PR
>>>>> #32652
>>>>> <https://github.com/bitcoin/bitcoin/pull/32652?utm_source=chatgpt.com>
>>>>> for importing codex32 strings to Bitcoin Core has support.
>>>>> - Codex32 implementers could use the BIP-85 dice application, but
>>>>> defining a direct application improves interoperability.
>>>>>
>>>>> PR:
>>>>> https://github.com/bitcoin/bips/compare/master...BenWestgate:bips:codex32
>>>>> <https://github.com/bitcoin/bips/compare/master...BenWestgate:bips:codex32?utm_source=chatgpt.com>
>>>>>
>>>>> Feedback is welcome.
>>>>> Best regards,
>>>>> Ben Westgate
>>>>
>>>>
--
You received this message because you are subscribed to the Google Groups "Bitcoin Development Mailing List" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bitcoindev+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/bitcoindev/70561361-7237-43e8-bfb0-071c6fd60d54n%40googlegroups.com.
[-- Attachment #1.2: Type: text/html, Size: 17676 bytes --]
prev parent reply other threads:[~2025-09-08 1:09 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-31 22:25 [bitcoindev] [BIP Proposal] Add BIP-0093 (Codex32) as application to BIP-0085 'Ben Westgate' via Bitcoin Development Mailing List
2025-09-01 8:41 ` [bitcoindev] " Javier Mateos
2025-09-01 18:37 ` 'Ben Westgate' via Bitcoin Development Mailing List
2025-09-02 2:30 ` Javier Mateos
2025-09-03 0:44 ` 'Ben Westgate' via Bitcoin Development Mailing List
2025-09-07 20:42 ` Aneesh Karve
2025-09-07 23:13 ` Aneesh Karve [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=70561361-7237-43e8-bfb0-071c6fd60d54n@googlegroups.com \
--to=aneesh.karve@gmail.com \
--cc=bitcoindev@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox