marketing

Marketing materials (presentations, posters, flyers)
Log | Files | Refs

2022-fed.tex (75848B)


      1 \pdfminorversion=3
      2 \documentclass[fleqn,xcolor={usenames,dvipsnames}]{beamer}
      3 \usepackage{amsmath}
      4 \usepackage{multimedia}
      5 \usepackage[utf8]{inputenc}
      6 \usepackage{framed,color,ragged2e}
      7 \usepackage[absolute,overlay]{textpos}
      8 \definecolor{shadecolor}{rgb}{0.8,0.8,0.8}
      9 \usetheme{boxes}
     10 \setbeamertemplate{navigation symbols}{}
     11 \usepackage{xcolor}
     12 \usepackage{tikz,eurosym}
     13 \usepackage[normalem]{ulem}
     14 \usepackage{listings}
     15 \usepackage{adjustbox}
     16 
     17 % CSS
     18 \lstdefinelanguage{CSS}{
     19   basicstyle=\ttfamily\scriptsize,
     20   keywords={color,background-image:,margin,padding,font,weight,display,position,top,left,right,bottom,list,style,border,size,white,space,min,width, transition:, transform:, transition-property, transition-duration, transition-timing-function},
     21   sensitive=true,
     22   morecomment=[l]{//},
     23   morecomment=[s]{/*}{*/},
     24   morestring=[b]',
     25   morestring=[b]",
     26   alsoletter={:},
     27   alsodigit={-}
     28 }
     29 
     30 % JavaScript
     31 \lstdefinelanguage{JavaScript}{
     32   basicstyle=\ttfamily\scriptsize,
     33   morekeywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break},
     34   morecomment=[s]{/*}{*/},
     35   morecomment=[l]//,
     36   morestring=[b]",
     37   morestring=[b]'
     38 }
     39 
     40 \lstdefinelanguage{HTML5}{
     41   basicstyle=\ttfamily\scriptsize,
     42   language=html,
     43   sensitive=true,
     44   alsoletter={<>=-},
     45   morecomment=[s]{<!-}{-->},
     46   tag=[s],
     47   otherkeywords={
     48   % General
     49   >,
     50   % Standard tags
     51 	<!DOCTYPE,
     52   </html, <html, <head, <title, </title, <style, </style, <link, </head, <meta, />,
     53 	% body
     54 	</body, <body,
     55 	% Divs
     56 	</div, <div, </div>,
     57 	% Paragraphs
     58 	</p, <p, </p>,
     59 	% scripts
     60 	</script, <script,
     61   % More tags...
     62   <canvas, /canvas>, <svg, <rect, <animateTransform, </rect>, </svg>, <video, <source, <iframe, </iframe>, </video>, <image, </image>
     63   },
     64   ndkeywords={
     65   % General
     66   =,
     67   % HTML attributes
     68   charset=, src=, id=, width=, height=, style=, type=, rel=, href=,
     69   % SVG attributes
     70   fill=, attributeName=, begin=, dur=, from=, to=, poster=, controls=, x=, y=, repeatCount=, xlink:href=,
     71   % CSS properties
     72   margin:, padding:, background-image:, border:, top:, left:, position:, width:, height:,
     73 	% CSS3 properties
     74   transform:, -moz-transform:, -webkit-transform:,
     75   animation:, -webkit-animation:,
     76   transition:,  transition-duration:, transition-property:, transition-timing-function:,
     77   }
     78 }
     79 
     80 \lstdefinelanguage{JavaScript}{
     81   basicstyle=\ttfamily\scriptsize,
     82   keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, for},
     83   keywordstyle=\color{blue}\bfseries,
     84   ndkeywords={class, export, boolean, throw, implements, import, this},
     85   ndkeywordstyle=\color{darkgray}\bfseries,
     86   identifierstyle=\color{black},
     87   sensitive=false,
     88   comment=[l]{//},
     89   morecomment=[s]{/*}{*/},
     90   commentstyle=\color{purple}\ttfamily,
     91   stringstyle=\color{red}\ttfamily,
     92   morestring=[b]',
     93   morestring=[b]"
     94 }
     95 
     96 \usetikzlibrary{shapes,arrows}
     97 \usetikzlibrary{positioning}
     98 \usetikzlibrary{calc}
     99 
    100 \title{GNU Taler}
    101 %\subtitle{}
    102 
    103 \setbeamertemplate{navigation symbols}{\includegraphics[width=1cm]{inria.pdf} \includegraphics[width=0.5cm]{gnu.png} \includegraphics[width=0.5cm]{ashoka.png}\hfill}
    104 %\setbeamercovered{transparent=1}
    105 
    106 \author[C. Grothoff]{L. Schumacher, F. Dold, {\bf C. Grothoff}, M. Stanisci}
    107 \date{\today}
    108 \institute{The GNU Project}
    109 
    110 
    111 \begin{document}
    112 
    113 \justifying
    114 
    115 \begin{frame}
    116   \begin{center}
    117     \LARGE {\bf GNU}
    118 
    119     \vfill
    120 %    \includegraphics[width=0.66\textwidth]{logo-2017-fr.pdf}
    121     \includegraphics[width=0.66\textwidth]{logo-2020.jpg}
    122   \end{center}
    123 \begin{textblock*}{6cm}(.5cm,7.7cm) % {block width} (coords)
    124     {\Large {\bf \href{https://taler.net/}{taler.net}} \\
    125     \href{https://twitter.com/taler}{taler@twitter} \\
    126     \href{https://taler-systems.com/}{taler-systems.com}}
    127 \end{textblock*}
    128 
    129 % Substitute based on who is giving the talk!
    130  \begin{textblock*}{6cm}(6.7cm,7.7cm) % {block width} (coords)
    131    {\hfill {\Large {\bf Leon Schumacher \&} \\
    132     \hfill {\bf Christian Grothoff}} \\
    133     \hfill \{schumacher,grothoff\}@taler.net }
    134 \end{textblock*}
    135 
    136 \end{frame}
    137 
    138 
    139 \section{What is Taler?}
    140 \begin{frame}{What is Taler?}
    141   \begin{center}
    142 Taler is an electronic instant payment system.
    143   \end{center}
    144   \begin{itemize}
    145   \item Uses electronic coins stored in {\bf wallets} on customer's device
    146   \item Like {\bf cash}
    147   \item Pay in {\bf existing currencies} (i.e. EUR, USD, BTC), \\
    148     or use it to create new {\bf regional currencies}
    149   \end{itemize}
    150   \vfill
    151   \pause
    152  \noindent
    153  However, Taler is
    154   \begin{itemize}
    155     \item \emph{not} a currency
    156     \item \emph{not} a long-term store of value
    157     \item \emph{not} a network or instance of a system
    158     \item \emph{not} decentralized
    159     \item \emph{not} based on proof-of-work or proof-of-stake
    160     \item \emph{not} a speculative asset / ``get-rich-quick scheme''
    161   \end{itemize}
    162 \end{frame}
    163 
    164 
    165 \begin{frame}{Design principles}
    166   \framesubtitle{https://taler.net/en/principles.html}
    167 GNU Taler must ...
    168 \begin{enumerate}
    169   \item {... be implemented as {\bf free software}.}
    170   \item {... protect the {\bf privacy of buyers}.}
    171   \item {... must enable the state to {\bf tax income} and crack down on
    172     illegal business activities.}
    173   \item {... prevent payment fraud.}
    174   \item {... only {\bf disclose the minimal amount of information
    175     necessary}.}
    176   \item {... be usable.}
    177   \item {... be efficient.}
    178   \item {... avoid single points of failure.}
    179   \item {... foster {\bf competition}.}
    180 \end{enumerate}
    181 \end{frame}
    182 
    183 
    184 \begin{frame}
    185 \frametitle{Taler Overview}
    186 \begin{center}
    187 \begin{tikzpicture}
    188  \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em];
    189  \node (origin) at (0,0) {};
    190  \node (exchange) [def,above=of origin,draw]{Exchange};
    191  \node (customer) [def, draw, below left=of origin] {Customer};
    192  \node (merchant) [def, draw, below right=of origin] {Merchant};
    193  \node (auditor) [def, draw, above right=of origin]{Auditor};
    194 % \node (regulator) [def, draw, above=of auditor]{CSSF};
    195 
    196  \tikzstyle{C} = [color=black, line width=1pt]
    197 
    198  \draw [<-, C] (customer) -- (exchange) node [midway, above, sloped] (TextNode) {withdraw coins};
    199  \draw [<-, C] (exchange) -- (merchant) node [midway, above, sloped] (TextNode) {deposit coins};
    200  \draw [<-, C] (merchant) -- (customer) node [midway, above, sloped] (TextNode) {spend coins};
    201  \draw [<-, C] (exchange) -- (auditor) node [midway, above, sloped] (TextNode) {verify};
    202 % \draw [<-, C] (regulator) -- (auditor) node [midway, above, sloped] (TextNode) {report};
    203 
    204 \end{tikzpicture}
    205 \end{center}
    206 \end{frame}
    207 
    208 \begin{frame}{The Taler Software Ecosystem}
    209   \framesubtitle{\url{https://taler.net/en/docs.html}}
    210   Taler is based on modular components that work together to provide a
    211   complete payment system:
    212   \vfill
    213   \begin{itemize}
    214     \item {\bf Exchange:} Service provider for digital cash
    215       \begin{itemize}
    216         \item Core exchange software (cryptography, database)
    217         \item Air-gapped key management, real-time {\bf auditing}
    218         \item LibEuFin: Modular integration with banking systems
    219       \end{itemize}
    220     \item {\bf Merchant:} Integration service for existing businesses
    221       \begin{itemize}
    222         \item Core merchant backend software (cryptography, database)
    223         \item Back-office interface for staff
    224         \item Frontend integration (E-commerce, Point-of-sale)
    225       \end{itemize}
    226     \item {\bf Wallet:} Consumer-controlled applications for e-cash
    227       \begin{itemize}
    228         \item Multi-platform wallet software (for browsers \& mobile phones)
    229         \item Wallet backup storage providers
    230         \item {\bf Anastasis}: Recovery of lost wallets based on secret splitting
    231       \end{itemize}
    232   \end{itemize}
    233 \end{frame}
    234 
    235 
    236 \begin{frame}
    237 \frametitle{Architecture of Taler}
    238 \begin{center}
    239   \includegraphics[width=1\textwidth]{operations.png}
    240 \end{center}
    241 \end{frame}
    242 
    243 
    244 \begin{frame}{Taler: Unique Regulatory Features for Central Banks}
    245   \framesubtitle{\url{https://www.snb.ch/en/mmr/papers/id/working_paper_2021_03}}
    246   \begin{itemize}
    247     \item Central bank issues digital coins equivalent to issuing cash \\
    248           $\Rightarrow$ monetary policy remains under CB control
    249     \item Architecture with consumer accounts at commercial banks \\
    250           $\Rightarrow$ no competition for commercial banking (S\&L) \\
    251           $\Rightarrow$ CB does not have to manage KYC, customer support
    252     \item Withdrawal limits and denomination expiration \\
    253           $\Rightarrow$ protects against bank runs and hoarding
    254     \item Income transparency and possibility to set fees \\
    255           $\Rightarrow$ additional insights into economy and new policy options
    256     \item Revocation protocols and loss limitations \\
    257           $\Rightarrow$ exit strategy and handles catastrophic security incidents
    258     \item Privacy by cryptographic design not organizational compliance \\
    259           $\Rightarrow$ CB cannot be forced to facilitate mass-surveillance
    260   \end{itemize}
    261 \end{frame}
    262 
    263 
    264 \begin{frame}{Usability of Taler}
    265   \vfill
    266   \begin{center}
    267     \url{https://demo.taler.net/}
    268   \end{center}
    269   \begin{enumerate}
    270   \item Install browser extension.
    271   \item Visit the {\tt bank.demo.taler.net} to withdraw coins.
    272   \item Visit the {\tt shop.demo.taler.net} to spend coins.
    273   \end{enumerate}
    274   \vfill
    275 \end{frame}
    276 
    277 
    278 \begin{frame}{How does it work?}
    279 We use a few ancient constructions:
    280   \begin{itemize}
    281   \item Cryptographic hash function (1989)
    282   \item Blind signature (1983)
    283   \item Schnorr signature (1989)
    284   \item Diffie-Hellman key exchange (1976)
    285   \item Cut-and-choose zero-knowledge proof (1985)
    286   \end{itemize}
    287 But of course we use modern instantiations.
    288 \end{frame}
    289 
    290 
    291 \begin{frame}{Definition: Taxability}
    292   We say Taler is taxable because:
    293   \begin{itemize}
    294   \item Merchant's income is visible from deposits.
    295   \item Hash of contract is part of deposit data.
    296   \item State can trace income and enforce taxation.
    297   \end{itemize}\pause
    298   Limitations:
    299   \begin{itemize}
    300   \item withdraw loophole
    301   \item {\em sharing} coins among family and friends
    302   \end{itemize}
    303 \end{frame}
    304 
    305 
    306 \begin{frame}{Exchange setup: Create a denomination key (RSA)}
    307    \begin{minipage}{6cm}
    308     \begin{enumerate}
    309     \item Pick random primes $p,q$.
    310     \item Compute $n := pq$, $\phi(n) = (p-1)(q-1)$
    311     \item Pick small $e < \phi(n)$ such that
    312           $d := e^{-1} \mod \phi(n)$ exists.
    313     \item Publish public key $(e,n)$.
    314     \end{enumerate}
    315   \end{minipage}
    316   \begin{minipage}{6cm}
    317   \begin{tikzpicture}
    318  \tikzstyle{def} = [node distance=1em and 1em, inner sep=0em, outer sep=.3em];
    319     \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}};
    320     \node (primes) [draw=none, below = of origin] at (0,0) {$(p, q)$};
    321     \node (seal) [def, draw=none, below left=of primes]{\includegraphics[width=0.15\textwidth]{seal.pdf}};
    322     \node (hammer) [def, draw=none, below right=of primes]{\includegraphics[width=0.15\textwidth]{hammer.pdf}};
    323 
    324     \tikzstyle{C} = [color=black, line width=1pt]
    325 
    326     \draw [<-, C] (primes) -- (origin) node [midway, above, sloped] (TextNode) {};
    327     \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {};
    328     \draw [<-, C] (hammer) -- (primes) node [midway, above, sloped] (TextNode) {};
    329   \end{tikzpicture}
    330 %  \includegraphics[width=0.4\textwidth]{seal.pdf}
    331   \end{minipage}
    332 \end{frame}
    333 
    334 
    335 \begin{frame}{Merchant: Create a signing key (EdDSA)}
    336   \begin{minipage}{6cm}
    337     \begin{itemize}
    338   \item pick random $m \mod o$ as private key
    339   \item $M = mG$ public key
    340   \end{itemize}
    341   \end{minipage}
    342   \begin{minipage}{6cm}
    343   \begin{tikzpicture}
    344    \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em];
    345     \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}};
    346     \node (m) [draw=none, below = of origin] at (0,0) {$m$};
    347     \node (seal) [draw=none, below=of m]{M};
    348    \tikzstyle{C} = [color=black, line width=1pt]
    349 
    350     \draw [<-, C] (m) -- (origin) node [midway, above, sloped] (TextNode) {};
    351     \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {};
    352   \end{tikzpicture}
    353   \end{minipage}
    354   \parbox[t]{3cm}{{\bf Capability:} $m \Rightarrow$ }
    355   \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{merchant-sign.pdf}}
    356 \end{frame}
    357 
    358 
    359 \begin{frame}{Customer: Create a planchet (EdDSA)}
    360   \begin{minipage}{8cm}
    361   \begin{itemize}
    362   \item Pick random $c \mod o$ private key
    363   \item $C = cG$ public key
    364   \end{itemize}
    365   \end{minipage}
    366   \begin{minipage}{4cm}
    367   \begin{tikzpicture}
    368    \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em];
    369     \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}};
    370     \node (c) [draw=none, below = of origin] at (0,0) {$c$};
    371     \node (planchet) [draw=none, below=of c]{\includegraphics[width=0.4\textwidth]{planchet.pdf}};
    372     \tikzstyle{C} = [color=black, line width=1pt]
    373 
    374     \draw [<-, C] (c) -- (origin) node [midway, above, sloped] (TextNode) {};
    375     \draw [<-, C] (planchet) -- (c) node [midway, above, sloped] (TextNode) {};
    376   \end{tikzpicture}
    377   \end{minipage}
    378   \parbox[t]{3cm}{{\bf Capability:} $c \Rightarrow$ }
    379   \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{planchet-sign.pdf}}
    380 \end{frame}
    381 
    382 
    383 \begin{frame}{Customer: Blind planchet (RSA)}
    384   \begin{minipage}{6cm}
    385     \begin{enumerate}
    386     \item Obtain public key $(e,n)$
    387     \item Compute $f := FDH(C)$, $f < n$.
    388     \item Pick blinding factor $b \in \mathbb Z_n$
    389     \item Transmit $f' := f b^e \mod n$
    390     \end{enumerate}
    391   \end{minipage}
    392   \begin{minipage}{6cm}
    393   \begin{tikzpicture}
    394    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
    395     \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}};
    396     \node (b) [def, draw=none, below = of origin] at (0,-0.2) {$b$};
    397     \node (blinded) [def, draw=none, below right=of b]{\includegraphics[width=0.2\textwidth]{blinded.pdf}};
    398     \node (planchet) [def, draw=none, above right=of blinded]{\includegraphics[width=0.15\textwidth]{planchet.pdf}};
    399     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
    400     \tikzstyle{C} = [color=black, line width=1pt]
    401 
    402     \draw [<-, C] (b) -- (origin) node [midway, above, sloped] (TextNode) {};
    403     \draw [<-, C] (blinded) -- (planchet) node [midway, above, sloped] (TextNode) {};
    404     \draw [<-, C] (blinded) -- (b) node [midway, above, sloped] (TextNode) {};
    405     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
    406   \end{tikzpicture}
    407   \end{minipage}
    408 \end{frame}
    409 
    410 
    411 \begin{frame}{Exchange: Blind sign (RSA)}
    412    \begin{minipage}{6cm}
    413     \begin{enumerate}
    414     \item Receive $f'$.
    415     \item Compute $s' := f'^d \mod n$.
    416     \item Send signature $s'$.
    417     \end{enumerate}
    418    \end{minipage}
    419   \begin{minipage}{6cm}
    420   \begin{tikzpicture}
    421    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
    422     \node (hammer) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{hammer.pdf}};
    423     \node (signed) [def, draw=none, below left=of hammer]{\includegraphics[width=0.2\textwidth]{sign.pdf}};
    424     \node (blinded) [def, draw=none, above left=of signed]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
    425     \node (customer) [node distance=4em and 0.5em, draw, below =of signed]{Customer};
    426     \tikzstyle{C} = [color=black, line width=1pt]
    427 
    428     \draw [<-, C] (signed) -- (hammer) node [midway, above, sloped] (TextNode) {};
    429     \draw [<-, C] (signed) -- (blinded) node [midway, above, sloped] (TextNode) {};
    430     \draw [<-, C] (customer) -- (signed) node [midway, above, sloped] (TextNode) {{\small transmit}};
    431   \end{tikzpicture}
    432   \end{minipage}
    433 \end{frame}
    434 
    435 
    436 \begin{frame}{Customer: Unblind coin (RSA)}
    437   \begin{minipage}{6cm}
    438    \begin{enumerate}
    439     \item Receive $s'$.
    440     \item Compute $s := s' b^{-1} \mod n$ % \\
    441     % ($(f')^d = (f b^e)^d = f^d b$).
    442     \end{enumerate}
    443    \end{minipage}
    444   \begin{minipage}{6cm}
    445   \begin{tikzpicture}
    446    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
    447     \node (b) [def, draw=none] at (0,0) {$b$};
    448     \node (coin) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{coin.pdf}};
    449     \node (signed) [def, draw=none, above left=of coin]{\includegraphics[width=0.15\textwidth]{sign.pdf}};
    450     \tikzstyle{C} = [color=black, line width=1pt]
    451 
    452     \draw [<-, C] (coin) -- (b) node [midway, above, sloped] (TextNode) {};
    453     \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {};
    454   \end{tikzpicture}
    455   \end{minipage}
    456 \end{frame}
    457 
    458 \begin{frame}{Withdrawing coins on the Web}
    459   \begin{center}
    460     \includegraphics[height=0.9\textheight]{figs/taler-withdraw.pdf}
    461   \end{center}
    462 \end{frame}
    463 
    464 
    465 \begin{frame}{Customer: Build shopping cart}
    466   \begin{center}
    467   \begin{tikzpicture}
    468    \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em];
    469     \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{shop.pdf}};
    470     \node (cart) [draw=none, below=of m]{\includegraphics[width=0.2\textwidth]{cart.pdf}};
    471     \node (merchant) [node distance=4em and 0.5em, draw, below =of cart]{Merchant};
    472     \tikzstyle{C} = [color=black, line width=1pt];
    473     \draw [<-, C] (cart) -- (origin) node [midway, above, sloped] (TextNode) {};
    474     \draw [<-, C] (merchant) -- (cart) node [midway, above, sloped] (TextNode) {{\small transmit}};
    475   \end{tikzpicture}
    476   \end{center}
    477 \end{frame}
    478 
    479 
    480 \begin{frame}{Merchant: Propose contract (EdDSA)}
    481    \begin{minipage}{6cm}
    482    \begin{enumerate}
    483     \item Complete proposal $D$.
    484     \item Send $D$, $EdDSA_m(D)$
    485     \end{enumerate}
    486    \end{minipage}
    487   \begin{minipage}{6cm}
    488   \begin{tikzpicture}
    489    \tikzstyle{def} = [node distance=2em and 0.5em, inner sep=0em, outer sep=.3em];
    490     \node (cart) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{cart.pdf}};
    491     \node (proposal) [def, draw=none, below right=of cart]{\includegraphics[width=0.5\textwidth]{merchant_propose.pdf}};
    492     \node (customer) [node distance=4em and 0.5em, draw, below =of proposal]{Customer};
    493     \tikzstyle{C} = [color=black, line width=1pt];
    494     \node (sign) [def, draw=none, above right=of proposal] {$m$};
    495     \tikzstyle{C} = [color=black, line width=1pt]
    496 
    497     \draw [<-, C] (proposal) -- (sign) node [midway, above, sloped] (TextNode) {};
    498     \draw [<-, C] (proposal) -- (cart) node [midway, above, sloped] (TextNode) {};
    499     \draw [<-, C] (customer) -- (proposal) node [midway, above, sloped] (TextNode) {{\small transmit}};
    500   \end{tikzpicture}
    501   \end{minipage}
    502 \end{frame}
    503 
    504 
    505 \begin{frame}{Customer: Spend coin (EdDSA)}
    506   \begin{minipage}{6cm}
    507    \begin{enumerate}
    508     \item Receive proposal $D$, $EdDSA_m(D)$.
    509     \item Send $s$, $C$, $EdDSA_c(D)$
    510     \end{enumerate}
    511    \end{minipage}
    512   \begin{minipage}{6cm}
    513   \begin{tikzpicture}
    514    \tikzstyle{def} = [node distance=2em and 0.4em, inner sep=0em, outer sep=.3em];
    515     \node (proposal) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{merchant_propose.pdf}};
    516     \node (contract) [def, draw=none, below right=of cart]{\includegraphics[width=0.3\textwidth]{contract.pdf}};
    517     \node (c) [def, draw=none, above=of contract] {$c$};
    518     \node (merchant) [node distance=4em and 0.5em, draw, below=of contract]{Merchant};
    519     \node (coin) [def, draw=none, right=of contract]{\includegraphics[width=0.2\textwidth]{coin.pdf}};
    520     \tikzstyle{C} = [color=black, line width=1pt]
    521 
    522     \draw [<-, C] (contract) -- (c) node [midway, above, sloped] (TextNode) {};
    523     \draw [<-, C] (contract) -- (proposal) node [midway, above, sloped] (TextNode) {};
    524     \draw [<-, C] (merchant) -- (contract) node [midway, above, sloped] (TextNode) {{\small transmit}};
    525     \draw [<-, C] (merchant) -- (coin) node [midway, below, sloped] (TextNode) {{\small transmit}};
    526   \end{tikzpicture}
    527   \end{minipage}
    528 \end{frame}
    529 
    530 
    531 \begin{frame}{Merchant and Exchange: Verify coin (RSA)}
    532    \begin{minipage}{6cm}
    533  \begin{equation*}
    534    s^e \stackrel{?}{\equiv} FDH(C) \mod n
    535    \end{equation*}
    536    \end{minipage}
    537   \begin{minipage}{6cm}
    538   \begin{minipage}{0.2\textwidth}
    539     \includegraphics[width=\textwidth]{coin.pdf}
    540   \end{minipage}
    541   $\stackrel{?}{\Leftrightarrow}$
    542   \begin{minipage}{0.2\textwidth}
    543     \includegraphics[width=\textwidth]{seal.pdf}
    544   \end{minipage}
    545   \end{minipage}
    546   \vfill
    547   The exchange does not only verify the signature, but also
    548   checks that the coin was not double-spent.
    549   \vfill
    550   \pause
    551   \begin{center}
    552   {\bf Taler is an online payment system.}
    553   \end{center}
    554   \vfill
    555 \end{frame}
    556 
    557 
    558 \begin{frame}{Requirements: Online vs. Offline Digital Currencies}
    559 \framesubtitle{\url{https://taler.net/papers/euro-bearer-online-2021.pdf}}
    560 \begin{itemize}
    561     \item Offline capabilities are sometimes cited as a requirement for digital payment solutions
    562     \item All implementations must either use restrictive hardware elements and/or introduce
    563       counterparty risk.
    564     \item[$\Rightarrow$] Permanent offline features weaken a digital payment solution (privacy, security)
    565     \item[$\Rightarrow$] Introduces unwarranted competition for physical cash (endangers emergency-preparedness).
    566   \end{itemize}
    567   We recommend a tiered approach:
    568       \begin{enumerate}
    569         \item Online-first, bearer-based digital currency with Taler
    570         \item (Optional:) Limited offline mode for network outages
    571         \item Physical cash for emergencies (power outage, catastrophic cyber incidents)
    572       \end{enumerate}
    573 \end{frame}
    574 
    575 
    576 \begin{frame}{Payment processing with Taler}
    577   \begin{center}
    578     \includegraphics[height=0.9\textheight]{figs/taler-pay.pdf}
    579   \end{center}
    580 \end{frame}
    581 
    582 
    583 \begin{frame}{Giving change}
    584   It would be inefficient to pay EUR 100 with 1 cent coins!
    585   \begin{itemize}
    586   \item Denomination key represents value of a coin.
    587   \item Exchange may offer various denominations for coins.
    588   \item Wallet may not have exact change!
    589   \item Usability requires ability to pay given sufficient total funds.
    590   \end{itemize}\pause
    591   Key goals:
    592   \begin{itemize}
    593   \item maintain unlinkability
    594   \item maintain taxability of transactions
    595   \end{itemize}\pause
    596   Method:
    597   \begin{itemize}
    598     \item Contract can specify to only pay {\em partial value} of a coin.
    599     \item Exchange allows wallet to obtain {\em unlinkable change}
    600       for remaining coin value.
    601   \end{itemize}
    602 \end{frame}
    603 
    604 
    605 \begin{frame}{Diffie-Hellman (ECDH)}
    606   \begin{minipage}{8cm}
    607    \begin{enumerate}
    608     \item Create private keys $c,t \mod o$
    609     \item Define $C = cG$
    610     \item Define $T = tG$
    611     \item Compute DH \\ $cT = c(tG) = t(cG) = tC$
    612     \end{enumerate}
    613    \end{minipage}
    614   \begin{minipage}{6cm}
    615   \begin{tikzpicture}
    616    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
    617     \node (t) [def, draw=none] at (0,0) {$t$};
    618     \node (ct) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{dh.pdf}};
    619     \node (c) [def, draw=none, above left= of ct]  {$c$};
    620     \tikzstyle{C} = [color=black, line width=1pt]
    621 
    622     \draw [<-, C] (ct) -- (c) node [midway, above, sloped] (TextNode) {};
    623     \draw [<-, C] (ct) -- (t) node [midway, above, sloped] (TextNode) {};
    624   \end{tikzpicture}
    625   \end{minipage}
    626 \end{frame}
    627 
    628 
    629 \begin{frame}{Strawman solution}
    630   \begin{minipage}{8cm}
    631     Given partially spent private coin key $c_{old}$:
    632    \begin{enumerate}
    633 %    \item Let $C_{old} := c_{old}G$ (as before)
    634     \item Pick random $c_{new} \mod o$ private key
    635     \item $C_{new} = c_{new}G$ public key
    636     \item Pick random $b_{new}$
    637     \item Compute $f_{new} := FDH(C_{new})$, $m < n$.
    638     \item Transmit $f'_{new} := f_{new} b_{new}^e \mod n$
    639    \end{enumerate}
    640    ... and sign request for change with $c_{old}$.
    641    \end{minipage}
    642   \begin{minipage}{4cm}
    643   \begin{tikzpicture}
    644    \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
    645     \node (blinded) [def, draw=none]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
    646     \node (planchet) [def, draw=none, above left= of blinded]  {\includegraphics[width=0.15\textwidth]{planchet.pdf}};
    647     \node (cnew) [def, draw=none, above= of planchet]  {$c_{new}$};
    648     \node (bnew) [def, draw=none, above right= of blinded]  {$b_{new}$};
    649     \node (dice1) [def, draw=none, above = of cnew]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
    650     \node (dice2) [def, draw=none, above = of bnew]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
    651     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
    652 
    653     \tikzstyle{C} = [color=black, line width=1pt]
    654 
    655     \draw [<-, C] (cnew) -- (dice1) node [midway, above, sloped] (TextNode) {};
    656     \draw [<-, C] (planchet) -- (cnew) node [midway, above, sloped] (TextNode) {};
    657     \draw [<-, C] (bnew) -- (dice2) node [midway, above, sloped] (TextNode) {};
    658     \draw [<-, C] (blinded) -- (planchet) node [midway, above, sloped] (TextNode) {};
    659     \draw [<-, C] (blinded) -- (bnew) node [midway, above, sloped] (TextNode) {};
    660     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
    661   \end{tikzpicture}
    662   \end{minipage}
    663   \pause
    664   \vfill
    665   {\bf Problem: Owner of $c_{new}$ may differ from owner of $c_{old}$!}
    666 \end{frame}
    667 
    668 
    669 \begin{frame}{Customer: Transfer key setup (ECDH)}
    670   \begin{minipage}{8cm}
    671     Given partially spent private coin key $c_{old}$:
    672    \begin{enumerate}
    673     \item Let $C_{old} := c_{old}G$ (as before)
    674     \item Create random private transfer key $t \mod o$
    675     \item Compute $T := tG$
    676     \item Compute $X := c_{old}(tG) = t(c_{old}G) = tC_{old}$
    677     \item Derive $c_{new}$ and $b_{new}$ from $X$
    678     \item Compute $C_{new} := c_{new}G$
    679     \item Compute $f_{new} := FDH(C_{new})$
    680     \item Transmit $f_{new}' := f_{new} b_{new}^e$
    681     \end{enumerate}
    682    \end{minipage}
    683   \begin{minipage}{4cm}
    684   \begin{tikzpicture}
    685    \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
    686     \node (t) [def, draw=none] at (0,0) {$t$};
    687     \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
    688     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
    689     \node (d) [def, draw=none, above left= of dh]  {$c_{old}$};
    690     \node (cp) [def, draw=none, below left= of dh]  {$c_{new}$};
    691     \node (bp) [def, draw=none, below right= of dh]  {$b_{new}$};
    692     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
    693     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
    694 
    695     \tikzstyle{C} = [color=black, line width=1pt]
    696 
    697     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
    698     \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {};
    699     \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {};
    700     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
    701     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
    702     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
    703     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
    704     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
    705   \end{tikzpicture}
    706   \end{minipage}
    707 \end{frame}
    708 
    709 
    710 \begin{frame}{Cut-and-Choose}
    711   \begin{minipage}{4cm}
    712   \begin{tikzpicture}
    713    \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
    714     \node (t) [def, draw=none] at (0,0) {$t_1$};
    715     \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
    716     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
    717     \node (d) [def, draw=none, above left= of dh]  {$c_{old}$};
    718     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,1}$};
    719     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,1}$};
    720     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
    721     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
    722 
    723     \tikzstyle{C} = [color=black, line width=1pt]
    724 
    725     \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {};
    726     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
    727     \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {};
    728     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
    729     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
    730     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
    731     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
    732     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
    733   \end{tikzpicture}
    734   \end{minipage}
    735   \begin{minipage}{4cm}
    736   \begin{tikzpicture}
    737    \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
    738     \node (t) [def, draw=none] at (0,0) {$t_2$};
    739     \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
    740     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
    741     \node (d) [def, draw=none, above left= of dh]  {$c_{old}$};
    742     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,2}$};
    743     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,2}$};
    744     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
    745     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
    746 
    747     \tikzstyle{C} = [color=black, line width=1pt]
    748 
    749     \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {};
    750     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
    751     \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {};
    752     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
    753     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
    754     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
    755     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
    756     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
    757   \end{tikzpicture}
    758   \end{minipage}
    759   \begin{minipage}{4cm}
    760   \begin{tikzpicture}
    761    \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
    762     \node (t) [def, draw=none] at (0,0) {$t_3$};
    763     \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
    764     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
    765     \node (d) [def, draw=none, above left= of dh]  {$c_{old}$};
    766     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,3}$};
    767     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,3}$};
    768     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
    769     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
    770 
    771     \tikzstyle{C} = [color=black, line width=1pt]
    772 
    773     \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {};
    774     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
    775     \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {};
    776     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
    777     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
    778     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
    779     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
    780     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
    781   \end{tikzpicture}
    782   \end{minipage}
    783 \end{frame}
    784 
    785 
    786 \begin{frame}{Exchange: Choose!}
    787    \begin{center}
    788     \item Exchange sends back random $\gamma \in \{ 1, 2, 3 \}$ to the customer.
    789     \end{center}
    790 \end{frame}
    791 
    792 
    793 \begin{frame}{Customer: Reveal}
    794    \begin{enumerate}
    795    \item If $\gamma = 1$, send $t_2$, $t_3$ to exchange
    796    \item If $\gamma = 2$, send $t_1$, $t_3$ to exchange
    797    \item If $\gamma = 3$, send $t_1$, $t_2$ to exchange
    798   \end{enumerate}
    799 \end{frame}
    800 
    801 
    802 \begin{frame}{Exchange: Verify ($\gamma = 2$)}
    803   \begin{minipage}{4cm}
    804   \begin{tikzpicture}
    805    \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
    806     \node (h) [def, draw=none] at (0,0) {$t_1$};
    807     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
    808     \node (d) [def, draw=none, above left= of dh]  {$C_{old}$};
    809     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,1}$};
    810     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,1}$};
    811     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
    812 
    813     \tikzstyle{C} = [color=black, line width=1pt]
    814 
    815     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
    816     \draw [<-, C] (dh) -- (h) node [midway, above, sloped] (TextNode) {};
    817     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
    818     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
    819     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
    820     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
    821   \end{tikzpicture}
    822   \end{minipage}
    823   \begin{minipage}{4cm}
    824  \
    825   \end{minipage}
    826   \begin{minipage}{4cm}
    827   \begin{tikzpicture}
    828    \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
    829     \node (h) [def, draw=none] at (0,0) {$t_3$};
    830     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
    831     \node (d) [def, draw=none, above left= of dh]  {$C_{old}$};
    832     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,3}$};
    833     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,3}$};
    834     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
    835 
    836     \tikzstyle{C} = [color=black, line width=1pt]
    837 
    838     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
    839     \draw [<-, C] (dh) -- (h) node [midway, above, sloped] (TextNode) {};
    840     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
    841     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
    842     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
    843     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
    844   \end{tikzpicture}
    845   \end{minipage}
    846 \end{frame}
    847 
    848 
    849 \begin{frame}{Exchange: Blind sign change (RSA)}
    850    \begin{minipage}{6cm}
    851     \begin{enumerate}
    852     \item Take $f_{new,\gamma}'$.
    853     \item Compute $s' := f_{new,\gamma}'^d \mod n$.
    854     \item Send signature $s'$.
    855     \end{enumerate}
    856    \end{minipage}
    857   \begin{minipage}{6cm}
    858   \begin{tikzpicture}
    859    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
    860     \node (hammer) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{hammer.pdf}};
    861     \node (signed) [def, draw=none, below left=of hammer]{\includegraphics[width=0.2\textwidth]{sign.pdf}};
    862     \node (blinded) [def, draw=none, above left=of signed]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
    863     \node (customer) [node distance=4em and 0.5em, draw, below =of signed]{Customer};
    864     \tikzstyle{C} = [color=black, line width=1pt]
    865 
    866     \draw [<-, C] (signed) -- (hammer) node [midway, above, sloped] (TextNode) {};
    867     \draw [<-, C] (signed) -- (blinded) node [midway, above, sloped] (TextNode) {};
    868     \draw [<-, C] (customer) -- (signed) node [midway, above, sloped] (TextNode) {{\small transmit}};
    869   \end{tikzpicture}
    870   \end{minipage}
    871 \end{frame}
    872 
    873 
    874 \begin{frame}{Customer: Unblind change (RSA)}
    875   \begin{minipage}{6cm}
    876    \begin{enumerate}
    877     \item Receive $s'$.
    878     \item Compute $s := s' b_{new,\gamma}^{-1} \mod n$.
    879     \end{enumerate}
    880    \end{minipage}
    881   \begin{minipage}{6cm}
    882   \begin{tikzpicture}
    883    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
    884     \node (b) [def, draw=none] at (0,0) {$b_{new,\gamma}$};
    885     \node (coin) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{coin.pdf}};
    886     \node (signed) [def, draw=none, above left=of coin]{\includegraphics[width=0.15\textwidth]{sign.pdf}};
    887     \tikzstyle{C} = [color=black, line width=1pt]
    888 
    889     \draw [<-, C] (coin) -- (b) node [midway, above, sloped] (TextNode) {};
    890     \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {};
    891   \end{tikzpicture}
    892   \end{minipage}
    893 \end{frame}
    894 
    895 
    896 \begin{frame}{Exchange: Allow linking change}
    897   \begin{minipage}{7cm}
    898     \begin{center}
    899     Given $C_{old}$
    900 
    901     \vspace{1cm}
    902 
    903     return $T_\gamma$, $s := s' b_{new,\gamma}^{-1} \mod n$.
    904   \end{center}
    905    \end{minipage}
    906   \begin{minipage}{5cm}
    907    \begin{tikzpicture}
    908     \tikzstyle{def} = [node distance= 3em and 0.5em, inner sep=0.5em, outer sep=.3em];
    909     \node (co) [def, draw=none] at (0,0) {$C_{old}$};
    910     \node (T) [def, draw=none, below left=of co]{$T_\gamma$};
    911     \node (sign) [def, draw=none, below right=of co]{\includegraphics[width=0.15\textwidth]{sign.pdf}};
    912     \node (customer) [def, draw, below right=of T] {Customer};
    913 
    914     \tikzstyle{C} = [color=black, line width=1pt]
    915 
    916     \draw [<-, C] (T) -- (co) node [midway, above, sloped] (TextNode) {};
    917     \draw [<-, C] (sign) -- (co) node [midway, above, sloped] (TextNode) {};
    918     \draw [<-, C] (customer) -- (T) node [midway, above, sloped] (TextNode) {link};
    919     \draw [<-, C] (customer) -- (sign) node [midway, above, sloped] (TextNode) {link};
    920   \end{tikzpicture}
    921   \end{minipage}
    922 \end{frame}
    923 
    924 
    925 \begin{frame}{Customer: Link (threat!)}
    926   \begin{minipage}{6.3cm}
    927    \begin{enumerate}
    928     \item Have $c_{old}$.
    929     \item Obtain $T_\gamma$, $s$ from exchange
    930     \item Compute $X_\gamma = c_{old}T_\gamma$
    931     \item Derive $c_{new,\gamma}$ and $b_{new,\gamma}$ from $X_\gamma$
    932     \item Unblind $s := s' b_{new,\gamma}^{-1} \mod n$
    933   \end{enumerate}
    934 
    935    \end{minipage}
    936   \begin{minipage}{5.7cm}
    937   \begin{tikzpicture}
    938   \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
    939     \node (T) [def, draw=none] at (0,0) {$T_\gamma$};
    940     \node (exchange) [def, inner sep=0.5em, draw, above left=of T] {Exchange};
    941     \node (signed) [def, draw=none, below left=of T]{\includegraphics[width=0.15\textwidth]{sign.pdf}};
    942     \node (dh) [def, draw=none, below right=of T]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
    943     \node (bp) [def, draw=none, below left= of dh]  {$b_{new,\gamma}$};
    944     \node (co) [def, draw=none, above right= of dh]  {$c_{old}$};
    945     \node (cp) [def, draw=none, below= of dh]  {$c_{new,\gamma}$};
    946     \node (coin) [def, draw=none, below left = of bp]{\includegraphics[width=0.2\textwidth]{coin.pdf}};
    947     \node (psign) [def, node distance=2.5em and 0em, draw=none, below = of cp]{\includegraphics[width=0.2\textwidth]{planchet-sign.pdf}};
    948 
    949     \tikzstyle{C} = [color=black, line width=1pt]
    950 
    951     \draw [<-, C] (dh) -- (co) node [midway, above, sloped] (TextNode) {};
    952     \draw [<-, C] (dh) -- (T) node [midway, above, sloped] (TextNode) {};
    953     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
    954     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
    955     \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {};
    956     \draw [<-, C] (coin) -- (bp) node [midway, above, sloped] (TextNode) {};
    957     \draw [<-, C] (T) -- (exchange) node [midway, above, sloped] (TextNode) {link};
    958     \draw [<-, C] (signed) -- (exchange) node [midway, below, sloped] (TextNode) {link};
    959     \draw [<-, C, double] (psign) -- (cp) node [midway, below, sloped] (TextNode) {};
    960   \end{tikzpicture}
    961   \end{minipage}
    962 \end{frame}
    963 
    964 
    965 \begin{frame}{Refresh protocol summary}
    966   \begin{itemize}
    967   \item Customer asks exchange to convert old coin to new coin
    968   \item Protocol ensures new coins can be recovered from old coin
    969   \item[$\Rightarrow$] New coins are owned by the same entity!
    970   \end{itemize}
    971   Thus, the refresh protocol allows:
    972   \begin{itemize}
    973   \item To give unlinkable change.
    974   \item To give refunds to an anonymous customer.
    975   \item To expire old keys and migrate coins to new ones.
    976   \item To handle protocol aborts.
    977   \end{itemize}
    978   \noindent
    979   \begin{center}
    980     \bf
    981    Transactions via refresh are equivalent to {\em sharing} a wallet.
    982 \end{center}
    983 \end{frame}
    984 
    985 
    986 
    987 \begin{frame}{Warranting deposit safety}
    988   Exchange has {\em another} online signing key $W = wG$:
    989   \begin{center}
    990     Sends $EdDSA_w(M,H(D),FDH(C))$ to the merchant.
    991   \end{center}
    992   This signature means that $M$ was the {\em first} to deposit
    993   $C$ and that the exchange thus must pay $M$.
    994   \vfill
    995   \begin{center}
    996      Without this, an evil exchange could renege on the deposit
    997      confirmation and claim double-spending if a coin were
    998      deposited twice, and then not pay either merchant!
    999   \end{center}
   1000 \end{frame}
   1001 
   1002 
   1003 \begin{frame}{Online keys}
   1004 \begin{itemize}
   1005 \item The exchange needs $d$ and $w$ to be available for online signing.
   1006 \item The corresponding public keys $W$ and $(e,n)$ are certified using
   1007       Taler's public key infrastructure (which uses offline-only keys).
   1008 \end{itemize}
   1009 \begin{center}
   1010 \includegraphics[width=0.5\textwidth]{taler-diagram-signatures.png}
   1011 \end{center}
   1012 \vfill
   1013 \begin{center}
   1014 {\bf What happens if those private keys are compromised?}
   1015 \end{center}
   1016 \vfill
   1017 \end{frame}
   1018 
   1019 
   1020 \begin{frame}{Denomination key $(e,n)$ compromise}
   1021 \begin{itemize}
   1022 \item An attacker who learns $d$ can sign an arbitrary number of illicit coins
   1023       into existence and deposit them.
   1024 \item Auditor and exchange can detect this once the total number of deposits
   1025       (illicit and legitimate) exceeds the number of legitimate coins the
   1026       exchange created.
   1027 \item At this point, $(e,n)$ is {\em revoked}.  Users of {\em unspent}
   1028       legitimate coins reveal $b$ from their withdrawal operation and
   1029       obtain a {\em refund}.
   1030 \item The financial loss of the exchange is {\em bounded} by the number of
   1031       legitimate coins signed with $d$.
   1032 \item[$\Rightarrow$] Taler frequently rotates denomination signing keys and
   1033       deletes $d$ after the signing period of the respective key expires.
   1034 \end{itemize}
   1035 \begin{center}
   1036 \includegraphics[width=0.5\textwidth]{taler-diagram-denom-expiration.png}
   1037 \end{center}
   1038 \end{frame}
   1039 
   1040 
   1041 \begin{frame}{Online signing key $W$ compromise}
   1042 \begin{itemize}
   1043 \item An attacker who learns $w$ can sign deposit confirmations.
   1044 \item Attacker sets up two (or more) merchants and customer(s) which double-spend
   1045       legitimate coins at both merchants.
   1046 \item The merchants only deposit each coin once at the exchange and get paid once.
   1047 \item The attacker then uses $w$ to fake deposit confirmations for the double-spent
   1048       transactions.
   1049 \item The attacker uses the faked deposit confirmations to complain to the auditor
   1050       that the exchange did not honor the (faked) deposit confirmations.
   1051 \end{itemize}
   1052 The auditor can then detect the double-spending, but cannot tell who is to blame,
   1053 and (likely) would presume an evil exchange, forcing it to pay both merchants.
   1054 \end{frame}
   1055 
   1056 
   1057 \begin{frame}{Detecting online signing key $W$ compromise}
   1058 \begin{itemize}
   1059 \item Merchants are required to {\em probabilistically} report
   1060       signed deposit confirmations to the auditor.
   1061 \item Auditor can thus detect exchanges not reporting signed
   1062       deposit confirmations.
   1063 \item[$\Rightarrow$] Exchange can rekey if illicit key use is detected,
   1064       then only has to honor deposit confirmations it already provided
   1065       to the auditor {\em and} those without proof of double-spending
   1066       {\em and} those merchants reported to the auditor.
   1067 \item[$\Rightarrow$] Merchants that do not participate in reporting
   1068       to the auditor risk their deposit permissions being voided in
   1069       cases of an exchange's private key being compromised.
   1070 \end{itemize}
   1071 \end{frame}
   1072 
   1073 
   1074 
   1075 
   1076 \section{Competitor analysis}
   1077 \begin{frame}{Competitor comparison}
   1078   \begin{center} \small
   1079     \begin{tabular}{l||c|c|c|c|c}
   1080                 & Cash & Bitcoin & Zerocoin & Creditcard & GNU Taler \\ \hline \hline
   1081    Online      &$-$$-$$-$  &   ++    &    ++    &     +      &   +++  \\ \hline
   1082     Offline     & +++  &   $-$$-$    &    $-$$-$    &     +      &   $-$$-$  \\ \hline
   1083     Trans. cost & +    & $-$$-$$-$   & $-$$-$$-$  &     $-$      &   ++  \\ \hline
   1084     Speed       & +    & $-$$-$$-$   & $-$$-$$-$  &     o      &   ++  \\ \hline
   1085     Taxation    & $-$    &   $-$$-$    &  $-$$-$$-$   &    +++     &  +++  \\ \hline
   1086     Payer-anon  &  ++  &   o     &    ++    &  $-$$-$$-$   &  +++  \\ \hline
   1087     Payee-anon  & ++   &   o     &    ++    &  $-$$-$$-$    &  $-$$-$$-$ \\ \hline
   1088     Security    &  $-$   &   o     &    o     &    $-$$-$      &  ++   \\ \hline
   1089     Conversion  & +++  &  $-$$-$$-$   & $-$$-$$-$ &    +++     &  +++  \\ \hline
   1090     Libre       &  $-$   &  +++    &    +++   & $-$ $-$ $-$      &  +++  \\
   1091   \end{tabular}
   1092   \end{center}
   1093 \end{frame}
   1094 
   1095 
   1096 \begin{frame}{Taler: Project Status}
   1097 \framesubtitle{\url{https://docs.taler.net/}}
   1098 \begin{itemize}
   1099     \item Cryptographic protocols and core exchange component are stable
   1100     \item Current focus: Merchant integration, settlement integration, wallet backup
   1101     \item Pilot project at Bern University of Applied Sciences cafeteria
   1102     \item Internal alpha deployment with a commercial bank in progress
   1103   \end{itemize}
   1104 \end{frame}
   1105 
   1106 
   1107 \begin{frame}{Next Steps: Possible Projects and Collaborations}
   1108   \vfill
   1109 \begin{center}
   1110 \includegraphics[width=1.0\textwidth]{taler-in-use.png}
   1111 \end{center}
   1112 \end{frame}
   1113 
   1114 
   1115 \begin{frame}{Area I: System Integration and Partnerships}
   1116   Pilots with banking organizations could:
   1117   \begin{itemize}
   1118     \item Study integration with the underlying RTGS layer:
   1119   \begin{itemize}
   1120     \item Develop standardized operational procedures
   1121     \item Assess transaction performance at scale
   1122     \item Perform cost analysis in banking environment
   1123     \item Assess effort for integration with commercial banks
   1124   \end{itemize}
   1125     \item Analyze regulatory considerations for different legislations
   1126 %    \item Building awareness of Taler as a bearer-based retail CBDC
   1127     \item Perform independent security audits of Taler components
   1128     \item Determine and possibly close gaps in the existing solution
   1129   \end{itemize}
   1130 \end{frame}
   1131 
   1132 
   1133 \begin{frame}{Area II: Development/Research Extensions}
   1134   \framesubtitle{Background: \url{https://myoralvillage.org/}}
   1135 We have ideas for protocol extensions and ``programmable money'':
   1136   \begin{itemize}
   1137     \item Mediated wallet-to-wallet payments (instead of customer-to-merchant)
   1138     \item Privacy-preserving auctions (trading, currency exchange)
   1139     \item Age-restricted private payments for children (youth protection)
   1140   \end{itemize}
   1141 Central banks should also consider funding research to improve:
   1142   \begin{itemize}
   1143     \item General digital wallet usability and availability
   1144     \item Accessibility features for illiterate and innumerate users
   1145     \item Projects that facilitate integration at retailers
   1146   \begin{itemize}
   1147     \item Hardware and software support for embedded systems
   1148     \item Integration into off-the-self E-commerce systems
   1149   \end{itemize}
   1150     \item Protocol extensions for automated tax reporting
   1151   \end{itemize}
   1152 \end{frame}
   1153 
   1154 
   1155 \begin{frame}{How to support?}
   1156   \begin{description}
   1157     \item[Join:] {\small \url{https://lists.gnu.org/mailman/listinfo/taler}}, \\
   1158                  \url{irc://irc.freenode.net/\#taler}
   1159     \item[Develop:] \url{https://bugs.taler.net/}, \url{https://git.taler.net/}
   1160     \item[Translate:] \url{https://weblate.taler.net/}, \url{translation-volunteer@taler.net}
   1161     \item[Integrate:] \url{https://docs.taler.net/}
   1162     \item[Donate:] \url{https://gnunet.org/ev}
   1163     \item[Invest:] \url{https://taler-systems.com/}
   1164   \end{description}
   1165 \end{frame}
   1166 
   1167 
   1168 \begin{frame}
   1169 \frametitle{Do you have any questions?}
   1170 \vfill
   1171 References:
   1172 {\tiny
   1173   \begin{enumerate}
   1174  \item{David Chaum, Christian Grothoff and Thomas Moser.
   1175        {\em How to issue a central bank digital currency}.
   1176        {\bf SNB Working Papers, 2021}.}
   1177  \item{Christian Grothoff, Bart Polot and Carlo von Loesch.
   1178        {\em The Internet is broken: Idealistic Ideas for Building a GNU Network}.
   1179        {\bf W3C/IAB Workshop on Strengthening the Internet Against Pervasive Monitoring (STRINT)}, 2014.}
   1180  \item{Jeffrey Burdges, Florian Dold, Christian Grothoff and Marcello Stanisci.
   1181        {\em Enabling Secure Web Payments with GNU Taler}.
   1182        {\bf SPACE 2016}.}
   1183  \item{Florian Dold, Sree Harsha Totakura, Benedikt M\"uller, Jeffrey Burdges and Christian Grothoff.
   1184        {\em Taler: Taxable Anonymous Libre Electronic Reserves}.
   1185        Available upon request. 2016.}
   1186  \item{Eli Ben-Sasson, Alessandro Chiesa, Christina Garman, Matthew Green, Ian Miers, Eran Tromer and Madars Virza.
   1187        {\em Zerocash: Decentralized Anonymous Payments from Bitcoin}.
   1188        {\bf IEEE Symposium on Security \& Privacy, 2016}.}
   1189  \item{David Chaum, Amos Fiat and Moni Naor.
   1190        {\em Untraceable electronic cash}.
   1191        {\bf Proceedings on Advances in Cryptology, 1990}.}
   1192   \item{Phillip Rogaway.
   1193        {\em The Moral Character of Cryptographic Work}.
   1194        {\bf Asiacrypt}, 2015.} \label{bib:rogaway}
   1195 \end{enumerate}
   1196 }
   1197 \begin{center}
   1198   {\bf Let money facilitate trade; but ensure capital serves society.}
   1199 \end{center}
   1200 \end{frame}
   1201 
   1202 
   1203 \section{Integration with the core banking system}
   1204 
   1205 \begin{frame}
   1206   \vfill
   1207   \begin{center}
   1208     {\bf Part II: Integration with the core banking system}
   1209   \end{center}
   1210   \vfill
   1211 \end{frame}
   1212 
   1213 
   1214 \begin{frame}
   1215 \frametitle{High-level Deployment Recipe}
   1216 \dots as a bank
   1217 \begin{enumerate}
   1218   \item Create an escrow bank account for the exchange with EBICS access
   1219   \item Provision offline signing machine (or account during testing)
   1220   \item Provision two PostgreSQL databases (for LibEuFin Nexus and exchange)
   1221   \item Provision user-facing exchange service and secmod processes
   1222   \item Provision LibEuFin Nexus (connected to escrow account and providing
   1223     an internal API to the exchange)
   1224   \item Test using the ``taler-wallet-cli``
   1225 \end{enumerate}
   1226 \end{frame}
   1227 
   1228 
   1229 \begin{frame}{Exchange escrow account access}
   1230 The Taler exchange needs to communicate with the core banking system \dots
   1231 \begin{itemize}
   1232   \item to query for transactions into the exchange's escrow account
   1233   \item to initiate payments of aggregated Taler deposits to merchants
   1234 \end{itemize}
   1235 
   1236 In a Taler deployment, the \emph{Taler Wire Gateway} provides an API to the exchange
   1237 for Taler-specific access to the Exchange's escrow account.  Multiple implementations
   1238 of the Taler Wire Gateway exist:
   1239 
   1240 \begin{itemize}
   1241   \item a self-contained play money demo bank
   1242   \item LibEuFin, an adapter to EBICS and other protocols
   1243 \end{itemize}
   1244 
   1245 \end{frame}
   1246 
   1247 \begin{frame}{LibEuFin}
   1248   LibEuFin is a standalone project that provides adapters to bank account
   1249   access APIs.
   1250 
   1251   \begin{itemize}
   1252     \item LibEuFin provides both a generic access layer and an
   1253       implementation of the Taler Wire Gateway API for the exchange
   1254     \item currently, only EBICS 2.5 is supported
   1255     \item other APIs such as FinTS or PSD2-style XS2A APIs can be added
   1256       without requiring changes to the Exchange
   1257     \item tested with a GLS business account
   1258   \end{itemize}
   1259 \end{frame}
   1260 
   1261 \begin{frame}{LibEuFin Concepts}
   1262   \begin{itemize}
   1263     \item A LibEuFin \emph{bank connection} is a set of credentials and parameters
   1264       to talk to the bank's account access API.
   1265     \item A LibEuFin \emph{bank account} is the information about a bank
   1266       account (balances, transactions, payment initiations) stored locally
   1267       within the LibEuFin service.  A LibEuFin bank account has a default Bank
   1268       Connection that is used to communicate with the bank's API.
   1269     \item A \emph{facade} provides a domain-specific access layer to bank accounts
   1270       and connections.  The \emph{Taler Wire Gateway Facade} implements the
   1271       API required by the Taler exchange and translates it to operations on the
   1272       underlying account/connection.
   1273   \end{itemize}
   1274 \end{frame}
   1275 
   1276 \begin{frame}{LibEuFin Tooling}
   1277   \begin{itemize}
   1278     \item \texttt{libeufin-nexus} is the main service
   1279     \item Almost all configuration (except DB credentials)
   1280       is stored in the database and managed via a RESTful HTTP API
   1281     \item \texttt{libeufin-sandbox} implements a toy EBICS host for protocol
   1282       testing
   1283     \item \texttt{libeufin-cli} is client for the HTTP API (only implements a subset
   1284       of available functionality)
   1285   \end{itemize}
   1286 \end{frame}
   1287 
   1288 \begin{frame}{LibEuFin Setup Overview}
   1289   \begin{itemize}
   1290     \item Obtain EBICS subscriber configuration (host URL, host ID, user ID,
   1291       partner ID) for the Exchange's escrow account
   1292     \item Deploy the LibEuFin Nexus service
   1293     \item Create a new LibEuFin bank connection (of type \texttt{ebics})
   1294     \item Export and back up the key material for the bank connection (contains
   1295       EBICS subscriber configuration and private keys)
   1296     \item Send subscriber initialization to the EBICS host (electronically)
   1297     \item Export key letter and activate subscriber in the EBICS host (manually)
   1298     \item Synchronize the bank connection
   1299     \item Import the account into LibEuFin
   1300     \item Create a Taler Wire Gateway facade
   1301     \item Set up scheduled tasks for ingesting new transactions / sending payment
   1302       initiations
   1303   \end{itemize}
   1304 \end{frame}
   1305 
   1306 
   1307 
   1308 \begin{frame}{LibEuFin Implementation Limitations}
   1309   \begin{itemize}
   1310     \item LibEuFin is less stable than other Taler components, and future
   1311       updates might contain breaking changes (tooling, APIs and database
   1312       schema)
   1313     \item Error handling and recovery is still rather primitive
   1314     \item The Taler Wire Gateway does not yet implement automatic return
   1315       transactions when transactions with a malformed subject (i.e.  no reserve
   1316       public key) are received
   1317   \end{itemize}
   1318 \end{frame}
   1319 
   1320 \begin{frame}{LibEuFin EBICS Limitations}
   1321   The GLS accounts with EBICS access that we have access to have some limitations:
   1322   \begin{itemize}
   1323     \item SEPA Instant Credit Transfers aren't supported yet
   1324     \item Erroneous payment initiations are accepted by the GLS EBICS host,
   1325       but an error message is later sent only by paper mail (and not reported
   1326       by the CRZ download request)
   1327     \item Limited access to transaction history (3 months)
   1328   \end{itemize}
   1329 \end{frame}
   1330 
   1331 \begin{frame}[fragile]{LibEuFin Setup Guide}
   1332 \vfill
   1333 \begin{center}
   1334 \url{https://docs.taler.net/libeufin/nexus-tutorial.html}
   1335 \end{center}
   1336 \vfill
   1337 \end{frame}
   1338 
   1339 
   1340 \section{Operator security considerations}
   1341 
   1342 \begin{frame}
   1343   \vfill
   1344   \begin{center}
   1345     {\bf Part III: Operator security considerations}
   1346   \end{center}
   1347   \vfill
   1348 \end{frame}
   1349 
   1350 
   1351 \begin{frame}{Key management}
   1352 Taler has many types of keys:
   1353 \begin{itemize}
   1354 \item Coin keys
   1355 \item Denomination keys
   1356 \item Online message signing keys
   1357 \item Offline key signing keys
   1358 \item Merchant keys
   1359 \item Auditor key
   1360 \item Security module keys
   1361 \item Transfer keys
   1362 \item Wallet keys
   1363 \item {\em TLS keys, DNSSEC keys}
   1364 \end{itemize}
   1365 \end{frame}
   1366 
   1367 
   1368 \begin{frame}{Offline keys}
   1369 Both exchange and auditor use offline keys.
   1370 \begin{itemize}
   1371 \item Those keys must be backed up and remain highly confidential!
   1372 \item We recommend that computers that have ever had access to those
   1373       keys to NEVER again go online.
   1374 \item We recommend using a Raspberry Pi for offline key operations.
   1375       Store it in a safe under multiple locks and keys.
   1376 \item Apply full-disk encryption on offline-key signing systems.
   1377 \item Have 3--5 full-disk backups of offline-key signing systems.
   1378 \end{itemize}
   1379 \begin{center}
   1380 \includegraphics[scale=0.1]{pi.png}
   1381 \end{center}
   1382 \end{frame}
   1383 
   1384 
   1385 \begin{frame}{Online keys}
   1386 The exchange needs RSA and EdDSA keys to be available for online signing.
   1387 \begin{itemize}
   1388 \item Knowledge of these private keys will allow an adversary to
   1389       mint digital cash, possibly resulting in huge financial losses
   1390       (eventually, this will be detected by the auditor, but only
   1391        after some financial losses have been irrevocably incurred).
   1392 \item The corresponding public keys are certified using
   1393       Taler's public key infrastructure (which uses offline-only keys).
   1394 \end{itemize}
   1395 \begin{center}
   1396 \includegraphics[width=0.5\textwidth]{taler-diagram-signatures.png}
   1397 \end{center}
   1398 \vfill
   1399 {\tt taler-exchange-offline} can also be used to {\bf revoke} the
   1400 online signing keys, if we find they have been compromised.
   1401 \vfill
   1402 \end{frame}
   1403 
   1404 
   1405 \begin{frame}{Protecting online keys}
   1406 The exchange needs RSA and EdDSA keys to be available for online signing.
   1407 \begin{itemize}
   1408 \item {\tt taler-exchange-secmod-rsa} and {\tt taler-exchange-secmod-eddsa}
   1409       are the only processes that must have access to the private keys.
   1410 \item The secmod processes should run under a different UID, but share
   1411       the same GID with the exchange.
   1412 \item The secmods generate the keys, allow {\tt taler-exchange-httpd} to sign with
   1413       them, and eventually delete the private keys.
   1414 \item Communication between secmods and {\tt taler-exchange-httpd} is via
   1415       a UNIX domain socket.
   1416 \item Online private keys are stored on disk (not in database!) and should
   1417       NOT be backed up (RAID should suffice). If disk is lost, we can always
   1418       create fresh replacement keys!
   1419 \end{itemize}
   1420 \end{frame}
   1421 
   1422 
   1423 \begin{frame}{Database}
   1424 The exchange needs the database to detect double spending.
   1425 \begin{itemize}
   1426 \item Loss of the database will allow technically skilled people
   1427       to double-spend their digital cash, possibly resulting in
   1428       significant financial losses.
   1429 \item The database contains total amounts customers withdrew and
   1430       merchants received, so sensitive private banking data. It
   1431       must also not become public.
   1432 \item The auditor must have a (current) copy. Asynchronous replication
   1433       is considered sufficient.  This copy could also be used as an
   1434       additional (off-site?) backup.
   1435 \end{itemize}
   1436 \end{frame}
   1437 
   1438 
   1439 \begin{frame}{taler-exchange-wirewatch}
   1440 {\tt taler-exchange-wirewatch} needs credentials to access data about
   1441 incoming wire transfers from the Nexus.
   1442 \begin{itemize}
   1443 \item This tool should run as a separate UID and GID (from
   1444       {\tt taler-exchange-httpd}).
   1445 \item It must have access to the Postgres database (SELECT + INSERT).
   1446 \item Its configuration file contains the credentials to talk to Nexus.
   1447 \item[$\Rightarrow$] Configuration should be separate from {\tt taler-exchange-httpd}.
   1448 \end{itemize}
   1449 \end{frame}
   1450 
   1451 
   1452 \begin{frame}{taler-exchange-transfer}
   1453 Only {\tt taler-exchange-transfer} needs credentials to initiate wire
   1454 transfers using the Nexus.
   1455 \begin{itemize}
   1456 \item This tool should run as a separate UID and GID (from
   1457       {\tt taler-exchange-httpd}).
   1458 \item It must have access to the Postgres database (SELECT + INSERT).
   1459 \item Its configuration file contains the credentials to talk to Nexus.
   1460 \item[$\Rightarrow$] Configuration should be separate from {\tt taler-exchange-httpd}.
   1461 \end{itemize}
   1462 \end{frame}
   1463 
   1464 
   1465 \begin{frame}{Nexus}
   1466 The Nexus has to be able to interact with the escrow account of the bank.
   1467 \begin{itemize}
   1468 \item It must have the private keys to sign EBICS/FinTS messages.
   1469 \item It also has its own local database.
   1470 \item The Nexus user and database should be kept separate from
   1471       the other exchange users and the Taler exchange database.
   1472 \end{itemize}
   1473 \end{frame}
   1474 
   1475 
   1476 \begin{frame}{Hardware}
   1477 General notions:
   1478 \begin{itemize}
   1479 \item Platforms with disabled Intel ME \& disabled remote administration are safer.
   1480 \item VMs are not a security mechanism. Side-channel attacks abound. Avoid running any
   1481       Taler component in a virtual machine ``for security''.
   1482 \end{itemize}
   1483 \end{frame}
   1484 
   1485 
   1486 \begin{frame}{Operating system}
   1487 General notions:
   1488 \begin{itemize}
   1489 \item It should be safe to run the different Taler components (including Nginx, Nexus
   1490       and Postgres) all on the same physical hardware (under different UIDs/GIDs).
   1491       We would separate them onto different physical machines during scale-out, but not
   1492       necessarily for ``basic'' security.
   1493 \item Limiting and auditing system administrator access will be crucial.
   1494 \item We recommend to {\bf not} use any anti-virus.
   1495 \item We recommend using a well-supported GNU/Linux operating system (such as
   1496       Debian or Ubuntu).
   1497 \end{itemize}
   1498 \end{frame}
   1499 
   1500 
   1501 \begin{frame}{Network}
   1502 \begin{itemize}
   1503 \item We recommend to {\bf not} use any host-based firewall.
   1504       Taler components can use UNIX domain sockets (or bind to localhost).
   1505 \item A network-based
   1506       firewall is not required, but as long as TCP 80/443 are open Taler should
   1507       work fine.
   1508 \item Any firewall must be configured to permit connection to Auditor
   1509       for database synchronization.
   1510 \item We recommend running the Taler exchange behind an Nginx or Apache
   1511       proxy for TLS termination.
   1512 \item We recommend using static IP address configurations (IPv4 and IPv6).
   1513 \item We recommend using DNSSEC with DANE in addition to TLS certificates.
   1514 \item We recommend auditing the TLS setup using \url{https://observatory.mozilla.org}.
   1515 \end{itemize}
   1516 \end{frame}
   1517 
   1518 
   1519 \section{Integration considerations}
   1520 
   1521 \begin{frame}
   1522   \vfill
   1523   \begin{center}
   1524     {\bf Part IV: Integration considerations}
   1525   \end{center}
   1526   \vfill
   1527 \end{frame}
   1528 
   1529 
   1530 \begin{frame}[fragile]{RFC 8905: \texttt{payto:} Uniform Identifiers for Payments and Accounts}
   1531   \vfill
   1532   Like \texttt{mailto:}, but for bank accounts instead of email accounts!
   1533   \vfill
   1534   \begin{verbatim}
   1535     payto://<PAYMENT-METHOD>/<ACCOUNT-NR>
   1536       ?subject=InvoiceNr42
   1537       &amount=EUR:12.50
   1538   \end{verbatim}
   1539   \vfill
   1540   Default action:  Open app to review and confirm payment.
   1541   \vfill
   1542 \includegraphics[width=0.25\textwidth]{einzahlschein-ch.jpeg}
   1543 \hfill
   1544 \includegraphics[width=0.2\textwidth]{de-ueberweisungsformular.png}
   1545   \vfill
   1546 \end{frame}
   1547 
   1548 
   1549 \begin{frame}[fragile]{Benefits of {\tt payto://}}
   1550   \begin{itemize}
   1551     \item Standardized way to represent financial resources (bank account, bitcoin wallet)
   1552       and payments to them
   1553     \item Useful on the client-side on the Web and for FinTech backend applications
   1554     \item Payment methods (such as IBAN, ACH, Bitcoin) are registered with
   1555           IANA and allow extra options
   1556   \end{itemize}
   1557   \begin{center}
   1558   {\bf Taler wallet can generate payto://-URI for withdraw!}
   1559   \end{center}
   1560 \end{frame}
   1561 
   1562 
   1563 
   1564 \end{document}
   1565 
   1566 
   1567 
   1568 
   1569 \begin{frame}{Taler {\tt /withdraw/sign}}
   1570 % Customer withdrawing coins with blind signatures
   1571 % \bigskip
   1572   \begin{figure}[th]
   1573     \begin{minipage}[b]{0.45\linewidth}
   1574       \begin{center}
   1575         \begin{tikzpicture}[scale = 0.4,
   1576             transform shape,
   1577             msglabel/.style    = { text = Black, yshift = .3cm,
   1578                                    sloped, midway },
   1579             okmsg/.style       = { ->, color = MidnightBlue, thick,
   1580                                    >=stealth },
   1581             rstmsg/.style      = { ->, color = BrickRed, thick,
   1582                                    >=stealth }
   1583           ]
   1584           \node[draw = MidnightBlue,
   1585             fill = CornflowerBlue,
   1586             minimum width = .3cm,
   1587             minimum height = 10cm
   1588           ] (h1) at (-4, 0) {};
   1589           \node[draw = MidnightBlue,
   1590             fill = CornflowerBlue,
   1591             minimum width = .3cm,
   1592             minimum height = 10cm
   1593           ] (h2) at (4, 0) {};
   1594           \node[above = 0cm of h1] {Wallet};
   1595           \node[above = 0cm of h2] {Exchange};
   1596 
   1597           \path[->, color = MidnightBlue, very thick, >=stealth]
   1598             (-5, 4.5) edge
   1599             node[rotate=90, text = Black, yshift = .3cm] {Time}
   1600             (-5, -4.5);
   1601           \path[okmsg, dashed]
   1602              ($(h1.east)+(0, 4.0)+(0, -1.0)$) edge
   1603              node[msglabel] {SEPA(RK,A)}
   1604              ($(h2.west)+(0, 3.5)+(0, -1.0)$);
   1605           \path[okmsg]
   1606             ($(h1.east)+(0, -1.0)$) edge
   1607             node[msglabel] {POST {\tt /withdraw/sign} $S_{RK}(DK, B_b(C))$}
   1608             ($(h2.west)+(0, -1.5)$);
   1609           \path[okmsg]
   1610             ($(h2.west)+(0, -2.0)$) edge
   1611             node[msglabel] {200 OK: $S_{DK}(B_b(C))$)}
   1612             ($(h1.east)+(0, -2.5)$);
   1613           \path[rstmsg]
   1614             ($(h2.west)+(0, -3.5)$) edge
   1615             node[msglabel] {402 PAYMENT REQUIRED: $S_{RK}(DK, B_b(C))$)}
   1616             ($(h1.east)+(0, -4)$);
   1617           \node at (5.3, 0) {};
   1618         \end{tikzpicture}
   1619       \end{center}
   1620       Result: $\langle c, S_{DK}(C) \rangle$.
   1621     \end{minipage}
   1622     \hspace{0.5cm}
   1623     \begin{minipage}[b]{0.45\linewidth}
   1624       \tiny
   1625       \begin{description}
   1626       \item[$A$] Some amount, $A \ge A_{DK}$
   1627       \item[$RK$] Reserve key
   1628       \item[$DK$] Denomination key
   1629       \item[$b$] Blinding factor
   1630       \item[$B_b()$] RSA-FDH blinding % DK supressed
   1631       \item[$C$] Coin public key $C := cG$
   1632       \item[$S_{RK}()$] EdDSA signature
   1633       \item[$S_{DK}()$] RSA-FDH signature
   1634       \end{description}
   1635     \end{minipage}
   1636   \end{figure}
   1637 \end{frame}
   1638 
   1639 
   1640 \begin{frame}[t]{Taler {\tt /deposit}}
   1641 Merchant and exchange see only the public coin $\langle C, S_{DK}(C) \rangle$.
   1642 \bigskip
   1643   \begin{figure}[th]
   1644     \begin{minipage}[b]{0.45\linewidth}
   1645       \begin{center}
   1646         \begin{tikzpicture}[scale = 0.4,
   1647             transform shape,
   1648             msglabel/.style    = { text = Black, yshift = .3cm,
   1649                                    sloped, midway },
   1650             okmsg/.style       = { ->, color = MidnightBlue, thick,
   1651                                    >=stealth },
   1652             rstmsg/.style      = { ->, color = BrickRed, thick,
   1653                                    >=stealth }
   1654           ]
   1655           \node[draw = MidnightBlue,
   1656             fill = CornflowerBlue,
   1657             minimum width = .3cm,
   1658             minimum height = 10cm
   1659           ] (h1) at (-4, 0) {};
   1660           \node[draw = MidnightBlue,
   1661             fill = CornflowerBlue,
   1662             minimum width = .3cm,
   1663             minimum height = 10cm
   1664           ] (h2) at (4, 0) {};
   1665           \node[above = 0cm of h1] {Merchant};
   1666           \node[above = 0cm of h2] {Exchange};
   1667 
   1668           \path[->, color = MidnightBlue, very thick, >=stealth]
   1669             (-5, 4.5) edge
   1670             node[rotate=90, text = Black, yshift = .3cm] {Time}
   1671             (-5, -4.5);
   1672           \path[->, color = MidnightBlue, thick, >=stealth]
   1673             ($(h1.east)+(0,3)$) edge
   1674             node[text = Black, yshift = .3cm, sloped] {POST {\tt /deposit} $S_{DK}(C), S_{c}(D)$}
   1675             ($(h2.west)+(0,2)$);
   1676           \path[->, color = MidnightBlue, thick, >=stealth]
   1677             ($(h2.west)+(0,0.5)$) edge
   1678             node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(S_{c}(D))$}
   1679             ($(h1.east)+(0,-0.5)$);
   1680           \path[rstmsg]
   1681             ($(h2.west)+(0, -2.5)$) edge
   1682             node[msglabel] {409 CONFLICT: $S_{c}(D')$}
   1683             ($(h1.east)+(0, -3.5)$);
   1684           \node at (5.3, 0) {};
   1685         \end{tikzpicture}
   1686       \end{center}
   1687     \end{minipage}
   1688     \hspace{0.5cm}
   1689     \begin{minipage}[b]{0.45\linewidth}
   1690       \tiny
   1691       \begin{description}
   1692       \item[$DK$] Denomination key
   1693       \item[$S_{DK}()$] RSA-FDH signature using $DK$
   1694       \item[$c$] Private coin key, $C := cG$.
   1695       \item[$S_{C}()$] EdDSA signature using $c$
   1696       \item[$D$] Deposit details
   1697       \item[$SK$] Exchange's signing key
   1698       \item[$S_{SK}()$] EdDSA signature using $SK$
   1699       \item[$D'$] Conficting deposit details $D' \not= D$
   1700       \end{description}
   1701     \end{minipage}
   1702   \end{figure}
   1703 \end{frame}
   1704 
   1705 
   1706 \begin{frame}{Taler {\tt /refresh/melt}}
   1707   \begin{figure}[th]
   1708     \begin{minipage}[b]{0.45\linewidth}
   1709       \begin{center}
   1710 	\begin{tikzpicture}[scale = 0.4,
   1711             transform shape,
   1712             msglabel/.style    = { text = Black, yshift = .3cm,
   1713                                    sloped, midway },
   1714             okmsg/.style       = { ->, color = MidnightBlue, thick,
   1715                                    >=stealth },
   1716             rstmsg/.style      = { ->, color = BrickRed, thick,
   1717                                    >=stealth }
   1718 	  ]
   1719 	  \node[draw = MidnightBlue,
   1720 	    fill = CornflowerBlue,
   1721 	    minimum width = .3cm,
   1722 	    minimum height = 10cm
   1723 	  ] (h1) at (-4, 0) {};
   1724 	  \node[draw = MidnightBlue,
   1725 	    fill = CornflowerBlue,
   1726 	    minimum width = .3cm,
   1727 	    minimum height = 10cm
   1728 	  ] (h2) at (4, 0) {};
   1729 	  \node[above = 0cm of h1] {Customer};
   1730 	  \node[above = 0cm of h2] {Exchange};
   1731 
   1732 	  \path[->, color = MidnightBlue, very thick, >=stealth]
   1733 	    (-5, 4.5) edge
   1734 	    node[rotate=90, text = Black, yshift = .3cm] {Time}
   1735 	    (-5, -4.5);
   1736 	  \path[->, color = MidnightBlue, thick, >=stealth]
   1737 	    ($(h1.east)+(0,3)$) edge
   1738 	    node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/melt} $S_{DK}(C), S_c({\cal DK}, {\cal T},{\cal B})$}
   1739 	    ($(h2.west)+(0,2)$);
   1740 	  \path[->, color = MidnightBlue, thick, >=stealth]
   1741 	    ($(h2.west)+(0,0.5)$) edge
   1742 	    node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(H({\cal T}, {\cal B}),\gamma)$}
   1743 	    ($(h1.east)+(0,-0.5)$);
   1744 	  \path[rstmsg]
   1745 	    ($(h2.west)+(0, -2.5)$) edge
   1746 	    node[msglabel] {409 CONFLICT: $S_{C}(X), \ldots$}
   1747 	    ($(h1.east)+(0, -3.5)$);
   1748 	  \node at (5.3, 0) {};
   1749 	\end{tikzpicture}
   1750       \end{center}
   1751     \end{minipage}
   1752     \hspace{0.5cm}
   1753     \begin{minipage}[b]{0.45\linewidth}
   1754       \tiny
   1755       \begin{description}
   1756       \item[$\kappa$] System-wide security parameter, usually 3.
   1757       \\ \smallskip
   1758       \item[$\cal DK$] $:= [DK^{(i)}]_i$ \\ List of denomination keys \\
   1759       $D + \sum_i A_{DK^{(i)}} < A_{DK}$
   1760       \item[$t_j$] Random scalar for $j<\kappa$
   1761       \item[${\cal T}$] $:= [T_j]_\kappa$ where $T_j = t_j G$
   1762       \item[$k_j$] $:= c T_j = t_j C$ is an ECDHE
   1763       \item[$b_j^{(i)}$] $:= KDF_b(k_j,i)$ % blinding factor
   1764       \item[$c_j^{(i)}$] $:= KDF_c(k_j,i)$ % coin secret keys
   1765       \item[$C_j^{(i)}$] $: = c_j^{(i)} G$ % new coin publics % keys
   1766       \item[${\cal B}$] $:= [H( \beta_j )]_\kappa$ where \\
   1767          $\beta_j := \left[ B_{b_j^{(i)}}(C_j^{(i)}) \right]_i$
   1768       \\ \smallskip
   1769       \item[$\gamma$] Random value in $[0,\kappa)$
   1770 %      \\ \smallskip
   1771 %      \item[$X$] Deposit or refresh
   1772       \end{description}
   1773     \end{minipage}
   1774   \end{figure}
   1775 \end{frame}
   1776 
   1777 
   1778 \begin{frame}{Taler {\tt /refresh/reveal}}
   1779   \begin{figure}[th]
   1780     \begin{minipage}[b]{0.45\linewidth}
   1781       \begin{center}
   1782 	\begin{tikzpicture}[scale = 0.4,
   1783             transform shape,
   1784             msglabel/.style    = { text = Black, yshift = .3cm,
   1785                                    sloped, midway },
   1786             okmsg/.style       = { ->, color = MidnightBlue, thick,
   1787                                    >=stealth },
   1788             rstmsg/.style      = { ->, color = BrickRed, thick,
   1789                                    >=stealth }
   1790 	  ]
   1791 	  \node[draw = MidnightBlue,
   1792 	    fill = CornflowerBlue,
   1793 	    minimum width = .3cm,
   1794 	    minimum height = 10cm
   1795 	  ] (h1) at (-4, 0) {};
   1796 	  \node[draw = MidnightBlue,
   1797 	    fill = CornflowerBlue,
   1798 	    minimum width = .3cm,
   1799 	    minimum height = 10cm
   1800 	  ] (h2) at (4, 0) {};
   1801 	  \node[above = 0cm of h1] {Customer};
   1802 	  \node[above = 0cm of h2] {Exchange};
   1803 
   1804 	  \path[->, color = MidnightBlue, very thick, >=stealth]
   1805 	    (-5, 4.5) edge
   1806 	    node[rotate=90, text = Black, yshift = .3cm] {Time}
   1807 	    (-5, -4.5);
   1808 	  \path[->, color = MidnightBlue, thick, >=stealth]
   1809 	    ($(h1.east)+(0,3)$) edge
   1810 	    node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/reveal} $H({\cal T}, {\cal B}), {\tilde{\cal T}}, \beta_\gamma$}
   1811 	    ($(h2.west)+(0,2)$);
   1812 	  \path[->, color = MidnightBlue, thick, >=stealth]
   1813 	    ($(h2.west)+(0,0.5)$) edge
   1814 	    node[text = Black, yshift = .3cm, sloped] {200 OK: $\cal S$}
   1815 	    ($(h1.east)+(0,-0.5)$);
   1816 	  \path[rstmsg]
   1817 	    ($(h2.west)+(0, -2.5)$) edge
   1818 	    node[msglabel] {400 BAD REQUEST: $Z$}
   1819 	    ($(h1.east)+(0, -3.5)$);
   1820 	  \node at (5.3, 0) {};
   1821 	\end{tikzpicture}
   1822       \end{center}
   1823     \end{minipage}
   1824     \hspace{0.5cm}
   1825     \begin{minipage}[b]{0.45\linewidth}
   1826       \tiny
   1827       \begin{description}
   1828       \item[$\cal DK$] $:= [DK^{(i)}]_i$
   1829       \item[$t_j$] .. \\ \smallskip
   1830 
   1831       \item[$\tilde{\cal T}$] $:= [t_j | j \in \kappa, j \neq \gamma]$ \\ \smallskip
   1832 
   1833       \item[$k_\gamma$] $:= c T_\gamma = t_\gamma C$
   1834       \item[$b_\gamma^{(i)}$] $:= KDF_b(k_\gamma,i)$
   1835       \item[$c_\gamma^{(i)}$] $:= KDF_c(k_\gamma,i)$
   1836       \item[$C_\gamma^{(i)}$] $: = c_\gamma^{(i)} G$
   1837 
   1838       \item[$B_\gamma^{(i)}$] $:= B_{b_\gamma^{(i)}}(C_\gamma^{(i)})$
   1839       \item[$\beta_\gamma$] $:= \big[ B_\gamma^{(i)} \big]_i$
   1840       \item[$\cal S$] $:= \left[ S_{DK^{(i)}}( B_\gamma^{(i)} ) \right]_i$ \\ \smallskip
   1841 
   1842       \item[$Z$] Cut-and-choose missmatch information
   1843       \end{description}
   1844     \end{minipage}
   1845   \end{figure}
   1846 \end{frame}
   1847 
   1848 
   1849 \begin{frame}{Taler {\tt /refresh/link}}
   1850   \begin{figure}[th]
   1851     \begin{minipage}[b]{0.45\linewidth}
   1852       \begin{center}
   1853 	\begin{tikzpicture}[scale = 0.4,
   1854             transform shape,
   1855             msglabel/.style    = { text = Black, yshift = .3cm,
   1856                                    sloped, midway },
   1857             okmsg/.style       = { ->, color = MidnightBlue, thick,
   1858                                    >=stealth },
   1859             rstmsg/.style      = { ->, color = BrickRed, thick,
   1860                                    >=stealth }
   1861 	  ]
   1862 	  \node[draw = MidnightBlue,
   1863 	    fill = CornflowerBlue,
   1864 	    minimum width = .3cm,
   1865 	    minimum height = 10cm
   1866 	  ] (h1) at (-4, 0) {};
   1867 	  \node[draw = MidnightBlue,
   1868 	    fill = CornflowerBlue,
   1869 	    minimum width = .3cm,
   1870 	    minimum height = 10cm
   1871 	  ] (h2) at (4, 0) {};
   1872 	  \node[above = 0cm of h1] {Customer};
   1873 	  \node[above = 0cm of h2] {Exchagne};
   1874 
   1875 	  \path[->, color = MidnightBlue, very thick, >=stealth]
   1876 	    (-5, 4.5) edge
   1877 	    node[rotate=90, text = Black, yshift = .3cm] {Time}
   1878 	    (-5, -4.5);
   1879 	  \path[->, color = MidnightBlue, thick, >=stealth]
   1880 	    ($(h1.east)+(0,3)$) edge
   1881 	    node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/link} $C$}
   1882 	    ($(h2.west)+(0,2)$);
   1883 	  \path[->, color = MidnightBlue, thick, >=stealth]
   1884 	    ($(h2.west)+(0,0.5)$) edge
   1885 	    node[text = Black, yshift = .3cm, sloped] {200 OK: $T_\gamma$}
   1886 	    ($(h1.east)+(0,-0.5)$);
   1887 	  \path[rstmsg]
   1888 	    ($(h2.west)+(0, -2.5)$) edge
   1889 	    node[msglabel] {404 NOT FOUND}
   1890 	    ($(h1.east)+(0, -3.5)$);
   1891 	  \node at (5.3, 0) {};
   1892 	\end{tikzpicture}
   1893       \end{center}
   1894     \end{minipage}
   1895     \hspace{0.5cm}
   1896     \begin{minipage}[b]{0.45\linewidth}
   1897       \tiny
   1898       \begin{description}
   1899       \item[$C$] Old coind public key \\ \smallskip
   1900       \item[$T_\gamma$] Linkage data $\cal L$ at $\gamma$
   1901       \end{description}
   1902     \end{minipage}
   1903   \end{figure}
   1904 \end{frame}
   1905 
   1906 
   1907 \begin{frame}{Operational security}
   1908   \begin{center}
   1909     \resizebox{\textwidth}{!}{
   1910 \begin{tikzpicture}[
   1911   font=\sffamily,
   1912   every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm},
   1913   source/.style={draw,thick,rounded corners,fill=green!20,inner sep=.3cm},
   1914   process/.style={draw,thick,circle,fill=blue!20},
   1915   sink/.style={source,fill=green!20},
   1916   datastore/.style={draw,very thick,shape=datastore,inner sep=.3cm},
   1917   dots/.style={gray,scale=2},
   1918   to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize},
   1919   every node/.style={align=center}]
   1920 
   1921   % Position the nodes using a matrix layout
   1922   \matrix{
   1923     \node[source] (wallet) {Wallet};
   1924       \& \node[process] (browser) {Browser};
   1925       \& \node[process] (shop) {Web shop};
   1926       \& \node[sink] (backend) {Taler backend}; \\
   1927   };
   1928 
   1929   % Draw the arrows between the nodes and label them.
   1930   \draw[to] (browser) to[bend right=50] node[midway,above] {(4) signed contract}
   1931       node[midway,below] {(signal)} (wallet);
   1932   \draw[to] (wallet) to[bend right=50] node[midway,above] {(signal)}
   1933       node[midway,below] {(5) signed coins} (browser);
   1934   \draw[<->] (browser) -- node[midway,above] {(3,6) custom}
   1935       node[midway,below] {(HTTPS)} (shop);
   1936   \draw[to] (shop) to[bend right=50] node[midway,above] {(HTTPS)}
   1937       node[midway,below] {(1) proposed contract / (7) signed coins} (backend);
   1938   \draw[to] (backend) to[bend right=50] node[midway,above] {(2) signed contract / (8) confirmation}
   1939       node[midway,below] {(HTTPS)} (shop);
   1940 \end{tikzpicture}
   1941 }
   1942 \end{center}
   1943 \end{frame}