\documentclass{llncs}
%\usepackage[margin=1in,a4paper]{geometry}
\usepackage[T1]{fontenc}
\usepackage{palatino}
\usepackage{xspace}
\usepackage{microtype}
\usepackage{tikz,eurosym}
\usepackage{amsmath,amssymb}
\usepackage{enumitem}
\usetikzlibrary{shapes,arrows}
\usetikzlibrary{positioning}
\usetikzlibrary{calc}

% Relate to:
% http://fc14.ifca.ai/papers/fc14_submission_124.pdf

% Terminology:
% - SEPA-transfer -- avoid 'SEPA transaction' as we use
%       'transaction' already when we talk about taxable
%        transfers of Taler coins and database 'transactions'.
% - wallet = coins at customer
% - reserve = currency entrusted to exchange waiting for withdrawal
% - deposit = SEPA to exchange
% - withdrawal = exchange to customer
% - spending = customer to merchant
% - redeeming = merchant to exchange (and then exchange SEPA to merchant)
% - refreshing = customer-exchange-customer
% - dirty coin = coin with exposed public key
% - fresh coin = coin that was refreshed or is new
% - coin signing key = exchange's online key used to (blindly) sign coin
% - message signing key = exchange's online key to sign exchange messages
% - exchange master key = exchange's key used to sign other exchange keys
% - owner = entity that knows coin private key
% - transaction = coin ownership transfer that should be taxed
% - sharing = coin copying that should not be taxed

\def\mathcomma{,}
\def\mathperiod{.}


\title{Offline Taler}

\begin{document}
\mainmatter

\author{Jeffrey Burdges}
\institute{Intria / GNUnet / Taler}


\maketitle

% \begin{abstract}
% \end{abstract}


% \section{Introduction}



