The Zcash ArboretumIronwood Guide PDF

12 Security

This section composes the propositions of the preceding sections with the two assumptions on the Action proof, Assumptions 9.11 and 9.14. Theorem 12.4 states conservation per pool; its proof uses condition A4, the binding signature and Assumption 9.11. Lemma 12.5 and Theorem 12.6 exclude a second consumption of a note, Corollary 12.7 the Faerie Gold attack and Theorem 12.9 a consumption without the spend authorising key; Theorem 12.12 states what the public data of a bundle hide. Theorem 12.14 collects, under one list of assumptions, membership soundness, Theorems 12.6, 12.4 and 12.9 with Proposition 11.10, and Theorem 12.12.

Efficient adversaries and negligible functions are those of the Crypto Guide, §“Adversaries and the security parameter”, and computational indistinguishability is that of its Definition “Perfect, statistical, and computational indistinguishability” (§“Distribution ensembles and indistinguishability”). An adversary interacts with the honest parties, namely key holders, senders and signers, and with the random oracles of Assumptions 2.8, 7.3, 9.11, 9.14 and 10.4, which are independent of one another; every reduction simulates the honest parties and the random oracles. Every result of the section holds except with negligible probability, and every result that uses a property of key generation is claimed for keys generated with 𝗎𝗌𝖾⁢_⁢𝗊𝗌𝗄=𝖿𝖺𝗅𝗌𝖾 (“The spending key and the spend-side secrets”, §3.1).

Definition 12.1 (Pools, accepted Actions and witnesses).
  1. (a)

    A pool is the Orchard pool or the Ironwood pool. A statement made for each pool uses that pool’s note commitment tree, anchors, nullifier set and bundle, its balancing value, 𝗏𝖺𝗅𝗎𝖾𝖡𝖺𝗅𝖺𝗇𝖼𝖾𝖮𝗋𝖼𝗁𝖺𝗋𝖽 or 𝗏𝖺𝗅𝗎𝖾𝖡𝖺𝗅𝖺𝗇𝖼𝖾𝖨𝗋𝗈𝗇𝗐𝗈𝗈𝖽, and its binding signature, 𝖻𝗂𝗇𝖽𝗂𝗇𝗀𝖲𝗂𝗀𝖮𝗋𝖼𝗁𝖺𝗋𝖽 or 𝖻𝗂𝗇𝖽𝗂𝗇𝗀𝖲𝗂𝗀𝖨𝗋𝗈𝗇𝗐𝗈𝗈𝖽.

  2. (b)

    An adversary outputs a block chain: a sequence of blocks each of whose transactions passes the verification of “Verification of a transaction” (§11.6) against the chain state that the state update of that subsection produces from the preceding transactions. An Action, or a bundle, of a transaction of that chain is accepted.

  3. (c)

    The witness of an accepted Action is the auxiliary input that the extractor of Assumption 9.11 outputs for it, applied to the Action’s bundle as stated below. The Action consumes the note (𝗀𝖽𝗈𝗅𝖽,𝗉𝗄𝖽𝗈𝗅𝖽,v𝗈𝗅𝖽,ρ𝗈𝗅𝖽,ψ𝗈𝗅𝖽,𝗋𝖼𝗆𝗈𝗅𝖽) of its witness and creates the note (𝗀𝖽𝗇𝖾𝗐,𝗉𝗄𝖽𝗇𝖾𝗐,v𝗇𝖾𝗐,ρ𝗇𝖾𝗐,ψ𝗇𝖾𝗐,𝗋𝖼𝗆𝗇𝖾𝗐), with ρ𝗇𝖾𝗐=𝗇𝖿𝗈𝗅𝖽 (Definition 9.2); the values v𝗈𝗅𝖽 and v𝗇𝖾𝗐 are read from the witness.

  4. (d)

    In this section a note is given by its expanded receiver (𝗀𝖽,𝗉𝗄𝖽) (Definition “Flag values and expanded receiver”, §9.1) in place of its address, and its trapdoor 𝗋𝖼𝗆 acts through its residue modulo p𝖵𝖾𝗌𝗍𝖺; two notes are equal when these six components are. Its note commitment is 𝖭𝗈𝗍𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝗋𝖼𝗆⁢(M) and its extracted commitment is 𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⊥⁢(𝖭𝗈𝗍𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝗋𝖼𝗆⁢(M)), with M the message of Definition 4.4 formed from (𝗀𝖽,𝗉𝗄𝖽,v,ρ,ψ).

  5. (e)

    A committed note of a pool is a note whose extracted commitment is a leaf of that pool’s note commitment tree.

Assumption 9.11 is stated for one aggregate proof. For a block chain it is applied to each bundle, to the algorithm that runs the adversary, with every honest party and random oracle of the experiment, and outputs that bundle’s primary inputs and proof; the extractors of distinct bundles are run on the same execution. An oracle that a reduction does not simulate itself, such as the random oracle 𝖧 of Assumption 7.3 or a signing oracle, receives each new query of a rewound run, and a query repeated on the same prefix of a run is answered as before. By the union bound over the polynomially many bundles, every witness satisfies Definition 9.2, except with negligible probability. By Remark “⊥-weakened conditions” (§9.2), conditions A1, A2, A3 and A7 then hold in their unweakened forms, without the ⊥ case, except with negligible probability, under Assumptions 2.22 and 2.8. The results below include these events in their negligible terms.

Remark 12.2 (Binding for notes given by expanded receivers).

Step 1 of the proof of Proposition 4.5(b) shows that the map (𝗀𝖽,𝗉𝗄𝖽,v,ρ,ψ)↦M is injective, and Step 2 reads a note only through M and its trapdoor. For notes in the sense of (d) the two steps therefore show, under Assumptions 2.22 and 2.8: no efficient algorithm outputs, except with negligible probability, two distinct notes with equal extracted commitments other than ⊥. In particular a note that opens an extracted commitment is the only opening that an efficient algorithm finds. The proof of Proposition 6.8 likewise reads a note only through M, 𝗋𝖼𝗆, ρ and ψ, and applies to such notes.

12.1 Value conservation

Lemma 12.3 (Modular balance is integer balance).

Let n<216; for 1≤i≤n let vi𝗈𝗅𝖽 and vi𝗇𝖾𝗐 be integers in {0,…,264−1}; and let v𝖻𝖺𝗅𝖺𝗇𝖼𝖾 be an integer in {−𝖬𝖠𝖷⁢_⁢𝖬𝖮𝖭𝖤𝖸,…,𝖬𝖠𝖷⁢_⁢𝖬𝖮𝖭𝖤𝖸}. If

