marketing

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

bank.tex (47340B)


      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 \usepackage{adjustbox}
      9 \definecolor{shadecolor}{rgb}{0.8,0.8,0.8}
     10 \usetheme{boxes}
     11 \setbeamertemplate{navigation symbols}{}
     12 \usepackage{xcolor}
     13 \usepackage{tikz,eurosym}
     14 \usepackage[normalem]{ulem}
     15 \usepackage{listings}
     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{Deployment Plan 2021}
    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{F. Dold, C. Grothoff, L. Schumacher}
    107 \date{\today}
    108 \institute{Taler Systems SA}
    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-2020.jpg}
    121   \end{center}
    122 \begin{textblock*}{4cm}(.5cm,6.5cm) % {block width} (coords)
    123   {\Large {\bf \url{taler.net}} \\
    124     IRC{\bf \#taler} \\
    125     {\small (on freenode)} \\
    126     twitter@taler \\
    127     mail@taler.net }
    128 \end{textblock*}
    129 
    130 % Substitute based on who is giving the talk!
    131  \begin{textblock*}{6cm}(6.7cm,7.7cm) % {block width} (coords)
    132    {\hfill {\Large {\bf Florian Dold \&} \\
    133     \hfill {\bf Christian Grothoff}} \\
    134     \hfill \{dold,grothoff\}@taler.net }
    135 \end{textblock*}
    136 
    137 \end{frame}
    138 
    139 
    140 \section{Introduction}
    141 
    142 \begin{frame}{What is Taler?}
    143   \vfill
    144 \begin{center}
    145 \includegraphics[width=0.7\textwidth]{operations.png}
    146 \end{center}
    147 \end{frame}
    148 
    149 
    150 \begin{frame}{Design goals for the GNU Taler Payment System}
    151 GNU Taler must ...
    152 \begin{enumerate}
    153   \item {... be implemented as {\bf free software}.}
    154   \item {... protect the {\bf privacy of buyers}.}
    155   \item {... must enable the state to {\bf tax income} and crack down on
    156     illegal business activities.}
    157   \item {... prevent payment fraud.}
    158   \item {... only {\bf disclose the minimal amount of information
    159     necessary}.}
    160   \item {... be usable.}
    161   \item {... be efficient.}
    162   \item {... avoid single points of failure.}
    163   \item {... foster {\bf competition}.}
    164 \end{enumerate}
    165 \end{frame}
    166 
    167 
    168 \section{Architecture}
    169 
    170 \begin{frame}
    171   \vfill
    172   \begin{center}
    173     {\bf Part I: Architecture}
    174   \end{center}
    175   \vfill
    176 \end{frame}
    177 
    178 
    179 \begin{frame}{Taler Overview}
    180 \begin{center}
    181 \begin{tikzpicture}
    182  \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em];
    183  \node (origin) at (0,0) {};
    184  \node (exchange) [def,above=of origin,draw]{Exchange};
    185  \node (customer) [def, draw, below left=of origin] {Customer};
    186  \node (merchant) [def, draw, below right=of origin] {Merchant};
    187  \node (auditor) [def, draw, above right=of origin]{Auditor};
    188 
    189  \tikzstyle{C} = [color=black, line width=1pt]
    190 
    191  \draw [<-, C] (customer) -- (exchange) node [midway, above, sloped] (TextNode) {withdraw coins};
    192  \draw [<-, C] (exchange) -- (merchant) node [midway, above, sloped] (TextNode) {deposit coins};
    193  \draw [<-, C] (merchant) -- (customer) node [midway, above, sloped] (TextNode) {spend coins};
    194  \draw [<-, C] (exchange) -- (auditor) node [midway, above, sloped] (TextNode) {verify};
    195 
    196 \end{tikzpicture}
    197 \end{center}
    198 \end{frame}
    199 
    200 
    201 \begin{frame}[fragile]{Taler: Bank Perspective}
    202 \begin{adjustbox}{max totalsize={.9\textwidth}{.7\textheight},center}
    203 \begin{tikzpicture}
    204  \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em];
    205  \node (origin) at (0,0) {};
    206  \node (exchange) [def,above=of origin,draw]{Exchange};
    207  \node (nexus) [def, draw, below right=of exchange] {Nexus};
    208  \node (corebanking) [def, draw, below left=of nexus] {Core Banking};
    209  \node (nginx) [def, draw, above=of exchange]{Nginx};
    210  \node (postgres) [def, draw, below left=of exchange]{Postgres};
    211  \node (postgres-nexus) [def, draw, below right=of nexus]{Postgres};
    212 
    213  \tikzstyle{C} = [color=black, line width=1pt]
    214 
    215  \draw [<-, C] (exchange) -- (nginx) node [midway, above, sloped] (TextNode) {REST API};
    216  \draw [<-, C] (postgres) -- (exchange) node [midway, above, sloped] (TextNode) {SQL};
    217  \draw [<-, C] (postgres-nexus) -- (nexus) node [midway, above, sloped] (TextNode) {SQL};
    218  \draw [<-, C] (nexus) -- (exchange) node [midway, above, sloped] (TextNode) {Internal REST API};
    219  \draw [<-, C] (corebanking) -- (nexus) node [midway, above, sloped] (TextNode) {EBICS/FinTS};
    220 
    221 \end{tikzpicture}
    222 \end{adjustbox}
    223 \end{frame}
    224 
    225 
    226 \begin{frame}{Taler: Exchange Details}
    227 \begin{center}
    228 \begin{tikzpicture}
    229  \tikzstyle{def} = [node distance=2em and 2.5em, inner sep=1em, outer sep=.3em];
    230  \node (origin) at (0,0) {};
    231  \node (httpd) [def,above=of origin,draw]{httpd};
    232  \node (secmod-rsa) [def, draw, right=of httpd] {secmod-rsa};
    233  \node (secmod-eddsa) [def, draw, left=of httpd] {secmod-eddsa};
    234  \node (postgres) [def, draw, below=of httpd]{Postgres};
    235  \node (aggregator) [def, draw, right=of postgres]{aggregator};
    236  \node (transfer) [def, draw, below left=of postgres]{transfer};
    237  \node (wirewatch) [def, draw, below right=of postgres]{wirewatch};
    238  \node (nexus) [def, draw, below=of postgres]{Nexus};
    239 
    240  \tikzstyle{C} = [color=black, line width=1pt]
    241 
    242  \draw [<->, C] (httpd) -- (postgres) node [midway, above, sloped] (TextNode) {};
    243  \draw [<->, C] (httpd) -- (secmod-rsa) node [midway, above, sloped] (TextNode) {};
    244  \draw [<->, C] (httpd) -- (secmod-eddsa) node [midway, above, sloped] (TextNode) {};
    245  \draw [<->, C] (aggregator) -- (postgres) node [midway, above, sloped] (TextNode) {};
    246  \draw [<->, C] (wirewatch) -- (postgres) node [midway, above, sloped] (TextNode) {};
    247  \draw [<->, C] (transfer) -- (postgres) node [midway, above, sloped] (TextNode) {};
    248  \draw [->, C] (transfer) -- (nexus) node [midway, above, sloped] (TextNode) {};
    249  \draw [<-, C] (wirewatch) -- (nexus) node [midway, above, sloped] (TextNode) {};
    250 \end{tikzpicture}
    251 \end{center}
    252 \end{frame}
    253 
    254 
    255 \begin{frame}
    256 \frametitle{Taler: Auditor Details}
    257 \begin{center}
    258 \begin{tikzpicture}
    259  \tikzstyle{def} = [node distance=2em and 2.5em, inner sep=1em, outer sep=.3em];
    260  \node (origin) at (0,0) {};
    261  \node (httpd) [def,above left=of origin,draw]{auditor-httpd};
    262  \node (report) [def,above right=of origin,draw]{auditor-report};
    263  \node (postgres-A) [def, draw, below=of origin] {Postgres (Auditor)};
    264  \node (postgres-E) [def, draw, below=of postgres-A] {Postgres (Bank)};
    265 
    266  \tikzstyle{C} = [color=black, line width=1pt]
    267 
    268  \draw [->, C] (postgres-E) -- (postgres-A) node [midway, above, sloped] (TextNode) {sync};
    269  \draw [<->, C] (httpd) -- (postgres-A) node [midway, above, sloped] (TextNode) {};
    270  \draw [<->, C] (report) -- (postgres-A) node [midway, above, sloped] (TextNode) {};
    271 \end{tikzpicture}
    272 \end{center}
    273 \end{frame}
    274 
    275 
    276 \begin{frame}
    277 \frametitle{Taler: Merchant Details}
    278 \begin{center}
    279 \begin{tikzpicture}
    280  \tikzstyle{def} = [node distance= 5em and 4.5em, inner sep=1em, outer sep=.3em];
    281  \node (origin) at (0,0) {};
    282  \node (frontend) [def,above=of origin,draw]{merchant-frontend};
    283  \node (backend) [def,below=of frontend,draw]{taler-backend};
    284  \node (postgres) [def, draw, below left=of backend] {Postgres};
    285  \node (sqlite) [def, draw, below=of backend] {Sqlite};
    286  \node (alt) [def, draw, below right=of backend] {...};
    287 
    288  \tikzstyle{C} = [color=black, line width=1pt]
    289 
    290  \draw [->, C] (frontend) -- (backend) node [midway, above, sloped] (TextNode) {REST API};
    291  \draw [<->, C] (backend) -- (postgres) node [midway, above, sloped] (TextNode) {SQL};
    292  \draw [<->, C] (backend) -- (sqlite) node [midway, above, sloped] (TextNode) {SQL};
    293  \draw [<->, C] (backend) -- (alt) node [midway, above, sloped] (TextNode) {SQL};
    294 \end{tikzpicture}
    295 \end{center}
    296 \end{frame}
    297 
    298 
    299 \begin{frame}
    300 \frametitle{Taler: Wallet Details}
    301 \begin{center}
    302 \begin{tikzpicture}
    303  \tikzstyle{def} = [node distance= 5em and 4.5em, inner sep=1em, outer sep=.3em];
    304  \node (origin) at (0,0) {};
    305  \node (gui) [def,above=of origin,draw]{wallet-gui};
    306  \node (core) [def,below=of gui,draw]{wallet-core};
    307  \node (sync) [def, draw, below left=of core] {Sync};
    308  \node (taler) [def, draw, below right=of core] {Taler};
    309  \node (anastasis) [def, draw, below=of core] {Anastasis};
    310 
    311  \tikzstyle{C} = [color=black, line width=1pt]
    312  \draw [<->, C] (gui) -- (core) node [midway, above, sloped] (TextNode) {};
    313  \draw [<->, C] (core) -- (sync) node [midway, above, sloped] (TextNode) {Backup};
    314  \draw [<->, C] (core) -- (taler) node [midway, above, sloped] (TextNode) {Payment};
    315  \draw [<->, C] (core) -- (anastasis) node [midway, above, sloped] (TextNode) {Key Escrow};
    316 \end{tikzpicture}
    317 \end{center}
    318 \end{frame}
    319 
    320 \begin{frame}
    321 \frametitle{High-level Deployment Recipe}
    322 \dots as a bank
    323 \begin{enumerate}
    324   \item Create an escrow bank account for the exchange with EBICS access
    325   \item Provision offline signing machine (or account during testing)
    326   \item Provision two PostgreSQL databases (for LibEuFin Nexus and exchange)
    327   \item Provision user-facing exchange service and secmod processes
    328   \item Provision LibEuFin Nexus (connected to escrow account and providing
    329     an internal API to the exchange)
    330   \item Test using the ``taler-wallet-cli``
    331 \end{enumerate}
    332 \end{frame}
    333 
    334 
    335 \section{Integration with the core banking system}
    336 
    337 \begin{frame}
    338   \vfill
    339   \begin{center}
    340     {\bf Part II: Integration with the core banking system}
    341   \end{center}
    342   \vfill
    343 \end{frame}
    344 
    345 \begin{frame}{Exchange escrow account access}
    346 The Taler exchange needs to communicate with the core banking system \dots
    347 \begin{itemize}
    348   \item to query for transactions into the exchange's escrow account
    349   \item to initiate payments of aggregated Taler deposits to merchants
    350 \end{itemize}
    351 
    352 In a Taler deployment, the \emph{Taler Wire Gateway} provides an API to the exchange
    353 for Taler-specific access to the Exchange's escrow account.  Multiple implementations
    354 of the Taler Wire Gateway exist:
    355 
    356 \begin{itemize}
    357   \item a self-contained play money demo bank
    358   \item LibEuFin, an adapter to EBICS and other protocols
    359 \end{itemize}
    360 
    361 \end{frame}
    362 
    363 \begin{frame}{LibEuFin}
    364   LibEuFin is a standalone project that provides adapters to bank account
    365   access APIs.
    366 
    367   \begin{itemize}
    368     \item LibEuFin provides both a generic access layer and an
    369       implementation of the Taler Wire Gateway API for the exchange
    370     \item currently, only EBICS 2.5 is supported
    371     \item other APIs such as FinTS or PSD2-style XS2A APIs can be added
    372       without requiring changes to the Exchange
    373     \item tested with a GLS business account
    374   \end{itemize}
    375 \end{frame}
    376 
    377 \begin{frame}{LibEuFin Concepts}
    378   \begin{itemize}
    379     \item A LibEuFin \emph{bank connection} is a set of credentials and parameters
    380       to talk to the bank's account access API.
    381     \item A LibEuFin \emph{bank account} is the information about a bank
    382       account (balances, transactions, payment initiations) stored locally
    383       within the LibEuFin service.  A LibEuFin bank account has a default Bank
    384       Connection that is used to communicate with the bank's API.
    385     \item A \emph{facade} provides a domain-specific access layer to bank accounts
    386       and connections.  The \emph{Taler Wire Gateway Facade} implements the
    387       API required by the Taler exchange and translates it to operations on the
    388       underlying account/connection.
    389   \end{itemize}
    390 \end{frame}
    391 
    392 \begin{frame}{LibEuFin Tooling}
    393   \begin{itemize}
    394     \item \texttt{libeufin-nexus} is the main service
    395     \item Almost all configuration (except DB credentials)
    396       is stored in the database and managed via a RESTful HTTP API
    397     \item \texttt{libeufin-sandbox} implements a toy EBICS host for protocol
    398       testing
    399     \item \texttt{libeufin-cli} is client for the HTTP API (only implements a subset
    400       of available functionality)
    401   \end{itemize}
    402 \end{frame}
    403 
    404 \begin{frame}{LibEuFin Setup Overview}
    405   \begin{itemize}
    406     \item Obtain EBICS subscriber configuration (host URL, host ID, user ID,
    407       partner ID) for the Exchange's escrow account
    408     \item Deploy the LibEuFin Nexus service
    409     \item Create a new LibEuFin bank connection (of type \texttt{ebics})
    410     \item Export and back up the key material for the bank connection (contains
    411       EBICS subscriber configuration and private keys)
    412     \item Send subscriber initialization to the EBICS host (electronically)
    413     \item Export key letter and activate subscriber in the EBICS host (manually)
    414     \item Synchronize the bank connection
    415     \item Import the account into LibEuFin
    416     \item Create a Taler Wire Gateway facade
    417     \item Set up scheduled tasks for ingesting new transactions / sending payment
    418       initiations
    419   \end{itemize}
    420 \end{frame}
    421 
    422 
    423 
    424 \begin{frame}{LibEuFin Implementation Limitations}
    425   \begin{itemize}
    426     \item LibEuFin is less stable than other Taler components, and future
    427       updates might contain breaking changes (tooling, APIs and database
    428       schema)
    429     \item Error handling and recovery is still rather primitive
    430     \item The Taler Wire Gateway does not yet implement automatic return
    431       transactions when transactions with a malformed subject (i.e.  no reserve
    432       public key) are received
    433   \end{itemize}
    434 \end{frame}
    435 
    436 \begin{frame}{LibEuFin EBICS Limitations}
    437   The GLS accounts with EBICS access that we have access to have some limitations:
    438   \begin{itemize}
    439     \item SEPA Instant Credit Transfers aren't supported yet
    440     \item Erroneous payment initiations are accepted by the GLS EBICS host,
    441       but an error message is later sent only by paper mail (and not reported
    442       by the CRZ download request)
    443     \item Limited access to transaction history (3 months)
    444   \end{itemize}
    445 \end{frame}
    446 
    447 \begin{frame}[fragile]{LibEuFin Setup Guide}
    448 \vfill
    449 \begin{center}
    450 \url{https://docs.taler.net/libeufin/nexus-tutorial.html}
    451 \end{center}
    452 \vfill
    453 \end{frame}
    454 
    455 
    456 \section{Operator security considerations}
    457 
    458 \begin{frame}
    459   \vfill
    460   \begin{center}
    461     {\bf Part III: Operator security considerations}
    462   \end{center}
    463   \vfill
    464 \end{frame}
    465 
    466 
    467 \begin{frame}{Key management}
    468 Taler has many types of keys:
    469 \begin{itemize}
    470 \item Coin keys
    471 \item Denomination keys
    472 \item Online message signing keys
    473 \item Offline key signing keys
    474 \item Merchant keys
    475 \item Auditor key
    476 \item Security module keys
    477 \item Transfer keys
    478 \item Wallet keys
    479 \item {\em TLS keys, DNSSEC keys}
    480 \end{itemize}
    481 \end{frame}
    482 
    483 
    484 \begin{frame}{Offline keys}
    485 Both exchange and auditor use offline keys.
    486 \begin{itemize}
    487 \item Those keys must be backed up and remain highly confidential!
    488 \item We recommend that computers that have ever had access to those
    489       keys to NEVER again go online.
    490 \item We recommend using a Raspberry Pi for offline key operations.
    491       Store it in a safe under multiple locks and keys.
    492 \item Apply full-disk encryption on offline-key signing systems.
    493 \item Have 3--5 full-disk backups of offline-key signing systems.
    494 \end{itemize}
    495 \begin{center}
    496 \includegraphics[scale=0.1]{pi.png}
    497 \end{center}
    498 \end{frame}
    499 
    500 
    501 \begin{frame}{Online keys}
    502 The exchange needs RSA and EdDSA keys to be available for online signing.
    503 \begin{itemize}
    504 \item Knowledge of these private keys will allow an adversary to
    505       mint digital cash, possibly resulting in huge financial losses
    506       (eventually, this will be detected by the auditor, but only
    507        after some financial losses have been irrevocably incurred).
    508 \item The corresponding public keys are certified using
    509       Taler's public key infrastructure (which uses offline-only keys).
    510 \end{itemize}
    511 \begin{center}
    512 \includegraphics[width=0.5\textwidth]{taler-diagram-signatures.png}
    513 \end{center}
    514 \vfill
    515 {\tt taler-exchange-offline} can also be used to {\bf revoke} the
    516 online signing keys, if we find they have been compromised.
    517 \vfill
    518 \end{frame}
    519 
    520 
    521 \begin{frame}{Protecting online keys}
    522 The exchange needs RSA and EdDSA keys to be available for online signing.
    523 \begin{itemize}
    524 \item {\tt taler-exchange-secmod-rsa} and {\tt taler-exchange-secmod-eddsa}
    525       are the only processes that must have access to the private keys.
    526 \item The secmod processes should run under a different UID, but share
    527       the same GID with the exchange.
    528 \item The secmods generate the keys, allow {\tt taler-exchange-httpd} to sign with
    529       them, and eventually delete the private keys.
    530 \item Communication between secmods and {\tt taler-exchange-httpd} is via
    531       a UNIX domain socket.
    532 \item Online private keys are stored on disk (not in database!) and should
    533       NOT be backed up (RAID should suffice). If disk is lost, we can always
    534       create fresh replacement keys!
    535 \end{itemize}
    536 \end{frame}
    537 
    538 
    539 \begin{frame}{Database}
    540 The exchange needs the database to detect double spending.
    541 \begin{itemize}
    542 \item Loss of the database will allow technically skilled people
    543       to double-spend their digital cash, possibly resulting in
    544       significant financial losses.
    545 \item The database contains total amounts customers withdrew and
    546       merchants received, so sensitive private banking data. It
    547       must also not become public.
    548 \item The auditor must have a (current) copy. Asynchronous replication
    549       is considered sufficient.  This copy could also be used as an
    550       additional (off-site?) backup.
    551 \end{itemize}
    552 \end{frame}
    553 
    554 
    555 \begin{frame}{taler-exchange-wirewatch}
    556 {\tt taler-exchange-wirewatch} needs credentials to access data about
    557 incoming wire transfers from the Nexus.
    558 \begin{itemize}
    559 \item This tool should run as a separate UID and GID (from
    560       {\tt taler-exchange-httpd}).
    561 \item It must have access to the Postgres database (SELECT + INSERT).
    562 \item Its configuration file contains the credentials to talk to Nexus.
    563 \item[$\Rightarrow$] Configuration should be separate from {\tt taler-exchange-httpd}.
    564 \end{itemize}
    565 \end{frame}
    566 
    567 
    568 \begin{frame}{taler-exchange-transfer}
    569 Only {\tt taler-exchange-transfer} needs credentials to initiate wire
    570 transfers using the Nexus.
    571 \begin{itemize}
    572 \item This tool should run as a separate UID and GID (from
    573       {\tt taler-exchange-httpd}).
    574 \item It must have access to the Postgres database (SELECT + INSERT).
    575 \item Its configuration file contains the credentials to talk to Nexus.
    576 \item[$\Rightarrow$] Configuration should be separate from {\tt taler-exchange-httpd}.
    577 \end{itemize}
    578 \end{frame}
    579 
    580 
    581 \begin{frame}{Nexus}
    582 The Nexus has to be able to interact with the escrow account of the bank.
    583 \begin{itemize}
    584 \item It must have the private keys to sign EBICS/FinTS messages.
    585 \item It also has its own local database.
    586 \item The Nexus user and database should be kept separate from
    587       the other exchange users and the Taler exchange database.
    588 \end{itemize}
    589 \end{frame}
    590 
    591 
    592 \begin{frame}{Hardware}
    593 General notions:
    594 \begin{itemize}
    595 \item Platforms with disabled Intel ME \& disabled remote administration are safer.
    596 \item VMs are not a security mechanism. Side-channel attacks abound. Avoid running any
    597       Taler component in a virtual machine ``for security''.
    598 \end{itemize}
    599 \end{frame}
    600 
    601 
    602 \begin{frame}{Operating system}
    603 General notions:
    604 \begin{itemize}
    605 \item It should be safe to run the different Taler components (including Nginx, Nexus
    606       and Postgres) all on the same physical hardware (under different UIDs/GIDs).
    607       We would separate them onto different physical machines during scale-out, but not
    608       necessarily for ``basic'' security.
    609 \item Limiting and auditing system administrator access will be crucial.
    610 \item We recommend to {\bf not} use any anti-virus.
    611 \item We recommend using a well-supported GNU/Linux operating system (such as
    612       Debian or Ubuntu).
    613 \end{itemize}
    614 \end{frame}
    615 
    616 
    617 \begin{frame}{Network}
    618 \begin{itemize}
    619 \item We recommend to {\bf not} use any host-based firewall.
    620       Taler components can use UNIX domain sockets (or bind to localhost).
    621 \item A network-based
    622       firewall is not required, but as long as TCP 80/443 are open Taler should
    623       work fine.
    624 \item Any firewall must be configured to permit connection to Auditor
    625       for database synchronization.
    626 \item We recommend running the Taler exchange behind an Nginx or Apache
    627       proxy for TLS termination.
    628 \item We recommend using static IP address configurations (IPv4 and IPv6).
    629 \item We recommend using DNSSEC with DANE in addition to TLS certificates.
    630 \item We recommend auditing the TLS setup using \url{https://observatory.mozilla.org}.
    631 \end{itemize}
    632 \end{frame}
    633 
    634 
    635 
    636 \section{Deployment}
    637 
    638 \begin{frame}
    639   \vfill
    640   \begin{center}
    641     {\bf Part IV: Deployment}
    642   \end{center}
    643   \vfill
    644 \end{frame}
    645 
    646 
    647 \begin{frame}{Alpha: internal-only}
    648 Objective:
    649 \begin{center}
    650 {\bf Bank staff to gain first operational experience.}
    651 \end{center}
    652 Proposed setup:
    653   \begin{itemize}
    654   \item Nexus with key material for escrow bank account
    655   \item Taler exchange with Nexus banking backend
    656   \item Offline key signing
    657   \end{itemize}
    658 Proposed timeline: Q1-Q2'2021.
    659 \end{frame}
    660 
    661 
    662 \begin{frame}{Alpha: internal-only}
    663 Technical tasks in Alpha phase:
    664 \begin{itemize}
    665   \item Setup minimal merchant, run test transactions $\Rightarrow$ Integration test
    666   \item Determine performance limits (benchmark $\Rightarrow$ capacity planning)
    667   \item Document and verify procedures (setup, maintenance, disaster recovery)
    668   \item Database synchronization setup with auditor ($\Rightarrow$ generate audit reports)
    669   \item Test system upgrade procedure
    670   \item Test system termination (out-of-business) procedure
    671 \end{itemize}
    672 Once Alpha is complete and BaFin approved, move to Beta phase.
    673 \end{frame}
    674 
    675 
    676 \begin{frame}{Beta: invitation-only}
    677 Objectives:
    678 \begin{center}
    679 {\bf Merchants gain first operational experience.} \\
    680 {\bf Taler/Bank gain first support experience.}
    681 \end{center}
    682 Changes to setup:
    683   \begin{itemize}
    684   \item Limit access to production system (operational security)
    685   \item RAID, synchronous backup to Auditor and locally
    686   \item Deploy legally binding ToS/PP
    687   \end{itemize}
    688 Proposed timeline: Q3-Q4'2021.
    689 \end{frame}
    690 
    691 
    692 \begin{frame}{Beta: invitation-only}
    693 Technical tasks in Beta phase:
    694 \begin{itemize}
    695   \item Onboard first merchant(s) with limited reach
    696   \item Develop customer support procedures
    697   \item Security audit of operational security
    698   \item Integrate system monitoring (load, disk capacity, etc.)
    699   \item Verify deployment is {\bf reproducibly deterministic}
    700   \item Experiment with scale-out options:
    701   \begin{itemize}
    702   \item multiple Postgres backends (sharding)
    703   \item multiple Nginx frontends (TLS termination)
    704   \item multiple Exchange servers (Taler processing)
    705   \end{itemize}
    706 \end{itemize}
    707 Once everyone is happy with Beta, move to production.
    708 \end{frame}
    709 
    710 
    711 
    712 \begin{frame}{Software status: Working key components}
    713   \begin{itemize}
    714   \item Command-line, WebExtension (Firefox, Chrome, Chromium, Brave) and Android wallet
    715   \item Bank integration (libeufin / Nexus)
    716   \item Backup solution (Sync)
    717   \item Merchant backend
    718   \item WooCommerce plugin
    719   \item Taler-enabled vending machine (MDB)
    720   \item Sample Web frontends
    721   \end{itemize}
    722 \end{frame}
    723 
    724 
    725 \begin{frame}{Software status: Components under development}
    726   \begin{itemize}
    727   \item Key escrow solution (\url{https://anastasis.lu/}) [Q1'2021]
    728   \item Merchant backoffice [Q2'2021]
    729   \item iOS wallet [Q3'2021]
    730   \end{itemize}
    731 \end{frame}
    732 
    733 
    734 \begin{frame}[fragile]{Ubuntu 20.04 LTS Installation Overview}
    735 \noindent
    736 Extend your {\tt /etc/apt/sources.list} with:
    737 
    738 {\tiny
    739 \begin{verbatim}
    740 deb https://deb.taler.net/apt/ubuntu focal-fossa main
    741 \end{verbatim}
    742 }
    743 \noindent
    744 Key import and installation:
    745 
    746 {\tiny
    747 \begin{verbatim}
    748 # wget -O - https://taler.net/static/taler-systems.gpg.key | apt-sign add -
    749 # apt update
    750 # apt install taler-exchange
    751 \end{verbatim}
    752 }
    753 \end{frame}
    754 
    755 
    756 \begin{frame}[fragile]{Configuration}
    757 \vfill
    758 \begin{center}
    759 \url{https://docs.taler.net/taler-exchange-manual.html#id3}
    760 \end{center}
    761 \vfill
    762 \end{frame}
    763 
    764 
    765 \begin{frame}{Database setup}
    766 \begin{center}
    767 \includegraphics[width=\textwidth]{replication.pdf}
    768 \end{center}
    769 \end{frame}
    770 
    771 \begin{frame}{Simplified database setup}
    772 \begin{center}
    773 \includegraphics[width=\textwidth]{replication2.pdf}
    774 \end{center}
    775 \end{frame}
    776 
    777 \begin{frame}{Database setup with Nexus}
    778 \begin{center}
    779 \includegraphics[width=\textwidth]{db-full.pdf}
    780 \end{center}
    781 \end{frame}
    782 
    783 
    784 
    785 
    786 
    787 \section{Integration}
    788 
    789 \begin{frame}
    790   \vfill
    791   \begin{center}
    792     {\bf Part V: Integration}
    793   \end{center}
    794   \vfill
    795 \end{frame}
    796 
    797 
    798 \begin{frame}{Integration considerations}
    799   \begin{itemize}
    800   \item KYC/CFT obligations
    801   \item Bank branding strategy (unified (?) App)
    802   \item Simple customer withdraw flow
    803   \item Use for customer-to-customer payments
    804   \item Support for customer financial (self-) analysis
    805   \item Taler for use-cases beyond digital cash
    806   \end{itemize}
    807 \end{frame}
    808 
    809 
    810 \begin{frame}{KYC/CFT obligations}
    811   \begin{itemize}
    812   \item Nexus or core-banking need to discharge KYC/CFT obligations
    813   \item Taler exchange assumes incoming wire transfers have valid
    814         wire transfer subject and KYC has passed.
    815   \item Incoming transaction limits must be enforced by Nexus/core-banking and/or merchant.
    816   \item KYC/CFT checks on (large) outgoing transactions must be triggered by
    817         Nexus/core-banking.
    818   \item So far, Nexus does {\bf nothing}.
    819   \item[$\Rightarrow$] Need to determine where to discharge which legal requirement.
    820   \end{itemize}
    821 \end{frame}
    822 
    823 
    824 \begin{frame}{Unified App}
    825   \begin{itemize}
    826   \item Taler wallet consists of GUI and wallet-core.
    827   \item wallet-core is written in TypeScript and runs usually on top of NodeJS.
    828   \item wallet-core exposes message-based API.
    829   \item wallet-core {\em could} be integrated with (unified) bank App.
    830   \item[$\Rightarrow$] Increased complexity of unified App may have negative
    831         usability and security implications.
    832   \end{itemize}
    833 \end{frame}
    834 
    835 
    836 \begin{frame}{User-friendly withdraw flow}
    837   \begin{itemize}
    838   \item Integration with online-banking (``withdraw button'')
    839   \item Integration with (non-unified) bank App ({\bf discuss how!})
    840   \item Support for customers of other banks
    841   \item Integration via {\tt payto://}
    842   \end{itemize}
    843 \end{frame}
    844 
    845 
    846 \begin{frame}[fragile]{RFC 8905: \texttt{payto:} Uniform Identifiers for Payments and Accounts}
    847   \vfill
    848   Like \texttt{mailto:}, but for bank accounts instead of email accounts!
    849   \vfill
    850   \begin{verbatim}
    851     payto://<PAYMENT-METHOD>/<ACCOUNT-NR>
    852       ?subject=InvoiceNr42
    853       &amount=EUR:12.50
    854   \end{verbatim}
    855   \vfill
    856   Default action:  Open app to review and confirm payment.
    857   \vfill
    858 \includegraphics[width=0.25\textwidth]{einzahlschein-ch.jpeg}
    859 \hfill
    860 \includegraphics[width=0.2\textwidth]{de-ueberweisungsformular.png}
    861   \vfill
    862 \end{frame}
    863 
    864 
    865 \begin{frame}[fragile]{Benefits of {\tt payto://}}
    866   \begin{itemize}
    867     \item Standardized way to represent financial resources (bank account, bitcoin wallet)
    868       and payments to them
    869     \item Useful on the client-side on the Web and for FinTech backend applications
    870     \item Payment methods (such as IBAN, ACH, Bitcoin) are registered with
    871           IANA and allow extra options
    872   \end{itemize}
    873   \begin{center}
    874   {\bf Taler wallet can generate payto://-URI for withdraw!}
    875   \end{center}
    876 \end{frame}
    877 
    878 
    879 
    880 \begin{frame}{Customer-to-customer payments}
    881   \begin{itemize}
    882   \item Customer-to-bank account will be easy.
    883   \item Wallet-to-wallet transactions require withdraw ($\Rightarrow$ customer authorization!)
    884   \end{itemize}
    885 \end{frame}
    886 
    887 
    888 \begin{frame}{Financial self-analysis}
    889   \begin{itemize}
    890   \item Transaction history kept in Taler wallet
    891   \item Visualization in Taler wallet is planned for future version
    892   \item Possible to {\em export} transaction history from Taler wallet
    893         for analysis in other tools
    894   \end{itemize}
    895 \end{frame}
    896 
    897 
    898 \begin{frame}{Beyond digital cash}
    899   \begin{itemize}
    900   \item Taler can do transactions not just in EUR
    901   \item Could also issue coins denominated in company stocks, or other trade goods
    902   \item Can theoretically be combined with electronic voting for shareholder meetings,
    903         and support dividend payments
    904   \item[$\Rightarrow$] Many additional technical and regulatory issues to address.
    905   \end{itemize}
    906 \end{frame}
    907 
    908 
    909 
    910 \section{Go to market strategy}
    911 
    912 \begin{frame}
    913   \vfill
    914   \begin{center}
    915     {\bf Part VI: Go to market strategy}
    916   \end{center}
    917   \vfill
    918 \end{frame}
    919 
    920 
    921 
    922 \begin{frame}{Use Case: Hackers\footnote{\url{https://www.gnu.org/philosophy/rms-hack.html}}}
    923   Today:
    924   \begin{itemize}
    925     \item Most payment systems proprietary and not privacy-friendly
    926     \item Crypto-currencies popular because Free Software and unregulated
    927   \end{itemize}\vfill\pause
    928   With GNU Taler:
    929   \begin{itemize}
    930     \item Free Software
    931     \item Privacy-Friendly
    932     \item Scalable
    933     \item Legal
    934     \item Easy-to-use, well-documented public API
    935     \item[$\Rightarrow$] World-first {\em hacker-friendly} real-world payments!
    936   \end{itemize}
    937 \end{frame}
    938 
    939 
    940 \begin{frame}{Use Case: Journalism}
    941   Today:
    942   \begin{itemize}
    943     \item Corporate structure % ($\Rightarrow$ filter)
    944     \item Advertising primary revenue % ($\Rightarrow$ dependence)
    945     \item Tracking readers critical for business success
    946     \item Journalism and marketing hard to distinguish
    947   \end{itemize}\vfill\pause
    948   With GNU Taler:
    949   \begin{itemize}
    950     \item One-click micropayments per article
    951     \item Hosting requires no expertise % (no PCI DSS)
    952     \item Reader-funded reporting separated from marketing
    953     \item Readers can remain anonymous
    954   \end{itemize}
    955 \end{frame}
    956 
    957 
    958 \begin{frame}{Use Case: Anti-Spam}
    959   Today, p$\equiv$p provides authenticated encryption for e-mail:
    960   \begin{itemize}
    961     \item Free software
    962     \item Easy to use opportunistic encryption
    963     \item Available for Outlook, Android, Enigmail
    964     \item Spies \& spam filters can no longer inspect content
    965   \end{itemize}\vfill\pause
    966   With GNU Taler:
    967   \begin{itemize}
    968     \item Peer-to-peer payments via e-mail
    969     \item If unsolicited sender, hide messages from user \&
    970           automatically request payment from sender
    971     \item Sender can attach payment to be moved to inbox
    972     \item Receiver may grant refund to sender
    973   \end{itemize}
    974 \end{frame}
    975 
    976 
    977 
    978 \begin{frame}
    979 \frametitle{Do you have any questions?}
    980 \vfill
    981 References:
    982 {\tiny
    983   \begin{enumerate}
    984  \item{Christian Grothoff, Bart Polot and Carlo von Loesch.
    985        {\em The Internet is broken: Idealistic Ideas for Building a GNU Network}.
    986        {\bf W3C/IAB Workshop on Strengthening the Internet Against Pervasive Monitoring (STRINT)}, 2014.}
    987  \item{Jeffrey Burdges, Florian Dold, Christian Grothoff and Marcello Stanisci.
    988        {\em Enabling Secure Web Payments with GNU Taler}.
    989        {\bf SPACE 2016}.}
    990  \item{Florian Dold, Sree Harsha Totakura, Benedikt M\"uller, Jeffrey Burdges and Christian Grothoff.
    991        {\em Taler: Taxable Anonymous Libre Electronic Reserves}.
    992        Available upon request. 2016.}
    993  \item{Eli Ben-Sasson, Alessandro Chiesa, Christina Garman, Matthew Green, Ian Miers, Eran Tromer and Madars Virza.
    994        {\em Zerocash: Decentralized Anonymous Payments from Bitcoin}.
    995        {\bf IEEE Symposium on Security \& Privacy, 2016}.}
    996  \item{David Chaum, Amos Fiat and Moni Naor.
    997        {\em Untraceable electronic cash}.
    998        {\bf Proceedings on Advances in Cryptology, 1990}.}
    999   \item{Phillip Rogaway.
   1000        {\em The Moral Character of Cryptographic Work}.
   1001        {\bf Asiacrypt}, 2015.} \label{bib:rogaway}
   1002 \end{enumerate}
   1003 }
   1004 \begin{center}
   1005   {\bf Let money facilitate trade; but ensure capital serves society.}
   1006 \end{center}
   1007 \end{frame}
   1008 
   1009 
   1010 
   1011 
   1012 \end{document}
   1013 
   1014 
   1015 
   1016 
   1017 \begin{frame}{Taler {\tt /withdraw/sign}}
   1018 % Customer withdrawing coins with blind signatures
   1019 % \bigskip
   1020   \begin{figure}[th]
   1021     \begin{minipage}[b]{0.45\linewidth}
   1022       \begin{center}
   1023         \begin{tikzpicture}[scale = 0.4,
   1024             transform shape,
   1025             msglabel/.style    = { text = Black, yshift = .3cm,
   1026                                    sloped, midway },
   1027             okmsg/.style       = { ->, color = MidnightBlue, thick,
   1028                                    >=stealth },
   1029             rstmsg/.style      = { ->, color = BrickRed, thick,
   1030                                    >=stealth }
   1031           ]
   1032           \node[draw = MidnightBlue,
   1033             fill = CornflowerBlue,
   1034             minimum width = .3cm,
   1035             minimum height = 10cm
   1036           ] (h1) at (-4, 0) {};
   1037           \node[draw = MidnightBlue,
   1038             fill = CornflowerBlue,
   1039             minimum width = .3cm,
   1040             minimum height = 10cm
   1041           ] (h2) at (4, 0) {};
   1042           \node[above = 0cm of h1] {Wallet};
   1043           \node[above = 0cm of h2] {Exchange};
   1044 
   1045           \path[->, color = MidnightBlue, very thick, >=stealth]
   1046             (-5, 4.5) edge
   1047             node[rotate=90, text = Black, yshift = .3cm] {Time}
   1048             (-5, -4.5);
   1049           \path[okmsg, dashed]
   1050              ($(h1.east)+(0, 4.0)+(0, -1.0)$) edge
   1051              node[msglabel] {SEPA(RK,A)}
   1052              ($(h2.west)+(0, 3.5)+(0, -1.0)$);
   1053           \path[okmsg]
   1054             ($(h1.east)+(0, -1.0)$) edge
   1055             node[msglabel] {POST {\tt /withdraw/sign} $S_{RK}(DK, B_b(C))$}
   1056             ($(h2.west)+(0, -1.5)$);
   1057           \path[okmsg]
   1058             ($(h2.west)+(0, -2.0)$) edge
   1059             node[msglabel] {200 OK: $S_{DK}(B_b(C))$)}
   1060             ($(h1.east)+(0, -2.5)$);
   1061           \path[rstmsg]
   1062             ($(h2.west)+(0, -3.5)$) edge
   1063             node[msglabel] {402 PAYMENT REQUIRED: $S_{RK}(DK, B_b(C))$)}
   1064             ($(h1.east)+(0, -4)$);
   1065           \node at (5.3, 0) {};
   1066         \end{tikzpicture}
   1067       \end{center}
   1068       Result: $\langle c, S_{DK}(C) \rangle$.
   1069     \end{minipage}
   1070     \hspace{0.5cm}
   1071     \begin{minipage}[b]{0.45\linewidth}
   1072       \tiny
   1073       \begin{description}
   1074       \item[$A$] Some amount, $A \ge A_{DK}$
   1075       \item[$RK$] Reserve key
   1076       \item[$DK$] Denomination key
   1077       \item[$b$] Blinding factor
   1078       \item[$B_b()$] RSA-FDH blinding % DK supressed
   1079       \item[$C$] Coin public key $C := cG$
   1080       \item[$S_{RK}()$] EdDSA signature
   1081       \item[$S_{DK}()$] RSA-FDH signature
   1082       \end{description}
   1083     \end{minipage}
   1084   \end{figure}
   1085 \end{frame}
   1086 
   1087 
   1088 \begin{frame}[t]{Taler {\tt /deposit}}
   1089 Merchant and exchange see only the public coin $\langle C, S_{DK}(C) \rangle$.
   1090 \bigskip
   1091   \begin{figure}[th]
   1092     \begin{minipage}[b]{0.45\linewidth}
   1093       \begin{center}
   1094         \begin{tikzpicture}[scale = 0.4,
   1095             transform shape,
   1096             msglabel/.style    = { text = Black, yshift = .3cm,
   1097                                    sloped, midway },
   1098             okmsg/.style       = { ->, color = MidnightBlue, thick,
   1099                                    >=stealth },
   1100             rstmsg/.style      = { ->, color = BrickRed, thick,
   1101                                    >=stealth }
   1102           ]
   1103           \node[draw = MidnightBlue,
   1104             fill = CornflowerBlue,
   1105             minimum width = .3cm,
   1106             minimum height = 10cm
   1107           ] (h1) at (-4, 0) {};
   1108           \node[draw = MidnightBlue,
   1109             fill = CornflowerBlue,
   1110             minimum width = .3cm,
   1111             minimum height = 10cm
   1112           ] (h2) at (4, 0) {};
   1113           \node[above = 0cm of h1] {Merchant};
   1114           \node[above = 0cm of h2] {Exchange};
   1115 
   1116           \path[->, color = MidnightBlue, very thick, >=stealth]
   1117             (-5, 4.5) edge
   1118             node[rotate=90, text = Black, yshift = .3cm] {Time}
   1119             (-5, -4.5);
   1120           \path[->, color = MidnightBlue, thick, >=stealth]
   1121             ($(h1.east)+(0,3)$) edge
   1122             node[text = Black, yshift = .3cm, sloped] {POST {\tt /deposit} $S_{DK}(C), S_{c}(D)$}
   1123             ($(h2.west)+(0,2)$);
   1124           \path[->, color = MidnightBlue, thick, >=stealth]
   1125             ($(h2.west)+(0,0.5)$) edge
   1126             node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(S_{c}(D))$}
   1127             ($(h1.east)+(0,-0.5)$);
   1128           \path[rstmsg]
   1129             ($(h2.west)+(0, -2.5)$) edge
   1130             node[msglabel] {409 CONFLICT: $S_{c}(D')$}
   1131             ($(h1.east)+(0, -3.5)$);
   1132           \node at (5.3, 0) {};
   1133         \end{tikzpicture}
   1134       \end{center}
   1135     \end{minipage}
   1136     \hspace{0.5cm}
   1137     \begin{minipage}[b]{0.45\linewidth}
   1138       \tiny
   1139       \begin{description}
   1140       \item[$DK$] Denomination key
   1141       \item[$S_{DK}()$] RSA-FDH signature using $DK$
   1142       \item[$c$] Private coin key, $C := cG$.
   1143       \item[$S_{C}()$] EdDSA signature using $c$
   1144       \item[$D$] Deposit details
   1145       \item[$SK$] Exchange's signing key
   1146       \item[$S_{SK}()$] EdDSA signature using $SK$
   1147       \item[$D'$] Conficting deposit details $D' \not= D$
   1148       \end{description}
   1149     \end{minipage}
   1150   \end{figure}
   1151 \end{frame}
   1152 
   1153 
   1154 \begin{frame}{Taler {\tt /refresh/melt}}
   1155   \begin{figure}[th]
   1156     \begin{minipage}[b]{0.45\linewidth}
   1157       \begin{center}
   1158 	\begin{tikzpicture}[scale = 0.4,
   1159             transform shape,
   1160             msglabel/.style    = { text = Black, yshift = .3cm,
   1161                                    sloped, midway },
   1162             okmsg/.style       = { ->, color = MidnightBlue, thick,
   1163                                    >=stealth },
   1164             rstmsg/.style      = { ->, color = BrickRed, thick,
   1165                                    >=stealth }
   1166 	  ]
   1167 	  \node[draw = MidnightBlue,
   1168 	    fill = CornflowerBlue,
   1169 	    minimum width = .3cm,
   1170 	    minimum height = 10cm
   1171 	  ] (h1) at (-4, 0) {};
   1172 	  \node[draw = MidnightBlue,
   1173 	    fill = CornflowerBlue,
   1174 	    minimum width = .3cm,
   1175 	    minimum height = 10cm
   1176 	  ] (h2) at (4, 0) {};
   1177 	  \node[above = 0cm of h1] {Customer};
   1178 	  \node[above = 0cm of h2] {Exchange};
   1179 
   1180 	  \path[->, color = MidnightBlue, very thick, >=stealth]
   1181 	    (-5, 4.5) edge
   1182 	    node[rotate=90, text = Black, yshift = .3cm] {Time}
   1183 	    (-5, -4.5);
   1184 	  \path[->, color = MidnightBlue, thick, >=stealth]
   1185 	    ($(h1.east)+(0,3)$) edge
   1186 	    node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/melt} $S_{DK}(C), S_c({\cal DK}, {\cal T},{\cal B})$}
   1187 	    ($(h2.west)+(0,2)$);
   1188 	  \path[->, color = MidnightBlue, thick, >=stealth]
   1189 	    ($(h2.west)+(0,0.5)$) edge
   1190 	    node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(H({\cal T}, {\cal B}),\gamma)$}
   1191 	    ($(h1.east)+(0,-0.5)$);
   1192 	  \path[rstmsg]
   1193 	    ($(h2.west)+(0, -2.5)$) edge
   1194 	    node[msglabel] {409 CONFLICT: $S_{C}(X), \ldots$}
   1195 	    ($(h1.east)+(0, -3.5)$);
   1196 	  \node at (5.3, 0) {};
   1197 	\end{tikzpicture}
   1198       \end{center}
   1199     \end{minipage}
   1200     \hspace{0.5cm}
   1201     \begin{minipage}[b]{0.45\linewidth}
   1202       \tiny
   1203       \begin{description}
   1204       \item[$\kappa$] System-wide security parameter, usually 3.
   1205       \\ \smallskip
   1206       \item[$\cal DK$] $:= [DK^{(i)}]_i$ \\ List of denomination keys \\
   1207       $D + \sum_i A_{DK^{(i)}} < A_{DK}$
   1208       \item[$t_j$] Random scalar for $j<\kappa$
   1209       \item[${\cal T}$] $:= [T_j]_\kappa$ where $T_j = t_j G$
   1210       \item[$k_j$] $:= c T_j = t_j C$ is an ECDHE
   1211       \item[$b_j^{(i)}$] $:= KDF_b(k_j,i)$ % blinding factor
   1212       \item[$c_j^{(i)}$] $:= KDF_c(k_j,i)$ % coin secret keys
   1213       \item[$C_j^{(i)}$] $: = c_j^{(i)} G$ % new coin publics % keys
   1214       \item[${\cal B}$] $:= [H( \beta_j )]_\kappa$ where \\
   1215          $\beta_j := \left[ B_{b_j^{(i)}}(C_j^{(i)}) \right]_i$
   1216       \\ \smallskip
   1217       \item[$\gamma$] Random value in $[0,\kappa)$
   1218 %      \\ \smallskip
   1219 %      \item[$X$] Deposit or refresh
   1220       \end{description}
   1221     \end{minipage}
   1222   \end{figure}
   1223 \end{frame}
   1224 
   1225 
   1226 \begin{frame}{Taler {\tt /refresh/reveal}}
   1227   \begin{figure}[th]
   1228     \begin{minipage}[b]{0.45\linewidth}
   1229       \begin{center}
   1230 	\begin{tikzpicture}[scale = 0.4,
   1231             transform shape,
   1232             msglabel/.style    = { text = Black, yshift = .3cm,
   1233                                    sloped, midway },
   1234             okmsg/.style       = { ->, color = MidnightBlue, thick,
   1235                                    >=stealth },
   1236             rstmsg/.style      = { ->, color = BrickRed, thick,
   1237                                    >=stealth }
   1238 	  ]
   1239 	  \node[draw = MidnightBlue,
   1240 	    fill = CornflowerBlue,
   1241 	    minimum width = .3cm,
   1242 	    minimum height = 10cm
   1243 	  ] (h1) at (-4, 0) {};
   1244 	  \node[draw = MidnightBlue,
   1245 	    fill = CornflowerBlue,
   1246 	    minimum width = .3cm,
   1247 	    minimum height = 10cm
   1248 	  ] (h2) at (4, 0) {};
   1249 	  \node[above = 0cm of h1] {Customer};
   1250 	  \node[above = 0cm of h2] {Exchange};
   1251 
   1252 	  \path[->, color = MidnightBlue, very thick, >=stealth]
   1253 	    (-5, 4.5) edge
   1254 	    node[rotate=90, text = Black, yshift = .3cm] {Time}
   1255 	    (-5, -4.5);
   1256 	  \path[->, color = MidnightBlue, thick, >=stealth]
   1257 	    ($(h1.east)+(0,3)$) edge
   1258 	    node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/reveal} $H({\cal T}, {\cal B}), {\tilde{\cal T}}, \beta_\gamma$}
   1259 	    ($(h2.west)+(0,2)$);
   1260 	  \path[->, color = MidnightBlue, thick, >=stealth]
   1261 	    ($(h2.west)+(0,0.5)$) edge
   1262 	    node[text = Black, yshift = .3cm, sloped] {200 OK: $\cal S$}
   1263 	    ($(h1.east)+(0,-0.5)$);
   1264 	  \path[rstmsg]
   1265 	    ($(h2.west)+(0, -2.5)$) edge
   1266 	    node[msglabel] {400 BAD REQUEST: $Z$}
   1267 	    ($(h1.east)+(0, -3.5)$);
   1268 	  \node at (5.3, 0) {};
   1269 	\end{tikzpicture}
   1270       \end{center}
   1271     \end{minipage}
   1272     \hspace{0.5cm}
   1273     \begin{minipage}[b]{0.45\linewidth}
   1274       \tiny
   1275       \begin{description}
   1276       \item[$\cal DK$] $:= [DK^{(i)}]_i$
   1277       \item[$t_j$] .. \\ \smallskip
   1278 
   1279       \item[$\tilde{\cal T}$] $:= [t_j | j \in \kappa, j \neq \gamma]$ \\ \smallskip
   1280 
   1281       \item[$k_\gamma$] $:= c T_\gamma = t_\gamma C$
   1282       \item[$b_\gamma^{(i)}$] $:= KDF_b(k_\gamma,i)$
   1283       \item[$c_\gamma^{(i)}$] $:= KDF_c(k_\gamma,i)$
   1284       \item[$C_\gamma^{(i)}$] $: = c_\gamma^{(i)} G$
   1285 
   1286       \item[$B_\gamma^{(i)}$] $:= B_{b_\gamma^{(i)}}(C_\gamma^{(i)})$
   1287       \item[$\beta_\gamma$] $:= \big[ B_\gamma^{(i)} \big]_i$
   1288       \item[$\cal S$] $:= \left[ S_{DK^{(i)}}( B_\gamma^{(i)} ) \right]_i$ \\ \smallskip
   1289 
   1290       \item[$Z$] Cut-and-choose missmatch information
   1291       \end{description}
   1292     \end{minipage}
   1293   \end{figure}
   1294 \end{frame}
   1295 
   1296 
   1297 \begin{frame}{Taler {\tt /refresh/link}}
   1298   \begin{figure}[th]
   1299     \begin{minipage}[b]{0.45\linewidth}
   1300       \begin{center}
   1301 	\begin{tikzpicture}[scale = 0.4,
   1302             transform shape,
   1303             msglabel/.style    = { text = Black, yshift = .3cm,
   1304                                    sloped, midway },
   1305             okmsg/.style       = { ->, color = MidnightBlue, thick,
   1306                                    >=stealth },
   1307             rstmsg/.style      = { ->, color = BrickRed, thick,
   1308                                    >=stealth }
   1309 	  ]
   1310 	  \node[draw = MidnightBlue,
   1311 	    fill = CornflowerBlue,
   1312 	    minimum width = .3cm,
   1313 	    minimum height = 10cm
   1314 	  ] (h1) at (-4, 0) {};
   1315 	  \node[draw = MidnightBlue,
   1316 	    fill = CornflowerBlue,
   1317 	    minimum width = .3cm,
   1318 	    minimum height = 10cm
   1319 	  ] (h2) at (4, 0) {};
   1320 	  \node[above = 0cm of h1] {Customer};
   1321 	  \node[above = 0cm of h2] {Exchagne};
   1322 
   1323 	  \path[->, color = MidnightBlue, very thick, >=stealth]
   1324 	    (-5, 4.5) edge
   1325 	    node[rotate=90, text = Black, yshift = .3cm] {Time}
   1326 	    (-5, -4.5);
   1327 	  \path[->, color = MidnightBlue, thick, >=stealth]
   1328 	    ($(h1.east)+(0,3)$) edge
   1329 	    node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/link} $C$}
   1330 	    ($(h2.west)+(0,2)$);
   1331 	  \path[->, color = MidnightBlue, thick, >=stealth]
   1332 	    ($(h2.west)+(0,0.5)$) edge
   1333 	    node[text = Black, yshift = .3cm, sloped] {200 OK: $T_\gamma$}
   1334 	    ($(h1.east)+(0,-0.5)$);
   1335 	  \path[rstmsg]
   1336 	    ($(h2.west)+(0, -2.5)$) edge
   1337 	    node[msglabel] {404 NOT FOUND}
   1338 	    ($(h1.east)+(0, -3.5)$);
   1339 	  \node at (5.3, 0) {};
   1340 	\end{tikzpicture}
   1341       \end{center}
   1342     \end{minipage}
   1343     \hspace{0.5cm}
   1344     \begin{minipage}[b]{0.45\linewidth}
   1345       \tiny
   1346       \begin{description}
   1347       \item[$C$] Old coind public key \\ \smallskip
   1348       \item[$T_\gamma$] Linkage data $\cal L$ at $\gamma$
   1349       \end{description}
   1350     \end{minipage}
   1351   \end{figure}
   1352 \end{frame}
   1353 
   1354 
   1355 \begin{frame}{Operational security}
   1356   \begin{center}
   1357     \resizebox{\textwidth}{!}{
   1358 \begin{tikzpicture}[
   1359   font=\sffamily,
   1360   every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm},
   1361   source/.style={draw,thick,rounded corners,fill=green!20,inner sep=.3cm},
   1362   process/.style={draw,thick,circle,fill=blue!20},
   1363   sink/.style={source,fill=green!20},
   1364   datastore/.style={draw,very thick,shape=datastore,inner sep=.3cm},
   1365   dots/.style={gray,scale=2},
   1366   to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize},
   1367   every node/.style={align=center}]
   1368 
   1369   % Position the nodes using a matrix layout
   1370   \matrix{
   1371     \node[source] (wallet) {Wallet};
   1372       \& \node[process] (browser) {Browser};
   1373       \& \node[process] (shop) {Web shop};
   1374       \& \node[sink] (backend) {Taler backend}; \\
   1375   };
   1376 
   1377   % Draw the arrows between the nodes and label them.
   1378   \draw[to] (browser) to[bend right=50] node[midway,above] {(4) signed contract}
   1379       node[midway,below] {(signal)} (wallet);
   1380   \draw[to] (wallet) to[bend right=50] node[midway,above] {(signal)}
   1381       node[midway,below] {(5) signed coins} (browser);
   1382   \draw[<->] (browser) -- node[midway,above] {(3,6) custom}
   1383       node[midway,below] {(HTTPS)} (shop);
   1384   \draw[to] (shop) to[bend right=50] node[midway,above] {(HTTPS)}
   1385       node[midway,below] {(1) proposed contract / (7) signed coins} (backend);
   1386   \draw[to] (backend) to[bend right=50] node[midway,above] {(2) signed contract / (8) confirmation}
   1387       node[midway,below] {(HTTPS)} (shop);
   1388 \end{tikzpicture}
   1389 }
   1390 \end{center}
   1391 \end{frame}