Skip to content
ZIP.tools

ZIP 2005

Ironwood Quantum Recoverability

  • Proposed
Proposal metadata
ID
2005
Status
Proposed
Category
Consensus
Created
2025-03-31
License
MIT
Credits
  • Sean Bowe
  • Dev Ojha
  • Kris Nuttycombe
Contents
  1. Security argument for Spendability
  2. Adaptation to the quantum setting
  • Case sk≠⊥\mathsf{sk} \neq \bot: The spender must prove knowledge of sk\mathsf{sk}, and that ak\mathsf{ak}, nk\mathsf{nk}, and rivk\mathsf{rivk} are derived correctly from sk\mathsf{sk}. This works because the derivations use post-quantum hashes (and ask↦ak\mathsf{ask} \mapsto \mathsf{ak} is deterministic).
    In particular, ivk\mathsf{ivk} is an essentially random function of sk\mathsf{sk}, and so we expect that an adversary has no better attack than to search for values of sk\mathsf{sk} to find one that reproduces a given ivk\mathsf{ivk}. Since ivk\mathsf{ivk} must be an xx-coordinate of a Pallas curve point (see the note at the end of § 4.2.3 Orchard Key Components), it can take on (rP−1)/2(r_{\mathbb{P}}-1)/2 values. So if there are TT targets the success probability for each attempt in a classical search is 2T/(rP−1)2T/(r_{\mathbb{P}}-1), which is negligible provided that T≪rPT \ll r_{\mathbb{P}}.

  • Case qk≠⊥\mathsf{qk} \neq \bot: This case is almost the same except that ivk\mathsf{ivk} is now an essentially random function of (nk,ak,qk)(\mathsf{nk}, \mathsf{ak}, \mathsf{qk}). The success probability in terms of TT is also the same as for the sk≠⊥\mathsf{sk} \neq \bot case.

The above security argument means that provided we also check the uses of Hrcm\mathsf{H^{rcm}} and Hψ\mathsf{H}^{\text{ψ}} in the post-quantum Recovery Statement, Orchard-protocol note commitments can be considered binding on the note tuple (rseed,noterepr)(\mathsf{rseed}, \mathsf{noterepr}).

Note that the argument associated with Theorem 5.4.4 in the protocol specification ("SinsemillaHashToPoint(…)=⊥\mathsf{SinsemillaHashToPoint}(\ldots) = \bot yields a nontrivial discrete logarithm relation." and "Since by assumption it is hard to find a nontrivial discrete logarithm relation, we can argue that it is safe to use incomplete additions when computing Sinsemilla inside a circuit.") is not applicable when it is necessary to defend against a discrete-logarithm-breaking or quantum adversary. Therefore, the post-quantum Recovery Statement will need to use complete curve additions to implement Sinsemilla.

Security argument for key binding

The security of the Orchard shielded protocol against several attacks depends on cryptographic keys being bound to a recoverable note's ivk\mathsf{ivk}. Different Orchard-protocol properties need different components of the key witness pinned:

  • Nullifier-binding (used by the Balance argument and by the Spendability argument below — the latter via the nf\mathsf{nf}-pinning lemma): nk\mathsf{nk} uniquely determined by ivk\mathsf{ivk}.
  • Spend Authorization: ak\mathsf{ak} (up to yy-sign of akP\mathsf{ak}^{\mathbb{P}}) and qk\mathsf{qk} uniquely determined by ivk\mathsf{ivk}. This includes uniquely determining the tag of qk_or_sk\mathsf{qk\_or\_sk}, i.e. which of the QK\mathsf{QK} and SK\mathsf{SK} branches produced the ivk\mathsf{ivk}.

The determination of qk\mathsf{qk} must fix the branch itself, not merely the value of qk\mathsf{qk} within the QK\mathsf{QK} branch. Suppose an address generated with use_qsk=true\mathsf{use\_qsk} = \mathsf{true} —whose owner authorizes recovery by proving knowledge of qsk\mathsf{qsk} via SoKqsk\mathsf{SoK^{qsk}}— shared its ivk\mathsf{ivk} with an sk\mathsf{sk}-branch witness. An adversary holding a suitable sk\mathsf{sk} could then recover the note through the sk\mathsf{sk}-branch of the Recovery Statement, authorizing the spend with SoKsk\mathsf{SoK^{sk}} and never demonstrating knowledge of qsk\mathsf{qsk}. Against a discrete-logarithm-breaking adversary —for which the accompanying RedDSA signature over ak\mathsf{ak} gives no protection— this breaks Spend Authorization for such addresses. Ruling out these cross-branch collisions (both qk\mathsf{qk}-values pinned, ⊥\bot included) is therefore a requirement of the argument, not incidental strength.

The formal key-binding condition stated below covers all of these uniformly: a key-binding break is a pair of distinct witnesses sharing the same ivk\mathsf{ivk}, where each witness carries the full key tuple — (ak,nk,rivk)(\mathsf{ak}, \mathsf{nk}, \mathsf{rivk}) plus whichever of qk\mathsf{qk} or sk\mathsf{sk} is in use. If key binding fails, the Balance, Spendability, and Spend Authorization arguments each lose their corresponding pinning step.

Relative to the situation with note commitments where it was reasonable to only obtain quantum recoverability for newly output Ironwood-pool notes, there is a complication. Addresses may be used over the long term and it may not be desirable to switch to new addresses, or to avoid funds being sent to old ones. Fortunately, the Orchard protocol specified each of ak\mathsf{ak}, nk\mathsf{nk}, and rivk\mathsf{rivk} to be derived from sk\mathsf{sk} via PRFexpand\mathsf{PRF^{expand}}, which is assumed collapsing. (rivk\mathsf{rivk} is derived differently for an "internal IVK", but that is also via PRFexpand\mathsf{PRF^{expand}}.)