∑i=1n(vi𝗈𝗅𝖽−vi𝗇𝖾𝗐)≡v𝖻𝖺𝗅𝖺𝗇𝖼𝖾(modp𝖵𝖾𝗌𝗍𝖺),

then the two sides are equal as integers. The hypotheses hold for every accepted bundle of either pool: the bound on n and the range of the balancing value are consensus rules (“The transaction format”, §11.2; protocol specification, §“Transaction Consensus Rules”, for both pools), and vi𝗈𝗅𝖽 and vi𝗇𝖾𝗐 are 64-bit values of the auxiliary input of Definition 9.2.

Proof.

Let v𝗌𝗎𝗆:=∑i(vi𝗈𝗅𝖽−vi𝗇𝖾𝗐)−v𝖻𝖺𝗅𝖺𝗇𝖼𝖾. Each difference has absolute value at most 264−1, and 𝖬𝖠𝖷⁢_⁢𝖬𝖮𝖭𝖤𝖸=2.1⋅1015 (protocol specification, §“Constants”), so

|v𝗌𝗎𝗆|≤(216−1)⁢(264−1)+𝖬𝖠𝖷⁢_⁢𝖬𝖮𝖭𝖤𝖸=1 208 907 374 970 555 465 089 025<280.

The hypothesis makes v𝗌𝗎𝗆 a multiple of p𝖵𝖾𝗌𝗍𝖺, and p𝖵𝖾𝗌𝗍𝖺>2254 (§2.1); the only such multiple of absolute value below 280 is 0. □

The security argument of the protocol specification, §“Balance and Binding Signature (Orchard)”, bounds the balancing value by its signed 64-bit encoding instead, which places v𝗌𝗎𝗆 in

{−1 208 916 596 242 592 319 864 832,…,1 208 916 596 242 592 319 864 833};

that bound is also below 280, so the conclusion holds without the range rule.

Theorem 12.4 (Balance).

Under Assumptions 9.11, 2.22, 2.8 and 7.3, for each pool, the Ironwood pool included, every accepted bundle of that pool output by an efficient adversary, with n Actions and balancing value v𝖻𝖺𝗅𝖺𝗇𝖼𝖾, satisfies

∑i=1n(vi𝗈𝗅𝖽−vi𝗇𝖾𝗐)=v𝖻𝖺𝗅𝖺𝗇𝖼𝖾

as integers, the values read from the Actions’ witnesses, except with negligible probability. The binding signature checked is that of the same pool, under the binding validating key 𝖻𝗏𝗄 recomputed from that bundle’s net value commitments and balancing value; both pools use the bases V𝖮𝗋𝖼𝗁𝖺𝗋𝖽 and R𝖮𝗋𝖼𝗁𝖺𝗋𝖽.

Proof.

Fix a pool and an efficient adversary 𝒜. The adversary outputs polynomially many bundles, and the union bound reduces the claim to the j-th bundle of the pool, for each j. Let ℬj be the algorithm that runs 𝒜 with the extractors of Assumption 9.11 and outputs that bundle’s net value commitments 𝖼𝗏1𝗇𝖾𝗍,…,𝖼𝗏n𝗇𝖾𝗍, its balancing value, the pairs

(vi𝗈𝗅𝖽−vi𝗇𝖾𝗐,𝗋𝖼𝗏imodp𝖵𝖾𝗌𝗍𝖺)(1≤i≤n)

read from the witnesses, the digest 𝖲𝗂𝗀𝖧𝖺𝗌𝗁 of its transaction and the pool’s binding signature. Algorithm ℬj is efficient and forwards the queries of 𝒜 to 𝖧.

(1) Openings. By condition A4 of Definition 9.2, 𝖼𝗏i𝗇𝖾𝗍=[vi𝗈𝗅𝖽−vi𝗇𝖾𝗐]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽+[𝗋𝖼𝗏i]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽, so each output pair is an opening of 𝖼𝗏i𝗇𝖾𝗍 in the sense of “The binding signature” (§8.3), except with the negligible probability that a witness fails the definition.

(2) Signature. The bundle is accepted, so its binding signature is valid on 𝖲𝗂𝗀𝖧𝖺𝗌𝗁 under

𝖻𝗏𝗄=∑i=1n𝖼𝗏i𝗇𝖾𝗍−[v𝖻𝖺𝗅𝖺𝗇𝖼𝖾]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽

in the binding-signature instance of RedPallas, with base R𝖮𝗋𝖼𝗁𝖺𝗋𝖽 (step (6) of the verification of §11.6). This key belongs to the pool’s own bundle: each pool’s 𝖻𝗏𝗄 sums only that pool’s net value commitments and subtracts only its balancing value (§8.3).

(3) Congruence. Algorithm ℬj is therefore an efficient party of the consequence of Proposition 8.10: it outputs the net value commitments and the balancing value of a bundle, openings of every commitment, and a binding signature under the resulting 𝖻𝗏𝗄 on a message of its choice. The consequence is proved in two steps. The extraction of Proposition 7.12, in the random-oracle model for 𝖧 (Assumption 7.3), yields b with 𝖻𝗏𝗄=[b]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽; if the openings did not balance modulo p𝖵𝖾𝗌𝗍𝖺, part (ii) of Proposition 8.10 would turn the residual V𝖮𝗋𝖼𝗁𝖺𝗋𝖽 component into the discrete logarithm of V𝖮𝗋𝖼𝗁𝖺𝗋𝖽 to the base R𝖮𝗋𝖼𝗁𝖺𝗋𝖽, which Assumptions 2.22 and 2.8 exclude. Hence ∑i(vi𝗈𝗅𝖽−vi𝗇𝖾𝗐)≡v𝖻𝖺𝗅𝖺𝗇𝖼𝖾(modp𝖵𝖾𝗌𝗍𝖺), except with negligible probability.

(4) Integers. The bundle is accepted, so it has n<216 Actions, its balancing value lies in the range {−𝖬𝖠𝖷⁢_⁢𝖬𝖮𝖭𝖤𝖸,…,𝖬𝖠𝖷⁢_⁢𝖬𝖮𝖭𝖤𝖸}, and the witnessed values lie in {0,…,264−1}. Lemma 12.3 turns the congruence into an equality of integers.

The argument uses no property of the pool beyond its own bundle and binding signature, and applies to the Ironwood pool as to the Orchard pool. □

12.2 Double-spend resistance

Lemma 12.5 (One nullifier per note).

