marketing

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

2023-sic.tex (138579B)


      1 \pdfminorversion=3
      2 \documentclass[fleqn,xcolor={usenames,dvipsnames},handout
      3 ]{beamer}
      4 \usepackage{amsmath}
      5 \usepackage{multimedia}
      6 \usepackage[utf8]{inputenc}
      7 \usepackage{framed,color,ragged2e}
      8 \usepackage[absolute,overlay]{textpos}
      9 \definecolor{shadecolor}{rgb}{0.8,0.8,0.8}
     10 \usetheme{boxes}
     11 \setbeamertemplate{navigation symbols}{}
     12 \usepackage{xcolor}
     13 \usepackage[normalem]{ulem}
     14 \usepackage{listings}
     15 \usepackage{adjustbox}
     16 \usepackage{array}
     17 \usepackage{bbding}
     18 \usepackage{relsize}
     19 \usepackage{graphicx}
     20 \usepackage{tikz,eurosym,calc}
     21 \usetikzlibrary{tikzmark}
     22 \usetikzlibrary{shapes,arrows,arrows.meta}
     23 \usetikzlibrary{positioning,fit,patterns}
     24 \usetikzlibrary{calc}
     25 
     26 % CSS
     27 \lstdefinelanguage{CSS}{
     28   basicstyle=\ttfamily\scriptsize,
     29   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},
     30   sensitive=true,
     31   morecomment=[l]{//},
     32   morecomment=[s]{/*}{*/},
     33   morestring=[b]',
     34   morestring=[b]",
     35   alsoletter={:},
     36   alsodigit={-}
     37 }
     38 
     39 % JavaScript
     40 \lstdefinelanguage{JavaScript}{
     41   basicstyle=\ttfamily\scriptsize,
     42   morekeywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break},
     43   morecomment=[s]{/*}{*/},
     44   morecomment=[l]//,
     45   morestring=[b]",
     46   morestring=[b]'
     47 }
     48 
     49 \lstdefinelanguage{HTML5}{
     50   basicstyle=\ttfamily\scriptsize,
     51   language=html,
     52   sensitive=true,
     53   alsoletter={<>=-},
     54   morecomment=[s]{<!-}{-->},
     55   tag=[s],
     56   otherkeywords={
     57   % General
     58   >,
     59   % Standard tags
     60 	<!DOCTYPE,
     61   </html, <html, <head, <title, </title, <style, </style, <link, </head, <meta, />,
     62 	% body
     63 	</body, <body,
     64 	% Divs
     65 	</div, <div, </div>,
     66 	% Paragraphs
     67 	</p, <p, </p>,
     68 	% scripts
     69 	</script, <script,
     70   % More tags...
     71   <canvas, /canvas>, <svg, <rect, <animateTransform, </rect>, </svg>, <video, <source, <iframe, </iframe>, </video>, <image, </image>
     72   },
     73   ndkeywords={
     74   % General
     75   =,
     76   % HTML attributes
     77   charset=, src=, id=, width=, height=, style=, type=, rel=, href=,
     78   % SVG attributes
     79   fill=, attributeName=, begin=, dur=, from=, to=, poster=, controls=, x=, y=, repeatCount=, xlink:href=,
     80   % CSS properties
     81   margin:, padding:, background-image:, border:, top:, left:, position:, width:, height:,
     82 	% CSS3 properties
     83   transform:, -moz-transform:, -webkit-transform:,
     84   animation:, -webkit-animation:,
     85   transition:,  transition-duration:, transition-property:, transition-timing-function:,
     86   }
     87 }
     88 
     89 \lstdefinelanguage{JavaScript}{
     90   basicstyle=\ttfamily\scriptsize,
     91   keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, for},
     92   keywordstyle=\color{blue}\bfseries,
     93   ndkeywords={class, export, boolean, throw, implements, import, this},
     94   ndkeywordstyle=\color{darkgray}\bfseries,
     95   identifierstyle=\color{black},
     96   sensitive=false,
     97   comment=[l]{//},
     98   morecomment=[s]{/*}{*/},
     99   commentstyle=\color{purple}\ttfamily,
    100   stringstyle=\color{red}\ttfamily,
    101   morestring=[b]',
    102   morestring=[b]"
    103 }
    104 
    105 \def\checkmark{\tikz\fill[scale=0.4](0,.35) -- (.25,0) -- (1,.7) -- (.25,.15) -- cycle;}
    106 
    107 
    108 \setbeamersize{description width=1em}
    109 
    110 \definecolor{blue}{rgb}{0,0,0.7}
    111 \newcommand{\orange}[1]{{\color{orange}#1}}
    112 \newcommand{\blue}[1]{{\color{blue}#1}}
    113 \newcommand{\red}[1]{{\color{red}#1}}
    114 \newcommand{\Guardian}{\mathcal{G}}
    115 \newcommand{\Child}{\mathcal{C}}
    116 \newcommand{\Customer}{\mathcal{C}}
    117 \newcommand{\Merchant}{\mathcal{M}}
    118 \newcommand{\Exchange}{\mathcal{E}}
    119 
    120 \newcommand{\Commit}{\mathsf{Commit}}
    121 \newcommand{\Attest}{\mathsf{Attest}}
    122 \newcommand{\Verify}{\mathsf{Verify}}
    123 \newcommand{\Derive}{\mathsf{Derive}}
    124 \newcommand{\DeriveCompare}{\mathsf{DeriveCompare_\kappa}}
    125 \newcommand{\Compare}{\mathsf{Compare}}
    126 \newcommand{\AgeVer}{\mathsf{AgeVer}}
    127 
    128 \newcommand{\HashF}{\mathsf{H}}
    129 \newcommand{\Hash}{\mathsf{H}}
    130 \newcommand{\Block}{\mathbb{B}}
    131 \newcommand{\Pub}{\mathsf{Pub}}
    132 \newcommand{\Sign}{\mathsf{Sig}}
    133 \newcommand{\Ver}{\mathsf{Ver}}
    134 \newcommand{\Encoding}{\mathsf{Encoding}}
    135 \newcommand{\ECDSA}{\mathsf{ECDSA}}
    136 \newcommand{\Null}{\mathcal{O}}
    137 \newcommand{\EC}{\mathrm{ec}}
    138 \newcommand{\Curve}{\mathsf{Curve25519}}
    139 \newcommand{\SHA}{\mathsf{SHA256}}
    140 \newcommand{\SHAF}{\mathsf{SHA252}}
    141 \newcommand{\FDH}{\mathsf{FDH}}
    142 
    143 \newcommand{\negl}{\epsilon}
    144 
    145 \newcommand{\rand}{\mathsf{rand}}
    146 \newcommand{\age}{\mathsf{a}}
    147 \newcommand{\Age}{\mathsf{M}}
    148 \newcommand{\bage}{\mathsf{b}}
    149 \newcommand{\minage}{\mathsf{m}}
    150 \newcommand{\attest}{\mathsf{T}}
    151 \newcommand{\commitment}{\mathsf{Q}}
    152 \newcommand{\pruf}{\mathsf{P}}
    153 \newcommand{\Vcommitment}{\vec{\mathsf{Q}}}
    154 \newcommand{\Vpruf}{\vec{\mathsf{P}}}
    155 \newcommand{\blinding}{\beta}
    156 
    157 \newcommand{\ZN}{\mathbb{Z}_N}
    158 \newcommand{\Z}{\mathbb{Z}}
    159 \newcommand{\N}{\mathbb{N}}
    160 \newcommand{\A}{\mathbb{A}}
    161 \newcommand{\E}{\mathbb{E}}
    162 \newcommand{\F}{\mathbb{F}}
    163 \newcommand{\seck}{\mathsf{s}}
    164 \newcommand{\pubk}{\mathsf{P}}
    165 \renewcommand{\H}{\mathbb{H}}
    166 \newcommand{\K}{\mathbb{K}}
    167 \newcommand{\Proofs}{\mathbb{P}}
    168 \newcommand{\Commitments}{\mathbb{O}}
    169 \newcommand{\Attests}{\mathbb{T}}
    170 \newcommand{\Blindings}{\mathbb{B}}
    171 \newcommand{\Nil}{\perp}
    172 
    173 \newcommand{\p}{\mathsf{p}}
    174 \newcommand{\com}{\mathsf{com}}
    175 \newcommand{\prf}{\mathsf{prf}}
    176 
    177 \newcommand{\Adv}{\mathcal{A}}
    178 \newcommand{\PPT}{\mathfrak{A}}
    179 \newcommand{\Probability}{\mathrm{Pr}}
    180 \newcommand{\Algorithm}{f}
    181 \renewcommand{\Game}[1]{G_\Adv^\mathsf{#1}}
    182 
    183 \DeclareMathOperator{\Image}{Im}
    184 \DeclareMathOperator{\Mod}{mod}
    185 
    186 \newcommand{\Encode}[1]{\overbracket[0.5pt][2pt]{\,#1\,}}
    187 \newcommand{\Decode}[1]{\underbracket[0.5pt][3pt]{\,#1\,}}
    188 \newcommand{\FDHg}[1]{[#1]_g\,}
    189 \newcommand{\logg}{{\breve{g}}}
    190 
    191 
    192 \newcommand{\drawfrom}{\xleftarrow{\$}}
    193 \newcommand\Exists{%
    194 	  \mathop{\lower0.75ex\hbox{\ensuremath{%
    195 		  \mathlarger{\mathlarger{\mathlarger{\mathlarger{\exists}}}}}}}%
    196 	  \limits}
    197 
    198 \newcommand\Forall{%
    199 	  \mathop{\lower0.75ex\hbox{\ensuremath{%
    200 		  \mathlarger{\mathlarger{\mathlarger{\mathlarger{\forall}}}}}}}%
    201 	  \limits}
    202 
    203 
    204 \title{GNU Taler}
    205 %\subtitle{}
    206 
    207 \setbeamertemplate{navigation symbols}{\includegraphics[width=1cm]{inria.pdf} \includegraphics[width=1cm]{bfh.png} \includegraphics[width=1.6cm]{fub.pdf} \includegraphics[width=0.4cm]{ashoka.png}  \includegraphics[width=0.4cm]{gnu.png} \includegraphics[width=1cm]{taler-logo-2021-inkscape.pdf} \hfill}
    208 %\setbeamercovered{transparent=1}
    209 
    210 \author[C. Grothoff]{J. Burdges, {\bf F. Dold, C. Grothoff, M. Stanisci}}
    211 \date{\today}
    212 \institute{Taler Systems SA \& The GNU Project}
    213 
    214 
    215 \begin{document}
    216 
    217 \justifying
    218 
    219 \begin{frame}
    220   \begin{center}
    221     \LARGE {\bf GNU} \\
    222     \vspace{0.3cm}
    223 %    \includegraphics[width=0.66\textwidth]{logo-2017-fr.pdf}
    224     \includegraphics[width=0.66\textwidth]{taler-logo-2021-inkscape.pdf}
    225     \vfill
    226   \end{center}
    227 \begin{textblock*}{6cm}(.5cm,7.7cm) % {block width} (coords)
    228     {\Large {\bf \href{https://taler.net/}{taler.net}} \\
    229     \href{https://twitter.com/taler}{taler@twitter} \\
    230     \href{https://taler-systems.com/}{taler-systems.com}}
    231 \end{textblock*}
    232 
    233 % Substitute based on who is giving the talk!
    234  \begin{textblock*}{8cm}(4.7cm,6.7cm) % {block width} (coords)
    235    {\hfill {{\bf Dr. Emmanuel Benoist} \\
    236     \hfill {\bf Dr. Florian Dold} \\
    237     \hfill {\bf Dr. Andreas Habegger} \\
    238     \hfill {\bf Dr. Christian Grothoff} \\ }
    239     \hfill \{benoist,dold,habegger,grothoff\}@taler.net }
    240 \end{textblock*}
    241 
    242 \end{frame}
    243 
    244 \begin{frame}{GNU Taler}
    245   \vfill
    246   \begin{center}
    247     {\huge {\bf Digital} cash, made \textbf{socially responsible}.}
    248   \end{center}
    249   \vfill
    250   \begin{center}
    251   \includegraphics[scale=0.3]{taler-logo-2021-inkscape.pdf}
    252   \end{center}
    253   \vfill
    254   \begin{center}
    255     Privacy-Preserving, Practical, Taxable, Free Software, Efficient
    256   \end{center}
    257  \vfill
    258  \vfill
    259 \ %
    260 \end{frame}
    261 
    262 
    263 \begin{frame}{Agenda}
    264 \tableofcontents
    265 \end{frame}
    266 
    267 
    268 \section{Introduction}
    269 
    270 \begin{frame}
    271   \vfill
    272   \begin{center}
    273     {\bf Part I: Introduction}
    274   \end{center}
    275   \vfill
    276 \end{frame}
    277 
    278 
    279 \section{What is Taler?}
    280 \begin{frame}{What is Taler?}
    281   \framesubtitle{\url{https://taler.net/en/features.html}}  \noindent
    282 Taler is
    283   \vfill
    284   \begin{itemize}
    285     \item a Free/Libre software \emph{payment system} infrastructure project
    286     \item ... with a surrounding software ecosystem
    287     \item ... and a company (Taler Systems S.A.) and community that wants to deploy it
    288       as widely as possible.
    289   \end{itemize}
    290   \vfill
    291 \noindent
    292  However, Taler is
    293   \begin{itemize}
    294     \item \emph{not} a currency
    295     \item \emph{not} a long-term store of value
    296     \item \emph{not} a network or instance of a system
    297     \item \emph{not} decentralized
    298 %    \item \emph{not} based on proof-of-work or proof-of-stake
    299     \item combinable with a DLT back-end if requested
    300   \end{itemize}
    301 \end{frame}
    302 
    303 
    304 \begin{frame}{Design principles}
    305   \framesubtitle{https://taler.net/en/principles.html}
    306 GNU Taler must ...
    307 \begin{enumerate}
    308   \item {... be implemented as {\bf free software} (but {\em available} under a commercial license).}
    309   \item {... protect the {\bf privacy of buyers}.}
    310   \item {... must enable the state to {\bf tax income} and crack down on
    311     illegal business activities.}
    312   \item {... prevent payment fraud.}
    313   \item {... only {\bf disclose the minimal amount of information
    314     necessary}.}
    315   \item {... be usable.}
    316   \item {... be efficient.}
    317   \item {... avoid single points of failure.}
    318   \item {... foster {\bf competition} in associated services.}
    319 \end{enumerate}
    320 \end{frame}
    321 
    322 
    323 \begin{frame}
    324 \frametitle{Taler Overview}
    325 \begin{center}
    326 \begin{tikzpicture}
    327  \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em];
    328  \node (origin) at (0,0) {};
    329  \node (exchange) [def,above=of origin,draw]{Exchange};
    330  \node (customer) [def, draw, below left=of origin] {Customer};
    331  \node (merchant) [def, draw, below right=of origin] {Merchant};
    332  \node (auditor) [def, draw, above right=of origin]{Auditor};
    333 % \node (regulator) [def, draw, above=of auditor]{CSSF};
    334 
    335  \tikzstyle{C} = [color=black, line width=1pt]
    336 
    337  \draw [<-, C] (customer) -- (exchange) node [midway, above, sloped] (TextNode) {withdraw coins};
    338  \draw [<-, C] (exchange) -- (merchant) node [midway, above, sloped] (TextNode) {deposit coins};
    339  \draw [<-, C] (merchant) -- (customer) node [midway, above, sloped] (TextNode) {spend coins};
    340  \draw [<-, C] (exchange) -- (auditor) node [midway, above, sloped] (TextNode) {verify};
    341 % \draw [<-, C] (regulator) -- (auditor) node [midway, above, sloped] (TextNode) {report};
    342 
    343 \end{tikzpicture}
    344 \end{center}
    345 \end{frame}
    346 
    347 
    348 \begin{frame}{Architecture of Taler}
    349 \begin{center}
    350   \includegraphics[width=1\textwidth]{operations.png}
    351 \end{center}
    352 \end{frame}
    353 
    354 
    355 \begin{frame}{Consumer Impact of Taler}
    356 \begin{itemize}
    357 \item {\bf Convenient:} pay with one click instantly --– in Euro,
    358 Dollar, Swiss Franc or Bitcoin
    359 \item {\bf Friction-free security:} Payments do not require sign-up,
    360 login or multi-factor authentication
    361 \item {\bf Privacy-preserving:} payment requires/shares no personal information
    362 \item {\bf Bank account:} not required
    363 \end{itemize}
    364 \end{frame}
    365 
    366 
    367 \begin{frame}{Merchant Impact of Taler}
    368 \begin{itemize}
    369 \item {\bf Instant clearance:} one-click transactions and instant clearance at par
    370 \item {\bf Easy \& compliant:} GDPR \& PCI-DSS compliance-free and without any effort
    371 \item {\bf Major profit increase:} efficient protocol $+$ no fraud $=$ extremely low costs
    372 \item {\bf 1-click checkout:} without Amazon and without false
    373 positives in fraud detection
    374 \end{itemize}
    375 \end{frame}
    376 
    377 
    378 \begin{frame}{Taler: Unique Regulatory Features for Central Banks}
    379   \framesubtitle{\url{https://www.snb.ch/en/mmr/papers/id/working_paper_2021_03}}
    380   \begin{itemize}
    381     \item Central bank issues digital coins equivalent to issuing cash \\
    382           $\Rightarrow$ monetary policy remains under CB control
    383     \item Architecture with consumer accounts at commercial banks \\
    384           $\Rightarrow$ no competition for commercial banking (S\&L) \\
    385           $\Rightarrow$ CB does not have to manage KYC, customer support
    386     \item Withdrawal limits and denomination expiration \\
    387           $\Rightarrow$ protects against bank runs and hoarding
    388     \item Income transparency and possibility to set fees \\
    389           $\Rightarrow$ additional insights into economy and new policy options
    390     \item Revocation protocols and loss limitations \\
    391           $\Rightarrow$ exit strategy and handles catastrophic security incidents
    392     \item Privacy by cryptographic design not organizational compliance \\
    393           $\Rightarrow$ CB cannot be forced to facilitate mass-surveillance
    394   \end{itemize}
    395 \end{frame}
    396 
    397 
    398 \begin{frame}{Active collaborations}
    399 {\tiny
    400   \begin{description}
    401   \item {\bf Berner Fachhochschule:} \\ Snack machine \& blockchain integration \& scalability
    402   \item {\bf Technische Universit\"at Eindhoven:} \\ Post-quantum cryptography
    403   \item {\bf Freie Universit\"at Berlin:} \\ Programmability \& embedded systems
    404   \item {\bf The GNU Project}: \\ Integration into FLOSS software
    405   \item {\bf Code Blau GmbH}: \\ Independent auditor development
    406 %  \item {\bf Fraunhofer Gesellschaft}: \\ Identity management \& SSI \& wallet-to-wallet communication
    407   \item {\bf Fiscaltrust GmbH}: \\ Point-of-sale integration ({\bf
    408 new})
    409   \item {\bf Bank of International Settlements}: \\ Participation in Point Zero Forum 2023 ({\bf new})
    410   \item {\bf Oesterreichische Nationalbank AG}: \\ Joint presentation
    411 proposal for Re:publica 2023 ({\bf new})
    412   \end{description}
    413   }
    414 \end{frame}
    415 
    416 
    417 \begin{frame}{Launch Timeline}
    418   \begin{description}
    419     \item[2022] Internal deployment at BFH
    420     \item[Q1'2023] Deployment using Bitcoin at BFH (running, but not yet announced)
    421     \item[Q2-3'2023] Deployment of local currency Netzbon in Basel
    422     \item[Q3'2023] Public deployment of eCHF stablecoin in Switzerland, cleared by FINMA
    423     \item[2024] German bank executes ``new product process'' for launch in Eurozone
    424   \end{description}
    425 \end{frame}
    426 
    427 
    428 \begin{frame}{Usability of Taler}
    429   \vfill
    430   \begin{center}
    431     \url{https://demo.taler.net/}
    432   \end{center}
    433   \begin{enumerate}
    434   \item Install browser extension.
    435   \item Visit the {\tt bank.demo.taler.net} to withdraw coins.
    436   \item Visit the {\tt shop.demo.taler.net} to spend coins.
    437   \end{enumerate}
    438   \vfill
    439 \end{frame}
    440 
    441 
    442 \begin{frame}[c]{Example: The Taler Snack Machine\footnote{by M. Boss and D. Hofer}}
    443   \framesubtitle{Integration of a MDB/ICP to Taler gateway.\\Implementation of a NFC or QR-Code to Taler wallet interface.}
    444 	\vfill
    445 	\begin{figure}
    446   \centering
    447   \includegraphics[width=1.0\textwidth]{design}
    448   \end{figure}
    449 \end{frame}
    450 
    451 
    452 \begin{frame}[c]{User story: Install App on Android}
    453 \framesubtitle{\url{https://wallet.taler.net/}}
    454 		\begin{figure}
    455 			\includegraphics[width=0.8\textwidth]{download_wallet.png}
    456 		\end{figure}
    457 \end{frame}
    458 
    459 \begin{frame}{User story: Withdraw e-cash}
    460 		\begin{figure}
    461 			\includegraphics[width=0.8\textwidth]{get_taler_coins.png}
    462 		\end{figure}
    463 \end{frame}
    464 
    465 \begin{frame}{User story: Use machine!}
    466 		\begin{figure}
    467 			\includegraphics[width=0.8\textwidth]{get_snacks.png}
    468 		\end{figure}
    469 \end{frame}
    470 
    471 
    472 \section{Component Zoo}
    473 
    474 \begin{frame}
    475   \vfill
    476   \begin{center}
    477     {\bf Part II: Component Zoo}
    478   \end{center}
    479   \vfill
    480 \end{frame}
    481 
    482 
    483 \begin{frame}{The Taler Software Ecosystem: Overview}
    484   \framesubtitle{\url{https://taler.net/en/docs.html}}
    485   Taler is based on modular components that work together to provide a
    486   complete payment system:
    487   \vfill
    488   \begin{itemize}
    489     \item {\bf Exchange:} Service provider for digital cash
    490       \begin{itemize}
    491         \item Core exchange software (cryptography, database)
    492         \item Air-gapped key management, real-time {\bf auditing}
    493         \item {\bf LibEuFin}: Modular integration with banking systems
    494       \end{itemize}
    495     \item {\bf Merchant:} Integration service for existing businesses
    496       \begin{itemize}
    497         \item Core merchant backend software (cryptography, database)
    498         \item {\bf Back-office interface} for staff
    499         \item {\bf Frontend integration} (E-commerce, Point-of-sale)
    500       \end{itemize}
    501     \item {\bf Wallet:} Consumer-controlled applications for e-cash
    502       \begin{itemize}
    503         \item Multi-platform wallet software (for browsers \& mobile phones)
    504         \item Wallet backup storage providers ({\bf sync})
    505         \item {\bf Anastasis}: Recovery of lost wallets based on secret splitting
    506       \end{itemize}
    507   \end{itemize}
    508 \end{frame}
    509 
    510 
    511 \begin{frame}{Taler Exchange}
    512   The {\bf Exchange} is the core logic of the payment system.
    513 
    514   \begin{itemize}
    515     \item One exchange at minimum must be operated per currency
    516     \item Offers a REST API for merchants and customers
    517     \item Uses several helper processes for configuration and to
    518           interact with RTGS and cryptography
    519     \item KYC support via OAuth 2.0, KycAID or Persona APIs
    520     \item Implemented in C on top of GNU libmicrohttpd
    521   \end{itemize}
    522   Scalability: 28'500 transactions/second measured % in BS-thesis
    523   in 2022 using two servers on Grid5000. Likely several times
    524   higher today (but we did not re-measure recently).
    525 \end{frame}
    526 
    527 
    528 \begin{frame}{Taler Merchant}
    529   The {\bf Merchant} is the software run by merchants to accept\\
    530   GNU Taler payments.
    531 
    532   \begin{minipage}{6cm}
    533   \begin{itemize}
    534     \item REST API for integration with e-commerce
    535     \item SPA provides Web interface for administration
    536     \item Features include:
    537       \begin{itemize}
    538       \item Multi-tenant support
    539       \item Refunds
    540       \item Tipping (Website pays visitor)
    541       \item Webhooks
    542       \item Inventory management (optional)
    543       \end{itemize}
    544     \item Implemented in C on top of GNU libmicrohttpd
    545   \end{itemize}
    546   \end{minipage}
    547   \begin{minipage}{5cm}
    548   \includegraphics[width=5cm]{screenshots/merchant-spa-settings}
    549   \end{minipage}
    550 \end{frame}
    551 
    552 
    553 \begin{frame}{Taler Wallet}
    554   The {\bf Wallet} is the software run by consumers to store
    555   their digital cash and authorize transactions.
    556 
    557   \begin{minipage}{8cm}
    558   \begin{itemize}
    559     \item {\bf wallet-core} is the logic shared by all interfaces
    560     \item Applications exist for Android, F-Droid,
    561           WebExtension (Chrome, Chromium, Firefox, etc.), iOS ({\bf WiP})
    562     \item Features include:
    563       \begin{itemize}
    564       \item Multi-currency support
    565       \item Wallet-to-wallet payments (NFC or QR code)
    566       \item CRDT-like data model
    567       \end{itemize}
    568     \item {\bf wallet-core} implemented in TypeScript
    569   \end{itemize}
    570   Can be integrated into other Apps if desired.
    571   \end{minipage}
    572   \begin{minipage}{3cm}
    573   \includegraphics[width=3cm]{screenshots/Screenshot_20230225-103520.png}
    574   \end{minipage}
    575 \end{frame}
    576 
    577 
    578 \begin{frame}{Taler Auditor}
    579   The {\bf Auditor} is the software run by an independent auditor
    580   to validate the operation of an Exchange.
    581 
    582   \begin{itemize}
    583     \item REST API for additional report inputs by merchants (optional)
    584     \item Secure database replication logic
    585     \item Implemented in C on top of GNU libmicrohttpd
    586   \end{itemize}
    587 \end{frame}
    588 
    589 
    590 \begin{frame}{Pretix Taler payment plugin}
    591 \begin{center}
    592 \includegraphics[width=0.5\textwidth]{screenshots/pretix.png}
    593 \end{center}
    594 
    595   Pretix is a ticket sales system.
    596 
    597   \begin{itemize}
    598     \item Pretix payment plugin enables payments via GNU Taler
    599     \item Developed by Pretix.eu for \EUR{3,000} on behalf of Taler Systems SA
    600   \end{itemize}
    601 \end{frame}
    602 
    603 
    604 \begin{frame}{WooCommerce Taler payment plugin}
    605 \begin{minipage}{6cm}
    606   \begin{itemize}
    607     \item WooCommerce is an e-commerce plugin for WordPress.
    608     \item WooCommerce payment plugin enables payments via GNU Taler
    609     \item Features include:
    610       \begin{itemize}
    611       \item Trivial configuration
    612       \item Support for refunds
    613       \item Full internationalization
    614       \end{itemize}
    615     \item WooCommerce and its plugins are implemented in PHP
    616   \end{itemize}
    617 \end{minipage}
    618 \begin{minipage}{5cm}
    619   \includegraphics[width=4cm]{screenshots/woocommerce-cart.png}
    620   \includegraphics[width=4cm]{screenshots/woocommerce-settings.png}
    621   \end{minipage}
    622 \end{frame}
    623 
    624 
    625 \begin{frame}{Point-of-Sale App for Android}
    626 
    627 \begin{minipage}{7cm}
    628   \begin{itemize}
    629     \item Allows merchant to generate orders against Taler backend
    630           and display QR code to enable customer to pay in person
    631     \item Patterned after ViewTouch restaurant UI
    632     \item Features include:
    633       \begin{itemize}
    634       \item Internet-based configuration
    635       \item Products sorted by categories
    636       \item Easy undo of every operation
    637       \item Manages multiple concurrent orders
    638       \end{itemize}
    639     \item The Point-of-Sale App is implemented in Kotlin
    640   \end{itemize}
    641 \end{minipage}
    642 \begin{minipage}{4cm}
    643   \includegraphics[width=4cm]{screenshots/Screenshot_20230224-194112.jpg}
    644   \includegraphics[width=4cm]{screenshots/Screenshot_20230224-194119.jpg}
    645   \includegraphics[width=4cm]{screenshots/Screenshot_20230224-195348.jpg}
    646 \end{minipage}
    647 \end{frame}
    648 
    649 
    650 \begin{frame}{LibEuFin}
    651   LibEuFin is a standalone project that provides adapters to bank account
    652   access APIs.
    653 
    654   \begin{itemize}
    655     \item LibEuFin provides both a generic access layer and an
    656       implementation of the Wire Gateway for the exchange
    657     \item Supports EBICS 2.5
    658     \item other APIs such as FinTS or PSD2-style XS2A APIs can be added
    659       without requiring changes to the Exchange
    660     \item tested with German bank GLS business account and real Euros
    661   \end{itemize}
    662   \vfill
    663   \begin{itemize}
    664     \item \texttt{libeufin-nexus} is the main service
    665     \item Almost all configuration (except DB credentials)
    666       is stored in the database and managed via a RESTful HTTP API
    667     \item \texttt{libeufin-sandbox} implements a toy EBICS host for protocol
    668       testing
    669     \item \texttt{libeufin-cli} is client for the HTTP API (only implements a subset
    670       of available functionality)
    671   \end{itemize}
    672 \end{frame}
    673 
    674 
    675 \begin{frame}{Cashier App for Android}
    676 \begin{minipage}{4cm}
    677   \begin{itemize}
    678     \item Enables BFH staff to convert cash to e-cash
    679     \item Staff has special bank accounts with limited funds
    680     \item Students can pay staff in cash to receive e-cash
    681     \item The Cashier App is implemented in Kotlin
    682   \end{itemize}
    683   \end{minipage}
    684   \begin{minipage}{3cm}
    685   \includegraphics[width=3cm]{screenshots/Screenshot_20230225-103315.png}
    686   \end{minipage}
    687   \begin{minipage}{3cm}
    688   \includegraphics[width=3cm]{screenshots/Screenshot_20230225-103325.png}
    689   \end{minipage}
    690 \end{frame}
    691 
    692 
    693 \begin{frame}{Depolymerization}
    694   Depolymerization is a bridge between GNU Taler and blockchains,
    695   making Taler a layer 2 system for crypto-currencies (like Lightning).
    696 
    697   \begin{itemize}
    698     \item Currently implemented for Bitcoin and Ethereum
    699           crypto-currencies, with the DLTs as the ``RTGS''
    700     \item Provides same API to Exchange as LibEuFin
    701 %   \item Transaction rate and speed limited by the underlying blockchain
    702     \item Implemented in Rust
    703   \end{itemize}
    704   \begin{center}
    705       \url{https://bitcoin.ice.bfh.ch/}
    706   \end{center}
    707 \end{frame}
    708 
    709 
    710 \begin{frame}{TalDir (WiP)}
    711   TalDir is an extension to the existing
    712   peer-to-peer payment functionality.
    713 
    714   \begin{itemize}
    715     \item Registry to associate wallets with network addresses
    716     \item Extensible to different types of network services:
    717       \begin{itemize}
    718     \item E-mail
    719     \item SMS
    720     \item Twitter
    721     \item ...
    722      \end{itemize}
    723     \item Send payments or invoices to wallets associated with network address
    724     \item Will {\bf not} require sending wallet to use same network service
    725   \end{itemize}
    726 \end{frame}
    727 
    728 
    729 
    730 \section{Basic Cryptography}
    731 
    732 \begin{frame}
    733   \vfill
    734   \begin{center}
    735     {\bf Part III: Basic Cryptography}
    736   \end{center}
    737   \vfill
    738 \end{frame}
    739 
    740 
    741 
    742 
    743 \begin{frame}{How does it work?}
    744 We use a few well established and tested constructions:
    745   \begin{itemize}
    746   \item Cryptographic hash function (1989)
    747   \item Blind signature (1983)
    748   \item Schnorr signature (1989)
    749   \item Diffie-Hellman key exchange (1976)
    750   \item Cut-and-choose zero-knowledge proof (1985)
    751   \end{itemize}
    752 But of course we use modern instantiations.
    753 \end{frame}
    754 
    755 
    756 \begin{frame}<1-| handout:0>{Definition: Taxability}
    757   We say Taler is taxable because:
    758   \begin{itemize}
    759   \item Merchant's income is visible from deposits.
    760   \item Hash of contract is part of deposit data.
    761   \item State can trace income and enforce taxation.
    762   \end{itemize}\pause
    763   Limitations:
    764   \begin{itemize}
    765   \item withdraw loophole
    766   \item {\em sharing} coins among family and friends
    767   \end{itemize}
    768 \end{frame}
    769 
    770 
    771 \begin{frame}<1-| handout:0>{Exchange setup: Create a denomination key (RSA)}
    772    \begin{minipage}{6cm}
    773     \begin{enumerate}
    774     \item Pick random primes $p,q$.
    775     \item Compute $n := pq$, $\phi(n) = (p-1)(q-1)$
    776     \item Pick small $e < \phi(n)$ such that
    777           $d := e^{-1} \mod \phi(n)$ exists.
    778     \item Publish public key $(e,n)$.
    779     \end{enumerate}
    780   \end{minipage}
    781   \begin{minipage}{6cm}
    782   \begin{tikzpicture}
    783  \tikzstyle{def} = [node distance=1em and 1em, inner sep=0em, outer sep=.3em];
    784     \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}};
    785     \node (primes) [draw=none, below = of origin] at (0,0) {$(p, q)$};
    786     \node (seal) [def, draw=none, below left=of primes]{\includegraphics[width=0.15\textwidth]{seal.pdf}};
    787     \node (hammer) [def, draw=none, below right=of primes]{\includegraphics[width=0.15\textwidth]{hammer.pdf}};
    788 
    789     \tikzstyle{C} = [color=black, line width=1pt]
    790 
    791     \draw [<-, C] (primes) -- (origin) node [midway, above, sloped] (TextNode) {};
    792     \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {};
    793     \draw [<-, C] (hammer) -- (primes) node [midway, above, sloped] (TextNode) {};
    794   \end{tikzpicture}
    795 %  \includegraphics[width=0.4\textwidth]{seal.pdf}
    796   \end{minipage}
    797 \end{frame}
    798 
    799 
    800 \begin{frame}<1-| handout:0>{Merchant: Create a signing key (EdDSA)}
    801   \begin{minipage}{6cm}
    802     \begin{itemize}
    803   \item pick random $m \mod o$ as private key
    804   \item $M = mG$ public key
    805   \end{itemize}
    806   \end{minipage}
    807   \begin{minipage}{6cm}
    808   \begin{tikzpicture}
    809    \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em];
    810     \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}};
    811     \node (m) [draw=none, below = of origin] at (0,0) {$m$};
    812     \node (seal) [draw=none, below=of m]{M};
    813    \tikzstyle{C} = [color=black, line width=1pt]
    814 
    815     \draw [<-, C] (m) -- (origin) node [midway, above, sloped] (TextNode) {};
    816     \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {};
    817   \end{tikzpicture}
    818   \end{minipage}
    819   \parbox[t]{3cm}{{\bf Capability:} $m \Rightarrow$ }
    820   \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{merchant-sign.pdf}}
    821 \end{frame}
    822 
    823 
    824 \begin{frame}<1-| handout:0>{Customer: Create a planchet (EdDSA)}
    825   \begin{minipage}{8cm}
    826   \begin{itemize}
    827   \item Pick random $c \mod o$ private key
    828   \item $C = cG$ public key
    829   \end{itemize}
    830   \end{minipage}
    831   \begin{minipage}{4cm}
    832   \begin{tikzpicture}
    833    \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em];
    834     \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}};
    835     \node (c) [draw=none, below = of origin] at (0,0) {$c$};
    836     \node (planchet) [draw=none, below=of c]{\includegraphics[width=0.4\textwidth]{planchet.pdf}};
    837     \tikzstyle{C} = [color=black, line width=1pt]
    838 
    839     \draw [<-, C] (c) -- (origin) node [midway, above, sloped] (TextNode) {};
    840     \draw [<-, C] (planchet) -- (c) node [midway, above, sloped] (TextNode) {};
    841   \end{tikzpicture}
    842   \end{minipage}
    843   \parbox[t]{3cm}{{\bf Capability:} $c \Rightarrow$ }
    844   \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{planchet-sign.pdf}}
    845 \end{frame}
    846 
    847 
    848 \begin{frame}<1-| handout:0>{Customer: Blind planchet (RSA)}
    849   \begin{minipage}{6cm}
    850     \begin{enumerate}
    851     \item Obtain public key $(e,n)$
    852     \item Compute $f := FDH(C)$, $f < n$.
    853     \item Pick blinding factor $b \in \mathbb Z_n$
    854     \item Transmit $f' := f b^e \mod n$
    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 (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}};
    861     \node (b) [def, draw=none, below = of origin] at (0,-0.2) {$b$};
    862     \node (blinded) [def, draw=none, below right=of b]{\includegraphics[width=0.2\textwidth]{blinded.pdf}};
    863     \node (planchet) [def, draw=none, above right=of blinded]{\includegraphics[width=0.15\textwidth]{planchet.pdf}};
    864     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
    865     \tikzstyle{C} = [color=black, line width=1pt]
    866 
    867     \draw [<-, C] (b) -- (origin) node [midway, above, sloped] (TextNode) {};
    868     \draw [<-, C] (blinded) -- (planchet) node [midway, above, sloped] (TextNode) {};
    869     \draw [<-, C] (blinded) -- (b) node [midway, above, sloped] (TextNode) {};
    870     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
    871   \end{tikzpicture}
    872   \end{minipage}
    873 \end{frame}
    874 
    875 
    876 \begin{frame}<1-| handout:0>{Exchange: Blind sign (RSA)}
    877    \begin{minipage}{6cm}
    878     \begin{enumerate}
    879     \item Receive $f'$.
    880     \item Compute $s' := f'^d \mod n$.
    881     \item Send signature $s'$.
    882     \end{enumerate}
    883    \end{minipage}
    884   \begin{minipage}{6cm}
    885   \begin{tikzpicture}
    886    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
    887     \node (hammer) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{hammer.pdf}};
    888     \node (signed) [def, draw=none, below left=of hammer]{\includegraphics[width=0.2\textwidth]{sign.pdf}};
    889     \node (blinded) [def, draw=none, above left=of signed]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
    890     \node (customer) [node distance=4em and 0.5em, draw, below =of signed]{Customer};
    891     \tikzstyle{C} = [color=black, line width=1pt]
    892 
    893     \draw [<-, C] (signed) -- (hammer) node [midway, above, sloped] (TextNode) {};
    894     \draw [<-, C] (signed) -- (blinded) node [midway, above, sloped] (TextNode) {};
    895     \draw [<-, C] (customer) -- (signed) node [midway, above, sloped] (TextNode) {{\small transmit}};
    896   \end{tikzpicture}
    897   \end{minipage}
    898 \end{frame}
    899 
    900 
    901 \begin{frame}<1-| handout:0>{Customer: Unblind coin (RSA)}
    902   \begin{minipage}{6cm}
    903    \begin{enumerate}
    904     \item Receive $s'$.
    905     \item Compute $s := s' b^{-1} \mod n$ % \\
    906     % ($(f')^d = (f b^e)^d = f^d b$).
    907     \end{enumerate}
    908    \end{minipage}
    909   \begin{minipage}{6cm}
    910   \begin{tikzpicture}
    911    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
    912     \node (b) [def, draw=none] at (0,0) {$b$};
    913     \node (coin) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{coin.pdf}};
    914     \node (signed) [def, draw=none, above left=of coin]{\includegraphics[width=0.15\textwidth]{sign.pdf}};
    915     \tikzstyle{C} = [color=black, line width=1pt]
    916 
    917     \draw [<-, C] (coin) -- (b) node [midway, above, sloped] (TextNode) {};
    918     \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {};
    919   \end{tikzpicture}
    920   \end{minipage}
    921 \end{frame}
    922 
    923 \begin{frame}{Withdrawing coins on the Web}
    924   \begin{center}
    925     \includegraphics[height=0.9\textheight]{figs/taler-withdraw.pdf}
    926   \end{center}
    927 \end{frame}
    928 
    929 
    930 \begin{frame}<1-| handout:0>{Customer: Build shopping cart}
    931   \begin{center}
    932   \begin{tikzpicture}
    933    \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em];
    934     \node (origin) at (0,0) {\includegraphics[width=0.18\textwidth]{shop.pdf}};
    935     \node (cart) [draw=none, below=of m]{\includegraphics[width=0.18\textwidth]{cart.pdf}};
    936     \node (merchant) [node distance=4em and 0.5em, draw, below =of cart]{Merchant};
    937     \tikzstyle{C} = [color=black, line width=1pt];
    938     \draw [<-, C] (cart) -- (origin) node [midway, above, sloped] (TextNode) {};
    939     \draw [<-, C] (merchant) -- (cart) node [midway, above, sloped] (TextNode) {{\small transmit}};
    940   \end{tikzpicture}
    941   \end{center}
    942 \end{frame}
    943 
    944 
    945 \begin{frame}<1-| handout:0>{Merchant Integration: Payment Request}
    946 % \begin{figure}[p!]
    947  \lstset{language=HTML5}
    948  \lstinputlisting{figs/taler-402.html}
    949 %  \caption{Sample HTTP response to prompt the wallet to show an offer.}
    950 %   \label{listing:http-contract}
    951 % \end{figure}
    952 
    953 % \begin{figure*}[p!]
    954 % \lstset{language=HTML5}
    955 % \lstinputlisting{figs/taler-contract.html}
    956 % \caption{Sample JavaScript code to prompt the wallet to show an offer.
    957 %          Here, the contract is fetched on-demand from the server.
    958 %          The {\tt taler\_pay()} function needs to be invoked
    959 %          when the user triggers the checkout.}
    960 % \label{listing:contract}
    961 % \end{figure*}
    962 \end{frame}
    963 
    964 
    965 
    966 \begin{frame}<1-| handout:0>{Merchant: Propose contract (EdDSA)}
    967    \begin{minipage}{6cm}
    968    \begin{enumerate}
    969     \item Complete proposal $D$.
    970     \item Send $D$, $EdDSA_m(D)$
    971     \end{enumerate}
    972    \end{minipage}
    973   \begin{minipage}{6cm}
    974   \begin{tikzpicture}
    975    \tikzstyle{def} = [node distance=2em and 0.5em, inner sep=0em, outer sep=.3em];
    976     \node (cart) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{cart.pdf}};
    977     \node (proposal) [def, draw=none, below right=of cart]{\includegraphics[width=0.5\textwidth]{merchant_propose.pdf}};
    978     \node (customer) [node distance=4em and 0.5em, draw, below =of proposal]{Customer};
    979     \tikzstyle{C} = [color=black, line width=1pt];
    980     \node (sign) [def, draw=none, above right=of proposal] {$m$};
    981     \tikzstyle{C} = [color=black, line width=1pt]
    982 
    983     \draw [<-, C] (proposal) -- (sign) node [midway, above, sloped] (TextNode) {};
    984     \draw [<-, C] (proposal) -- (cart) node [midway, above, sloped] (TextNode) {};
    985     \draw [<-, C] (customer) -- (proposal) node [midway, above, sloped] (TextNode) {{\small transmit}};
    986   \end{tikzpicture}
    987   \end{minipage}
    988 \end{frame}
    989 
    990 
    991 \begin{frame}<1-| handout:0>{Customer: Spend coin (EdDSA)}
    992   \begin{minipage}{6cm}
    993    \begin{enumerate}
    994     \item Receive proposal $D$, $EdDSA_m(D)$.
    995     \item Send $s$, $C$, $EdDSA_c(D)$
    996     \end{enumerate}
    997    \end{minipage}
    998   \begin{minipage}{6cm}
    999   \begin{tikzpicture}
   1000    \tikzstyle{def} = [node distance=2em and 0.4em, inner sep=0em, outer sep=.3em];
   1001     \node (proposal) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{merchant_propose.pdf}};
   1002     \node (contract) [def, draw=none, below right=of cart]{\includegraphics[width=0.3\textwidth]{contract.pdf}};
   1003     \node (c) [def, draw=none, above=of contract] {$c$};
   1004     \node (merchant) [node distance=4em and 0.5em, draw, below=of contract]{Merchant};
   1005     \node (coin) [def, draw=none, right=of contract]{\includegraphics[width=0.2\textwidth]{coin.pdf}};
   1006     \tikzstyle{C} = [color=black, line width=1pt]
   1007 
   1008     \draw [<-, C] (contract) -- (c) node [midway, above, sloped] (TextNode) {};
   1009     \draw [<-, C] (contract) -- (proposal) node [midway, above, sloped] (TextNode) {};
   1010     \draw [<-, C] (merchant) -- (contract) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1011     \draw [<-, C] (merchant) -- (coin) node [midway, below, sloped] (TextNode) {{\small transmit}};
   1012   \end{tikzpicture}
   1013   \end{minipage}
   1014 \end{frame}
   1015 
   1016 
   1017 \begin{frame}<1-| handout:0>{Merchant and Exchange: Verify coin (RSA)}
   1018    \begin{minipage}{6cm}
   1019  \begin{equation*}
   1020    s^e \stackrel{?}{\equiv} FDH(C) \mod n
   1021    \end{equation*}
   1022    \end{minipage}
   1023   \begin{minipage}{6cm}
   1024   \begin{minipage}{0.2\textwidth}
   1025     \includegraphics[width=\textwidth]{coin.pdf}
   1026   \end{minipage}
   1027   $\stackrel{?}{\Leftrightarrow}$
   1028   \begin{minipage}{0.2\textwidth}
   1029     \includegraphics[width=\textwidth]{seal.pdf}
   1030   \end{minipage}
   1031   \end{minipage}
   1032   \vfill
   1033   The exchange does not only verify the signature, but also
   1034   checks that the coin was not double-spent.
   1035   \vfill
   1036   \pause
   1037   \begin{center}
   1038   {\bf This step requires communication with the exchange.}
   1039   \end{center}
   1040   \vfill
   1041 \end{frame}
   1042 
   1043 
   1044 \begin{frame}{Payment processing with Taler}
   1045   \begin{center}
   1046     \includegraphics[height=0.9\textheight]{figs/taler-pay.pdf}
   1047   \end{center}
   1048 \end{frame}
   1049 
   1050 
   1051 \section{Giving Change}
   1052 
   1053 \begin{frame}
   1054   \vfill
   1055   \begin{center}
   1056     {\bf Part IV: Giving Change}
   1057   \end{center}
   1058   \vfill
   1059 \end{frame}
   1060 
   1061 
   1062 \begin{frame}{Giving change}
   1063   It would be inefficient to pay EUR 100 with 1 cent coins!
   1064   \begin{itemize}
   1065   \item Denomination key represents value of a coin.
   1066   \item Exchange may offer various denominations for coins.
   1067   \item Wallet may not have exact change!
   1068   \item Usability requires ability to pay given sufficient total funds.
   1069   \end{itemize}\pause
   1070   Key goals:
   1071   \begin{itemize}
   1072   \item maintain unlinkability
   1073   \item maintain taxability of transactions
   1074   \end{itemize}\pause
   1075   Method:
   1076   \begin{itemize}
   1077     \item Contract can specify to only pay {\em partial value} of a coin.
   1078     \item Exchange allows wallet to obtain {\em unlinkable change}
   1079       for remaining coin value.
   1080   \end{itemize}
   1081 \end{frame}
   1082 
   1083 
   1084 \begin{frame}<1-| handout:0>{Diffie-Hellman (ECDH)}
   1085   \begin{minipage}{8cm}
   1086    \begin{enumerate}
   1087     \item Create private keys $c,t \mod o$
   1088     \item Define $C = cG$
   1089     \item Define $T = tG$
   1090     \item Compute DH \\ $cT = c(tG) = t(cG) = tC$
   1091     \end{enumerate}
   1092    \end{minipage}
   1093   \begin{minipage}{6cm}
   1094   \begin{tikzpicture}
   1095    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
   1096     \node (t) [def, draw=none] at (0,0) {$t$};
   1097     \node (ct) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{dh.pdf}};
   1098     \node (c) [def, draw=none, above left= of ct]  {$c$};
   1099     \tikzstyle{C} = [color=black, line width=1pt]
   1100 
   1101     \draw [<-, C] (ct) -- (c) node [midway, above, sloped] (TextNode) {};
   1102     \draw [<-, C] (ct) -- (t) node [midway, above, sloped] (TextNode) {};
   1103   \end{tikzpicture}
   1104   \end{minipage}
   1105 \end{frame}
   1106 
   1107 
   1108 \begin{frame}<1-| handout:0>{Strawman solution}
   1109   \begin{minipage}{8cm}
   1110     Given partially spent private coin key $c_{old}$:
   1111    \begin{enumerate}
   1112 %    \item Let $C_{old} := c_{old}G$ (as before)
   1113     \item Pick random $c_{new} \mod o$ private key
   1114     \item $C_{new} = c_{new}G$ public key
   1115     \item Pick random $b_{new}$
   1116     \item Compute $f_{new} := FDH(C_{new})$, $m < n$.
   1117     \item Transmit $f'_{new} := f_{new} b_{new}^e \mod n$
   1118    \end{enumerate}
   1119    ... and sign request for change with $c_{old}$.
   1120    \end{minipage}
   1121   \begin{minipage}{4cm}
   1122   \begin{tikzpicture}
   1123    \tikzstyle{def} = [node distance= 1.5em and 0.45em, inner sep=0em, outer sep=.3em];
   1124     \node (blinded) [def, draw=none]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1125     \node (planchet) [def, draw=none, above left= of blinded]  {\includegraphics[width=0.15\textwidth]{planchet.pdf}};
   1126     \node (cnew) [def, draw=none, above= of planchet]  {$c_{new}$};
   1127     \node (bnew) [def, draw=none, above right= of blinded]  {$b_{new}$};
   1128     \node (dice1) [def, draw=none, above = of cnew]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
   1129     \node (dice2) [def, draw=none, above = of bnew]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
   1130     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
   1131 
   1132     \tikzstyle{C} = [color=black, line width=1pt]
   1133 
   1134     \draw [<-, C] (cnew) -- (dice1) node [midway, above, sloped] (TextNode) {};
   1135     \draw [<-, C] (planchet) -- (cnew) node [midway, above, sloped] (TextNode) {};
   1136     \draw [<-, C] (bnew) -- (dice2) node [midway, above, sloped] (TextNode) {};
   1137     \draw [<-, C] (blinded) -- (planchet) node [midway, above, sloped] (TextNode) {};
   1138     \draw [<-, C] (blinded) -- (bnew) node [midway, above, sloped] (TextNode) {};
   1139     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1140   \end{tikzpicture}
   1141   \end{minipage}
   1142   \pause
   1143   \vfill
   1144   {\bf Problem: Owner of $c_{new}$ may differ from owner of $c_{old}$!}
   1145 \end{frame}
   1146 
   1147 
   1148 \begin{frame}<1-| handout:0>{Customer: Transfer key setup (ECDH)}
   1149   \begin{minipage}{8cm}
   1150     Given partially spent private coin key $c_{old}$:
   1151    \begin{enumerate}
   1152     \item Let $C_{old} := c_{old}G$ (as before)
   1153     \item Create random private transfer key $t \mod o$
   1154     \item Compute $T := tG$
   1155     \item Compute $X := c_{old}(tG) = t(c_{old}G) = tC_{old}$
   1156     \item Derive $c_{new}$ and $b_{new}$ from $X$
   1157     \item Compute $C_{new} := c_{new}G$
   1158     \item Compute $f_{new} := FDH(C_{new})$
   1159     \item Transmit $f_{new}' := f_{new} b_{new}^e$
   1160     \end{enumerate}
   1161    \end{minipage}
   1162   \begin{minipage}{4cm}
   1163   \begin{tikzpicture}
   1164    \tikzstyle{def} = [node distance= 1.4em and 0.45em, inner sep=0em, outer sep=.3em];
   1165     \node (t) [def, draw=none] at (0,0) {$t$};
   1166     \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
   1167     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1168     \node (d) [def, draw=none, above left= of dh]  {$c_{old}$};
   1169     \node (cp) [def, draw=none, below left= of dh]  {$c_{new}$};
   1170     \node (bp) [def, draw=none, below right= of dh]  {$b_{new}$};
   1171     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1172     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
   1173 
   1174     \tikzstyle{C} = [color=black, line width=1pt]
   1175 
   1176     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
   1177     \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {};
   1178     \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {};
   1179     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1180     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1181     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
   1182     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
   1183     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1184   \end{tikzpicture}
   1185   \end{minipage}
   1186 \end{frame}
   1187 
   1188 
   1189 \begin{frame}<1-| handout:0>{Cut-and-Choose}
   1190   \begin{minipage}{4cm}
   1191   \begin{tikzpicture}
   1192    \tikzstyle{def} = [node distance= 1.4em and 0.45em, inner sep=0em, outer sep=.3em];
   1193     \node (t) [def, draw=none] at (0,0) {$t_1$};
   1194     \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
   1195     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1196     \node (d) [def, draw=none, above left= of dh]  {$c_{old}$};
   1197     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,1}$};
   1198     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,1}$};
   1199     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1200     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
   1201 
   1202     \tikzstyle{C} = [color=black, line width=1pt]
   1203 
   1204     \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {};
   1205     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
   1206     \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {};
   1207     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1208     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1209     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
   1210     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
   1211     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1212   \end{tikzpicture}
   1213   \end{minipage}
   1214   \begin{minipage}{4cm}
   1215   \begin{tikzpicture}
   1216    \tikzstyle{def} = [node distance= 1.4em and 0.45em, inner sep=0em, outer sep=.3em];
   1217     \node (t) [def, draw=none] at (0,0) {$t_2$};
   1218     \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
   1219     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1220     \node (d) [def, draw=none, above left= of dh]  {$c_{old}$};
   1221     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,2}$};
   1222     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,2}$};
   1223     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1224     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
   1225 
   1226     \tikzstyle{C} = [color=black, line width=1pt]
   1227 
   1228     \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {};
   1229     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
   1230     \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {};
   1231     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1232     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1233     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
   1234     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
   1235     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1236   \end{tikzpicture}
   1237   \end{minipage}
   1238   \begin{minipage}{4cm}
   1239   \begin{tikzpicture}
   1240    \tikzstyle{def} = [node distance= 1.4em and 0.45em, inner sep=0em, outer sep=.3em];
   1241     \node (t) [def, draw=none] at (0,0) {$t_3$};
   1242     \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
   1243     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1244     \node (d) [def, draw=none, above left= of dh]  {$c_{old}$};
   1245     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,3}$};
   1246     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,3}$};
   1247     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1248     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
   1249 
   1250     \tikzstyle{C} = [color=black, line width=1pt]
   1251 
   1252     \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {};
   1253     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
   1254     \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {};
   1255     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1256     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1257     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
   1258     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
   1259     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1260   \end{tikzpicture}
   1261   \end{minipage}
   1262 \end{frame}
   1263 
   1264 
   1265 \begin{frame}<1-| handout:0>{Exchange: Choose!}
   1266    \begin{center}
   1267     \item Exchange sends back random $\gamma \in \{ 1, 2, 3 \}$ to the customer.
   1268     \end{center}
   1269 \end{frame}
   1270 
   1271 
   1272 \begin{frame}<1-| handout:0>{Customer: Reveal}
   1273    \begin{enumerate}
   1274    \item If $\gamma = 1$, send $t_2$, $t_3$ to exchange
   1275    \item If $\gamma = 2$, send $t_1$, $t_3$ to exchange
   1276    \item If $\gamma = 3$, send $t_1$, $t_2$ to exchange
   1277   \end{enumerate}
   1278 \end{frame}
   1279 
   1280 
   1281 \begin{frame}<1-| handout:0>{Exchange: Verify ($\gamma = 2$)}
   1282   \begin{minipage}{4cm}
   1283   \begin{tikzpicture}
   1284    \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
   1285     \node (h) [def, draw=none] at (0,0) {$t_1$};
   1286     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1287     \node (d) [def, draw=none, above left= of dh]  {$C_{old}$};
   1288     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,1}$};
   1289     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,1}$};
   1290     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1291 
   1292     \tikzstyle{C} = [color=black, line width=1pt]
   1293 
   1294     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
   1295     \draw [<-, C] (dh) -- (h) node [midway, above, sloped] (TextNode) {};
   1296     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1297     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1298     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
   1299     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
   1300   \end{tikzpicture}
   1301   \end{minipage}
   1302   \begin{minipage}{4cm}
   1303  \
   1304   \end{minipage}
   1305   \begin{minipage}{4cm}
   1306   \begin{tikzpicture}
   1307    \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
   1308     \node (h) [def, draw=none] at (0,0) {$t_3$};
   1309     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1310     \node (d) [def, draw=none, above left= of dh]  {$C_{old}$};
   1311     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,3}$};
   1312     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,3}$};
   1313     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1314 
   1315     \tikzstyle{C} = [color=black, line width=1pt]
   1316 
   1317     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
   1318     \draw [<-, C] (dh) -- (h) node [midway, above, sloped] (TextNode) {};
   1319     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1320     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1321     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
   1322     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
   1323   \end{tikzpicture}
   1324   \end{minipage}
   1325 \end{frame}
   1326 
   1327 
   1328 \begin{frame}<1-| handout:0>{Exchange: Blind sign change (RSA)}
   1329    \begin{minipage}{6cm}
   1330     \begin{enumerate}
   1331     \item Take $f_{new,\gamma}'$.
   1332     \item Compute $s' := f_{new,\gamma}'^d \mod n$.
   1333     \item Send signature $s'$.
   1334     \end{enumerate}
   1335    \end{minipage}
   1336   \begin{minipage}{6cm}
   1337   \begin{tikzpicture}
   1338    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
   1339     \node (hammer) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{hammer.pdf}};
   1340     \node (signed) [def, draw=none, below left=of hammer]{\includegraphics[width=0.2\textwidth]{sign.pdf}};
   1341     \node (blinded) [def, draw=none, above left=of signed]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1342     \node (customer) [node distance=4em and 0.5em, draw, below =of signed]{Customer};
   1343     \tikzstyle{C} = [color=black, line width=1pt]
   1344 
   1345     \draw [<-, C] (signed) -- (hammer) node [midway, above, sloped] (TextNode) {};
   1346     \draw [<-, C] (signed) -- (blinded) node [midway, above, sloped] (TextNode) {};
   1347     \draw [<-, C] (customer) -- (signed) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1348   \end{tikzpicture}
   1349   \end{minipage}
   1350 \end{frame}
   1351 
   1352 
   1353 \begin{frame}<1-| handout:0>{Customer: Unblind change (RSA)}
   1354   \begin{minipage}{6cm}
   1355    \begin{enumerate}
   1356     \item Receive $s'$.
   1357     \item Compute $s := s' b_{new,\gamma}^{-1} \mod n$.
   1358     \end{enumerate}
   1359    \end{minipage}
   1360   \begin{minipage}{6cm}
   1361   \begin{tikzpicture}
   1362    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
   1363     \node (b) [def, draw=none] at (0,0) {$b_{new,\gamma}$};
   1364     \node (coin) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{coin.pdf}};
   1365     \node (signed) [def, draw=none, above left=of coin]{\includegraphics[width=0.15\textwidth]{sign.pdf}};
   1366     \tikzstyle{C} = [color=black, line width=1pt]
   1367 
   1368     \draw [<-, C] (coin) -- (b) node [midway, above, sloped] (TextNode) {};
   1369     \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {};
   1370   \end{tikzpicture}
   1371   \end{minipage}
   1372 \end{frame}
   1373 
   1374 
   1375 \begin{frame}<1-| handout:0>{Exchange: Allow linking change}
   1376   \begin{minipage}{7cm}
   1377     \begin{center}
   1378     Given $C_{old}$
   1379 
   1380     \vspace{1cm}
   1381 
   1382     return $T_\gamma$, $s := s' b_{new,\gamma}^{-1} \mod n$.
   1383   \end{center}
   1384    \end{minipage}
   1385   \begin{minipage}{5cm}
   1386    \begin{tikzpicture}
   1387     \tikzstyle{def} = [node distance= 3em and 0.5em, inner sep=0.5em, outer sep=.3em];
   1388     \node (co) [def, draw=none] at (0,0) {$C_{old}$};
   1389     \node (T) [def, draw=none, below left=of co]{$T_\gamma$};
   1390     \node (sign) [def, draw=none, below right=of co]{\includegraphics[width=0.15\textwidth]{sign.pdf}};
   1391     \node (customer) [def, draw, below right=of T] {Customer};
   1392 
   1393     \tikzstyle{C} = [color=black, line width=1pt]
   1394 
   1395     \draw [<-, C] (T) -- (co) node [midway, above, sloped] (TextNode) {};
   1396     \draw [<-, C] (sign) -- (co) node [midway, above, sloped] (TextNode) {};
   1397     \draw [<-, C] (customer) -- (T) node [midway, above, sloped] (TextNode) {link};
   1398     \draw [<-, C] (customer) -- (sign) node [midway, above, sloped] (TextNode) {link};
   1399   \end{tikzpicture}
   1400   \end{minipage}
   1401 \end{frame}
   1402 
   1403 
   1404 \begin{frame}<1-| handout:0>{Customer: Link (threat!)}
   1405   \begin{minipage}{6.3cm}
   1406    \begin{enumerate}
   1407     \item Have $c_{old}$.
   1408     \item Obtain $T_\gamma$, $s$ from exchange
   1409     \item Compute $X_\gamma = c_{old}T_\gamma$
   1410     \item Derive $c_{new,\gamma}$ and $b_{new,\gamma}$ from $X_\gamma$
   1411     \item Unblind $s := s' b_{new,\gamma}^{-1} \mod n$
   1412   \end{enumerate}
   1413 
   1414    \end{minipage}
   1415   \begin{minipage}{5.7cm}
   1416   \begin{tikzpicture}
   1417   \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
   1418     \node (T) [def, draw=none] at (0,0) {$T_\gamma$};
   1419     \node (exchange) [def, inner sep=0.5em, draw, above left=of T] {Exchange};
   1420     \node (signed) [def, draw=none, below left=of T]{\includegraphics[width=0.15\textwidth]{sign.pdf}};
   1421     \node (dh) [def, draw=none, below right=of T]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1422     \node (bp) [def, draw=none, below left= of dh]  {$b_{new,\gamma}$};
   1423     \node (co) [def, draw=none, above right= of dh]  {$c_{old}$};
   1424     \node (cp) [def, draw=none, below= of dh]  {$c_{new,\gamma}$};
   1425     \node (coin) [def, draw=none, below left = of bp]{\includegraphics[width=0.2\textwidth]{coin.pdf}};
   1426     \node (psign) [def, node distance=2.5em and 0em, draw=none, below = of cp]{\includegraphics[width=0.2\textwidth]{planchet-sign.pdf}};
   1427 
   1428     \tikzstyle{C} = [color=black, line width=1pt]
   1429 
   1430     \draw [<-, C] (dh) -- (co) node [midway, above, sloped] (TextNode) {};
   1431     \draw [<-, C] (dh) -- (T) node [midway, above, sloped] (TextNode) {};
   1432     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1433     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1434     \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {};
   1435     \draw [<-, C] (coin) -- (bp) node [midway, above, sloped] (TextNode) {};
   1436     \draw [<-, C] (T) -- (exchange) node [midway, above, sloped] (TextNode) {link};
   1437     \draw [<-, C] (signed) -- (exchange) node [midway, below, sloped] (TextNode) {link};
   1438     \draw [<-, C, double] (psign) -- (cp) node [midway, below, sloped] (TextNode) {};
   1439   \end{tikzpicture}
   1440   \end{minipage}
   1441 \end{frame}
   1442 
   1443 
   1444 \begin{frame}{Refresh protocol properties}
   1445   \begin{itemize}
   1446   \item Customer asks exchange to convert old coin to new coin
   1447   \item Protocol ensures new coins can be recovered from old coin
   1448   \item[$\Rightarrow$] New coins are owned by the same entity!
   1449   \end{itemize}
   1450   Thus, the refresh protocol allows:
   1451   \begin{itemize}
   1452   \item To give unlinkable change.
   1453   \item To give refunds to an anonymous customer.
   1454   \item To expire old keys and migrate coins to new ones.
   1455   \item To handle protocol aborts.
   1456   \end{itemize}
   1457   \noindent
   1458 %  \begin{center}
   1459 %   { \bf Transactions via refresh are equivalent to {\em sharing} a wallet.}
   1460 %  \end{center}
   1461 \end{frame}
   1462 
   1463 
   1464 \section{Illustration of Programmable Money: Age Restrictions}
   1465 
   1466 \begin{frame}
   1467   \vfill
   1468   \begin{center}
   1469     \vfill
   1470     {\bf Part V:}
   1471     \vfill
   1472     {\bf Illustration of Programmable Money}
   1473     \vfill
   1474     {\bf Zero-knowledge Age Restrictions}
   1475     \vfill
   1476   \end{center}
   1477   \vfill
   1478 \end{frame}
   1479 
   1480 
   1481 \begin{frame}{Age restriction in e-commerce}
   1482 
   1483 	\begin{description}
   1484 		\item[Problem:]~\\[1em]
   1485 			Verification of minimum age requirements in e-commerce.\\[2em]
   1486 
   1487 		\item[Common solutions:]
   1488 
   1489 \begin{tabular}{l<{\onslide<2->}c<{\onslide<3->}cr<{\onslide}}
   1490 	& \blue{Privacy} & \tikzmark{topau} \blue{Ext. authority}& \\[\medskipamount]
   1491 	1. ID Verification     & bad   & required & \\[\medskipamount]
   1492 	2. Restricted Accounts & bad   & required & \\[\medskipamount]
   1493 	3. Attribute-based     & good  & required &\tikzmark{bottomau} \\[\medskipamount]
   1494 \end{tabular}
   1495 	\end{description}
   1496 
   1497 \uncover<4->{
   1498 	\begin{tikzpicture}[overlay,remember picture]
   1499 	\draw[orange,thick,rounded corners]
   1500 		($(pic cs:topau) +(0,0.5)$) rectangle ($(pic cs:bottomau) -(0.3, 0.2)$);
   1501 	\end{tikzpicture}
   1502 	\begin{center}
   1503 	\bf Principle of subsidiarity is violated
   1504 	\end{center}
   1505 }
   1506 \end{frame}
   1507 
   1508 
   1509 \begin{frame}<1-| handout:0>{Principle of Subsidiarity}
   1510 \begin{center} \Large
   1511 	Functions of government---such as granting and restricting
   1512 	rights---should be performed\\
   1513 	{\it at the lowest level of authority possible},\\
   1514 	as long as they can be performed {\it adequately}.
   1515 \end{center}
   1516 \vfill
   1517 \uncover<2->{
   1518 	For age-restriction, the lowest level of authority is:\\
   1519 	\begin{center}\Large
   1520 	Parents, guardians and caretakers
   1521 	\end{center}
   1522 }
   1523 \end{frame}
   1524 
   1525 
   1526 \begin{frame}{Age restriction design for GNU Taler}
   1527 Design and implementation of an age restriction scheme\\
   1528 with the following goals:
   1529 
   1530 \begin{enumerate}
   1531 \item It ties age restriction to the \textbf{ability to pay} (not to ID's)
   1532 \item maintains \textbf{anonymity of buyers}
   1533 \item maintains \textbf{unlinkability of transactions}
   1534 \item aligns with \textbf{principle of subsidiarity}
   1535 \item is \textbf{practical and efficient}
   1536 \end{enumerate}
   1537 
   1538 \end{frame}
   1539 
   1540 
   1541 \begin{frame}{Age restriction}
   1542 	\framesubtitle{Assumptions and scenario}
   1543 
   1544 	\begin{columns}
   1545 		\column{7.5cm}
   1546 	\begin{itemize}
   1547 		\item<1-> Assumption: Checking accounts are under control of eligible adults/guardians.
   1548 		\item<2-> \textit{Guardians} \textbf{commit} to an maximum age
   1549 		\item<3-> \textit{Minors} \textbf{attest} their adequate age
   1550 		\item<4-> \textit{Merchants} \textbf{verify} the attestations
   1551 		\item<5-> Minors \textbf{derive} age commitments from existing ones
   1552 		\item<6-> \textit{Exchanges} \textbf{compare} the derived age commitments
   1553 	\end{itemize}
   1554 		\column{5cm}
   1555 		\uncover<7->
   1556 		{
   1557 		\begin{center}
   1558 		\fontsize{7pt}{7pt}\selectfont
   1559 	\begin{tikzpicture}[scale=.5]
   1560 		\node[circle,minimum size=15pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$};
   1561 		\node[circle,minimum size=15pt,fill=black!15] at (  0:0) (Client) {$\Child$};
   1562 		\node[circle,minimum size=15pt,fill=black!15] at (  0:4) (Merchant) {$\Merchant$};
   1563 		\node[circle,minimum size=15pt,fill=blue!15]  at (140:3) (Guardian) {$\Guardian$};
   1564 
   1565 		\draw[->] (Guardian)   to [out=50,in=130, loop] node[above]
   1566 			{$\Commit$} (Guardian);
   1567 		\draw[->,blue] (Client)   to [out=-125,in=-190, loop] node[below,left]
   1568 			{\blue{$\Attest$}} (Client);
   1569 		\draw[->,blue] (Merchant) to [out=50,in=130, loop] node[above]
   1570 			{\blue{$\Verify$}} (Merchant);
   1571 		\draw[->,orange] (Client)   to [out=-35,in=-100, loop] node[below]
   1572 			{\orange{$\Derive$}} (Client);
   1573 		\draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above]
   1574 			{\orange{$\Compare$}} (Exchange);
   1575 
   1576 		\draw[orange,|->] (Client)   to node[sloped,above,align=left]
   1577 			{\orange{\scriptsize }} (Exchange);
   1578 		\draw[blue,|->] (Client)   to node[sloped, above]
   1579 			{\blue{\scriptsize }} (Merchant);
   1580 		\draw[,|->] (Guardian) to node[above,sloped,align=left]
   1581 			{{\scriptsize }} (Client);
   1582 	\end{tikzpicture}
   1583 		\end{center}
   1584 		}
   1585 	\end{columns}
   1586 	\vfill
   1587 %	\uncover<7->{Note: Scheme is independent of payment service protocol.}
   1588 \end{frame}
   1589 
   1590 
   1591 \begin{frame}<1-| handout:0>{Formal Function Signatures}
   1592 \small
   1593 Searching for functions \uncover<2->{with the following signatures}
   1594 \begin{align*}
   1595 	&\bf \Commit\uncover<2->{:
   1596 		&(\age, \omega) &\mapsto (\commitment, \pruf)
   1597 		&\scriptstyle \N_\Age \times \Omega &\scriptstyle \to \Commitments\times\Proofs,
   1598 		}
   1599 	\\
   1600 	&\bf \Attest\uncover<3->{:
   1601 		&(\minage, \commitment, \pruf) &\mapsto \attest
   1602 		&\scriptstyle \N_\Age\times\Commitments\times\Proofs &\scriptstyle \to \Attests \cup \{\Nil\},
   1603 		}
   1604 	\\
   1605 	&\bf \Verify\uncover<4->{:
   1606 		&(\minage, \commitment, \attest) &\mapsto b
   1607 		&\scriptstyle \N_\Age\times\Commitments\times\Attests &\scriptstyle \to \Z_2,
   1608 		}
   1609 	\\
   1610 	&\bf \Derive\uncover<5->{:
   1611 		&(\commitment, \pruf, \omega) &\mapsto (\commitment', \pruf', \blinding)
   1612 		&\scriptstyle \Commitments\times\Proofs\times\Omega &\scriptstyle \to \Commitments\times\Proofs\times\Blindings,
   1613 		}
   1614 	\\
   1615 	&\bf \Compare\uncover<6->{:
   1616 		&(\commitment, \commitment', \blinding) &\mapsto b
   1617 		&\scriptstyle \Commitments\times\Commitments\times\Blindings &\scriptstyle \to \Z_2,
   1618 		}
   1619 \end{align*}
   1620 	\uncover<7->{
   1621 		with $\Omega, \Proofs, \Commitments, \Attests, \Blindings$
   1622 		sufficiently large sets.\\[1em]
   1623 		Basic and security requirements are defined later.\\[2em]
   1624 	}
   1625 
   1626 		\scriptsize
   1627 	\uncover<2->{
   1628 		Mnemonics:\\
   1629 		$\Commitments=$ \textit{c$\Commitments$mmitments},
   1630 		$\commitment=$ \textit{Q-mitment} (commitment),
   1631 		$\Proofs=$ \textit{$\Proofs$roofs},
   1632 	}
   1633 	\uncover<3->{
   1634 		$\pruf=$ \textit{$\pruf$roof},\\
   1635 		$\Attests=$ \textit{a$\Attests$testations},
   1636 		$\attest=$ \textit{a$\attest$testation},
   1637 	}
   1638 	\uncover<5->{
   1639 		$\Blindings=$ \textit{$\Blindings$lindings},
   1640 		$\blinding=$ \textit{$\blinding$linding}.
   1641 	}
   1642 \end{frame}
   1643 
   1644 \begin{frame}<1-| handout:0>{Age restriction}
   1645 	\framesubtitle{Naïve scheme}
   1646 	\begin{center}
   1647 	\begin{tikzpicture}[scale=.85]
   1648 		\node[circle,minimum size=20pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$};
   1649 		\node[circle,minimum size=20pt,fill=black!15] at (  0:0) (Client) {$\Child$};
   1650 		\node[circle,minimum size=20pt,fill=black!15] at (  0:4) (Merchant) {$\Merchant$};
   1651 		\node[circle,minimum size=20pt,fill=blue!15]  at (140:3) (Guardian) {$\Guardian$};
   1652 
   1653 		\draw[->] (Guardian)   to [out=50,in=130, loop] node[above]
   1654 			{$\Commit$} (Guardian);
   1655 		\draw[->,blue] (Client)   to [out=-125,in=-190, loop] node[below,left]
   1656 			{\blue{$\Attest$}} (Client);
   1657 		\draw[->,blue] (Merchant) to [out=50,in=130, loop] node[above]
   1658 			{\blue{$\Verify$}} (Merchant);
   1659 		\draw[->,orange] (Client)   to [out=-35,in=-100, loop] node[below]
   1660 			{\orange{$\Derive$}} (Client);
   1661 		\draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above]
   1662 			{\orange{$\Compare$}} (Exchange);
   1663 
   1664 		\draw[orange,|->] (Client)   to node[sloped,above,align=left]
   1665 			{\orange{\scriptsize }} (Exchange);
   1666 		\draw[blue,|->] (Client)   to node[sloped, above]
   1667 			{\blue{\scriptsize }} (Merchant);
   1668 		\draw[,|->] (Guardian) to node[above,sloped,align=left]
   1669 			{{\scriptsize }} (Client);
   1670 	\end{tikzpicture}
   1671 	\end{center}
   1672 \end{frame}
   1673 
   1674 \begin{frame}<1-| handout:0>{Achieving Unlinkability}
   1675 	\begin{columns}
   1676 		\column{3cm}
   1677 		\begin{center}
   1678 		\fontsize{8pt}{9pt}\selectfont
   1679 		\begin{tikzpicture}[scale=.65]
   1680 			\node[circle,minimum size=20pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$};
   1681 			\node[circle,minimum size=20pt,fill=black!15] at (  0:0) (Client) {$\Child$};
   1682 
   1683 			\draw[->,orange] (Client)   to [out=-35,in=-100, loop] node[below]
   1684 				{\orange{$\footnotesize \Derive()$}} (Client);
   1685 			\draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above]
   1686 				{\orange{$\footnotesize \Compare()$}} (Exchange);
   1687 
   1688 			\draw[orange,|->] (Client)   to node[sloped,above,align=left]
   1689 				{\orange{\tiny \uncover<2->{$(\commitment_i,\commitment_{i+1})$}}} (Exchange);
   1690 		\end{tikzpicture}
   1691 		\end{center}
   1692 
   1693 		\column{9cm}
   1694 	Simple use of $\Derive()$ and $\Compare()$ is problematic.
   1695 
   1696 	\begin{itemize}
   1697 		\item<2-> Calling $\Derive()$ iteratively generates sequence
   1698 			$(\commitment_0, \commitment_1, \dots)$ of commitments.
   1699 		\item<2-> Exchange calls $\Compare(\commitment_i, \commitment_{i+1}, .)$
   1700 		\item[$\implies$]\uncover<3->{\bf Exchange identifies sequence}
   1701 		\item[$\implies$]\uncover<3->{\bf Unlinkability broken}
   1702 	\end{itemize}
   1703 	\end{columns}
   1704 \end{frame}
   1705 
   1706 \begin{frame}<1-| handout:0>{Achieving Unlinkability}
   1707 	Define cut\&choose protocol \orange{$\DeriveCompare$},
   1708 	using $\Derive()$ and $\Compare()$.\\[0.5em]
   1709 	\uncover<2->{
   1710 	Sketch:
   1711 	\small
   1712 	\begin{enumerate}
   1713 		\item $\Child$ derives commitments $(\commitment_1,\dots,\commitment_\kappa)$
   1714 			from $\commitment_0$ \\
   1715 			by calling $\Derive()$ with blindings $(\beta_1,\dots,\beta_\kappa)$
   1716 		\item $\Child$ calculates $h_0:=H\left(H(\commitment_1, \beta_1)||\dots||H(\commitment_\kappa, \beta_\kappa)\right)$
   1717 		\item $\Child$ sends $\commitment_0$ and $h_0$ to $\Exchange$
   1718 		\item $\Exchange$ chooses $\gamma \in \{1,\dots,\kappa\}$ randomly
   1719 		\item $\Child$ reveals $h_\gamma:=H(\commitment_\gamma, \beta_\gamma)$ and all $(\commitment_i, \beta_i)$, except $(\commitment_\gamma, \beta_\gamma)$
   1720 		\item $\Exchange$ compares $h_0$ and
   1721 			$H\left(H(\commitment_1, \beta_1)||...||h_\gamma||...||H(\commitment_\kappa, \beta_\kappa)\right)$\\
   1722 			and evaluates $\Compare(\commitment_0, \commitment_i, \beta_i)$.
   1723 	\end{enumerate}
   1724 	\vfill
   1725 	Note: Scheme is similar to the {\it refresh} protocol in GNU Taler.
   1726 	}
   1727 \end{frame}
   1728 
   1729 \begin{frame}<1-| handout:0>{Achieving Unlinkability}
   1730 	With \orange{$\DeriveCompare$}
   1731 	\begin{itemize}
   1732 		\item $\Exchange$ learns nothing about $\commitment_\gamma$,
   1733 		\item trusts outcome with $\frac{\kappa-1}{\kappa}$ certainty,
   1734 		\item i.e. $\Child$ has $\frac{1}{\kappa}$ chance to cheat.
   1735 	\end{itemize}
   1736 	\vfill
   1737 	Note: Still need Derive and Compare to be defined.
   1738 \end{frame}
   1739 
   1740 \begin{frame}<1-| handout:0>{Refined scheme}
   1741 
   1742 	\begin{tikzpicture}[scale=.8]
   1743 		\node[circle,minimum size=25pt,fill=black!15] at (  0:0) (Client)   {$\Child$};
   1744 		\node[circle,minimum size=25pt,fill=black!15] at ( 60:5) (Exchange) {$\Exchange$};
   1745 		\node[circle,minimum size=25pt,fill=black!15] at (  0:5) (Merchant) {$\Merchant$};
   1746 		\node[circle,minimum size=25pt,fill=blue!15]  at (130:3) (Guardian) {$\Guardian$};
   1747 
   1748 		\draw[orange,<->] (Client)   to node[sloped,below,align=center]
   1749 			{\orange{$\DeriveCompare$}} (Exchange);
   1750 		\draw[blue,->] (Client)   to node[sloped, below]
   1751 			{\blue{$(\attest_\minage, \commitment)$}} (Merchant);
   1752 
   1753 		\draw[->] (Guardian)   to [out=150,in=70, loop] node[above]
   1754 			{$\Commit(\age)$} (Guardian);
   1755 		\draw[->] (Guardian)   to node[below,sloped]
   1756 			{($\commitment$, $\pruf_\age$)} (Client);
   1757 		\draw[->,blue] (Client)   to [out=-50,in=-130, loop] node[below]
   1758 			{\blue{$\Attest(\minage, \commitment, \pruf_{\age})$}} (Client);
   1759 		\draw[->,blue] (Merchant) to [out=-50,in=-130, loop] node[below]
   1760 			{\blue{$\Verify(\minage, \commitment, \attest_{\minage})$}} (Merchant);
   1761 	\end{tikzpicture}
   1762 \end{frame}
   1763 
   1764 % \begin{frame}{Achieving Unlinkability}
   1765 % 	\scriptsize
   1766 % 	$\DeriveCompare : \Commitments\times\Proofs\times\Omega \to \{0,1\}$\\
   1767 % 	\vfill
   1768 % 	$\DeriveCompare(\commitment, \pruf, \omega) =$
   1769 % \begin{itemize}
   1770 % \it
   1771 % 	\itemsep0.5em
   1772 % 	\item[$\Child$:]
   1773 % 		\begin{enumerate}
   1774 % 				\scriptsize
   1775 % 			\itemsep0.3em
   1776 % 			\item for all $i \in \{1,\dots,\kappa\}:
   1777 % 				(\commitment_i,\pruf_i,\beta_i) \leftarrow \Derive(\commitment, \pruf, \omega + i)$
   1778 % 			\item $h \leftarrow \Hash\big(\Hash(\commitment_1,\beta_1)\parallel\dots\parallel\Hash(\commitment_\kappa,\beta_\kappa) \big)$
   1779 % 			\item send $(\commitment, h)$ to $\Exchange$
   1780 % 		\end{enumerate}
   1781 % 	\item[$\Exchange$:]
   1782 % 		\begin{enumerate}
   1783 % 			\setcounter{enumi}{4}
   1784 % 				\scriptsize
   1785 % 			\itemsep0.3em
   1786 % 			\item save $(\commitment, h)$ \label{st:hash}
   1787 % 			\item $\gamma \drawfrom \{1,\dots ,\kappa\}$
   1788 % 			\item send $\gamma$ to $\Child$
   1789 % 		\end{enumerate}
   1790 % 	\item[$\Child$:]
   1791 % 		\begin{enumerate}
   1792 % 			\setcounter{enumi}{7}
   1793 %
   1794 % 				\scriptsize
   1795 % 			\itemsep0.3em
   1796 % 			\item $h'_\gamma \leftarrow \Hash(\commitment_\gamma, \beta_\gamma)$
   1797 % 			\item $\mathbf{E}_\gamma \leftarrow \big[(\commitment_1,\beta_1),\dots,
   1798 % 				(\commitment_{\gamma-1}, \beta_{\gamma-1}),
   1799 % 				\Nil,
   1800 % 				(\commitment_{\gamma+1}, \beta_{\gamma+1}),
   1801 % 				\dots,(\commitment_\kappa, \beta_\kappa)\big]$
   1802 % 			\item send $(\mathbf{E}_\gamma, h'_\gamma)$ to $\Exchange$
   1803 % 		\end{enumerate}
   1804 % 	\item[$\Exchange$:]
   1805 % 		\begin{enumerate}
   1806 % 			\setcounter{enumi}{10}
   1807 % 				\scriptsize
   1808 % 			\itemsep0.3em
   1809 % 			\item for all $i \in \{1,\dots,\kappa\}\setminus\{\gamma\}: h_i \leftarrow \Hash(\mathbf{E}_\gamma[i])$
   1810 % 			\item if $h \stackrel{?}{\neq} \HashF(h_1\|\dots\|h_{\gamma-1}\|h'_\gamma\|h_{\gamma+1}\|\dots\|h_{\kappa-1})$ return 0
   1811 % 			\item for all $i \in \{1,\dots,\kappa\}\setminus\{\gamma\}$:
   1812 % 				if $0 \stackrel{?}{=} \Compare(\commitment,\commitment_i, \beta_i)$ return $0$
   1813 % 			\item return 1
   1814 % 		\end{enumerate}
   1815 % \end{itemize}
   1816 % \end{frame}
   1817 
   1818 \begin{frame}<1-| handout:0>{Basic Requirements}
   1819 
   1820 	Candidate functions
   1821 	\[ (\Commit, \Attest, \Verify, \Derive, \Compare) \]
   1822 	must first meet \textit{basic} requirements:
   1823 
   1824 	\begin{itemize}
   1825 		\item Existence of attestations
   1826 		\item Efficacy of attestations
   1827 		\item Derivability of commitments and attestations
   1828 	\end{itemize}
   1829 \end{frame}
   1830 
   1831 \begin{frame}<1-| handout:0>{Basic Requirements}
   1832 	\framesubtitle{Formal Details}
   1833 
   1834 	\begin{description}
   1835 		\item[Existence of attestations]
   1836 			{\scriptsize
   1837 			\begin{align*}
   1838 				\Forall_{\age\in\N_\Age \atop \omega \in \Omega}:
   1839 				\Commit(\age, \omega) =: (\commitment, \pruf)
   1840 				\implies
   1841 				\Attest(\minage, \commitment, \pruf) =
   1842 				\begin{cases}
   1843 					\attest \in \Attests, \text{ if } \minage \leq \age\\
   1844 					\Nil \text{ otherwise}
   1845 				\end{cases}
   1846 			\end{align*}}
   1847 		\item[Efficacy of attestations]
   1848 			{\scriptsize
   1849 			\begin{align*}
   1850 				\Verify(\minage, \commitment, \attest) = \
   1851 				\begin{cases}
   1852 					1, \text{if } \Exists_{\pruf \in \Proofs}: \Attest(\minage, \commitment, \pruf) = \attest\\
   1853 					0 \text{ otherwise}
   1854 				\end{cases}
   1855 			\end{align*}}
   1856 
   1857 			{\scriptsize
   1858 			\begin{align*}
   1859 				\forall_{n \leq \age}: \Verify\big(n, \commitment, \Attest(n, \commitment, \pruf)\big) = 1.
   1860 			\end{align*}}
   1861 		\item[etc.]
   1862 	\end{description}
   1863 \end{frame}
   1864 
   1865 %\begin{frame}{Requirements}
   1866 %	\framesubtitle{Details}
   1867 %
   1868 %	\begin{description}
   1869 %		\item[Derivability of commitments and proofs:]~\\[0.1em]
   1870 %		{\scriptsize
   1871 %		Let \begin{align*}
   1872 %			\age & \in\N_\Age,\,\, \omega_0, \omega_1 \in\Omega\\
   1873 %			(\commitment_0, \pruf_0) & \leftarrow \Commit(\age, \omega_0),\\
   1874 %			(\commitment_1, \pruf_1, \blinding) & \leftarrow  \Derive(\commitment_0, \pruf_0, \omega_1).
   1875 %		\end{align*}
   1876 %		We require
   1877 %		\begin{align*}
   1878 %			\Compare(\commitment_0, \commitment_1, \blinding) = 1 \label{req:comparity}
   1879 %		\end{align*}
   1880 %		and for all $n\leq\age$:
   1881 %		\begin{align*}
   1882 %					\Verify(n, \commitment_1, \Attest(n, \commitment_1, \pruf_1)) &%
   1883 %					=
   1884 %					\Verify(n, \commitment_0,  \Attest(n, \commitment_0,  \pruf_0))
   1885 %		\end{align*}}
   1886 %	\end{description}
   1887 %\end{frame}
   1888 
   1889 \begin{frame}<1-| handout:0>{Security Requirements}
   1890 	Candidate functions must also meet \textit{security} requirements.
   1891 	Those are defined via security games:
   1892 	\begin{itemize}
   1893 		\item Game: Age disclosure by commitment or attestation
   1894 		\item[$\leftrightarrow$] Requirement: Non-disclosure of age
   1895 			\vfill
   1896 
   1897 		\item Game: Forging attestation
   1898 		\item[$\leftrightarrow$] Requirement: Unforgeability of
   1899 			minimum age
   1900 			\vfill
   1901 
   1902 		\item Game: Distinguishing derived commitments and attestations
   1903 		\item[$\leftrightarrow$] Requirement: Unlinkability of
   1904 			commitments and attestations
   1905 
   1906 	\end{itemize}
   1907 	\vfill
   1908 
   1909 	Meeting the security requirements means that adversaries can win
   1910 	those games only with negligible advantage.
   1911 	\vfill
   1912 	Adversaries are arbitrary polynomial-time algorithms, acting on all
   1913 	relevant input.
   1914 \end{frame}
   1915 
   1916 \begin{frame}<1-| handout:0>{Security Requirements}
   1917 	\framesubtitle{Simplified Example}
   1918 
   1919 	\begin{description}
   1920 		\item[Game $\Game{FA}(\lambda)$---Forging an attest:]~\\
   1921 	{\small
   1922 	\begin{enumerate}
   1923 		\item $ (\age, \omega)	\drawfrom	\N_{\Age-1}\times\Omega $
   1924 		\item $ (\commitment, \pruf)	\leftarrow	\Commit(\age, \omega) $
   1925 		\item $ (\minage, \attest) \leftarrow \Adv(\age, \commitment, \pruf)$
   1926 		\item Return 0 if $\minage \leq \age$
   1927 		\item Return $\Verify(\minage,\commitment,\attest)$
   1928 	\end{enumerate}
   1929 	}
   1930 	\vfill
   1931 	\item[Requirement: Unforgeability of minimum age]
   1932 		{\small
   1933 	\begin{equation*}
   1934 		\Forall_{\Adv\in\PPT(\N_\Age\times\Commitments\times\Proofs\to \N_\Age\times\Attests)}:
   1935 		\Probability\Big[\Game{FA}(\lambda) = 1\Big] \le \negl(\lambda)
   1936 	\end{equation*}
   1937 	}
   1938 	\end{description}
   1939 \end{frame}
   1940 
   1941 
   1942 \begin{frame}<1-| handout:0>{Solution: Instantiation with ECDSA}
   1943 %	\framesubtitle{Definition of Commit}
   1944 
   1945 	\begin{description}
   1946 		\item[To Commit to age (group) $\age \in \{1,\dots,\Age\}$]~\\
   1947 		\begin{enumerate}
   1948 			\item<2-> Guardian generates ECDSA-keypairs, one per age (group):
   1949 				\[\langle(q_1, p_1),\dots,(q_\Age,p_\Age)\rangle\]
   1950 			\item<3-> Guardian then \textbf{drops} all private keys
   1951 				$p_i$ for $i > \age$:
   1952 				\[\Big \langle(q_1, p_1),\dots,
   1953 					(q_\age, p_\age),
   1954 					(q_{\age +1}, \red{\Nil}),\dots,
   1955 					(q_\Age, \red{\Nil})\Big\rangle\]
   1956 
   1957 				\begin{itemize}
   1958 					\item $\Vcommitment := (q_1, \dots, q_\Age)$ is the \textit{Commitment},
   1959 					\item $\Vpruf_\age := (p_1, \dots, p_\age, \Nil,\dots,\Nil)$ is the \textit{Proof}
   1960 				\end{itemize}
   1961 				\vfill
   1962 			\item<4-> Guardian gives child $\langle \Vcommitment, \Vpruf_\age \rangle$
   1963 				\vfill
   1964 		\end{enumerate}
   1965 	\end{description}
   1966 \end{frame}
   1967 
   1968 \begin{frame}<1-| handout:0>{Instantiation with ECDSA}
   1969 	\framesubtitle{Definitions of Attest and Verify}
   1970 
   1971 	Child has
   1972 	\begin{itemize}
   1973 		\item ordered public-keys $\Vcommitment = (q_1, \dots, q_\Age) $,
   1974 		\item (some) private-keys $\Vpruf = (p_1, \dots, p_\age, \Nil, \dots, \Nil)$.
   1975 	\end{itemize}
   1976 	\begin{description}
   1977 		\item<2->[To \blue{Attest} a minimum age $\blue{\minage} \leq \age$:]~\\
   1978 			Sign a message with ECDSA using private key $p_\blue{\minage}$
   1979 	\end{description}
   1980 
   1981 	\vfill
   1982 
   1983 	\uncover<3->{
   1984 	Merchant gets
   1985 	\begin{itemize}
   1986 		\item ordered public-keys $\Vcommitment = (q_1, \dots, q_\Age) $
   1987 		\item Signature $\sigma$
   1988 	\end{itemize}
   1989 	\begin{description}
   1990 		\item<4->[To \blue{Verify} a minimum age $\minage$:]~\\
   1991 			Verify the ECDSA-Signature $\sigma$ with public key $q_\minage$.
   1992 	\end{description}
   1993 	}
   1994 	\vfill
   1995 \end{frame}
   1996 
   1997 \begin{frame}<1-| handout:0>{Instantiation with ECDSA}
   1998 	\framesubtitle{Definitions of Derive and Compare}
   1999 	Child has
   2000 	$\Vcommitment = (q_1, \dots, q_\Age) $ and
   2001 	$\Vpruf = (p_1, \dots, p_\age, \Nil, \dots, \Nil)$.
   2002 	\begin{description}
   2003 		\item<2->[To \blue{Derive} new $\Vcommitment'$ and $\Vpruf'$:]
   2004 			Choose random $\beta\in\Z_g$ and calculate
   2005 			\small
   2006 			\begin{align*}
   2007 				\Vcommitment' &:= \big(\beta * q_1,\ldots,\beta * q_\Age\big),\\
   2008 				\Vpruf' &:= \big(\beta p_1,\ldots,\beta p_\age,\Nil,\ldots,\Nil\big)
   2009 			\end{align*}
   2010 			Note: $ (\beta p_i)*G = \beta*(p_i*G)  = \beta*q_i$\\
   2011 			\scriptsize $\beta*q_i$ is scalar multiplication on the elliptic curve.
   2012 	\end{description}
   2013 
   2014 		\vfill
   2015 	\uncover<3->{
   2016 		Exchange gets $\Vcommitment = (q_1,\dots,q_\Age)$, $\Vcommitment' = (q_1', \dots, q_\Age')$ and $\beta$
   2017 	\begin{description}
   2018 		\item[To \blue{Compare}, calculate:]
   2019 			\small
   2020 		$(\beta * q_1, \ldots , \beta * q_\Age) \stackrel{?}{=} (q'_1,\ldots, q'_\Age)$
   2021 	\end{description}
   2022 	\vfill
   2023 	}
   2024 \end{frame}
   2025 
   2026 \begin{frame}<1-| handout:0>{Instantiation with ECDSA}
   2027 
   2028 	Functions
   2029 	(Commit, Attest, Verify, Derive, Compare)\\
   2030 	as defined in the instantiation with ECDSA\\[0.5em]
   2031 	\begin{itemize}
   2032 		\item meet the basic requirements,\\[0.5em]
   2033 		\item also meet all security requirements.\\
   2034 		Proofs by security reduction, details are in the paper.
   2035 	\end{itemize}
   2036 
   2037 \end{frame}
   2038 
   2039 
   2040 % \begin{frame}{Instantiation with ECDSA}
   2041 % 	\framesubtitle{Full definitions}
   2042 % 	\scriptsize
   2043 %
   2044 % \begin{align*}
   2045 % 	\Commit_{E,\FDHg{\cdot}}(\age, \omega) &:= \Big\langle
   2046 % 		\overbrace{(q_1,\ldots,q_\Age)}^{= \Vcommitment},\;
   2047 % 		\overbrace{(p_1,\ldots,p_\age, \Nil,\ldots,\Nil)}^{= \Vpruf \text{, length }\Age}
   2048 % 		\Big\rangle\\
   2049 % 	\Attest_{E,\HashF}(\bage, \Vcommitment, \Vpruf) &:=
   2050 % 		\begin{cases}
   2051 % 			\attest_\bage := \Sign_{E,\HashF}\big(\bage,\Vpruf[\bage]\big) & \text{if } \Vpruf[\bage] \stackrel{?}{\neq} \Nil\\
   2052 % 			\Nil & \text{otherwise}
   2053 % 		\end{cases}\\
   2054 % %
   2055 % 	\Verify_{E,\HashF}(\bage, \Vcommitment, \attest) &:= \Ver_{E,\HashF}(\bage, \Vcommitment[\bage], \attest)\\
   2056 % %
   2057 % 	\Derive_{E, \FDHg{\cdot}}(\Vcommitment, \Vpruf, \omega) &:=
   2058 % 		\Big\langle(\beta * q_1,\ldots,\beta * q_\Age),
   2059 % 		     (\beta p_1,\ldots,\beta p_\age,\Nil,\ldots,\Nil), \beta \Big\rangle \\
   2060 % 		     & \text{ with } \beta := \FDHg{\omega} \text{ and multiplication } \beta p_i \text{ modulo } g \nonumber\\
   2061 % %
   2062 % 	\Compare_E(\Vcommitment, \Vcommitment', \beta)	&:=
   2063 % 		\begin{cases}
   2064 % 			1 & \text{if } (\beta * q_1, \ldots , \beta * q_\Age) \stackrel{?}{=} (q'_1,\ldots, q'_\Age)\\
   2065 % 			0 & \text{otherwise}
   2066 % 		\end{cases}
   2067 % \end{align*}
   2068 % \end{frame}
   2069 
   2070 
   2071 \begin{frame}<1-| handout:0>{Reminder: GNU Taler Fundamentals}
   2072 	\begin{center}
   2073 	\begin{tikzpicture}[scale=.55]
   2074 		\node[circle,fill=black!10] at (3, 4) (Exchange) {$\Exchange$};
   2075 		\node[circle,fill=black!10] at (0, 0) (Customer) {$\Customer$};
   2076 		\node[circle,fill=black!10] at (6, 0) (Merchant) {$\Merchant$};
   2077 
   2078 		\draw[<->] (Customer)   to [out=65,in=220] node[sloped,above] {\sf withdraw} (Exchange);
   2079 		\draw[<->] (Customer)   to [out=45,in=240] node[sloped,below] {\sf refresh} (Exchange);
   2080 		\draw[<->] (Customer)   to node[sloped, below] {\sf purchase} (Merchant);
   2081 		\draw[<->] (Merchant) to node[sloped, above] {\sf deposit} (Exchange);
   2082 	\end{tikzpicture}
   2083 	\end{center}
   2084 
   2085 	\vfill
   2086 	\begin{itemize}
   2087 		\item Coins are public-/private key-pairs $(C_p, c_s)$.
   2088 		\item Exchange blindly signs $\FDH(C_p)$ with denomination key $d_p$
   2089 		\item Verification:
   2090 		\begin{eqnarray*}
   2091 			1  &\stackrel{?}{=}&
   2092 			\mathsf{SigCheck}\big(\FDH(C_p), D_p, \sigma_p\big)
   2093 		\end{eqnarray*}
   2094 		\scriptsize($D_p$ = public key of denomination and $\sigma_p$ = signature)
   2095 
   2096 	\end{itemize}
   2097 \end{frame}
   2098 
   2099 \begin{frame}<1-| handout:0>{Integration with GNU Taler}
   2100 	\framesubtitle{Binding age restriction to coins}
   2101 
   2102 	To bind an age commitment $\commitment$ to a coin $C_p$, instead of
   2103 	signing $\FDH(C_p)$, $\Exchange$ now blindly signs
   2104 	\begin{center}
   2105 		$\FDH(C_p, \orange{H(\commitment)})$
   2106 	\end{center}
   2107 
   2108 	\vfill
   2109 	Verfication of a coin now requires $H(\commitment)$, too:
   2110 	\begin{center}
   2111 		$1  \stackrel{?}{=}
   2112 		\mathsf{SigCheck}\big(\FDH(C_p, \orange{H(\commitment)}), D_p, \sigma_p\big)$
   2113 	\end{center}
   2114 	\vfill
   2115 \end{frame}
   2116 
   2117 \begin{frame}<1-| handout:0>{Integration with GNU Taler}
   2118 	\framesubtitle{Integrated schemes}
   2119 	\fontsize{8pt}{9pt}\selectfont
   2120 	\begin{tikzpicture}[scale=.9]
   2121 		\node[circle,minimum size=25pt,fill=black!15] at (  0:0) (Client)   {$\Child$};
   2122 		\node[circle,minimum size=25pt,fill=black!15] at ( 60:5) (Exchange) {$\Exchange$};
   2123 		\node[circle,minimum size=25pt,fill=black!15] at (  0:5) (Merchant) {$\Merchant$};
   2124 		\node[circle,minimum size=25pt,fill=blue!15]  at (130:3) (Guardian) {$\Guardian$};
   2125 
   2126 		\draw[<->] (Guardian)   to  node[sloped,above,align=center]
   2127 			{{\sf withdraw}\orange{, using}\\ $\FDH(C_p\orange{, H(\commitment)})$} (Exchange);
   2128 		\draw[<->] (Client)   to node[sloped,below,align=center]
   2129 			{{\sf refresh} \orange{ + }\\ \orange{$\DeriveCompare$}} (Exchange);
   2130 		\draw[<->] (Client)   to node[sloped, below]
   2131 			{{\sf purchase} \blue{+ $(\attest_\minage, \commitment)$}} (Merchant);
   2132 		\draw[<->] (Merchant) to node[sloped, above]
   2133 			{{\sf deposit} \orange{+ $H(\commitment)$}} (Exchange);
   2134 
   2135 		\draw[->] (Guardian)   to [out=70,in=150, loop] node[above]
   2136 			{$\Commit(\age)$} (Guardian);
   2137 		\draw[->] (Guardian)   to node[below,sloped]
   2138 			{($\commitment$, $\pruf_\age$)} (Client);
   2139 		\draw[->,blue] (Client)   to [out=-50,in=-130, loop] node[below]
   2140 			{\blue{$\Attest(\minage, \commitment, \pruf_{\age})$}} (Client);
   2141 		\draw[->,blue] (Merchant) to [out=-50,in=-130, loop] node[below]
   2142 			{\blue{$\Verify(\minage, \commitment, \attest_{\minage})$}} (Merchant);
   2143 	\end{tikzpicture}
   2144 \end{frame}
   2145 
   2146 
   2147 \begin{frame}<1-| handout:0>{Instantiation with Edx25519}
   2148 	Paper also formally defines another signature scheme: Edx25519.\\[1em]
   2149 
   2150 	\begin{itemize}
   2151 		\item Scheme already in use in GNUnet,
   2152 		\item based on EdDSA (Bernstein et al.),
   2153 		\item generates compatible signatures and
   2154 		\item allows for key derivation from both, private and public keys, independently.
   2155 	\end{itemize}~\\[1em]
   2156 
   2157 	Current implementation of age restriction in GNU Taler uses Edx25519.
   2158 \end{frame}
   2159 
   2160 
   2161 \begin{frame}{Age Restrictions based on KYC}
   2162 %		\item Our solution can in principle be used with any token-based payment scheme
   2163 %		\item GNU Taler best aligned with our design goals (security, privacy and efficiency)
   2164  Subsidiarity requires bank accounts being owned by adults
   2165 			\begin{itemize}
   2166 			\item Scheme can be adapted to case where minors have bank accounts
   2167 				\begin{itemize}
   2168 					\item Assumption: banks provide minimum age
   2169 						information during bank
   2170 						transactions.
   2171 					\item Child and Exchange execute a variant of
   2172 						the cut\&choose protocol.
   2173 				\end{itemize}
   2174 			\end{itemize}
   2175 \end{frame}
   2176 
   2177 
   2178 \begin{frame}<1-| handout:0>{Related Work}
   2179 	\begin{itemize}
   2180 		\item Current privacy-perserving systems all based on attribute-based credentials (Koning et al., Schanzenbach et al., Camenisch et al., Au et al.)
   2181 		\item Attribute-based approach lacks support:
   2182 			\begin{itemize}
   2183 				\item Complex for consumers and retailers
   2184 				\item Requires trusted third authority
   2185 			\end{itemize}
   2186 		\vfill
   2187 		\item Other approaches tie age-restriction to ability to pay ("debit cards for kids")
   2188 			\begin{itemize}
   2189 				\item Advantage: mandatory to payment process
   2190 				\item Not privacy friendly
   2191 			\end{itemize}
   2192 	\end{itemize}
   2193 \end{frame}
   2194 
   2195 \begin{frame}{Conclusion}
   2196 	Age restriction is a technical, ethical and legal challenge.
   2197 
   2198 	Existing solutions are
   2199 	\begin{itemize}
   2200 		\item without strong protection of privacy or
   2201 		\item based on identity management systems (IMS)
   2202 	\end{itemize}
   2203 	\vfill
   2204 
   2205 	Our age restriction scheme offers a solution that is
   2206 	\begin{itemize}
   2207 		\item based on subsidiarity
   2208 		\item privacy-preserving
   2209 		\item efficient
   2210 		\item an alternative to IMS
   2211 	\end{itemize}
   2212     Other types of programmability (escrow, auctions) are under development.
   2213 \end{frame}
   2214 
   2215 
   2216 \section{Measures against Advanced Attacks}
   2217 
   2218 \begin{frame}
   2219   \vfill
   2220   \begin{center}
   2221     {\bf Part VI: Measures against Advanced Attacks}
   2222   \end{center}
   2223   \vfill
   2224 \end{frame}
   2225 
   2226 
   2227 \begin{frame}{Warranting deposit safety}
   2228   Exchange has online signing key $W = wG$:
   2229   \begin{center}
   2230     Sends $EdDSA_w(M,H(D),FDH(C))$ to the merchant.
   2231   \end{center}
   2232   This signature means that $M$ was the {\em first} to deposit
   2233   $C$ and that the exchange thus must pay $M$.
   2234   \vfill
   2235   \begin{center}
   2236      Without this, a malicious exchange could renege on the deposit
   2237      confirmation and claim double-spending if a coin were
   2238      deposited twice, and then not pay either merchant!
   2239   \end{center}
   2240 \end{frame}
   2241 
   2242 
   2243 \begin{frame}{Key management}
   2244 Taler has many types of keys:
   2245 \begin{itemize}
   2246 \item Coin keys
   2247 \item Denomination keys
   2248 \item Online message signing keys
   2249 \item Offline key signing keys
   2250 \item Merchant keys
   2251 \item Auditor key
   2252 \item Security module keys
   2253 \item Transfer keys
   2254 \item Wallet keys
   2255 \item {\em TLS keys, DNSSEC keys}
   2256 \end{itemize}
   2257 \end{frame}
   2258 
   2259 
   2260 \begin{frame}{Offline keys}
   2261 Both exchange and auditor use offline keys.
   2262 \begin{itemize}
   2263 \item Those keys must be backed up and remain highly confidential!
   2264 \item We recommend that computers that have ever had access to those
   2265       keys to NEVER again go online.
   2266 \item We recommend using a Raspberry Pi for offline key operations.
   2267       Store it in a safe under multiple locks and keys.
   2268 \item Apply full-disk encryption on offline-key signing systems.
   2269 \item Have 3--5 full-disk backups of offline-key signing systems.
   2270 \end{itemize}
   2271 \begin{center}
   2272 \includegraphics[scale=0.1]{pi.png}
   2273 \end{center}
   2274 \end{frame}
   2275 
   2276 
   2277 \begin{frame}{Protecting online keys}
   2278 The exchange needs keys to be available for online signing.
   2279 \begin{itemize}
   2280 \item {\tt taler-exchange-secmod-\{cs,eddsa,rsa\}}
   2281       are the only processes that must have access to the private keys.
   2282 \item The secmod processes should run under a different UID, but share
   2283       the same GID with the exchange.
   2284 \item The secmods generate the keys, allow {\tt taler-exchange-httpd} to sign with
   2285       them, and eventually delete the private keys.
   2286 \item Communication between secmods and {\tt taler-exchange-httpd} is via
   2287       a UNIX domain socket.
   2288 \item Online private keys are stored on disk (not in database!) and should
   2289       NOT be backed up (RAID should suffice). If disk is lost, we can always
   2290       create fresh replacement keys!
   2291 \end{itemize}
   2292 \end{frame}
   2293 
   2294 
   2295 \begin{frame}{Online keys}
   2296 \begin{center}
   2297 \includegraphics[width=0.9\textwidth]{taler-diagram-signatures.png}
   2298 \end{center}
   2299 \end{frame}
   2300 
   2301 \begin{frame}{Online keys}
   2302 The exchange needs keys to be available for online signing:
   2303 \begin{itemize}
   2304 \item Knowledge of these private keys will allow an adversary to
   2305       mint digital cash, possibly resulting in financial losses
   2306 %      (eventually, this will be detected by the auditor, but only
   2307 %       after some financial losses have been irrevocably incurred).
   2308 \item The corresponding public keys are certified using
   2309       Taler's public key infrastructure (which uses offline-only keys).
   2310 \end{itemize}
   2311 \vfill
   2312 {\tt taler-exchange-offline} can also be used to {\bf revoke} the
   2313 online signing keys, if we find they have been compromised.
   2314 \vfill
   2315 \end{frame}
   2316 
   2317 
   2318 \begin{frame}{Online keys}
   2319 \begin{itemize}
   2320 \item The exchange needs $d$ and $w$ to be available for online signing.
   2321 \item The corresponding public keys $W$ and $(e,n)$ are certified using
   2322       Taler's public key infrastructure (which uses offline-only keys).
   2323 \end{itemize}
   2324 \vfill
   2325 \begin{center}
   2326 {\bf What happens if those private keys are compromised?}
   2327 \end{center}
   2328 \vfill
   2329 \end{frame}
   2330 
   2331 
   2332 \begin{frame}{Denomination key $(e,n)$ compromise}
   2333 \begin{itemize}
   2334 \item An attacker who learns $d$ can sign an arbitrary number of illicit coins
   2335       into existence and deposit them.
   2336 \item Auditor and exchange can detect this once the total number of deposits
   2337       (illicit and legitimate) exceeds the number of legitimate coins the
   2338       exchange created.
   2339 \item At this point, $(e,n)$ is {\em revoked}.  Users of {\em unspent}
   2340       legitimate coins reveal $b$ from their withdrawal operation and
   2341       obtain a {\em refund}.
   2342 \item The financial loss of the exchange is {\em bounded} by the number of
   2343       legitimate coins signed with $d$.
   2344 \item[$\Rightarrow$] Taler frequently rotates denomination signing keys and
   2345       deletes $d$ after the signing period of the respective key expires.
   2346 \end{itemize}
   2347 \begin{center}
   2348 \includegraphics[width=0.5\textwidth]{taler-diagram-denom-expiration.png}
   2349 \end{center}
   2350 \end{frame}
   2351 
   2352 
   2353 \begin{frame}{Online signing key $W$ compromise}
   2354 \begin{itemize}
   2355 \item An attacker who learns $w$ can sign deposit confirmations.
   2356 \item Attacker sets up two (or more) merchants and customer(s) which double-spend
   2357       legitimate coins at both merchants.
   2358 \item The merchants only deposit each coin once at the exchange and get paid once.
   2359 \item The attacker then uses $w$ to fake deposit confirmations for the double-spent
   2360       transactions.
   2361 \item The attacker uses the faked deposit confirmations to complain to the auditor
   2362       that the exchange did not honor the (faked) deposit confirmations.
   2363 \end{itemize}
   2364 The auditor can then detect the double-spending, but cannot tell who is to blame,
   2365 and (likely) would presume a malicious exchange, forcing it to pay both merchants.
   2366 \end{frame}
   2367 
   2368 
   2369 \begin{frame}{Detecting online signing key $W$ compromise}
   2370 \begin{itemize}
   2371 \item Merchants are required to {\em probabilistically} report
   2372       signed deposit confirmations to the auditor.
   2373 \item Auditor can thus detect exchanges not reporting signed
   2374       deposit confirmations.
   2375 \item[$\Rightarrow$] Exchange can rekey if illicit key use is detected,
   2376       then only has to honor deposit confirmations it already provided
   2377       to the auditor {\em and} those without proof of double-spending
   2378       {\em and} those merchants reported to the auditor.
   2379 \item[$\Rightarrow$] Merchants that do not participate in reporting
   2380       to the auditor risk their deposit permissions being voided in
   2381       cases of an exchange's private key being compromised.
   2382 \end{itemize}
   2383 \end{frame}
   2384 
   2385 
   2386 \begin{frame}{Database}
   2387 The exchange needs the database to detect double spending.
   2388 \begin{itemize}
   2389 \item Loss of the database will allow technically skilled people
   2390       to double-spend their digital cash, possibly resulting in
   2391       significant financial losses.
   2392 \item The database contains total amounts customers withdrew and
   2393       merchants received, so sensitive private banking data. It
   2394       must thus not become public.
   2395 \item The auditor must have a (current) copy. Asynchronous replication
   2396       should be sufficient.  This copy can also serve as an
   2397       additional (off-site?) backup.
   2398 \end{itemize}
   2399 \begin{center}
   2400   The database can also be replaced with a DLT if customer
   2401   requires it.
   2402 \end{center}
   2403 \end{frame}
   2404 
   2405 
   2406 \section{Component Architecture}
   2407 
   2408 \begin{frame}
   2409   \vfill
   2410   \begin{center}
   2411     {\bf Part VII: Component Architecture}
   2412   \end{center}
   2413   \vfill
   2414 \end{frame}
   2415 
   2416 
   2417 \begin{frame}[fragile]{Taler: Bank Perspective}
   2418 \begin{adjustbox}{max totalsize={.9\textwidth}{.7\textheight},center}
   2419 \begin{tikzpicture}
   2420  \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em];
   2421  \node (origin) at (0,0) {};
   2422  \node (exchange) [def,above=of origin,draw]{Exchange};
   2423  \node (nexus) [def, draw, below right=of exchange] {Nexus};
   2424  \node (corebanking) [def, draw, below left=of nexus] {Core Banking};
   2425  \node (nginx) [def, draw, above=of exchange]{Nginx};
   2426  \node (postgres) [def, draw, below left=of exchange]{Postgres};
   2427  \node (postgres-nexus) [def, draw, below right=of nexus]{Postgres};
   2428 
   2429  \tikzstyle{C} = [color=black, line width=1pt]
   2430 
   2431  \draw [<-, C] (exchange) -- (nginx) node [midway, above, sloped] (TextNode) {REST API};
   2432  \draw [<-, C] (postgres) -- (exchange) node [midway, above, sloped] (TextNode) {SQL};
   2433  \draw [<-, C] (postgres-nexus) -- (nexus) node [midway, above, sloped] (TextNode) {SQL};
   2434  \draw [<-, C] (nexus) -- (exchange) node [midway, above, sloped] (TextNode) {Internal REST API};
   2435  \draw [<-, C] (corebanking) -- (nexus) node [midway, above, sloped] (TextNode) {EBICS/FinTS};
   2436 
   2437 \end{tikzpicture}
   2438 \end{adjustbox}
   2439 \end{frame}
   2440 
   2441 
   2442 \begin{frame}{Taler: Exchange Architecture}
   2443 \begin{center}
   2444 \begin{tikzpicture}
   2445  \tikzstyle{def} = [node distance=2em and 2.5em, inner sep=1em, outer sep=.3em];
   2446  \node (origin) at (0,0) {};
   2447  \node (httpd) [def,above=of origin,draw]{httpd};
   2448  \node (secmod-rsa) [def, draw, right=of httpd] {secmod-rsa};
   2449  \node (secmod-eddsa) [def, draw, left=of httpd] {secmod-eddsa};
   2450  \node (postgres) [def, draw, below=of httpd]{Postgres};
   2451  \node (aggregator) [def, draw, right=of postgres]{aggregator};
   2452  \node (transfer) [def, draw, below left=of postgres]{transfer};
   2453  \node (wirewatch) [def, draw, below right=of postgres]{wirewatch};
   2454  \node (nexus) [def, draw, below=of postgres]{Nexus};
   2455 
   2456  \tikzstyle{C} = [color=black, line width=1pt]
   2457 
   2458  \draw [<->, C] (httpd) -- (postgres) node [midway, above, sloped] (TextNode) {};
   2459  \draw [<->, C] (httpd) -- (secmod-rsa) node [midway, above, sloped] (TextNode) {};
   2460  \draw [<->, C] (httpd) -- (secmod-eddsa) node [midway, above, sloped] (TextNode) {};
   2461  \draw [<->, C] (aggregator) -- (postgres) node [midway, above, sloped] (TextNode) {};
   2462  \draw [<->, C] (wirewatch) -- (postgres) node [midway, above, sloped] (TextNode) {};
   2463  \draw [<->, C] (transfer) -- (postgres) node [midway, above, sloped] (TextNode) {};
   2464  \draw [->, C] (transfer) -- (nexus) node [midway, above, sloped] (TextNode) {};
   2465  \draw [<-, C] (wirewatch) -- (nexus) node [midway, above, sloped] (TextNode) {};
   2466 \end{tikzpicture}
   2467 \end{center}
   2468 \end{frame}
   2469 
   2470 
   2471 \begin{frame}
   2472 \frametitle{Taler: Auditor Perspective}
   2473 \begin{center}
   2474 \begin{tikzpicture}
   2475  \tikzstyle{def} = [node distance=2em and 2.5em, inner sep=1em, outer sep=.3em];
   2476  \node (origin) at (0,0) {};
   2477  \node (httpd) [def,above left=of origin,draw]{auditor-httpd};
   2478  \node (report) [def,above right=of origin,draw]{auditor-report};
   2479  \node (postgres-A) [def, draw, below=of origin] {Postgres (Auditor)};
   2480  \node (postgres-E) [def, draw, below=of postgres-A] {Postgres (Exchange)};
   2481 
   2482  \tikzstyle{C} = [color=black, line width=1pt]
   2483 
   2484  \draw [->, C] (postgres-E) -- (postgres-A) node [midway, above, sloped] (TextNode) {sync};
   2485  \draw [<->, C] (httpd) -- (postgres-A) node [midway, above, sloped] (TextNode) {};
   2486  \draw [<->, C] (report) -- (postgres-A) node [midway, above, sloped] (TextNode) {};
   2487 \end{tikzpicture}
   2488 \end{center}
   2489 \end{frame}
   2490 
   2491 
   2492 \begin{frame}
   2493 \frametitle{Taler: Merchant Perspective}
   2494 \begin{center}
   2495 \begin{tikzpicture}
   2496  \tikzstyle{def} = [node distance= 3.5em and 2em, inner sep=1em, outer sep=.3em];
   2497  \node (origin) at (0,0) {};
   2498  \node (backend) [def,above=of origin,draw]{{\tiny taler-merchant-httpd}};
   2499  \node (frontend) [def,above left=of backend,draw]{{\tiny E-commerce Frontend}};
   2500  \node (backoffice) [def,above right=of
   2501 backend,draw]{\tiny Backoffice};
   2502  \node (postgres) [def, draw, below left=of backend] {\tiny Postgres};
   2503  \node (sqlite) [def, draw, below=of backend] {\tiny Sqlite};
   2504  \node (alt) [def, draw, below right=of backend] {...};
   2505 
   2506  \tikzstyle{C} = [color=black, line width=1pt]
   2507 
   2508  \draw [->, C] (frontend) -- (backend) node [midway, above, sloped]
   2509 (TextNode) {\tiny REST API};
   2510  \draw [->, C] (backoffice) -- (backend) node [midway, above, sloped]
   2511 (TextNode) {\tiny REST API};
   2512  \draw [<->, C] (backend) -- (postgres) node [midway, above, sloped]
   2513 (TextNode) {\tiny SQL};
   2514  \draw [<->, C] (backend) -- (sqlite) node [midway, above, sloped]
   2515 (TextNode) {\tiny SQL};
   2516  \draw [<->, C] (backend) -- (alt) node [midway, above, sloped]
   2517 (TextNode) {\tiny SQL};
   2518 \end{tikzpicture}
   2519 \end{center}
   2520 \end{frame}
   2521 
   2522 
   2523 \begin{frame}
   2524 \frametitle{Taler: Wallet Architecture}
   2525 \begin{center}
   2526 \begin{tikzpicture}
   2527  \tikzstyle{def} = [node distance= 5em and 4.5em, inner sep=1em, outer sep=.3em];
   2528  \node (origin) at (0,0) {};
   2529  \node (gui) [def,above=of origin,draw]{wallet-gui};
   2530  \node (core) [def,below=of gui,draw]{wallet-core};
   2531  \node (sync) [def, draw, below left=of core] {Sync};
   2532  \node (taler) [def, draw, below right=of core] {Taler};
   2533  \node (anastasis) [def, draw, below=of core] {Anastasis};
   2534 
   2535  \tikzstyle{C} = [color=black, line width=1pt]
   2536  \draw [<->, C] (gui) -- (core) node [midway, above, sloped] (TextNode) {};
   2537  \draw [<->, C] (core) -- (sync) node [midway, above, sloped] (TextNode) {Backup};
   2538  \draw [<->, C] (core) -- (taler) node [midway, above, sloped] (TextNode) {Payment};
   2539  \draw [<->, C] (core) -- (anastasis) node [midway, above, sloped] (TextNode) {Key Escrow};
   2540 \end{tikzpicture}
   2541 \end{center}
   2542 \end{frame}
   2543 
   2544 
   2545 \begin{frame}[t]{Software architecture for the Taler Snack Machine}
   2546   \framesubtitle{Code at \url{https://git.taler.net/taler-mdb}}
   2547 \begin{figure}
   2548   				\centering
   2549   				\includegraphics[width=.9\textwidth]{software_stack}
   2550 				\end{figure}
   2551 \end{frame}
   2552 
   2553 
   2554 
   2555 \section{Integration considerations}
   2556 
   2557 \begin{frame}
   2558   \vfill
   2559   \begin{center}
   2560     {\bf Part VIII: Integration considerations}
   2561   \end{center}
   2562   \vfill
   2563 \end{frame}
   2564 
   2565 
   2566 \begin{frame}[fragile]{RFC 8905: \texttt{payto:} Uniform Identifiers for Payments and Accounts}
   2567   \vfill
   2568   Like \texttt{mailto:}, but for bank accounts instead of email accounts!
   2569   \vfill
   2570   \begin{verbatim}
   2571     payto://<PAYMENT-METHOD>/<ACCOUNT-NR>
   2572       ?subject=InvoiceNr42
   2573       &amount=EUR:12.50
   2574   \end{verbatim}
   2575   \vfill
   2576   Default action:  Open app to review and confirm payment.
   2577   \vfill
   2578 \includegraphics[width=0.25\textwidth]{einzahlschein-ch.jpeg}
   2579 \hfill
   2580 \includegraphics[width=0.2\textwidth]{de-ueberweisungsformular.png}
   2581   \vfill
   2582 \end{frame}
   2583 
   2584 
   2585 \begin{frame}[fragile]{Benefits of {\tt payto://}}
   2586   \begin{itemize}
   2587     \item Standardized way to represent financial resources (bank account, bitcoin wallet)
   2588       and payments to them
   2589     \item Useful on the client-side on the Web and for FinTech backend applications
   2590     \item Payment methods (such as IBAN, ACH, Bitcoin) are registered with
   2591           IANA and allow extra options
   2592   \end{itemize}
   2593   \begin{center}
   2594   {\bf Taler wallet can generate payto://-URI for withdraw!}
   2595   \end{center}
   2596 \end{frame}
   2597 
   2598 
   2599 \begin{frame}{Fully Offline Payments {\bf (WiP)}}
   2600 \framesubtitle{\url{https://docs.taler.net/design-documents/030-offline-payments.html}}
   2601 Many central banks today demand offline capabilities for digital payment solutions.
   2602 \vfill
   2603 \noindent
   2604 Three possible approaches:
   2605 \begin{enumerate}
   2606   \item Trust-based offline payments (has counterparty and/or privacy risks)
   2607   \item Full HSM Taler wallet (has hardware costs)
   2608   \item Light-weight HSM balance register
   2609 \end{enumerate}
   2610 \vfill
   2611 \end{frame}
   2612 
   2613 
   2614 \begin{frame}{Partially Offline Payments with GNU Taler}
   2615 We have filed for a patent to address situations where only the merchant is offline:
   2616 \begin{enumerate}
   2617   \item Customer pays by scanning static QR code and entering amount on mobile phone.
   2618   \item Merchant confirms payment by checking simple unique numeric confirmation code.
   2619   \item[$\Rightarrow$] Allows for very simple, cheap and secure merchant on-boarding.
   2620      Makes integration with existing PoS vendors optional.
   2621 \end{enumerate}
   2622 \begin{center}
   2623        {\bf Needed Point-of-sale hardware costs only $\approx$ \EUR{10}}
   2624 \end{center}
   2625 \vfill \pause
   2626 Largely implemented, only UI support missing. Expected to ship in Q1'2023.
   2627 \end{frame}
   2628 
   2629 
   2630 \section{Blockchain Integration}
   2631 
   2632 \begin{frame}
   2633   \vfill
   2634   \begin{center}
   2635     {\bf Part IX: Blockchain Integration}
   2636   \end{center}
   2637   \vfill
   2638   Antoine d’Aligny, Emmanuel Benoist and Christian Grothoff: ``{\em Project Depolymerization: Tokenization of Blockchains}''. {\bf 4th Conference on Blockchain Research \& Applications for Innovative Networks and Services}, 2022
   2639   \vfill
   2640 \end{frame}
   2641 
   2642 
   2643 \begin{frame}{Blockchain based cryptocurrencies}
   2644     \begin{tikzpicture}[remember picture,overlay]
   2645         \node (N1)[above right=5mm and 25mm of current page.center] {\includegraphics[width=34mm]{media/news1.png}};
   2646         \node (N0)[below=-3mm of N1] {\includegraphics[width=34mm]{media/news0.png}};
   2647         \node (N2)[below left=-26mm and -2.5mm of N1] {\includegraphics[width=34mm]{media/news2.png}};
   2648     \end{tikzpicture}
   2649     \begin{block}{Biggest cryptocurrencies}
   2650         \begin{itemize}
   2651             \item \textbf{BTC} Bitcoin
   2652             \item \textbf{ETH} Ethereum
   2653         \end{itemize}
   2654     \end{block}
   2655     \begin{block}{Common blockchain limitations}
   2656         \begin{itemize}
   2657             \item \textbf{Delay} block and confirmation delay
   2658             \item \textbf{Cost} transaction fees
   2659             \item \textbf{Scalability} limited amount of transaction per second
   2660             \item \textbf{Ecological impact} computation redundancy
   2661             \item \textbf{Privacy}
   2662             \item \textbf{Regulatory risk}
   2663         \end{itemize}
   2664     \end{block}
   2665 \end{frame}
   2666 
   2667 \begin{frame}{Layer 2 solutions: Taler vs. Lightning}
   2668 
   2669 \begin{minipage}{5.5cm}
   2670 {\bf Taler:}
   2671 \begin{itemize}
   2672 \item[\checkmark] can be used with any currency or asset
   2673 \item[\checkmark] can make payments instantly between any two parties
   2674 \item[\checkmark] has income transparency and can accommodate KYC, AML and CFT
   2675 \item[\checkmark] has cryptographic privacy protections
   2676 \item[\checkmark] can be used immediately to make instant payments
   2677 \item[\checkmark] uses one or more central exchange service providers
   2678 \end{itemize}
   2679 \end{minipage}
   2680 \hfill
   2681 \begin{minipage}{5.5cm}
   2682 {\bf Lightning:}
   2683 \begin{itemize}
   2684 \item[$\times$] only works with Bitcoin
   2685 \item[$\times$] requires payment route establishment, which can fail
   2686 \item[$\times$] cannot enforce regulatory requirements
   2687 \item[$\times$] requires money to be locked in payment channels
   2688 \item[$\times$] requires expensive Bitcoin node or trusted service to transact
   2689 \item[$\times$] claims to be decentralized, but uses few and centralized nodes in practice
   2690 \end{itemize}
   2691 \end{minipage}
   2692 \end{frame}
   2693 
   2694 \begin{frame}<1-| handout:0>{Taler}{Architecture}
   2695     \begin{columns}
   2696         \column{0.5\paperwidth}
   2697         \begin{tikzpicture}[
   2698                 rect/.style={circle, draw=black},
   2699                 sym/.style={-stealth, shorten >= 2pt, shorten <= 2pt}
   2700             ]
   2701             % Taler payment system
   2702             \node[rect](1) {Exchange};
   2703             \node[rect,below left=1.5cm and 0.7cm of 1](2) {Customer};
   2704             \node[rect,below right=1.5cm and 0.7cm of 1](3) {Merchant};
   2705 
   2706             \draw[sym] (1) -- node [midway, above, sloped] {\tiny Withdraw coins} (2);
   2707             \draw[sym] (2) -- node [midway, above, sloped] {\tiny Spend coins} (3);
   2708             \draw[sym] (3) -- node [midway, above, sloped] {\tiny Deposit coins} (1);
   2709 
   2710             % Settlement layer
   2711             \node[left=2cm of 1](E1){};
   2712             \node[right=2cm of 1](E2){};
   2713             \draw[sym] (E1) -- node [midway, above] {\tiny Deposit money} (1);
   2714             \draw[sym] (1) -- node [midway, above] {\tiny Withdraw money} (E2);
   2715 
   2716             % Auditor
   2717             \node[above= of 1](A){Auditor};
   2718             \draw[sym] (A) -- node [midway, right] {\tiny Verify} (1);
   2719 
   2720             % Separator
   2721             \node[below=1mm of E1] (S1S) {};
   2722             \node[below=1mm of E2] (S1E) {};
   2723             \node[above=6mm of E1] (S2S) {};
   2724             \node[above=6mm of E2] (S2E) {};
   2725 
   2726             \draw[dotted] (S1S) -- (S1E);
   2727             \draw[dotted] (S2S) -- (S2E);
   2728 
   2729             \node[below right=-2mm and -1.5mm of S2S] {\tiny{\emph{Settlement Layer}}};
   2730             \node[below right=-2mm and -1.5mm of S1S] {\tiny{\emph{Taler payment system}}};
   2731         \end{tikzpicture}
   2732         \column{0.47\paperwidth}
   2733         \begin{block}{Settlement layer}
   2734             \begin{itemize}
   2735                 \item RTGS $\equiv$ Blockchain!
   2736             \end{itemize}
   2737         \end{block}
   2738         \begin{block}{Taler payment system}
   2739             \begin{itemize}
   2740                 \item Realtime transactions, 1 RTT
   2741                 \item Scalable microtransactions
   2742                 \item Blind signatures (privacy)
   2743             \end{itemize}
   2744         \end{block}
   2745 
   2746     \end{columns}
   2747 \end{frame}
   2748 
   2749 \begin{frame}{Taler}{Blockchain settlement layer}
   2750     \begin{center}
   2751         \begin{tikzpicture}[
   2752                 rect/.style={rectangle, draw=black, minimum width=30mm},
   2753                 sym/.style={stealth-stealth, shorten >= 2pt, shorten <= 2pt},
   2754                 block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm},
   2755             ]
   2756 
   2757             %% Architecture
   2758             \node(Tt){Taler};
   2759             \node[rect,below=0cm of Tt](Tc){Exchange};
   2760             \node[rect,fit={(Tt) (Tc)}](T){};
   2761 
   2762             \node[rect,below=7mm of Tc](D) {\textbf{Depolymerization}};
   2763 
   2764             \node[rect,below=7mm of D](Bc){Node};
   2765             \node[below=0cm of Bc](Bt){Blockchain};
   2766             \node[rect,fit={(Bt) (Bc)}](B){};
   2767 
   2768             \draw[sym] (T) -- (D);
   2769             \draw[sym] (D) -- (B);
   2770 
   2771             %% Blockchain
   2772             \node[block,right=8mm of B] (1){};
   2773             \node[block,right=4mm of 1] (2){};
   2774             \node[block,right=4mm of 2] (3){};
   2775             \node[block,right=4mm of 3] (4){};
   2776             \node[block,right=4mm of 4] (5){};
   2777             \node[block,right=4mm of 5] (6){};
   2778             \draw[-stealth] (1) -- (2);
   2779             \draw[-stealth] (2) -- (3);
   2780             \draw[-stealth] (3) -- (4);
   2781             \draw[-stealth] (4) -- (5);
   2782             \draw[-stealth] (5) -- (6);
   2783 
   2784             \node[left=4mm of 1] (S){};
   2785             \node[right=4mm of 6] (E){};
   2786             \draw[-stealth] (S) -- (1);
   2787             \draw[-stealth] (6) -- (E);
   2788 
   2789             %% Taler
   2790             \node[block, below right=-7.5mm and 20.5mm of T] (off){Off-chain transactions};
   2791             \node[above=-0.5mm of off] {\includegraphics[height=7mm]{taler-logo-2021-inkscape.pdf}};
   2792 
   2793             %% Depolymerization
   2794             \node[right=11mm of D] {\small{Credit}};
   2795             \node[right=50mm of D] {\small{Debit}};
   2796             \draw[dashed,-stealth] (1.north) |- (off.west);
   2797             \draw[dashed,-stealth] (off.east) -| (6.north);
   2798         \end{tikzpicture}
   2799     \end{center}
   2800 \end{frame}
   2801 
   2802 \begin{frame}<1-| handout:0>{Challenges}
   2803     \begin{block}{Taler Metadata}
   2804         \begin{itemize}
   2805             \item Metadata are required to link a wallet to credits and
   2806                   allow merchant to link deposits to debits
   2807             \item Putting metadata in blockchain transactions can be tricky
   2808         \end{itemize}
   2809     \end{block}
   2810     \begin{block}{Blockchain based cryptocurrencies}
   2811         \begin{itemize}
   2812             \item Blockchain transactions lack finality (fork)
   2813             \item Transactions can be stuck for a long time (mempool)
   2814         \end{itemize}
   2815     \end{block}
   2816 \end{frame}
   2817 
   2818 \begin{frame}<1-| handout:0>{Blockchain challenges}{Chain reorganization}
   2819     \begin{center}
   2820         \begin{tikzpicture}[
   2821                 block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm},
   2822                 ar/.style={-stealth}
   2823             ]
   2824             % Common
   2825             \node[block](1){};
   2826             \node[block,right=5mm of 1](2){$D_0$};
   2827             \node[block,right=5mm of 2](3){};
   2828             \draw[ar] (1) -- (2);
   2829             \draw[ar] (2) -- (3);
   2830 
   2831             % Current
   2832             \node [block,right=5mm of 3](4){};
   2833             \node[block,right=5mm of 4](5){};
   2834             \node[block,right=5mm of 5](6){$D_1$};
   2835             \draw[ar] (3) -- (4);
   2836             \draw[ar] (4) -- (5);
   2837             \draw[ar] (5) -- (6);
   2838 
   2839             % Fork
   2840             \node [block,above=7mm of 4](4p){};
   2841             \node[block,right=5mm of 4p](5p){$D_2$};
   2842             \node[block,right=5mm of 5p](6p){};
   2843             \node[block,right=5mm of 6p](7p){};
   2844             \draw[ar] (3.east) -- (4p.west);
   2845             \draw[ar] (4p) -- (5p);
   2846             \draw[ar] (5p) -- (6p);
   2847             \draw[ar] (6p) -- (7p);
   2848 
   2849             % Indication
   2850             \node [right=5mm of 7p]{\emph{fork}};
   2851             \node [right=17mm of 6]{\emph{active}};
   2852         \end{tikzpicture}
   2853     \end{center}
   2854     A fork is when concurrent blockchain states coexist. Nodes will follow
   2855     the longest chain, replacing recent blocks if necessary during a
   2856     blockchain reorganization. If a deposit transaction disappears from the
   2857     blockchain, an irrevocable withdraw transactions would no longer be backed
   2858     by credit.
   2859 \end{frame}
   2860 
   2861 \begin{frame}<1-| handout:0>{Blockchain challenges}{Stuck transactions}
   2862     We want confirmed debits within a limited time frame.
   2863     \begin{figure}
   2864         \centering
   2865         \only<1> {
   2866             \begin{tikzpicture}[
   2867                     dot/.style={circle,fill,inner sep=1pt,}
   2868                 ]
   2869                 \node (I) {\includegraphics[width=\textwidth]{media/fee.png}};
   2870                 \node [below left=-2.5mm and -1.5cm of I] (Tx) {\small Tx};
   2871                 \node [dot,above=8.4mm of Tx](D) {};
   2872                 \draw [dotted,thick] (Tx) -- (D);
   2873                 \node [left=-4.5cm of Tx] (C) {\small conf};
   2874                 \node [dot,above=8.4mm of C](D1) {};
   2875                 \draw [dotted,thick] (C) -- (D1);
   2876             \end{tikzpicture}
   2877         }
   2878         \only<2> {
   2879             \includegraphics[width=\textwidth]{media/fee_var.png}
   2880             \caption{Bitcoin average transaction fee over 6 months {\tiny (ychart)}}
   2881         }
   2882     \end{figure}
   2883     \only<1>{When we trigger a debit with a fee too small, it may not be
   2884         confirmed in a timely fashion.}
   2885     \only<2>{However, transaction fees are unpredictable.}
   2886 \end{frame}
   2887 
   2888 
   2889 \begin{frame}{Depolymerization}{Architecture}
   2890     \begin{center}
   2891         \begin{tikzpicture}[
   2892                 rect/.style={rectangle, draw=black, minimum height=6mm, minimum width=28mm},
   2893                 sym/.style={stealth-stealth, shorten >= 2pt, shorten <= 2pt}
   2894             ]
   2895             \node[rect](1) {Taler Exchange};
   2896             \node[rect,below=of 1](2) {Wire Gateway};
   2897             \node[rect,right=of 2](3) {PostgreSQL};
   2898             \node[rect,right=of 3](4) {DLT Adapter};
   2899             \node[rect,above=of 4](5) {DLT Full Node};
   2900 
   2901             \draw[sym] (1) -- node [midway,right] {\tiny HTTP} (2);
   2902             \draw[sym] (2) -- node [midway,above] {\tiny SQL} (3);
   2903             \draw[sym] (3) -- node [midway,above] {\tiny SQL} (4);
   2904             \draw[sym] (4) -- node [midway,left ] {\tiny RPC} (5);
   2905 
   2906 
   2907             \node[above= 2mm of 1]{\small{\emph{Wire Gateway API}}};
   2908             \node[above= 2mm of 5]{\small{\emph{DLT specific}}};
   2909             \node[above=22mm of 3](T) {};
   2910             \draw[dotted] (3) -- (T);
   2911         \end{tikzpicture}
   2912     \end{center}
   2913     \begin{itemize}
   2914         \item Common database to store transactions state and communicate
   2915               with notifications
   2916         \item Wire Gateway for Taler API compatibility
   2917         \item DLT specific adapter
   2918     \end{itemize}
   2919 \end{frame}
   2920 
   2921 \begin{frame}{Storing metadata}{Bitcoin}
   2922     \begin{block}{Bitcoin - Credit}
   2923         \begin{itemize}
   2924             \item Transactions from code
   2925             \item Only 32B + URI
   2926             \item \textbf{OP\_RETURN}
   2927         \end{itemize}
   2928     \end{block}
   2929     \begin{block}{Bitcoin - Debit}
   2930         \begin{itemize}
   2931             \item Transactions from common wallet software
   2932             \item Only 32B
   2933             \item \textbf{Fake Segwit Addresses}
   2934         \end{itemize}
   2935     \end{block}
   2936 \end{frame}
   2937 \begin{frame}{Storing metadata}{Ethereum}
   2938     \begin{block}{Smart contracts}
   2939         \begin{itemize}
   2940             \item Logs in smart contract is the recommend way {\tiny (ethereum.org)}
   2941             \item Expensive (additional storage and execution fees)
   2942             \item Avoidable attack surface (error prone)
   2943         \end{itemize}
   2944     \end{block}
   2945     \begin{block}{Custom input format}
   2946         Use input data in transactions, usually used to call smart contract, to
   2947         store our metadata.
   2948     \end{block}
   2949 \end{frame}
   2950 
   2951 \begin{frame}{Handling blockchain reorganization}
   2952     \begin{center}
   2953         \begin{tikzpicture}[
   2954                 block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm},
   2955                 conf/.style={draw=black!60!green,fill=black!60!green!10},
   2956                 nconf/.style={dotted},
   2957                 err/.style={draw=black!60!red,fill=black!60!red!10},
   2958                 ar/.style={-stealth}
   2959             ]
   2960             % Common
   2961             \node[block,conf](1){};
   2962             \node[block,conf,right=5mm of 1](2){$D_0$};
   2963             \node[block,conf,right=5mm of 2](3){};
   2964             \draw[ar] (1) -- (2);
   2965             \draw[ar] (2) -- (3);
   2966 
   2967             % Current
   2968             \only<1>{
   2969                 \node [block,nconf,right=5mm of 3](4){};
   2970             }
   2971             \only<2->{
   2972                 \node [block,conf,right=5mm of 3](4){\only<3>{$D_3$}};
   2973             }
   2974             \node[block,nconf,right=5mm of 4](5){};
   2975             \node[block,nconf,right=5mm of 5](6){$D_1$};
   2976             \draw[ar] (3) -- (4);
   2977             \draw[ar] (4) -- (5);
   2978             \draw[ar] (5) -- (6);
   2979 
   2980             % Fork
   2981             \only<-2>{
   2982                 \node [block,nconf,above=7mm of 4](4p){};
   2983             }
   2984             \only<3>{
   2985                 \node [block,dashed,err,above=7mm of 4](4p){$D_3'$};
   2986             }
   2987             \node[block,nconf,right=5mm of 4p](5p){$D_2$};
   2988             \node[block,nconf,right=5mm of 5p](6p){};
   2989             \node[block,nconf,right=5mm of 6p](7p){};
   2990             \draw[ar] (3.east) -- (4p.west);
   2991             \draw[ar] (4p) -- (5p);
   2992             \draw[ar] (5p) -- (6p);
   2993             \draw[ar] (6p) -- (7p);
   2994 
   2995             % Indication
   2996             \node [right=5mm of 7p]{\emph{fork}};
   2997             \node [right=17mm of 6]{\emph{active}};
   2998         \end{tikzpicture}
   2999     \end{center}
   3000     \only<1>{As small reorganizations are common, Satoshi already recommended to
   3001         apply a confirmation delay to handle most disturbances and attacks.}
   3002     \only<2>{If a reorganization longer than the confirmation delay happens,
   3003         but it did not remove credits, Depolymerizer is safe and automatically
   3004         resumes.}
   3005     \only<3>{If a fork removed a confirmed debit, an attacker may create a
   3006         conflicting transaction. Depolymerizer suspends operation until lost
   3007         credits reappear.}
   3008 \end{frame}
   3009 
   3010 \begin{frame}{Adaptive confirmation}
   3011     \begin{center}
   3012         \begin{tikzpicture}[
   3013                 block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm},
   3014                 conf/.style={draw=black!60!green,fill=black!60!green!10},
   3015                 nconf/.style={dotted},
   3016                 conft/.style={text=black!60!green},
   3017                 confl/.style={draw=black!60!green},
   3018                 ar/.style={-stealth}
   3019             ]
   3020             % Common
   3021             \node(0){};
   3022             \node[block,conf,right=5mm of 0](1){};
   3023             \node[block,conf,right=5mm of 1](2){};
   3024             \draw[ar] (0) -- (1);
   3025             \draw[ar] (1) -- (2);
   3026 
   3027             % Current
   3028             \node[block,conf,right=5mm of 2](3){};
   3029             \node[block,nconf,right=5mm of 3](4){};
   3030             \node[block,nconf,right=5mm of 4](5){};
   3031             \node[block,nconf,right=5mm of 5](6){};
   3032             \draw[ar] (2) -- (3);
   3033             \draw[ar] (3) -- (4);
   3034             \draw[ar] (4) -- (5);
   3035             \draw[ar] (5) -- (6);
   3036 
   3037             % Fork
   3038             \node[block,nconf,above=7mm of 3](3p){};
   3039             \node[block,nconf,right=5mm of 3p](4p){};
   3040             \node[block,nconf,right=5mm of 4p](5p){};
   3041             \node[block,nconf,right=5mm of 5p](6p){};
   3042             \node[block,nconf,right=5mm of 6p](7p){};
   3043             \draw[ar] (2.east) -- (3p.west);
   3044             \draw[ar] (3p) -- (4p);
   3045             \draw[ar] (4p) -- (5p);
   3046             \draw[ar] (5p) -- (6p);
   3047             \draw[ar] (6p) -- (7p);
   3048 
   3049             % Indication
   3050             \node[right=5mm of 7p]{\emph{fork}};
   3051             \node[right=17mm of 6]{\emph{active}};
   3052 
   3053             % Confirmation
   3054             \path (0) -- (1) node[conft,midway, below=6mm] (M) {Max};
   3055             \path (2) -- (3) node[conft,midway, below=6mm] (N) {New};
   3056             \path (3) -- (4) node[conft,midway, below=6mm] (I) {Initial};
   3057             \node[above=25mm of M] (Mp) {};
   3058             \node[above=25mm of N] (Np) {};
   3059             \node[above=25mm of I] (Ip) {};
   3060             \draw[confl,thick,dotted](M) -- (Mp);
   3061             \draw[confl](N) -- (Np);
   3062             \draw[confl,thick,dotted](I) -- (Ip);
   3063         \end{tikzpicture}
   3064     \end{center}
   3065     If we experience a reorganization once, its likely for another
   3066     reorganization of a similar scope to happen again.
   3067     Depolymerizer learns from reorganizations by increasing its confirmation delay.
   3068 \end{frame}
   3069 
   3070 
   3071 
   3072 \begin{frame}<1-| handout:0>{DLT Adapter}{Architecture}
   3073     \begin{block}{Event system}
   3074         \begin{itemize}
   3075             \item \textbf{Watcher} watch and notify for new blocks with credits
   3076             \item \textbf{Wire Gateway} notify requested debits
   3077             \item \textbf{Worker} operates on notifications updating state
   3078         \end{itemize}
   3079     \end{block}
   3080 \end{frame}
   3081 
   3082 
   3083 \begin{frame}<1-| handout:0>{DLT Adapter state machine}
   3084     \begin{columns}
   3085         \column{0.5\paperwidth}
   3086         \begin{figure}
   3087             \begin{tikzpicture}[
   3088                     rect/.style={rectangle, draw=black, minimum height=6mm, minimum width=50mm},
   3089                 ]
   3090 
   3091                 \node[rect](wo1) {Wait for notifications};
   3092                 \node[rect, below=4mm of wo1](wo2) {Reconcile local DB with DLT};
   3093                 \node[rect, below=4mm of wo2](wo3) {Trigger debits};
   3094                 \node[rect, below=4mm of wo3](wo4) {Reissue stuck debits};
   3095                 \node[rect, below=4mm of wo4](wo5) {Bounce malformed credits};
   3096                 \draw[-stealth] (wo1) -- (wo2);
   3097                 \draw[-stealth] (wo2) -- (wo3);
   3098                 \draw[-stealth] (wo3) -- (wo4);
   3099                 \draw[-stealth] (wo4) -- (wo5);
   3100                 \draw[-stealth] (wo5) .. controls ([xshift=-0.4cm] wo5.west) and ([xshift=-0.4cm] wo1.west) .. (wo1);
   3101             \end{tikzpicture}
   3102             \caption{Worker loop}
   3103         \end{figure}
   3104         \column{0.47\paperwidth}
   3105         \begin{block}{DLT reconcialisation}
   3106             \begin{itemize}
   3107                 \item List new and removed transactions since last reconciliation
   3108                 \item Check for confirmed credits removal
   3109                 \item Register new credits
   3110                 \item Recover lost debits
   3111             \end{itemize}
   3112         \end{block}
   3113     \end{columns}
   3114 \end{frame}
   3115 
   3116 \begin{frame}<1-| handout:0>{Related work}
   3117     \begin{block}{Centralization - Coinbase off-chain sending}
   3118         \begin{itemize}
   3119             \item [$+$] Fast and cheap: off chain transaction
   3120             \item [$-$] Trust in Coinbase: privacy, security \& transparency
   3121         \end{itemize}
   3122     \end{block}
   3123     \begin{block}{Layering - Lightning Network}
   3124         \begin{itemize}
   3125             \item [$+$] Fast and cheap: off-chain transactions
   3126             \item [$-$] Requires setting up bidirectional payment channels
   3127             \item [$-$] Fraud attempts are mitigated via a complex penalty system
   3128         \end{itemize}
   3129     \end{block}
   3130 \end{frame}
   3131 
   3132 \begin{frame}{Project Depolymerization Summary}
   3133     Taler can be used as a layer 2 for existing
   3134     crypto-currencies and stablecoins with Depolymerizer:
   3135 
   3136     \begin{itemize}
   3137         \item [$-$] Trust exchange operator or auditors
   3138         \item [$+$] Fast and cheap
   3139         \item [$+$] Realtime: transactions with milliseconds of latency
   3140         \item [$+$] Linear scalability
   3141         \item [$+$] Ecological
   3142         \item [$+$] Privacy when it can, transparency when it must (avoid tax evasion and money laundering)
   3143     \end{itemize}
   3144 %Future work:
   3145 %    \begin{itemize}
   3146 %        \item  Universal auditability, using sharded transactions history
   3147 %        \item  Smarter analysis, update confirmation delay based on currency network behavior
   3148 %        \item  Multisig by multiple operator for transactions validation
   3149 %    \end{itemize}
   3150 \end{frame}
   3151 
   3152 
   3153 \section{Conclusion}
   3154 
   3155 \begin{frame}
   3156   \vfill
   3157   \begin{center}
   3158     {\bf Part X: Conclusion}
   3159   \end{center}
   3160   \vfill
   3161 \end{frame}
   3162 
   3163 
   3164 \begin{frame}{Trust Earned on Multiple Levels}
   3165 \begin{itemize}
   3166 \item Free/Libre software with published external code reviews.
   3167 \item The Swiss National Bank published white paper:
   3168  ``How to issue a CBDC'' on their website based on Taler technology.
   3169 \item Taler endorsed by the Austrian National Bank in their Q2'2022
   3170   publication as potential {\em Digital Euro} solution.
   3171 \item The EU Commission has issued a Seal of Excellence to Taler
   3172   Systems SA
   3173 \item FINMA Switzerland had no objections to launch (planned for Q3'2023)
   3174 \end{itemize}
   3175 \end{frame}
   3176 
   3177 
   3178 \begin{frame}{Features we did NOT discuss in-depth}
   3179   \begin{description}
   3180   \item[{\bf taler-exchange-secmod-cs:}] Clause-Schnorr blind signature support
   3181   \item[{\bf Fakebank:}] high-performance in-memory RTGS emulator
   3182   \item[{\bf libbrandt:}] Escrow-based programmability extensions (e.g. for auctions)
   3183   \item[{\bf twister}:] Man-in-the-middle fault-injection for testing
   3184   \item[{\bf mch}:] Taler for embedded devices ({\bf WiP})
   3185   \end{description}
   3186 \end{frame}
   3187 
   3188 
   3189 \begin{frame}{Feature comparison}
   3190   \begin{center} \small
   3191     \begin{tabular}{l||c|c|c|c|c}
   3192                 & Cash & Bitcoin & Zerocoin & Creditcard & GNU Taler \\ \hline \hline
   3193     Online      &$-$$-$$-$  &   ++    &    ++    &     +      &   +++  \\ \hline
   3194     Offline     & +++  &   $-$$-$    &    $-$$-$    &     +      &   ++  \\ \hline
   3195     Trans. cost & +    & $-$$-$$-$   & $-$$-$$-$  &     $-$      &   ++  \\ \hline
   3196     Speed       & +    & $-$$-$$-$   & $-$$-$$-$  &     o      &   ++  \\ \hline
   3197     Taxation    & $-$    &   $-$$-$    &  $-$$-$$-$   &    +++     &  +++  \\ \hline
   3198     Payer-anon  &  ++  &   o     &    ++    &  $-$$-$$-$   &  +++  \\ \hline
   3199     Payee-anon  & ++   &   o     &    ++    &  $-$$-$$-$    &  $-$$-$$-$ \\ \hline
   3200     Security    &  $-$   &   o     &    o     &    $-$$-$      &  ++   \\ \hline
   3201     Conversion  & +++  &  $-$$-$$-$   & $-$$-$$-$ &    +++     &  +++  \\ \hline
   3202     Libre       &  $-$   &  +++    &    +++   & $-$ $-$ $-$      &  +++  \\
   3203   \end{tabular}
   3204   \end{center}
   3205 \end{frame}
   3206 
   3207 
   3208 \begin{frame}<1-| handout:0>{Development Infrastructure}
   3209   \begin{itemize}
   3210     \item Borg: incremental backup
   3211     \item Buildbot: CI/CD
   3212     \item Davical: Caldav group calendar
   3213     \item Docker: virtualization, packaging
   3214     \item Git/Gitolite: distributed version control
   3215     \item Mailman: public e-mail lists
   3216     \item Mantis: bug tracker
   3217     \item Mattermost: messaging, process management
   3218     \item Sphinx: documentation generation (HTML, PDF, info, man)
   3219     \item Weblate: collaborative AI-supported internationalization
   3220     \end{itemize}
   3221 \end{frame}
   3222 
   3223 
   3224 \begin{frame}<1-| handout:0>{Development Tools}
   3225   \begin{itemize}
   3226     \item Coverity: static analysis (C/C++)
   3227     \item GNU recutils: constant registration
   3228     \item Twister: fault injection
   3229     \item Valgrind: dynamic analysis (C/C++)
   3230     \item zzuf: fuzzing
   3231   \end{itemize}
   3232 \end{frame}
   3233 
   3234 
   3235 \begin{frame}<1-| handout:0>{Cryptographic dependencies}
   3236   \begin{itemize}
   3237     \item libargon2
   3238     \item libgcrypt
   3239     \item libsodium
   3240   \end{itemize}
   3241 \end{frame}
   3242 
   3243 
   3244 \begin{frame}<1-| handout:0>{Additional dependencies}
   3245   \begin{itemize}
   3246     \item libsqlite3
   3247     \item libpq / Postgres
   3248     \item libjansson
   3249     \item libcurl
   3250     \item libunistring
   3251     \item {\bf GNU libmicrohttpd}
   3252     \item {\bf GNUnet}
   3253   \end{itemize}
   3254 \end{frame}
   3255 
   3256 
   3257 \begin{frame}{Rights}
   3258   \begin{itemize}
   3259     \item GNUnet e.V. shared copyrights of their AGPLv3+ licensed code with Taler Systems SA
   3260     \item Taler Systems SA holds copyrights to entire GNU Taler code base (AGPLv3+, GPLv3+,
   3261       dual-licensing exclusive domain of Taler Systems SA)
   3262     \item Taler Systems SA applied for patent on offline payment solution
   3263     \item Taler Systems SA holds trademark on ``Taler''.
   3264     \item FSF holds trademark on ``GNU'', we are authorized to use ``GNU Taler''.
   3265     \item Taler Systems SA owns {\tt taler.net} and {\tt taler-systems.com}.
   3266   \end{itemize}
   3267 \end{frame}
   3268 
   3269 
   3270 \begin{frame}{Summary of Taler Solution}
   3271 
   3272 \begin{enumerate}
   3273 \item {\bf Frictionless one click}, cash-like digital payments \&
   3274 instant
   3275 confirmation for all fiat- and crypto-currencies and for all users,
   3276 unbanked, young and old.
   3277 \item With {\bf income-transparency on the recipient side} is
   3278 crime-preventing \& Taler coins are as secure as cash without
   3279 counterfeits. No ID theft.
   3280 \item {\bf Guaranteed privacy} for spender \& data minimization: payment
   3281 requires/shares no personal information.
   3282 \item {\bf No bank account needed}
   3283 \item Highly efficient in power, processing \& storage, extremely low
   3284 cost \& {\bf highly scalable} to 100’000 transactions/sec.
   3285 \item Economically viable (sub-cent) instant {\bf micro-transactions} for
   3286 e-commerce, Internet of Things, metaverse, machine2machine, $\ldots$
   3287 \end{enumerate}
   3288 \end{frame}
   3289 
   3290 \begin{frame}{Collaboration with SICPA \& INX}
   3291 \framesubtitle{Discussion Proposal}
   3292 Taler can provide:
   3293 \begin{itemize}
   3294 \item Exclusive license for Central banks
   3295 \item Coordination of development efforts
   3296 \item Priority support in maintenance \& roll-outs
   3297 \end{itemize}
   3298 \end{frame}
   3299 
   3300 
   3301 
   3302 \begin{frame}{Do you have any questions?}
   3303   \framesubtitle{\url{https://taler.net/en/bibliography.html}}
   3304   \vfill
   3305 References:
   3306 {\tiny
   3307   \begin{enumerate}
   3308  \item{David Chaum, Christian Grothoff and Thomas Moser.
   3309        {\em How to issue a central bank digital currency}.
   3310        {\bf SNB Working Papers, 2021}.}
   3311  \item{Martin Summer and Hannes Hermanky.
   3312        {\em A digital euro and the future of cash}.
   3313        {\bf Monetary Policy \& The Economy Q1-Q2/22}.}
   3314  \item{Antoine d’Aligny, Emmanuel Benoist, Florian Dold, Christian Grothoff, Özgür Kesim and Martin Schanzenbach.
   3315        {\em Who comes after us? The correct mindset for designing a Central Bank Digital Currency}.
   3316        {\bf SUERF Policy Notes 279/2022}.}
   3317  \item{Florian Dold.
   3318        {\em GNU Taler}.
   3319        {\bf University of Rennes 1, PhD Thesis, 2019}.}
   3320  \item{Christian Grothoff and Alex Pentland.
   3321        {\em Digital cash and privacy: What are the alternatives to Libra?}.
   3322        {\bf MIT Media Lab, 2019}.}
   3323  \item{Jeffrey Burdges, Florian Dold, Christian Grothoff and Marcello Stanisci.
   3324        {\em Enabling Secure Web Payments with GNU Taler}.
   3325        {\bf SPACE 2016}.}
   3326  \item{Özgür Kesim, Christian Grothoff, Florian Dold and Martin Schanzenbach.
   3327        {\em Zero-Knowledge Age Restriction for GNU Taler}.
   3328        {\bf ESORICS, 2022}.}
   3329  \item{Gian Demarmels and Lucien Heuzeveldt.
   3330        {\em Adding Schnorr's Blind Signature in Taler}.
   3331        {\bf BFH, Bachelor's Thesis, 2022}.}
   3332  \item{Marco Boss.
   3333        {\em GNU Taler Scalability}.
   3334        {\bf BFH, Bachelor's Thesis, 2022}.}
   3335 \end{enumerate}
   3336 }
   3337 \end{frame}
   3338 
   3339 \end{document}
   3340 
   3341 
   3342 
   3343 
   3344 \begin{frame}{Taler {\tt /withdraw/sign}}
   3345 % Customer withdrawing coins with blind signatures
   3346 % \bigskip
   3347   \begin{figure}[th]
   3348     \begin{minipage}[b]{0.45\linewidth}
   3349       \begin{center}
   3350         \begin{tikzpicture}[scale = 0.4,
   3351             transform shape,
   3352             msglabel/.style    = { text = Black, yshift = .3cm,
   3353                                    sloped, midway },
   3354             okmsg/.style       = { ->, color = MidnightBlue, thick,
   3355                                    >=stealth },
   3356             rstmsg/.style      = { ->, color = BrickRed, thick,
   3357                                    >=stealth }
   3358           ]
   3359           \node[draw = MidnightBlue,
   3360             fill = CornflowerBlue,
   3361             minimum width = .3cm,
   3362             minimum height = 10cm
   3363           ] (h1) at (-4, 0) {};
   3364           \node[draw = MidnightBlue,
   3365             fill = CornflowerBlue,
   3366             minimum width = .3cm,
   3367             minimum height = 10cm
   3368           ] (h2) at (4, 0) {};
   3369           \node[above = 0cm of h1] {Wallet};
   3370           \node[above = 0cm of h2] {Exchange};
   3371 
   3372           \path[->, color = MidnightBlue, very thick, >=stealth]
   3373             (-5, 4.5) edge
   3374             node[rotate=90, text = Black, yshift = .3cm] {Time}
   3375             (-5, -4.5);
   3376           \path[okmsg, dashed]
   3377              ($(h1.east)+(0, 4.0)+(0, -1.0)$) edge
   3378              node[msglabel] {SEPA(RK,A)}
   3379              ($(h2.west)+(0, 3.5)+(0, -1.0)$);
   3380           \path[okmsg]
   3381             ($(h1.east)+(0, -1.0)$) edge
   3382             node[msglabel] {POST {\tt /withdraw/sign} $S_{RK}(DK, B_b(C))$}
   3383             ($(h2.west)+(0, -1.5)$);
   3384           \path[okmsg]
   3385             ($(h2.west)+(0, -2.0)$) edge
   3386             node[msglabel] {200 OK: $S_{DK}(B_b(C))$)}
   3387             ($(h1.east)+(0, -2.5)$);
   3388           \path[rstmsg]
   3389             ($(h2.west)+(0, -3.5)$) edge
   3390             node[msglabel] {402 PAYMENT REQUIRED: $S_{RK}(DK, B_b(C))$)}
   3391             ($(h1.east)+(0, -4)$);
   3392           \node at (5.3, 0) {};
   3393         \end{tikzpicture}
   3394       \end{center}
   3395       Result: $\langle c, S_{DK}(C) \rangle$.
   3396     \end{minipage}
   3397     \hspace{0.5cm}
   3398     \begin{minipage}[b]{0.45\linewidth}
   3399       \tiny
   3400       \begin{description}
   3401       \item[$A$] Some amount, $A \ge A_{DK}$
   3402       \item[$RK$] Reserve key
   3403       \item[$DK$] Denomination key
   3404       \item[$b$] Blinding factor
   3405       \item[$B_b()$] RSA-FDH blinding % DK supressed
   3406       \item[$C$] Coin public key $C := cG$
   3407       \item[$S_{RK}()$] EdDSA signature
   3408       \item[$S_{DK}()$] RSA-FDH signature
   3409       \end{description}
   3410     \end{minipage}
   3411   \end{figure}
   3412 \end{frame}
   3413 
   3414 
   3415 \begin{frame}[t]{Taler {\tt /deposit}}
   3416 Merchant and exchange see only the public coin $\langle C, S_{DK}(C) \rangle$.
   3417 \bigskip
   3418   \begin{figure}[th]
   3419     \begin{minipage}[b]{0.45\linewidth}
   3420       \begin{center}
   3421         \begin{tikzpicture}[scale = 0.4,
   3422             transform shape,
   3423             msglabel/.style    = { text = Black, yshift = .3cm,
   3424                                    sloped, midway },
   3425             okmsg/.style       = { ->, color = MidnightBlue, thick,
   3426                                    >=stealth },
   3427             rstmsg/.style      = { ->, color = BrickRed, thick,
   3428                                    >=stealth }
   3429           ]
   3430           \node[draw = MidnightBlue,
   3431             fill = CornflowerBlue,
   3432             minimum width = .3cm,
   3433             minimum height = 10cm
   3434           ] (h1) at (-4, 0) {};
   3435           \node[draw = MidnightBlue,
   3436             fill = CornflowerBlue,
   3437             minimum width = .3cm,
   3438             minimum height = 10cm
   3439           ] (h2) at (4, 0) {};
   3440           \node[above = 0cm of h1] {Merchant};
   3441           \node[above = 0cm of h2] {Exchange};
   3442 
   3443           \path[->, color = MidnightBlue, very thick, >=stealth]
   3444             (-5, 4.5) edge
   3445             node[rotate=90, text = Black, yshift = .3cm] {Time}
   3446             (-5, -4.5);
   3447           \path[->, color = MidnightBlue, thick, >=stealth]
   3448             ($(h1.east)+(0,3)$) edge
   3449             node[text = Black, yshift = .3cm, sloped] {POST {\tt /deposit} $S_{DK}(C), S_{c}(D)$}
   3450             ($(h2.west)+(0,2)$);
   3451           \path[->, color = MidnightBlue, thick, >=stealth]
   3452             ($(h2.west)+(0,0.5)$) edge
   3453             node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(S_{c}(D))$}
   3454             ($(h1.east)+(0,-0.5)$);
   3455           \path[rstmsg]
   3456             ($(h2.west)+(0, -2.5)$) edge
   3457             node[msglabel] {409 CONFLICT: $S_{c}(D')$}
   3458             ($(h1.east)+(0, -3.5)$);
   3459           \node at (5.3, 0) {};
   3460         \end{tikzpicture}
   3461       \end{center}
   3462     \end{minipage}
   3463     \hspace{0.5cm}
   3464     \begin{minipage}[b]{0.45\linewidth}
   3465       \tiny
   3466       \begin{description}
   3467       \item[$DK$] Denomination key
   3468       \item[$S_{DK}()$] RSA-FDH signature using $DK$
   3469       \item[$c$] Private coin key, $C := cG$.
   3470       \item[$S_{C}()$] EdDSA signature using $c$
   3471       \item[$D$] Deposit details
   3472       \item[$SK$] Exchange's signing key
   3473       \item[$S_{SK}()$] EdDSA signature using $SK$
   3474       \item[$D'$] Conficting deposit details $D' \not= D$
   3475       \end{description}
   3476     \end{minipage}
   3477   \end{figure}
   3478 \end{frame}
   3479 
   3480 
   3481 \begin{frame}{Taler {\tt /refresh/melt}}
   3482   \begin{figure}[th]
   3483     \begin{minipage}[b]{0.45\linewidth}
   3484       \begin{center}
   3485 	\begin{tikzpicture}[scale = 0.4,
   3486             transform shape,
   3487             msglabel/.style    = { text = Black, yshift = .3cm,
   3488                                    sloped, midway },
   3489             okmsg/.style       = { ->, color = MidnightBlue, thick,
   3490                                    >=stealth },
   3491             rstmsg/.style      = { ->, color = BrickRed, thick,
   3492                                    >=stealth }
   3493 	  ]
   3494 	  \node[draw = MidnightBlue,
   3495 	    fill = CornflowerBlue,
   3496 	    minimum width = .3cm,
   3497 	    minimum height = 10cm
   3498 	  ] (h1) at (-4, 0) {};
   3499 	  \node[draw = MidnightBlue,
   3500 	    fill = CornflowerBlue,
   3501 	    minimum width = .3cm,
   3502 	    minimum height = 10cm
   3503 	  ] (h2) at (4, 0) {};
   3504 	  \node[above = 0cm of h1] {Customer};
   3505 	  \node[above = 0cm of h2] {Exchange};
   3506 
   3507 	  \path[->, color = MidnightBlue, very thick, >=stealth]
   3508 	    (-5, 4.5) edge
   3509 	    node[rotate=90, text = Black, yshift = .3cm] {Time}
   3510 	    (-5, -4.5);
   3511 	  \path[->, color = MidnightBlue, thick, >=stealth]
   3512 	    ($(h1.east)+(0,3)$) edge
   3513 	    node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/melt} $S_{DK}(C), S_c({\cal DK}, {\cal T},{\cal B})$}
   3514 	    ($(h2.west)+(0,2)$);
   3515 	  \path[->, color = MidnightBlue, thick, >=stealth]
   3516 	    ($(h2.west)+(0,0.5)$) edge
   3517 	    node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(H({\cal T}, {\cal B}),\gamma)$}
   3518 	    ($(h1.east)+(0,-0.5)$);
   3519 	  \path[rstmsg]
   3520 	    ($(h2.west)+(0, -2.5)$) edge
   3521 	    node[msglabel] {409 CONFLICT: $S_{C}(X), \ldots$}
   3522 	    ($(h1.east)+(0, -3.5)$);
   3523 	  \node at (5.3, 0) {};
   3524 	\end{tikzpicture}
   3525       \end{center}
   3526     \end{minipage}
   3527     \hspace{0.5cm}
   3528     \begin{minipage}[b]{0.45\linewidth}
   3529       \tiny
   3530       \begin{description}
   3531       \item[$\kappa$] System-wide security parameter, usually 3.
   3532       \\ \smallskip
   3533       \item[$\cal DK$] $:= [DK^{(i)}]_i$ \\ List of denomination keys \\
   3534       $D + \sum_i A_{DK^{(i)}} < A_{DK}$
   3535       \item[$t_j$] Random scalar for $j<\kappa$
   3536       \item[${\cal T}$] $:= [T_j]_\kappa$ where $T_j = t_j G$
   3537       \item[$k_j$] $:= c T_j = t_j C$ is an ECDHE
   3538       \item[$b_j^{(i)}$] $:= KDF_b(k_j,i)$ % blinding factor
   3539       \item[$c_j^{(i)}$] $:= KDF_c(k_j,i)$ % coin secret keys
   3540       \item[$C_j^{(i)}$] $: = c_j^{(i)} G$ % new coin publics % keys
   3541       \item[${\cal B}$] $:= [H( \beta_j )]_\kappa$ where \\
   3542          $\beta_j := \left[ B_{b_j^{(i)}}(C_j^{(i)}) \right]_i$
   3543       \\ \smallskip
   3544       \item[$\gamma$] Random value in $[0,\kappa)$
   3545 %      \\ \smallskip
   3546 %      \item[$X$] Deposit or refresh
   3547       \end{description}
   3548     \end{minipage}
   3549   \end{figure}
   3550 \end{frame}
   3551 
   3552 
   3553 \begin{frame}{Taler {\tt /refresh/reveal}}
   3554   \begin{figure}[th]
   3555     \begin{minipage}[b]{0.45\linewidth}
   3556       \begin{center}
   3557 	\begin{tikzpicture}[scale = 0.4,
   3558             transform shape,
   3559             msglabel/.style    = { text = Black, yshift = .3cm,
   3560                                    sloped, midway },
   3561             okmsg/.style       = { ->, color = MidnightBlue, thick,
   3562                                    >=stealth },
   3563             rstmsg/.style      = { ->, color = BrickRed, thick,
   3564                                    >=stealth }
   3565 	  ]
   3566 	  \node[draw = MidnightBlue,
   3567 	    fill = CornflowerBlue,
   3568 	    minimum width = .3cm,
   3569 	    minimum height = 10cm
   3570 	  ] (h1) at (-4, 0) {};
   3571 	  \node[draw = MidnightBlue,
   3572 	    fill = CornflowerBlue,
   3573 	    minimum width = .3cm,
   3574 	    minimum height = 10cm
   3575 	  ] (h2) at (4, 0) {};
   3576 	  \node[above = 0cm of h1] {Customer};
   3577 	  \node[above = 0cm of h2] {Exchange};
   3578 
   3579 	  \path[->, color = MidnightBlue, very thick, >=stealth]
   3580 	    (-5, 4.5) edge
   3581 	    node[rotate=90, text = Black, yshift = .3cm] {Time}
   3582 	    (-5, -4.5);
   3583 	  \path[->, color = MidnightBlue, thick, >=stealth]
   3584 	    ($(h1.east)+(0,3)$) edge
   3585 	    node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/reveal} $H({\cal T}, {\cal B}), {\tilde{\cal T}}, \beta_\gamma$}
   3586 	    ($(h2.west)+(0,2)$);
   3587 	  \path[->, color = MidnightBlue, thick, >=stealth]
   3588 	    ($(h2.west)+(0,0.5)$) edge
   3589 	    node[text = Black, yshift = .3cm, sloped] {200 OK: $\cal S$}
   3590 	    ($(h1.east)+(0,-0.5)$);
   3591 	  \path[rstmsg]
   3592 	    ($(h2.west)+(0, -2.5)$) edge
   3593 	    node[msglabel] {400 BAD REQUEST: $Z$}
   3594 	    ($(h1.east)+(0, -3.5)$);
   3595 	  \node at (5.3, 0) {};
   3596 	\end{tikzpicture}
   3597       \end{center}
   3598     \end{minipage}
   3599     \hspace{0.5cm}
   3600     \begin{minipage}[b]{0.45\linewidth}
   3601       \tiny
   3602       \begin{description}
   3603       \item[$\cal DK$] $:= [DK^{(i)}]_i$
   3604       \item[$t_j$] .. \\ \smallskip
   3605 
   3606       \item[$\tilde{\cal T}$] $:= [t_j | j \in \kappa, j \neq \gamma]$ \\ \smallskip
   3607 
   3608       \item[$k_\gamma$] $:= c T_\gamma = t_\gamma C$
   3609       \item[$b_\gamma^{(i)}$] $:= KDF_b(k_\gamma,i)$
   3610       \item[$c_\gamma^{(i)}$] $:= KDF_c(k_\gamma,i)$
   3611       \item[$C_\gamma^{(i)}$] $: = c_\gamma^{(i)} G$
   3612 
   3613       \item[$B_\gamma^{(i)}$] $:= B_{b_\gamma^{(i)}}(C_\gamma^{(i)})$
   3614       \item[$\beta_\gamma$] $:= \big[ B_\gamma^{(i)} \big]_i$
   3615       \item[$\cal S$] $:= \left[ S_{DK^{(i)}}( B_\gamma^{(i)} ) \right]_i$ \\ \smallskip
   3616 
   3617       \item[$Z$] Cut-and-choose missmatch information
   3618       \end{description}
   3619     \end{minipage}
   3620   \end{figure}
   3621 \end{frame}
   3622 
   3623 
   3624 \begin{frame}{Taler {\tt /refresh/link}}
   3625   \begin{figure}[th]
   3626     \begin{minipage}[b]{0.45\linewidth}
   3627       \begin{center}
   3628 	\begin{tikzpicture}[scale = 0.4,
   3629             transform shape,
   3630             msglabel/.style    = { text = Black, yshift = .3cm,
   3631                                    sloped, midway },
   3632             okmsg/.style       = { ->, color = MidnightBlue, thick,
   3633                                    >=stealth },
   3634             rstmsg/.style      = { ->, color = BrickRed, thick,
   3635                                    >=stealth }
   3636 	  ]
   3637 	  \node[draw = MidnightBlue,
   3638 	    fill = CornflowerBlue,
   3639 	    minimum width = .3cm,
   3640 	    minimum height = 10cm
   3641 	  ] (h1) at (-4, 0) {};
   3642 	  \node[draw = MidnightBlue,
   3643 	    fill = CornflowerBlue,
   3644 	    minimum width = .3cm,
   3645 	    minimum height = 10cm
   3646 	  ] (h2) at (4, 0) {};
   3647 	  \node[above = 0cm of h1] {Customer};
   3648 	  \node[above = 0cm of h2] {Exchagne};
   3649 
   3650 	  \path[->, color = MidnightBlue, very thick, >=stealth]
   3651 	    (-5, 4.5) edge
   3652 	    node[rotate=90, text = Black, yshift = .3cm] {Time}
   3653 	    (-5, -4.5);
   3654 	  \path[->, color = MidnightBlue, thick, >=stealth]
   3655 	    ($(h1.east)+(0,3)$) edge
   3656 	    node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/link} $C$}
   3657 	    ($(h2.west)+(0,2)$);
   3658 	  \path[->, color = MidnightBlue, thick, >=stealth]
   3659 	    ($(h2.west)+(0,0.5)$) edge
   3660 	    node[text = Black, yshift = .3cm, sloped] {200 OK: $T_\gamma$}
   3661 	    ($(h1.east)+(0,-0.5)$);
   3662 	  \path[rstmsg]
   3663 	    ($(h2.west)+(0, -2.5)$) edge
   3664 	    node[msglabel] {404 NOT FOUND}
   3665 	    ($(h1.east)+(0, -3.5)$);
   3666 	  \node at (5.3, 0) {};
   3667 	\end{tikzpicture}
   3668       \end{center}
   3669     \end{minipage}
   3670     \hspace{0.5cm}
   3671     \begin{minipage}[b]{0.45\linewidth}
   3672       \tiny
   3673       \begin{description}
   3674       \item[$C$] Old coind public key \\ \smallskip
   3675       \item[$T_\gamma$] Linkage data $\cal L$ at $\gamma$
   3676       \end{description}
   3677     \end{minipage}
   3678   \end{figure}
   3679 \end{frame}
   3680 
   3681 
   3682 \begin{frame}{Operational security}
   3683   \begin{center}
   3684     \resizebox{\textwidth}{!}{
   3685 \begin{tikzpicture}[
   3686   font=\sffamily,
   3687   every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm},
   3688   source/.style={draw,thick,rounded corners,fill=green!20,inner sep=.3cm},
   3689   process/.style={draw,thick,circle,fill=blue!20},
   3690   sink/.style={source,fill=green!20},
   3691   datastore/.style={draw,very thick,shape=datastore,inner sep=.3cm},
   3692   dots/.style={gray,scale=2},
   3693   to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize},
   3694   every node/.style={align=center}]
   3695 
   3696   % Position the nodes using a matrix layout
   3697   \matrix{
   3698     \node[source] (wallet) {Wallet};
   3699       \& \node[process] (browser) {Browser};
   3700       \& \node[process] (shop) {Web shop};
   3701       \& \node[sink] (backend) {Taler backend}; \\
   3702   };
   3703 
   3704   % Draw the arrows between the nodes and label them.
   3705   \draw[to] (browser) to[bend right=50] node[midway,above] {(4) signed contract}
   3706       node[midway,below] {(signal)} (wallet);
   3707   \draw[to] (wallet) to[bend right=50] node[midway,above] {(signal)}
   3708       node[midway,below] {(5) signed coins} (browser);
   3709   \draw[<->] (browser) -- node[midway,above] {(3,6) custom}
   3710       node[midway,below] {(HTTPS)} (shop);
   3711   \draw[to] (shop) to[bend right=50] node[midway,above] {(HTTPS)}
   3712       node[midway,below] {(1) proposed contract / (7) signed coins} (backend);
   3713   \draw[to] (backend) to[bend right=50] node[midway,above] {(2) signed contract / (8) confirmation}
   3714       node[midway,below] {(HTTPS)} (shop);
   3715 \end{tikzpicture}
   3716 }
   3717 \end{center}
   3718 \end{frame}
   3719 
   3720 
   3721 \begin{frame}{Use Cases: Refugee Camps}
   3722   Today:
   3723   \begin{itemize}
   3724   \item Non-bankable
   3725   \item Direct distribution of goods to population
   3726   \item Limited economic activity in camps
   3727   \item High level of economic dependence
   3728   \end{itemize}\vfill\pause
   3729   With GNU Taler:
   3730   \begin{itemize}
   3731   \item Local currency issued as basic income backed by aid
   3732   \item Taxation possible based on economic status
   3733   \item Local governance enabled by local taxes
   3734   \item Increased economic independence and political participation
   3735   \end{itemize}
   3736 \end{frame}
   3737 
   3738 
   3739 \begin{frame}{Use Case: Anti-Spam}
   3740   \framesubtitle{Background: \url{https://pep.security/}}
   3741   Today, p$\equiv$p provides authenticated encryption for e-mail:
   3742   \begin{itemize}
   3743     \item Free software
   3744     \item Easy to use opportunistic encryption
   3745     \item Available for Outlook, Android, Enigmail
   3746     \item Spies \& spam filters can no longer inspect content
   3747   \end{itemize}\vfill\pause
   3748   With GNU Taler:
   3749   \begin{itemize}
   3750     \item Peer-to-peer payments via e-mail
   3751     \item If unsolicited sender, hide messages from user \&
   3752           automatically request payment from sender
   3753     \item Sender can attach payment to be moved to inbox
   3754     \item Receiver may grant refund to sender
   3755   \end{itemize}
   3756 \end{frame}