marketing

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

2023-sbb.tex (111379B)


      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=2.3cm]{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 Prof. 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 \section{Basic Cryptography}
    730 
    731 \begin{frame}
    732   \vfill
    733   \begin{center}
    734     {\bf Part III: Basic Cryptography}
    735   \end{center}
    736   \vfill
    737 \end{frame}
    738 
    739 
    740 
    741 
    742 \begin{frame}{How does it work?}
    743 We use a few well established and tested constructions:
    744   \begin{itemize}
    745   \item Cryptographic hash function (1989)
    746   \item Blind signature (1983)
    747   \item Schnorr signature (1989)
    748   \item Diffie-Hellman key exchange (1976)
    749   \item Cut-and-choose zero-knowledge proof (1985)
    750   \end{itemize}
    751 But of course we use modern instantiations.
    752 \end{frame}
    753 
    754 
    755 \begin{frame}<1-| handout:0>{Definition: Taxability}
    756   We say Taler is taxable because:
    757   \begin{itemize}
    758   \item Merchant's income is visible from deposits.
    759   \item Hash of contract is part of deposit data.
    760   \item State can trace income and enforce taxation.
    761   \end{itemize}\pause
    762   Limitations:
    763   \begin{itemize}
    764   \item withdraw loophole
    765   \item {\em sharing} coins among family and friends
    766   \end{itemize}
    767 \end{frame}
    768 
    769 
    770 \begin{frame}<1-| handout:0>{Exchange setup: Create a denomination key (RSA)}
    771    \begin{minipage}{6cm}
    772     \begin{enumerate}
    773     \item Pick random primes $p,q$.
    774     \item Compute $n := pq$, $\phi(n) = (p-1)(q-1)$
    775     \item Pick small $e < \phi(n)$ such that
    776           $d := e^{-1} \mod \phi(n)$ exists.
    777     \item Publish public key $(e,n)$.
    778     \end{enumerate}
    779   \end{minipage}
    780   \begin{minipage}{6cm}
    781   \begin{tikzpicture}
    782  \tikzstyle{def} = [node distance=1em and 1em, inner sep=0em, outer sep=.3em];
    783     \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}};
    784     \node (primes) [draw=none, below = of origin] at (0,0) {$(p, q)$};
    785     \node (seal) [def, draw=none, below left=of primes]{\includegraphics[width=0.15\textwidth]{seal.pdf}};
    786     \node (hammer) [def, draw=none, below right=of primes]{\includegraphics[width=0.15\textwidth]{hammer.pdf}};
    787 
    788     \tikzstyle{C} = [color=black, line width=1pt]
    789 
    790     \draw [<-, C] (primes) -- (origin) node [midway, above, sloped] (TextNode) {};
    791     \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {};
    792     \draw [<-, C] (hammer) -- (primes) node [midway, above, sloped] (TextNode) {};
    793   \end{tikzpicture}
    794 %  \includegraphics[width=0.4\textwidth]{seal.pdf}
    795   \end{minipage}
    796 \end{frame}
    797 
    798 
    799 \begin{frame}<1-| handout:0>{Merchant: Create a signing key (EdDSA)}
    800   \begin{minipage}{6cm}
    801     \begin{itemize}
    802   \item pick random $m \mod o$ as private key
    803   \item $M = mG$ public key
    804   \end{itemize}
    805   \end{minipage}
    806   \begin{minipage}{6cm}
    807   \begin{tikzpicture}
    808    \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em];
    809     \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}};
    810     \node (m) [draw=none, below = of origin] at (0,0) {$m$};
    811     \node (seal) [draw=none, below=of m]{M};
    812    \tikzstyle{C} = [color=black, line width=1pt]
    813 
    814     \draw [<-, C] (m) -- (origin) node [midway, above, sloped] (TextNode) {};
    815     \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {};
    816   \end{tikzpicture}
    817   \end{minipage}
    818   \parbox[t]{3cm}{{\bf Capability:} $m \Rightarrow$ }
    819   \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{merchant-sign.pdf}}
    820 \end{frame}
    821 
    822 
    823 \begin{frame}<1-| handout:0>{Customer: Create a planchet (EdDSA)}
    824   \begin{minipage}{8cm}
    825   \begin{itemize}
    826   \item Pick random $c \mod o$ private key
    827   \item $C = cG$ public key
    828   \end{itemize}
    829   \end{minipage}
    830   \begin{minipage}{4cm}
    831   \begin{tikzpicture}
    832    \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em];
    833     \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}};
    834     \node (c) [draw=none, below = of origin] at (0,0) {$c$};
    835     \node (planchet) [draw=none, below=of c]{\includegraphics[width=0.4\textwidth]{planchet.pdf}};
    836     \tikzstyle{C} = [color=black, line width=1pt]
    837 
    838     \draw [<-, C] (c) -- (origin) node [midway, above, sloped] (TextNode) {};
    839     \draw [<-, C] (planchet) -- (c) node [midway, above, sloped] (TextNode) {};
    840   \end{tikzpicture}
    841   \end{minipage}
    842   \parbox[t]{3cm}{{\bf Capability:} $c \Rightarrow$ }
    843   \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{planchet-sign.pdf}}
    844 \end{frame}
    845 
    846 
    847 \begin{frame}<1-| handout:0>{Customer: Blind planchet (RSA)}
    848   \begin{minipage}{6cm}
    849     \begin{enumerate}
    850     \item Obtain public key $(e,n)$
    851     \item Compute $f := FDH(C)$, $f < n$.
    852     \item Pick blinding factor $b \in \mathbb Z_n$
    853     \item Transmit $f' := f b^e \mod n$
    854     \end{enumerate}
    855   \end{minipage}
    856   \begin{minipage}{6cm}
    857   \begin{tikzpicture}
    858    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
    859     \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}};
    860     \node (b) [def, draw=none, below = of origin] at (0,-0.2) {$b$};
    861     \node (blinded) [def, draw=none, below right=of b]{\includegraphics[width=0.2\textwidth]{blinded.pdf}};
    862     \node (planchet) [def, draw=none, above right=of blinded]{\includegraphics[width=0.15\textwidth]{planchet.pdf}};
    863     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
    864     \tikzstyle{C} = [color=black, line width=1pt]
    865 
    866     \draw [<-, C] (b) -- (origin) node [midway, above, sloped] (TextNode) {};
    867     \draw [<-, C] (blinded) -- (planchet) node [midway, above, sloped] (TextNode) {};
    868     \draw [<-, C] (blinded) -- (b) node [midway, above, sloped] (TextNode) {};
    869     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
    870   \end{tikzpicture}
    871   \end{minipage}
    872 \end{frame}
    873 
    874 
    875 \begin{frame}<1-| handout:0>{Exchange: Blind sign (RSA)}
    876    \begin{minipage}{6cm}
    877     \begin{enumerate}
    878     \item Receive $f'$.
    879     \item Compute $s' := f'^d \mod n$.
    880     \item Send signature $s'$.
    881     \end{enumerate}
    882    \end{minipage}
    883   \begin{minipage}{6cm}
    884   \begin{tikzpicture}
    885    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
    886     \node (hammer) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{hammer.pdf}};
    887     \node (signed) [def, draw=none, below left=of hammer]{\includegraphics[width=0.2\textwidth]{sign.pdf}};
    888     \node (blinded) [def, draw=none, above left=of signed]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
    889     \node (customer) [node distance=4em and 0.5em, draw, below =of signed]{Customer};
    890     \tikzstyle{C} = [color=black, line width=1pt]
    891 
    892     \draw [<-, C] (signed) -- (hammer) node [midway, above, sloped] (TextNode) {};
    893     \draw [<-, C] (signed) -- (blinded) node [midway, above, sloped] (TextNode) {};
    894     \draw [<-, C] (customer) -- (signed) node [midway, above, sloped] (TextNode) {{\small transmit}};
    895   \end{tikzpicture}
    896   \end{minipage}
    897 \end{frame}
    898 
    899 
    900 \begin{frame}<1-| handout:0>{Customer: Unblind coin (RSA)}
    901   \begin{minipage}{6cm}
    902    \begin{enumerate}
    903     \item Receive $s'$.
    904     \item Compute $s := s' b^{-1} \mod n$ % \\
    905     % ($(f')^d = (f b^e)^d = f^d b$).
    906     \end{enumerate}
    907    \end{minipage}
    908   \begin{minipage}{6cm}
    909   \begin{tikzpicture}
    910    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
    911     \node (b) [def, draw=none] at (0,0) {$b$};
    912     \node (coin) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{coin.pdf}};
    913     \node (signed) [def, draw=none, above left=of coin]{\includegraphics[width=0.15\textwidth]{sign.pdf}};
    914     \tikzstyle{C} = [color=black, line width=1pt]
    915 
    916     \draw [<-, C] (coin) -- (b) node [midway, above, sloped] (TextNode) {};
    917     \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {};
    918   \end{tikzpicture}
    919   \end{minipage}
    920 \end{frame}
    921 
    922 \begin{frame}{Withdrawing coins on the Web}
    923   \begin{center}
    924     \includegraphics[height=0.9\textheight]{figs/taler-withdraw.pdf}
    925   \end{center}
    926 \end{frame}
    927 
    928 
    929 \begin{frame}<1-| handout:0>{Customer: Build shopping cart}
    930   \begin{center}
    931   \begin{tikzpicture}
    932    \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em];
    933     \node (origin) at (0,0) {\includegraphics[width=0.18\textwidth]{shop.pdf}};
    934     \node (cart) [draw=none, below=of m]{\includegraphics[width=0.18\textwidth]{cart.pdf}};
    935     \node (merchant) [node distance=4em and 0.5em, draw, below =of cart]{Merchant};
    936     \tikzstyle{C} = [color=black, line width=1pt];
    937     \draw [<-, C] (cart) -- (origin) node [midway, above, sloped] (TextNode) {};
    938     \draw [<-, C] (merchant) -- (cart) node [midway, above, sloped] (TextNode) {{\small transmit}};
    939   \end{tikzpicture}
    940   \end{center}
    941 \end{frame}
    942 
    943 
    944 \begin{frame}<1-| handout:0>{Merchant Integration: Payment Request}
    945 % \begin{figure}[p!]
    946  \lstset{language=HTML5}
    947  \lstinputlisting{figs/taler-402.html}
    948 %  \caption{Sample HTTP response to prompt the wallet to show an offer.}
    949 %   \label{listing:http-contract}
    950 % \end{figure}
    951 
    952 % \begin{figure*}[p!]
    953 % \lstset{language=HTML5}
    954 % \lstinputlisting{figs/taler-contract.html}
    955 % \caption{Sample JavaScript code to prompt the wallet to show an offer.
    956 %          Here, the contract is fetched on-demand from the server.
    957 %          The {\tt taler\_pay()} function needs to be invoked
    958 %          when the user triggers the checkout.}
    959 % \label{listing:contract}
    960 % \end{figure*}
    961 \end{frame}
    962 
    963 
    964 
    965 \begin{frame}<1-| handout:0>{Merchant: Propose contract (EdDSA)}
    966    \begin{minipage}{6cm}
    967    \begin{enumerate}
    968     \item Complete proposal $D$.
    969     \item Send $D$, $EdDSA_m(D)$
    970     \end{enumerate}
    971    \end{minipage}
    972   \begin{minipage}{6cm}
    973   \begin{tikzpicture}
    974    \tikzstyle{def} = [node distance=2em and 0.5em, inner sep=0em, outer sep=.3em];
    975     \node (cart) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{cart.pdf}};
    976     \node (proposal) [def, draw=none, below right=of cart]{\includegraphics[width=0.5\textwidth]{merchant_propose.pdf}};
    977     \node (customer) [node distance=4em and 0.5em, draw, below =of proposal]{Customer};
    978     \tikzstyle{C} = [color=black, line width=1pt];
    979     \node (sign) [def, draw=none, above right=of proposal] {$m$};
    980     \tikzstyle{C} = [color=black, line width=1pt]
    981 
    982     \draw [<-, C] (proposal) -- (sign) node [midway, above, sloped] (TextNode) {};
    983     \draw [<-, C] (proposal) -- (cart) node [midway, above, sloped] (TextNode) {};
    984     \draw [<-, C] (customer) -- (proposal) node [midway, above, sloped] (TextNode) {{\small transmit}};
    985   \end{tikzpicture}
    986   \end{minipage}
    987 \end{frame}
    988 
    989 
    990 \begin{frame}<1-| handout:0>{Customer: Spend coin (EdDSA)}
    991   \begin{minipage}{6cm}
    992    \begin{enumerate}
    993     \item Receive proposal $D$, $EdDSA_m(D)$.
    994     \item Send $s$, $C$, $EdDSA_c(D)$
    995     \end{enumerate}
    996    \end{minipage}
    997   \begin{minipage}{6cm}
    998   \begin{tikzpicture}
    999    \tikzstyle{def} = [node distance=2em and 0.4em, inner sep=0em, outer sep=.3em];
   1000     \node (proposal) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{merchant_propose.pdf}};
   1001     \node (contract) [def, draw=none, below right=of cart]{\includegraphics[width=0.3\textwidth]{contract.pdf}};
   1002     \node (c) [def, draw=none, above=of contract] {$c$};
   1003     \node (merchant) [node distance=4em and 0.5em, draw, below=of contract]{Merchant};
   1004     \node (coin) [def, draw=none, right=of contract]{\includegraphics[width=0.2\textwidth]{coin.pdf}};
   1005     \tikzstyle{C} = [color=black, line width=1pt]
   1006 
   1007     \draw [<-, C] (contract) -- (c) node [midway, above, sloped] (TextNode) {};
   1008     \draw [<-, C] (contract) -- (proposal) node [midway, above, sloped] (TextNode) {};
   1009     \draw [<-, C] (merchant) -- (contract) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1010     \draw [<-, C] (merchant) -- (coin) node [midway, below, sloped] (TextNode) {{\small transmit}};
   1011   \end{tikzpicture}
   1012   \end{minipage}
   1013 \end{frame}
   1014 
   1015 
   1016 \begin{frame}<1-| handout:0>{Merchant and Exchange: Verify coin (RSA)}
   1017    \begin{minipage}{6cm}
   1018  \begin{equation*}
   1019    s^e \stackrel{?}{\equiv} FDH(C) \mod n
   1020    \end{equation*}
   1021    \end{minipage}
   1022   \begin{minipage}{6cm}
   1023   \begin{minipage}{0.2\textwidth}
   1024     \includegraphics[width=\textwidth]{coin.pdf}
   1025   \end{minipage}
   1026   $\stackrel{?}{\Leftrightarrow}$
   1027   \begin{minipage}{0.2\textwidth}
   1028     \includegraphics[width=\textwidth]{seal.pdf}
   1029   \end{minipage}
   1030   \end{minipage}
   1031   \vfill
   1032   The exchange does not only verify the signature, but also
   1033   checks that the coin was not double-spent.
   1034   \vfill
   1035   \pause
   1036   \begin{center}
   1037   {\bf This step requires communication with the exchange.}
   1038   \end{center}
   1039   \vfill
   1040 \end{frame}
   1041 
   1042 
   1043 \begin{frame}{Payment processing with Taler}
   1044   \begin{center}
   1045     \includegraphics[height=0.9\textheight]{figs/taler-pay.pdf}
   1046   \end{center}
   1047 \end{frame}
   1048 
   1049 
   1050 \section{Giving Change}
   1051 
   1052 \begin{frame}
   1053   \vfill
   1054   \begin{center}
   1055     {\bf Part IV: Giving Change}
   1056   \end{center}
   1057   \vfill
   1058 \end{frame}
   1059 
   1060 
   1061 \begin{frame}{Giving change}
   1062   It would be inefficient to pay EUR 100 with 1 cent coins!
   1063   \begin{itemize}
   1064   \item Denomination key represents value of a coin.
   1065   \item Exchange may offer various denominations for coins.
   1066   \item Wallet may not have exact change!
   1067   \item Usability requires ability to pay given sufficient total funds.
   1068   \end{itemize}\pause
   1069   Key goals:
   1070   \begin{itemize}
   1071   \item maintain unlinkability
   1072   \item maintain taxability of transactions
   1073   \end{itemize}\pause
   1074   Method:
   1075   \begin{itemize}
   1076     \item Contract can specify to only pay {\em partial value} of a coin.
   1077     \item Exchange allows wallet to obtain {\em unlinkable change}
   1078       for remaining coin value.
   1079   \end{itemize}
   1080 \end{frame}
   1081 
   1082 
   1083 \begin{frame}<1-| handout:0>{Diffie-Hellman (ECDH)}
   1084   \begin{minipage}{8cm}
   1085    \begin{enumerate}
   1086     \item Create private keys $c,t \mod o$
   1087     \item Define $C = cG$
   1088     \item Define $T = tG$
   1089     \item Compute DH \\ $cT = c(tG) = t(cG) = tC$
   1090     \end{enumerate}
   1091    \end{minipage}
   1092   \begin{minipage}{6cm}
   1093   \begin{tikzpicture}
   1094    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
   1095     \node (t) [def, draw=none] at (0,0) {$t$};
   1096     \node (ct) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{dh.pdf}};
   1097     \node (c) [def, draw=none, above left= of ct]  {$c$};
   1098     \tikzstyle{C} = [color=black, line width=1pt]
   1099 
   1100     \draw [<-, C] (ct) -- (c) node [midway, above, sloped] (TextNode) {};
   1101     \draw [<-, C] (ct) -- (t) node [midway, above, sloped] (TextNode) {};
   1102   \end{tikzpicture}
   1103   \end{minipage}
   1104 \end{frame}
   1105 
   1106 
   1107 \begin{frame}<1-| handout:0>{Strawman solution}
   1108   \begin{minipage}{8cm}
   1109     Given partially spent private coin key $c_{old}$:
   1110    \begin{enumerate}
   1111 %    \item Let $C_{old} := c_{old}G$ (as before)
   1112     \item Pick random $c_{new} \mod o$ private key
   1113     \item $C_{new} = c_{new}G$ public key
   1114     \item Pick random $b_{new}$
   1115     \item Compute $f_{new} := FDH(C_{new})$, $m < n$.
   1116     \item Transmit $f'_{new} := f_{new} b_{new}^e \mod n$
   1117    \end{enumerate}
   1118    ... and sign request for change with $c_{old}$.
   1119    \end{minipage}
   1120   \begin{minipage}{4cm}
   1121   \begin{tikzpicture}
   1122    \tikzstyle{def} = [node distance= 1.5em and 0.45em, inner sep=0em, outer sep=.3em];
   1123     \node (blinded) [def, draw=none]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1124     \node (planchet) [def, draw=none, above left= of blinded]  {\includegraphics[width=0.15\textwidth]{planchet.pdf}};
   1125     \node (cnew) [def, draw=none, above= of planchet]  {$c_{new}$};
   1126     \node (bnew) [def, draw=none, above right= of blinded]  {$b_{new}$};
   1127     \node (dice1) [def, draw=none, above = of cnew]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
   1128     \node (dice2) [def, draw=none, above = of bnew]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
   1129     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
   1130 
   1131     \tikzstyle{C} = [color=black, line width=1pt]
   1132 
   1133     \draw [<-, C] (cnew) -- (dice1) node [midway, above, sloped] (TextNode) {};
   1134     \draw [<-, C] (planchet) -- (cnew) node [midway, above, sloped] (TextNode) {};
   1135     \draw [<-, C] (bnew) -- (dice2) node [midway, above, sloped] (TextNode) {};
   1136     \draw [<-, C] (blinded) -- (planchet) node [midway, above, sloped] (TextNode) {};
   1137     \draw [<-, C] (blinded) -- (bnew) node [midway, above, sloped] (TextNode) {};
   1138     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1139   \end{tikzpicture}
   1140   \end{minipage}
   1141   \pause
   1142   \vfill
   1143   {\bf Problem: Owner of $c_{new}$ may differ from owner of $c_{old}$!}
   1144 \end{frame}
   1145 
   1146 
   1147 \begin{frame}<1-| handout:0>{Customer: Transfer key setup (ECDH)}
   1148   \begin{minipage}{8cm}
   1149     Given partially spent private coin key $c_{old}$:
   1150    \begin{enumerate}
   1151     \item Let $C_{old} := c_{old}G$ (as before)
   1152     \item Create random private transfer key $t \mod o$
   1153     \item Compute $T := tG$
   1154     \item Compute $X := c_{old}(tG) = t(c_{old}G) = tC_{old}$
   1155     \item Derive $c_{new}$ and $b_{new}$ from $X$
   1156     \item Compute $C_{new} := c_{new}G$
   1157     \item Compute $f_{new} := FDH(C_{new})$
   1158     \item Transmit $f_{new}' := f_{new} b_{new}^e$
   1159     \end{enumerate}
   1160    \end{minipage}
   1161   \begin{minipage}{4cm}
   1162   \begin{tikzpicture}
   1163    \tikzstyle{def} = [node distance= 1.4em and 0.45em, inner sep=0em, outer sep=.3em];
   1164     \node (t) [def, draw=none] at (0,0) {$t$};
   1165     \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
   1166     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1167     \node (d) [def, draw=none, above left= of dh]  {$c_{old}$};
   1168     \node (cp) [def, draw=none, below left= of dh]  {$c_{new}$};
   1169     \node (bp) [def, draw=none, below right= of dh]  {$b_{new}$};
   1170     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1171     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
   1172 
   1173     \tikzstyle{C} = [color=black, line width=1pt]
   1174 
   1175     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
   1176     \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {};
   1177     \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {};
   1178     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1179     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1180     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
   1181     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
   1182     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1183   \end{tikzpicture}
   1184   \end{minipage}
   1185 \end{frame}
   1186 
   1187 
   1188 \begin{frame}<1-| handout:0>{Cut-and-Choose}
   1189   \begin{minipage}{4cm}
   1190   \begin{tikzpicture}
   1191    \tikzstyle{def} = [node distance= 1.4em and 0.45em, inner sep=0em, outer sep=.3em];
   1192     \node (t) [def, draw=none] at (0,0) {$t_1$};
   1193     \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
   1194     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1195     \node (d) [def, draw=none, above left= of dh]  {$c_{old}$};
   1196     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,1}$};
   1197     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,1}$};
   1198     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1199     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
   1200 
   1201     \tikzstyle{C} = [color=black, line width=1pt]
   1202 
   1203     \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {};
   1204     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
   1205     \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {};
   1206     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1207     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1208     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
   1209     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
   1210     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1211   \end{tikzpicture}
   1212   \end{minipage}
   1213   \begin{minipage}{4cm}
   1214   \begin{tikzpicture}
   1215    \tikzstyle{def} = [node distance= 1.4em and 0.45em, inner sep=0em, outer sep=.3em];
   1216     \node (t) [def, draw=none] at (0,0) {$t_2$};
   1217     \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
   1218     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1219     \node (d) [def, draw=none, above left= of dh]  {$c_{old}$};
   1220     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,2}$};
   1221     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,2}$};
   1222     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1223     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
   1224 
   1225     \tikzstyle{C} = [color=black, line width=1pt]
   1226 
   1227     \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {};
   1228     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
   1229     \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {};
   1230     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1231     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1232     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
   1233     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
   1234     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1235   \end{tikzpicture}
   1236   \end{minipage}
   1237   \begin{minipage}{4cm}
   1238   \begin{tikzpicture}
   1239    \tikzstyle{def} = [node distance= 1.4em and 0.45em, inner sep=0em, outer sep=.3em];
   1240     \node (t) [def, draw=none] at (0,0) {$t_3$};
   1241     \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}};
   1242     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1243     \node (d) [def, draw=none, above left= of dh]  {$c_{old}$};
   1244     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,3}$};
   1245     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,3}$};
   1246     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1247     \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange};
   1248 
   1249     \tikzstyle{C} = [color=black, line width=1pt]
   1250 
   1251     \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {};
   1252     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
   1253     \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {};
   1254     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1255     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1256     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
   1257     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
   1258     \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1259   \end{tikzpicture}
   1260   \end{minipage}
   1261 \end{frame}
   1262 
   1263 
   1264 \begin{frame}<1-| handout:0>{Exchange: Choose!}
   1265    \begin{center}
   1266     \item Exchange sends back random $\gamma \in \{ 1, 2, 3 \}$ to the customer.
   1267     \end{center}
   1268 \end{frame}
   1269 
   1270 
   1271 \begin{frame}<1-| handout:0>{Customer: Reveal}
   1272    \begin{enumerate}
   1273    \item If $\gamma = 1$, send $t_2$, $t_3$ to exchange
   1274    \item If $\gamma = 2$, send $t_1$, $t_3$ to exchange
   1275    \item If $\gamma = 3$, send $t_1$, $t_2$ to exchange
   1276   \end{enumerate}
   1277 \end{frame}
   1278 
   1279 
   1280 \begin{frame}<1-| handout:0>{Exchange: Verify ($\gamma = 2$)}
   1281   \begin{minipage}{4cm}
   1282   \begin{tikzpicture}
   1283    \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
   1284     \node (h) [def, draw=none] at (0,0) {$t_1$};
   1285     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1286     \node (d) [def, draw=none, above left= of dh]  {$C_{old}$};
   1287     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,1}$};
   1288     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,1}$};
   1289     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1290 
   1291     \tikzstyle{C} = [color=black, line width=1pt]
   1292 
   1293     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
   1294     \draw [<-, C] (dh) -- (h) node [midway, above, sloped] (TextNode) {};
   1295     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1296     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1297     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
   1298     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
   1299   \end{tikzpicture}
   1300   \end{minipage}
   1301   \begin{minipage}{4cm}
   1302  \
   1303   \end{minipage}
   1304   \begin{minipage}{4cm}
   1305   \begin{tikzpicture}
   1306    \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
   1307     \node (h) [def, draw=none] at (0,0) {$t_3$};
   1308     \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1309     \node (d) [def, draw=none, above left= of dh]  {$C_{old}$};
   1310     \node (cp) [def, draw=none, below left= of dh]  {$c_{new,3}$};
   1311     \node (bp) [def, draw=none, below right= of dh]  {$b_{new,3}$};
   1312     \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1313 
   1314     \tikzstyle{C} = [color=black, line width=1pt]
   1315 
   1316     \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {};
   1317     \draw [<-, C] (dh) -- (h) node [midway, above, sloped] (TextNode) {};
   1318     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1319     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1320     \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {};
   1321     \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {};
   1322   \end{tikzpicture}
   1323   \end{minipage}
   1324 \end{frame}
   1325 
   1326 
   1327 \begin{frame}<1-| handout:0>{Exchange: Blind sign change (RSA)}
   1328    \begin{minipage}{6cm}
   1329     \begin{enumerate}
   1330     \item Take $f_{new,\gamma}'$.
   1331     \item Compute $s' := f_{new,\gamma}'^d \mod n$.
   1332     \item Send signature $s'$.
   1333     \end{enumerate}
   1334    \end{minipage}
   1335   \begin{minipage}{6cm}
   1336   \begin{tikzpicture}
   1337    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
   1338     \node (hammer) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{hammer.pdf}};
   1339     \node (signed) [def, draw=none, below left=of hammer]{\includegraphics[width=0.2\textwidth]{sign.pdf}};
   1340     \node (blinded) [def, draw=none, above left=of signed]{\includegraphics[width=0.15\textwidth]{blinded.pdf}};
   1341     \node (customer) [node distance=4em and 0.5em, draw, below =of signed]{Customer};
   1342     \tikzstyle{C} = [color=black, line width=1pt]
   1343 
   1344     \draw [<-, C] (signed) -- (hammer) node [midway, above, sloped] (TextNode) {};
   1345     \draw [<-, C] (signed) -- (blinded) node [midway, above, sloped] (TextNode) {};
   1346     \draw [<-, C] (customer) -- (signed) node [midway, above, sloped] (TextNode) {{\small transmit}};
   1347   \end{tikzpicture}
   1348   \end{minipage}
   1349 \end{frame}
   1350 
   1351 
   1352 \begin{frame}<1-| handout:0>{Customer: Unblind change (RSA)}
   1353   \begin{minipage}{6cm}
   1354    \begin{enumerate}
   1355     \item Receive $s'$.
   1356     \item Compute $s := s' b_{new,\gamma}^{-1} \mod n$.
   1357     \end{enumerate}
   1358    \end{minipage}
   1359   \begin{minipage}{6cm}
   1360   \begin{tikzpicture}
   1361    \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em];
   1362     \node (b) [def, draw=none] at (0,0) {$b_{new,\gamma}$};
   1363     \node (coin) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{coin.pdf}};
   1364     \node (signed) [def, draw=none, above left=of coin]{\includegraphics[width=0.15\textwidth]{sign.pdf}};
   1365     \tikzstyle{C} = [color=black, line width=1pt]
   1366 
   1367     \draw [<-, C] (coin) -- (b) node [midway, above, sloped] (TextNode) {};
   1368     \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {};
   1369   \end{tikzpicture}
   1370   \end{minipage}
   1371 \end{frame}
   1372 
   1373 
   1374 \begin{frame}<1-| handout:0>{Exchange: Allow linking change}
   1375   \begin{minipage}{7cm}
   1376     \begin{center}
   1377     Given $C_{old}$
   1378 
   1379     \vspace{1cm}
   1380 
   1381     return $T_\gamma$, $s := s' b_{new,\gamma}^{-1} \mod n$.
   1382   \end{center}
   1383    \end{minipage}
   1384   \begin{minipage}{5cm}
   1385    \begin{tikzpicture}
   1386     \tikzstyle{def} = [node distance= 3em and 0.5em, inner sep=0.5em, outer sep=.3em];
   1387     \node (co) [def, draw=none] at (0,0) {$C_{old}$};
   1388     \node (T) [def, draw=none, below left=of co]{$T_\gamma$};
   1389     \node (sign) [def, draw=none, below right=of co]{\includegraphics[width=0.15\textwidth]{sign.pdf}};
   1390     \node (customer) [def, draw, below right=of T] {Customer};
   1391 
   1392     \tikzstyle{C} = [color=black, line width=1pt]
   1393 
   1394     \draw [<-, C] (T) -- (co) node [midway, above, sloped] (TextNode) {};
   1395     \draw [<-, C] (sign) -- (co) node [midway, above, sloped] (TextNode) {};
   1396     \draw [<-, C] (customer) -- (T) node [midway, above, sloped] (TextNode) {link};
   1397     \draw [<-, C] (customer) -- (sign) node [midway, above, sloped] (TextNode) {link};
   1398   \end{tikzpicture}
   1399   \end{minipage}
   1400 \end{frame}
   1401 
   1402 
   1403 \begin{frame}<1-| handout:0>{Customer: Link (threat!)}
   1404   \begin{minipage}{6.3cm}
   1405    \begin{enumerate}
   1406     \item Have $c_{old}$.
   1407     \item Obtain $T_\gamma$, $s$ from exchange
   1408     \item Compute $X_\gamma = c_{old}T_\gamma$
   1409     \item Derive $c_{new,\gamma}$ and $b_{new,\gamma}$ from $X_\gamma$
   1410     \item Unblind $s := s' b_{new,\gamma}^{-1} \mod n$
   1411   \end{enumerate}
   1412 
   1413    \end{minipage}
   1414   \begin{minipage}{5.7cm}
   1415   \begin{tikzpicture}
   1416   \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em];
   1417     \node (T) [def, draw=none] at (0,0) {$T_\gamma$};
   1418     \node (exchange) [def, inner sep=0.5em, draw, above left=of T] {Exchange};
   1419     \node (signed) [def, draw=none, below left=of T]{\includegraphics[width=0.15\textwidth]{sign.pdf}};
   1420     \node (dh) [def, draw=none, below right=of T]{\includegraphics[width=0.2\textwidth]{ct.pdf}};
   1421     \node (bp) [def, draw=none, below left= of dh]  {$b_{new,\gamma}$};
   1422     \node (co) [def, draw=none, above right= of dh]  {$c_{old}$};
   1423     \node (cp) [def, draw=none, below= of dh]  {$c_{new,\gamma}$};
   1424     \node (coin) [def, draw=none, below left = of bp]{\includegraphics[width=0.2\textwidth]{coin.pdf}};
   1425     \node (psign) [def, node distance=2.5em and 0em, draw=none, below = of cp]{\includegraphics[width=0.2\textwidth]{planchet-sign.pdf}};
   1426 
   1427     \tikzstyle{C} = [color=black, line width=1pt]
   1428 
   1429     \draw [<-, C] (dh) -- (co) node [midway, above, sloped] (TextNode) {};
   1430     \draw [<-, C] (dh) -- (T) node [midway, above, sloped] (TextNode) {};
   1431     \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1432     \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {};
   1433     \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {};
   1434     \draw [<-, C] (coin) -- (bp) node [midway, above, sloped] (TextNode) {};
   1435     \draw [<-, C] (T) -- (exchange) node [midway, above, sloped] (TextNode) {link};
   1436     \draw [<-, C] (signed) -- (exchange) node [midway, below, sloped] (TextNode) {link};
   1437     \draw [<-, C, double] (psign) -- (cp) node [midway, below, sloped] (TextNode) {};
   1438   \end{tikzpicture}
   1439   \end{minipage}
   1440 \end{frame}
   1441 
   1442 
   1443 \begin{frame}<1-| handout:0>{Refresh protocol properties}
   1444   \begin{itemize}
   1445   \item Customer asks exchange to convert old coin to new coin
   1446   \item Protocol ensures new coins can be recovered from old coin
   1447   \item[$\Rightarrow$] New coins are owned by the same entity!
   1448   \end{itemize}
   1449   Thus, the refresh protocol allows:
   1450   \begin{itemize}
   1451   \item To give unlinkable change.
   1452   \item To give refunds to an anonymous customer.
   1453   \item To expire old keys and migrate coins to new ones.
   1454   \item To handle protocol aborts.
   1455   \end{itemize}
   1456   \noindent
   1457 %  \begin{center}
   1458 %   { \bf Transactions via refresh are equivalent to {\em sharing} a wallet.}
   1459 %  \end{center}
   1460 \end{frame}
   1461 
   1462 
   1463 \section{Illustration of Programmable Money: Age Restrictions}
   1464 
   1465 \begin{frame}
   1466   \vfill
   1467   \begin{center}
   1468     \vfill
   1469     {\bf Part V:}
   1470     \vfill
   1471     {\bf Illustration of Programmable Money}
   1472     \vfill
   1473     {\bf Zero-knowledge Age Restrictions}
   1474     \vfill
   1475   \end{center}
   1476   \vfill
   1477 \end{frame}
   1478 
   1479 
   1480 \begin{frame}{Age restriction in e-commerce}
   1481 
   1482 	\begin{description}
   1483 		\item[Problem:]~\\[1em]
   1484 			Verification of minimum age requirements in e-commerce.\\[2em]
   1485 
   1486 		\item[Common solutions:]
   1487 
   1488 \begin{tabular}{l<{\onslide<2->}c<{\onslide<3->}cr<{\onslide}}
   1489 	& \blue{Privacy} & \tikzmark{topau} \blue{Ext. authority}& \\[\medskipamount]
   1490 	1. ID Verification     & bad   & required & \\[\medskipamount]
   1491 	2. Restricted Accounts & bad   & required & \\[\medskipamount]
   1492 	3. Attribute-based     & good  & required &\tikzmark{bottomau} \\[\medskipamount]
   1493 \end{tabular}
   1494 	\end{description}
   1495 
   1496 \uncover<4->{
   1497 	\begin{tikzpicture}[overlay,remember picture]
   1498 	\draw[orange,thick,rounded corners]
   1499 		($(pic cs:topau) +(0,0.5)$) rectangle ($(pic cs:bottomau) -(0.3, 0.2)$);
   1500 	\end{tikzpicture}
   1501 	\begin{center}
   1502 	\bf Principle of subsidiarity is violated
   1503 	\end{center}
   1504 }
   1505 \end{frame}
   1506 
   1507 
   1508 \begin{frame}<1-| handout:0>{Principle of Subsidiarity}
   1509 \begin{center} \Large
   1510 	Functions of government---such as granting and restricting
   1511 	rights---should be performed\\
   1512 	{\it at the lowest level of authority possible},\\
   1513 	as long as they can be performed {\it adequately}.
   1514 \end{center}
   1515 \vfill
   1516 \uncover<2->{
   1517 	For age-restriction, the lowest level of authority is:\\
   1518 	\begin{center}\Large
   1519 	Parents, guardians and caretakers
   1520 	\end{center}
   1521 }
   1522 \end{frame}
   1523 
   1524 
   1525 \begin{frame}{Age restriction design for GNU Taler}
   1526 Design and implementation of an age restriction scheme\\
   1527 with the following goals:
   1528 
   1529 \begin{enumerate}
   1530 \item It ties age restriction to the \textbf{ability to pay} (not to ID's)
   1531 \item maintains \textbf{anonymity of buyers}
   1532 \item maintains \textbf{unlinkability of transactions}
   1533 \item aligns with \textbf{principle of subsidiarity}
   1534 \item is \textbf{practical and efficient}
   1535 \end{enumerate}
   1536 
   1537 \end{frame}
   1538 
   1539 
   1540 \begin{frame}{Age restriction}
   1541 	\framesubtitle{Assumptions and scenario}
   1542 
   1543 	\begin{columns}
   1544 		\column{7.5cm}
   1545 	\begin{itemize}
   1546 		\item<1-> Assumption: Checking accounts are under control of eligible adults/guardians.
   1547 		\item<2-> \textit{Guardians} \textbf{commit} to an maximum age
   1548 		\item<3-> \textit{Minors} \textbf{attest} their adequate age
   1549 		\item<4-> \textit{Merchants} \textbf{verify} the attestations
   1550 		\item<5-> Minors \textbf{derive} age commitments from existing ones
   1551 		\item<6-> \textit{Exchanges} \textbf{compare} the derived age commitments
   1552 	\end{itemize}
   1553 		\column{5cm}
   1554 		\uncover<7->
   1555 		{
   1556 		\begin{center}
   1557 		\fontsize{7pt}{7pt}\selectfont
   1558 	\begin{tikzpicture}[scale=.5]
   1559 		\node[circle,minimum size=15pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$};
   1560 		\node[circle,minimum size=15pt,fill=black!15] at (  0:0) (Client) {$\Child$};
   1561 		\node[circle,minimum size=15pt,fill=black!15] at (  0:4) (Merchant) {$\Merchant$};
   1562 		\node[circle,minimum size=15pt,fill=blue!15]  at (140:3) (Guardian) {$\Guardian$};
   1563 
   1564 		\draw[->] (Guardian)   to [out=50,in=130, loop] node[above]
   1565 			{$\Commit$} (Guardian);
   1566 		\draw[->,blue] (Client)   to [out=-125,in=-190, loop] node[below,left]
   1567 			{\blue{$\Attest$}} (Client);
   1568 		\draw[->,blue] (Merchant) to [out=50,in=130, loop] node[above]
   1569 			{\blue{$\Verify$}} (Merchant);
   1570 		\draw[->,orange] (Client)   to [out=-35,in=-100, loop] node[below]
   1571 			{\orange{$\Derive$}} (Client);
   1572 		\draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above]
   1573 			{\orange{$\Compare$}} (Exchange);
   1574 
   1575 		\draw[orange,|->] (Client)   to node[sloped,above,align=left]
   1576 			{\orange{\scriptsize }} (Exchange);
   1577 		\draw[blue,|->] (Client)   to node[sloped, above]
   1578 			{\blue{\scriptsize }} (Merchant);
   1579 		\draw[,|->] (Guardian) to node[above,sloped,align=left]
   1580 			{{\scriptsize }} (Client);
   1581 	\end{tikzpicture}
   1582 		\end{center}
   1583 		}
   1584 	\end{columns}
   1585 	\vfill
   1586 %	\uncover<7->{Note: Scheme is independent of payment service protocol.}
   1587 \end{frame}
   1588 
   1589 
   1590 \begin{frame}<1-| handout:0>{Formal Function Signatures}
   1591 \small
   1592 Searching for functions \uncover<2->{with the following signatures}
   1593 \begin{align*}
   1594 	&\bf \Commit\uncover<2->{:
   1595 		&(\age, \omega) &\mapsto (\commitment, \pruf)
   1596 		&\scriptstyle \N_\Age \times \Omega &\scriptstyle \to \Commitments\times\Proofs,
   1597 		}
   1598 	\\
   1599 	&\bf \Attest\uncover<3->{:
   1600 		&(\minage, \commitment, \pruf) &\mapsto \attest
   1601 		&\scriptstyle \N_\Age\times\Commitments\times\Proofs &\scriptstyle \to \Attests \cup \{\Nil\},
   1602 		}
   1603 	\\
   1604 	&\bf \Verify\uncover<4->{:
   1605 		&(\minage, \commitment, \attest) &\mapsto b
   1606 		&\scriptstyle \N_\Age\times\Commitments\times\Attests &\scriptstyle \to \Z_2,
   1607 		}
   1608 	\\
   1609 	&\bf \Derive\uncover<5->{:
   1610 		&(\commitment, \pruf, \omega) &\mapsto (\commitment', \pruf', \blinding)
   1611 		&\scriptstyle \Commitments\times\Proofs\times\Omega &\scriptstyle \to \Commitments\times\Proofs\times\Blindings,
   1612 		}
   1613 	\\
   1614 	&\bf \Compare\uncover<6->{:
   1615 		&(\commitment, \commitment', \blinding) &\mapsto b
   1616 		&\scriptstyle \Commitments\times\Commitments\times\Blindings &\scriptstyle \to \Z_2,
   1617 		}
   1618 \end{align*}
   1619 	\uncover<7->{
   1620 		with $\Omega, \Proofs, \Commitments, \Attests, \Blindings$
   1621 		sufficiently large sets.\\[1em]
   1622 		Basic and security requirements are defined later.\\[2em]
   1623 	}
   1624 
   1625 		\scriptsize
   1626 	\uncover<2->{
   1627 		Mnemonics:\\
   1628 		$\Commitments=$ \textit{c$\Commitments$mmitments},
   1629 		$\commitment=$ \textit{Q-mitment} (commitment),
   1630 		$\Proofs=$ \textit{$\Proofs$roofs},
   1631 	}
   1632 	\uncover<3->{
   1633 		$\pruf=$ \textit{$\pruf$roof},\\
   1634 		$\Attests=$ \textit{a$\Attests$testations},
   1635 		$\attest=$ \textit{a$\attest$testation},
   1636 	}
   1637 	\uncover<5->{
   1638 		$\Blindings=$ \textit{$\Blindings$lindings},
   1639 		$\blinding=$ \textit{$\blinding$linding}.
   1640 	}
   1641 \end{frame}
   1642 
   1643 \begin{frame}<1-| handout:0>{Age restriction}
   1644 	\framesubtitle{Naïve scheme}
   1645 	\begin{center}
   1646 	\begin{tikzpicture}[scale=.85]
   1647 		\node[circle,minimum size=20pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$};
   1648 		\node[circle,minimum size=20pt,fill=black!15] at (  0:0) (Client) {$\Child$};
   1649 		\node[circle,minimum size=20pt,fill=black!15] at (  0:4) (Merchant) {$\Merchant$};
   1650 		\node[circle,minimum size=20pt,fill=blue!15]  at (140:3) (Guardian) {$\Guardian$};
   1651 
   1652 		\draw[->] (Guardian)   to [out=50,in=130, loop] node[above]
   1653 			{$\Commit$} (Guardian);
   1654 		\draw[->,blue] (Client)   to [out=-125,in=-190, loop] node[below,left]
   1655 			{\blue{$\Attest$}} (Client);
   1656 		\draw[->,blue] (Merchant) to [out=50,in=130, loop] node[above]
   1657 			{\blue{$\Verify$}} (Merchant);
   1658 		\draw[->,orange] (Client)   to [out=-35,in=-100, loop] node[below]
   1659 			{\orange{$\Derive$}} (Client);
   1660 		\draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above]
   1661 			{\orange{$\Compare$}} (Exchange);
   1662 
   1663 		\draw[orange,|->] (Client)   to node[sloped,above,align=left]
   1664 			{\orange{\scriptsize }} (Exchange);
   1665 		\draw[blue,|->] (Client)   to node[sloped, above]
   1666 			{\blue{\scriptsize }} (Merchant);
   1667 		\draw[,|->] (Guardian) to node[above,sloped,align=left]
   1668 			{{\scriptsize }} (Client);
   1669 	\end{tikzpicture}
   1670 	\end{center}
   1671 \end{frame}
   1672 
   1673 \begin{frame}<1-| handout:0>{Achieving Unlinkability}
   1674 	\begin{columns}
   1675 		\column{3cm}
   1676 		\begin{center}
   1677 		\fontsize{8pt}{9pt}\selectfont
   1678 		\begin{tikzpicture}[scale=.65]
   1679 			\node[circle,minimum size=20pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$};
   1680 			\node[circle,minimum size=20pt,fill=black!15] at (  0:0) (Client) {$\Child$};
   1681 
   1682 			\draw[->,orange] (Client)   to [out=-35,in=-100, loop] node[below]
   1683 				{\orange{$\footnotesize \Derive()$}} (Client);
   1684 			\draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above]
   1685 				{\orange{$\footnotesize \Compare()$}} (Exchange);
   1686 
   1687 			\draw[orange,|->] (Client)   to node[sloped,above,align=left]
   1688 				{\orange{\tiny \uncover<2->{$(\commitment_i,\commitment_{i+1})$}}} (Exchange);
   1689 		\end{tikzpicture}
   1690 		\end{center}
   1691 
   1692 		\column{9cm}
   1693 	Simple use of $\Derive()$ and $\Compare()$ is problematic.
   1694 
   1695 	\begin{itemize}
   1696 		\item<2-> Calling $\Derive()$ iteratively generates sequence
   1697 			$(\commitment_0, \commitment_1, \dots)$ of commitments.
   1698 		\item<2-> Exchange calls $\Compare(\commitment_i, \commitment_{i+1}, .)$
   1699 		\item[$\implies$]\uncover<3->{\bf Exchange identifies sequence}
   1700 		\item[$\implies$]\uncover<3->{\bf Unlinkability broken}
   1701 	\end{itemize}
   1702 	\end{columns}
   1703 \end{frame}
   1704 
   1705 \begin{frame}<1-| handout:0>{Achieving Unlinkability}
   1706 	Define cut\&choose protocol \orange{$\DeriveCompare$},
   1707 	using $\Derive()$ and $\Compare()$.\\[0.5em]
   1708 	\uncover<2->{
   1709 	Sketch:
   1710 	\small
   1711 	\begin{enumerate}
   1712 		\item $\Child$ derives commitments $(\commitment_1,\dots,\commitment_\kappa)$
   1713 			from $\commitment_0$ \\
   1714 			by calling $\Derive()$ with blindings $(\beta_1,\dots,\beta_\kappa)$
   1715 		\item $\Child$ calculates $h_0:=H\left(H(\commitment_1, \beta_1)||\dots||H(\commitment_\kappa, \beta_\kappa)\right)$
   1716 		\item $\Child$ sends $\commitment_0$ and $h_0$ to $\Exchange$
   1717 		\item $\Exchange$ chooses $\gamma \in \{1,\dots,\kappa\}$ randomly
   1718 		\item $\Child$ reveals $h_\gamma:=H(\commitment_\gamma, \beta_\gamma)$ and all $(\commitment_i, \beta_i)$, except $(\commitment_\gamma, \beta_\gamma)$
   1719 		\item $\Exchange$ compares $h_0$ and
   1720 			$H\left(H(\commitment_1, \beta_1)||...||h_\gamma||...||H(\commitment_\kappa, \beta_\kappa)\right)$\\
   1721 			and evaluates $\Compare(\commitment_0, \commitment_i, \beta_i)$.
   1722 	\end{enumerate}
   1723 	\vfill
   1724 	Note: Scheme is similar to the {\it refresh} protocol in GNU Taler.
   1725 	}
   1726 \end{frame}
   1727 
   1728 \begin{frame}<1-| handout:0>{Achieving Unlinkability}
   1729 	With \orange{$\DeriveCompare$}
   1730 	\begin{itemize}
   1731 		\item $\Exchange$ learns nothing about $\commitment_\gamma$,
   1732 		\item trusts outcome with $\frac{\kappa-1}{\kappa}$ certainty,
   1733 		\item i.e. $\Child$ has $\frac{1}{\kappa}$ chance to cheat.
   1734 	\end{itemize}
   1735 	\vfill
   1736 	Note: Still need Derive and Compare to be defined.
   1737 \end{frame}
   1738 
   1739 \begin{frame}<1-| handout:0>{Refined scheme}
   1740 
   1741 	\begin{tikzpicture}[scale=.8]
   1742 		\node[circle,minimum size=25pt,fill=black!15] at (  0:0) (Client)   {$\Child$};
   1743 		\node[circle,minimum size=25pt,fill=black!15] at ( 60:5) (Exchange) {$\Exchange$};
   1744 		\node[circle,minimum size=25pt,fill=black!15] at (  0:5) (Merchant) {$\Merchant$};
   1745 		\node[circle,minimum size=25pt,fill=blue!15]  at (130:3) (Guardian) {$\Guardian$};
   1746 
   1747 		\draw[orange,<->] (Client)   to node[sloped,below,align=center]
   1748 			{\orange{$\DeriveCompare$}} (Exchange);
   1749 		\draw[blue,->] (Client)   to node[sloped, below]
   1750 			{\blue{$(\attest_\minage, \commitment)$}} (Merchant);
   1751 
   1752 		\draw[->] (Guardian)   to [out=150,in=70, loop] node[above]
   1753 			{$\Commit(\age)$} (Guardian);
   1754 		\draw[->] (Guardian)   to node[below,sloped]
   1755 			{($\commitment$, $\pruf_\age$)} (Client);
   1756 		\draw[->,blue] (Client)   to [out=-50,in=-130, loop] node[below]
   1757 			{\blue{$\Attest(\minage, \commitment, \pruf_{\age})$}} (Client);
   1758 		\draw[->,blue] (Merchant) to [out=-50,in=-130, loop] node[below]
   1759 			{\blue{$\Verify(\minage, \commitment, \attest_{\minage})$}} (Merchant);
   1760 	\end{tikzpicture}
   1761 \end{frame}
   1762 
   1763 % \begin{frame}{Achieving Unlinkability}
   1764 % 	\scriptsize
   1765 % 	$\DeriveCompare : \Commitments\times\Proofs\times\Omega \to \{0,1\}$\\
   1766 % 	\vfill
   1767 % 	$\DeriveCompare(\commitment, \pruf, \omega) =$
   1768 % \begin{itemize}
   1769 % \it
   1770 % 	\itemsep0.5em
   1771 % 	\item[$\Child$:]
   1772 % 		\begin{enumerate}
   1773 % 				\scriptsize
   1774 % 			\itemsep0.3em
   1775 % 			\item for all $i \in \{1,\dots,\kappa\}:
   1776 % 				(\commitment_i,\pruf_i,\beta_i) \leftarrow \Derive(\commitment, \pruf, \omega + i)$
   1777 % 			\item $h \leftarrow \Hash\big(\Hash(\commitment_1,\beta_1)\parallel\dots\parallel\Hash(\commitment_\kappa,\beta_\kappa) \big)$
   1778 % 			\item send $(\commitment, h)$ to $\Exchange$
   1779 % 		\end{enumerate}
   1780 % 	\item[$\Exchange$:]
   1781 % 		\begin{enumerate}
   1782 % 			\setcounter{enumi}{4}
   1783 % 				\scriptsize
   1784 % 			\itemsep0.3em
   1785 % 			\item save $(\commitment, h)$ \label{st:hash}
   1786 % 			\item $\gamma \drawfrom \{1,\dots ,\kappa\}$
   1787 % 			\item send $\gamma$ to $\Child$
   1788 % 		\end{enumerate}
   1789 % 	\item[$\Child$:]
   1790 % 		\begin{enumerate}
   1791 % 			\setcounter{enumi}{7}
   1792 %
   1793 % 				\scriptsize
   1794 % 			\itemsep0.3em
   1795 % 			\item $h'_\gamma \leftarrow \Hash(\commitment_\gamma, \beta_\gamma)$
   1796 % 			\item $\mathbf{E}_\gamma \leftarrow \big[(\commitment_1,\beta_1),\dots,
   1797 % 				(\commitment_{\gamma-1}, \beta_{\gamma-1}),
   1798 % 				\Nil,
   1799 % 				(\commitment_{\gamma+1}, \beta_{\gamma+1}),
   1800 % 				\dots,(\commitment_\kappa, \beta_\kappa)\big]$
   1801 % 			\item send $(\mathbf{E}_\gamma, h'_\gamma)$ to $\Exchange$
   1802 % 		\end{enumerate}
   1803 % 	\item[$\Exchange$:]
   1804 % 		\begin{enumerate}
   1805 % 			\setcounter{enumi}{10}
   1806 % 				\scriptsize
   1807 % 			\itemsep0.3em
   1808 % 			\item for all $i \in \{1,\dots,\kappa\}\setminus\{\gamma\}: h_i \leftarrow \Hash(\mathbf{E}_\gamma[i])$
   1809 % 			\item if $h \stackrel{?}{\neq} \HashF(h_1\|\dots\|h_{\gamma-1}\|h'_\gamma\|h_{\gamma+1}\|\dots\|h_{\kappa-1})$ return 0
   1810 % 			\item for all $i \in \{1,\dots,\kappa\}\setminus\{\gamma\}$:
   1811 % 				if $0 \stackrel{?}{=} \Compare(\commitment,\commitment_i, \beta_i)$ return $0$
   1812 % 			\item return 1
   1813 % 		\end{enumerate}
   1814 % \end{itemize}
   1815 % \end{frame}
   1816 
   1817 \begin{frame}<1-| handout:0>{Basic Requirements}
   1818 
   1819 	Candidate functions
   1820 	\[ (\Commit, \Attest, \Verify, \Derive, \Compare) \]
   1821 	must first meet \textit{basic} requirements:
   1822 
   1823 	\begin{itemize}
   1824 		\item Existence of attestations
   1825 		\item Efficacy of attestations
   1826 		\item Derivability of commitments and attestations
   1827 	\end{itemize}
   1828 \end{frame}
   1829 
   1830 \begin{frame}<1-| handout:0>{Basic Requirements}
   1831 	\framesubtitle{Formal Details}
   1832 
   1833 	\begin{description}
   1834 		\item[Existence of attestations]
   1835 			{\scriptsize
   1836 			\begin{align*}
   1837 				\Forall_{\age\in\N_\Age \atop \omega \in \Omega}:
   1838 				\Commit(\age, \omega) =: (\commitment, \pruf)
   1839 				\implies
   1840 				\Attest(\minage, \commitment, \pruf) =
   1841 				\begin{cases}
   1842 					\attest \in \Attests, \text{ if } \minage \leq \age\\
   1843 					\Nil \text{ otherwise}
   1844 				\end{cases}
   1845 			\end{align*}}
   1846 		\item[Efficacy of attestations]
   1847 			{\scriptsize
   1848 			\begin{align*}
   1849 				\Verify(\minage, \commitment, \attest) = \
   1850 				\begin{cases}
   1851 					1, \text{if } \Exists_{\pruf \in \Proofs}: \Attest(\minage, \commitment, \pruf) = \attest\\
   1852 					0 \text{ otherwise}
   1853 				\end{cases}
   1854 			\end{align*}}
   1855 
   1856 			{\scriptsize
   1857 			\begin{align*}
   1858 				\forall_{n \leq \age}: \Verify\big(n, \commitment, \Attest(n, \commitment, \pruf)\big) = 1.
   1859 			\end{align*}}
   1860 		\item[etc.]
   1861 	\end{description}
   1862 \end{frame}
   1863 
   1864 %\begin{frame}{Requirements}
   1865 %	\framesubtitle{Details}
   1866 %
   1867 %	\begin{description}
   1868 %		\item[Derivability of commitments and proofs:]~\\[0.1em]
   1869 %		{\scriptsize
   1870 %		Let \begin{align*}
   1871 %			\age & \in\N_\Age,\,\, \omega_0, \omega_1 \in\Omega\\
   1872 %			(\commitment_0, \pruf_0) & \leftarrow \Commit(\age, \omega_0),\\
   1873 %			(\commitment_1, \pruf_1, \blinding) & \leftarrow  \Derive(\commitment_0, \pruf_0, \omega_1).
   1874 %		\end{align*}
   1875 %		We require
   1876 %		\begin{align*}
   1877 %			\Compare(\commitment_0, \commitment_1, \blinding) = 1 \label{req:comparity}
   1878 %		\end{align*}
   1879 %		and for all $n\leq\age$:
   1880 %		\begin{align*}
   1881 %					\Verify(n, \commitment_1, \Attest(n, \commitment_1, \pruf_1)) &%
   1882 %					=
   1883 %					\Verify(n, \commitment_0,  \Attest(n, \commitment_0,  \pruf_0))
   1884 %		\end{align*}}
   1885 %	\end{description}
   1886 %\end{frame}
   1887 
   1888 \begin{frame}<1-| handout:0>{Security Requirements}
   1889 	Candidate functions must also meet \textit{security} requirements.
   1890 	Those are defined via security games:
   1891 	\begin{itemize}
   1892 		\item Game: Age disclosure by commitment or attestation
   1893 		\item[$\leftrightarrow$] Requirement: Non-disclosure of age
   1894 			\vfill
   1895 
   1896 		\item Game: Forging attestation
   1897 		\item[$\leftrightarrow$] Requirement: Unforgeability of
   1898 			minimum age
   1899 			\vfill
   1900 
   1901 		\item Game: Distinguishing derived commitments and attestations
   1902 		\item[$\leftrightarrow$] Requirement: Unlinkability of
   1903 			commitments and attestations
   1904 
   1905 	\end{itemize}
   1906 	\vfill
   1907 
   1908 	Meeting the security requirements means that adversaries can win
   1909 	those games only with negligible advantage.
   1910 	\vfill
   1911 	Adversaries are arbitrary polynomial-time algorithms, acting on all
   1912 	relevant input.
   1913 \end{frame}
   1914 
   1915 \begin{frame}<1-| handout:0>{Security Requirements}
   1916 	\framesubtitle{Simplified Example}
   1917 
   1918 	\begin{description}
   1919 		\item[Game $\Game{FA}(\lambda)$---Forging an attest:]~\\
   1920 	{\small
   1921 	\begin{enumerate}
   1922 		\item $ (\age, \omega)	\drawfrom	\N_{\Age-1}\times\Omega $
   1923 		\item $ (\commitment, \pruf)	\leftarrow	\Commit(\age, \omega) $
   1924 		\item $ (\minage, \attest) \leftarrow \Adv(\age, \commitment, \pruf)$
   1925 		\item Return 0 if $\minage \leq \age$
   1926 		\item Return $\Verify(\minage,\commitment,\attest)$
   1927 	\end{enumerate}
   1928 	}
   1929 	\vfill
   1930 	\item[Requirement: Unforgeability of minimum age]
   1931 		{\small
   1932 	\begin{equation*}
   1933 		\Forall_{\Adv\in\PPT(\N_\Age\times\Commitments\times\Proofs\to \N_\Age\times\Attests)}:
   1934 		\Probability\Big[\Game{FA}(\lambda) = 1\Big] \le \negl(\lambda)
   1935 	\end{equation*}
   1936 	}
   1937 	\end{description}
   1938 \end{frame}
   1939 
   1940 
   1941 \begin{frame}<1-| handout:0>{Solution: Instantiation with ECDSA}
   1942 %	\framesubtitle{Definition of Commit}
   1943 
   1944 	\begin{description}
   1945 		\item[To Commit to age (group) $\age \in \{1,\dots,\Age\}$]~\\
   1946 		\begin{enumerate}
   1947 			\item<2-> Guardian generates ECDSA-keypairs, one per age (group):
   1948 				\[\langle(q_1, p_1),\dots,(q_\Age,p_\Age)\rangle\]
   1949 			\item<3-> Guardian then \textbf{drops} all private keys
   1950 				$p_i$ for $i > \age$:
   1951 				\[\Big \langle(q_1, p_1),\dots,
   1952 					(q_\age, p_\age),
   1953 					(q_{\age +1}, \red{\Nil}),\dots,
   1954 					(q_\Age, \red{\Nil})\Big\rangle\]
   1955 
   1956 				\begin{itemize}
   1957 					\item $\Vcommitment := (q_1, \dots, q_\Age)$ is the \textit{Commitment},
   1958 					\item $\Vpruf_\age := (p_1, \dots, p_\age, \Nil,\dots,\Nil)$ is the \textit{Proof}
   1959 				\end{itemize}
   1960 				\vfill
   1961 			\item<4-> Guardian gives child $\langle \Vcommitment, \Vpruf_\age \rangle$
   1962 				\vfill
   1963 		\end{enumerate}
   1964 	\end{description}
   1965 \end{frame}
   1966 
   1967 \begin{frame}<1-| handout:0>{Instantiation with ECDSA}
   1968 	\framesubtitle{Definitions of Attest and Verify}
   1969 
   1970 	Child has
   1971 	\begin{itemize}
   1972 		\item ordered public-keys $\Vcommitment = (q_1, \dots, q_\Age) $,
   1973 		\item (some) private-keys $\Vpruf = (p_1, \dots, p_\age, \Nil, \dots, \Nil)$.
   1974 	\end{itemize}
   1975 	\begin{description}
   1976 		\item<2->[To \blue{Attest} a minimum age $\blue{\minage} \leq \age$:]~\\
   1977 			Sign a message with ECDSA using private key $p_\blue{\minage}$
   1978 	\end{description}
   1979 
   1980 	\vfill
   1981 
   1982 	\uncover<3->{
   1983 	Merchant gets
   1984 	\begin{itemize}
   1985 		\item ordered public-keys $\Vcommitment = (q_1, \dots, q_\Age) $
   1986 		\item Signature $\sigma$
   1987 	\end{itemize}
   1988 	\begin{description}
   1989 		\item<4->[To \blue{Verify} a minimum age $\minage$:]~\\
   1990 			Verify the ECDSA-Signature $\sigma$ with public key $q_\minage$.
   1991 	\end{description}
   1992 	}
   1993 	\vfill
   1994 \end{frame}
   1995 
   1996 \begin{frame}<1-| handout:0>{Instantiation with ECDSA}
   1997 	\framesubtitle{Definitions of Derive and Compare}
   1998 	Child has
   1999 	$\Vcommitment = (q_1, \dots, q_\Age) $ and
   2000 	$\Vpruf = (p_1, \dots, p_\age, \Nil, \dots, \Nil)$.
   2001 	\begin{description}
   2002 		\item<2->[To \blue{Derive} new $\Vcommitment'$ and $\Vpruf'$:]
   2003 			Choose random $\beta\in\Z_g$ and calculate
   2004 			\small
   2005 			\begin{align*}
   2006 				\Vcommitment' &:= \big(\beta * q_1,\ldots,\beta * q_\Age\big),\\
   2007 				\Vpruf' &:= \big(\beta p_1,\ldots,\beta p_\age,\Nil,\ldots,\Nil\big)
   2008 			\end{align*}
   2009 			Note: $ (\beta p_i)*G = \beta*(p_i*G)  = \beta*q_i$\\
   2010 			\scriptsize $\beta*q_i$ is scalar multiplication on the elliptic curve.
   2011 	\end{description}
   2012 
   2013 		\vfill
   2014 	\uncover<3->{
   2015 		Exchange gets $\Vcommitment = (q_1,\dots,q_\Age)$, $\Vcommitment' = (q_1', \dots, q_\Age')$ and $\beta$
   2016 	\begin{description}
   2017 		\item[To \blue{Compare}, calculate:]
   2018 			\small
   2019 		$(\beta * q_1, \ldots , \beta * q_\Age) \stackrel{?}{=} (q'_1,\ldots, q'_\Age)$
   2020 	\end{description}
   2021 	\vfill
   2022 	}
   2023 \end{frame}
   2024 
   2025 \begin{frame}<1-| handout:0>{Instantiation with ECDSA}
   2026 
   2027 	Functions
   2028 	(Commit, Attest, Verify, Derive, Compare)\\
   2029 	as defined in the instantiation with ECDSA\\[0.5em]
   2030 	\begin{itemize}
   2031 		\item meet the basic requirements,\\[0.5em]
   2032 		\item also meet all security requirements.\\
   2033 		Proofs by security reduction, details are in the paper.
   2034 	\end{itemize}
   2035 
   2036 \end{frame}
   2037 
   2038 
   2039 % \begin{frame}{Instantiation with ECDSA}
   2040 % 	\framesubtitle{Full definitions}
   2041 % 	\scriptsize
   2042 %
   2043 % \begin{align*}
   2044 % 	\Commit_{E,\FDHg{\cdot}}(\age, \omega) &:= \Big\langle
   2045 % 		\overbrace{(q_1,\ldots,q_\Age)}^{= \Vcommitment},\;
   2046 % 		\overbrace{(p_1,\ldots,p_\age, \Nil,\ldots,\Nil)}^{= \Vpruf \text{, length }\Age}
   2047 % 		\Big\rangle\\
   2048 % 	\Attest_{E,\HashF}(\bage, \Vcommitment, \Vpruf) &:=
   2049 % 		\begin{cases}
   2050 % 			\attest_\bage := \Sign_{E,\HashF}\big(\bage,\Vpruf[\bage]\big) & \text{if } \Vpruf[\bage] \stackrel{?}{\neq} \Nil\\
   2051 % 			\Nil & \text{otherwise}
   2052 % 		\end{cases}\\
   2053 % %
   2054 % 	\Verify_{E,\HashF}(\bage, \Vcommitment, \attest) &:= \Ver_{E,\HashF}(\bage, \Vcommitment[\bage], \attest)\\
   2055 % %
   2056 % 	\Derive_{E, \FDHg{\cdot}}(\Vcommitment, \Vpruf, \omega) &:=
   2057 % 		\Big\langle(\beta * q_1,\ldots,\beta * q_\Age),
   2058 % 		     (\beta p_1,\ldots,\beta p_\age,\Nil,\ldots,\Nil), \beta \Big\rangle \\
   2059 % 		     & \text{ with } \beta := \FDHg{\omega} \text{ and multiplication } \beta p_i \text{ modulo } g \nonumber\\
   2060 % %
   2061 % 	\Compare_E(\Vcommitment, \Vcommitment', \beta)	&:=
   2062 % 		\begin{cases}
   2063 % 			1 & \text{if } (\beta * q_1, \ldots , \beta * q_\Age) \stackrel{?}{=} (q'_1,\ldots, q'_\Age)\\
   2064 % 			0 & \text{otherwise}
   2065 % 		\end{cases}
   2066 % \end{align*}
   2067 % \end{frame}
   2068 
   2069 
   2070 \begin{frame}<1-| handout:0>{Reminder: GNU Taler Fundamentals}
   2071 	\begin{center}
   2072 	\begin{tikzpicture}[scale=.55]
   2073 		\node[circle,fill=black!10] at (3, 4) (Exchange) {$\Exchange$};
   2074 		\node[circle,fill=black!10] at (0, 0) (Customer) {$\Customer$};
   2075 		\node[circle,fill=black!10] at (6, 0) (Merchant) {$\Merchant$};
   2076 
   2077 		\draw[<->] (Customer)   to [out=65,in=220] node[sloped,above] {\sf withdraw} (Exchange);
   2078 		\draw[<->] (Customer)   to [out=45,in=240] node[sloped,below] {\sf refresh} (Exchange);
   2079 		\draw[<->] (Customer)   to node[sloped, below] {\sf purchase} (Merchant);
   2080 		\draw[<->] (Merchant) to node[sloped, above] {\sf deposit} (Exchange);
   2081 	\end{tikzpicture}
   2082 	\end{center}
   2083 
   2084 	\vfill
   2085 	\begin{itemize}
   2086 		\item Coins are public-/private key-pairs $(C_p, c_s)$.
   2087 		\item Exchange blindly signs $\FDH(C_p)$ with denomination key $d_p$
   2088 		\item Verification:
   2089 		\begin{eqnarray*}
   2090 			1  &\stackrel{?}{=}&
   2091 			\mathsf{SigCheck}\big(\FDH(C_p), D_p, \sigma_p\big)
   2092 		\end{eqnarray*}
   2093 		\scriptsize($D_p$ = public key of denomination and $\sigma_p$ = signature)
   2094 
   2095 	\end{itemize}
   2096 \end{frame}
   2097 
   2098 \begin{frame}<1-| handout:0>{Integration with GNU Taler}
   2099 	\framesubtitle{Binding age restriction to coins}
   2100 
   2101 	To bind an age commitment $\commitment$ to a coin $C_p$, instead of
   2102 	signing $\FDH(C_p)$, $\Exchange$ now blindly signs
   2103 	\begin{center}
   2104 		$\FDH(C_p, \orange{H(\commitment)})$
   2105 	\end{center}
   2106 
   2107 	\vfill
   2108 	Verfication of a coin now requires $H(\commitment)$, too:
   2109 	\begin{center}
   2110 		$1  \stackrel{?}{=}
   2111 		\mathsf{SigCheck}\big(\FDH(C_p, \orange{H(\commitment)}), D_p, \sigma_p\big)$
   2112 	\end{center}
   2113 	\vfill
   2114 \end{frame}
   2115 
   2116 \begin{frame}<1-| handout:0>{Integration with GNU Taler}
   2117 	\framesubtitle{Integrated schemes}
   2118 	\fontsize{8pt}{9pt}\selectfont
   2119 	\begin{tikzpicture}[scale=.9]
   2120 		\node[circle,minimum size=25pt,fill=black!15] at (  0:0) (Client)   {$\Child$};
   2121 		\node[circle,minimum size=25pt,fill=black!15] at ( 60:5) (Exchange) {$\Exchange$};
   2122 		\node[circle,minimum size=25pt,fill=black!15] at (  0:5) (Merchant) {$\Merchant$};
   2123 		\node[circle,minimum size=25pt,fill=blue!15]  at (130:3) (Guardian) {$\Guardian$};
   2124 
   2125 		\draw[<->] (Guardian)   to  node[sloped,above,align=center]
   2126 			{{\sf withdraw}\orange{, using}\\ $\FDH(C_p\orange{, H(\commitment)})$} (Exchange);
   2127 		\draw[<->] (Client)   to node[sloped,below,align=center]
   2128 			{{\sf refresh} \orange{ + }\\ \orange{$\DeriveCompare$}} (Exchange);
   2129 		\draw[<->] (Client)   to node[sloped, below]
   2130 			{{\sf purchase} \blue{+ $(\attest_\minage, \commitment)$}} (Merchant);
   2131 		\draw[<->] (Merchant) to node[sloped, above]
   2132 			{{\sf deposit} \orange{+ $H(\commitment)$}} (Exchange);
   2133 
   2134 		\draw[->] (Guardian)   to [out=70,in=150, loop] node[above]
   2135 			{$\Commit(\age)$} (Guardian);
   2136 		\draw[->] (Guardian)   to node[below,sloped]
   2137 			{($\commitment$, $\pruf_\age$)} (Client);
   2138 		\draw[->,blue] (Client)   to [out=-50,in=-130, loop] node[below]
   2139 			{\blue{$\Attest(\minage, \commitment, \pruf_{\age})$}} (Client);
   2140 		\draw[->,blue] (Merchant) to [out=-50,in=-130, loop] node[below]
   2141 			{\blue{$\Verify(\minage, \commitment, \attest_{\minage})$}} (Merchant);
   2142 	\end{tikzpicture}
   2143 \end{frame}
   2144 
   2145 
   2146 \begin{frame}<1-| handout:0>{Instantiation with Edx25519}
   2147 	Paper also formally defines another signature scheme: Edx25519.\\[1em]
   2148 
   2149 	\begin{itemize}
   2150 		\item Scheme already in use in GNUnet,
   2151 		\item based on EdDSA (Bernstein et al.),
   2152 		\item generates compatible signatures and
   2153 		\item allows for key derivation from both, private and public keys, independently.
   2154 	\end{itemize}~\\[1em]
   2155 
   2156 	Current implementation of age restriction in GNU Taler uses Edx25519.
   2157 \end{frame}
   2158 
   2159 
   2160 \begin{frame}{Age Restrictions based on KYC}
   2161 %		\item Our solution can in principle be used with any token-based payment scheme
   2162 %		\item GNU Taler best aligned with our design goals (security, privacy and efficiency)
   2163  Subsidiarity requires bank accounts being owned by adults
   2164 			\begin{itemize}
   2165 			\item Scheme can be adapted to case where minors have bank accounts
   2166 				\begin{itemize}
   2167 					\item Assumption: banks provide minimum age
   2168 						information during bank
   2169 						transactions.
   2170 					\item Child and Exchange execute a variant of
   2171 						the cut\&choose protocol.
   2172 				\end{itemize}
   2173 			\end{itemize}
   2174 \end{frame}
   2175 
   2176 
   2177 \begin{frame}<1-| handout:0>{Related Work}
   2178 	\begin{itemize}
   2179 		\item Current privacy-perserving systems all based on attribute-based credentials (Koning et al., Schanzenbach et al., Camenisch et al., Au et al.)
   2180 		\item Attribute-based approach lacks support:
   2181 			\begin{itemize}
   2182 				\item Complex for consumers and retailers
   2183 				\item Requires trusted third authority
   2184 			\end{itemize}
   2185 		\vfill
   2186 		\item Other approaches tie age-restriction to ability to pay ("debit cards for kids")
   2187 			\begin{itemize}
   2188 				\item Advantage: mandatory to payment process
   2189 				\item Not privacy friendly
   2190 			\end{itemize}
   2191 	\end{itemize}
   2192 \end{frame}
   2193 
   2194 \begin{frame}{Conclusion}
   2195 	Age restriction is a technical, ethical and legal challenge.
   2196 
   2197 	Existing solutions are
   2198 	\begin{itemize}
   2199 		\item without strong protection of privacy or
   2200 		\item based on identity management systems (IMS)
   2201 	\end{itemize}
   2202 	\vfill
   2203 
   2204 	Our age restriction scheme offers a solution that is
   2205 	\begin{itemize}
   2206 		\item based on subsidiarity
   2207 		\item privacy-preserving
   2208 		\item efficient
   2209 		\item an alternative to IMS
   2210 	\end{itemize}
   2211     Other types of programmability (escrow, auctions) are under development.
   2212 \end{frame}
   2213 
   2214 
   2215 \section{Component Architecture}
   2216 
   2217 \begin{frame}
   2218   \vfill
   2219   \begin{center}
   2220     {\bf Part VI: Component Architecture}
   2221   \end{center}
   2222   \vfill
   2223 \end{frame}
   2224 
   2225 
   2226 \begin{frame}[fragile]{Taler: Bank Perspective}
   2227 \begin{adjustbox}{max totalsize={.9\textwidth}{.7\textheight},center}
   2228 \begin{tikzpicture}
   2229  \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em];
   2230  \node (origin) at (0,0) {};
   2231  \node (exchange) [def,above=of origin,draw]{Exchange};
   2232  \node (nexus) [def, draw, below right=of exchange] {Nexus};
   2233  \node (corebanking) [def, draw, below left=of nexus] {Core Banking};
   2234  \node (nginx) [def, draw, above=of exchange]{Nginx};
   2235  \node (postgres) [def, draw, below left=of exchange]{Postgres};
   2236  \node (postgres-nexus) [def, draw, below right=of nexus]{Postgres};
   2237 
   2238  \tikzstyle{C} = [color=black, line width=1pt]
   2239 
   2240  \draw [<-, C] (exchange) -- (nginx) node [midway, above, sloped] (TextNode) {REST API};
   2241  \draw [<-, C] (postgres) -- (exchange) node [midway, above, sloped] (TextNode) {SQL};
   2242  \draw [<-, C] (postgres-nexus) -- (nexus) node [midway, above, sloped] (TextNode) {SQL};
   2243  \draw [<-, C] (nexus) -- (exchange) node [midway, above, sloped] (TextNode) {Internal REST API};
   2244  \draw [<-, C] (corebanking) -- (nexus) node [midway, above, sloped] (TextNode) {EBICS/FinTS};
   2245 
   2246 \end{tikzpicture}
   2247 \end{adjustbox}
   2248 \end{frame}
   2249 
   2250 
   2251 \begin{frame}{Taler: Exchange Architecture}
   2252 \begin{center}
   2253 \begin{tikzpicture}
   2254  \tikzstyle{def} = [node distance=2em and 2.5em, inner sep=1em, outer sep=.3em];
   2255  \node (origin) at (0,0) {};
   2256  \node (httpd) [def,above=of origin,draw]{httpd};
   2257  \node (secmod-rsa) [def, draw, right=of httpd] {secmod-rsa};
   2258  \node (secmod-eddsa) [def, draw, left=of httpd] {secmod-eddsa};
   2259  \node (postgres) [def, draw, below=of httpd]{Postgres};
   2260  \node (aggregator) [def, draw, right=of postgres]{aggregator};
   2261  \node (transfer) [def, draw, below left=of postgres]{transfer};
   2262  \node (wirewatch) [def, draw, below right=of postgres]{wirewatch};
   2263  \node (nexus) [def, draw, below=of postgres]{Nexus};
   2264 
   2265  \tikzstyle{C} = [color=black, line width=1pt]
   2266 
   2267  \draw [<->, C] (httpd) -- (postgres) node [midway, above, sloped] (TextNode) {};
   2268  \draw [<->, C] (httpd) -- (secmod-rsa) node [midway, above, sloped] (TextNode) {};
   2269  \draw [<->, C] (httpd) -- (secmod-eddsa) node [midway, above, sloped] (TextNode) {};
   2270  \draw [<->, C] (aggregator) -- (postgres) node [midway, above, sloped] (TextNode) {};
   2271  \draw [<->, C] (wirewatch) -- (postgres) node [midway, above, sloped] (TextNode) {};
   2272  \draw [<->, C] (transfer) -- (postgres) node [midway, above, sloped] (TextNode) {};
   2273  \draw [->, C] (transfer) -- (nexus) node [midway, above, sloped] (TextNode) {};
   2274  \draw [<-, C] (wirewatch) -- (nexus) node [midway, above, sloped] (TextNode) {};
   2275 \end{tikzpicture}
   2276 \end{center}
   2277 \end{frame}
   2278 
   2279 
   2280 \begin{frame}
   2281 \frametitle{Taler: Auditor Perspective}
   2282 \begin{center}
   2283 \begin{tikzpicture}
   2284  \tikzstyle{def} = [node distance=2em and 2.5em, inner sep=1em, outer sep=.3em];
   2285  \node (origin) at (0,0) {};
   2286  \node (httpd) [def,above left=of origin,draw]{auditor-httpd};
   2287  \node (report) [def,above right=of origin,draw]{auditor-report};
   2288  \node (postgres-A) [def, draw, below=of origin] {Postgres (Auditor)};
   2289  \node (postgres-E) [def, draw, below=of postgres-A] {Postgres (Exchange)};
   2290 
   2291  \tikzstyle{C} = [color=black, line width=1pt]
   2292 
   2293  \draw [->, C] (postgres-E) -- (postgres-A) node [midway, above, sloped] (TextNode) {sync};
   2294  \draw [<->, C] (httpd) -- (postgres-A) node [midway, above, sloped] (TextNode) {};
   2295  \draw [<->, C] (report) -- (postgres-A) node [midway, above, sloped] (TextNode) {};
   2296 \end{tikzpicture}
   2297 \end{center}
   2298 \end{frame}
   2299 
   2300 
   2301 \begin{frame}
   2302 \frametitle{Taler: Merchant Perspective}
   2303 \begin{center}
   2304 \begin{tikzpicture}
   2305  \tikzstyle{def} = [node distance= 3.5em and 2em, inner sep=1em, outer sep=.3em];
   2306  \node (origin) at (0,0) {};
   2307  \node (backend) [def,above=of origin,draw]{{\tiny taler-merchant-httpd}};
   2308  \node (frontend) [def,above left=of backend,draw]{{\tiny E-commerce Frontend}};
   2309  \node (backoffice) [def,above right=of
   2310 backend,draw]{\tiny Backoffice};
   2311  \node (postgres) [def, draw, below left=of backend] {\tiny Postgres};
   2312  \node (sqlite) [def, draw, below=of backend] {\tiny Sqlite};
   2313  \node (alt) [def, draw, below right=of backend] {...};
   2314 
   2315  \tikzstyle{C} = [color=black, line width=1pt]
   2316 
   2317  \draw [->, C] (frontend) -- (backend) node [midway, above, sloped]
   2318 (TextNode) {\tiny REST API};
   2319  \draw [->, C] (backoffice) -- (backend) node [midway, above, sloped]
   2320 (TextNode) {\tiny REST API};
   2321  \draw [<->, C] (backend) -- (postgres) node [midway, above, sloped]
   2322 (TextNode) {\tiny SQL};
   2323  \draw [<->, C] (backend) -- (sqlite) node [midway, above, sloped]
   2324 (TextNode) {\tiny SQL};
   2325  \draw [<->, C] (backend) -- (alt) node [midway, above, sloped]
   2326 (TextNode) {\tiny SQL};
   2327 \end{tikzpicture}
   2328 \end{center}
   2329 \end{frame}
   2330 
   2331 
   2332 \begin{frame}
   2333 \frametitle{Taler: Wallet Architecture}
   2334 \begin{center}
   2335 \begin{tikzpicture}
   2336  \tikzstyle{def} = [node distance= 5em and 4.5em, inner sep=1em, outer sep=.3em];
   2337  \node (origin) at (0,0) {};
   2338  \node (gui) [def,above=of origin,draw]{wallet-gui};
   2339  \node (core) [def,below=of gui,draw]{wallet-core};
   2340  \node (sync) [def, draw, below left=of core] {Sync};
   2341  \node (taler) [def, draw, below right=of core] {Taler};
   2342  \node (anastasis) [def, draw, below=of core] {Anastasis};
   2343 
   2344  \tikzstyle{C} = [color=black, line width=1pt]
   2345  \draw [<->, C] (gui) -- (core) node [midway, above, sloped] (TextNode) {};
   2346  \draw [<->, C] (core) -- (sync) node [midway, above, sloped] (TextNode) {Backup};
   2347  \draw [<->, C] (core) -- (taler) node [midway, above, sloped] (TextNode) {Payment};
   2348  \draw [<->, C] (core) -- (anastasis) node [midway, above, sloped] (TextNode) {Key Escrow};
   2349 \end{tikzpicture}
   2350 \end{center}
   2351 \end{frame}
   2352 
   2353 
   2354 \begin{frame}[t]{Software architecture for the Taler Snack Machine}
   2355   \framesubtitle{Code at \url{https://git.taler.net/taler-mdb}}
   2356 \begin{figure}
   2357   				\centering
   2358   				\includegraphics[width=.9\textwidth]{software_stack}
   2359 				\end{figure}
   2360 \end{frame}
   2361 
   2362 
   2363 
   2364 \section{Integration considerations}
   2365 
   2366 \begin{frame}
   2367   \vfill
   2368   \begin{center}
   2369     {\bf Part VII: Integration considerations}
   2370   \end{center}
   2371   \vfill
   2372 \end{frame}
   2373 
   2374 
   2375 \begin{frame}[fragile]{RFC 8905: \texttt{payto:} Uniform Identifiers for Payments and Accounts}
   2376   \vfill
   2377   Like \texttt{mailto:}, but for bank accounts instead of email accounts!
   2378   \vfill
   2379   \begin{verbatim}
   2380     payto://<PAYMENT-METHOD>/<ACCOUNT-NR>
   2381       ?subject=InvoiceNr42
   2382       &amount=EUR:12.50
   2383   \end{verbatim}
   2384   \vfill
   2385   Default action:  Open app to review and confirm payment.
   2386   \vfill
   2387 \includegraphics[width=0.25\textwidth]{einzahlschein-ch.jpeg}
   2388 \hfill
   2389 \includegraphics[width=0.2\textwidth]{de-ueberweisungsformular.png}
   2390   \vfill
   2391 \end{frame}
   2392 
   2393 
   2394 \begin{frame}[fragile]{Benefits of {\tt payto://}}
   2395   \begin{itemize}
   2396     \item Standardized way to represent financial resources (bank account, bitcoin wallet)
   2397       and payments to them
   2398     \item Useful on the client-side on the Web and for FinTech backend applications
   2399     \item Payment methods (such as IBAN, ACH, Bitcoin) are registered with
   2400           IANA and allow extra options
   2401   \end{itemize}
   2402   \begin{center}
   2403   {\bf Taler wallet can generate payto://-URI for withdraw!}
   2404   \end{center}
   2405 \end{frame}
   2406 
   2407 
   2408 \begin{frame}{Fully Offline Payments {\bf (WiP)}}
   2409 \framesubtitle{\url{https://docs.taler.net/design-documents/030-offline-payments.html}}
   2410 Many central banks today demand offline capabilities for digital payment solutions.
   2411 \vfill
   2412 \noindent
   2413 Three possible approaches:
   2414 \begin{enumerate}
   2415   \item Trust-based offline payments (has counterparty and/or privacy risks)
   2416   \item Full HSM Taler wallet (has hardware costs)
   2417   \item Light-weight HSM balance register
   2418 \end{enumerate}
   2419 \vfill
   2420 \end{frame}
   2421 
   2422 
   2423 \begin{frame}{Partially Offline Payments with GNU Taler}
   2424 We have filed for a patent to address situations where only the merchant is offline:
   2425 \begin{enumerate}
   2426   \item Customer pays by scanning static QR code and entering amount on mobile phone.
   2427   \item Merchant confirms payment by checking simple unique numeric confirmation code.
   2428   \item[$\Rightarrow$] Allows for very simple, cheap and secure merchant on-boarding.
   2429      Makes integration with existing PoS vendors optional.
   2430 \end{enumerate}
   2431 \begin{center}
   2432        {\bf Needed Point-of-sale hardware costs only $\approx$ \EUR{10}}
   2433 \end{center}
   2434 \vfill \pause
   2435 Largely implemented, only UI support missing. Expected to ship in Q1'2023.
   2436 \end{frame}
   2437 
   2438 
   2439 \section{Conclusion}
   2440 
   2441 \begin{frame}
   2442   \vfill
   2443   \begin{center}
   2444     {\bf Part VIII: Conclusion}
   2445   \end{center}
   2446   \vfill
   2447 \end{frame}
   2448 
   2449 
   2450 \begin{frame}{Trust Earned on Multiple Levels}
   2451 \begin{itemize}
   2452 \item Free/Libre software with published external code reviews.
   2453 \item The Swiss National Bank published white paper:
   2454  ``How to issue a CBDC'' on their website based on Taler technology.
   2455 \item Taler endorsed by the Austrian National Bank in their Q2'2022
   2456   publication as potential {\em Digital Euro} solution.
   2457 \item The EU Commission has issued a Seal of Excellence to Taler
   2458   Systems SA
   2459 \item FINMA Switzerland had no objections to launch (planned for Q3'2023)
   2460 \end{itemize}
   2461 \end{frame}
   2462 
   2463 
   2464 \begin{frame}{Features we did NOT discuss in-depth}
   2465   \begin{description}
   2466   \item[{\bf taler-exchange-secmod-cs:}] Clause-Schnorr blind signature support
   2467   \item[{\bf Fakebank:}] high-performance in-memory RTGS emulator
   2468   \item[{\bf libbrandt:}] Escrow-based programmability extensions (e.g. for auctions)
   2469   \item[{\bf twister}:] Man-in-the-middle fault-injection for testing
   2470   \item[{\bf mch}:] Taler for embedded devices ({\bf WiP})
   2471   \end{description}
   2472 \end{frame}
   2473 
   2474 
   2475 \begin{frame}{Feature comparison}
   2476   \begin{center} \small
   2477     \begin{tabular}{l||c|c|c|c|c}
   2478                 & Cash & Bitcoin & Zerocoin & Creditcard & GNU Taler \\ \hline \hline
   2479     Online      &$-$$-$$-$  &   ++    &    ++    &     +      &   +++  \\ \hline
   2480     Offline     & +++  &   $-$$-$    &    $-$$-$    &     +      &   ++  \\ \hline
   2481     Trans. cost & +    & $-$$-$$-$   & $-$$-$$-$  &     $-$      &   ++  \\ \hline
   2482     Speed       & +    & $-$$-$$-$   & $-$$-$$-$  &     o      &   ++  \\ \hline
   2483     Taxation    & $-$    &   $-$$-$    &  $-$$-$$-$   &    +++     &  +++  \\ \hline
   2484     Payer-anon  &  ++  &   o     &    ++    &  $-$$-$$-$   &  +++  \\ \hline
   2485     Payee-anon  & ++   &   o     &    ++    &  $-$$-$$-$    &  $-$$-$$-$ \\ \hline
   2486     Security    &  $-$   &   o     &    o     &    $-$$-$      &  ++   \\ \hline
   2487     Conversion  & +++  &  $-$$-$$-$   & $-$$-$$-$ &    +++     &  +++  \\ \hline
   2488     Libre       &  $-$   &  +++    &    +++   & $-$ $-$ $-$      &  +++  \\
   2489   \end{tabular}
   2490   \end{center}
   2491 \end{frame}
   2492 
   2493 
   2494 \begin{frame}<1-| handout:0>{Development Infrastructure}
   2495   \begin{itemize}
   2496     \item Borg: incremental backup
   2497     \item Buildbot: CI/CD
   2498     \item Davical: Caldav group calendar
   2499     \item Docker: virtualization, packaging
   2500     \item Git/Gitolite: distributed version control
   2501     \item Mailman: public e-mail lists
   2502     \item Mantis: bug tracker
   2503     \item Mattermost: messaging, process management
   2504     \item Sphinx: documentation generation (HTML, PDF, info, man)
   2505     \item Weblate: collaborative AI-supported internationalization
   2506     \end{itemize}
   2507 \end{frame}
   2508 
   2509 
   2510 \begin{frame}<1-| handout:0>{Development Tools}
   2511   \begin{itemize}
   2512     \item Coverity: static analysis (C/C++)
   2513     \item GNU recutils: constant registration
   2514     \item Twister: fault injection
   2515     \item Valgrind: dynamic analysis (C/C++)
   2516     \item zzuf: fuzzing
   2517   \end{itemize}
   2518 \end{frame}
   2519 
   2520 
   2521 \begin{frame}<1-| handout:0>{Cryptographic dependencies}
   2522   \begin{itemize}
   2523     \item libargon2
   2524     \item libgcrypt
   2525     \item libsodium
   2526   \end{itemize}
   2527 \end{frame}
   2528 
   2529 
   2530 \begin{frame}<1-| handout:0>{Additional dependencies}
   2531   \begin{itemize}
   2532     \item libsqlite3
   2533     \item libpq / Postgres
   2534     \item libjansson
   2535     \item libcurl
   2536     \item libunistring
   2537     \item {\bf GNU libmicrohttpd}
   2538     \item {\bf GNUnet}
   2539   \end{itemize}
   2540 \end{frame}
   2541 
   2542 
   2543 \begin{frame}{Summary of Taler Solution}
   2544 
   2545 \begin{enumerate}
   2546 \item {\bf Frictionless one click}, cash-like digital payments \&
   2547 instant
   2548 confirmation for all fiat- and crypto-currencies and for all users,
   2549 unbanked, young and old.
   2550 \item With {\bf income-transparency on the recipient side} is
   2551 crime-preventing \& Taler coins are as secure as cash without
   2552 counterfeits. No ID theft.
   2553 \item {\bf Guaranteed privacy} for spender \& data minimization: payment
   2554 requires/shares no personal information.
   2555 \item {\bf No bank account needed}
   2556 \item Highly efficient in power, processing \& storage, extremely low
   2557 cost \& {\bf highly scalable} to 100’000 transactions/sec.
   2558 \item Economically viable (sub-cent) instant {\bf micro-transactions} for
   2559 e-commerce, Internet of Things, metaverse, machine2machine, $\ldots$
   2560 \end{enumerate}
   2561 \end{frame}
   2562 
   2563 \begin{frame}{Collaboration with BFH \& SBB}
   2564 \framesubtitle{Discussion Proposal}
   2565 {\small
   2566 With an SBB machine, we could:
   2567 \begin{itemize}
   2568 \item Pay for SBB tickets with GNU Taler
   2569 \item[$\Rightarrow$] SBB would receive money in regular bank account
   2570 \item[$\Rightarrow$] Lower costs than with CC / physical cash
   2571 \item[$\Rightarrow$] Customers would pay with privacy
   2572 \item Convert physical cash to digital cash
   2573 \item[$\Rightarrow$] SBB would need Taler ``reserve'' to withdraw from
   2574 \item[$\Rightarrow$] Regulatory requirements (SMS, withdraw limits)
   2575 \item[$\Rightarrow$] SBB would likely want to charge service fees
   2576 \end{itemize}
   2577 Steps:
   2578 \begin{enumerate}
   2579 \item SBB provides BFH with access \& documentation
   2580 \item BFH researchers and students would do integration
   2581 \item Pilot machine could likely be set up around here
   2582 \item SBB would have final decision on any rollout
   2583 \end{enumerate}
   2584 }
   2585 \end{frame}
   2586 
   2587 
   2588 
   2589 \begin{frame}{Do you have any questions?}
   2590   \framesubtitle{\url{https://taler.net/en/bibliography.html}}
   2591   \vfill
   2592 References:
   2593 {\tiny
   2594   \begin{enumerate}
   2595  \item{David Chaum, Christian Grothoff and Thomas Moser.
   2596        {\em How to issue a central bank digital currency}.
   2597        {\bf SNB Working Papers, 2021}.}
   2598  \item{Martin Summer and Hannes Hermanky.
   2599        {\em A digital euro and the future of cash}.
   2600        {\bf Monetary Policy \& The Economy Q1-Q2/22}.}
   2601  \item{Antoine d’Aligny, Emmanuel Benoist, Florian Dold, Christian Grothoff, Özgür Kesim and Martin Schanzenbach.
   2602        {\em Who comes after us? The correct mindset for designing a Central Bank Digital Currency}.
   2603        {\bf SUERF Policy Notes 279/2022}.}
   2604  \item{Florian Dold.
   2605        {\em GNU Taler}.
   2606        {\bf University of Rennes 1, PhD Thesis, 2019}.}
   2607  \item{Christian Grothoff and Alex Pentland.
   2608        {\em Digital cash and privacy: What are the alternatives to Libra?}.
   2609        {\bf MIT Media Lab, 2019}.}
   2610  \item{Jeffrey Burdges, Florian Dold, Christian Grothoff and Marcello Stanisci.
   2611        {\em Enabling Secure Web Payments with GNU Taler}.
   2612        {\bf SPACE 2016}.}
   2613  \item{Özgür Kesim, Christian Grothoff, Florian Dold and Martin Schanzenbach.
   2614        {\em Zero-Knowledge Age Restriction for GNU Taler}.
   2615        {\bf ESORICS, 2022}.}
   2616  \item{Gian Demarmels and Lucien Heuzeveldt.
   2617        {\em Adding Schnorr's Blind Signature in Taler}.
   2618        {\bf BFH, Bachelor's Thesis, 2022}.}
   2619  \item{Marco Boss.
   2620        {\em GNU Taler Scalability}.
   2621        {\bf BFH, Bachelor's Thesis, 2022}.}
   2622 \end{enumerate}
   2623 }
   2624 \end{frame}
   2625 
   2626 \end{document}
   2627 
   2628 
   2629 
   2630 
   2631 \begin{frame}{Taler {\tt /withdraw/sign}}
   2632 % Customer withdrawing coins with blind signatures
   2633 % \bigskip
   2634   \begin{figure}[th]
   2635     \begin{minipage}[b]{0.45\linewidth}
   2636       \begin{center}
   2637         \begin{tikzpicture}[scale = 0.4,
   2638             transform shape,
   2639             msglabel/.style    = { text = Black, yshift = .3cm,
   2640                                    sloped, midway },
   2641             okmsg/.style       = { ->, color = MidnightBlue, thick,
   2642                                    >=stealth },
   2643             rstmsg/.style      = { ->, color = BrickRed, thick,
   2644                                    >=stealth }
   2645           ]
   2646           \node[draw = MidnightBlue,
   2647             fill = CornflowerBlue,
   2648             minimum width = .3cm,
   2649             minimum height = 10cm
   2650           ] (h1) at (-4, 0) {};
   2651           \node[draw = MidnightBlue,
   2652             fill = CornflowerBlue,
   2653             minimum width = .3cm,
   2654             minimum height = 10cm
   2655           ] (h2) at (4, 0) {};
   2656           \node[above = 0cm of h1] {Wallet};
   2657           \node[above = 0cm of h2] {Exchange};
   2658 
   2659           \path[->, color = MidnightBlue, very thick, >=stealth]
   2660             (-5, 4.5) edge
   2661             node[rotate=90, text = Black, yshift = .3cm] {Time}
   2662             (-5, -4.5);
   2663           \path[okmsg, dashed]
   2664              ($(h1.east)+(0, 4.0)+(0, -1.0)$) edge
   2665              node[msglabel] {SEPA(RK,A)}
   2666              ($(h2.west)+(0, 3.5)+(0, -1.0)$);
   2667           \path[okmsg]
   2668             ($(h1.east)+(0, -1.0)$) edge
   2669             node[msglabel] {POST {\tt /withdraw/sign} $S_{RK}(DK, B_b(C))$}
   2670             ($(h2.west)+(0, -1.5)$);
   2671           \path[okmsg]
   2672             ($(h2.west)+(0, -2.0)$) edge
   2673             node[msglabel] {200 OK: $S_{DK}(B_b(C))$)}
   2674             ($(h1.east)+(0, -2.5)$);
   2675           \path[rstmsg]
   2676             ($(h2.west)+(0, -3.5)$) edge
   2677             node[msglabel] {402 PAYMENT REQUIRED: $S_{RK}(DK, B_b(C))$)}
   2678             ($(h1.east)+(0, -4)$);
   2679           \node at (5.3, 0) {};
   2680         \end{tikzpicture}
   2681       \end{center}
   2682       Result: $\langle c, S_{DK}(C) \rangle$.
   2683     \end{minipage}
   2684     \hspace{0.5cm}
   2685     \begin{minipage}[b]{0.45\linewidth}
   2686       \tiny
   2687       \begin{description}
   2688       \item[$A$] Some amount, $A \ge A_{DK}$
   2689       \item[$RK$] Reserve key
   2690       \item[$DK$] Denomination key
   2691       \item[$b$] Blinding factor
   2692       \item[$B_b()$] RSA-FDH blinding % DK supressed
   2693       \item[$C$] Coin public key $C := cG$
   2694       \item[$S_{RK}()$] EdDSA signature
   2695       \item[$S_{DK}()$] RSA-FDH signature
   2696       \end{description}
   2697     \end{minipage}
   2698   \end{figure}
   2699 \end{frame}
   2700 
   2701 
   2702 \begin{frame}[t]{Taler {\tt /deposit}}
   2703 Merchant and exchange see only the public coin $\langle C, S_{DK}(C) \rangle$.
   2704 \bigskip
   2705   \begin{figure}[th]
   2706     \begin{minipage}[b]{0.45\linewidth}
   2707       \begin{center}
   2708         \begin{tikzpicture}[scale = 0.4,
   2709             transform shape,
   2710             msglabel/.style    = { text = Black, yshift = .3cm,
   2711                                    sloped, midway },
   2712             okmsg/.style       = { ->, color = MidnightBlue, thick,
   2713                                    >=stealth },
   2714             rstmsg/.style      = { ->, color = BrickRed, thick,
   2715                                    >=stealth }
   2716           ]
   2717           \node[draw = MidnightBlue,
   2718             fill = CornflowerBlue,
   2719             minimum width = .3cm,
   2720             minimum height = 10cm
   2721           ] (h1) at (-4, 0) {};
   2722           \node[draw = MidnightBlue,
   2723             fill = CornflowerBlue,
   2724             minimum width = .3cm,
   2725             minimum height = 10cm
   2726           ] (h2) at (4, 0) {};
   2727           \node[above = 0cm of h1] {Merchant};
   2728           \node[above = 0cm of h2] {Exchange};
   2729 
   2730           \path[->, color = MidnightBlue, very thick, >=stealth]
   2731             (-5, 4.5) edge
   2732             node[rotate=90, text = Black, yshift = .3cm] {Time}
   2733             (-5, -4.5);
   2734           \path[->, color = MidnightBlue, thick, >=stealth]
   2735             ($(h1.east)+(0,3)$) edge
   2736             node[text = Black, yshift = .3cm, sloped] {POST {\tt /deposit} $S_{DK}(C), S_{c}(D)$}
   2737             ($(h2.west)+(0,2)$);
   2738           \path[->, color = MidnightBlue, thick, >=stealth]
   2739             ($(h2.west)+(0,0.5)$) edge
   2740             node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(S_{c}(D))$}
   2741             ($(h1.east)+(0,-0.5)$);
   2742           \path[rstmsg]
   2743             ($(h2.west)+(0, -2.5)$) edge
   2744             node[msglabel] {409 CONFLICT: $S_{c}(D')$}
   2745             ($(h1.east)+(0, -3.5)$);
   2746           \node at (5.3, 0) {};
   2747         \end{tikzpicture}
   2748       \end{center}
   2749     \end{minipage}
   2750     \hspace{0.5cm}
   2751     \begin{minipage}[b]{0.45\linewidth}
   2752       \tiny
   2753       \begin{description}
   2754       \item[$DK$] Denomination key
   2755       \item[$S_{DK}()$] RSA-FDH signature using $DK$
   2756       \item[$c$] Private coin key, $C := cG$.
   2757       \item[$S_{C}()$] EdDSA signature using $c$
   2758       \item[$D$] Deposit details
   2759       \item[$SK$] Exchange's signing key
   2760       \item[$S_{SK}()$] EdDSA signature using $SK$
   2761       \item[$D'$] Conficting deposit details $D' \not= D$
   2762       \end{description}
   2763     \end{minipage}
   2764   \end{figure}
   2765 \end{frame}
   2766 
   2767 
   2768 \begin{frame}{Taler {\tt /refresh/melt}}
   2769   \begin{figure}[th]
   2770     \begin{minipage}[b]{0.45\linewidth}
   2771       \begin{center}
   2772 	\begin{tikzpicture}[scale = 0.4,
   2773             transform shape,
   2774             msglabel/.style    = { text = Black, yshift = .3cm,
   2775                                    sloped, midway },
   2776             okmsg/.style       = { ->, color = MidnightBlue, thick,
   2777                                    >=stealth },
   2778             rstmsg/.style      = { ->, color = BrickRed, thick,
   2779                                    >=stealth }
   2780 	  ]
   2781 	  \node[draw = MidnightBlue,
   2782 	    fill = CornflowerBlue,
   2783 	    minimum width = .3cm,
   2784 	    minimum height = 10cm
   2785 	  ] (h1) at (-4, 0) {};
   2786 	  \node[draw = MidnightBlue,
   2787 	    fill = CornflowerBlue,
   2788 	    minimum width = .3cm,
   2789 	    minimum height = 10cm
   2790 	  ] (h2) at (4, 0) {};
   2791 	  \node[above = 0cm of h1] {Customer};
   2792 	  \node[above = 0cm of h2] {Exchange};
   2793 
   2794 	  \path[->, color = MidnightBlue, very thick, >=stealth]
   2795 	    (-5, 4.5) edge
   2796 	    node[rotate=90, text = Black, yshift = .3cm] {Time}
   2797 	    (-5, -4.5);
   2798 	  \path[->, color = MidnightBlue, thick, >=stealth]
   2799 	    ($(h1.east)+(0,3)$) edge
   2800 	    node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/melt} $S_{DK}(C), S_c({\cal DK}, {\cal T},{\cal B})$}
   2801 	    ($(h2.west)+(0,2)$);
   2802 	  \path[->, color = MidnightBlue, thick, >=stealth]
   2803 	    ($(h2.west)+(0,0.5)$) edge
   2804 	    node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(H({\cal T}, {\cal B}),\gamma)$}
   2805 	    ($(h1.east)+(0,-0.5)$);
   2806 	  \path[rstmsg]
   2807 	    ($(h2.west)+(0, -2.5)$) edge
   2808 	    node[msglabel] {409 CONFLICT: $S_{C}(X), \ldots$}
   2809 	    ($(h1.east)+(0, -3.5)$);
   2810 	  \node at (5.3, 0) {};
   2811 	\end{tikzpicture}
   2812       \end{center}
   2813     \end{minipage}
   2814     \hspace{0.5cm}
   2815     \begin{minipage}[b]{0.45\linewidth}
   2816       \tiny
   2817       \begin{description}
   2818       \item[$\kappa$] System-wide security parameter, usually 3.
   2819       \\ \smallskip
   2820       \item[$\cal DK$] $:= [DK^{(i)}]_i$ \\ List of denomination keys \\
   2821       $D + \sum_i A_{DK^{(i)}} < A_{DK}$
   2822       \item[$t_j$] Random scalar for $j<\kappa$
   2823       \item[${\cal T}$] $:= [T_j]_\kappa$ where $T_j = t_j G$
   2824       \item[$k_j$] $:= c T_j = t_j C$ is an ECDHE
   2825       \item[$b_j^{(i)}$] $:= KDF_b(k_j,i)$ % blinding factor
   2826       \item[$c_j^{(i)}$] $:= KDF_c(k_j,i)$ % coin secret keys
   2827       \item[$C_j^{(i)}$] $: = c_j^{(i)} G$ % new coin publics % keys
   2828       \item[${\cal B}$] $:= [H( \beta_j )]_\kappa$ where \\
   2829          $\beta_j := \left[ B_{b_j^{(i)}}(C_j^{(i)}) \right]_i$
   2830       \\ \smallskip
   2831       \item[$\gamma$] Random value in $[0,\kappa)$
   2832 %      \\ \smallskip
   2833 %      \item[$X$] Deposit or refresh
   2834       \end{description}
   2835     \end{minipage}
   2836   \end{figure}
   2837 \end{frame}
   2838 
   2839 
   2840 \begin{frame}{Taler {\tt /refresh/reveal}}
   2841   \begin{figure}[th]
   2842     \begin{minipage}[b]{0.45\linewidth}
   2843       \begin{center}
   2844 	\begin{tikzpicture}[scale = 0.4,
   2845             transform shape,
   2846             msglabel/.style    = { text = Black, yshift = .3cm,
   2847                                    sloped, midway },
   2848             okmsg/.style       = { ->, color = MidnightBlue, thick,
   2849                                    >=stealth },
   2850             rstmsg/.style      = { ->, color = BrickRed, thick,
   2851                                    >=stealth }
   2852 	  ]
   2853 	  \node[draw = MidnightBlue,
   2854 	    fill = CornflowerBlue,
   2855 	    minimum width = .3cm,
   2856 	    minimum height = 10cm
   2857 	  ] (h1) at (-4, 0) {};
   2858 	  \node[draw = MidnightBlue,
   2859 	    fill = CornflowerBlue,
   2860 	    minimum width = .3cm,
   2861 	    minimum height = 10cm
   2862 	  ] (h2) at (4, 0) {};
   2863 	  \node[above = 0cm of h1] {Customer};
   2864 	  \node[above = 0cm of h2] {Exchange};
   2865 
   2866 	  \path[->, color = MidnightBlue, very thick, >=stealth]
   2867 	    (-5, 4.5) edge
   2868 	    node[rotate=90, text = Black, yshift = .3cm] {Time}
   2869 	    (-5, -4.5);
   2870 	  \path[->, color = MidnightBlue, thick, >=stealth]
   2871 	    ($(h1.east)+(0,3)$) edge
   2872 	    node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/reveal} $H({\cal T}, {\cal B}), {\tilde{\cal T}}, \beta_\gamma$}
   2873 	    ($(h2.west)+(0,2)$);
   2874 	  \path[->, color = MidnightBlue, thick, >=stealth]
   2875 	    ($(h2.west)+(0,0.5)$) edge
   2876 	    node[text = Black, yshift = .3cm, sloped] {200 OK: $\cal S$}
   2877 	    ($(h1.east)+(0,-0.5)$);
   2878 	  \path[rstmsg]
   2879 	    ($(h2.west)+(0, -2.5)$) edge
   2880 	    node[msglabel] {400 BAD REQUEST: $Z$}
   2881 	    ($(h1.east)+(0, -3.5)$);
   2882 	  \node at (5.3, 0) {};
   2883 	\end{tikzpicture}
   2884       \end{center}
   2885     \end{minipage}
   2886     \hspace{0.5cm}
   2887     \begin{minipage}[b]{0.45\linewidth}
   2888       \tiny
   2889       \begin{description}
   2890       \item[$\cal DK$] $:= [DK^{(i)}]_i$
   2891       \item[$t_j$] .. \\ \smallskip
   2892 
   2893       \item[$\tilde{\cal T}$] $:= [t_j | j \in \kappa, j \neq \gamma]$ \\ \smallskip
   2894 
   2895       \item[$k_\gamma$] $:= c T_\gamma = t_\gamma C$
   2896       \item[$b_\gamma^{(i)}$] $:= KDF_b(k_\gamma,i)$
   2897       \item[$c_\gamma^{(i)}$] $:= KDF_c(k_\gamma,i)$
   2898       \item[$C_\gamma^{(i)}$] $: = c_\gamma^{(i)} G$
   2899 
   2900       \item[$B_\gamma^{(i)}$] $:= B_{b_\gamma^{(i)}}(C_\gamma^{(i)})$
   2901       \item[$\beta_\gamma$] $:= \big[ B_\gamma^{(i)} \big]_i$
   2902       \item[$\cal S$] $:= \left[ S_{DK^{(i)}}( B_\gamma^{(i)} ) \right]_i$ \\ \smallskip
   2903 
   2904       \item[$Z$] Cut-and-choose missmatch information
   2905       \end{description}
   2906     \end{minipage}
   2907   \end{figure}
   2908 \end{frame}
   2909 
   2910 
   2911 \begin{frame}{Taler {\tt /refresh/link}}
   2912   \begin{figure}[th]
   2913     \begin{minipage}[b]{0.45\linewidth}
   2914       \begin{center}
   2915 	\begin{tikzpicture}[scale = 0.4,
   2916             transform shape,
   2917             msglabel/.style    = { text = Black, yshift = .3cm,
   2918                                    sloped, midway },
   2919             okmsg/.style       = { ->, color = MidnightBlue, thick,
   2920                                    >=stealth },
   2921             rstmsg/.style      = { ->, color = BrickRed, thick,
   2922                                    >=stealth }
   2923 	  ]
   2924 	  \node[draw = MidnightBlue,
   2925 	    fill = CornflowerBlue,
   2926 	    minimum width = .3cm,
   2927 	    minimum height = 10cm
   2928 	  ] (h1) at (-4, 0) {};
   2929 	  \node[draw = MidnightBlue,
   2930 	    fill = CornflowerBlue,
   2931 	    minimum width = .3cm,
   2932 	    minimum height = 10cm
   2933 	  ] (h2) at (4, 0) {};
   2934 	  \node[above = 0cm of h1] {Customer};
   2935 	  \node[above = 0cm of h2] {Exchagne};
   2936 
   2937 	  \path[->, color = MidnightBlue, very thick, >=stealth]
   2938 	    (-5, 4.5) edge
   2939 	    node[rotate=90, text = Black, yshift = .3cm] {Time}
   2940 	    (-5, -4.5);
   2941 	  \path[->, color = MidnightBlue, thick, >=stealth]
   2942 	    ($(h1.east)+(0,3)$) edge
   2943 	    node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/link} $C$}
   2944 	    ($(h2.west)+(0,2)$);
   2945 	  \path[->, color = MidnightBlue, thick, >=stealth]
   2946 	    ($(h2.west)+(0,0.5)$) edge
   2947 	    node[text = Black, yshift = .3cm, sloped] {200 OK: $T_\gamma$}
   2948 	    ($(h1.east)+(0,-0.5)$);
   2949 	  \path[rstmsg]
   2950 	    ($(h2.west)+(0, -2.5)$) edge
   2951 	    node[msglabel] {404 NOT FOUND}
   2952 	    ($(h1.east)+(0, -3.5)$);
   2953 	  \node at (5.3, 0) {};
   2954 	\end{tikzpicture}
   2955       \end{center}
   2956     \end{minipage}
   2957     \hspace{0.5cm}
   2958     \begin{minipage}[b]{0.45\linewidth}
   2959       \tiny
   2960       \begin{description}
   2961       \item[$C$] Old coind public key \\ \smallskip
   2962       \item[$T_\gamma$] Linkage data $\cal L$ at $\gamma$
   2963       \end{description}
   2964     \end{minipage}
   2965   \end{figure}
   2966 \end{frame}
   2967 
   2968 
   2969 \begin{frame}{Operational security}
   2970   \begin{center}
   2971     \resizebox{\textwidth}{!}{
   2972 \begin{tikzpicture}[
   2973   font=\sffamily,
   2974   every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm},
   2975   source/.style={draw,thick,rounded corners,fill=green!20,inner sep=.3cm},
   2976   process/.style={draw,thick,circle,fill=blue!20},
   2977   sink/.style={source,fill=green!20},
   2978   datastore/.style={draw,very thick,shape=datastore,inner sep=.3cm},
   2979   dots/.style={gray,scale=2},
   2980   to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize},
   2981   every node/.style={align=center}]
   2982 
   2983   % Position the nodes using a matrix layout
   2984   \matrix{
   2985     \node[source] (wallet) {Wallet};
   2986       \& \node[process] (browser) {Browser};
   2987       \& \node[process] (shop) {Web shop};
   2988       \& \node[sink] (backend) {Taler backend}; \\
   2989   };
   2990 
   2991   % Draw the arrows between the nodes and label them.
   2992   \draw[to] (browser) to[bend right=50] node[midway,above] {(4) signed contract}
   2993       node[midway,below] {(signal)} (wallet);
   2994   \draw[to] (wallet) to[bend right=50] node[midway,above] {(signal)}
   2995       node[midway,below] {(5) signed coins} (browser);
   2996   \draw[<->] (browser) -- node[midway,above] {(3,6) custom}
   2997       node[midway,below] {(HTTPS)} (shop);
   2998   \draw[to] (shop) to[bend right=50] node[midway,above] {(HTTPS)}
   2999       node[midway,below] {(1) proposed contract / (7) signed coins} (backend);
   3000   \draw[to] (backend) to[bend right=50] node[midway,above] {(2) signed contract / (8) confirmation}
   3001       node[midway,below] {(HTTPS)} (shop);
   3002 \end{tikzpicture}
   3003 }
   3004 \end{center}
   3005 \end{frame}
   3006 
   3007 
   3008 \begin{frame}{Use Cases: Refugee Camps}
   3009   Today:
   3010   \begin{itemize}
   3011   \item Non-bankable
   3012   \item Direct distribution of goods to population
   3013   \item Limited economic activity in camps
   3014   \item High level of economic dependence
   3015   \end{itemize}\vfill\pause
   3016   With GNU Taler:
   3017   \begin{itemize}
   3018   \item Local currency issued as basic income backed by aid
   3019   \item Taxation possible based on economic status
   3020   \item Local governance enabled by local taxes
   3021   \item Increased economic independence and political participation
   3022   \end{itemize}
   3023 \end{frame}
   3024 
   3025 
   3026 \begin{frame}{Use Case: Anti-Spam}
   3027   \framesubtitle{Background: \url{https://pep.security/}}
   3028   Today, p$\equiv$p provides authenticated encryption for e-mail:
   3029   \begin{itemize}
   3030     \item Free software
   3031     \item Easy to use opportunistic encryption
   3032     \item Available for Outlook, Android, Enigmail
   3033     \item Spies \& spam filters can no longer inspect content
   3034   \end{itemize}\vfill\pause
   3035   With GNU Taler:
   3036   \begin{itemize}
   3037     \item Peer-to-peer payments via e-mail
   3038     \item If unsolicited sender, hide messages from user \&
   3039           automatically request payment from sender
   3040     \item Sender can attach payment to be moved to inbox
   3041     \item Receiver may grant refund to sender
   3042   \end{itemize}
   3043 \end{frame}