2-out-of-2 Additive Secret Sharing: Perfect Privacy #
The 2-out-of-2 additive (XOR) secret-sharing scheme has perfect privacy: one
share alone is uniformly distributed and independent of the shared secret, so an
adversary holding a single share has advantage exactly 0 in distinguishing
which secret was shared. Following Rosulek, The Joy of Cryptography (secret
sharing).
This result is information-theoretic and self-contained — the cleanest possible instance of the bijection-coupling technique.
Overview #
To share a secret bit s, sample a uniform bit k and hand out the two shares
share₁ = k share₂ = k ⊕ s
Reconstruction is share₁ ⊕ share₂ = k ⊕ (k ⊕ s) = s, so the two shares together
determine s. Privacy is the statement that either share on its own reveals
nothing about s:
share₁ = kis a uniform bit, manifestly independent ofs;share₂ = k ⊕ sis XOR-by-sof a uniform key, hence again uniform and independent ofs— exactly the one-time-pad argument.
The privacy game reveals the share held by the corrupted party (indexed by a bit
i) for one of two adversarially chosen secrets s₀, s₁. For any fixed i,
the two games couple through a single uniform sample — for i = true via
XOR-by-(s₀ ⊕ s₁), for i = false via the identity — so advantage_zero_of_rHoare
collapses the advantage to 0.
Main definitions #
shareXor— the 2-of-2 XOR sharing of a bit:k ↦ (k, k ⊕ s).revealShare— the share seen by the corrupted partyi.SS_Privacy_Game/SS_Privacy_Adv— the one-share privacy game and its advantage.
Main results #
shareXor_reconstruct— the two shares reconstruct the secret.ss_privacy_coupling— the two privacy games are equidistributed.ss_perfect_privacy— perfect privacy:SS_Privacy_Adv i s₀ s₁ A = 0for every corrupted partyi, every pair of secrets, and every adversaryA.
References #
- [Rosulek, The Joy of Cryptography, §3 (secret sharing)]
- [Shamir, How to Share a Secret, 1979]
The 2-of-2 XOR Sharing #
Reconstruction #
The One-Share Privacy Game #
Privacy game for 2-of-2 XOR sharing. The corrupted party i is handed its
single share of one of two adversarially chosen secrets:
SS_Privacy_Game i s₀ s₁ truesharess₀(left/real)SS_Privacy_Game i s₀ s₁ falsesharess₁(right/ideal)
The adversary sees only party i's share and tries to tell the two apart.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Privacy advantage: the corrupted party's distinguishing probability between
a share of s₀ and a share of s₁.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Perfect Privacy #
Coupling: for a fixed corrupted party, the two privacy games are equidistributed. The revealed share over a uniform key is equidistributed with a plain uniform sample (XOR-by-a-fixed-value is a bijection of the key, the identity when the plain share is revealed), so the two games couple by transitivity through the uniform sample.
2-of-2 XOR secret sharing has perfect privacy: for either corrupted
party i, any two secrets s₀, s₁, and any adversary A, the one-share
privacy advantage is exactly 0. A single share is uniform and independent
of the secret.
Reflection into the Package / UC Stack #
The shallow ss_perfect_privacy bounds a single distinguisher applied to the two
privacy-game bodies. This section lifts it to a composable statement about deep
nominal packages linked with an arbitrary adversary package, following the stack
shallow game → rawCode% → NomPackage.ofOracle → DeepNomAdvantage → sdist → UC
via the shared CatCryptCore.Deep.ReflectUCHelpers combinators. The privacy game
is heap-independent, so the shallow coupling ss_privacy_coupling upgrades to a
full SPComp equality of the two reflected bodies (spcomp_eq_of_isPure_coupling),
and the whole stack follows with no purity bridge on the adversary.
The reflected one-share privacy-game body for corrupted party i and bit b.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The reflected body evaluates back to the shallow privacy game.
The privacy game is heap-independent (a uniform sample then a pure reveal).
Real privacy game as an oracle-exporting nominal package (shares s₀).
Equations
- CatCrypt.Examples.SecretSharing.ssGameTrue i s₀ s₁ = CatCrypt.Deep.NomPackage.ofOracle 1 Unit Bool fun (x : Unit) => CatCrypt.Examples.SecretSharing.ssGameRaw i s₀ s₁ true
Instances For
Ideal privacy game as an oracle-exporting nominal package (shares s₁).
Equations
- CatCrypt.Examples.SecretSharing.ssGameFalse i s₀ s₁ = CatCrypt.Deep.NomPackage.ofOracle 1 Unit Bool fun (x : Unit) => CatCrypt.Examples.SecretSharing.ssGameRaw i s₀ s₁ false
Instances For
Zero deep-nominal advantage against every adversary package.
Statistical distance zero between the two linked-game families.
Package-level perfect privacy (NomPkgSecure).
Perfect UC emulation of the linked-game families over the trivial-leak
interface (out = Bool, leak = Empty) with the identity simulator
(composition plumbing).
Reflection mirrors the shallow game. Against the forwarding adversary, the
deep-nominal advantage equals the shallow privacy advantage under the identity
distinguisher — which is 0 by ss_perfect_privacy.