Classically, the binding of Commitivk\mathsf{Commit^{ivk}} —instantiated via Sinsemilla— fails against a discrete-logarithm-breaking adversary, similarly to NoteCommit\mathsf{NoteCommit}. We use essentially the same fix as for NoteCommit\mathsf{NoteCommit}, with the rivk\mathsf{rivk}-derivation hashes playing the role of Hrcm\mathsf{H^{rcm}}. The Recovery Statement checks the derivation of rivk\mathsf{rivk}:

The witness carries the branch as a tagged union qk_or_sk  ⦂  QK(BY[ℓqk/8])∣SK(B[ℓsk])\mathsf{qk\_or\_sk} \;{\small ⦂}\; \mathsf{QK}\big(\mathbb{B}^{{\kern-0.1em\tiny\mathbb{Y}}[\ell_{\mathsf{qk}}/8]}\big) \mid \mathsf{SK}\big(\mathbb{B}^{[\ell_{\mathsf{sk}}]}\big) —following the formalization's sum type— so exactly one branch is present per witness, by construction. This is equivalent to case-splitting by use_qsk\mathsf{use\_qsk}.

  • In the QK\mathsf{QK} branch, rivk_ext=Hqkrivk_ext(ak,nk)\mathsf{rivk\_ext} = \mathsf{H^{rivk\_ext}_{qk}}(\mathsf{ak}, \mathsf{nk}).
  • In the SK\mathsf{SK} branch, rivk_ext=Hrivk_legacy(sk)\mathsf{rivk\_ext} = \mathsf{H^{rivk\_legacy}}(\mathsf{sk}), with ak\mathsf{ak} and nk\mathsf{nk} also derived from sk\mathsf{sk} via Hask\mathsf{H^{ask}} and Hnk\mathsf{H^{nk}}.

In either case, rivk\mathsf{rivk} is then either rivk_ext\mathsf{rivk\_ext} directly (external IVK) or Hrivk_extrivk_int(ak,nk)\mathsf{H^{rivk\_int}_{rivk\_ext}}(\mathsf{ak}, \mathsf{nk}) (internal IVK). All of these hashes are modelled as independent random oracles for the key-binding argument.

As in the Recovery Statement, we have:

BindKeyssk(sk,akP,nk,rivk_ext)=( ⁣ ⁣ ⁣ ⁣akP=[Hask(sk)] GOrchard ⁣ ⁣ ⁣ ⁣∧  nk=Hnk(sk) ⁣ ⁣ ⁣ ⁣∧  rivk_ext=Hrivk_legacy(sk) )\begin{array}{rll} \hspace{1em}\mathsf{BindKeys^{sk}}(\mathsf{sk}, \mathsf{ak}^{\mathbb{P}}, \mathsf{nk}, \mathsf{rivk\_ext}) = \big(&\!\!\!\! \mathsf{ak}^{\mathbb{P}} = [\mathsf{H^{ask}}(\mathsf{sk})]\, \mathcal{G}^{\mathsf{Orchard}} \\ &\!\!\!\! \wedge\; \mathsf{nk} = \mathsf{H^{nk}}(\mathsf{sk}) \\ &\!\!\!\! \wedge\; \mathsf{rivk\_ext} = \mathsf{H^{rivk\_legacy}}(\mathsf{sk}) \,\big) \end{array}

