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}