Under Assumptions 9.11, 2.22 and 2.8, except with negligible probability: whenever two accepted Actions, of either pool, have witnesses whose consumed notes have the same extracted commitment 𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(𝖼𝗆𝗈𝗅𝖽), the two witnesses consume the same note with the same nullifier deriving key 𝗇𝗄, and the two Actions publish the same nullifier 𝗇𝖿𝗈𝗅𝖽. The lemma uses neither v𝗈𝗅𝖽 nor condition A3.

Proof.

Let w and w′ be the two witnesses, primed components belonging to w′. Outside the negligible events of the paragraph after Definition “Pools, accepted Actions and witnesses”, both satisfy Definition 9.2 with A1 and A7 unweakened. Every step below is carried out by the efficient algorithm that runs the adversary with the extractors and searches the accepted Actions for such a pair.

(1) The note. By A1, 𝖼𝗆𝗈𝗅𝖽=𝖭𝗈𝗍𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝗋𝖼𝗆𝗈𝗅𝖽⁢(M𝗈𝗅𝖽)≠⊥, and likewise for w′. The two consumed notes thus have equal extracted commitments other than ⊥, and by Remark “Binding for notes given by expanded receivers” they are equal, except with negligible probability. Equal notes have equal messages and trapdoors modulo p𝖵𝖾𝗌𝗍𝖺, hence 𝖼𝗆𝗈𝗅𝖽=𝖼𝗆′⁣𝗈𝗅𝖽.

(2) The key. By A7, 𝗉𝗄𝖽𝗈𝗅𝖽=[𝗂𝗏𝗄]⁢𝗀𝖽𝗈𝗅𝖽 with 𝗂𝗏𝗄:=𝖢𝗈𝗆𝗆𝗂𝗍𝗋𝗂𝗏𝗄𝗂𝗏𝗄⁢(𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(𝖺𝗄ℙ),𝗇𝗄)≠⊥, and, the notes being equal, 𝗉𝗄𝖽𝗈𝗅𝖽=[𝗂𝗏𝗄′]⁢𝗀𝖽𝗈𝗅𝖽 likewise. Both values of 𝖢𝗈𝗆𝗆𝗂𝗍𝗂𝗏𝗄 are integers below p𝖯𝖺𝗅𝗅𝖺𝗌<p𝖵𝖾𝗌𝗍𝖺, read as scalars (§2.1), and 𝗀𝖽𝗈𝗅𝖽 is a non-identity point of a group of prime order p𝖵𝖾𝗌𝗍𝖺; hence 𝗂𝗏𝗄=𝗂𝗏𝗄′. By the binding of 𝗂𝗏𝗄 to (𝖺𝗄,𝗇𝗄) (Proposition “Binding of 𝗂𝗏𝗄 to (𝖺𝗄,𝗇𝗄)”, §3.2), under Assumptions 2.22 and 2.8,

(𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(𝖺𝗄ℙ),𝗇𝗄,𝗋𝗂𝗏𝗄modp𝖵𝖾𝗌𝗍𝖺)=(𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(𝖺𝗄′⁣ℙ),𝗇𝗄′,𝗋𝗂𝗏𝗄′modp𝖵𝖾𝗌𝗍𝖺),

except with negligible probability; in particular 𝗇𝗄=𝗇𝗄′.

(3) The nullifier. By A5, 𝗇𝖿𝗈𝗅𝖽=𝖣𝖾𝗋𝗂𝗏𝖾𝖭𝗎𝗅𝗅𝗂𝖿𝗂𝖾𝗋𝗇𝗄⁢(ρ𝗈𝗅𝖽,ψ𝗈𝗅𝖽,𝖼𝗆𝗈𝗅𝖽) (Definition 6.3), a function of its four arguments, which are equal for w and w′ by (1) and (2). The two Actions therefore publish the same nullifier. No step uses v𝗈𝗅𝖽 or A3. □

Theorem 12.6 (No double-spending).

Under Assumptions 9.11, 2.22 and 2.8, for each pool, except with negligible probability, no committed note of non-zero value is consumed by two accepted Actions of that pool. The guarantee is per pool: the two pools’ nullifiers are checked against separate sets.

Proof.

Let two distinct accepted Actions of one pool consume the same note. Their consumed notes have the same extracted commitment, so by Lemma 12.5, except with negligible probability, the two Actions publish the same nullifier. Both belong to transactions of the adversary’s block chain, and the nullifier rule of “Nullifier sets” (§6.2), step (4) of the verification of §11.6, rejects a nullifier of the pool that repeats within a transaction or across the transactions of the chain. The event therefore lies in the negligible event of the lemma. The argument uses neither the value nor the membership of the note and holds for every note; the case of a committed note of non-zero value is the one that moves value. The nullifier sets of the two pools are separate (§6.2), so the argument concerns two Actions of one pool only. □

Corollary 12.7 (Faerie Gold resistance).

Under Assumptions 9.11, 2.22 and 2.8, except with negligible probability:

  1. (a)

    the notes created by distinct accepted Actions of one pool have pairwise distinct elements ρ, and are therefore pairwise distinct;

  2. (b)

    two distinct notes have distinct nullifiers, whatever their nullifier deriving keys: no efficient algorithm outputs two distinct notes, with note commitments other than ⊥, and two keys 𝗇𝗄, 𝗇𝗄′, equal or not, under which the two notes have equal nullifiers.

Hence the Faerie Gold attack, as defined in “Nullifier chaining” (§6.3), fails within a pool: (a) excludes two Actions creating the same note, which would carry one nullifier, and (b) excludes distinct notes sharing a nullifier, so that consuming one note accepted by a recipient never blocks another. The uniqueness of ρ is pool-local: the pools’ nullifier sets are separate, so one value of ρ may occur once in each pool.

Proof.

(a) The note that the witness of an accepted Action creates has ρ𝗇𝖾𝗐=𝗇𝖿𝗈𝗅𝖽 of that Action: the Action statement fixes ρ𝗇𝖾𝗐:=𝗇𝖿𝗈𝗅𝖽 and binds the created note to the published 𝖼𝗆𝗑 by A2 (Definition 9.2), so the chaining rule of §6.3 is enforced through Assumption 9.11. Distinct accepted Actions of one pool publish distinct nullifiers, by the nullifier rule (§6.2). Their created notes therefore have distinct ρ, and notes with a distinct component are distinct. The created note is the only opening of 𝖼𝗆𝗑 that an efficient algorithm finds (Remark “Binding for notes given by expanded receivers”); a recipient that accepts a note from the Action obtains that note (Proposition 10.15(c)) and checks ρ=𝗇𝖿𝗈𝗅𝖽 itself (Proposition 10.15(a)).

