taler-docs

Documentation for GNU Taler components, APIs and protocols
Log | Files | Refs | README | LICENSE

commit 99ac48e1e36b60facc27f84bc50d525be429a42e
parent 2634ad1e6e987d26b830bd71a6b28f0e24744328
Author: Özgür Kesim <oec-taler@kesim.org>
Date:   Tue, 22 Apr 2025 13:33:05 +0200

[dd:pq-refresh] make clear that r is a public value, signatures are secrets

Diffstat:
Mdesign-documents/062-pq-refresh.rst | 21++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/design-documents/062-pq-refresh.rst b/design-documents/062-pq-refresh.rst @@ -27,7 +27,7 @@ This redesign: Requirements ============ -* PQ-resistant refresh without computational hardness assumptions +* PQ-resistant refresh key derivation without computational hardness assumptions * Preservation of unlinkability between old/new coins (except for coin owner) * Compatibility with existing denomination types * Minimal bandwidth/storage overhead @@ -65,6 +65,11 @@ The hash functions ``Hash1x`` might be the same, but can be pair-wise different. However, the hash function ``Hash2`` must be different from all of the other. +Note that the value ``r`` in the algorithm itself is a public value and can be +considered as a kind of a commitment ("I'm going to sign this value") by the +dirty coin. Actual *secret* is the signature which needs to be disclosed +during the reveal-part of the refresh operation. + A variant of this algorithm that is suitable for retrieving a batch of n coins from a dirty coin is as follows: @@ -84,6 +89,11 @@ from a dirty coin is as follows: m[i] = Blind(C2_p[i], b[i], pkD) return (s, c2_s, C2_p, m) +Again, the value ``r`` is a public value and can be considered as a kind of a +commitment ("I'm going to sign this value") by the dirty coin. Actual +*secrets* are the signatures which need to be disclosed during the reveal-part +of the refresh operation. + Protocol Modifications ^^^^^^^^^^^^^^^^^^^^^^ @@ -94,7 +104,7 @@ published. 1. **Melting/Commit Phase**: - - Client chooses a master seed r and derives κ nonces r_1, ... r_κ. + - Client chooses a master (public) seed r and derives κ nonces r_1, ... r_κ. - Client generates, using RefreshDeriveBatch, κ*n blinded coin planchets m[1][1],...,m[1][n],...,m[κ][1],..,m[κ][n] from the nonces - Sends dirty coin, r, all m[i][j] and new denom-info pkD[] to the exchange, @@ -108,7 +118,7 @@ published. 2. **Reveal Phase**: - Client discloses together with h_m all except the γ-th - signatures s[1],...,s[κ] from the κ calls to RefreshDeriveBatch. + (secret) signatures s[1],...,s[κ] from the κ calls to RefreshDeriveBatch. - Exchange verifies each signature s[i] over Hash1a("Refresh", C_p, r_i, pkDs). - Exchange reconstructs the blinded coins m'[][] (except the γ-th). - Exchange verifies h_m = H(pkD[], m'[1][],...,m[γ][],...,m'[κ][], ...) equality. @@ -120,6 +130,11 @@ necessary such that the exchange can sign the request with a valid denomination key *at the moment of melting*. This ensures idempotency of the melting/commit request and that caries over to the reveal phase. +Also note, as described above, the master seed ``r`` for the refresh operation +is a **public** value and can be considered a commitment ("I'm going to sign +this value") made by the dirty coin. The actual *secrets* are the signatures +which are reveal in the second phase. + Note that for the Linking protocol, given the dirty coin's public key, the Exchange simply returns the master seed r and the dirty coins' signature σ_c over the original refresh request. The owner of the private key of the