ZIP 2005: Improve security argument; drop leadByte and AssetBase from H^{rcm,Orchard}; commit to deployment option 1 - #1275
Merged
Conversation
daira
force-pushed
the
zip-2005-drop-leadByte-from-hrcm
branch
5 times, most recently
from
May 16, 2026 16:23
c21c12d to
d49b900
Compare
daira
commented
May 16, 2026
daira
commented
May 16, 2026
daira
commented
May 16, 2026
daira
commented
May 16, 2026
daira
force-pushed
the
zip-2005-drop-leadByte-from-hrcm
branch
2 times, most recently
from
May 16, 2026 17:50
0c07846 to
7c4702b
Compare
ValarDragon
reviewed
May 16, 2026
daira
force-pushed
the
zip-2005-drop-leadByte-from-hrcm
branch
from
May 16, 2026 18:07
7c4702b to
8e73b4c
Compare
ebfull
self-requested a review
May 16, 2026 18:13
ValarDragon
previously approved these changes
May 16, 2026
ValarDragon
left a comment
Collaborator
There was a problem hiding this comment.
Reviewed, and it looks great to me! Thank you!
Really glad:
- We are ZIP-cleared on using LeadByte 0x03
- LeadByte is removed from the rcm hash
- We have the deployment strategy were going for in the ZIP
- We removed AssetBase from the rcm hash
daira
force-pushed
the
zip-2005-drop-leadByte-from-hrcm
branch
5 times, most recently
from
May 17, 2026 00:14
e592d21 to
c476a94
Compare
ebfull
requested changes
May 17, 2026
daira
force-pushed
the
zip-2005-drop-leadByte-from-hrcm
branch
2 times, most recently
from
May 17, 2026 01:46
e3d9442 to
1d17005
Compare
ebfull
previously approved these changes
May 17, 2026
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
…ion. Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
The 0x03 note plaintext format now does not include AssetBase. Drop
AssetBase from:
* the H^{rcm,Orchard} definition (signature and pre_rcm body) in §4.7.3
and in the specialised import in the Spendability proof;
* the Sending Notes (Orchard) and Dummy Notes (Orchard) procedures: drop
the "Let AssetBase = V^Orchard" preludes, the "AssetBase★ = ..."
inline-let lines, and AssetBase★ from the H^{rcm,Orchard} call sites;
also drop AssetBase★ from "use ... in the inputs to NoteCommit";
* the Decryption procedures (§4.20.2 and §4.20.3): drop the
"Let AssetBase = V^Orchard" prelude, AssetBase★ from the inline let,
and from the H^{rcm,Orchard} call sites;
* the Recovery Statement witness's noterepr;
* the rationale's "Repairing note commitments" noterepr;
* the flow diagram (drop AssetBase from the "v, AssetBase" pre_rcm input).
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per the deployment-option-1 decision (ZIP 2005 deploys Orchard-only, without ZSAs), reframe places that implied ZIP 2005's scope included OrchardZSA: * "It can optionally be done at the same time as changes necessary to implement ... ZSAs" -> "It is compatible with ... ZSAs". * Rename "Flow diagram for the Orchard and OrchardZSA protocols" to "Flow diagram for the Orchard protocol" (the diagram shows the 0x03 recoverable-note case, which is Orchard-only). Update the cross-reference to match. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
…-conditionalise dispatch.
Three follow-ups to the leadByte case-split refactoring:
* Remove the named H^{rcm,Sapling} function (it was a wrapper with two
unused args around ToScalar^Sapling(PRF^expand_rseed([0x04]))) and
inline the right-hand side at the call sites in §4.7.2, §4.8.2, §4.20.2,
and §4.20.3.
* Reduce H^{esk,Sapling}'s signature from (_, _) to (_), matching its
Canopy-onward call shape H^{esk,protocol}_{rseed}(ρ) at §4.20.2's
decryption step.
* Replace prose conditions "if Sapling and leadByte = ..." /
"if Orchard and leadByte = ..." with
"if protocol = Sapling and leadByte = ..." /
"if protocol = Orchard and leadByte = ..." in the §4.20.2 and §4.20.3
rcm dispatches.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…-derivation sites.
Define protocol-specific helpers that bundle the leadByte case-split for
rcm derivation:
* Derive_rcm^{Sapling}_{rseed}(leadByte) dispatches between
LEOS2IP_{256}(rseed) (leadByte=0x01) and
ToScalar^Sapling(PRF^expand_rseed([0x04])) (leadByte=0x02).
* Derive_rcm^{Orchard}_{rseed}(leadByte, g★_d, pk★_d, v, ρ, ψ) dispatches
between the existing legacy derivation
ToScalar^Orchard(PRF^expand_rseed([0x05] || ρ)) (leadByte=0x02) and
the new H^{rcm,Orchard}_{rseed}(g★_d, pk★_d, v, ρ, ψ) (leadByte=0x03).
Update the call sites in §4.7.2 / §4.7.3 / §4.8.2 / §4.8.3 / §4.20.2 /
§4.20.3 to invoke the helpers. The §4.20.2 / §4.20.3 decryption dispatch
collapses from a 4-case rcm case-split to a 2-case protocol-conditional
call.
Drop the now-redundant parenthetical noting that H^{rcm,Orchard} is
defined only for the leadByte=0x03 case (H^{rcm,Orchard} is now only
referenced inside Derive_rcm^{Orchard}'s definition).
Update the "which define ..." cross-reference at the order-of-operations
note to name Derive_rcm^{\{Sapling,Orchard\}} rather than H^{rcm,Orchard},
since Derive_rcm is now the primary export of the affected sections.
Harmonize the notation for H^ψ in the rationale: ψ = H^ψ(rseed, ρ) becomes
ψ = H^ψ_{rseed}(ρ). The two forms are equivalent under the protocol-spec
convention; the subscripted form is preferred for consistency.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ing.
The Spend Authorization argument needs ak (up to y-sign of ak^P)
uniquely determined by ivk, because the verification key
rk = ak^P + [alpha] G depends on ak. The formal key-binding predicate
already pins ak via ivk = Commit^{ivk}_{rivk}(ak, nk); the motivation
enumeration in the key-binding section was incomplete.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the abstract ShortHash([h(ak,nk)+rivk] S) form with the explicit Sinsemilla-commitment definition from § 5.4.1.10: exhibit S as the rivk-randomization base via GroupHash^P, M' as SinsemillaHashToPoint over LEBSP(ak) || LEBSP(nk), and the WLOG scalar-lift M' = [h(ak,nk)] S using a Pedersen-like deterministic h. Drops two duplicate "verify the exact form" TODOs. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…lift. Extract_P is a deterministic 2-to-1 map on non-identity Pallas points and does not query any random oracle, so it composes the same way classically and quantumly. The factor of 2 from the 2-to-1 reduction is already absorbed into the break-probability bound. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Both forms render identically; \choose was already the dominant notation in the proofs. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… section. Readers may be unfamiliar with the stacked-fraction \choose form. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…splaymath, I2LEBSP).
* In § 4.7.2, define Derive_rcm^Sapling before H^esk,Sapling (rcm-then-esk
ordering, matching § 4.7.3).
* In § 4.8.2, add an import preamble for Derive_rcm^Sapling.
* In § 4.8.3 and § 4.20.2/§ 4.20.3, replace the stale H^{rcm,Orchard} import
with Derive_rcm^Orchard (and add Derive_rcm^Sapling to § 4.20.x), since
the actual derivation goes through the helpers.
* In the key-binding algebraic setup, replace the non-existent LEBSP with
I2LEBSP_{l^Orchard} and lift the three named formulas to display math
for readability.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Cover the threat surface across Zcash's shielded and transparent protocols; split into "before the switch", "after the switch", and "attacks addressed by the Recovery Protocol" subsections; enumerate attack classes (Balance, Spend authentication, Spendability, Privacy). Add ZIP 209 (turnstile), ZIP 2003 (disable v4 transactions), and the Google 2025 paper on quantum attacks against blockchains to the references. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
…tocol QROM lift. Cite Unruh on the collapsing property, Czajkowski et al. for sponge, ACMT2025 for the sponge strengthening, Fehr 2018 for the unified algebraic framework covering Merkle–Damgård and HAIFA (BLAKE2b's construction), and Gunsing and Mennink 2022 for tree hashes (relevant for the Recovery Protocol's note-commitment tree). Modelling H^rcm as collapsing reduces, via Fehr's theorem, to modelling BLAKE2b's compression function as collapsing — the natural post-quantum analog of the random-oracle modelling assumption underlying the classical-ROM analysis. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…technique.
By the standard BHT-style cubic-in-q quantum collision speed-up,
the classical-ROM bounds q²/r_P transfer to QROM with at most
O(q³/r_P) success probability. For Zcash-relevant parameters
(q << 2^60, r_P ≈ 2^254), the cubic ceiling is ~2^{-74}; the
practically achievable bound stays closer to the classical
~2^{-134} since BHT-style attacks need infeasible quantum memory
(per the 2^{92.3} argument earlier in the section) and the best
known generic quantum attack is the classical attack of [vOW1999].
Add [Zhandry2018] eprint 2018/276 to the references.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…for conference versions. The eprint version of a paper may differ from the camera-ready published at a conference / in a journal. "Also published in ..." makes the multi-venue status explicit and signals to readers that the linked revision may differ from the named conference version. Applied to all bibliography entries that have both an eprint (or similar) URL and a known conference / journal version. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The leadByte choice is operationally irrelevant for dummy notes (plaintexts cannot be decrypted), but explicit guidance to use the highest allowed leadByte avoids an ambiguity flagged in review by @ebfull. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…or-of-2 absorption. The Extract_ℙ composability paragraph asserted that the factor of 2 from the 2-to-1 reduction is absorbed into the break-probability bound, but didn't state the side-condition that makes this work: the fibres form a uniform partition phi for non-identity points. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
daira
force-pushed
the
zip-2005-drop-leadByte-from-hrcm
branch
from
May 18, 2026 12:18
5512415 to
537c392
Compare
ValarDragon
approved these changes
May 18, 2026
ValarDragon
left a comment
Collaborator
There was a problem hiding this comment.
Re-approve on assumption that its same as pre-rebase
8 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to merged PR #1264. This branch makes the following changes:
Security argument
(_, _)to(_)matching its Canopy-onward call shape; replaceif Sapling and leadByte = .../if Orchard and leadByte = ...with the explicitif protocol = Sapling and .../if protocol = Orchard and ...form in the prose dispatches.Derive_rcm^{Sapling,Orchard}helpers that bundle thePost-quantum analysis
###(inside Security analysis) to##(top-level, after the formal Spendability argument), so that all quantum analysis follows all classical analysis rather than being sandwiched between the informal and formal arguments. Trim the informal binding argument's quantum mentions and add a forward reference.Threat analysis
Deployment
Terminology and housekeeping
FROST multisignatures→FROST threshold multisignatures(a multisignature scheme is not necessarily a threshold scheme).Bibliography
Cross-ZIP
0x03references with placeholders ({{ZSALEADBYTE}}/{{LEADBYTE}}/{{MBLEADBYTE}}) since 0x03 is now reserved for ZIP 2005.Suggested checks
Derive_rcm^{Sapling}andDerive_rcm^{Orchard}dispatch correctly and cover the relevant leadByte values.🤖 Filed with Claude Code