(b) Two distinct notes have distinct note commitments, except with negligible probability, by the same remark; Proposition 6.8, which admits every pair of nullifier deriving keys, then excludes equal nullifiers.

Faerie Gold. Let a recipient accept a note n′ from an accepted Action of a pool, and let 𝗇𝖿′ be its nullifier under the recipient’s 𝗇𝗄. By (a) no other accepted Action of the pool creates n′, so the notes that the recipient accepts from distinct Actions are distinct. An accepted Action of the pool whose witness consumes a note n≠n′ publishes, by A5, the nullifier of n under the witnessed key, which differs from 𝗇𝖿′ by (b). The value 𝗇𝖿′ therefore enters the pool’s nullifier set only through an Action that consumes n′ itself, and the consumption of another note does not make n′ unspendable.

Pool locality. The argument of (a) uses the nullifier set of one pool. An Orchard-pool Action and an Ironwood-pool Action may publish the same nullifier and create notes with the same ρ; a consumption in one pool inserts its nullifier into that pool’s set only, and so blocks no note of the other pool (Remark “Pool locality”, §6.2). □

12.3 Authorisation of spends

Definition 12.8 (Spend-authority experiment).

A key holder generates a spending key 𝗌𝗄 with 𝗎𝗌𝖾⁢_⁢𝗊𝗌𝗄=𝖿𝖺𝗅𝗌𝖾 and derives (𝖺𝗌𝗄,𝗇𝗄,𝗋𝗂𝗏𝗄), 𝖺𝗄ℙ and 𝖺𝗄=𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(𝖺𝗄ℙ) as in “The spending key and the spend-side secrets” (§3.1), and 𝗂𝗏𝗄 as in “Viewing keys” (§3.2). The adversary receives the full viewing key (𝖺𝗄,𝗇𝗄,𝗋𝗂𝗏𝗄) but not 𝖺𝗌𝗄, sees every public field, may create notes to any address of the key, and may obtain spend-authorisation signatures: on a query (α,m), with α∈𝔽p𝖵𝖾𝗌𝗍𝖺 and m a byte string, it receives a RedPallas signature on m under 𝗋𝗌𝗄=𝖺𝗌𝗄+α in the spend-authorisation instance, the signing model of Proposition 7.12. A note of the key is a note whose expanded receiver satisfies 𝗉𝗄𝖽=[𝗂𝗏𝗄]⁢𝗀𝖽 for the key’s 𝗂𝗏𝗄. The adversary wins if it outputs a block chain with an accepted Action whose witness consumes a note of the key, of any value, a dummy of value zero included, and whose spend-authorisation signature is valid under its 𝗋𝗄 on a signature digest m, where no query (α,m) had 𝗋𝗄=𝖺𝗄ℙ+[α]⁢G𝖲𝗉𝖾𝗇𝖽𝖠𝗎𝗍𝗁.

Theorem 12.9 (Spend authority).

For keys generated with 𝗎𝗌𝖾⁢_⁢𝗊𝗌𝗄=𝖿𝖺𝗅𝗌𝖾, and under Assumptions 9.11, 2.22, 2.8 (through the binding of 𝖢𝗈𝗆𝗆𝗂𝗍𝗂𝗏𝗄), 7.3 and 2.12, no efficient adversary wins the spend-authority experiment, except with negligible probability.

Proof.

Let an efficient adversary 𝒜 win with probability ϵ, and write G:=G𝖲𝗉𝖾𝗇𝖽𝖠𝗎𝗍𝗁.

(1) Idealised key. By Lemma “Rejection in key generation” (§3.2), the key is replaced by a single draw from a uniform 𝗌𝗄 without rejection, at a cost negligible under Assumptions 2.12, 2.22 and 2.8. By Lemma 2.15 (Assumption 2.12), its triple (𝖺𝗌𝗄,𝗇𝗄,𝗋𝗂𝗏𝗄), before the sign normalisation, is then replaced by independent uniform elements of 𝔽p𝖵𝖾𝗌𝗍𝖺, 𝔽p𝖯𝖺𝗅𝗅𝖺𝗌 and 𝔽p𝖵𝖾𝗌𝗍𝖺, at a further negligible cost. Both hops apply because the event that 𝒜 wins is efficiently decidable from the triple: an algorithm derives the key’s components, runs 𝒜, answers its signing queries with 𝖺𝗌𝗄, runs the extractors on its output and checks the winning condition. After this step 𝗇𝗄 and 𝗋𝗂𝗏𝗄 are independent of 𝖺𝗌𝗄, and, when 𝖺𝗌𝗄≠0, the sign normalisation makes 𝖺𝗄ℙ a uniform non-identity point of even y-coordinate (Remark “Hypothesis (H) for honest keys”, §11.3). This independence lets the reduction below simulate the full viewing key from 𝖺𝗄ℙ alone.

(2) Reduction. An algorithm ℬ plays the adversary of Proposition 7.12. It receives Y=[x]⁢G for x uniform on 𝔽p𝖵𝖾𝗌𝗍𝖺, with access to 𝖧 and to the signing oracle. If Y=𝒪 or Y has odd y-coordinate, it stops. Otherwise, an event of probability (p𝖵𝖾𝗌𝗍𝖺−1)/(2⁢p𝖵𝖾𝗌𝗍𝖺), since exactly half of the p𝖵𝖾𝗌𝗍𝖺−1 non-identity points have even y-coordinate (§2.1, on the star encoding), the point Y is distributed as 𝖺𝗄ℙ in step (1) conditioned on 𝖺𝗌𝗄≠0. Algorithm ℬ sets 𝖺𝗄ℙ:=Y and 𝖺𝗄:=𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(Y), draws 𝗇𝗄 and 𝗋𝗂𝗏𝗄 uniformly, computes 𝗂𝗏𝗄, and gives 𝒜 the full viewing key (𝖺𝗄,𝗇𝗄,𝗋𝗂𝗏𝗄). It answers each query (α,m) of 𝒜 with the oracle’s signature under x+α, forwards the queries of 𝒜 to 𝖧, and simulates every other honest party and random oracle. When 𝒜 outputs a block chain, ℬ runs the extractors of Assumption 9.11, as stated after Definition “Pools, accepted Actions and witnesses”, and searches for an Action that meets the winning condition, all of whose parts it can check; failing one, it stops. For the Action found, with witness w, it determines θ∈{1,−1} with 𝖺𝗄wℙ=[θ]⁢Y, stopping if there is none, and outputs the Action’s triple (𝗋𝗄,m,σ) together with the witnessed randomiser αw and θ.

