2023-moztw-ecommerce.tex (35341B)
1 \pdfminorversion=3 2 \documentclass[fleqn,xcolor={usenames,dvipsnames}]{beamer} 3 \usepackage{amsmath} 4 \usepackage{multimedia} 5 \usepackage[utf8]{inputenc} 6 \usepackage{framed,color,ragged2e} 7 \usepackage[absolute,overlay]{textpos} 8 \definecolor{shadecolor}{rgb}{0.8,0.8,0.8} 9 \usetheme{boxes} 10 \usepackage{xcolor} 11 \usepackage[normalem]{ulem} 12 \usepackage{listings} 13 \usepackage{adjustbox} 14 \usepackage{array} 15 \usepackage{bbding} 16 \usepackage{relsize} 17 \usepackage{graphicx} 18 \usepackage{tikz,eurosym,calc} 19 \usetikzlibrary{tikzmark} 20 \usetikzlibrary{shapes,arrows,arrows.meta} 21 \usetikzlibrary{positioning,fit,patterns} 22 \usetikzlibrary{calc} 23 \usepackage{multicol} 24 \usepackage{pgf-umlsd} 25 \usepackage{relsize} 26 27 28 % CSS 29 \lstdefinelanguage{CSS}{ 30 basicstyle=\ttfamily\scriptsize, 31 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}, 32 sensitive=true, 33 morecomment=[l]{//}, 34 morecomment=[s]{/*}{*/}, 35 morestring=[b]', 36 morestring=[b]", 37 alsoletter={:}, 38 alsodigit={-} 39 } 40 41 % JavaScript 42 \lstdefinelanguage{JavaScript}{ 43 basicstyle=\ttfamily\scriptsize, 44 morekeywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break}, 45 morecomment=[s]{/*}{*/}, 46 morecomment=[l]//, 47 morestring=[b]", 48 morestring=[b]' 49 } 50 51 \lstdefinelanguage{HTML5}{ 52 basicstyle=\ttfamily\scriptsize, 53 language=html, 54 sensitive=true, 55 alsoletter={<>=-}, 56 morecomment=[s]{<!-}{-->}, 57 tag=[s], 58 otherkeywords={ 59 % General 60 >, 61 % Standard tags 62 <!DOCTYPE, 63 </html, <html, <head, <title, </title, <style, </style, <link, </head, <meta, />, 64 % body 65 </body, <body, 66 % Divs 67 </div, <div, </div>, 68 % Paragraphs 69 </p, <p, </p>, 70 % scripts 71 </script, <script, 72 % More tags... 73 <canvas, /canvas>, <svg, <rect, <animateTransform, </rect>, </svg>, <video, <source, <iframe, </iframe>, </video>, <image, </image> 74 }, 75 ndkeywords={ 76 % General 77 =, 78 % HTML attributes 79 charset=, src=, id=, width=, height=, style=, type=, rel=, href=, 80 % SVG attributes 81 fill=, attributeName=, begin=, dur=, from=, to=, poster=, controls=, x=, y=, repeatCount=, xlink:href=, 82 % CSS properties 83 margin:, padding:, background-image:, border:, top:, left:, position:, width:, height:, 84 % CSS3 properties 85 transform:, -moz-transform:, -webkit-transform:, 86 animation:, -webkit-animation:, 87 transition:, transition-duration:, transition-property:, transition-timing-function:, 88 } 89 } 90 91 \lstdefinelanguage{JavaScript}{ 92 basicstyle=\ttfamily\scriptsize, 93 keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, for}, 94 keywordstyle=\color{blue}\bfseries, 95 ndkeywords={class, export, boolean, throw, implements, import, this}, 96 ndkeywordstyle=\color{darkgray}\bfseries, 97 identifierstyle=\color{black}, 98 sensitive=false, 99 comment=[l]{//}, 100 morecomment=[s]{/*}{*/}, 101 commentstyle=\color{purple}\ttfamily, 102 stringstyle=\color{red}\ttfamily, 103 morestring=[b]', 104 morestring=[b]" 105 } 106 107 \setbeamersize{description width=1em} 108 109 \definecolor{blue}{rgb}{0,0,0.7} 110 \newcommand{\orange}[1]{{\color{orange}#1}} 111 \newcommand{\blue}[1]{{\color{blue}#1}} 112 \newcommand{\red}[1]{{\color{red}#1}} 113 \newcommand{\Guardian}{\mathcal{G}} 114 \newcommand{\Child}{\mathcal{C}} 115 \newcommand{\Customer}{\mathcal{C}} 116 \newcommand{\Merchant}{\mathcal{M}} 117 \newcommand{\Exchange}{\mathcal{E}} 118 119 \newcommand{\Commit}{\mathsf{Commit}} 120 \newcommand{\Attest}{\mathsf{Attest}} 121 \newcommand{\Verify}{\mathsf{Verify}} 122 \newcommand{\Derive}{\mathsf{Derive}} 123 \newcommand{\DeriveCompare}{\mathsf{DeriveCompare_\kappa}} 124 \newcommand{\Compare}{\mathsf{Compare}} 125 \newcommand{\AgeVer}{\mathsf{AgeVer}} 126 127 \newcommand{\HashF}{\mathsf{H}} 128 \newcommand{\Hash}{\mathsf{H}} 129 \newcommand{\Block}{\mathbb{B}} 130 \newcommand{\Pub}{\mathsf{Pub}} 131 \newcommand{\Sign}{\mathsf{Sig}} 132 \newcommand{\Ver}{\mathsf{Ver}} 133 \newcommand{\Encoding}{\mathsf{Encoding}} 134 \newcommand{\ECDSA}{\mathsf{ECDSA}} 135 \newcommand{\Null}{\mathcal{O}} 136 \newcommand{\EC}{\mathrm{ec}} 137 \newcommand{\Curve}{\mathsf{Curve25519}} 138 \newcommand{\SHA}{\mathsf{SHA256}} 139 \newcommand{\SHAF}{\mathsf{SHA252}} 140 \newcommand{\FDH}{\mathsf{FDH}} 141 142 \newcommand{\negl}{\epsilon} 143 144 \newcommand{\rand}{\mathsf{rand}} 145 \newcommand{\age}{\mathsf{a}} 146 \newcommand{\Age}{\mathsf{M}} 147 \newcommand{\bage}{\mathsf{b}} 148 \newcommand{\minage}{\mathsf{m}} 149 \newcommand{\attest}{\mathsf{T}} 150 \newcommand{\commitment}{\mathsf{Q}} 151 \newcommand{\pruf}{\mathsf{P}} 152 \newcommand{\Vcommitment}{\vec{\mathsf{Q}}} 153 \newcommand{\Vpruf}{\vec{\mathsf{P}}} 154 \newcommand{\blinding}{\beta} 155 156 \newcommand{\ZN}{\mathbb{Z}_N} 157 \newcommand{\Z}{\mathbb{Z}} 158 \newcommand{\N}{\mathbb{N}} 159 \newcommand{\A}{\mathbb{A}} 160 \newcommand{\E}{\mathbb{E}} 161 \newcommand{\F}{\mathbb{F}} 162 \newcommand{\seck}{\mathsf{s}} 163 \newcommand{\pubk}{\mathsf{P}} 164 \renewcommand{\H}{\mathbb{H}} 165 \newcommand{\K}{\mathbb{K}} 166 \newcommand{\Proofs}{\mathbb{P}} 167 \newcommand{\Commitments}{\mathbb{O}} 168 \newcommand{\Attests}{\mathbb{T}} 169 \newcommand{\Blindings}{\mathbb{B}} 170 \newcommand{\Nil}{\perp} 171 172 \newcommand{\p}{\mathsf{p}} 173 \newcommand{\com}{\mathsf{com}} 174 \newcommand{\prf}{\mathsf{prf}} 175 176 \newcommand{\Adv}{\mathcal{A}} 177 \newcommand{\PPT}{\mathfrak{A}} 178 \newcommand{\Probability}{\mathrm{Pr}} 179 \newcommand{\Algorithm}{f} 180 \renewcommand{\Game}[1]{G_\Adv^\mathsf{#1}} 181 182 \DeclareMathOperator{\Image}{Im} 183 \DeclareMathOperator{\Mod}{mod} 184 185 \newcommand{\Encode}[1]{\overbracket[0.5pt][2pt]{\,#1\,}} 186 \newcommand{\Decode}[1]{\underbracket[0.5pt][3pt]{\,#1\,}} 187 \newcommand{\FDHg}[1]{[#1]_g\,} 188 \newcommand{\logg}{{\breve{g}}} 189 190 191 \newcommand{\drawfrom}{\xleftarrow{\$}} 192 \newcommand\Exists{% 193 \mathop{\lower0.75ex\hbox{\ensuremath{% 194 \mathlarger{\mathlarger{\mathlarger{\mathlarger{\exists}}}}}}}% 195 \limits} 196 197 \newcommand\Forall{% 198 \mathop{\lower0.75ex\hbox{\ensuremath{% 199 \mathlarger{\mathlarger{\mathlarger{\mathlarger{\forall}}}}}}}% 200 \limits} 201 202 203 \title{GNU Taler} 204 %\subtitle{} 205 206 \setbeamertemplate{navigation symbols}{ 207 \includegraphics[width=0.4cm]{logo-bfh.pdf} 208 \includegraphics[width=1.6cm]{fub.pdf} 209 \includegraphics[width=1cm]{tud-logo.pdf} 210 \includegraphics[width=1.4cm]{logo-tue.pdf} 211 \includegraphics[width=1cm]{inria.pdf} 212 \includegraphics[width=1cm]{logo-GlsBank.pdf} 213 \includegraphics[width=0.6cm]{logo-MagNetBank.pdf} \ 214 \includegraphics[width=0.6cm]{logo-visualvest.pdf} 215 \includegraphics[width=0.4cm]{ashoka.png} 216 \includegraphics[width=0.4cm]{logo-esen.pdf} 217 \includegraphics[width=0.4cm]{gnu.png} 218 \includegraphics[width=0.4cm]{logo-HomoDigitalis.pdf} 219 \includegraphics[width=0.4cm]{logo-nlnet.pdf} 220 \includegraphics[width=0.4cm]{logo-codeblau.pdf} 221 \includegraphics[width=0.4cm]{logo-ps.pdf} 222 \includegraphics[width=1cm]{taler-logo-2021-inkscape.pdf} 223 \hfill} 224 225 \author[C. Grothoff]{J. Burdges, F. Dold, {\bf C. Grothoff}, M. Stanisci} 226 \date{\today} 227 \institute{The GNU Project} 228 229 230 \begin{document} 231 232 \justifying 233 234 \begin{frame} 235 \begin{center} 236 \LARGE {\bf GNU} 237 238 \vfill 239 % \includegraphics[width=0.66\textwidth]{logo-2017-fr.pdf} 240 \includegraphics[width=0.66\textwidth]{taler-logo-2021-inkscape.pdf} 241 \end{center} 242 \begin{center} 243 \includegraphics[width=0.15\textwidth]{logo-EU.pdf} 244 \includegraphics[width=0.15\textwidth]{logo-SBFI.pdf} 245 \end{center} 246 \begin{textblock*}{6cm}(.5cm,7.7cm) % {block width} (coords) 247 {\Large {\bf \href{https://taler.net/}{taler.net}} \\ 248 \href{https://twitter.com/taler}{taler@twitter} \\ 249 \href{https://taler-systems.com/}{taler-systems.com}} 250 \end{textblock*} 251 252 % Substitute based on who is giving the talk! 253 \begin{textblock*}{6cm}(6.7cm,7.7cm) % {block width} (coords) 254 {\hfill {\bf Christian Grothoff} \\ 255 \hfill grothoff@taler.net } 256 \end{textblock*} 257 258 \end{frame} 259 260 \begin{frame}{What is Taler?} 261 \framesubtitle{\url{https://taler.net/en/features.html}} \noindent 262 Taler is 263 \vfill 264 \begin{itemize} 265 \item a Free/Libre software \emph{payment system} infrastructure project 266 \item ... with a surrounding software ecosystem 267 \item ... and a company (Taler Systems S.A.) and community that wants to deploy it 268 as widely as possible. 269 \end{itemize} 270 \vfill 271 \noindent 272 However, Taler is 273 \begin{itemize} 274 \item \emph{not} a currency or speculative asset 275 \item \emph{not} a long-term store of value 276 \item \emph{not} a network or instance of a system 277 \item \emph{not} decentralized 278 \item \emph{not} based on proof-of-work or proof-of-stake 279 \end{itemize} 280 \end{frame} 281 282 283 \begin{frame}{Design principles} 284 \framesubtitle{https://taler.net/en/principles.html} 285 GNU Taler must ... 286 \begin{enumerate} 287 \item {... be implemented as {\bf free software}.} 288 \item {... protect the {\bf privacy of buyers}.} 289 \item {... must enable the state to {\bf tax income} and crack down on 290 illegal business activities.} 291 \item {... prevent payment fraud.} 292 \item {... only {\bf disclose the minimal amount of information 293 necessary}.} 294 \item {... be usable.} 295 \item {... be efficient.} 296 \item {... avoid single points of failure.} 297 \item {... foster {\bf competition}.} 298 \end{enumerate} 299 \end{frame} 300 301 302 \begin{frame} 303 \frametitle{Architecture of Taler} 304 \begin{center} 305 \includegraphics[width=1\textwidth]{operations.png} 306 \end{center} 307 \end{frame} 308 309 310 \begin{frame}{Usability of Taler} 311 \vfill 312 \begin{center} 313 \url{https://demo.taler.net/} 314 \end{center} 315 \begin{enumerate} 316 \item Install browser extension. 317 \item Visit the {\tt bank.demo.taler.net} to withdraw coins. 318 \item Visit the {\tt shop.demo.taler.net} to spend coins. 319 \end{enumerate} 320 \vfill 321 \end{frame} 322 323 324 \begin{frame}{Real-world use} 325 \vfill 326 \begin{center} 327 \includegraphics[width=1.0\textwidth]{taler-in-use.png} 328 \end{center} 329 \vfill 330 \end{frame} 331 332 333 334 \section{Protocol Basics} 335 336 \begin{frame} 337 \vfill 338 \begin{center} 339 {\bf Protocol Basics} 340 \end{center} 341 \vfill 342 \end{frame} 343 344 345 \begin{frame}{A Bachelor's Thesis Video} 346 \begin{center} 347 \movie[%scale=0.6, 348 autostart, 349 poster] 350 { 351 \includegraphics[height=0.6\textwidth,width=0.8\textwidth]{white.png} 352 } 353 {cs-movie.mp4} 354 \end{center} 355 \end{frame} 356 357 358 \begin{frame}{Withdrawing coins on the Web} 359 \begin{center} 360 \includegraphics[height=0.9\textheight]{figs/taler-withdraw.pdf} 361 \end{center} 362 \end{frame} 363 364 365 366 \begin{frame}{Payment processing with Taler} 367 \begin{center} 368 \includegraphics[height=0.9\textheight]{figs/taler-pay.pdf} 369 \end{center} 370 \end{frame} 371 372 373 \section{Offline payments} 374 375 \begin{frame} 376 \vfill 377 \begin{center} 378 {\bf Offline payments} 379 \end{center} 380 \vfill 381 \end{frame} 382 383 384 \begin{frame}{Partially Offline Payments with GNU Taler} 385 386 \begin{center} 387 \resizebox{8cm}{7cm}{ 388 \begin{sequencediagram} 389 \newinst{pos}{\shortstack{PoS \\ 390 \\ \begin{tikzpicture} 391 \node [fill=gray!20,draw=black,thick ,align=center] {PoS key \\ PoS ID}; 392 \end{tikzpicture} 393 }} 394 \newinst[2]{customer}{\shortstack{Customer \\ 395 \\ \begin{tikzpicture} 396 \node [fill=gray!20,draw=black,thick ,align=center] {Digital \\ Wallet}; 397 \end{tikzpicture} 398 }} 399 \newinst[2]{backend}{\shortstack{Merchant Backend \\ 400 \\ \begin{tikzpicture}[shape aspect=.5] 401 \tikzset{every node/.style={cylinder, shape border rotate=90, draw,fill=gray!25}} 402 \node at (1.5,0) {\shortstack{{\tiny PoS key} \\ {\tiny PoS ID}}}; 403 \end{tikzpicture} 404 }} 405 \postlevel 406 \mess[0]{pos}{PoS ID}{customer} 407 \begin{sdblock}{optional}{} 408 \begin{callself}{customer}{Amount}{} 409 \end{callself} 410 \end{sdblock} 411 \prelevel 412 \prelevel 413 \prelevel 414 \prelevel 415 \prelevel 416 \begin{sdblock}{optional}{} 417 \begin{callself}{pos}{Amount}{} 418 \end{callself} 419 \end{sdblock} 420 \postlevel 421 \mess[0]{customer}{PoS ID, [Amount]?}{backend} 422 \mess[0]{backend}{Contract}{customer} 423 \postlevel 424 \mess[0]{customer}{Payment}{backend} 425 \begin{callself}{pos}{OTP(PoS key)}{} 426 \end{callself} 427 \prelevel 428 \prelevel 429 \begin{callself}{backend}{OTP(PoS key)}{} 430 \end{callself} 431 \mess[0]{backend}{OTP code}{customer} 432 \postlevel 433 \mess[0]{customer}{OTP code}{pos} 434 \end{sequencediagram} 435 } 436 \end{center} 437 \end{frame} 438 439 440 \section{Software architecture} 441 442 \begin{frame} 443 \vfill 444 \begin{center} 445 {\bf Software architecture} 446 \end{center} 447 \vfill 448 \end{frame} 449 450 451 \begin{frame}{Taler Exchange} 452 The {\bf Exchange} is the core logic of the payment system. 453 454 \begin{itemize} 455 \item One exchange at minimum must be operated per currency 456 \item Offers a REST API for merchants and customers 457 \item Uses several helper processes for configuration and to 458 interact with RTGS and cryptography 459 \item KYC support via OAuth 2.0, KycAID or Persona APIs 460 \item AML staff can analyze transactions and freeze income 461 \item Implemented in C on top of GNU libmicrohttpd 462 \end{itemize} 463 \end{frame} 464 465 466 \begin{frame}{Taler Merchant} 467 The {\bf Merchant} is the software run by merchants to accept\\ 468 GNU Taler payments. 469 470 \begin{minipage}{6cm} 471 \begin{itemize} 472 \item REST API for integration with e-commerce 473 \item SPA provides Web interface for administration 474 \item Features include: 475 \begin{itemize} 476 \item Multi-tenant support 477 \item Refunds 478 \item Rewards (Website pays visitor) 479 \item Templates (static QR codes with payment request) 480 \item Webhooks 481 \item Inventory management 482 \end{itemize} 483 \item Implemented in C on top of GNU libmicrohttpd 484 \end{itemize} 485 \end{minipage} 486 \begin{minipage}{5cm} 487 \includegraphics[width=5cm]{screenshots/merchant-spa-settings} 488 \end{minipage} 489 \end{frame} 490 491 492 \begin{frame}{Taler Wallet} 493 The {\bf Wallet} is the software run by consumers to store 494 their digital cash and authorize transactions. 495 496 \begin{minipage}{8cm} 497 \begin{itemize} 498 \item {\bf wallet-core} is the logic shared by all interfaces 499 \item Applications exist for Android, F-Droid, iOS, 500 WebExtension (Chrome, Chromium, Firefox, etc.) 501 \item Features include: 502 \begin{itemize} 503 \item Multi-currency support 504 \item Wallet-to-wallet payments (NFC or QR code) 505 \item CRDT-like data model 506 \end{itemize} 507 \item {\bf wallet-core} implemented in TypeScript 508 \end{itemize} 509 Can be integrated into other Apps if desired. 510 \end{minipage} 511 \begin{minipage}{3cm} 512 \includegraphics[width=3cm]{screenshots/Screenshot_20230225-103520.png} 513 \end{minipage} 514 \end{frame} 515 516 517 \begin{frame}{Taler Auditor} 518 The {\bf Auditor} is the software run by an independent auditor 519 to validate the operation of an Exchange. 520 521 \begin{itemize} 522 \item REST API for additional report inputs by merchants (optional) 523 \item Secure database replication logic 524 \item Implemented in C on top of GNU libmicrohttpd 525 \end{itemize} 526 \end{frame} 527 528 529 \begin{frame}{Pretix Taler payment plugin} 530 \begin{center} 531 \includegraphics[width=0.5\textwidth]{screenshots/pretix.png} 532 \end{center} 533 534 Pretix is a ticket sales system. 535 536 \begin{itemize} 537 \item Pretix payment plugin enables payments via GNU Taler 538 \item Developed by Pretix.eu for \EUR{3,000} on behalf of Taler Systems SA 539 \end{itemize} 540 \end{frame} 541 542 543 \begin{frame}{WooCommerce Taler payment plugin} 544 \begin{minipage}{6cm} 545 \begin{itemize} 546 \item WooCommerce is an e-commerce plugin for WordPress. 547 \item WooCommerce payment plugin enables payments via GNU Taler 548 \item Features include: 549 \begin{itemize} 550 \item Trivial configuration 551 \item Support for refunds 552 \item Full internationalization 553 \end{itemize} 554 \item WooCommerce and its plugins are implemented in PHP 555 \end{itemize} 556 \end{minipage} 557 \begin{minipage}{5cm} 558 \includegraphics[width=4cm]{screenshots/woocommerce-cart.png} 559 \includegraphics[width=4cm]{screenshots/woocommerce-settings.png} 560 \end{minipage} 561 \end{frame} 562 563 564 \begin{frame}{Joomla! Taler payment plugin} 565 \begin{minipage}{6cm} 566 \begin{itemize} 567 \item Joomla! is an e-commerce platform 568 \item Joomla! payment plugin enables payments via GNU Taler 569 \item Features include: 570 \begin{itemize} 571 \item Trivial configuration 572 \item Support for refunds 573 \item Full internationalization 574 \end{itemize} 575 \item Joomla! and its plugins are implemented in PHP 576 \end{itemize} 577 \end{minipage} 578 % FIXME: add screenshots 579 %\begin{minipage}{5cm} 580 % \includegraphics[width=4cm]{screenshots/woocommerce-cart.png} 581 % \includegraphics[width=4cm]{screenshots/woocommerce-settings.png} 582 % \end{minipage} 583 \end{frame} 584 585 586 \begin{frame}{Point-of-Sale App for Android} 587 588 \begin{minipage}{7cm} 589 \begin{itemize} 590 \item Allows merchant to generate orders against Taler backend 591 and display QR code to enable customer to pay in person 592 \item Patterned after ViewTouch restaurant UI 593 \item Features include: 594 \begin{itemize} 595 \item Internet-based configuration 596 \item Products sorted by categories 597 \item Easy undo of every operation 598 \item Manages multiple concurrent orders 599 \end{itemize} 600 \item The Point-of-Sale App is implemented in Kotlin 601 \end{itemize} 602 \end{minipage} 603 \begin{minipage}{4cm} 604 \includegraphics[width=4cm]{screenshots/Screenshot_20230224-194112.jpg} 605 \includegraphics[width=4cm]{screenshots/Screenshot_20230224-194119.jpg} 606 \includegraphics[width=4cm]{screenshots/Screenshot_20230224-195348.jpg} 607 \end{minipage} 608 \end{frame} 609 610 611 \begin{frame}{Cashier App for Android} 612 \begin{minipage}{4cm} 613 \begin{itemize} 614 \item Enables BFH staff to convert cash to e-cash 615 \item Staff has special bank accounts with limited funds 616 \item Students can pay staff in cash to receive e-cash 617 \item The Cashier App is implemented in Kotlin 618 \end{itemize} 619 \end{minipage} 620 \begin{minipage}{3cm} 621 \includegraphics[width=3cm]{screenshots/Screenshot_20230225-103315.png} 622 \end{minipage} 623 \begin{minipage}{3cm} 624 \includegraphics[width=3cm]{screenshots/Screenshot_20230225-103325.png} 625 \end{minipage} 626 \end{frame} 627 628 629 \section{Future Work \& Conclusion} 630 631 \begin{frame} 632 \vfill 633 \begin{center} 634 {\bf Future Work \& Conclusion} 635 \end{center} 636 \vfill 637 \end{frame} 638 639 640 \begin{frame}{Competitor comparison} 641 \begin{center} \small 642 \begin{tabular}{l||c|c|c|c|c} 643 & Cash & Bitcoin & Zerocoin & Creditcard & GNU Taler \\ \hline \hline 644 Online &$-$$-$$-$ & ++ & ++ & + & +++ \\ \hline 645 Offline & +++ & $-$$-$ & $-$$-$ & + & $+$$+$ \\ \hline 646 Trans. cost & + & $-$$-$$-$ & $-$$-$$-$ & $-$ & ++ \\ \hline 647 Speed & + & $-$$-$$-$ & $-$$-$$-$ & o & ++ \\ \hline 648 Taxation & $-$ & $-$$-$ & $-$$-$$-$ & +++ & +++ \\ \hline 649 Payer-anon & ++ & o & ++ & $-$$-$$-$ & +++ \\ \hline 650 Payee-anon & ++ & o & ++ & $-$$-$$-$ & $-$$-$$-$ \\ \hline 651 Security & $-$ & o & o & $-$$-$ & ++ \\ \hline 652 Conversion & +++ & $-$$-$$-$ & $-$$-$$-$ & +++ & +++ \\ \hline 653 Libre & $-$ & +++ & +++ & $-$ $-$ $-$& +++ \\ 654 \end{tabular} 655 \end{center} 656 \end{frame} 657 658 659 \begin{frame}{How to support?} 660 \begin{description} 661 \item[Join:] {\small \url{https://lists.gnu.org/mailman/listinfo/taler}} 662 \item[Develop:] \url{https://bugs.taler.net/}, \url{https://git.taler.net/} 663 \item[Apply:] \url{https://nlnet.nl/propose}, \url{https://nlnet.nl/taler} 664 \item[Translate:] \url{https://weblate.taler.net/}, \url{translation-volunteer@taler.net} 665 \item[Integrate:] \url{https://docs.taler.net/} 666 \item[Donate:] \url{https://gnunet.org/ev} 667 \item[Partner:] \url{https://taler-systems.com/} 668 \end{description} 669 \end{frame} 670 671 672 \begin{frame}{Conclusion} 673 \begin{center} 674 {\bf What can we do?} 675 \end{center} 676 \vfill 677 \begin{itemize} 678 \item{Suffer mass-surveillance enabled by credit card oligopolies with high fees, and} 679 \item{Engage in arms race with deliberately unregulatable blockchains} 680 % \item{Enjoy the ``benefits'' of cash \\ 681 % \hfill \includegraphics[height=0.3\textheight]{atm-rupee.jpg} \hfill} 682 \end{itemize} 683 \vfill 684 \begin{center} 685 {\bf OR} 686 \end{center} 687 \vfill 688 \begin{itemize} 689 \item{Establish free software alternative balancing social goals!} 690 \end{itemize} 691 \vfill 692 \end{frame} 693 694 695 \end{document} 696 697 698 699 700 \begin{frame}{Taler {\tt /withdraw/sign}} 701 % Customer withdrawing coins with blind signatures 702 % \bigskip 703 \begin{figure}[th] 704 \begin{minipage}[b]{0.45\linewidth} 705 \begin{center} 706 \begin{tikzpicture}[scale = 0.4, 707 transform shape, 708 msglabel/.style = { text = Black, yshift = .3cm, 709 sloped, midway }, 710 okmsg/.style = { ->, color = MidnightBlue, thick, 711 >=stealth }, 712 rstmsg/.style = { ->, color = BrickRed, thick, 713 >=stealth } 714 ] 715 \node[draw = MidnightBlue, 716 fill = CornflowerBlue, 717 minimum width = .3cm, 718 minimum height = 10cm 719 ] (h1) at (-4, 0) {}; 720 \node[draw = MidnightBlue, 721 fill = CornflowerBlue, 722 minimum width = .3cm, 723 minimum height = 10cm 724 ] (h2) at (4, 0) {}; 725 \node[above = 0cm of h1] {Wallet}; 726 \node[above = 0cm of h2] {Exchange}; 727 728 \path[->, color = MidnightBlue, very thick, >=stealth] 729 (-5, 4.5) edge 730 node[rotate=90, text = Black, yshift = .3cm] {Time} 731 (-5, -4.5); 732 \path[okmsg, dashed] 733 ($(h1.east)+(0, 4.0)+(0, -1.0)$) edge 734 node[msglabel] {SEPA(RK,A)} 735 ($(h2.west)+(0, 3.5)+(0, -1.0)$); 736 \path[okmsg] 737 ($(h1.east)+(0, -1.0)$) edge 738 node[msglabel] {POST {\tt /withdraw/sign} $S_{RK}(DK, B_b(C))$} 739 ($(h2.west)+(0, -1.5)$); 740 \path[okmsg] 741 ($(h2.west)+(0, -2.0)$) edge 742 node[msglabel] {200 OK: $S_{DK}(B_b(C))$)} 743 ($(h1.east)+(0, -2.5)$); 744 \path[rstmsg] 745 ($(h2.west)+(0, -3.5)$) edge 746 node[msglabel] {402 PAYMENT REQUIRED: $S_{RK}(DK, B_b(C))$)} 747 ($(h1.east)+(0, -4)$); 748 \node at (5.3, 0) {}; 749 \end{tikzpicture} 750 \end{center} 751 Result: $\langle c, S_{DK}(C) \rangle$. 752 \end{minipage} 753 \hspace{0.5cm} 754 \begin{minipage}[b]{0.45\linewidth} 755 \tiny 756 \begin{description} 757 \item[$A$] Some amount, $A \ge A_{DK}$ 758 \item[$RK$] Reserve key 759 \item[$DK$] Denomination key 760 \item[$b$] Blinding factor 761 \item[$B_b()$] RSA-FDH blinding % DK supressed 762 \item[$C$] Coin public key $C := cG$ 763 \item[$S_{RK}()$] EdDSA signature 764 \item[$S_{DK}()$] RSA-FDH signature 765 \end{description} 766 \end{minipage} 767 \end{figure} 768 \end{frame} 769 770 771 \begin{frame}[t]{Taler {\tt /deposit}} 772 Merchant and exchange see only the public coin $\langle C, S_{DK}(C) \rangle$. 773 \bigskip 774 \begin{figure}[th] 775 \begin{minipage}[b]{0.45\linewidth} 776 \begin{center} 777 \begin{tikzpicture}[scale = 0.4, 778 transform shape, 779 msglabel/.style = { text = Black, yshift = .3cm, 780 sloped, midway }, 781 okmsg/.style = { ->, color = MidnightBlue, thick, 782 >=stealth }, 783 rstmsg/.style = { ->, color = BrickRed, thick, 784 >=stealth } 785 ] 786 \node[draw = MidnightBlue, 787 fill = CornflowerBlue, 788 minimum width = .3cm, 789 minimum height = 10cm 790 ] (h1) at (-4, 0) {}; 791 \node[draw = MidnightBlue, 792 fill = CornflowerBlue, 793 minimum width = .3cm, 794 minimum height = 10cm 795 ] (h2) at (4, 0) {}; 796 \node[above = 0cm of h1] {Merchant}; 797 \node[above = 0cm of h2] {Exchange}; 798 799 \path[->, color = MidnightBlue, very thick, >=stealth] 800 (-5, 4.5) edge 801 node[rotate=90, text = Black, yshift = .3cm] {Time} 802 (-5, -4.5); 803 \path[->, color = MidnightBlue, thick, >=stealth] 804 ($(h1.east)+(0,3)$) edge 805 node[text = Black, yshift = .3cm, sloped] {POST {\tt /deposit} $S_{DK}(C), S_{c}(D)$} 806 ($(h2.west)+(0,2)$); 807 \path[->, color = MidnightBlue, thick, >=stealth] 808 ($(h2.west)+(0,0.5)$) edge 809 node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(S_{c}(D))$} 810 ($(h1.east)+(0,-0.5)$); 811 \path[rstmsg] 812 ($(h2.west)+(0, -2.5)$) edge 813 node[msglabel] {409 CONFLICT: $S_{c}(D')$} 814 ($(h1.east)+(0, -3.5)$); 815 \node at (5.3, 0) {}; 816 \end{tikzpicture} 817 \end{center} 818 \end{minipage} 819 \hspace{0.5cm} 820 \begin{minipage}[b]{0.45\linewidth} 821 \tiny 822 \begin{description} 823 \item[$DK$] Denomination key 824 \item[$S_{DK}()$] RSA-FDH signature using $DK$ 825 \item[$c$] Private coin key, $C := cG$. 826 \item[$S_{C}()$] EdDSA signature using $c$ 827 \item[$D$] Deposit details 828 \item[$SK$] Exchange's signing key 829 \item[$S_{SK}()$] EdDSA signature using $SK$ 830 \item[$D'$] Conficting deposit details $D' \not= D$ 831 \end{description} 832 \end{minipage} 833 \end{figure} 834 \end{frame} 835 836 837 \begin{frame}{Taler {\tt /refresh/melt}} 838 \begin{figure}[th] 839 \begin{minipage}[b]{0.45\linewidth} 840 \begin{center} 841 \begin{tikzpicture}[scale = 0.4, 842 transform shape, 843 msglabel/.style = { text = Black, yshift = .3cm, 844 sloped, midway }, 845 okmsg/.style = { ->, color = MidnightBlue, thick, 846 >=stealth }, 847 rstmsg/.style = { ->, color = BrickRed, thick, 848 >=stealth } 849 ] 850 \node[draw = MidnightBlue, 851 fill = CornflowerBlue, 852 minimum width = .3cm, 853 minimum height = 10cm 854 ] (h1) at (-4, 0) {}; 855 \node[draw = MidnightBlue, 856 fill = CornflowerBlue, 857 minimum width = .3cm, 858 minimum height = 10cm 859 ] (h2) at (4, 0) {}; 860 \node[above = 0cm of h1] {Customer}; 861 \node[above = 0cm of h2] {Exchange}; 862 863 \path[->, color = MidnightBlue, very thick, >=stealth] 864 (-5, 4.5) edge 865 node[rotate=90, text = Black, yshift = .3cm] {Time} 866 (-5, -4.5); 867 \path[->, color = MidnightBlue, thick, >=stealth] 868 ($(h1.east)+(0,3)$) edge 869 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/melt} $S_{DK}(C), S_c({\cal DK}, {\cal T},{\cal B})$} 870 ($(h2.west)+(0,2)$); 871 \path[->, color = MidnightBlue, thick, >=stealth] 872 ($(h2.west)+(0,0.5)$) edge 873 node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(H({\cal T}, {\cal B}),\gamma)$} 874 ($(h1.east)+(0,-0.5)$); 875 \path[rstmsg] 876 ($(h2.west)+(0, -2.5)$) edge 877 node[msglabel] {409 CONFLICT: $S_{C}(X), \ldots$} 878 ($(h1.east)+(0, -3.5)$); 879 \node at (5.3, 0) {}; 880 \end{tikzpicture} 881 \end{center} 882 \end{minipage} 883 \hspace{0.5cm} 884 \begin{minipage}[b]{0.45\linewidth} 885 \tiny 886 \begin{description} 887 \item[$\kappa$] System-wide security parameter, usually 3. 888 \\ \smallskip 889 \item[$\cal DK$] $:= [DK^{(i)}]_i$ \\ List of denomination keys \\ 890 $D + \sum_i A_{DK^{(i)}} < A_{DK}$ 891 \item[$t_j$] Random scalar for $j<\kappa$ 892 \item[${\cal T}$] $:= [T_j]_\kappa$ where $T_j = t_j G$ 893 \item[$k_j$] $:= c T_j = t_j C$ is an ECDHE 894 \item[$b_j^{(i)}$] $:= KDF_b(k_j,i)$ % blinding factor 895 \item[$c_j^{(i)}$] $:= KDF_c(k_j,i)$ % coin secret keys 896 \item[$C_j^{(i)}$] $: = c_j^{(i)} G$ % new coin publics % keys 897 \item[${\cal B}$] $:= [H( \beta_j )]_\kappa$ where \\ 898 $\beta_j := \left[ B_{b_j^{(i)}}(C_j^{(i)}) \right]_i$ 899 \\ \smallskip 900 \item[$\gamma$] Random value in $[0,\kappa)$ 901 % \\ \smallskip 902 % \item[$X$] Deposit or refresh 903 \end{description} 904 \end{minipage} 905 \end{figure} 906 \end{frame} 907 908 909 \begin{frame}{Taler {\tt /refresh/reveal}} 910 \begin{figure}[th] 911 \begin{minipage}[b]{0.45\linewidth} 912 \begin{center} 913 \begin{tikzpicture}[scale = 0.4, 914 transform shape, 915 msglabel/.style = { text = Black, yshift = .3cm, 916 sloped, midway }, 917 okmsg/.style = { ->, color = MidnightBlue, thick, 918 >=stealth }, 919 rstmsg/.style = { ->, color = BrickRed, thick, 920 >=stealth } 921 ] 922 \node[draw = MidnightBlue, 923 fill = CornflowerBlue, 924 minimum width = .3cm, 925 minimum height = 10cm 926 ] (h1) at (-4, 0) {}; 927 \node[draw = MidnightBlue, 928 fill = CornflowerBlue, 929 minimum width = .3cm, 930 minimum height = 10cm 931 ] (h2) at (4, 0) {}; 932 \node[above = 0cm of h1] {Customer}; 933 \node[above = 0cm of h2] {Exchange}; 934 935 \path[->, color = MidnightBlue, very thick, >=stealth] 936 (-5, 4.5) edge 937 node[rotate=90, text = Black, yshift = .3cm] {Time} 938 (-5, -4.5); 939 \path[->, color = MidnightBlue, thick, >=stealth] 940 ($(h1.east)+(0,3)$) edge 941 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/reveal} $H({\cal T}, {\cal B}), {\tilde{\cal T}}, \beta_\gamma$} 942 ($(h2.west)+(0,2)$); 943 \path[->, color = MidnightBlue, thick, >=stealth] 944 ($(h2.west)+(0,0.5)$) edge 945 node[text = Black, yshift = .3cm, sloped] {200 OK: $\cal S$} 946 ($(h1.east)+(0,-0.5)$); 947 \path[rstmsg] 948 ($(h2.west)+(0, -2.5)$) edge 949 node[msglabel] {400 BAD REQUEST: $Z$} 950 ($(h1.east)+(0, -3.5)$); 951 \node at (5.3, 0) {}; 952 \end{tikzpicture} 953 \end{center} 954 \end{minipage} 955 \hspace{0.5cm} 956 \begin{minipage}[b]{0.45\linewidth} 957 \tiny 958 \begin{description} 959 \item[$\cal DK$] $:= [DK^{(i)}]_i$ 960 \item[$t_j$] .. \\ \smallskip 961 962 \item[$\tilde{\cal T}$] $:= [t_j | j \in \kappa, j \neq \gamma]$ \\ \smallskip 963 964 \item[$k_\gamma$] $:= c T_\gamma = t_\gamma C$ 965 \item[$b_\gamma^{(i)}$] $:= KDF_b(k_\gamma,i)$ 966 \item[$c_\gamma^{(i)}$] $:= KDF_c(k_\gamma,i)$ 967 \item[$C_\gamma^{(i)}$] $: = c_\gamma^{(i)} G$ 968 969 \item[$B_\gamma^{(i)}$] $:= B_{b_\gamma^{(i)}}(C_\gamma^{(i)})$ 970 \item[$\beta_\gamma$] $:= \big[ B_\gamma^{(i)} \big]_i$ 971 \item[$\cal S$] $:= \left[ S_{DK^{(i)}}( B_\gamma^{(i)} ) \right]_i$ \\ \smallskip 972 973 \item[$Z$] Cut-and-choose missmatch information 974 \end{description} 975 \end{minipage} 976 \end{figure} 977 \end{frame} 978 979 980 \begin{frame}{Taler {\tt /refresh/link}} 981 \begin{figure}[th] 982 \begin{minipage}[b]{0.45\linewidth} 983 \begin{center} 984 \begin{tikzpicture}[scale = 0.4, 985 transform shape, 986 msglabel/.style = { text = Black, yshift = .3cm, 987 sloped, midway }, 988 okmsg/.style = { ->, color = MidnightBlue, thick, 989 >=stealth }, 990 rstmsg/.style = { ->, color = BrickRed, thick, 991 >=stealth } 992 ] 993 \node[draw = MidnightBlue, 994 fill = CornflowerBlue, 995 minimum width = .3cm, 996 minimum height = 10cm 997 ] (h1) at (-4, 0) {}; 998 \node[draw = MidnightBlue, 999 fill = CornflowerBlue, 1000 minimum width = .3cm, 1001 minimum height = 10cm 1002 ] (h2) at (4, 0) {}; 1003 \node[above = 0cm of h1] {Customer}; 1004 \node[above = 0cm of h2] {Exchagne}; 1005 1006 \path[->, color = MidnightBlue, very thick, >=stealth] 1007 (-5, 4.5) edge 1008 node[rotate=90, text = Black, yshift = .3cm] {Time} 1009 (-5, -4.5); 1010 \path[->, color = MidnightBlue, thick, >=stealth] 1011 ($(h1.east)+(0,3)$) edge 1012 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/link} $C$} 1013 ($(h2.west)+(0,2)$); 1014 \path[->, color = MidnightBlue, thick, >=stealth] 1015 ($(h2.west)+(0,0.5)$) edge 1016 node[text = Black, yshift = .3cm, sloped] {200 OK: $T_\gamma$} 1017 ($(h1.east)+(0,-0.5)$); 1018 \path[rstmsg] 1019 ($(h2.west)+(0, -2.5)$) edge 1020 node[msglabel] {404 NOT FOUND} 1021 ($(h1.east)+(0, -3.5)$); 1022 \node at (5.3, 0) {}; 1023 \end{tikzpicture} 1024 \end{center} 1025 \end{minipage} 1026 \hspace{0.5cm} 1027 \begin{minipage}[b]{0.45\linewidth} 1028 \tiny 1029 \begin{description} 1030 \item[$C$] Old coind public key \\ \smallskip 1031 \item[$T_\gamma$] Linkage data $\cal L$ at $\gamma$ 1032 \end{description} 1033 \end{minipage} 1034 \end{figure} 1035 \end{frame} 1036 1037 1038 \begin{frame}{Operational security} 1039 \begin{center} 1040 \resizebox{\textwidth}{!}{ 1041 \begin{tikzpicture}[ 1042 font=\sffamily, 1043 every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm}, 1044 source/.style={draw,thick,rounded corners,fill=green!20,inner sep=.3cm}, 1045 process/.style={draw,thick,circle,fill=blue!20}, 1046 sink/.style={source,fill=green!20}, 1047 datastore/.style={draw,very thick,shape=datastore,inner sep=.3cm}, 1048 dots/.style={gray,scale=2}, 1049 to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize}, 1050 every node/.style={align=center}] 1051 1052 % Position the nodes using a matrix layout 1053 \matrix{ 1054 \node[source] (wallet) {Wallet}; 1055 \& \node[process] (browser) {Browser}; 1056 \& \node[process] (shop) {Web shop}; 1057 \& \node[sink] (backend) {Taler backend}; \\ 1058 }; 1059 1060 % Draw the arrows between the nodes and label them. 1061 \draw[to] (browser) to[bend right=50] node[midway,above] {(4) signed contract} 1062 node[midway,below] {(signal)} (wallet); 1063 \draw[to] (wallet) to[bend right=50] node[midway,above] {(signal)} 1064 node[midway,below] {(5) signed coins} (browser); 1065 \draw[<->] (browser) -- node[midway,above] {(3,6) custom} 1066 node[midway,below] {(HTTPS)} (shop); 1067 \draw[to] (shop) to[bend right=50] node[midway,above] {(HTTPS)} 1068 node[midway,below] {(1) proposed contract / (7) signed coins} (backend); 1069 \draw[to] (backend) to[bend right=50] node[midway,above] {(2) signed contract / (8) confirmation} 1070 node[midway,below] {(HTTPS)} (shop); 1071 \end{tikzpicture} 1072 } 1073 \end{center} 1074 \end{frame} 1075 1076 1077 \begin{frame}{Use Cases: Refugee Camps} 1078 Today: 1079 \begin{itemize} 1080 \item Non-bankable 1081 \item Direct distribution of goods to population 1082 \item Limited economic activity in camps 1083 \item High level of economic dependence 1084 \end{itemize}\vfill\pause 1085 With GNU Taler: 1086 \begin{itemize} 1087 \item Local currency issued as basic income backed by aid 1088 \item Taxation possible based on economic status 1089 \item Local governance enabled by local taxes 1090 \item Increased economic independence and political participation 1091 \end{itemize} 1092 \end{frame} 1093 1094 1095 \begin{frame}{Use Case: Anti-Spam} 1096 \framesubtitle{Background: \url{https://pep.security/}} 1097 Today, p$\equiv$p provides authenticated encryption for e-mail: 1098 \begin{itemize} 1099 \item Free software 1100 \item Easy to use opportunistic encryption 1101 \item Available for Outlook, Android, Enigmail 1102 \item Spies \& spam filters can no longer inspect content 1103 \end{itemize}\vfill\pause 1104 With GNU Taler: 1105 \begin{itemize} 1106 \item Peer-to-peer payments via e-mail 1107 \item If unsolicited sender, hide messages from user \& 1108 automatically request payment from sender 1109 \item Sender can attach payment to be moved to inbox 1110 \item Receiver may grant refund to sender 1111 \end{itemize} 1112 \end{frame}