exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

offline.tex (7711B)


      1 \documentclass{llncs}
      2 %\usepackage[margin=1in,a4paper]{geometry}
      3 \usepackage[T1]{fontenc}
      4 \usepackage{palatino}
      5 \usepackage{xspace}
      6 \usepackage{microtype}
      7 \usepackage{tikz,eurosym}
      8 \usepackage{amsmath,amssymb}
      9 \usepackage{enumitem}
     10 \usetikzlibrary{shapes,arrows}
     11 \usetikzlibrary{positioning}
     12 \usetikzlibrary{calc}
     13 
     14 % Relate to:
     15 % http://fc14.ifca.ai/papers/fc14_submission_124.pdf
     16 
     17 % Terminology:
     18 % - SEPA-transfer -- avoid 'SEPA transaction' as we use
     19 %       'transaction' already when we talk about taxable
     20 %        transfers of Taler coins and database 'transactions'.
     21 % - wallet = coins at customer
     22 % - reserve = currency entrusted to exchange waiting for withdrawal
     23 % - deposit = SEPA to exchange
     24 % - withdrawal = exchange to customer
     25 % - spending = customer to merchant
     26 % - redeeming = merchant to exchange (and then exchange SEPA to merchant)
     27 % - refreshing = customer-exchange-customer
     28 % - dirty coin = coin with exposed public key
     29 % - fresh coin = coin that was refreshed or is new
     30 % - coin signing key = exchange's online key used to (blindly) sign coin
     31 % - message signing key = exchange's online key to sign exchange messages
     32 % - exchange master key = exchange's key used to sign other exchange keys
     33 % - owner = entity that knows coin private key
     34 % - transaction = coin ownership transfer that should be taxed
     35 % - sharing = coin copying that should not be taxed
     36 
     37 \def\mathcomma{,}
     38 \def\mathperiod{.}
     39 
     40 
     41 \title{Offline Taler}
     42 
     43 \begin{document}
     44 \mainmatter
     45 
     46 \author{Jeffrey Burdges}
     47 \institute{Intria / GNUnet / Taler}
     48 
     49 
     50 \maketitle
     51 
     52 % \begin{abstract}
     53 % \end{abstract}
     54 
     55 
     56 % \section{Introduction}
     57 
     58 
     59 
     60 % \section{Taler's refresh protocol}
     61 
     62 \def\Nu{N}
     63 \def\newmathrm#1{\expandafter\newcommand\csname #1\endcsname{\mathrm{#1}}}
     64 \newmathrm{FDH}
     65 
     66 
     67 We shall describe Taler's refresh protocol in this section.
     68 All notation defined here persists throughout the remainder of
     69  the article.
     70 
     71 We let $\kappa$ denote the exchange's taxation security parameter,
     72 meaning the highest marginal tax rate is $1/\kappa$.  Also, let 
     73 $n_\mu$ denote the maximum number of coins returned by a refresh.
     74 
     75 \smallskip
     76 
     77 Let $\iota$ denote a coin idetity parameter that
     78  links together the different commitments but must reemain secret
     79  from the exchange. 
     80 
     81 Let $n_\nu$ denote the identity security parameter.
     82 An online coin's identity commitment $\Nu$ is the empty string.
     83 In the offline coin case, we begin with a reserve public key $R$
     84 and a private identity commitment seed $\nu$.  
     85 For $k \le n_\nu$,  we define 
     86 \[ \begin{aligned}
     87 \nu_{k,0} &= H(\nu || i) \mathcomma \\
     88 \nu_{k,1} &= H(\nu || i) \oplus R \mathcomma \\
     89 \Nu_k &= H(\nu_{k,0} || \nu_{k,1} || H(\iota || k) ) \mathperiod \\
     90 \end{aligned} \]
     91 % We define  $\Nu = H( \Nu_i \quad\textrm{for $k \le n_\nu$})$  finally.
     92 
     93 \smallskip
     94 
     95 A coin $(C,\Nu,S)$ consists of 
     96   a Ed25519 public key $C = c G$, 
     97   an optional set of offline identity commitments $\Nu = \{\Nu_k | k \in \Gamma \}$
     98   an RSA-FDH signature $S = S_d(\FDH(C) * \Pi_{k \in \Gamma} \FDH(\Nu_k))$ by a denomination key $d$.
     99 A coin is spent by signing a contract with $C$.  The contract must
    100 specify the recipient merchant and what portion of the value denoted
    101 by the denomination $d$ they receive.
    102 
    103 There was of course a blinding factor $b$ used in the creation of
    104 the coin's signature $S$.  In addition, there was a private seed $s$
    105 used to generate $c$ and $b$ but we need not retain $s$
    106 outside the refresh protocol.
    107 $$ c = H(\textrm{"Ed25519"} || s)
    108 \qquad b = H(\textrm{"Blind"} || s) $$
    109 We generate $\nu = H("Offline" || s)$ from $s$ as well,
    110  but only for offline coins.
    111 
    112 \smallskip
    113 
    114 We begin refresh with a possibly tainted coin $(C,S)$ whose value
    115 we wish to save by refreshing it into untainted coins.  
    116 
    117 In the change situation, our coin $(C,\Nu,S)$ was partially spent and 
    118 retains only a part of the value determined by the denominaton $d$.
    119 
    120 For $x$ amongst the symbols $c$, $C$, $b$, and $s$,
    121 we let $x_{j,i}$ denote the value normally denoted $x$ of
    122  the $j$th cut of the $i$th new coin being created. 
    123 % So $C_{j,i} = c_{j,i} G$, $\Nu_{j,i}$, $m_{j,i}$, and $b^{j,i}$
    124 %  must be derived from $s^{j,i}$ as above.
    125 We need only consider one such new coin at a time usually, 
    126 so let $x'$ denote $x_{j,i}$ when $i$ and $j$ are clear from context.
    127 In other words, $c'$, and $b_j$ are derived from $s_j$,
    128  and both $C' = c' G$.
    129 
    130 
    131 \paragraph{Wallet phase 1.}
    132 \begin{itemize}
    133 \item  For $i = 1 \cdots n$, create random coin ids $\iota_i$.
    134 \item  For $j = 1 \cdots \kappa$:
    135    \begin{itemize}
    136    \item  Create random $\zeta_j$ and $l_j$.
    137    \item  Also compute $L_j = l_j G$.
    138    \item  Set $k_j = H(l_j C || \eta_j)$.
    139    \end{itemize} 
    140 \smallskip
    141 \item  For $i = 1 \cdots n$:
    142    \begin{itemize}
    143    \item Create random pre-coin id $\iota'_i$.
    144    \item Set $\iota_i = H("Id" || \iota'_i)$.
    145    \item $j = 1 \cdots \kappa$:
    146       \begin{itemize}
    147       \item  Set $s' = H(\zeta_j || i)$.
    148       \item  Derive $c'$ and $b'$from $s'$ as above. 
    149       \item  Compute $C' = c' G$ too. 
    150       \item  Compute $B_{j,i} = B_{b'}(C' || H(\iota_i || H(s')))$. 
    151       \item  Encrypt $\Gamma'_{j,i} = E_{k_j}(s')$. 
    152       \item  Set the coin commitments $\Gamma_{j,i} = (\Gamma'_{j,i},B_{j,i})$.
    153       \end{itemize}
    154    \item  For $k = 1 \cdots 2 n_\nu$:
    155       \begin{itemize}
    156       \item  Set $\nu_k = H(\iota'_i || k)$.
    157       \item  Generate $\Nu_k$ from $\nu_k$ and $H(\iota_i || k)$.
    158       \item  Set the coin commitment $\Gamma_{\kappa+k,i} = B_{b'}(\Nu_{i,k})$.
    159       \end{itemize}
    160    \end{itemize} 
    161 \smallskip
    162 \item  Save $\zeta_*$ and $\iota'_*$.
    163 \item  Send $(C,S)$ and the signed commitments
    164    $\Gamma_* = S_C( \Gamma_{j,i} \quad\textrm{for $j=1\cdots\kappa+2n_\nu, i=0 \cdots n$} )$.
    165 \end{itemize}
    166 
    167 \paragraph{Exchange phase 1.}
    168 \begin{itemize}
    169 \item  Verify the signature $S$ by $d$ on $C$.
    170 \item  Verify the signatures by $C$ on the $\Gamma_{j,i}$ in $\Gamma_*$.
    171 \item  Pick random $\gamma \in \{1 \cdots \kappa\}$.
    172 \item  Pick random $\Gamma \subset \{1,\ldots,2 n_\nu\}$ with $|\Gamma| = n_\nu$.
    173 \item  Mark $C$ as spent by saving $(C,\gamma,\Gamma,\Gamma_*)$.
    174 \item  Send $(\gamma,\Gamma)$ as $S(C,\gamma)$.
    175 \end{itemize}
    176 
    177 \paragraph{Wallet phase 2.}
    178 \begin{itemize}
    179 \item  Save $S(C,\gamma,\Gamma)$.
    180 \item  For $j = 1 \cdots \kappa$ except $\gamma$:
    181    \begin{itemize}
    182    \item  Send $S_C(l_j)$.
    183    \item  Send $S_C(H(\iota_i || H(s_{j,i})) \quad\textrm{for $i = 1 \cdots n$})$.   
    184    \end{itemize}
    185 \item  For $i = 1 \cdots n$ and $k \not\in \Gamma$:
    186    \begin{itemize}
    187    \item  Send $S_C( \nu_{k,i}, H(\iota_i || k) )$.
    188    \end{itemize}
    189 \end{itemize}
    190 
    191 \paragraph{Exchange phase 2.}
    192 \begin{itemize}
    193 \item  Verify the signature by $C$.
    194 \item  For $j = 1 \cdots \kappa$ except $\gamma$:
    195    \begin{itemize}
    196    \item  Set $k_j = H(l_j C)$.
    197    \item  For $i=1 \cdots n$:
    198       \begin{itemize}
    199       \item  Decrypt $s' = D_{k_j}(\Gamma'_{j,i})$.
    200       \item  Compute $c'$, $m'$, and $b'$ from $s_j$.
    201       \item  Compute $C' = c' G$ too.
    202       \item  Verify $B' = B_{b'}(C' || H(\iota_i || H(s_{j,i})))$.
    203       \end{itemize}
    204    \end{itemize}
    205 \item  For $i=1 \cdots n$ and $k \not\in \Gamma$:
    206    \begin{itemize}
    207    \item  Generate $\Nu_k$ from $\nu_k$ and $H(\iota_i || k)$.
    208    \item  Verify the coin commitment $\Gamma_{\kappa+k,i} = B_{b'}(\Nu_{i,k})$.
    209    \end{itemize}
    210 \item  If verifications all pass then send $S_{d_i}(B_\gamma * \Pi_{k \in \Gamma} B_k)$.
    211 \end{itemize}
    212 
    213 
    214 !!! PLEASE READ CHAUM BEFORE USING THIS !!!
    215 
    216 There are several really deadly attacks that require careful defenses.
    217 Also, one must find a proof of security that works for this product.
    218 And Brands might do better anyways. 
    219 
    220 
    221 \bibliographystyle{alpha}
    222 \bibliography{taler,rfc}
    223 
    224 % \newpage
    225 % \appendix
    226 
    227 % \section{}
    228 
    229 
    230 
    231 \end{document}
    232