(3) The witnessed key. Except with negligible probability, 𝖺𝗄wℙ∈{Y,−Y}. By A7, in its unweakened form, 𝗉𝗄𝖽𝗈𝗅𝖽=[𝗂𝗏𝗄w]⁢𝗀𝖽𝗈𝗅𝖽 with 𝗂𝗏𝗄w:=𝖢𝗈𝗆𝗆𝗂𝗍𝗋𝗂𝗏𝗄w𝗂𝗏𝗄⁢(𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(𝖺𝗄wℙ),𝗇𝗄w)≠⊥, and the consumed note is a note of the key, so 𝗉𝗄𝖽𝗈𝗅𝖽=[𝗂𝗏𝗄]⁢𝗀𝖽𝗈𝗅𝖽. As in step (2) of the proof of Lemma 12.5, 𝗂𝗏𝗄w=𝗂𝗏𝗄, and the binding of 𝗂𝗏𝗄 to (𝖺𝗄,𝗇𝗄) gives 𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(𝖺𝗄wℙ)=𝖺𝗄=𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(Y), under Assumptions 2.22 and 2.8. By Lemma 2.4, 𝖺𝗄wℙ∈{Y,−Y}. The statement does not constrain the sign of the witnessed point (Remark “Sign of 𝖺𝗄ℙ”, §9.2), and the proof treats both signs. By A6,

𝗋𝗄=𝖺𝗄wℙ+[αw]⁢G=[θ]⁢Y+[αw]⁢G.

(4) Forgery. An answer of the signing oracle to a query (α,m′) has validating key Y+[α]⁢G and message m′. The winning condition excludes a query (α,m) with 𝗋𝗄=Y+[α]⁢G, so the output triple is not the triple of an oracle answer: it is a forgery in the sense of Proposition 7.12. Algorithm ℬ is efficient, and forges with probability at least

p𝖵𝖾𝗌𝗍𝖺−12⁢p𝖵𝖾𝗌𝗍𝖺⁢(ϵ−ν)

for a negligible ν, the costs of step (1) and of the events excluded in step (3).

(5) Discrete logarithm. By Proposition 7.12(i), an algorithm 𝒟 runs ℬ twice on shared coins and outputs, with at least the probability that part states for the forging probability of ℬ, a scalar 𝗋𝗌𝗄∗ with 𝗋𝗄=[𝗋𝗌𝗄∗]⁢G for the 𝗋𝗄 of the first run. It outputs x′:=θ⁢(𝗋𝗌𝗄∗−αw), with θ and αw of the first run. By step (3), [θ]⁢Y=[𝗋𝗌𝗄∗−αw]⁢G, so x′=x. For θ=1 this is part (ii) of the proposition with α∗=αw; for θ=−1 the same relation gives −x=𝗋𝗌𝗄∗−αw, so a witnessed point −𝖺𝗄ℙ is no easier than 𝖺𝗄ℙ: either sign yields 𝖺𝗌𝗄, the discrete logarithm of the honest 𝖺𝗄ℙ. By Assumption 2.22 the probability that 𝒟 outputs x is negligible, hence so is the forging probability of ℬ, and with it ϵ; the loss factor 2⁢p𝖵𝖾𝗌𝗍𝖺/(p𝖵𝖾𝗌𝗍𝖺−1) is about 2. □

Remark 12.10 (Authority without linkability).

An Action publishes 𝗋𝗄 and a signature under 𝗋𝗌𝗄=𝖺𝗌𝗄+α, never 𝖺𝗄ℙ or 𝖺𝗄. For α drawn by 𝖦𝖾𝗇𝖱𝖺𝗇𝖽𝗈𝗆 afresh per Action, Proposition 7.10 (Assumption 7.3) makes the keys 𝗋𝗄 of n Actions independent of their spend validating keys up to statistical distance n⁢(δ512+(qh+n)⋅2−640), with δ512<2−257, and makes (𝗋𝗌𝗄,𝗋𝗄) distributed as a fresh key pair; the signature is a function of 𝗋𝗌𝗄, the digest and fresh randomness. The keys 𝗋𝗄 of distinct spends of one key are therefore unlinkable, while Theorem 12.9 shows that an accepted Action with a valid signature under its 𝗋𝗄 still demonstrates knowledge of 𝖺𝗌𝗄: from an adversary that produces one for an honestly generated key without its 𝖺𝗌𝗄, the reduction of its proof computes 𝖺𝗌𝗄.

12.4 Privacy

Definition 12.11 (Public leakage and privacy preconditions).

The public leakage of a bundle is its pool, its number of Actions, its anchor, its flags and its balancing value; the rest of the transaction, namely its transparent components, the other pool’s bundle and its header with the expiry height, is public as well. The private inputs of a bundle are, per Action, its witness (Definition 9.2), the plaintext of its created note (“The note plaintext”, §10.1), the outgoing viewing key under which its C𝗈𝗎𝗍 is formed, or ⊥, and whether each side is real or a dummy. The privacy preconditions are:

  1. (P1)

    every key involved, namely the key of each consumed note, of each recipient, and the key whose 𝗈𝗏𝗄 the sender uses, is generated honestly with 𝗎𝗌𝖾⁢_⁢𝗊𝗌𝗄=𝖿𝖺𝗅𝗌𝖾;

  2. (P2)

    the bundle is an Ironwood-pool bundle generated by the procedure of “Construction of a transaction” (§11.5): the seed 𝗋𝗌𝖾𝖾𝖽 of each created note fresh and uniform, the trapdoor 𝗋𝖼𝗏 uniform, the randomiser α drawn by 𝖦𝖾𝗇𝖱𝖺𝗇𝖽𝗈𝗆, each real consumed note a note of the pool that the procedure of “Trial decryption and note acceptance” (§10.4) accepted from an output of an accepted Action, and dummies as in the protocol specification, §“Dummy Notes (Orchard)”: a dummy consumed note has a random spending key, value 0, ρ the x-coordinate of a uniform point, a uniform 𝗋𝗌𝖾𝖾𝖽 and an unchecked path, and a dummy created note is an ordinary note of value 0 to an address of a freshly generated key;

  3. (P3)

    the authentication path is computed locally from public data (Lemma 5.15);

  4. (P4)

    the adversary holds no viewing key of a key involved (no 𝗇𝗄 of a spender, no 𝗂𝗏𝗄 of a recipient, no 𝗈𝗏𝗄 of the sender), and no output is a coinbase output.

