taler-docs

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

commit a31417799c6298f9f029ab9c50dec6629b307831
parent 9ce747711893464ed0588ddd930402fe746955bc
Author: Özgür Kesim <oec@kesim.org>
Date:   Sun, 13 Apr 2025 19:34:50 +0200

[dd:pq-refresh] added table layout for refresh

Diffstat:
Mdesign-documents/062-pq-refresh.rst | 46+++++++++++++++++++++++++++++++++++++---------
1 file changed, 37 insertions(+), 9 deletions(-)

diff --git a/design-documents/062-pq-refresh.rst b/design-documents/062-pq-refresh.rst @@ -5,30 +5,37 @@ Summary ======= This document specifies a change to GNU Taler's refresh protocol that provides post-quantum resistance through hash-based cryptography and deterministic -signatures, eliminating reliance on Diffie-Hellman operations. +signatures, eliminating reliance on Diffie-Hellman operations, for the key +derivation for the fresh coin from a dirty coin. Motivation ========== + The current refresh protocol uses cryptographic primitives vulnerable to -quantum attacks. This redesign: +quantum attacks to derive the key material for a fresh coin from the key of the +dirty coin. The rational for the elaborate derivation in first place is to +ensure taxability: When original and new coins remain linked (by the owner of +the original coin), passing coin outside the Taler protocols is discouraged. + +This redesign: 1. Removes DH operations from refresh derivation -2. Uses hash-based commitments for coin lineage -3. Implements deterministic signatures for ownership proofs -4. Maintains backward compatibility through extension flags +2. Uses deterministic signatures for ownership proofs +3. Derives key material from (unforgeable) signatures +4. Maintains backward compatibility with other parts of the protocol stack Requirements ============ * PQ-resistant refresh without computational hardness assumptions -* Preservation of unlinkability between old/new coins +* Preservation of unlinkability between old/new coins (except for coin owner) * Compatibility with existing denomination types * Minimal bandwidth/storage overhead Proposed Solution ================= -RefreshDerivePQ Algorithm +RefreshDerive Algorithm ^^^^^^^^^^^^^^^^^^^^^^^^^ The core mechanism uses two hash functions and deterministic signatures to @@ -86,7 +93,7 @@ published. - Exchange returns σ_γ on success. It is worth noting that, in contrast to the existing refresh protocol, the -client sents all κ tuples of m_i already in the commitment phase. This is +client sends all κ tuples of m_i already in the commitment phase. This is 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. @@ -101,7 +108,28 @@ seed was of its own origin. Database Changes ^^^^^^^^^^^^^^^^ -TODO, see withdraw +Not taking sharding and coinstraints into account, the table layout will look +basically like this: + +.. table:: SQL table layout for refresh + :align: left + + ============== ============ ================================================ + Field Type Description + ============== ============ ================================================ + refresh_id BIGINT autoincremented identity of the record + h_commitment BYTEA the value h_m above, serving as primary key + timestamp INT8 execution date of the refresh + amount taler_amount amount with fee of the refresh + old_coin_pub BYTEA the old coin's public key + old_coin_sig BYTEA old coin's signature over the refresh request + noreveal_index SMALLINT the γ for cut-and-choose, chosen by the exchange + h_blind_evs BYTEA[] the blinded coin evelopes, i.e. (many) m_γ above + r_nonce BYTEA the master seed for the refresh, the r above + denom_serials INT8[] the row ID's of the denominations in the DB + denom_sigs BYTEA[] the denom signatures for each h_blind_evs + ============== ============ ================================================ + API endpoints ^^^^^^^^^^^^^^