Let the key-binding condition on a witness w=(ivk,akP,nk,rivk_ext,rivk,qk_or_sk)w = (\mathsf{ivk}, \mathsf{ak}^{\mathbb{P}}, \mathsf{nk}, \mathsf{rivk\_ext}, \mathsf{rivk}, \mathsf{qk\_or\_sk}) be:

      match qk_or_sk with {QK(qk) ⁣ ⁣ ⁣⇒rivk_ext=Hqkrivk_ext(ak,nk)SK(sk) ⁣ ⁣ ⁣⇒BindKeyssk(sk,akP,nk,rivk_ext)(∧  rivk∈{ rivk_ext, Hrivk_extrivk_int(ak,nk) }∧  ivk=Commitrivkivk(ak,nk)∧  ivk∉{0,⊥}\begin{array}{l} \;\;\; \text{match } \mathsf{qk\_or\_sk} \text{ with } \begin{cases} \mathsf{QK}(\mathsf{qk}) \!\!\!&\Rightarrow \mathsf{rivk\_ext} = \mathsf{H^{rivk\_ext}_{qk}}(\mathsf{ak}, \mathsf{nk}) \\ \mathsf{SK}(\mathsf{sk}) \!\!\!&\Rightarrow \mathsf{BindKeys^{sk}}(\mathsf{sk}, \mathsf{ak}^{\mathbb{P}}, \mathsf{nk}, \mathsf{rivk\_ext}) \vphantom{\Big(} \end{cases} \\ \wedge\; \mathsf{rivk} \in \big\{\, \mathsf{rivk\_ext},\, \mathsf{H^{rivk\_int}_{rivk\_ext}}(\mathsf{ak}, \mathsf{nk}) \,\big\} \\ \wedge\; \mathsf{ivk} = \mathsf{Commit^{ivk}_{rivk}}(\mathsf{ak}, \mathsf{nk}) \\ \wedge\; \mathsf{ivk} \not\in \{0, \bot\} \end{array}

where ak=ExtractP(akP)\mathsf{ak} = \mathsf{Extract}_{\mathbb{P}}(\mathsf{ak}^{\mathbb{P}}).

The predicate intentionally does not constrain the yy-sign of akP\mathsf{ak}^{\mathbb{P}}. This is consistent with the Orchard protocol's design choice to use ak\mathsf{ak} as a single FqP\mathbb{F}_{q_{\mathbb{P}}} element (the xx-coordinate ExtractP(akP)\mathsf{Extract}_{\mathbb{P}}(\mathsf{ak}^{\mathbb{P}})), which avoids point-decompression in places that consume ak\mathsf{ak}, in exchange for a factor-of-2 reduction in concrete binding security. Accordingly, the break event below identifies witnesses up to the yy-sign of akP\mathsf{ak}^{\mathbb{P}}.

The flags use_qsk\mathsf{use\_qsk} and is_internal_rivk\mathsf{is\_internal\_rivk} that appear in the protocol diagram do not appear in this witness — nor in the formal Recovery Statement above. Their roles are absorbed into the witness's structural form:

  • use_qsk\mathsf{use\_qsk} is encoded in the tag of qk_or_sk\mathsf{qk\_or\_sk}: the witness carries exactly one of the two branches by construction (enforced by the tagged form, not by a ⊥\bot-exclusion constraint), and the branch-specific constraint applies to whichever is present.
  • is_internal_rivk\mathsf{is\_internal\_rivk} is encoded in rivk∈{rivk_ext, Hrivk_extrivk_int(ak,nk)}\mathsf{rivk} \in \big\{\mathsf{rivk\_ext},\, \mathsf{H^{rivk\_int}_{rivk\_ext}}(\mathsf{ak}, \mathsf{nk})\big\}: both rivk\mathsf{rivk} derivations are admitted simultaneously.

This formulation is strictly stronger than a flag-conditioned one: a key-binding break can have w1w_1 and w2w_2 in different branches across either flag (e.g., w1w_1 in the QK\mathsf{QK} branch and w2w_2 in the SK\mathsf{SK} branch, or w1w_1 with external rivk\mathsf{rivk} and w2w_2 with internal rivk\mathsf{rivk}), provided both produce the same ivk\mathsf{ivk}. A flag-based formulation would forbid only same-branch breaks. For the use_qsk\mathsf{use\_qsk} flag this extra strength is required by Spend Authorization —forbidding the qk\mathsf{qk}-versus-sk\mathsf{sk} cross-branch collision described above— and not merely incidental; for is_internal_rivk\mathsf{is\_internal\_rivk} it is additional robustness.

A key-binding break is a pair of witnesses (w1,w2)(w_1, w_2) with shared ivk\mathsf{ivk} satisfying the key-binding condition, whose (ak,nk,rivk,qk_or_sk)(\mathsf{ak}, \mathsf{nk}, \mathsf{rivk}, \mathsf{qk\_or\_sk}) projections differ — i.e., w1w_1 and w2w_2 differ in some component other than the yy-sign of akP\mathsf{ak}^{\mathbb{P}}.

The random oracles used in the key-binding condition are Hrivk_ext\mathsf{H^{rivk\_ext}}, Hrivk_legacy\mathsf{H^{rivk\_legacy}}, Hrivk_int\mathsf{H^{rivk\_int}}, Hask\mathsf{H^{ask}}, and Hnk\mathsf{H^{nk}}.

Let εkb(A,qkb)\varepsilon_{\mathsf{kb}}(\mathcal{A}, q_{\mathsf{kb}}) be the probability, over A\mathcal{A}'s randomness and at most qkbq_{\mathsf{kb}} queries in total to these random oracles, that A\mathcal{A} outputs a key-binding break. Here qkbq_{\mathsf{kb}} counts the derivation inputs of A\mathcal{A}'s output witnesses among its queries — a convention that is without loss of generality, by the accounting normalization in the proof.

Theorem (key-binding, classical ROM). Let A\mathcal{A} be a classical adversary making at most qkbq_{\mathsf{kb}} total queries to the random oracles used in the key-binding condition. Then εkb(A,qkb)≤qkb(qkb−1)rP\varepsilon_{\mathsf{kb}}(\mathcal{A}, q_{\mathsf{kb}}) \leq \frac{q_{\mathsf{kb}}(q_{\mathsf{kb}}-1)}{r_{\mathbb{P}}}.

Proof sketch.

Algebraic setup. By § 5.4.1.10 “Sinsemilla commitments”,

Commitrivkivk(ak,nk)=ExtractP(M′+[rivk] S),\mathsf{Commit^{ivk}_{rivk}}(\mathsf{ak}, \mathsf{nk}) = \mathsf{Extract}_{\mathbb{P}}\big(M' + [\mathsf{rivk}]\, \mathcal{S}\big)\textsf{,}

where S\mathcal{S} is the rivk-randomization base

S:=GroupHashP(“z.cash:Orchard-CommitIvk-r”,“”),\mathcal{S} := \mathsf{GroupHash}^{\mathbb{P}}(\texttt{“z.cash:Orchard-CommitIvk-r”}, \texttt{“”})\textsf{,}

and

M′:=SinsemillaHashToPoint(“z.cash:Orchard-CommitIvk-M”,  I2LEBSPℓbaseOrchard(ak) ∥ I2LEBSPℓbaseOrchard(nk)).M' := \mathsf{SinsemillaHashToPoint}\big(\texttt{“z.cash:Orchard-CommitIvk-M”},\; \mathsf{I2LEBSP}_{\ell^{\mathsf{Orchard}}_{\mathsf{base}}}(\mathsf{ak}) \,\Vert\, \mathsf{I2LEBSP}_{\ell^{\mathsf{Orchard}}_{\mathsf{base}}}(\mathsf{nk})\big)\textsf{.}

By expanding the Sinsemilla bases used inside SinsemillaHashToPoint\mathsf{SinsemillaHashToPoint} as scalar multiples of S\mathcal{S}, without loss of generality we have M′=[h(ak,nk)] SM' = [h(\mathsf{ak}, \mathsf{nk})]\, \mathcal{S} for a Pedersen-like deterministic scalar hash hh, so

Commitrivkivk(ak,nk)=ExtractP([h(ak,nk)+rivk] S).\mathsf{Commit^{ivk}_{rivk}}(\mathsf{ak}, \mathsf{nk}) = \mathsf{Extract}_{\mathbb{P}}\big([h(\mathsf{ak}, \mathsf{nk}) + \mathsf{rivk}]\, \mathcal{S}\big)\textsf{.}

Domain separation in the protocol's BLAKE2b instantiations ensures hh does not query Hrivk_ext\mathsf{H^{rivk\_ext}}, Hrivk_legacy\mathsf{H^{rivk\_legacy}}, Hrivk_int\mathsf{H^{rivk\_int}}, Hask\mathsf{H^{ask}}, or Hnk\mathsf{H^{nk}}: hh depends only on fixed Sinsemilla bases and on (ak,nk)(\mathsf{ak}, \mathsf{nk}).

By the same y2=Y(x)y^2 = Y(x) argument used in the Spendability proof (using § 5.4.9.7 for the ExtractP\mathsf{Extract}_{\mathbb{P}}-style xx-coordinate convention), a key-binding break implies

h(ak,nk)+rivk≡±(h(ak′,nk′)+rivk′)(modrP).h(\mathsf{ak}, \mathsf{nk}) + \mathsf{rivk} \equiv \pm\big(h(\mathsf{ak}', \mathsf{nk}') + \mathsf{rivk}'\big) \pmod{r_{\mathbb{P}}}\textsf{.}

Define G(w):=h(ak,nk)+rivk(modrP)\mathsf{G}(w) := h(\mathsf{ak}, \mathsf{nk}) + \mathsf{rivk} \pmod{r_{\mathbb{P}}} for a witness ww, and let Gi:=G(wi)G_i := \mathsf{G}(w_i) for i∈{1,2}i \in \{1, 2\}. The break condition is G1≡±G2(modrP)G_1 \equiv \pm G_2 \pmod{r_{\mathbb{P}}}.

Final-random-oracle structure. For each witness wiw_i satisfying the key-binding condition, rivki\mathsf{rivk}_i is the output of a final random oracle Oi∈{Hrivk_ext,Hrivk_legacy,Hrivk_int}O_i \in \{\mathsf{H^{rivk\_ext}}, \mathsf{H^{rivk\_legacy}}, \mathsf{H^{rivk\_int}}\} at a final input xix_i, determined by the witness's branch and IVK choice:

  • qk-branch, external IVK: Oi=Hrivk_extO_i = \mathsf{H^{rivk\_ext}}, xi=(qki,aki,nki)x_i = (\mathsf{qk}_i, \mathsf{ak}_i, \mathsf{nk}_i).
  • sk-branch, external IVK: Oi=Hrivk_legacyO_i = \mathsf{H^{rivk\_legacy}}, xi=skix_i = \mathsf{sk}_i.
  • qk-branch, internal IVK: Oi=Hrivk_intO_i = \mathsf{H^{rivk\_int}}, xi=(rivk_exti,aki,nki)x_i = (\mathsf{rivk\_ext}_i, \mathsf{ak}_i, \mathsf{nk}_i) where rivk_exti=Hqkirivk_ext(aki,nki)\mathsf{rivk\_ext}_i = \mathsf{H^{rivk\_ext}_{qk_i}}(\mathsf{ak}_i, \mathsf{nk}_i).
  • sk-branch, internal IVK: Oi=Hrivk_intO_i = \mathsf{H^{rivk\_int}}, xi=(rivk_exti,aki,nki)x_i = (\mathsf{rivk\_ext}_i, \mathsf{ak}_i, \mathsf{nk}_i) where rivk_exti=Hrivk_legacy(ski)\mathsf{rivk\_ext}_i = \mathsf{H^{rivk\_legacy}}(\mathsf{sk}_i).

In each case Gi=h(aki,nki)+Oi(xi)(modrP)G_i = h(\mathsf{ak}_i, \mathsf{nk}_i) + O_i(x_i) \pmod{r_{\mathbb{P}}}, with the deterministic shift hh independent of OiO_i's responses (by non-querying).

The shifted combined oracle. Treat the three rivk-derivation oracles (Hrivk_ext\mathsf{H^{rivk\_ext}}, Hrivk_legacy\mathsf{H^{rivk\_legacy}}, Hrivk_int\mathsf{H^{rivk\_int}}) as a single combined oracle H∗\mathsf{H}^* on the disjoint union of their input domains. Each instance contributes outputs uniform on FrP\mathbb{F}_{r_{\mathbb{P}}}, independently of the others, by domain separation. Hask\mathsf{H^{ask}} and Hnk\mathsf{H^{nk}} are not part of H∗\mathsf{H}^*: they enter only through the shifts below, and their output types differ.

For a combined input xx, define the shift s(x):=h(ak,nk)s(x) := h(\mathsf{ak}, \mathsf{nk}), with (ak,nk)(\mathsf{ak}, \mathsf{nk}) read off the input: directly for Hrivk_ext\mathsf{H^{rivk\_ext}} and Hrivk_int\mathsf{H^{rivk\_int}} inputs, and via ak=ExtractP([Hask(sk)] GOrchard)\mathsf{ak} = \mathsf{Extract}_{\mathbb{P}}\big([\mathsf{H^{ask}}(\mathsf{sk})]\, \mathcal{G}^{\mathsf{Orchard}}\big), nk=Hnk(sk)\mathsf{nk} = \mathsf{H^{nk}}(\mathsf{sk}) for an Hrivk_legacy\mathsf{H^{rivk\_legacy}} input sk\mathsf{sk}. So ss is a function of the input and of the Hask\mathsf{H^{ask}}/Hnk\mathsf{H^{nk}} oracles only; since hh is non-querying, ss never depends on the rivk-derivation responses. Define the shifted combined oracle

Hs(x):=s(x)+H∗(x)(modrP).\mathsf{H}^s(x) := s(x) + \mathsf{H}^*(x) \pmod{r_{\mathbb{P}}}\textsf{.}

For every witness satisfying the key-binding condition the derivation constraints give Gi=Hs(xi)G_i = \mathsf{H}^s(x_i), so the break condition is a ±-collision of Hs\mathsf{H}^s at the pair (x1,x2)(x_1, x_2).

Distinct final inputs. The final inputs x1,x2x_1, x_2 of a break need not be distinct, but the case x1=x2x_1 = x_2 is fully deterministic. If the witnesses decode differently —one external, one internal— their final inputs lie in disjoint summands of the combined domain, so x1=x2x_1 = x_2 is impossible outright. If both witnesses are externally decoded, equal final inputs force the witnesses to coincide on all fields constrained by the key-binding condition, contradicting distinctness. (Equal Hrivk_ext\mathsf{H^{rivk\_ext}} inputs determine (qk,ak,nk)(\mathsf{qk}, \mathsf{ak}, \mathsf{nk}) and thence rivk_ext=rivk\mathsf{rivk\_ext} = \mathsf{rivk}; equal Hrivk_legacy\mathsf{H^{rivk\_legacy}} inputs determine sk\mathsf{sk} and thence everything, via Hask\mathsf{H^{ask}} and Hnk\mathsf{H^{nk}}.) So both witnesses are internally decoded, sharing (ak,nk,rivk_ext,rivk)(\mathsf{ak}, \mathsf{nk}, \mathsf{rivk\_ext}, \mathsf{rivk}) and differing only in their branch data. Then rivk_ext1=rivk_ext2\mathsf{rivk\_ext}_1 = \mathsf{rivk\_ext}_2 is an equality of H∗\mathsf{H}^* outputs at the two upstream (rivk_ext-derivation) inputs, which the differing branch data make distinct. The shifts at those inputs agree: both equal h(ak,nk)h(\mathsf{ak}, \mathsf{nk}), using the derivation constraints on the sk\mathsf{sk} side. So this is again a ±-collision of Hs\mathsf{H}^s, at distinct inputs. In every case: a key-binding break yields a ±-collision of Hs\mathsf{H}^s at two distinct inputs among the adversary's queries, under the convention that qkbq_{\mathsf{kb}} counts the derivation inputs of the adversary's output witnesses among its queries. This convention is without loss of generality: replace A\mathcal{A} by the adversary that runs A\mathcal{A}, queries the (at most 4) derivation inputs of its output witnesses —each witness's final input and its rivk_ext-derivation input— and returns the output unchanged. This "reasonable adversary" normalization38 leaves the output distribution —and therefore the break probability— unchanged, puts the collision inputs among the queries by construction, and adds at most 4 to qkbq_{\mathsf{kb}}.

Note that the external/internal decode is by value (rivk=?rivk_ext\mathsf{rivk} \overset{?}{=} \mathsf{rivk\_ext}), not by how the witness was derived: at a fixpoint Hrivk_extrivk_int(ak,nk)=rivk_ext\mathsf{H^{rivk\_int}_{rivk\_ext}}(\mathsf{ak}, \mathsf{nk}) = \mathsf{rivk\_ext} an internally-derived witness decodes as external. Both readings give the same rivk\mathsf{rivk}, and the accounting partitions pairs by the decode.

Sequential collision bound. The adversary chooses each query adaptively, so we reveal the oracle responses in query order rather than fixing a pair in advance. Before the jj-th query xjx_j to H∗\mathsf{H}^*, condition on the transcript so far: the Hask\mathsf{H^{ask}}/Hnk\mathsf{H^{nk}} responses (which fix the shifts s(⋅)s(\cdot)) and the j−1j-1 recorded H∗\mathsf{H}^* responses. Under every such conditioning the fresh response H∗(xj)\mathsf{H}^*(x_j) is uniform on FrP\mathbb{F}_{r_{\mathbb{P}}}, and for each recorded input xix_i and each sign there is exactly one value of H∗(xj)\mathsf{H}^*(x_j) with Hs(xj)≡±Hs(xi)(modrP)\mathsf{H}^s(x_j) \equiv \pm \mathsf{H}^s(x_i) \pmod{r_{\mathbb{P}}}; so the fresh response completes a shifted ±-collision with probability at most 2(j−1)/rP2(j-1)/r_{\mathbb{P}}. Because the conditioning is on the transcript itself, this holds however xjx_j was chosen from the transcript. Summing over the queries,

εkb(A,qkb)≤∑j=1qkb2(j−1)rP=qkb(qkb−1)rP.\varepsilon_{\mathsf{kb}}(\mathcal{A}, q_{\mathsf{kb}}) \leq \sum_{j=1}^{q_{\mathsf{kb}}} \frac{2(j-1)}{r_{\mathbb{P}}} = \frac{q_{\mathsf{kb}}(q_{\mathsf{kb}}-1)}{r_{\mathbb{P}}}\textsf{.}

(Queries to Hask\mathsf{H^{ask}} or Hnk\mathsf{H^{nk}} are not H∗\mathsf{H}^* inputs and cannot complete a collision, so counting them in qkbq_{\mathsf{kb}} is conservative.)

Security argument for Spendability

DeriveNullifier is based on a Pedersen hash. In the current Orchard protocol, the property that it is infeasible to find two distinct Orchard-protocol notes with the same nullifier depends on the collision resistance of that hash, which would not hold against a discrete-logarithm-breaking adversary.

Does this mean it is possible to break Spendability for the given Recovery Statement? As it turns out, no, but the argument is somewhat involved.

Since each function in the Recovery Statement is deterministic, the free variables that the adversary can control are the sources of the derivation digraph within that statement and either SoKsk\mathsf{SoK^{sk}} or SoKqk\mathsf{SoK^{qk}}. That is, the adversary can control all of

(ρ,gd,rseed,sk,nk,ak,qk,qsk,rivk)(\text{ρ}, \mathsf{g_d}, \mathsf{rseed}, \mathsf{sk}, \mathsf{nk}, \mathsf{ak}, \mathsf{qk}, \mathsf{qsk}, \mathsf{rivk})

subject to exactly one of sk\mathsf{sk} and qk\mathsf{qk} being present, per the qk_or_sk\mathsf{qk\_or\_sk} tagged union. The choice between external and internal IVK is encoded in rivk\mathsf{rivk}'s value (either rivk_ext\mathsf{rivk\_ext} or Hrivk_extrivk_int(ak,nk)\mathsf{H^{rivk\_int}_{rivk\_ext}}(\mathsf{ak}, \mathsf{nk})).

We analyze DeriveNullifier\mathsf{DeriveNullifier} as a function of these controllable inputs. Recall that DeriveNullifier\mathsf{DeriveNullifier} is defined in § 4.16 ‘Computing ρ values and Nullifiers’ as:

DeriveNullifiernk(ρ,ψ,cm):=ExtractP([(PRFnknf(ρ)+ψ) mod qP] K+cm)\mathsf{DeriveNullifier_{nk}}(\text{ρ}, \text{ψ}, \mathsf{cm}) := \mathsf{Extract}_{\mathbb{P}}\Big( \big[(\mathsf{PRF^{nf}_{nk}}(\text{ρ}) + \text{ψ}) \bmod q_{\mathbb{P}}\big]\, \mathcal{K} + \mathsf{cm} \Big)

Also recall from [Repairing note commitments] that we have

cm=[Hrseedrcm(noterepr)+f(rseed,noterepr)] R.\mathsf{cm} = [\mathsf{H^{rcm}_{rseed}}(\mathsf{noterepr}) + \mathsf{f}(\mathsf{rseed}, \mathsf{noterepr})]\, \mathcal{R}\textsf{.}

Let KRK_{\kern-.08em\mathcal{R}} denote the discrete logarithm of K\mathcal{K} with respect to R\mathcal{R}. This is well-defined and nonzero: R\mathcal{R} generates the prime-order Pallas group, so any non-identity Pallas point has a unique nonzero discrete logarithm with respect to it; and K\mathcal{K} is non-identity by construction.

Recall that ψ\text{ψ} is determined by rseed\mathsf{rseed} via ψ=Hrseedψ(ρ)\text{ψ} = \mathsf{H}^{\text{ψ}}_{\mathsf{rseed}}(\text{ρ}). The nullifier corresponding to (nk,ρ,rseed,noterepr)(\mathsf{nk}, \text{ρ}, \mathsf{rseed}, \mathsf{noterepr}) is then

ExtractP([((PRFnknf(ρ)+ψ) mod qP)⋅KR+Hrseedrcm(noterepr)+f(rseed,noterepr)] R).\mathsf{Extract}_{\mathbb{P}}\Big( \big[ \big((\mathsf{PRF^{nf}_{nk}}(\text{ρ}) + \text{ψ}) \bmod q_{\mathbb{P}}\big) \cdot K_{\kern-.08em\mathcal{R}} + \mathsf{H^{rcm}_{rseed}}(\mathsf{noterepr}) + \mathsf{f}(\mathsf{rseed}, \mathsf{noterepr}) \big]\, \mathcal{R} \Big)\textsf{.}

We model Hrcm\mathsf{H^{rcm}} as a random oracle with output uniform on FrP\mathbb{F}_{r_{\mathbb{P}}}. The functions f\mathsf{f}, Hψ\mathsf{H}^{\text{ψ}}, and PRFnf\mathsf{PRF^{nf}} are deterministic functions of notetuple=(rseed,noterepr)\mathsf{notetuple} = (\mathsf{rseed}, \mathsf{noterepr}) that do not query Hrcm\mathsf{H^{rcm}}: f(notetuple)\mathsf{f}(\mathsf{notetuple}) is the Sinsemilla-base lift; Hψ\mathsf{H}^{\text{ψ}} and PRFnf\mathsf{PRF^{nf}} are conventional hash functions.

The non-querying constraint rules out trivializing instantiations such as f(•)=−Hrcm(•)\mathsf{f}({\small •}) = -\mathsf{H^{rcm}}({\small •}). In the concrete protocol, it reflects that f\mathsf{f} depends only on fixed Sinsemilla bases; and that the hashes Hψ\mathsf{H}^{\text{ψ}}, PRFnf\mathsf{PRF^{nf}}, and Hrcm\mathsf{H^{rcm}} use distinct domain separators, so can be considered unrelated to each other.

A key-binding break is as defined above in the Security argument for key binding.

Let εkb(A,qkb)\varepsilon_{\mathsf{kb}}(\mathcal{A}, q_{\mathsf{kb}}) be the probability, over A\mathcal{A}'s randomness and at most qkbq_{\mathsf{kb}} queries to the random oracles used in the key-binding argument, that A\mathcal{A} outputs a key-binding break (with qkbq_{\mathsf{kb}} counting the derivation inputs of the output witnesses among the queries, as in the accounting normalization). εkb(A,qkb)\varepsilon_{\mathsf{kb}}(\mathcal{A}, q_{\mathsf{kb}}) is bounded separately by that argument; the bound below is unconditional, but is only useful to the extent that εkb(A,qkb)\varepsilon_{\mathsf{kb}}(\mathcal{A}, q_{\mathsf{kb}}) is small.

We give a reduction-based argument that any classical adversary A\mathcal{A} in the Random Oracle Model attempting to find two valid Recovery Statement witnesses with distinct note tuples that have colliding nullifiers, succeeds with probability at most qrcm(qrcm−1)rP+εkb(A,qkb)\frac{q_{\mathsf{rcm}}(q_{\mathsf{rcm}}-1)}{r_{\mathbb{P}}} + \varepsilon_{\mathsf{kb}}(\mathcal{A}, q_{\mathsf{kb}}), where qrcmq_{\mathsf{rcm}} is the number of queries A\mathcal{A} makes to Hrcm\mathsf{H^{rcm}}, and qkbq_{\mathsf{kb}} is as defined above. The bound depends only on qrcmq_{\mathsf{rcm}} and on εkb(A,qkb)\varepsilon_{\mathsf{kb}}(\mathcal{A}, q_{\mathsf{kb}}), not on running time.

The components rseed,noterepr\mathsf{rseed}, \mathsf{noterepr} are fields of notetuple\mathsf{notetuple} by definition; and ρ\text{ρ}, gd\mathsf{g_d}, pkd\mathsf{pk_d}, and ψ\text{ψ} are fields of noterepr\mathsf{noterepr}, hence of notetuple\mathsf{notetuple}.

ivk\mathsf{ivk}-pinning lemma. For any valid Recovery Statement witness ww with notetuple=(rseed,noterepr)\mathsf{notetuple} = (\mathsf{rseed}, \mathsf{noterepr}), the value ivk=log⁡gd(pkd)\mathsf{ivk} = \log_{\mathsf{g_d}}(\mathsf{pk_d}) is well-defined, since gd≠OP\mathsf{g_d} \neq \mathcal{O}_{\mathbb{P}} on the prime-order Pallas curve and ivk∈[0,qP)⊆[0,rP)\mathsf{ivk} \in [0, q_{\mathbb{P}}) \subseteq [0, r_{\mathbb{P}}); ivk\mathsf{ivk} is therefore uniquely determined by notetuple\mathsf{notetuple}.

nf\mathsf{nf}-pinning lemma. Suppose A\mathcal{A}'s output (w1,w2)(w_1, w_2) does not contain a key-binding break. Then for each i∈{1,2}i \in \{1, 2\}, nfi\mathsf{nf}_i is uniquely determined by notetuplei\mathsf{notetuple}_i: by the conditioning, (aki,nki,rivki)(\mathsf{ak}_i, \mathsf{nk}_i, \mathsf{rivk}_i) is the only opening of ivki\mathsf{ivk}_i appearing in A\mathcal{A}'s output, so nki\mathsf{nk}_i is a function of ivki\mathsf{ivk}_i, which is in turn a function of notetuplei\mathsf{notetuple}_i by the ivk\mathsf{ivk}-pinning lemma; ρi\text{ρ}_i is a field of notetuplei\mathsf{notetuple}_i; and the remaining DeriveNullifier\mathsf{DeriveNullifier} inputs ψi\text{ψ}_i and cmi\mathsf{cm}_i are determined by notetuplei\mathsf{notetuple}_i through the Recovery Statement's deterministic derivations.

The argument here covers nullifier-binding — it argues that nf\mathsf{nf} binds the note tuple (rseed,noterepr)(\mathsf{rseed}, \mathsf{noterepr}) under Hrcm\mathsf{H^{rcm}} modelled as a random oracle and the key-binding theorem.

Theorem (distinct-notetuple Spendability, classical ROM). Let A\mathcal{A} be a classical adversary with oracle access to Hrcm\mathsf{H^{rcm}} having output uniform on FrP\mathbb{F}_{r_{\mathbb{P}}}, making at most qrcmq_{\mathsf{rcm}} oracle queries. The Spendability-collision game has A\mathcal{A} output two Recovery Statement witnesses w1,w2w_1, w_2 satisfying:

Validity of witnesses : both witnesses satisfy the Proposed Recovery Statement.

Distinct note tuples : the Hrcm\mathsf{H^{rcm}}-input tuples notetuplei:=(rseedi,noterepri)\mathsf{notetuple}_i := (\mathsf{rseed}_i, \mathsf{noterepr}_i) satisfy notetuple1≠notetuple2\mathsf{notetuple}_1 \neq \mathsf{notetuple}_2.

Colliding nullifiers : nf1=nf2\mathsf{nf}_1 = \mathsf{nf}_2.

Then A\mathcal{A} wins this game with probability at most

(qrcm2)⋅2rP+εkb(A,qkb)=qrcm(qrcm−1)rP+εkb(A,qkb),\Big({\textstyle{q_{\mathsf{rcm}}} \atop \textstyle{2}}\Big) \cdot \frac{2}{r_{\mathbb{P}}} + \varepsilon_{\mathsf{kb}}(\mathcal{A}, q_{\mathsf{kb}}) = \frac{q_{\mathsf{rcm}}(q_{\mathsf{rcm}}-1)}{r_{\mathbb{P}}} + \varepsilon_{\mathsf{kb}}(\mathcal{A}, q_{\mathsf{kb}})\textsf{,}

taken over the random oracle's responses and any internal randomness of A\mathcal{A}.

This bound is essentially tight against classical generic adversaries. Maurer 39 (Section 2, p. 5) establishes a matching upper bound of (k2)/N{k \choose 2}/N on the success probability of any classical algorithm in finding a collision against a random oracle with an NN-element output space using kk queries. Maurer's bound applies to the equality event Fi=FjF_i = F_j; our win condition allows Fi=±FjF_i = \pm F_j (two winning configurations per pair instead of one). Applying Maurer with N=rPN = r_{\mathbb{P}} (the Hrcm\mathsf{H^{rcm}} output space) gives (qrcm2)/rP{q_{\mathsf{rcm}} \choose 2}/r_{\mathbb{P}} for the equality event; doubling for the sign relaxation gives our qrcm(qrcm−1)rP\frac{q_{\mathsf{rcm}}(q_{\mathsf{rcm}}-1)}{r_{\mathbb{P}}} bound. Classical parallel collision search 40 (top of p. 8) achieves the equality-event regime up to a constant factor; the same adversaries achieve a constant fraction of the doubled bound for the ±\pm-equivalence event.

Proof sketch. A\mathcal{A} makes at most qrcmq_{\mathsf{rcm}} queries to Hrcm\mathsf{H^{rcm}} before outputting (w1,w2)(w_1, w_2) satisfying Validity of witnesses, Distinct note tuples, and Colliding nullifiers. The probability that (w1,w2)(w_1, w_2) contains a key-binding break is at most εkb(A,qkb)\varepsilon_{\mathsf{kb}}(\mathcal{A}, q_{\mathsf{kb}}); condition on the complement.

Algebraic setup. Under this conditioning, define

F(notetuple):=Hrcm(notetuple)+f(notetuple)+((PRFnknf(ρ)+ψ) mod qP)⋅KR(modrP)\mathsf{F}(\mathsf{notetuple}) := \mathsf{H^{rcm}}(\mathsf{notetuple}) + \mathsf{f}(\mathsf{notetuple}) + \big((\mathsf{PRF^{nf}_{nk}}(\text{ρ}) + \text{ψ}) \bmod q_{\mathbb{P}}\big) \cdot K_{\kern-.08em\mathcal{R}} \pmod{r_{\mathbb{P}}}

, where rseed,ρ,ψ\mathsf{rseed}, \text{ρ}, \text{ψ} are fields of notetuple\mathsf{notetuple} and nk\mathsf{nk} is determined by notetuple\mathsf{notetuple} via the key-binding leg of the nf\mathsf{nf}-pinning lemma, and let Fi:=F(notetuplei)F_i := \mathsf{F}(\mathsf{notetuple}_i) for i∈{1,2}i \in \{1, 2\}.

ExtractP\mathsf{Extract}_{\mathbb{P}} (§ 5.4.9.7 'Coordinate Extractor for Pallas' 41) is the xx-coordinate of its argument for non-identity points, with the identity mapping to 00. Since Pallas has the form y2=Y(x)y^2 = Y(x) and no Pallas point has xx-coordinate 00, the collision nf1=nf2\mathsf{nf}_1 = \mathsf{nf}_2 holds iff F1≡±F2(modrP)F_1 \equiv \pm F_2 \pmod{r_{\mathbb{P}}}.

Independence claim per pair. By Distinct note tuples, notetuple1≠notetuple2\mathsf{notetuple}_1 \neq \mathsf{notetuple}_2, so the Hrcm\mathsf{H^{rcm}} outputs at notetuple1,notetuple2\mathsf{notetuple}_1, \mathsf{notetuple}_2 are independent uniform on FrP\mathbb{F}_{r_{\mathbb{P}}}. The deterministic shifts (f\mathsf{f} and the PRFnf\mathsf{PRF^{nf}} contribution scaled by KRK_{\kern-.08em\mathcal{R}}) do not query Hrcm\mathsf{H^{rcm}}, so they are independent of its responses. Hence F1F_1 and F2F_2 are independent uniform on FrP\mathbb{F}_{r_{\mathbb{P}}}.

Bounding the win probability. The win condition F1≡±F2F_1 \equiv \pm F_2 is a linear constraint on a pair of independent uniform variables, satisfied with probability at most 2/rP2/r_{\mathbb{P}} (one per sign). Union-bounding over the at most (qrcm2){q_{\mathsf{rcm}} \choose 2} pairs of distinct Hrcm\mathsf{H^{rcm}} queries:

Pr⁡[win∣¬ break]≤qrcm(qrcm−1)rP.\Pr[\text{win} \mid \neg\,\text{break}] \leq \frac{q_{\mathsf{rcm}}(q_{\mathsf{rcm}}-1)}{r_{\mathbb{P}}}\textsf{.}

Decomposing on whether a key-binding break occurs and applying Pr⁡[win]≤Pr⁡[win∣¬ break]+Pr⁡[break]\Pr[\text{win}] \leq \Pr[\text{win} \mid \neg\,\text{break}] + \Pr[\text{break}]:

Pr⁡[win]≤qrcm(qrcm−1)rP+εkb(A,qkb).\Pr[\text{win}] \leq \frac{q_{\mathsf{rcm}}(q_{\mathsf{rcm}}-1)}{r_{\mathbb{P}}} + \varepsilon_{\mathsf{kb}}(\mathcal{A}, q_{\mathsf{kb}})\textsf{.}

This completes the classical-ROM proof.

The key-binding theorem bounds εkb(A,qkb)≤qkb(qkb−1)rP\varepsilon_{\mathsf{kb}}(\mathcal{A}, q_{\mathsf{kb}}) \leq \frac{q_{\mathsf{kb}}(q_{\mathsf{kb}}-1)}{r_{\mathbb{P}}}. Substituting, an adversary A\mathcal{A} that makes at most qrcmq_{\mathsf{rcm}} queries to Hrcm\mathsf{H^{rcm}} and at most qkbq_{\mathsf{kb}} queries to the key-binding random oracles wins the Spendability-collision game with probability at most qrcm(qrcm−1)rP  +  qkb(qkb−1)rP\frac{q_{\mathsf{rcm}}(q_{\mathsf{rcm}}-1)}{r_{\mathbb{P}}} \;+\; \frac{q_{\mathsf{kb}}(q_{\mathsf{kb}}-1)}{r_{\mathbb{P}}}.

For the post-quantum lift of this bound and of the key-binding bound above, see the next section.

Adaptation to the quantum setting

The classical-ROM proofs above (for key binding and Spendability) rely on Hrcm\mathsf{H^{rcm}} and the various rivk\mathsf{rivk}-derivation hashes being collision-resistant. The natural quantum analog is called the collapsing property, introduced by Unruh 28 29. It says that even a quantum adversary holding a superposition over several preimages of a fixed output cannot tell —by any subsequent measurement— which preimage it now has. This is the right property for our reductions. Each proof above splits cases based on which oracle query produced the colliding output; that case analysis works the same classically and quantumly only if the underlying hash "collapses" the adversary's superposition to a single classical preimage.

Subsequent work has analyzed whether standard hash-function constructions inherit collapsing from their compression function. Unruh 29 proved this for Merkle–Damgård (with a padding restriction); Czajkowski et al. 42 for the sponge construction (the absorb-then-squeeze paradigm used by SHA-3 / Keccak), with 37 strengthening the sponge result via the related notion of quantum indifferentiability. Fehr 43 gave a unified algebraic framework that recovers these results and proves the collapsing property of HAIFA, a Merkle–Damgård variant with a per-iteration salt and counter. Gunsing and Mennink 35 extended this kind of analysis to tree-hash constructions, relevant for the Recovery Protocol's note-commitment tree.

BLAKE2b uses HAIFA, so by Fehr's theorem modelling Hrcm\mathsf{H^{rcm}} as collapsing reduces to modelling BLAKE2b's compression function as collapsing. The "iv-preimage resistance" side condition Fehr's theorem requires for arbitrary-length inputs is automatically satisfied if the compression function is modelled as a random oracle — which is also the modelling assumption underlying the classical-ROM analyses above.

Citation graph

Hover or tap a node to see its title and citations.
Loading citation graph…
ZIP 2005: Ironwood Quantum Recoverability · zips.tools