Within these preconditions the adversary may choose which notes are consumed and the recipients’ addresses, and may know the consumed notes’ contents.

Under (P2) the real consumed notes of one key have pairwise distinct elements ρ. An accepted note has ρ=𝗇𝖿𝗈𝗅𝖽 of the Action whose output carries it (Proposition 10.15(a)); one output yields at most one note under one 𝗂𝗏𝗄; and distinct Actions of the pool publish distinct nullifiers (§6.2). The experiment of the next theorem imposes this property directly.

Theorem 12.12 (Privacy of an Action).

Assume preconditions (P1) to (P4), and let two sequences of private inputs of one Ironwood-pool bundle have equal public leakage, both satisfy Definition 9.2 with the common anchor and flags, and each Action consume either a leaf of the tree at that anchor not consumed before or a dummy, and create either a note to an honestly generated address or a dummy. Under Assumptions 9.14, 2.12, 3.13, 6.2, 3.16, 2.8, 10.4, 10.5 and 7.3, with Assumption 2.22 for Lemma “Rejection in key generation” (§3.2) and the redraw of the note seed (§4.3), the public data of the two bundles (per Action 𝖼𝗏𝗇𝖾𝗍, 𝗇𝖿, 𝗋𝗄, 𝖼𝗆𝗑, 𝖾𝗉𝗄⋆, C𝖾𝗇𝖼, C𝗈𝗎𝗍 and the spend-authorisation signature; the proof and the binding signature) are computationally indistinguishable. In particular, beyond its public leakage an Action reveals nothing about its private inputs, and an Action whose spend or output side is a dummy is indistinguishable from one whose sides are real.

Precisely, in the following experiment every efficient adversary has negligible advantage. Keys are generated as in (P1), and the adversary receives addresses of them at indices of its choice. It outputs the leaves of the Ironwood-pool tree through an anchoring block, the rest of a transaction, flags, and two specifications of n Actions with equal balancing values. A specification gives, per Action, a consumed side, either “dummy” or a note at one of these addresses whose extracted commitment is a leaf; a created side, either “dummy” or one of these addresses with a value and a memo; and the sender’s 𝗈𝗏𝗄, that of one of the keys or ⊥. The consumed leaves of a specification are pairwise distinct, the consumed notes of one key have pairwise distinct ρ, and the construction of (P2) yields witnesses of Definition 9.2 with the anchor and flags. A challenger builds the bundle of specification β, for a uniform bit β, by that construction and gives the adversary its public data; the adversary outputs a bit β′, and its advantage is |Pr[β′=1∣β=0]−Pr[β′=1∣β=1]|.

Proof.

For β∈{0,1} let G0β be the experiment with specification β. Each of the games G1β to G7β below changes the probability that the adversary outputs 1 by a negligible amount (Crypto Guide, §“The hybrid argument”, Lemma “Hybrid lemma”; each game is reached in polynomially many steps, one key or one Action at a time), and G70 and G71 are identically distributed. Every reduction runs the experiment with the adversary and samples every value that its hop does not concern. The keys involved are those of (P1), the spending keys of the dummy consumed notes and the keys of the dummy created notes.

Game G1 (proof). The aggregate proof is replaced by the output of the simulator of Assumption 9.14 on the primary inputs, which are public; the witnesses satisfy Definition 9.2 by hypothesis. The cost is the statistical distance of that assumption. From G1 on, a witness enters the game only through the public fields computed from its components.

Game G2 (keys). Each key involved is replaced in turn, as in the preliminary step of the proof of Proposition 10.6 and hybrids H1 to H3 of the proof of Proposition 6.10: by a single draw without rejection (Lemma “Rejection in key generation”, §3.2; Assumptions 2.12, 2.22 and 2.8); its triple (𝖺𝗌𝗄,𝗇𝗄,𝗋𝗂𝗏𝗄) by independent uniform elements (Lemma 2.15); and its triple (𝗂𝗏𝗄,𝖽𝗄,𝗈𝗏𝗄) by (𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(W),u1,u2), for a uniform point W and uniform 32-byte strings u1 and u2 (Assumption 3.13, whose reduction draws 𝖺𝗌𝗄 and 𝗇𝗄 itself, and the negligible event that 𝖺𝗌𝗄=0 or that the hash point of 𝖢𝗈𝗆𝗆𝗂𝗍𝗂𝗏𝗄 is ⊥). The hops apply because after G1 the trapdoor 𝗋𝗂𝗏𝗄 enters the game only through (𝗂𝗏𝗄,𝖽𝗄,𝗈𝗏𝗄). From G2 on, the components 𝖺𝗌𝗄, 𝗇𝗄, 𝗂𝗏𝗄, 𝖽𝗄 and 𝗈𝗏𝗄 of each key are independent, and 𝖽𝗄 and 𝗈𝗏𝗄 are uniform.

Game G3 (outgoing ciphertexts). Each C𝗈𝗎𝗍 is replaced by the encryption of a fixed 64-byte string under an independent uniform key, by Proposition “Confidentiality of the outgoing ciphertext” (§10.3). For 𝗈𝗏𝗄≠⊥, the key 𝗈𝖼𝗄 is a value of the random oracle 𝖯𝖱𝖥𝗈𝖼𝗄 (Assumption 10.4) at an input that begins with the uniform secret 𝗈𝗏𝗄, which q queries of the adversary hit with probability at most q⋅2−256. Distinct Actions give distinct inputs, their 𝖾𝗉𝗄 differing except with negligible probability, so each 𝗈𝖼𝗄 is uniform and encrypts once, and Assumption 10.5(a) replaces the plaintext. For 𝗈𝗏𝗄=⊥, the key is uniform by construction and Assumption 10.5(a) applies directly.

Game G4 (randomised keys). Each randomiser αi is replaced by a uniform scalar, at a cost of at most δ512+qh⋅2−640 each, δ512<2−257, for qh queries to 𝖧 (Lemma “Distance of GenRandom from uniform”, §7.2; Assumption 7.3). Then yi:=𝗋𝗌𝗄i=𝖺𝗌𝗄+αi is uniform and independent of 𝖺𝗌𝗄 and of every other value, and 𝗋𝗄i=[yi]⁢G𝖲𝗉𝖾𝗇𝖽𝖠𝗎𝗍𝗁 (Proposition 7.10(i)); the signature σi is computed under yi. From G4 on, no 𝖺𝗌𝗄 enters the game.

