taler-docs

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

commit cbf8b5443fffeda2408648d3c2ea9e8450a061f7
parent d162c094fd0c907916c20e43da873a340be63f25
Author: Özgür Kesim <oec-taler@kesim.org>
Date:   Wed, 21 Dec 2022 17:08:24 +0100

mentioning of KYC and batch-withdraw

Diffstat:
Mdesign-documents/024-age-restriction.rst | 44++++++++++++++++++++++----------------------
1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/design-documents/024-age-restriction.rst b/design-documents/024-age-restriction.rst @@ -301,9 +301,10 @@ The withdraw protocol is affected in the following situations: - A wire transfer to the exchange (to fill a reserve) was marked by the originating bank as coming from a bank account of a minor, belonging to a of - a specific age group. -- A wire transfer to the exchange was marked to be age-restricted by other - means (not yet designed or implemented) + a specific age group, or by other means. +- A Peer-to-Peer transaction was performed between customers. The receiving + customer's KYC result tells the exchange that the customer belongs to a + specific age group. In these cases, the wallet will have to perform a zero-knowledge protocol with exchange as part of the the withdraw protocol, which we sketch here. Let @@ -314,13 +315,12 @@ exchange as part of the the withdraw protocol, which we sketch here. Let - :math:`a \in \{1,\ldots,M\}` be the maximum age (group) for which the wallet has to prove its commitment. -The values :math:`\kappa`, :math:`\Omega` and :math:`a` are known to the Exchange and the Wallet. +The values :math:`\kappa`, :math:`\Omega` and :math:`a` are known to the +Exchange and the Wallet. Then, Wallet and Exchange run the following protocol +for the withdrawal of one coin: -Then: - -#. *Wallet*: - - #. creates planchets :math:`C_i` for :math:`i \in \{1,\ldots,\kappa\}` as candidates for *one* coin. +- *Wallet* + 1. creates planchets :math:`C_i` for :math:`i \in \{1,\ldots,\kappa\}` as candidates for *one* coin. #. creates age-commitments :math:`\vec{Q}^i` for :math:`i \in \{1,\ldots,\kappa\}` as follows: a) creates :math:`a`-many Edx25519-keypairs :math:`(p^i_j, q^i_j)` @@ -334,15 +334,13 @@ Then: #. calculates :math:`F := \text{H}(\beta_1(f_1)||\ldots||\beta_\kappa(f_\kappa))` #. sends :math:`F` to the Exchange -#. *Exchange* - - #. receives and stores :math:`F` +- *Exchange* + 7. receives and stores :math:`F` #. chooses randomly :math:`\gamma \in \{1,\ldots,\kappa\}` and #. sends :math:`\gamma` to the Wallet. -#. *Wallet* - - #. receives :math:`\gamma` +- *Wallet* + 10. receives :math:`\gamma` #. sends to the Exchange the tuple :math:`\left(r_\gamma, \vec{\beta}, \vec{\vec{Q}}, \vec{\vec{S}}\right)` with - :math:`r_\gamma := \beta_\gamma(f_\gamma)` @@ -351,9 +349,8 @@ Then: - :math:`\vec{\vec{S}} := (\vec{S}^1,\ldots,\vec{S}^{\gamma-1},\bot,\vec{S}^{\gamma+1},\ldots,\vec{S}^\kappa)` with :math:`\vec{S}^i := (s^i_j)` -#. *Exchange*: - - #. receives :math:`\left(r, (\beta^i), (\vec{Q}^i), (\vec{B}^i) \right)` +- *Exchange* + 12. receives :math:`\left(r, (\beta^i), (\vec{Q}^i), (\vec{B}^i) \right)` #. calculates :math:`g_i := \beta_i\left(\text{FDH}(\vec{Q}^i)\right)` for :math:`i \neq \gamma` #. compares :math:`F \overset{?}{=} \text{H}(g_1||\ldots||g_{\gamma - 1}||r||g_{\gamma+1}||\ldots||g_\kappa)` and bails out on inequality #. for each :math:`\vec{B}^i, i \neq \gamma` @@ -363,13 +360,16 @@ Then: #. signs :math:`r` #. sends (blinded) signature :math:`\sigma_r` to Wallet -#. *Wallet*: - - #. receives :math:`\sigma_r` +- *Wallet* + 18. receives :math:`\sigma_r` #. calculates (unblinded) signature :math:`\sigma_\gamma := \beta^{-1}_\gamma(\sigma_r)` for coin :math:`C_\gamma`. - +Note that the batch version of withdraw allows the withdrawal of *multiple* +coins at once. For that scenario the protocol sketched above is adapted to +accomodate for handling multiple coins at once -- thus multiplying the amount +of data by the amount of coins in question--, but all with the same value of +:math:`\gamma`. Refresh - melting phase