2023-bdf.tex (34654B)
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{pgf-umlsd} 21 \usepackage{tikz,eurosym,calc} 22 \usetikzlibrary{tikzmark} 23 \usetikzlibrary{shapes,arrows,arrows.meta} 24 \usetikzlibrary{positioning,fit,patterns} 25 \usetikzlibrary{calc} 26 27 % CSS 28 \lstdefinelanguage{CSS}{ 29 basicstyle=\ttfamily\scriptsize, 30 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}, 31 sensitive=true, 32 morecomment=[l]{//}, 33 morecomment=[s]{/*}{*/}, 34 morestring=[b]', 35 morestring=[b]", 36 alsoletter={:}, 37 alsodigit={-} 38 } 39 40 % JavaScript 41 \lstdefinelanguage{JavaScript}{ 42 basicstyle=\ttfamily\scriptsize, 43 morekeywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break}, 44 morecomment=[s]{/*}{*/}, 45 morecomment=[l]//, 46 morestring=[b]", 47 morestring=[b]' 48 } 49 50 \lstdefinelanguage{HTML5}{ 51 basicstyle=\ttfamily\scriptsize, 52 language=html, 53 sensitive=true, 54 alsoletter={<>=-}, 55 morecomment=[s]{<!-}{-->}, 56 tag=[s], 57 otherkeywords={ 58 % General 59 >, 60 % Standard tags 61 <!DOCTYPE, 62 </html, <html, <head, <title, </title, <style, </style, <link, </head, <meta, />, 63 % body 64 </body, <body, 65 % Divs 66 </div, <div, </div>, 67 % Paragraphs 68 </p, <p, </p>, 69 % scripts 70 </script, <script, 71 % More tags... 72 <canvas, /canvas>, <svg, <rect, <animateTransform, </rect>, </svg>, <video, <source, <iframe, </iframe>, </video>, <image, </image> 73 }, 74 ndkeywords={ 75 % General 76 =, 77 % HTML attributes 78 charset=, src=, id=, width=, height=, style=, type=, rel=, href=, 79 % SVG attributes 80 fill=, attributeName=, begin=, dur=, from=, to=, poster=, controls=, x=, y=, repeatCount=, xlink:href=, 81 % CSS properties 82 margin:, padding:, background-image:, border:, top:, left:, position:, width:, height:, 83 % CSS3 properties 84 transform:, -moz-transform:, -webkit-transform:, 85 animation:, -webkit-animation:, 86 transition:, transition-duration:, transition-property:, transition-timing-function:, 87 } 88 } 89 90 \lstdefinelanguage{JavaScript}{ 91 basicstyle=\ttfamily\scriptsize, 92 keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, for}, 93 keywordstyle=\color{blue}\bfseries, 94 ndkeywords={class, export, boolean, throw, implements, import, this}, 95 ndkeywordstyle=\color{darkgray}\bfseries, 96 identifierstyle=\color{black}, 97 sensitive=false, 98 comment=[l]{//}, 99 morecomment=[s]{/*}{*/}, 100 commentstyle=\color{purple}\ttfamily, 101 stringstyle=\color{red}\ttfamily, 102 morestring=[b]', 103 morestring=[b]" 104 } 105 106 \def\checkmark{\tikz\fill[scale=0.4](0,.35) -- (.25,0) -- (1,.7) -- (.25,.15) -- cycle;} 107 108 109 \setbeamersize{description width=1em} 110 111 \definecolor{blue}{rgb}{0,0,0.7} 112 \newcommand{\orange}[1]{{\color{orange}#1}} 113 \newcommand{\blue}[1]{{\color{blue}#1}} 114 \newcommand{\red}[1]{{\color{red}#1}} 115 \newcommand{\Guardian}{\mathcal{G}} 116 \newcommand{\Child}{\mathcal{C}} 117 \newcommand{\Customer}{\mathcal{C}} 118 \newcommand{\Merchant}{\mathcal{M}} 119 \newcommand{\Exchange}{\mathcal{E}} 120 121 \newcommand{\Commit}{\mathsf{Commit}} 122 \newcommand{\Attest}{\mathsf{Attest}} 123 \newcommand{\Verify}{\mathsf{Verify}} 124 \newcommand{\Derive}{\mathsf{Derive}} 125 \newcommand{\DeriveCompare}{\mathsf{DeriveCompare_\kappa}} 126 \newcommand{\Compare}{\mathsf{Compare}} 127 \newcommand{\AgeVer}{\mathsf{AgeVer}} 128 129 \newcommand{\HashF}{\mathsf{H}} 130 \newcommand{\Hash}{\mathsf{H}} 131 \newcommand{\Block}{\mathbb{B}} 132 \newcommand{\Pub}{\mathsf{Pub}} 133 \newcommand{\Sign}{\mathsf{Sig}} 134 \newcommand{\Ver}{\mathsf{Ver}} 135 \newcommand{\Encoding}{\mathsf{Encoding}} 136 \newcommand{\ECDSA}{\mathsf{ECDSA}} 137 \newcommand{\Null}{\mathcal{O}} 138 \newcommand{\EC}{\mathrm{ec}} 139 \newcommand{\Curve}{\mathsf{Curve25519}} 140 \newcommand{\SHA}{\mathsf{SHA256}} 141 \newcommand{\SHAF}{\mathsf{SHA252}} 142 \newcommand{\FDH}{\mathsf{FDH}} 143 144 \newcommand{\negl}{\epsilon} 145 146 \newcommand{\rand}{\mathsf{rand}} 147 \newcommand{\age}{\mathsf{a}} 148 \newcommand{\Age}{\mathsf{M}} 149 \newcommand{\bage}{\mathsf{b}} 150 \newcommand{\minage}{\mathsf{m}} 151 \newcommand{\attest}{\mathsf{T}} 152 \newcommand{\commitment}{\mathsf{Q}} 153 \newcommand{\pruf}{\mathsf{P}} 154 \newcommand{\Vcommitment}{\vec{\mathsf{Q}}} 155 \newcommand{\Vpruf}{\vec{\mathsf{P}}} 156 \newcommand{\blinding}{\beta} 157 158 \newcommand{\ZN}{\mathbb{Z}_N} 159 \newcommand{\Z}{\mathbb{Z}} 160 \newcommand{\N}{\mathbb{N}} 161 \newcommand{\A}{\mathbb{A}} 162 \newcommand{\E}{\mathbb{E}} 163 \newcommand{\F}{\mathbb{F}} 164 \newcommand{\seck}{\mathsf{s}} 165 \newcommand{\pubk}{\mathsf{P}} 166 \renewcommand{\H}{\mathbb{H}} 167 \newcommand{\K}{\mathbb{K}} 168 \newcommand{\Proofs}{\mathbb{P}} 169 \newcommand{\Commitments}{\mathbb{O}} 170 \newcommand{\Attests}{\mathbb{T}} 171 \newcommand{\Blindings}{\mathbb{B}} 172 \newcommand{\Nil}{\perp} 173 174 \newcommand{\p}{\mathsf{p}} 175 \newcommand{\com}{\mathsf{com}} 176 \newcommand{\prf}{\mathsf{prf}} 177 178 \newcommand{\Adv}{\mathcal{A}} 179 \newcommand{\PPT}{\mathfrak{A}} 180 \newcommand{\Probability}{\mathrm{Pr}} 181 \newcommand{\Algorithm}{f} 182 \renewcommand{\Game}[1]{G_\Adv^\mathsf{#1}} 183 184 \DeclareMathOperator{\Image}{Im} 185 \DeclareMathOperator{\Mod}{mod} 186 187 \newcommand{\Encode}[1]{\overbracket[0.5pt][2pt]{\,#1\,}} 188 \newcommand{\Decode}[1]{\underbracket[0.5pt][3pt]{\,#1\,}} 189 \newcommand{\FDHg}[1]{[#1]_g\,} 190 \newcommand{\logg}{{\breve{g}}} 191 192 193 \newcommand{\drawfrom}{\xleftarrow{\$}} 194 \newcommand\Exists{% 195 \mathop{\lower0.75ex\hbox{\ensuremath{% 196 \mathlarger{\mathlarger{\mathlarger{\mathlarger{\exists}}}}}}}% 197 \limits} 198 199 \newcommand\Forall{% 200 \mathop{\lower0.75ex\hbox{\ensuremath{% 201 \mathlarger{\mathlarger{\mathlarger{\mathlarger{\forall}}}}}}}% 202 \limits} 203 204 205 \title{GNU Taler} 206 %\subtitle{} 207 208 \setbeamertemplate{navigation symbols}{\includegraphics[width=1cm]{inria.pdf} \includegraphics[width=1cm]{bfh.png} \includegraphics[width=1.6cm]{fub.pdf} \includegraphics[width=0.4cm]{ashoka.png} \includegraphics[width=0.4cm]{gnu.png} \includegraphics[width=1cm]{taler-logo-2021-inkscape.pdf} \hfill} 209 %\setbeamercovered{transparent=1} 210 211 % Page numbers 212 \addtobeamertemplate{navigation symbols}{}{% 213 \usebeamerfont{footline}% 214 \usebeamercolor[fg]{footline}% 215 \hspace{1em}% 216 \insertframenumber 217 } 218 219 \author[E. Benoist, F. Dold, C. Grothoff, M. Walrafen]{{\bf E. Benoist, F. Dold, C. Grothoff, M. Walrafen}} 220 \date{\today} 221 \institute{Taler Systems SA \& BFH \& The GNU Project} 222 223 224 \begin{document} 225 226 \justifying 227 228 \begin{frame} 229 \begin{center} 230 \LARGE {\bf GNU} \\ 231 \vspace{0.3cm} 232 % \includegraphics[width=0.66\textwidth]{logo-2017-fr.pdf} 233 \includegraphics[width=0.66\textwidth]{taler-logo-2021-inkscape.pdf} 234 \vfill 235 \end{center} 236 \begin{textblock*}{6cm}(.5cm,7.7cm) % {block width} (coords) 237 {\Large {\bf \href{https://taler.net/}{taler.net}} \\ 238 \href{https://twitter.com/taler}{taler@twitter} \\ 239 \href{https://taler-systems.com/}{taler-systems.com}} 240 \end{textblock*} 241 242 % Substitute based on who is giving the talk! 243 \begin{textblock*}{8cm}(4.7cm,6.7cm) % {block width} (coords) 244 {\hfill {{\bf Dr. Emmanuel Benoist} \\ 245 \hfill {\bf Dr. Florian Dold} \\ 246 \hfill {\bf Dr. Christian Grothoff} \\ 247 \hfill {\bf Marie Walrafen} \\ } 248 \hfill \{benoist,dold,grothoff,walrafen\}@taler.net } 249 \end{textblock*} 250 251 \end{frame} 252 253 \begin{frame}{Agenda} 254 \tableofcontents 255 \end{frame} 256 257 \section{Introduction} 258 259 \begin{frame} 260 \vfill 261 \begin{center} 262 {\bf Part I: Introduction} 263 \end{center} 264 \vfill 265 \end{frame} 266 267 268 \section{What is Taler?} 269 \begin{frame}{What is Taler?} 270 \framesubtitle{\url{https://taler.net/en/features.html}} \noindent 271 Taler is 272 \vfill 273 \begin{itemize} 274 \item a Free/Libre software \emph{payment system} infrastructure project 275 \item ... with a surrounding software ecosystem 276 \item ... and a company (Taler Systems S.A.) and community that wants to deploy it 277 as widely as possible. 278 \end{itemize} 279 \vfill 280 \noindent 281 However, Taler is 282 \begin{itemize} 283 \item \emph{not} a currency 284 \item \emph{not} a long-term store of value 285 \item \emph{not} a network or instance of a system 286 \item \emph{not} decentralized 287 % \item \emph{not} based on proof-of-work or proof-of-stake 288 \item combinable with a DLT back-end if requested 289 \end{itemize} 290 \end{frame} 291 292 293 \begin{frame}{Design principles} 294 \framesubtitle{https://taler.net/en/principles.html} 295 GNU Taler must ... 296 \begin{enumerate} 297 \item {... be implemented as {\bf free software} (but {\em available} under a commercial license).} 298 \item {... protect the {\bf privacy of buyers}.} 299 \item {... must enable the state to {\bf tax income} and crack down on 300 illegal business activities.} 301 \item {... prevent payment fraud.} 302 \item {... only {\bf disclose the minimal amount of information 303 necessary}.} 304 \item {... be usable.} 305 \item {... be efficient.} 306 \item {... avoid single points of failure.} 307 \item {... foster {\bf competition} in associated services.} 308 \end{enumerate} 309 \end{frame} 310 311 312 \begin{frame} 313 \frametitle{Taler Overview} 314 \begin{center} 315 \begin{tikzpicture} 316 \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em]; 317 \node (origin) at (0,0) {}; 318 \node (exchange) [def,above=of origin,draw]{Exchange}; 319 \node (customer) [def, draw, below left=of origin] {Customer}; 320 \node (merchant) [def, draw, below right=of origin] {Merchant}; 321 \node (auditor) [def, draw, above right=of origin]{Auditor}; 322 % \node (regulator) [def, draw, above=of auditor]{CSSF}; 323 324 \tikzstyle{C} = [color=black, line width=1pt] 325 326 \draw [<-, C] (customer) -- (exchange) node [midway, above, sloped] (TextNode) {withdraw coins}; 327 \draw [<-, C] (exchange) -- (merchant) node [midway, above, sloped] (TextNode) {deposit coins}; 328 \draw [<-, C] (merchant) -- (customer) node [midway, above, sloped] (TextNode) {spend coins}; 329 \draw [<-, C] (exchange) -- (auditor) node [midway, above, sloped] (TextNode) {verify}; 330 % \draw [<-, C] (regulator) -- (auditor) node [midway, above, sloped] (TextNode) {report}; 331 332 \end{tikzpicture} 333 \end{center} 334 \end{frame} 335 336 337 \begin{frame}{Architecture of Taler} 338 \begin{center} 339 \includegraphics[width=1\textwidth]{operations.png} 340 \end{center} 341 \end{frame} 342 343 344 \begin{frame}{Consumer Impact of Taler} 345 \begin{itemize} 346 \item {\bf Convenient:} pay with one click instantly --– in Euro, 347 Dollar, Swiss Franc or Bitcoin 348 \item {\bf Friction-free security:} Payments do not require sign-up, 349 login or multi-factor authentication 350 \item {\bf Privacy-preserving:} payment requires/shares no personal information 351 \item {\bf Bank account:} not required 352 \end{itemize} 353 \end{frame} 354 355 356 \begin{frame}{Merchant Impact of Taler} 357 \begin{itemize} 358 \item {\bf Instant clearance:} one-click transactions and instant clearance at par 359 \item {\bf Easy \& compliant:} GDPR \& PCI-DSS compliance-free and without any effort 360 \item {\bf Major profit increase:} efficient protocol $+$ no fraud $=$ extremely low costs 361 \item {\bf 1-click checkout:} without Amazon and without false 362 positives in fraud detection 363 \end{itemize} 364 \end{frame} 365 366 367 \begin{frame}{Taler: Unique Regulatory Features for Central Banks} 368 \framesubtitle{\url{https://www.snb.ch/en/mmr/papers/id/working_paper_2021_03}} 369 \begin{itemize} 370 \item Central bank issues digital coins equivalent to issuing cash \\ 371 $\Rightarrow$ monetary policy remains under CB control 372 \item Architecture with consumer accounts at commercial banks \\ 373 $\Rightarrow$ no competition for commercial banking (S\&L) \\ 374 $\Rightarrow$ CB does not have to manage KYC, customer support 375 \item Withdrawal limits and denomination expiration \\ 376 $\Rightarrow$ protects against bank runs and hoarding 377 \item Income transparency and possibility to set fees \\ 378 $\Rightarrow$ additional insights into economy and new policy options 379 \item Revocation protocols and loss limitations \\ 380 $\Rightarrow$ exit strategy and handles catastrophic security incidents 381 \item Privacy by cryptographic design not organizational compliance \\ 382 $\Rightarrow$ CB cannot be forced to facilitate mass-surveillance 383 \end{itemize} 384 \end{frame} 385 386 387 \begin{frame}{Usability of Taler} 388 \vfill 389 \begin{center} 390 \url{https://demo.taler.net/} 391 \end{center} 392 \begin{enumerate} 393 \item Install browser extension. 394 \item Visit the {\tt bank.demo.taler.net} to withdraw coins. 395 \item Visit the {\tt shop.demo.taler.net} to spend coins. 396 \end{enumerate} 397 \vfill 398 \end{frame} 399 400 401 \section{Component Zoo} 402 403 \begin{frame} 404 \vfill 405 \begin{center} 406 {\bf Part II: Component Zoo} 407 \end{center} 408 \vfill 409 \end{frame} 410 411 412 \begin{frame}{The Taler Software Ecosystem: Overview} 413 \framesubtitle{\url{https://taler.net/en/docs.html}} 414 Taler is based on modular components that work together to provide a 415 complete payment system: 416 \vfill 417 \begin{itemize} 418 \item {\bf Exchange:} Service provider for digital cash 419 \begin{itemize} 420 \item Core exchange software (cryptography, database) 421 \item Air-gapped key management, real-time {\bf auditing} 422 \item {\bf LibEuFin}: Modular integration with banking systems 423 \end{itemize} 424 \item {\bf Merchant:} Integration service for existing businesses 425 \begin{itemize} 426 \item Core merchant backend software (cryptography, database) 427 \item {\bf Back-office interface} for staff 428 \item {\bf Frontend integration} (E-commerce, Point-of-sale) 429 \end{itemize} 430 \item {\bf Wallet:} Consumer-controlled applications for e-cash 431 \begin{itemize} 432 \item Multi-platform wallet software (for browsers \& mobile phones) 433 \item Wallet backup storage providers ({\bf sync}) 434 \item {\bf Anastasis}: Recovery of lost wallets based on secret splitting 435 \end{itemize} 436 \end{itemize} 437 \end{frame} 438 439 440 \begin{frame}{Taler Exchange} 441 The {\bf Exchange} is the core logic of the payment system. 442 443 \begin{itemize} 444 \item One exchange at minimum must be operated per currency 445 \item Offers a REST API for merchants and customers 446 \item Uses several helper processes for configuration and to 447 interact with RTGS and cryptography 448 \item KYC support via OAuth 2.0, KycAID or Persona APIs 449 \item Implemented in C on top of GNU libmicrohttpd 450 \end{itemize} 451 Scalability: 28'500 transactions/second measured % in BS-thesis 452 in 2022 using two servers on Grid5000. Likely several times 453 higher today (but we did not re-measure recently). 454 \end{frame} 455 456 457 \begin{frame}{Taler Merchant} 458 The {\bf Merchant} is the software run by merchants to accept\\ 459 GNU Taler payments. 460 461 \begin{minipage}{6cm} 462 \begin{itemize} 463 \item REST API for integration with e-commerce 464 \item SPA provides Web interface for administration 465 \item Features include: 466 \begin{itemize} 467 \item Multi-tenant support 468 \item Refunds 469 \item Tipping (Website pays visitor) 470 \item Webhooks 471 \item Inventory management (optional) 472 \end{itemize} 473 \item Implemented in C on top of GNU libmicrohttpd 474 \end{itemize} 475 \end{minipage} 476 \begin{minipage}{5cm} 477 \includegraphics[width=5cm]{screenshots/merchant-spa-settings} 478 \end{minipage} 479 \end{frame} 480 481 482 \begin{frame}{Taler Wallet} 483 The {\bf Wallet} is the software run by consumers to store 484 their digital cash and authorize transactions. 485 486 \begin{minipage}{8cm} 487 \begin{itemize} 488 \item {\bf wallet-core} is the logic shared by all interfaces 489 \item Applications exist for Android, F-Droid, 490 WebExtension (Chrome, Chromium, Firefox, etc.), iOS ({\bf WiP}) 491 \item Features include: 492 \begin{itemize} 493 \item Multi-currency support 494 \item Wallet-to-wallet payments (NFC or QR code) 495 \item CRDT-like data model 496 \end{itemize} 497 \item {\bf wallet-core} implemented in TypeScript 498 \end{itemize} 499 Can be integrated into other Apps if desired. 500 \end{minipage} 501 \begin{minipage}{3cm} 502 \includegraphics[width=3cm]{screenshots/Screenshot_20230225-103520.png} 503 \end{minipage} 504 \end{frame} 505 506 507 \begin{frame}{Taler Auditor} 508 The {\bf Auditor} is the software run by an independent auditor 509 to validate the operation of an Exchange. 510 511 \begin{itemize} 512 \item REST API for additional report inputs by merchants (optional) 513 \item Secure database replication logic 514 \item Implemented in C on top of GNU libmicrohttpd 515 \end{itemize} 516 \end{frame} 517 518 519 \begin{frame}{Pretix Taler payment plugin} 520 \begin{center} 521 \includegraphics[width=0.5\textwidth]{screenshots/pretix.png} 522 \end{center} 523 524 Pretix is a ticket sales system. 525 526 \begin{itemize} 527 \item Pretix payment plugin enables payments via GNU Taler 528 \item Developed by Pretix.eu for \EUR{3,000} on behalf of Taler Systems SA 529 \end{itemize} 530 \end{frame} 531 532 533 \begin{frame}{WooCommerce Taler payment plugin} 534 \begin{minipage}{6cm} 535 \begin{itemize} 536 \item WooCommerce is an e-commerce plugin for WordPress. 537 \item WooCommerce payment plugin enables payments via GNU Taler 538 \item Features include: 539 \begin{itemize} 540 \item Trivial configuration 541 \item Support for refunds 542 \item Full internationalization 543 \end{itemize} 544 \item WooCommerce and its plugins are implemented in PHP 545 \end{itemize} 546 \end{minipage} 547 \begin{minipage}{5cm} 548 \includegraphics[width=4cm]{screenshots/woocommerce-cart.png} 549 \includegraphics[width=4cm]{screenshots/woocommerce-settings.png} 550 \end{minipage} 551 \end{frame} 552 553 554 \begin{frame}{Point-of-Sale App for Android} 555 556 \begin{minipage}{7cm} 557 \begin{itemize} 558 \item Allows merchant to generate orders against Taler backend 559 and display QR code to enable customer to pay in person 560 \item Patterned after ViewTouch restaurant UI 561 \item Features include: 562 \begin{itemize} 563 \item Internet-based configuration 564 \item Products sorted by categories 565 \item Easy undo of every operation 566 \item Manages multiple concurrent orders 567 \end{itemize} 568 \item The Point-of-Sale App is implemented in Kotlin 569 \end{itemize} 570 \end{minipage} 571 \begin{minipage}{4cm} 572 \includegraphics[width=4cm]{screenshots/Screenshot_20230224-194112.jpg} 573 \includegraphics[width=4cm]{screenshots/Screenshot_20230224-194119.jpg} 574 \includegraphics[width=4cm]{screenshots/Screenshot_20230224-195348.jpg} 575 \end{minipage} 576 \end{frame} 577 578 579 \begin{frame}[c]{The Taler Snack Machine\footnote{by M. Boss and D. Hofer}} 580 \framesubtitle{Integration of a MDB/ICP to Taler gateway.\\Implementation of a NFC or QR-Code to Taler wallet interface.} 581 \vfill 582 \begin{figure} 583 \centering 584 \includegraphics[width=1.0\textwidth]{design} 585 \end{figure} 586 \end{frame} 587 588 \begin{frame}[c]{User story: Dr. Thomas Moser (SNB)} 589 \begin{figure} 590 \includegraphics[width=0.45\textwidth]{moser1.jpeg} 591 \includegraphics[width=0.45\textwidth]{moser2.jpeg} 592 \includegraphics[width=0.45\textwidth]{moser3.jpeg} 593 \includegraphics[width=0.45\textwidth]{moser4.jpeg} 594 \end{figure} 595 \end{frame} 596 597 598 \begin{frame}{LibEuFin} 599 LibEuFin is a standalone project that provides adapters to bank account 600 access APIs. 601 602 \begin{itemize} 603 \item LibEuFin provides both a generic access layer and an 604 implementation of the Wire Gateway for the exchange 605 \item Supports EBICS 2.5 606 \item other APIs such as FinTS or PSD2-style XS2A APIs can be added 607 without requiring changes to the Exchange 608 \item tested with German bank GLS business account and real Euros 609 \end{itemize} 610 \vfill 611 \begin{itemize} 612 \item \texttt{libeufin-nexus} is the main service 613 \item Almost all configuration (except DB credentials) 614 is stored in the database and managed via a RESTful HTTP API 615 \item \texttt{libeufin-sandbox} implements a toy EBICS host for protocol 616 testing 617 \item \texttt{libeufin-cli} is client for the HTTP API (only implements a subset 618 of available functionality) 619 \end{itemize} 620 \end{frame} 621 622 623 \begin{frame}{Cashier App for Android} 624 \begin{minipage}{4cm} 625 \begin{itemize} 626 \item Enables BFH staff to convert cash to e-cash 627 \item Staff has special bank accounts with limited funds 628 \item Students can pay staff in cash to receive e-cash 629 \item The Cashier App is implemented in Kotlin 630 \end{itemize} 631 \end{minipage} 632 \begin{minipage}{3cm} 633 \includegraphics[width=3cm]{screenshots/Screenshot_20230225-103315.png} 634 \end{minipage} 635 \begin{minipage}{3cm} 636 \includegraphics[width=3cm]{screenshots/Screenshot_20230225-103325.png} 637 \end{minipage} 638 \end{frame} 639 640 641 \begin{frame}{Depolymerization} 642 Depolymerization is a bridge between GNU Taler and blockchains, 643 making Taler a layer 2 system for crypto-currencies (like Lightning). 644 645 \begin{itemize} 646 \item Currently implemented for Bitcoin and Ethereum 647 crypto-currencies, with the DLTs as the ``RTGS'' 648 \item Provides same API to Exchange as LibEuFin 649 % \item Transaction rate and speed limited by the underlying blockchain 650 \item Implemented in Rust 651 \end{itemize} 652 \begin{center} 653 \url{https://bitcoin.ice.bfh.ch/} 654 \end{center} 655 \end{frame} 656 657 658 \begin{frame}{TalDir (WiP)} 659 TalDir is an extension to the existing 660 peer-to-peer payment functionality. 661 662 \begin{itemize} 663 \item Registry to associate wallets with network addresses 664 \item Extensible to different types of network services: 665 \begin{itemize} 666 \item E-mail 667 \item SMS 668 \item Twitter 669 \item ... 670 \end{itemize} 671 \item Send payments or invoices to wallets associated with network address 672 \item Will {\bf not} require sending wallet to use same network service 673 \end{itemize} 674 \end{frame} 675 676 677 \section{Basic Cryptography} 678 679 \begin{frame} 680 \vfill 681 \begin{center} 682 {\bf Part III: Basic Cryptography} 683 \end{center} 684 \vfill 685 \end{frame} 686 687 688 \begin{frame}{How does it work?} 689 We use a few well established and tested constructions: 690 \begin{itemize} 691 \item Cryptographic hash function (1989) 692 \item Blind signature (1983) 693 \item Schnorr signature (1989) 694 \item Diffie-Hellman key exchange (1976) 695 \item Cut-and-choose zero-knowledge proof (1985) 696 \end{itemize} 697 But of course we use modern instantiations. 698 \end{frame} 699 700 701 \begin{frame}{Withdrawing coins on the Web} 702 \begin{center} 703 \includegraphics[height=0.9\textheight]{figs/taler-withdraw.pdf} 704 \end{center} 705 \end{frame} 706 707 708 \begin{frame}{Payment processing with Taler} 709 \begin{center} 710 \includegraphics[height=0.9\textheight]{figs/taler-pay.pdf} 711 \end{center} 712 \end{frame} 713 714 715 \begin{frame}{Giving change} 716 It would be inefficient to pay EUR 100 with 1 cent coins! 717 \begin{itemize} 718 \item Denomination key represents value of a coin. 719 \item Exchange may offer various denominations for coins. 720 \item Wallet may not have exact change! 721 \item Usability requires ability to pay given sufficient total funds. 722 \end{itemize}\pause 723 Key goals: 724 \begin{itemize} 725 \item maintain unlinkability 726 \item maintain taxability of transactions 727 \end{itemize}\pause 728 Method: 729 \begin{itemize} 730 \item Contract can specify to only pay {\em partial value} of a coin. 731 \item Exchange allows wallet to obtain {\em unlinkable change} 732 for remaining coin value. 733 \end{itemize} 734 \end{frame} 735 736 737 \section{Illustration of Programmable Money: Age Restrictions} 738 739 \begin{frame} 740 \vfill 741 \begin{center} 742 \vfill 743 {\bf Part IV:} 744 \vfill 745 {\bf Illustration of Programmable Money} 746 \vfill 747 {\bf Zero-knowledge Age Restrictions} 748 \vfill 749 \end{center} 750 \vfill 751 \end{frame} 752 753 754 \begin{frame}{Age restriction in e-commerce} 755 756 \begin{description} 757 \item[Problem:]~\\[1em] 758 Verification of minimum age requirements in e-commerce.\\[2em] 759 760 \item[Common solutions:] 761 762 \begin{tabular}{l<{\onslide<2->}c<{\onslide<3->}cr<{\onslide}} 763 & \blue{Privacy} & \tikzmark{topau} \blue{Ext. authority}& \\[\medskipamount] 764 1. ID Verification & bad & required & \\[\medskipamount] 765 2. Restricted Accounts & bad & required & \\[\medskipamount] 766 3. Attribute-based & good & required &\tikzmark{bottomau} \\[\medskipamount] 767 \end{tabular} 768 \end{description} 769 770 \uncover<4->{ 771 \begin{tikzpicture}[overlay,remember picture] 772 \draw[orange,thick,rounded corners] 773 ($(pic cs:topau) +(0,0.5)$) rectangle ($(pic cs:bottomau) -(0.3, 0.2)$); 774 \end{tikzpicture} 775 \begin{center} 776 \bf Principle of subsidiarity is violated 777 \end{center} 778 } 779 \end{frame} 780 781 782 \begin{frame}{Age restriction design for GNU Taler} 783 Design and implementation of an age restriction scheme\\ 784 with the following goals: 785 786 \begin{enumerate} 787 \item It ties age restriction to the \textbf{ability to pay} (not to ID's) 788 \item maintains \textbf{anonymity of buyers} 789 \item maintains \textbf{unlinkability of transactions} 790 \item aligns with \textbf{principle of subsidiarity} 791 \item is \textbf{practical and efficient} 792 \end{enumerate} 793 794 \end{frame} 795 796 797 \begin{frame}{Age restriction} 798 \framesubtitle{Assumptions and scenario} 799 800 \begin{columns} 801 \column{7.5cm} 802 \begin{itemize} 803 \item<1-> Assumption: Checking accounts are under control of eligible adults/guardians. 804 \item<2-> \textit{Guardians} \textbf{commit} to an maximum age 805 \item<3-> \textit{Minors} \textbf{attest} their adequate age 806 \item<4-> \textit{Merchants} \textbf{verify} the attestations 807 \item<5-> Minors \textbf{derive} age commitments from existing ones 808 \item<6-> \textit{Exchanges} \textbf{compare} the derived age commitments 809 \end{itemize} 810 \column{5cm} 811 \uncover<7-> 812 { 813 \begin{center} 814 \fontsize{7pt}{7pt}\selectfont 815 \begin{tikzpicture}[scale=.5] 816 \node[circle,minimum size=15pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$}; 817 \node[circle,minimum size=15pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 818 \node[circle,minimum size=15pt,fill=black!15] at ( 0:4) (Merchant) {$\Merchant$}; 819 \node[circle,minimum size=15pt,fill=blue!15] at (140:3) (Guardian) {$\Guardian$}; 820 821 \draw[->] (Guardian) to [out=50,in=130, loop] node[above] 822 {$\Commit$} (Guardian); 823 \draw[->,blue] (Client) to [out=-125,in=-190, loop] node[below,left] 824 {\blue{$\Attest$}} (Client); 825 \draw[->,blue] (Merchant) to [out=50,in=130, loop] node[above] 826 {\blue{$\Verify$}} (Merchant); 827 \draw[->,orange] (Client) to [out=-35,in=-100, loop] node[below] 828 {\orange{$\Derive$}} (Client); 829 \draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above] 830 {\orange{$\Compare$}} (Exchange); 831 832 \draw[orange,|->] (Client) to node[sloped,above,align=left] 833 {\orange{\scriptsize }} (Exchange); 834 \draw[blue,|->] (Client) to node[sloped, above] 835 {\blue{\scriptsize }} (Merchant); 836 \draw[,|->] (Guardian) to node[above,sloped,align=left] 837 {{\scriptsize }} (Client); 838 \end{tikzpicture} 839 \end{center} 840 } 841 \end{columns} 842 \vfill 843 % \uncover<7->{Note: Scheme is independent of payment service protocol.} 844 \end{frame} 845 846 847 \section{Offline Payments} 848 849 \begin{frame} 850 \vfill 851 \begin{center} 852 {\bf Part V: Offline Payments} 853 \end{center} 854 \vfill 855 \end{frame} 856 857 858 \begin{frame}{Fully Offline Payments {\bf (WiP)}} 859 \framesubtitle{\url{https://docs.taler.net/design-documents/030-offline-payments.html}} 860 Many central banks today demand offline capabilities for digital payment solutions. 861 \vfill 862 \noindent 863 Three possible approaches: 864 \begin{enumerate} 865 \item Trust-based offline payments (has counterparty and/or privacy risks) 866 \item Full HSM Taler wallet (has hardware costs) 867 \item Light-weight HSM balance register 868 \end{enumerate} 869 \vfill 870 \end{frame} 871 872 873 \begin{frame}{Partially Offline Payments with GNU Taler} 874 875 \begin{center} 876 \resizebox{8cm}{7cm}{ 877 \begin{sequencediagram} 878 \newinst{pos}{\shortstack{PoS \\ 879 \\ \begin{tikzpicture} 880 \node [fill=gray!20,draw=black,thick ,align=center] {PoS key \\ PoS ID}; 881 \end{tikzpicture} 882 }} 883 \newinst[2]{customer}{\shortstack{Customer \\ 884 \\ \begin{tikzpicture} 885 \node [fill=gray!20,draw=black,thick ,align=center] {Digital \\ Wallet}; 886 \end{tikzpicture} 887 }} 888 \newinst[2]{backend}{\shortstack{Merchant Backend \\ 889 \\ \begin{tikzpicture}[shape aspect=.5] 890 \tikzset{every node/.style={cylinder, shape border rotate=90, draw,fill=gray!25}} 891 \node at (1.5,0) {\shortstack{{\tiny PoS key} \\ {\tiny PoS ID}}}; 892 \end{tikzpicture} 893 }} 894 \postlevel 895 \mess[0]{pos}{PoS ID}{customer} 896 \begin{sdblock}{optional}{} 897 \begin{callself}{customer}{Amount}{} 898 \end{callself} 899 \end{sdblock} 900 \prelevel 901 \prelevel 902 \prelevel 903 \prelevel 904 \prelevel 905 \begin{sdblock}{optional}{} 906 \begin{callself}{pos}{Amount}{} 907 \end{callself} 908 \end{sdblock} 909 \postlevel 910 \mess[0]{customer}{PoS ID, [Amount]?}{backend} 911 \mess[0]{backend}{Contract}{customer} 912 \postlevel 913 \mess[0]{customer}{Payment}{backend} 914 \begin{callself}{pos}{OTP(PoS key)}{} 915 \end{callself} 916 \prelevel 917 \prelevel 918 \begin{callself}{backend}{OTP(PoS key)}{} 919 \end{callself} 920 \mess[0]{backend}{OTP code}{customer} 921 \postlevel 922 \mess[0]{customer}{OTP code}{pos} 923 \end{sequencediagram} 924 } 925 \end{center} 926 \end{frame} 927 928 929 \section{Conclusion} 930 931 \begin{frame} 932 \vfill 933 \begin{center} 934 {\bf Part VI: Conclusion} 935 \end{center} 936 \vfill 937 \end{frame} 938 939 \begin{frame}{Feature comparison} 940 \begin{center} \small 941 \begin{tabular}{l||c|c|c|c|c} 942 & Cash & Bitcoin & Zerocoin & Creditcard & GNU Taler \\ \hline \hline 943 Online &$-$$-$$-$ & ++ & ++ & + & +++ \\ \hline 944 Offline & +++ & $-$$-$ & $-$$-$ & + & ++ \\ \hline 945 Trans. cost & + & $-$$-$$-$ & $-$$-$$-$ & $-$ & ++ \\ \hline 946 Speed & + & $-$$-$$-$ & $-$$-$$-$ & o & ++ \\ \hline 947 Taxation & $-$ & $-$$-$ & $-$$-$$-$ & +++ & +++ \\ \hline 948 Payer-anon & ++ & o & ++ & $-$$-$$-$ & +++ \\ \hline 949 Payee-anon & ++ & o & ++ & $-$$-$$-$ & $-$$-$$-$ \\ \hline 950 Security & $-$ & o & o & $-$$-$ & ++ \\ \hline 951 Conversion & +++ & $-$$-$$-$ & $-$$-$$-$ & +++ & +++ \\ \hline 952 Libre & $-$ & +++ & +++ & $-$ $-$ $-$ & +++ \\ 953 \end{tabular} 954 \end{center} 955 \end{frame} 956 957 958 \begin{frame}{Rights} 959 \begin{itemize} 960 \item GNUnet e.V. shared copyrights of their AGPLv3+ licensed code with Taler Systems SA 961 \item Taler Systems SA holds copyrights to entire GNU Taler code base (AGPLv3+, GPLv3+, 962 dual-licensing exclusive domain of Taler Systems SA) 963 \item Taler Systems SA applied for patent on offline payment solution 964 \item Taler Systems SA holds trademark on ``Taler''. 965 \item FSF holds trademark on ``GNU'', we are authorized to use ``GNU Taler''. 966 \item Taler Systems SA owns {\tt taler.net} and {\tt taler-systems.com}. 967 \end{itemize} 968 \end{frame} 969 970 971 \begin{frame}{Summary of Taler Solution} 972 973 \begin{enumerate} 974 \item {\bf Frictionless one click}, cash-like digital payments \& 975 instant 976 confirmation for all fiat- and crypto-currencies and for all users, young and old. 977 \item With {\bf income-transparency on the recipient side} is 978 crime-preventing \& Taler coins are as secure as cash without 979 counterfeits. No ID theft. 980 \item {\bf Guaranteed privacy} for spender \& data minimization: payment 981 requires/shares no personal information. 982 \item {\bf No bank account needed}. 983 \item Highly efficient in power, processing \& storage, extremely low 984 cost \& {\bf highly scalable}. 985 \item Economically viable (sub-cent) instant {\bf micro-transactions} for 986 e-commerce, Internet of Things, machine2machine, $\ldots$ 987 \end{enumerate} 988 \end{frame} 989 990 991 \begin{frame}{Do you have any questions?} 992 \framesubtitle{\url{https://taler.net/en/bibliography.html}} 993 \vfill 994 References: 995 {\tiny 996 \begin{enumerate} 997 \item{David Chaum, Christian Grothoff and Thomas Moser. 998 {\em How to issue a central bank digital currency}. 999 {\bf SNB Working Papers, 2021}.} 1000 \item{Martin Summer and Hannes Hermanky. 1001 {\em A digital euro and the future of cash}. 1002 {\bf Monetary Policy \& The Economy Q1-Q2/22}.} 1003 \item{Antoine d’Aligny, Emmanuel Benoist, Florian Dold, Christian Grothoff, Özgür Kesim and Martin Schanzenbach. 1004 {\em Who comes after us? The correct mindset for designing a Central Bank Digital Currency}. 1005 {\bf SUERF Policy Notes 279/2022}.} 1006 \item{Florian Dold. 1007 {\em GNU Taler}. 1008 {\bf University of Rennes 1, PhD Thesis, 2019}.} 1009 \item{Christian Grothoff and Alex Pentland. 1010 {\em Digital cash and privacy: What are the alternatives to Libra?}. 1011 {\bf MIT Media Lab, 2019}.} 1012 \item{Jeffrey Burdges, Florian Dold, Christian Grothoff and Marcello Stanisci. 1013 {\em Enabling Secure Web Payments with GNU Taler}. 1014 {\bf SPACE 2016}.} 1015 \item{Özgür Kesim, Christian Grothoff, Florian Dold and Martin Schanzenbach. 1016 {\em Zero-Knowledge Age Restriction for GNU Taler}. 1017 {\bf ESORICS, 2022}.} 1018 \item{Gian Demarmels and Lucien Heuzeveldt. 1019 {\em Adding Schnorr's Blind Signature in Taler}. 1020 {\bf BFH, Bachelor's Thesis, 2022}.} 1021 \item{Marco Boss. 1022 {\em GNU Taler Scalability}. 1023 {\bf BFH, Bachelor's Thesis, 2022}.} 1024 \end{enumerate} 1025 } 1026 \end{frame} 1027 1028 \end{document} 1029 1030 \begin{frame}{Active collaborations} 1031 {\tiny 1032 \begin{description} 1033 \item {\bf Association EFREI}: \\ Offline payments 1034 \item {\bf Technische Universit\"at Eindhoven:} \\ Post-quantum cryptogrpahy 1035 \item {\bf Berner Fachhochschule:} \\ Snack machine \& blockchain integration \& scalability 1036 \item {\bf Freie Universit\"at Berlin:} \\ Programmability \& embedded systems 1037 \item {\bf Fraunhofer Gesellschaft}: \\ Identity management \& SSI \& wallet-to-wallet communication 1038 \item {\bf The GNU Project}: \\ Integration into FLOSS software 1039 \item {\bf Fiscaltrust GmbH}: \\ Point-of-sale integration ({\bf 1040 new}) 1041 \item {\bf Bank of International Settlements}: \\ Participation in Point Zero Forum 2023 ({\bf new}) 1042 \end{description} 1043 } 1044 \end{frame} 1045 1046 1047 \begin{frame}{Launch Timeline} 1048 \begin{description} 1049 \item[2022] Internal deployment at BFH 1050 \item[Q1'2023] Deployment using Bitcoin at BFH (running, but not yet announced) 1051 \item[Q2-3'2023] Deployment of local currency Netzbon in Basel 1052 \item[Q3'2023] Public deployment of eCHF stablecoin in Switzerland, cleared by FINMA 1053 \item[2024] German bank executes ``new product process'' for launch in Eurozone ({\bf planned}) 1054 \item[2025] MagNet bank begins process for launch in Hungary ({\bf planned}) 1055 \end{description} 1056 \end{frame}