Game G5 (nullifiers). For each key that consumes a note in the bundle, real or dummy, the key 𝗇𝗄 enters G4 only through the nullifiers of those notes: G1 removed it from the proof and G2 from the viewing keys. As in hybrids H4 and H5 of the proof of Proposition 6.10, 𝖯𝖱𝖥𝗇𝗄𝗇𝖿𝖮𝗋𝖼𝗁𝖺𝗋𝖽 is replaced by a uniformly random function (Assumption 6.2), and each multiplier of K𝖮𝗋𝖼𝗁𝖺𝗋𝖽 by a uniform scalar ui∈𝔽p𝖵𝖾𝗌𝗍𝖺, at a statistical cost below 2−167 each; the elements ρ of the consumed notes of one key are pairwise distinct by the definition of the experiment, and a dummy consumed note has a key of its own. Each nullifier is then 𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢([ui]⁢K𝖮𝗋𝖼𝗁𝖺𝗋𝖽+𝖼𝗆i), the x-coordinate of a uniform point whatever 𝖼𝗆i is, since K𝖮𝗋𝖼𝗁𝖺𝗋𝖽≠𝒪 except with probability 1/p𝖵𝖾𝗌𝗍𝖺 (Assumption 2.8).

Game G6 (ephemeral keys and note ciphertexts). For each created note in turn, real or dummy, 𝖾𝗉𝗄 is replaced by a uniform non-identity point and C𝖾𝗇𝖼 by the encryption of a fixed 564-byte string under an independent uniform key, by steps (1) to (4) of the proof of Proposition 10.6 (Assumptions 10.4, 3.16, 10.5, 2.8 and 2.12), which keep 𝖼𝗆𝗑. The other public data, the data z of that proposition, depend after G2 to G5 on the recipient’s key only through the addresses of that key given to the adversary and the outputs to them. The reduction of step (2) of that proof embeds the exponent a as the 𝗂𝗏𝗄 of the recipient’s key in every such address, computing its transmission key as [t]⁢([a]⁢P) for the diversified base [t]⁢P that it programs, and computes every other output to that key from its own 𝖾𝗌𝗄; the proof is otherwise as written.

Game G7 (note commitments). For each created note in turn, 𝖼𝗆𝗑 is replaced by the x-coordinate of a uniform point. After G6 the seed 𝗋𝗌𝖾𝖾𝖽 of the note enters the game only through ψ and 𝗋𝖼𝗆, that is through 𝖼𝗆: step (1) of G6 replaced 𝖾𝗌𝗄, and the ciphertexts no longer depend on the plaintext. The proof of Proposition 4.8 then places 𝖼𝗆 within ϵ𝖯𝖱𝖥+δ+ϵ⊥ of a uniform point, with δ<2−257 and ϵ𝖯𝖱𝖥, ϵ⊥ negligible under Assumptions 2.12, 2.22 and 2.8.

Value commitments and the binding signature. In G7β every field other than the net value commitments and the binding signature is distributed independently of β: the nullifiers and the extracted commitments are x-coordinates of uniform points, each 𝖾𝗉𝗄 is a uniform non-identity point, the ciphertexts encrypt fixed strings under fresh keys, each 𝗋𝗄i and σi come from a fresh key yi, the proof is simulated from the primary inputs, and the rest of the transaction is common. The net values viβ of specification β enter only

𝖼𝗏i𝗇𝖾𝗍=[viβ]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽+[𝗋𝖼𝗏i]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽,𝖻𝗌𝗄=∑i=1n𝗋𝖼𝗏i,

and, through these, the digest, the primary inputs of the simulator and 𝖻𝗏𝗄. Let λ be the discrete logarithm of V𝖮𝗋𝖼𝗁𝖺𝗋𝖽 to the base R𝖮𝗋𝖼𝗁𝖺𝗋𝖽, which exists because R𝖮𝗋𝖼𝗁𝖺𝗋𝖽 generates the group (§8.1). The map

(𝗋𝖼𝗏i)i↦(𝗋𝖼𝗏i+(vi0−vi1)⁢λ)i

is a bijection of 𝔽p𝖵𝖾𝗌𝗍𝖺n. It carries the net value commitments of specification 0 to those of specification 1, and it preserves ∑i𝗋𝖼𝗏i, because ∑ivi0=∑ivi1, the common balancing value (step (6) of the construction of §11.5). The 𝗋𝖼𝗏i being uniform and independent, the tuple (𝖼𝗏1𝗇𝖾𝗍,…,𝖼𝗏n𝗇𝖾𝗍,𝖻𝗌𝗄) has the same distribution for both β, and G70 and G71 are identically distributed. This step is perfect and needs no reduction; the game is not required to compute λ.

The advantage of the adversary is therefore at most the sum of the costs of the hops for β=0 and β=1, which is negligible. In G7 a dummy side differs from a real side only through the value in 𝖼𝗏𝗇𝖾𝗍, so two sequences that differ in whether a side is a dummy, with equal public leakage, are covered by the same argument. □

Remark 12.13 (Non-claims).

Theorem 12.12 hides nothing of the public leakage: each bundle’s balancing value, so the net amount that each transaction moves across a pool’s boundary is public; each pool’s chain value pool balance, the negation of the sum of its balancing values (“Chain state and pool rules”, §11.4), so a pool hides which notes are held by whom, never the aggregate value it holds; the number of Actions and the presence of each component; the flags; the transparent components; the fee; the anchor, which confines the consumed note to the leaves of the anchored tree (“Authentication paths”, §5.3); and the transaction’s timing and expiry height. Per Action the chain gains one nullifier and one extracted note commitment, which by the theorem reveal neither sender, recipient nor amount. The theorem claims nothing for coinbase outputs, whose outgoing ciphertexts decrypt under the all-zero 𝗈𝗏𝗄 (§11.4); nothing against a holder of a viewing key of a key involved, whose powers are stated in “Nullifier uniqueness and unlinkability” (§6.4), “The outgoing ciphertext” (§10.3) and “Trial decryption and note acceptance” (§10.4); nothing for an Orchard-pool bundle, whose created notes use lead byte 𝟶⁢𝚡⁢𝟶𝟸 and a derivation on which the volume does not rely (§10.4); and nothing about linkage through information outside the transaction, such as an address given to several parties, voluntary disclosures, or wallet and network metadata.

12.5 The end-to-end theorem

Theorem 12.14 (End-to-end security).

