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