% \section{Taler's refresh protocol}

\def\Nu{N}
\def\newmathrm#1{\expandafter\newcommand\csname #1\endcsname{\mathrm{#1}}}
\newmathrm{FDH}


We shall describe Taler's refresh protocol in this section.
All notation defined here persists throughout the remainder of
 the article.

We let $\kappa$ denote the exchange's taxation security parameter,
meaning the highest marginal tax rate is $1/\kappa$.  Also, let 
$n_\mu$ denote the maximum number of coins returned by a refresh.

\smallskip

Let $\iota$ denote a coin idetity parameter that
 links together the different commitments but must reemain secret
 from the exchange. 

Let $n_\nu$ denote the identity security parameter.
An online coin's identity commitment $\Nu$ is the empty string.
In the offline coin case, we begin with a reserve public key $R$
and a private identity commitment seed $\nu$.  
For $k \le n_\nu$,  we define 
\[ \begin{aligned}
\nu_{k,0} &= H(\nu || i) \mathcomma \\
\nu_{k,1} &= H(\nu || i) \oplus R \mathcomma \\
\Nu_k &= H(\nu_{k,0} || \nu_{k,1} || H(\iota || k) ) \mathperiod \\
\end{aligned} \]
% We define  $\Nu = H( \Nu_i \quad\textrm{for $k \le n_\nu$})$  finally.

\smallskip

A coin $(C,\Nu,S)$ consists of 
  a Ed25519 public key $C = c G$, 
  an optional set of offline identity commitments $\Nu = \{\Nu_k | k \in \Gamma \}$
  an RSA-FDH signature $S = S_d(\FDH(C) * \Pi_{k \in \Gamma} \FDH(\Nu_k))$ by a denomination key $d$.
A coin is spent by signing a contract with $C$.  The contract must
specify the recipient merchant and what portion of the value denoted
by the denomination $d$ they receive.

There was of course a blinding factor $b$ used in the creation of
the coin's signature $S$.  In addition, there was a private seed $s$
used to generate $c$ and $b$ but we need not retain $s$
outside the refresh protocol.
$$ c = H(\textrm{"Ed25519"} || s)
\qquad b = H(\textrm{"Blind"} || s) $$
We generate $\nu = H("Offline" || s)$ from $s$ as well,
 but only for offline coins.

\smallskip

We begin refresh with a possibly tainted coin $(C,S)$ whose value
we wish to save by refreshing it into untainted coins.  

In the change situation, our coin $(C,\Nu,S)$ was partially spent and 
retains only a part of the value determined by the denominaton $d$.

For $x$ amongst the symbols $c$, $C$, $b$, and $s$,
we let $x_{j,i}$ denote the value normally denoted $x$ of
 the $j$th cut of the $i$th new coin being created. 
% So $C_{j,i} = c_{j,i} G$, $\Nu_{j,i}$, $m_{j,i}$, and $b^{j,i}$
%  must be derived from $s^{j,i}$ as above.
We need only consider one such new coin at a time usually, 
so let $x'$ denote $x_{j,i}$ when $i$ and $j$ are clear from context.
In other words, $c'$, and $b_j$ are derived from $s_j$,
 and both $C' = c' G$.


\paragraph{Wallet phase 1.}
\begin{itemize}
\item  For $i = 1 \cdots n$, create random coin ids $\iota_i$.
\item  For $j = 1 \cdots \kappa$:
   \begin{itemize}
   \item  Create random $\zeta_j$ and $l_j$.
   \item  Also compute $L_j = l_j G$.
   \item  Set $k_j = H(l_j C || \eta_j)$.
   \end{itemize} 
\smallskip
\item  For $i = 1 \cdots n$:
   \begin{itemize}
   \item Create random pre-coin id $\iota'_i$.
   \item Set $\iota_i = H("Id" || \iota'_i)$.
   \item $j = 1 \cdots \kappa$:
      \begin{itemize}
      \item  Set $s' = H(\zeta_j || i)$.
      \item  Derive $c'$ and $b'$from $s'$ as above. 
      \item  Compute $C' = c' G$ too. 
      \item  Compute $B_{j,i} = B_{b'}(C' || H(\iota_i || H(s')))$. 
      \item  Encrypt $\Gamma'_{j,i} = E_{k_j}(s')$. 
      \item  Set the coin commitments $\Gamma_{j,i} = (\Gamma'_{j,i},B_{j,i})$.
      \end{itemize}
   \item  For $k = 1 \cdots 2 n_\nu$:
      \begin{itemize}
      \item  Set $\nu_k = H(\iota'_i || k)$.
      \item  Generate $\Nu_k$ from $\nu_k$ and $H(\iota_i || k)$.
      \item  Set the coin commitment $\Gamma_{\kappa+k,i} = B_{b'}(\Nu_{i,k})$.
      \end{itemize}
   \end{itemize} 
\smallskip
\item  Save $\zeta_*$ and $\iota'_*$.
\item  Send $(C,S)$ and the signed commitments
   $\Gamma_* = S_C( \Gamma_{j,i} \quad\textrm{for $j=1\cdots\kappa+2n_\nu, i=0 \cdots n$} )$.
\end{itemize}

\paragraph{Exchange phase 1.}
\begin{itemize}
\item  Verify the signature $S$ by $d$ on $C$.
\item  Verify the signatures by $C$ on the $\Gamma_{j,i}$ in $\Gamma_*$.
\item  Pick random $\gamma \in \{1 \cdots \kappa\}$.
\item  Pick random $\Gamma \subset \{1,\ldots,2 n_\nu\}$ with $|\Gamma| = n_\nu$.
\item  Mark $C$ as spent by saving $(C,\gamma,\Gamma,\Gamma_*)$.
\item  Send $(\gamma,\Gamma)$ as $S(C,\gamma)$.
\end{itemize}

\paragraph{Wallet phase 2.}
\begin{itemize}
\item  Save $S(C,\gamma,\Gamma)$.
\item  For $j = 1 \cdots \kappa$ except $\gamma$:
   \begin{itemize}
   \item  Send $S_C(l_j)$.
   \item  Send $S_C(H(\iota_i || H(s_{j,i})) \quad\textrm{for $i = 1 \cdots n$})$.   
   \end{itemize}
\item  For $i = 1 \cdots n$ and $k \not\in \Gamma$:
   \begin{itemize}
   \item  Send $S_C( \nu_{k,i}, H(\iota_i || k) )$.
   \end{itemize}
\end{itemize}

\paragraph{Exchange phase 2.}
\begin{itemize}
\item  Verify the signature by $C$.
\item  For $j = 1 \cdots \kappa$ except $\gamma$:
   \begin{itemize}
   \item  Set $k_j = H(l_j C)$.
   \item  For $i=1 \cdots n$:
      \begin{itemize}
      \item  Decrypt $s' = D_{k_j}(\Gamma'_{j,i})$.
      \item  Compute $c'$, $m'$, and $b'$ from $s_j$.
      \item  Compute $C' = c' G$ too.
      \item  Verify $B' = B_{b'}(C' || H(\iota_i || H(s_{j,i})))$.
      \end{itemize}
   \end{itemize}
\item  For $i=1 \cdots n$ and $k \not\in \Gamma$:
   \begin{itemize}
   \item  Generate $\Nu_k$ from $\nu_k$ and $H(\iota_i || k)$.
   \item  Verify the coin commitment $\Gamma_{\kappa+k,i} = B_{b'}(\Nu_{i,k})$.
   \end{itemize}
\item  If verifications all pass then send $S_{d_i}(B_\gamma * \Pi_{k \in \Gamma} B_k)$.
\end{itemize}


!!! PLEASE READ CHAUM BEFORE USING THIS !!!

There are several really deadly attacks that require careful defenses.
Also, one must find a proof of security that works for this product.
And Brands might do better anyways. 


\bibliographystyle{alpha}
\bibliography{taler,rfc}

% \newpage
% \appendix

% \section{}



\end{document}

