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