Assume, listed once: Assumption 2.22; Assumptions 9.11 and 9.14, with Assumption 9.10 in the supporting analysis of Assumption 9.11; Assumption 3.16; Assumptions 2.12 and 6.2; Assumption 3.13; Assumptions 10.4 and 10.5; Assumption 11.9; and Assumptions 2.8 and 7.3, for 𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁 and 𝖧 as random oracles. Clauses (iv) and (v) are key-derived and are claimed for keys generated with 𝗎𝗌𝖾⁢_⁢𝗊𝗌𝗄=𝖿𝖺𝗅𝗌𝖾; clauses (i) to (iii) use no property of key generation. For each pool, no efficient adversary achieves any of the following, except with negligible probability:

  1. (i)

    an accepted Action for which the extractor of Assumption 9.11 outputs no witness satisfying Definition 9.2; or a second opening, other than its witnessed created note, of the 𝖼𝗆𝗑 of an accepted Action; or an accepted Action whose witnessed v𝗈𝗅𝖽 is non-zero and whose consumed note is not a committed note of the pool, a leaf of the tree at the Action’s anchor (membership soundness) [R1 and R2 soundness];

  2. (ii)

    two accepted Actions of the pool consuming one committed note of non-zero value [R3 soundness];

  3. (iii)

    an accepted bundle whose balancing value differs, as an integer, from the sum of its Actions’ v𝗈𝗅𝖽−v𝗇𝖾𝗐 [R4 soundness];

  4. (iv)

    winning the spend-authority experiment of “Authorisation of spends”, that is, an accepted Action consuming a note of an honestly generated key without a signature of the key holder, the adversary holding the key’s full viewing key but not its 𝖺𝗌𝗄; or an accepted transaction that changes the effecting data of a transaction T while retaining one of its Actions, where the Actions of T are authorised by holders of honestly generated keys who sign as hypothesis (S) of Proposition 11.10 states [R5];

  5. (v)

    for Ironwood-pool bundles, distinguishing the public data of two bundles with equal public leakage under preconditions (P1) to (P4) of “Privacy”, in particular a real Action from a dummy one [R1 hiding; R2 hiding, without identifying the note; R3 hiding, without a public list of consumed notes; R4 hiding, without disclosed amounts].

The bracketed tags refer to the requirement map of “The Action statement” (§9.2, Table 5), which is not repeated.

Proof.

Each clause is a result of this section or of an earlier one.

(i) The first part is Assumption 9.11, applied to each bundle as stated after Definition “Pools, accepted Actions and witnesses”, with Remark “⊥-weakened conditions” (§9.2) for the unweakened forms of A1, A2, A3 and A7. By A2 the created note opens 𝖼𝗆𝗑, and by Remark “Binding for notes given by expanded receivers” it is the only opening that an efficient algorithm finds. For v𝗈𝗅𝖽≠0, condition A3, outside its ⊥ case, makes the fold of A3 on (𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(𝖼𝗆𝗈𝗅𝖽),𝗉𝗈𝗌,𝗉𝖺𝗍𝗁), with the witnessed encodings 𝖼, reach the bundle’s anchor 𝑟𝑡, and the anchor rule, step (3) of the verification of §11.6, makes 𝑟𝑡 the anchor of an earlier block in the pool. By A1, 𝖼𝗆𝗈𝗅𝖽 is a point, so Proposition 5.9(iii), which applies to that fold (§9.2), gives, under Assumptions 2.22 and 2.8, that 𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(𝖼𝗆𝗈𝗅𝖽) is the leaf appended at position 𝗉𝗈𝗌, in the anchoring block or earlier: the consumed note is a committed note of the pool.

(ii) Theorem 12.6.

(iii) Theorem 12.4, which adds Assumption 7.3.

(iv) The first part is Theorem 12.9. The second is Proposition 11.10, under Assumptions 11.9, 2.22 and 7.3; its hypothesis (H) holds for honestly generated keys up to a negligible change in the probability of every efficiently decidable event, the event of that proposition included, under Assumptions 2.12, 2.22 and 2.8 (Remark “Hypothesis (H) for honest keys”, §11.3).

(v) Theorem 12.12.

Clauses (i) to (iii) use Assumptions 9.11, 2.22, 2.8 and 7.3 only, and no property of key generation; clauses (iv) and (v) use honest key generation with 𝗎𝗌𝖾⁢_⁢𝗊𝗌𝗄=𝖿𝖺𝗅𝗌𝖾. Each assumption of the list is used by some clause, and Assumption 9.10 enters only through the supporting analysis of Assumption 9.11 (“The Action circuit and the Halo 2 proof”, §9.3). □

Remark 12.15 (Nature of the guarantees).

Beyond Assumption 9.11, every soundness reduction ends in a discrete-logarithm problem on Pallas: either a non-trivial relation among values of 𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁, modelled as a random oracle (Assumption 2.8), namely Sinsemilla collisions and ⊥ outputs (Proposition 2.24), with membership soundness (Proposition 5.9), the binding of 𝖭𝗈𝗍𝖾𝖢𝗈𝗆𝗆𝗂𝗍 and of 𝖢𝗈𝗆𝗆𝗂𝗍𝗂𝗏𝗄, nullifier uniqueness (Proposition 6.8) and the independence of V𝖮𝗋𝖼𝗁𝖺𝗋𝖽 and R𝖮𝗋𝖼𝗁𝖺𝗋𝖽 (Proposition 8.10); or the discrete logarithm of a given point, in the spend-authority reduction through the RedPallas extraction of Proposition 7.12. Every extraction from a RedPallas signature, the binding signature included, holds in the random-oracle model for 𝖧 (Assumption 7.3). The digest step of bundle binding ends instead in a BLAKE2b collision (Assumption 11.9). Soundness is therefore computational and conditional on Assumption 9.11, which “The Action circuit and the Halo 2 proof” (§9.3) classifies as designed but unspecified, with discrete logarithms on Vesta entering only its supporting analysis; no concrete bound is asserted, since that assumption carries no loss factor. In clause (v), the contribution of the proof is statistical (Assumption 9.14; Halo 2 Guide, §“Zero knowledge: hiding the witness in Halo 2”); that of the value commitments with the binding signature is perfect (the final step of the proof of Theorem 12.12); that of 𝗋𝗄 and the spend-authorisation signatures is statistical in the random-oracle model for 𝖧 (game G4 there); and the unlinkability of every other published field is computational. Assumption 6.2 is cryptanalytic, with no reduction to a standard problem.