2025-ethz.tex (73527B)
1 \documentclass[aspectratio=169,t]{beamer} 2 \input taler-macros 3 4 \newcommand{\TITLE}{NEXT \\ GENERATION \\ INTERNET} 5 \newcommand{\SUB}{The GNU Taler Payment System} 6 \newcommand{\AUTHOR}{Christian Grothoff} 7 \newcommand{\SPEAKER}{Christian Grothoff} 8 \newcommand{\INST}{The GNU Project} 9 \newcommand{\DATE}{Traffic Seminar --- ETHZ} 10 11 % Do not edit this part 12 \title{\TITLE} 13 \subtitle{\SUB} 14 \date{\DATE} 15 \author[\SPEAKER]{\AUTHOR} 16 \institute{\INST} 17 18 19 \usepackage{amsmath} 20 \usepackage{multimedia} 21 \usepackage[utf8]{inputenc} 22 \usepackage{framed,color,ragged2e} 23 \usepackage[absolute,overlay]{textpos} 24 \definecolor{shadecolor}{rgb}{0.8,0.8,0.8} 25 \usetheme{boxes} 26 \setbeamertemplate{navigation symbols}{} 27 \usepackage{xcolor} 28 \usepackage[normalem]{ulem} 29 \usepackage{listings} 30 \usepackage{adjustbox} 31 \usepackage{array} 32 \usepackage{bbding} 33 \usepackage{relsize} 34 \usepackage{graphicx} 35 \usepackage{tikz,eurosym,calc} 36 \usetikzlibrary{tikzmark} 37 \usetikzlibrary{shapes,arrows,arrows.meta} 38 \usetikzlibrary{positioning,fit,patterns} 39 \usetikzlibrary{calc} 40 \usepackage{multicol} 41 \usepackage{pgf-umlsd} 42 \usepackage{relsize} 43 44 \usepackage{booktabs} 45 \usepackage{makecell} 46 \usepackage{arydshln} 47 48 49 50 % "The GNU Taler Payment System", including 51 % an introduction to our objectives, 52 % background on the technology, 53 % demonstration of the system, 54 % social implications and open issues. 55 56 % CSS 57 \lstdefinelanguage{CSS}{ 58 basicstyle=\ttfamily\scriptsize, 59 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}, 60 sensitive=true, 61 morecomment=[l]{//}, 62 morecomment=[s]{/*}{*/}, 63 morestring=[b]', 64 morestring=[b]", 65 alsoletter={:}, 66 alsodigit={-} 67 } 68 69 % JavaScript 70 \lstdefinelanguage{JavaScript}{ 71 basicstyle=\ttfamily\scriptsize, 72 morekeywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break}, 73 morecomment=[s]{/*}{*/}, 74 morecomment=[l]//, 75 morestring=[b]", 76 morestring=[b]' 77 } 78 79 \lstdefinelanguage{HTML5}{ 80 basicstyle=\ttfamily\scriptsize, 81 language=html, 82 sensitive=true, 83 alsoletter={<>=-}, 84 morecomment=[s]{<!-}{-->}, 85 tag=[s], 86 otherkeywords={ 87 % General 88 >, 89 % Standard tags 90 <!DOCTYPE, 91 </html, <html, <head, <title, </title, <style, </style, <link, </head, <meta, />, 92 % body 93 </body, <body, 94 % Divs 95 </div, <div, </div>, 96 % Paragraphs 97 </p, <p, </p>, 98 % scripts 99 </script, <script, 100 % More tags... 101 <canvas, /canvas>, <svg, <rect, <animateTransform, </rect>, </svg>, <video, <source, <iframe, </iframe>, </video>, <image, </image> 102 }, 103 ndkeywords={ 104 % General 105 =, 106 % HTML attributes 107 charset=, src=, id=, width=, height=, style=, type=, rel=, href=, 108 % SVG attributes 109 fill=, attributeName=, begin=, dur=, from=, to=, poster=, controls=, x=, y=, repeatCount=, xlink:href=, 110 % CSS properties 111 margin:, padding:, background-image:, border:, top:, left:, position:, width:, height:, 112 % CSS3 properties 113 transform:, -moz-transform:, -webkit-transform:, 114 animation:, -webkit-animation:, 115 transition:, transition-duration:, transition-property:, transition-timing-function:, 116 } 117 } 118 119 \lstdefinelanguage{JavaScript}{ 120 basicstyle=\ttfamily\scriptsize, 121 keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, for}, 122 keywordstyle=\color{blue}\bfseries, 123 ndkeywords={class, export, boolean, throw, implements, import, this}, 124 ndkeywordstyle=\color{darkgray}\bfseries, 125 identifierstyle=\color{black}, 126 sensitive=false, 127 comment=[l]{//}, 128 morecomment=[s]{/*}{*/}, 129 commentstyle=\color{purple}\ttfamily, 130 stringstyle=\color{red}\ttfamily, 131 morestring=[b]', 132 morestring=[b]" 133 } 134 135 \setbeamersize{description width=1em} 136 137 \definecolor{blue}{rgb}{0,0,0.7} 138 \newcommand{\orange}[1]{{\color{orange}#1}} 139 \newcommand{\blue}[1]{{\color{blue}#1}} 140 \newcommand{\red}[1]{{\color{red}#1}} 141 \newcommand{\Guardian}{\mathcal{G}} 142 \newcommand{\Child}{\mathcal{C}} 143 \newcommand{\Customer}{\mathcal{C}} 144 \newcommand{\Merchant}{\mathcal{M}} 145 \newcommand{\Exchange}{\mathcal{E}} 146 147 \newcommand{\Commit}{\mathsf{Commit}} 148 \newcommand{\Attest}{\mathsf{Attest}} 149 \newcommand{\Verify}{\mathsf{Verify}} 150 \newcommand{\Derive}{\mathsf{Derive}} 151 \newcommand{\DeriveCompare}{\mathsf{DeriveCompare_\kappa}} 152 \newcommand{\Compare}{\mathsf{Compare}} 153 \newcommand{\AgeVer}{\mathsf{AgeVer}} 154 155 \newcommand{\HashF}{\mathsf{H}} 156 \newcommand{\Hash}{\mathsf{H}} 157 \newcommand{\Block}{\mathbb{B}} 158 \newcommand{\Pub}{\mathsf{Pub}} 159 \newcommand{\Sign}{\mathsf{Sig}} 160 \newcommand{\Ver}{\mathsf{Ver}} 161 \newcommand{\Encoding}{\mathsf{Encoding}} 162 \newcommand{\ECDSA}{\mathsf{ECDSA}} 163 \newcommand{\Null}{\mathcal{O}} 164 \newcommand{\EC}{\mathrm{ec}} 165 \newcommand{\Curve}{\mathsf{Curve25519}} 166 \newcommand{\SHA}{\mathsf{SHA256}} 167 \newcommand{\SHAF}{\mathsf{SHA252}} 168 \newcommand{\FDH}{\mathsf{FDH}} 169 170 \newcommand{\negl}{\epsilon} 171 172 \newcommand{\rand}{\mathsf{rand}} 173 \newcommand{\age}{\mathsf{a}} 174 \newcommand{\Age}{\mathsf{M}} 175 \newcommand{\bage}{\mathsf{b}} 176 \newcommand{\minage}{\mathsf{m}} 177 \newcommand{\attest}{\mathsf{T}} 178 \newcommand{\commitment}{\mathsf{Q}} 179 \newcommand{\pruf}{\mathsf{P}} 180 \newcommand{\Vcommitment}{\vec{\mathsf{Q}}} 181 \newcommand{\Vpruf}{\vec{\mathsf{P}}} 182 \newcommand{\blinding}{\beta} 183 184 \newcommand{\ZN}{\mathbb{Z}_N} 185 \newcommand{\Z}{\mathbb{Z}} 186 \newcommand{\N}{\mathbb{N}} 187 \newcommand{\A}{\mathbb{A}} 188 \newcommand{\E}{\mathbb{E}} 189 \newcommand{\F}{\mathbb{F}} 190 \newcommand{\seck}{\mathsf{s}} 191 \newcommand{\pubk}{\mathsf{P}} 192 \renewcommand{\H}{\mathbb{H}} 193 \newcommand{\K}{\mathbb{K}} 194 \newcommand{\Proofs}{\mathbb{P}} 195 \newcommand{\Commitments}{\mathbb{O}} 196 \newcommand{\Attests}{\mathbb{T}} 197 \newcommand{\Blindings}{\mathbb{B}} 198 \newcommand{\Nil}{\perp} 199 200 \newcommand{\p}{\mathsf{p}} 201 \newcommand{\com}{\mathsf{com}} 202 \newcommand{\prf}{\mathsf{prf}} 203 204 \newcommand{\Adv}{\mathcal{A}} 205 \newcommand{\PPT}{\mathfrak{A}} 206 \newcommand{\Probability}{\mathrm{Pr}} 207 \newcommand{\Algorithm}{f} 208 \renewcommand{\Game}[1]{G_\Adv^\mathsf{#1}} 209 210 \DeclareMathOperator{\Image}{Im} 211 \DeclareMathOperator{\Mod}{mod} 212 213 \newcommand{\Encode}[1]{\overbracket[0.5pt][2pt]{\,#1\,}} 214 \newcommand{\Decode}[1]{\underbracket[0.5pt][3pt]{\,#1\,}} 215 \newcommand{\FDHg}[1]{[#1]_g\,} 216 \newcommand{\logg}{{\breve{g}}} 217 218 219 \newcommand{\drawfrom}{\xleftarrow{\$}} 220 \newcommand\Exists{% 221 \mathop{\lower0.75ex\hbox{\ensuremath{% 222 \mathlarger{\mathlarger{\mathlarger{\mathlarger{\exists}}}}}}}% 223 \limits} 224 225 \newcommand\Forall{% 226 \mathop{\lower0.75ex\hbox{\ensuremath{% 227 \mathlarger{\mathlarger{\mathlarger{\mathlarger{\forall}}}}}}}% 228 \limits} 229 230 231 \begin{document} 232 233 \begin{frame}[plain] 234 \maketitle 235 \end{frame} 236 237 \begin{frame}{Agenda} 238 \tableofcontents 239 \end{frame} 240 241 \section{Motivation \& Background} 242 243 244 \begin{frame}{A Social Problem} 245 % \vfill 246 This was a question posed to RAND researchers in 1971: 247 248 \begin{quote} 249 ``Suppose you were an advisor to the head of the KGB. Suppose you are given the assignment of designing a system for the surveillance of all citizens and visitors within the boundaries of the USSR. The system is not to be too obtrusive or obvious. What would be your decision?'' 250 \end{quote} 251 %The result: an electronic funds transfer system that looks 252 %strikingly similar today's debit card system. 253 \pause 254 \begin{minipage}{2cm} 255 \includegraphics[width=2cm]{pics/nsa_spy.jpg} 256 \end{minipage} 257 \begin{minipage}{12cm} 258 ``I think one of the big things that we need to do, is we need 259 to get away from true-name payments on the Internet. The credit 260 card payment system is one of the worst things that happened for the 261 user, in terms of being able to divorce their access from their 262 identity.'' \hfill --Edward Snowden, IETF 93 (2015) 263 \end{minipage} 264 265 \end{frame} 266 267 268 \begin{frame}{Banks have Problems, too!} 269 270 3D secure (``verified by visa'') is a nightmare: 271 272 \begin{minipage}{5cm} 273 \begin{itemize} 274 \item Complicated process 275 \item Shifts liability to consumer 276 \item Significant latency 277 \item Can refuse valid requests 278 \item Legal vendors excluded 279 \item No privacy for buyers 280 \end{itemize} 281 \end{minipage} 282 \begin{minipage}{5cm} 283 \includegraphics[width=\textwidth]{illustrations/cc3ds.pdf} 284 \end{minipage} 285 \vfill 286 Online credit card payments will be replaced, but with what? 287 \end{frame} 288 289 290 \begin{frame}{The Bank's Problem} 291 \begin{itemize} 292 \item Global tech companies push oligopolies 293 \item Privacy and federated finance are at risk 294 % \item 30\% fees are conceivable 295 \item Economic sovereignty is in danger 296 \end{itemize} 297 \begin{textblock*}{4cm}(11.5cm,5.2cm) % {block width} (coords) 298 {\includegraphics[width=\textwidth]{../investors/competitor-logos/amazon.png}} 299 \end{textblock*} 300 \begin{textblock*}{2cm}(11cm,3cm) % {block width} (coords) 301 {\includegraphics[width=\textwidth]{../investors/competitor-logos/alipay.jpeg}} 302 \end{textblock*} 303 \begin{textblock*}{2cm}(11cm,7cm) % {block width} (coords) 304 {\includegraphics[width=\textwidth]{../investors/competitor-logos/paypal.jpeg}} 305 \end{textblock*} 306 \begin{textblock*}{2cm}(3cm,9cm) % {block width} (coords) 307 {\includegraphics[width=\textwidth]{../investors/competitor-logos/applepay.jpeg}} 308 \end{textblock*} 309 \begin{textblock*}{2cm}(7cm,7cm) % {block width} (coords) 310 {\includegraphics[width=\textwidth]{../investors/competitor-logos/samsungpay.jpeg}} 311 \end{textblock*} 312 \begin{textblock*}{1cm}(9.5cm,6.3cm) % {block width} (coords) 313 {\includegraphics[width=\textwidth]{../investors/competitor-logos/android_pay.png}} 314 \end{textblock*} 315 \vfill 316 \end{frame} 317 318 319 \begin{frame}{Predicting the Future} 320 \begin{itemize} 321 \item Google and Apple will be your bank and run your payment system 322 \item They can target advertising based on your purchase history, location and 323 your ability to pay 324 \item They will provide more usable, faster and broadly available 325 payment solutions; our federated banking system will be history 326 % just like SMTP is now Gmail. 327 \item After they dominate the payment sector, they will start to charge fees 328 befitting their oligopoly size 329 \item Competitors and vendors not aligning with their corporate ``values'' 330 will be excluded by policy and go bankrupt 331 \item The imperium will have another major tool for its financial warfare 332 \end{itemize} 333 \end{frame} 334 335 336 \begin{frame}{Central Bank Digital Currency?} 337 Speech by Augustin Carstens, Bank of International Settlements (October 2020) on the difference between Central Bank Digital Currencies and cash. 338 \begin{center} 339 \movie[height = 0.5\paperheight, poster, showcontrols]{Central Bank Digital Currency vs. Cash} 340 {bis-cbdc.mp4} 341 342 {\tiny 343 \url{https://www.youtube.com/watch?v=R_E4Uu7ycqE} (10'2020)} 344 \end{center} 345 \end{frame} 346 347 348 349 \begin{frame}{The Emergency Act of Canada} 350 Speech by Premier Kenney, Alberta, February 2022. 351 \begin{center} 352 \movie[height = 0.5\paperheight, poster, showcontrols]{The Emergency Act of Canada} 353 {emergencyact.mp4} 354 355 {\tiny \url{https://www.youtube.com/watch?v=NehMAj492SA} (2'2022)} 356 \end{center} 357 \end{frame} 358 359 360 \section{GNU Taler: Introduction} 361 362 \begin{frame} 363 \vfill 364 \begin{center} 365 {\bf GNU Taler: Introduction} 366 \end{center} 367 \vfill 368 \end{frame} 369 370 371 \begin{frame}{GNU Taler~\cite{taler2016space,DBLP:phd/hal/Dold19,cbdc2021chaum}} 372 \vfill 373 \begin{center} 374 {\huge {\bf Digital} cash, made \textbf{socially responsible}.} 375 \end{center} 376 \vfill 377 \begin{center} 378 \includegraphics[scale=0.3]{taler-logo-2021-inkscape.pdf} 379 \end{center} 380 \vfill 381 \begin{center} 382 Privacy-Preserving, Practical, Taxable, Free Software, Efficient 383 \end{center} 384 \vfill 385 \vfill 386 \ % 387 \end{frame} 388 389 390 \begin{frame}{What is Taler?} 391 \framesubtitle{\url{https://taler.net/en/features.html}} \noindent 392 Taler is 393 \vfill 394 \begin{itemize} 395 \item a Free/Libre software \emph{payment system} infrastructure project 396 \item ... with a surrounding software ecosystem 397 \item ... and a company (Taler Systems S.A.) and community that wants to deploy it 398 as widely as possible. 399 \end{itemize} 400 \vfill 401 \noindent 402 However, Taler is 403 \begin{itemize} 404 \item \emph{not} a currency or speculative asset 405 \item \emph{not} a long-term store of value 406 \item \emph{not} a network or instance of a system 407 \item \emph{not} based on proof-of-work or proof-of-stake 408 \end{itemize} 409 \end{frame} 410 411 412 \begin{frame}{Design principles} 413 \framesubtitle{https://taler.net/en/principles.html} 414 GNU Taler must ... 415 \begin{enumerate} 416 \item {... be implemented as {\bf free software}.} 417 \item {... protect the {\bf privacy of buyers}.} 418 \item {... enable the state to {\bf tax income} and crack down on 419 illegal business activities.} 420 \item {... prevent payment fraud.} 421 \item {... only {\bf disclose the minimal amount of information 422 necessary}.} 423 \item {... be usable.} 424 \item {... be efficient.} 425 \item {... avoid single points of failure.} 426 \item {... foster {\bf competition}.} 427 \end{enumerate} 428 \end{frame} 429 430 431 \begin{frame} 432 \frametitle{Taler Overview} 433 \begin{center} 434 \begin{tikzpicture} 435 \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em]; 436 \node (origin) at (0,0) {}; 437 \node (exchange) [def,above=of origin,draw]{Exchange}; 438 \node (customer) [def, draw, below left=of origin] {Customer}; 439 \node (merchant) [def, draw, below right=of origin] {Merchant}; 440 \node (auditor) [def, draw, above right=of origin]{Auditor}; 441 % \node (regulator) [def, draw, above=of auditor]{CSSF}; 442 443 \tikzstyle{C} = [color=black, line width=1pt] 444 445 \draw [<-, C] (customer) -- (exchange) node [midway, above, sloped] (TextNode) {withdraw coins}; 446 \draw [<-, C] (exchange) -- (merchant) node [midway, above, sloped] (TextNode) {deposit coins}; 447 \draw [<-, C] (merchant) -- (customer) node [midway, above, sloped] (TextNode) {spend coins}; 448 \draw [<-, C] (exchange) -- (auditor) node [midway, above, sloped] (TextNode) {verify}; 449 % \draw [<-, C] (regulator) -- (auditor) node [midway, above, sloped] (TextNode) {report}; 450 451 \end{tikzpicture} 452 \end{center} 453 \end{frame} 454 455 456 457 \begin{frame} 458 \frametitle{Architecture of Taler} 459 \begin{center} 460 \includegraphics[width=0.8\textwidth]{operations.png} 461 \end{center} 462 \end{frame} 463 464 465 \begin{frame}{Consumer Impact of Taler} 466 \begin{itemize} 467 \item {\bf Convenient:} pay with one click instantly --– in Euro, 468 Dollar, Yen or Bitcoin 469 \item {\bf Friction-free security:} Payments do not require sign-up, 470 login or multi-factor authentication 471 \item {\bf Privacy-preserving:} payment requires/shares no personal information 472 \item {\bf Bank account:} not required 473 \end{itemize} 474 \end{frame} 475 476 477 \begin{frame}{Merchant Impact of Taler} 478 \begin{itemize} 479 \item {\bf Instant clearance:} one-click transactions and instant clearance at par 480 \item {\bf Easy \& compliant:} GDPR \& PCI-DSS compliance-free and without any effort 481 \item {\bf Major profit increase:} efficient protocol $+$ no fraud $=$ extremely low costs 482 \item {\bf 1-click checkout:} without Amazon and without false positives in fraud detection 483 \end{itemize} 484 \end{frame} 485 486 487 \begin{frame}{Usability of Taler} 488 \vfill 489 \begin{center} 490 \url{https://demo.taler.net/} 491 \end{center} 492 \begin{enumerate} 493 \item Install browser extension. 494 \item Visit the {\tt bank.demo.taler.net} to withdraw coins. 495 \item Visit the {\tt shop.demo.taler.net} to spend coins. 496 \end{enumerate} 497 \vfill 498 \end{frame} 499 500 501 \section{Protocol Basics} 502 503 \begin{frame} 504 \vfill 505 \begin{center} 506 {\bf Protocol Basics} 507 \end{center} 508 \vfill 509 \end{frame} 510 511 512 \begin{frame}[plain] 513 \begin{tikzpicture}[remember picture,overlay] 514 \node[anchor=south west, inner sep=0pt] at (current page.south west) {% 515 \movie[height = \paperheight, width = \paperwidth, poster, showcontrols] {BFH Bachelor's thesis video}{cs-movie.mp4}% 516 }; 517 \end{tikzpicture} 518 \end{frame} 519 520 521 \begin{frame}{How does it work?} 522 We use a few ancient constructions: 523 \begin{itemize} 524 \item Cryptographic hash function (1989) 525 \item Blind signature (1983) 526 \item Schnorr signature (1989) 527 \item \sout{Diffie-Hellman key exchange (1976)} Deterministic signatures (1977) % 1977: RSA, 2008: EdDSA 528 \item Cut-and-choose zero-knowledge proof (1985) 529 \end{itemize} 530 But of course we use modern instantiations. 531 \end{frame} 532 533 534 \begin{frame}{Definition: Taxability} 535 We say Taler is taxable because: 536 \begin{itemize} 537 \item Merchant's income is visible from deposits. 538 \item Hash of contract is part of deposit data. 539 \item State can trace income and enforce taxation. 540 \end{itemize}\pause 541 Limitations: 542 \begin{itemize} 543 \item withdraw loophole 544 \item {\em sharing} coins among family and friends 545 \end{itemize} 546 \end{frame} 547 548 549 \begin{frame}{Exchange setup: Create a denomination key (RSA)} 550 \begin{minipage}{6cm} 551 \begin{enumerate} 552 \item Generate random primes $p,q$. 553 \item Compute $n := pq$, $\phi(n) = (p-1)(q-1)$ 554 \item Pick small $e < \phi(n)$ such that 555 $d := e^{-1} \mod \phi(n)$ exists. 556 \item Publish public key $(e,n)$. 557 \end{enumerate} 558 \end{minipage} 559 \begin{minipage}{6cm} 560 \begin{tikzpicture} 561 \tikzstyle{def} = [node distance=1em and 1em, inner sep=0em, outer sep=.3em]; 562 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 563 \node (primes) [draw=none, below = of origin] at (0,0) {$(p, q)$}; 564 \node (seal) [def, draw=none, below left=of primes]{\includegraphics[width=0.15\textwidth]{seal.pdf}}; 565 \node (hammer) [def, draw=none, below right=of primes]{\includegraphics[width=0.15\textwidth]{hammer.pdf}}; 566 567 \tikzstyle{C} = [color=black, line width=1pt] 568 569 \draw [<-, C] (primes) -- (origin) node [midway, above, sloped] (TextNode) {}; 570 \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {}; 571 \draw [<-, C] (hammer) -- (primes) node [midway, above, sloped] (TextNode) {}; 572 \end{tikzpicture} 573 % \includegraphics[width=0.4\textwidth]{seal.pdf} 574 \end{minipage} 575 \end{frame} 576 577 578 \begin{frame}{Merchant: Create a signing key (EdDSA)} 579 \begin{minipage}{6cm} 580 \begin{itemize} 581 \item Generate random number $m \mod o$ as private key 582 \item Compute public key $M := mG$ 583 \end{itemize} 584 \end{minipage} 585 \begin{minipage}{6cm} 586 \begin{tikzpicture} 587 \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em]; 588 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 589 \node (m) [draw=none, below = of origin] at (0,0) {$m$}; 590 \node (seal) [draw=none, below=of m]{M}; 591 \tikzstyle{C} = [color=black, line width=1pt] 592 593 \draw [<-, C] (m) -- (origin) node [midway, above, sloped] (TextNode) {}; 594 \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {}; 595 \end{tikzpicture} 596 \end{minipage} 597 \parbox[t]{3cm}{{\bf Capability:} $m \Rightarrow$ } 598 \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{merchant-sign.pdf}} 599 \end{frame} 600 601 602 \begin{frame}{Customer: Create a planchet (EdDSA)} 603 \begin{minipage}{8cm} 604 \begin{itemize} 605 \item Generate random number $c \mod o$ as private key 606 \item Compute public key $C := cG$ 607 \end{itemize} 608 \end{minipage} 609 \begin{minipage}{4cm} 610 \begin{tikzpicture} 611 \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em]; 612 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 613 \node (c) [draw=none, below = of origin] at (0,0) {$c$}; 614 \node (planchet) [draw=none, below=of c]{\includegraphics[width=0.4\textwidth]{planchet.pdf}}; 615 \tikzstyle{C} = [color=black, line width=1pt] 616 617 \draw [<-, C] (c) -- (origin) node [midway, above, sloped] (TextNode) {}; 618 \draw [<-, C] (planchet) -- (c) node [midway, above, sloped] (TextNode) {}; 619 \end{tikzpicture} 620 \end{minipage} 621 \parbox[t]{3cm}{{\bf Capability:} $c \Rightarrow$ } 622 \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{planchet-sign.pdf}} 623 \end{frame} 624 625 626 \begin{frame}{Customer: Blind planchet (RSA)} 627 \begin{minipage}{6cm} 628 \begin{enumerate} 629 \item Obtain public key $(e,n)$ 630 \item Compute $f := FDH(C)$, $f < n$. 631 \item Generate random blinding factor $b \in \mathbb Z_n$ 632 \item Transmit $f' := f b^e \mod n$ 633 \end{enumerate} 634 \end{minipage} 635 \begin{minipage}{6cm} 636 \begin{tikzpicture} 637 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 638 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 639 \node (b) [def, draw=none, below = of origin] at (0,-0.2) {$b$}; 640 \node (blinded) [def, draw=none, below right=of b]{\includegraphics[width=0.2\textwidth]{blinded.pdf}}; 641 \node (planchet) [def, draw=none, above right=of blinded]{\includegraphics[width=0.15\textwidth]{planchet.pdf}}; 642 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 643 \tikzstyle{C} = [color=black, line width=1pt] 644 645 \draw [<-, C] (b) -- (origin) node [midway, above, sloped] (TextNode) {}; 646 \draw [<-, C] (blinded) -- (planchet) node [midway, above, sloped] (TextNode) {}; 647 \draw [<-, C] (blinded) -- (b) node [midway, above, sloped] (TextNode) {}; 648 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 649 \end{tikzpicture} 650 \end{minipage} 651 \end{frame} 652 653 654 \begin{frame}{Exchange: Blind sign (RSA)} 655 \begin{minipage}{6cm} 656 \begin{enumerate} 657 \item Receive $f'$. 658 \item Compute $s' := f'^d \mod n$. 659 \item Send signature $s'$. 660 \end{enumerate} 661 \end{minipage} 662 \begin{minipage}{6cm} 663 \begin{tikzpicture} 664 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 665 \node (hammer) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{hammer.pdf}}; 666 \node (signed) [def, draw=none, below left=of hammer]{\includegraphics[width=0.2\textwidth]{sign.pdf}}; 667 \node (blinded) [def, draw=none, above left=of signed]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 668 \node (customer) [node distance=4em and 0.5em, draw, below =of signed]{Customer}; 669 \tikzstyle{C} = [color=black, line width=1pt] 670 671 \draw [<-, C] (signed) -- (hammer) node [midway, above, sloped] (TextNode) {}; 672 \draw [<-, C] (signed) -- (blinded) node [midway, above, sloped] (TextNode) {}; 673 \draw [<-, C] (customer) -- (signed) node [midway, above, sloped] (TextNode) {{\small transmit}}; 674 \end{tikzpicture} 675 \end{minipage} 676 \end{frame} 677 678 679 \begin{frame}{Customer: Unblind coin (RSA)} 680 \begin{minipage}{6cm} 681 \begin{enumerate} 682 \item Receive $s'$. 683 \item Compute $s := s' b^{-1} \mod n$ % \\ 684 % ($(f')^d = (f b^e)^d = f^d b$). 685 \end{enumerate} 686 \end{minipage} 687 \begin{minipage}{6cm} 688 \begin{tikzpicture} 689 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 690 \node (b) [def, draw=none] at (0,0) {$b$}; 691 \node (coin) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 692 \node (signed) [def, draw=none, above left=of coin]{\includegraphics[width=0.15\textwidth]{sign.pdf}}; 693 \tikzstyle{C} = [color=black, line width=1pt] 694 695 \draw [<-, C] (coin) -- (b) node [midway, above, sloped] (TextNode) {}; 696 \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {}; 697 \end{tikzpicture} 698 \end{minipage} 699 \end{frame} 700 701 702 \begin{frame}{Customer: Build shopping cart} 703 \begin{center} 704 \begin{tikzpicture} 705 \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em]; 706 \node (origin) [draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{cart.pdf}}; 707 \node (merchant) [node distance=4em and 0.5em, draw, below =of origin]{\includegraphics[width=0.15\textwidth]{shop.pdf}}; 708 \tikzstyle{C} = [color=black, line width=1pt]; 709 \draw [<-, C] (merchant) -- (origin) node [midway, right] (TextNode) {{\small transmit}}; 710 \end{tikzpicture} 711 \end{center} 712 \end{frame} 713 714 715 \begin{frame}{Merchant: Propose contract (EdDSA)} 716 \begin{minipage}{6cm} 717 \begin{enumerate} 718 \item Complete proposal $D$. 719 \item Send $D$, $EdDSA_m(D)$ 720 \end{enumerate} 721 \end{minipage} 722 \begin{minipage}{6cm} 723 \begin{tikzpicture} 724 \tikzstyle{def} = [node distance=2em and 0.5em, inner sep=0em, outer sep=.3em]; 725 \node (cart) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{cart.pdf}}; 726 \node (proposal) [def, draw=none, below right=of cart]{\includegraphics[width=0.3\textwidth]{merchant_propose.pdf}}; 727 \node (customer) [node distance=4em and 0.5em, draw, below =of proposal]{Customer}; 728 \tikzstyle{C} = [color=black, line width=1pt]; 729 \node (sign) [def, draw=none, above right=of proposal] {$m$}; 730 \tikzstyle{C} = [color=black, line width=1pt] 731 732 \draw [<-, C] (proposal) -- (sign) node [midway, above, sloped] (TextNode) {}; 733 \draw [<-, C] (proposal) -- (cart) node [midway, above, sloped] (TextNode) {}; 734 \draw [<-, C] (customer) -- (proposal) node [midway, right] (TextNode) {{\small transmit}}; 735 \end{tikzpicture} 736 \end{minipage} 737 \end{frame} 738 739 740 \begin{frame}{Customer: Spend coin (EdDSA)} 741 \begin{minipage}{6cm} 742 \begin{enumerate} 743 \item Receive proposal $D$, $EdDSA_m(D)$. 744 \item Send $s$, $C$, $EdDSA_c(D)$ 745 \end{enumerate} 746 \end{minipage} 747 \begin{minipage}{6cm} 748 \begin{tikzpicture} 749 \tikzstyle{def} = [node distance=1.5em and 0.4em, inner sep=0em, outer sep=.3em]; 750 \node (proposal) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{merchant_propose.pdf}}; 751 \node (contract) [def, draw=none, below right=of cart]{\includegraphics[width=0.3\textwidth]{contract.pdf}}; 752 \node (c) [def, draw=none, above=of contract] {$c$}; 753 \node (merchant) [node distance=4em and 0.5em, draw, below=of contract]{Merchant}; 754 \node (coin) [def, draw=none, right=of contract]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 755 \tikzstyle{C} = [color=black, line width=1pt] 756 757 \draw [<-, C] (contract) -- (c) node [midway, above, sloped] (TextNode) {}; 758 \draw [<-, C] (contract) -- (proposal) node [midway, above, sloped] (TextNode) {}; 759 \draw [<-, C] (merchant) -- (contract) node [midway, above, sloped] (TextNode) {{\small transmit}}; 760 \draw [<-, C] (merchant) -- (coin) node [midway, right] (TextNode) {{\small transmit}}; 761 \end{tikzpicture} 762 \end{minipage} 763 \end{frame} 764 765 766 \begin{frame}{Merchant and Exchange: Verify coin (RSA)} 767 \begin{minipage}{6cm} 768 \begin{equation*} 769 s^e \stackrel{?}{\equiv} FDH(C) \mod n 770 \end{equation*} 771 \end{minipage} 772 \begin{minipage}{6cm} 773 \begin{minipage}{0.2\textwidth} 774 \includegraphics[width=\textwidth]{coin.pdf} 775 \end{minipage} 776 $\stackrel{?}{\Leftrightarrow}$ 777 \begin{minipage}{0.2\textwidth} 778 \includegraphics[width=\textwidth]{seal.pdf} 779 \end{minipage} 780 \end{minipage} 781 \vfill 782 The exchange does not only verify the signature, but also 783 checks that the coin was not double-spent. 784 \vfill 785 \pause 786 \begin{center} 787 {\bf Taler is an online payment system.} 788 \end{center} 789 \vfill 790 \end{frame} 791 792 \input refresh.tex 793 794 795 \section{Component Zoo} 796 797 \begin{frame} 798 \vfill 799 \begin{center} 800 {\bf Component Zoo} 801 \end{center} 802 \vfill 803 \end{frame} 804 805 806 \begin{frame}{The Taler Software Ecosystem: Overview} 807 \framesubtitle{\url{https://taler.net/en/docs.html}} 808 Taler is based on modular components that work together to provide a 809 complete payment system: 810 \vfill 811 \begin{itemize} 812 \item {\bf Exchange:} Service provider for digital cash 813 \begin{itemize} 814 \item Core exchange software (cryptography, database) 815 \item Air-gapped key management, real-time {\bf auditing} 816 \item {\bf libeufin}: Modular integration with banking systems 817 \item {\bf challenger}: KYC service with OAuth 2.0 API 818 \end{itemize} 819 \item {\bf Merchant:} Integration service for existing businesses 820 \begin{itemize} 821 \item Core merchant backend software (cryptography, database) 822 \item {\bf Back-office interface} for staff 823 \item {\bf Frontend integration} (E-commerce, Point-of-sale) 824 \end{itemize} 825 \item {\bf Wallet:} Consumer-controlled applications for e-cash 826 \begin{itemize} 827 \item Multi-platform wallet software (for browsers \& mobile phones) 828 \item Wallet backup storage providers ({\bf sync} \& {\bf Anastasis}) 829 \end{itemize} 830 \end{itemize} 831 \end{frame} 832 833 834 \begin{frame}{Taler Exchange} 835 The {\bf Exchange} is the core logic of the payment system. 836 837 \begin{itemize} 838 \item One exchange at minimum must be operated per currency 839 \item Offers a REST API for merchants and customers 840 \item Uses several helper processes for configuration and to 841 interact with RTGS and cryptography 842 \item KYC support via OAuth 2.0, KycAID or Persona APIs 843 \end{itemize} 844 \end{frame} 845 846 847 \begin{frame}{Taler Merchant} 848 The {\bf Merchant} is the software run by merchants to accept\\ 849 GNU Taler payments. 850 851 \begin{minipage}{6cm} 852 \begin{itemize} 853 \item REST API for integration with e-commerce 854 \item SPA provides Web interface for administration 855 \item Features include: 856 \begin{itemize} 857 \item Multi-tenant support 858 \item Refunds 859 \item Templates 860 \item Webhooks 861 \item Inventory management (optional) 862 \end{itemize} 863 \end{itemize} 864 \end{minipage} 865 \begin{minipage}{5cm} 866 \includegraphics[width=5cm]{screenshots/merchant-spa-settings} 867 \end{minipage} 868 \end{frame} 869 870 871 \begin{frame}{Taler Wallet} 872 The {\bf Wallet} is the software run by consumers to store 873 their digital cash and authorize transactions. 874 875 \begin{minipage}{8cm} 876 \begin{itemize} 877 \item {\bf wallet-core} is the logic shared by all interfaces 878 \item Works on Android, F-Droid, iOS, Ubuntu Touch, 879 WebExtension (Chrome, Chromium, Firefox, etc.) 880 \item Features include: 881 \begin{itemize} 882 \item Multi-currency support 883 \item Wallet-to-wallet payments (NFC or QR code) 884 \item CRDT-like data model 885 \end{itemize} 886 \end{itemize} 887 \end{minipage} 888 \begin{minipage}{3cm} 889 \includegraphics[width=3cm]{screenshots/Screenshot_20230225-103520.png} 890 \end{minipage} 891 \end{frame} 892 893 894 \begin{frame}{Taler Auditor} 895 The {\bf Auditor} is the software run by an independent auditor 896 to validate the operation of an Exchange. 897 898 \begin{itemize} 899 \item REST API for additional report inputs by merchants (optional) 900 \item Secure database replication logic 901 \end{itemize} 902 \end{frame} 903 904 905 \begin{frame}{libeufin-nexus} 906 libeufin-nexus allows Taler components to interact with a core banking system. It: 907 908 \begin{itemize} 909 \item provides an implementation of the Wire Gateway for the exchange 910 \item supports EBICS 2.5 and 3.0 911 \item other APIs such as FinTS or PSD2-style XS2A APIs can be added 912 without requiring changes to the Exchange 913 \item was tested with GLS Bank (DE) and Postfinance (CH) accounts and real EUR/CHF 914 \end{itemize} 915 \end{frame} 916 917 918 \begin{frame}{libeufin-bank} 919 libeufin-bank implements a standalone bank with a Web interface. It: 920 921 \begin{itemize} 922 \item provides the Taler Core Bank API for RESTful online banking 923 using a Web interface (with multi-factor authentication) 924 \item includes a Taler Wire Gateway for the exchange 925 \item offers the Taler Bank Integration API to allow wallets 926 to easily withdraw digital cash 927 \item optionally provides the Taler Conversion Info API for currency 928 conversion between fiat and regional currencies 929 \item optionally integrates with libeufin-nexus to interact with 930 a core banking system 931 \end{itemize} 932 \end{frame} 933 934 935 \begin{frame}{Challenger} 936 Challenger allows clients to obtain validated address (KYC) data about 937 users: 938 939 \begin{itemize} 940 \item Customizable Web-based process for address validation 941 \item Can validate phone numbers, e-mail addresses or physical mailing addresses 942 \item Provides an exchange-compatible OAuth 2.0 API 943 \end{itemize} 944 \end{frame} 945 946 947 \begin{frame}{Depolymerization} 948 Depolymerization is a bridge between GNU Taler and blockchains, 949 making Taler a layer 2 system for crypto-currencies (like Lightning). 950 951 \begin{itemize} 952 \item provides an implementation of the Wire Gateway for the exchange 953 \item Works on top of Bitcoin and Ethereum 954 crypto-currencies, with the DLTs as the ``RTGS'' 955 \item Provides same API to Exchange as libeufin-nexus 956 \end{itemize} 957 \end{frame} 958 959 960 \begin{frame}{Point-of-Sale App for Android} 961 \begin{minipage}{7cm} 962 \begin{itemize} 963 \item Allows merchant to generate orders against Taler backend 964 and display QR code to enable customer to pay in person 965 \item Patterned after ViewTouch restaurant UI 966 \end{itemize} 967 \end{minipage} 968 \begin{minipage}{4cm} 969 \includegraphics[width=4cm]{screenshots/Screenshot_20230224-194112.jpg} 970 \includegraphics[width=4cm]{screenshots/Screenshot_20230224-194119.jpg} 971 \includegraphics[width=4cm]{screenshots/Screenshot_20230224-195348.jpg} 972 \end{minipage} 973 \end{frame} 974 975 976 \begin{frame}{Payment plugins} 977 \begin{minipage}{5cm} 978 \includegraphics[width=4cm]{screenshots/woocommerce-cart.png} 979 \includegraphics[width=4cm]{screenshots/pretix.png} 980 \end{minipage} 981 \begin{minipage}{5cm} 982 \begin{itemize} 983 \item Pretix, ticket sales system 984 \item Joomla!, an e-commerce platform 985 \item WooCommerce, an e-commerce solution on top of WordPress 986 \item DrupalCommerce, an e-commerce solution on top of Drupal 987 \end{itemize} 988 \end{minipage} 989 \end{frame} 990 991 992 \section{Offline payments} 993 994 \begin{frame} 995 \vfill 996 \begin{center} 997 {\bf Offline payments} 998 \end{center} 999 \vfill 1000 \end{frame} 1001 1002 1003 \begin{frame}[fragile]{Digitaler Euro --- Offline?} 1004 Many central banks today demand offline capabilities for CBDCs. 1005 \vfill \pause 1006 \begin{figure} 1007 \def\svgwidth{0.8\textwidth} 1008 1009 \begingroup% 1010 \makeatletter% 1011 \providecommand\color[2][]{% 1012 \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% 1013 \renewcommand\color[2][]{}% 1014 }% 1015 \providecommand\transparent[1]{% 1016 \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% 1017 \renewcommand\transparent[1]{}% 1018 }% 1019 \providecommand\rotatebox[2]{#2}% 1020 \newcommand*\fsize{\dimexpr\f@size pt\relax}% 1021 \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% 1022 \ifx\svgwidth\undefined% 1023 \setlength{\unitlength}{345bp}% 1024 \ifx\svgscale\undefined% 1025 \relax% 1026 \else% 1027 \setlength{\unitlength}{\unitlength * \real{\svgscale}}% 1028 \fi% 1029 \else% 1030 \setlength{\unitlength}{\svgwidth}% 1031 \fi% 1032 \global\let\svgwidth\undefined% 1033 \global\let\svgscale\undefined% 1034 \makeatother% 1035 \begin{picture}(1,0.53623188)% 1036 \lineheight{1}% 1037 \setlength\tabcolsep{0pt}% 1038 \put(0,0){\includegraphics[width=\unitlength,page=1]{offline-timeline.pdf}}% 1039 \put(0.10624514,0.04914349){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Feb 2017 \cite{arm2017boomerang}\end{tabular}}}}% 1040 \put(0,0){\includegraphics[width=\unitlength,page=2]{offline-timeline.pdf}}% 1041 \put(0.28309276,0.44884928){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Mar, Jun 2020 \cite{intel2020lvi,intel2020sgaxe}\end{tabular}}}}% 1042 \put(0,0){\includegraphics[width=\unitlength,page=3]{offline-timeline.pdf}}% 1043 \put(0.18177392,0.17262607){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Aug 2017 \cite{arm2017clkscrew}\end{tabular}}}}% 1044 \put(0,0){\includegraphics[width=\unitlength,page=4]{offline-timeline.pdf}}% 1045 \put(0.08024638,0.44884927){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Dec 2017 \cite{samsung2017knox}\end{tabular}}}}% 1046 \put(0,0){\includegraphics[width=\unitlength,page=5]{offline-timeline.pdf}}% 1047 \put(0.02512174,0.36103189){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny May, Aug 2016 \cite{arm2016alias,arm2016cache,zhang2016truspy}\end{tabular}}}}% 1048 \put(0,0){\includegraphics[width=\unitlength,page=6]{offline-timeline.pdf}}% 1049 \put(0.34119422,0.08566952){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Aug 2019 \cite{amd2019}\end{tabular}}}}% 1050 \put(0,0){\includegraphics[width=\unitlength,page=7]{offline-timeline.pdf}}% 1051 \put(0.3956406,0.36131883){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Oct 2019 \cite{sim2019}\end{tabular}}}}% 1052 \put(0,0){\includegraphics[width=\unitlength,page=8]{offline-timeline.pdf}}% 1053 \put(0.38164733,0.17343635){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Jun 2020 \cite{smartcard2020}\end{tabular}}}}% 1054 \put(0,0){\includegraphics[width=\unitlength,page=9]{offline-timeline.pdf}}% 1055 \put(0.59564059,0.44827535){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Sep 2022 \cite{atecc2022}\end{tabular}}}}% 1056 \put(0,0){\includegraphics[width=\unitlength,page=10]{offline-timeline.pdf}}% 1057 \put(0.55650392,0.05335936){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Mar 2023 \cite{tpm2023}\end{tabular}}}}% 1058 \put(0,0){\includegraphics[width=\unitlength,page=11]{offline-timeline.pdf}}% 1059 \put(0.80271684,0.06728262){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Sep 2024 \cite{infineon2024}\end{tabular}}}}% 1060 \put(0,0){\includegraphics[width=\unitlength,page=12]{offline-timeline.pdf}}% 1061 \put(0.59062556,0.17319998){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Feb 2023 \cite{intel2023sgx}\end{tabular}}}}% 1062 \put(0,0){\includegraphics[width=\unitlength,page=13]{offline-timeline.pdf}}% 1063 \put(0.78984349,0.17291304){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Oct 2024 \cite{amd2025}\end{tabular}}}}% 1064 \put(0,0){\includegraphics[width=\unitlength,page=14]{offline-timeline.pdf}}% 1065 \put(0.7963995,0.44796104){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Aug 2023 \cite{arm2023}\end{tabular}}}}% 1066 \put(0,0){\includegraphics[width=\unitlength,page=15]{offline-timeline.pdf}}% 1067 \put(0.59916521,0.36103188){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Apr 2023 \cite{amd2023}\end{tabular}}}}% 1068 \put(0,0){\includegraphics[width=\unitlength,page=16]{offline-timeline.pdf}}% 1069 \put(0.79631301,0.36103188){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny Aug 2024 \cite{intel2024}\end{tabular}}}}% 1070 \put(0,0){\includegraphics[width=\unitlength,page=17]{offline-timeline.pdf}}% 1071 \put(0.123203,0.24410952){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny 2015\end{tabular}}}}% 1072 \put(0.5000146,0.24410952){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny 2020\end{tabular}}}}% 1073 \put(0.87682623,0.24410952){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny 2025\end{tabular}}}}% 1074 \put(0,0){\includegraphics[width=\unitlength,page=18]{offline-timeline.pdf}}% 1075 \end{picture}% 1076 \endgroup% 1077 \end{figure} 1078 \end{frame} 1079 1080 1081 \begin{frame}{A Scenario} 1082 {God is offline, but customer pays online} 1083 \begin{center} 1084 \includegraphics[height=0.4\textwidth]{shrine.jpg} 1085 \end{center} 1086 \end{frame} 1087 1088 \begin{frame}{Typical Payment Process}{All equivalent: Twint, PayPal, AliPay, PayTM} 1089 \begin{center} 1090 \movie[%scale=0.6, 1091 autostart, 1092 poster] 1093 { 1094 \includegraphics[height=0.3\textwidth,width=0.4\textwidth]{white.png} 1095 } 1096 {twint.mkv} 1097 1098 {\tiny (C) Twint, 2023} 1099 \end{center} 1100 \end{frame} 1101 1102 1103 \begin{frame}{Secure Payment ...}{Everything green?} 1104 \begin{center} 1105 \includegraphics[height=0.3\textwidth]{paymentTwint-screen_25.png} 1106 \end{center} 1107 \end{frame} 1108 1109 \begin{frame}{Exploit ``Code''}{Programming optional} 1110 \begin{center} 1111 \includegraphics[height=0.3\textwidth]{paymentTwint-screen.png} 1112 \end{center} 1113 \end{frame} 1114 1115 \begin{frame}{``Customers'' {\em love} Twint ...}{Daily non-business for shops} 1116 \begin{center} 1117 \includegraphics[height=0.3\textwidth]{paymentTwint-screen_50.png} 1118 \end{center} 1119 \end{frame} 1120 1121 1122 \begin{frame}{Partially Offline Payments with GNU Taler~\cite{suerf2023huang}} 1123 1124 \begin{center} 1125 \resizebox{8cm}{6cm}{ 1126 \begin{sequencediagram} 1127 \newinst{pos}{\shortstack{PoS \\ 1128 \\ \begin{tikzpicture} 1129 \node [fill=gray!20,draw=black,thick ,align=center] {PoS key \\ PoS ID}; 1130 \end{tikzpicture} 1131 }} 1132 \newinst[2]{customer}{\shortstack{Customer \\ 1133 \\ \begin{tikzpicture} 1134 \node [fill=gray!20,draw=black,thick ,align=center] {Digital \\ Wallet}; 1135 \end{tikzpicture} 1136 }} 1137 \newinst[2]{backend}{\shortstack{Merchant Backend \\ 1138 \\ \begin{tikzpicture}[shape aspect=.5] 1139 \tikzset{every node/.style={cylinder, shape border rotate=90, draw,fill=gray!25}} 1140 \node at (1.5,0) {\shortstack{{\tiny PoS key} \\ {\tiny PoS ID}}}; 1141 \end{tikzpicture} 1142 }} 1143 \postlevel 1144 \mess[0]{pos}{PoS ID}{customer} 1145 \begin{sdblock}{optional}{} 1146 \begin{callself}{customer}{Amount}{} 1147 \end{callself} 1148 \end{sdblock} 1149 \prelevel 1150 \prelevel 1151 \prelevel 1152 \prelevel 1153 \prelevel 1154 \begin{sdblock}{optional}{} 1155 \begin{callself}{pos}{Amount}{} 1156 \end{callself} 1157 \end{sdblock} 1158 \postlevel 1159 \mess[0]{customer}{PoS ID, [Amount]?}{backend} 1160 \mess[0]{backend}{Contract}{customer} 1161 \postlevel 1162 \mess[0]{customer}{Payment}{backend} 1163 \begin{callself}{pos}{OTP(PoS key)}{} 1164 \end{callself} 1165 \prelevel 1166 \prelevel 1167 \begin{callself}{backend}{OTP(PoS key)}{} 1168 \end{callself} 1169 \mess[0]{backend}{OTP code}{customer} 1170 \postlevel 1171 \mess[0]{customer}{OTP code}{pos} 1172 \end{sequencediagram} 1173 } 1174 \end{center} 1175 \end{frame} 1176 1177 1178 1179 \section{Programmable money: Age restrictions} 1180 1181 \begin{frame} 1182 \vfill 1183 \begin{center} 1184 {\bf Programmable money: Age restrictions}~\cite{esorics2022age} 1185 \end{center} 1186 \vfill 1187 \end{frame} 1188 1189 1190 \begin{frame}{Age restriction in E-commerce} 1191 1192 \begin{description} 1193 \item[Problem:]~\\[1em] 1194 Verification of minimum age requirements in e-commerce.\\[2em] 1195 1196 \item[Common solutions:] 1197 1198 \begin{tabular}{l<{\onslide<2->}c<{\onslide<3->}cr<{\onslide}} 1199 & \blue{Privacy} & \tikzmark{topau} \blue{Ext. authority}& \\[\medskipamount] 1200 1. ID Verification & bad & required & \\[\medskipamount] 1201 2. Restricted Accounts & bad & required & \\[\medskipamount] 1202 3. Attribute-based & good & required &\tikzmark{bottomau} \\[\medskipamount] 1203 \end{tabular} 1204 \end{description} 1205 1206 \uncover<4->{ 1207 \begin{tikzpicture}[overlay,remember picture] 1208 \draw[orange,thick,rounded corners] 1209 ($(pic cs:topau) +(0,0.5)$) rectangle ($(pic cs:bottomau) -(0.3, 0.2)$); 1210 \end{tikzpicture} 1211 \begin{center} 1212 \bf Principle of Subsidiarity is violated 1213 \end{center} 1214 } 1215 \end{frame} 1216 1217 1218 \begin{frame}{Principle of Subsidiarity} 1219 \begin{center} \Large 1220 Functions of government---such as granting and restricting 1221 rights---should be performed\\ 1222 {\it at the lowest level of authority possible},\\ 1223 as long as they can be performed {\it adequately}. 1224 \end{center} 1225 \vfill 1226 \uncover<2->{ 1227 For age-restriction, the lowest level of authority is:\\ 1228 \begin{center}\Large 1229 Parents, guardians and caretakers 1230 \end{center} 1231 } 1232 \end{frame} 1233 1234 1235 \begin{frame}{Age restriction design for GNU Taler} 1236 Design and implementation of an age restriction scheme\\ 1237 with the following goals: 1238 1239 \begin{enumerate} 1240 \item It ties age restriction to the \textbf{ability to pay} (not to ID's) 1241 \item maintains \textbf{anonymity of buyers} 1242 \item maintains \textbf{unlinkability of transactions} 1243 \item aligns with \textbf{principle of subsidiartiy} 1244 \item is \textbf{practical and efficient} 1245 \end{enumerate} 1246 1247 \end{frame} 1248 1249 1250 \begin{frame}{Age restriction} 1251 \framesubtitle{Assumptions and scenario} 1252 1253 \begin{columns} 1254 \column{7.5cm} 1255 \begin{itemize} 1256 \item<1-> Assumption: Checking accounts are under control of eligible adults/guardians. 1257 \item<2-> \textit{Guardians} \textbf{commit} to an maximum age 1258 \item<3-> \textit{Minors} \textbf{attest} their adequate age 1259 \item<4-> \textit{Merchants} \textbf{verify} the attestations 1260 \item<5-> Minors \textbf{derive} age commitments from existing ones 1261 \item<6-> \textit{Exchanges} \textbf{compare} the derived age commitments 1262 \end{itemize} 1263 \column{5cm} 1264 \uncover<7-> 1265 { 1266 \begin{center} 1267 \fontsize{7pt}{7pt}\selectfont 1268 \begin{tikzpicture}[scale=.5] 1269 \node[circle,minimum size=15pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$}; 1270 \node[circle,minimum size=15pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1271 \node[circle,minimum size=15pt,fill=black!15] at ( 0:4) (Merchant) {$\Merchant$}; 1272 \node[circle,minimum size=15pt,fill=blue!15] at (140:3) (Guardian) {$\Guardian$}; 1273 1274 \draw[->] (Guardian) to [out=50,in=130, loop] node[above] 1275 {$\Commit$} (Guardian); 1276 \draw[->,blue] (Client) to [out=-125,in=-190, loop] node[below,left] 1277 {\blue{$\Attest$}} (Client); 1278 \draw[->,blue] (Merchant) to [out=50,in=130, loop] node[above] 1279 {\blue{$\Verify$}} (Merchant); 1280 \draw[->,orange] (Client) to [out=-35,in=-100, loop] node[below] 1281 {\orange{$\Derive$}} (Client); 1282 \draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above] 1283 {\orange{$\Compare$}} (Exchange); 1284 1285 \draw[orange,|->] (Client) to node[sloped,above,align=left] 1286 {\orange{\scriptsize }} (Exchange); 1287 \draw[blue,|->] (Client) to node[sloped, above] 1288 {\blue{\scriptsize }} (Merchant); 1289 \draw[,|->] (Guardian) to node[above,sloped,align=left] 1290 {{\scriptsize }} (Client); 1291 \end{tikzpicture} 1292 \end{center} 1293 } 1294 \end{columns} 1295 \vfill 1296 \end{frame} 1297 1298 1299 \begin{frame}{Formal Function Signatures} 1300 \small 1301 Searching for functions \uncover<2->{with the following signatures} 1302 \begin{align*} 1303 &\bf \Commit\uncover<2->{: 1304 &(\age, \omega) &\mapsto (\commitment, \pruf) 1305 &\scriptstyle \N_\Age \times \Omega &\scriptstyle \to \Commitments\times\Proofs, 1306 } 1307 \\ 1308 &\bf \Attest\uncover<3->{: 1309 &(\minage, \commitment, \pruf) &\mapsto \attest 1310 &\scriptstyle \N_\Age\times\Commitments\times\Proofs &\scriptstyle \to \Attests \cup \{\Nil\}, 1311 } 1312 \\ 1313 &\bf \Verify\uncover<4->{: 1314 &(\minage, \commitment, \attest) &\mapsto b 1315 &\scriptstyle \N_\Age\times\Commitments\times\Attests &\scriptstyle \to \Z_2, 1316 } 1317 \\ 1318 &\bf \Derive\uncover<5->{: 1319 &(\commitment, \pruf, \omega) &\mapsto (\commitment', \pruf', \blinding) 1320 &\scriptstyle \Commitments\times\Proofs\times\Omega &\scriptstyle \to \Commitments\times\Proofs\times\Blindings, 1321 } 1322 \\ 1323 &\bf \Compare\uncover<6->{: 1324 &(\commitment, \commitment', \blinding) &\mapsto b 1325 &\scriptstyle \Commitments\times\Commitments\times\Blindings &\scriptstyle \to \Z_2, 1326 } 1327 \end{align*} 1328 \uncover<7->{ 1329 with $\Omega, \Proofs, \Commitments, \Attests, \Blindings$ 1330 sufficiently large sets.\\[1em] 1331 Basic and security requirements are defined later.\\[2em] 1332 } 1333 1334 \scriptsize 1335 \uncover<2->{ 1336 Mnemonics:\\ 1337 $\Commitments=$ \textit{c$\Commitments$mmitments}, 1338 $\commitment=$ \textit{Q-mitment} (commitment), 1339 $\Proofs=$ \textit{$\Proofs$roofs}, 1340 } 1341 \uncover<3->{ 1342 $\pruf=$ \textit{$\pruf$roof},\\ 1343 $\Attests=$ \textit{a$\Attests$testations}, 1344 $\attest=$ \textit{a$\attest$testation}, 1345 } 1346 \uncover<5->{ 1347 $\Blindings=$ \textit{$\Blindings$lindings}, 1348 $\blinding=$ \textit{$\blinding$linding}. 1349 } 1350 \end{frame} 1351 1352 \begin{frame}{Age restriction} 1353 \framesubtitle{Naïve scheme} 1354 \begin{center} 1355 \begin{tikzpicture}[scale=.85] 1356 \node[circle,minimum size=20pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$}; 1357 \node[circle,minimum size=20pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1358 \node[circle,minimum size=20pt,fill=black!15] at ( 0:4) (Merchant) {$\Merchant$}; 1359 \node[circle,minimum size=20pt,fill=blue!15] at (140:3) (Guardian) {$\Guardian$}; 1360 1361 \draw[->] (Guardian) to [out=50,in=130, loop] node[above] 1362 {$\Commit$} (Guardian); 1363 \draw[->,blue] (Client) to [out=-125,in=-190, loop] node[below,left] 1364 {\blue{$\Attest$}} (Client); 1365 \draw[->,blue] (Merchant) to [out=50,in=130, loop] node[above] 1366 {\blue{$\Verify$}} (Merchant); 1367 \draw[->,orange] (Client) to [out=-35,in=-100, loop] node[below] 1368 {\orange{$\Derive$}} (Client); 1369 \draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above] 1370 {\orange{$\Compare$}} (Exchange); 1371 1372 \draw[orange,|->] (Client) to node[sloped,above,align=left] 1373 {\orange{\scriptsize }} (Exchange); 1374 \draw[blue,|->] (Client) to node[sloped, above] 1375 {\blue{\scriptsize }} (Merchant); 1376 \draw[,|->] (Guardian) to node[above,sloped,align=left] 1377 {{\scriptsize }} (Client); 1378 \end{tikzpicture} 1379 \end{center} 1380 \end{frame} 1381 1382 \begin{frame}{Achieving Unlinkability} 1383 \begin{columns} 1384 \column{3cm} 1385 \begin{center} 1386 \fontsize{8pt}{9pt}\selectfont 1387 \begin{tikzpicture}[scale=.65] 1388 \node[circle,minimum size=20pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$}; 1389 \node[circle,minimum size=20pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1390 1391 \draw[->,orange] (Client) to [out=-35,in=-100, loop] node[below] 1392 {\orange{$\footnotesize \Derive()$}} (Client); 1393 \draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above] 1394 {\orange{$\footnotesize \Compare()$}} (Exchange); 1395 1396 \draw[orange,|->] (Client) to node[sloped,above,align=left] 1397 {\orange{\tiny \uncover<2->{$(\commitment_i,\commitment_{i+1})$}}} (Exchange); 1398 \end{tikzpicture} 1399 \end{center} 1400 1401 \column{9cm} 1402 Simple use of $\Derive()$ and $\Compare()$ is problematic. 1403 1404 \begin{itemize} 1405 \item<2-> Calling $\Derive()$ iteratively generates sequence 1406 $(\commitment_0, \commitment_1, \dots)$ of commitments. 1407 \item<2-> Exchange calls $\Compare(\commitment_i, \commitment_{i+1}, .)$ 1408 \item[$\implies$]\uncover<3->{\bf Exchange identifies sequence} 1409 \item[$\implies$]\uncover<3->{\bf Unlinkability broken} 1410 \end{itemize} 1411 \end{columns} 1412 \end{frame} 1413 1414 \begin{frame}{Achieving Unlinkability} 1415 Define cut\&choose protocol \orange{$\DeriveCompare$}, 1416 using $\Derive()$ and $\Compare()$.\\[0.5em] 1417 \uncover<2->{ 1418 Sketch: 1419 \small 1420 \begin{enumerate} 1421 \item $\Child$ derives commitments $(\commitment_1,\dots,\commitment_\kappa)$ 1422 from $\commitment_0$ \\ 1423 by calling $\Derive()$ with blindings $(\beta_1,\dots,\beta_\kappa)$ 1424 \item $\Child$ calculates $h_0:=H\left(H(\commitment_1, \beta_1)||\dots||H(\commitment_\kappa, \beta_\kappa)\right)$ 1425 \item $\Child$ sends $\commitment_0$ and $h_0$ to $\Exchange$ 1426 \item $\Exchange$ chooses $\gamma \in \{1,\dots,\kappa\}$ randomly 1427 \item $\Child$ reveals $h_\gamma:=H(\commitment_\gamma, \beta_\gamma)$ and all $(\commitment_i, \beta_i)$, except $(\commitment_\gamma, \beta_\gamma)$ 1428 \item $\Exchange$ compares $h_0$ and 1429 $H\left(H(\commitment_1, \beta_1)||...||h_\gamma||...||H(\commitment_\kappa, \beta_\kappa)\right)$\\ 1430 and evaluates $\Compare(\commitment_0, \commitment_i, \beta_i)$. 1431 \end{enumerate} 1432 \vfill 1433 Note: Scheme is similar to the {\it refresh} protocol in GNU Taler. 1434 } 1435 \end{frame} 1436 1437 \begin{frame}{Achieving Unlinkability} 1438 With \orange{$\DeriveCompare$} 1439 \begin{itemize} 1440 \item $\Exchange$ learns nothing about $\commitment_\gamma$, 1441 \item trusts outcome with $\frac{\kappa-1}{\kappa}$ certainty, 1442 \item i.e. $\Child$ has $\frac{1}{\kappa}$ chance to cheat. 1443 \end{itemize} 1444 \vfill 1445 Note: Still need Derive and Compare to be defined. 1446 \end{frame} 1447 1448 \begin{frame}{Refined scheme} 1449 1450 \begin{tikzpicture}[scale=.8] 1451 \node[circle,minimum size=25pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1452 \node[circle,minimum size=25pt,fill=black!15] at ( 60:5) (Exchange) {$\Exchange$}; 1453 \node[circle,minimum size=25pt,fill=black!15] at ( 0:5) (Merchant) {$\Merchant$}; 1454 \node[circle,minimum size=25pt,fill=blue!15] at (130:3) (Guardian) {$\Guardian$}; 1455 1456 \draw[orange,<->] (Client) to node[sloped,below,align=center] 1457 {\orange{$\DeriveCompare$}} (Exchange); 1458 \draw[blue,->] (Client) to node[sloped, below] 1459 {\blue{$(\attest_\minage, \commitment)$}} (Merchant); 1460 1461 \draw[->] (Guardian) to [out=150,in=70, loop] node[above] 1462 {$\Commit(\age)$} (Guardian); 1463 \draw[->] (Guardian) to node[below,sloped] 1464 {($\commitment$, $\pruf_\age$)} (Client); 1465 \draw[->,blue] (Client) to [out=-50,in=-130, loop] node[below] 1466 {\blue{$\Attest(\minage, \commitment, \pruf_{\age})$}} (Client); 1467 \draw[->,blue] (Merchant) to [out=-50,in=-130, loop] node[below] 1468 {\blue{$\Verify(\minage, \commitment, \attest_{\minage})$}} (Merchant); 1469 \end{tikzpicture} 1470 \end{frame} 1471 1472 \begin{frame}{Achieving Unlinkability} 1473 \scriptsize 1474 $\DeriveCompare : \Commitments\times\Proofs\times\Omega \to \{0,1\}$\\ 1475 \vfill 1476 $\DeriveCompare(\commitment, \pruf, \omega) =$ 1477 \begin{itemize} 1478 \it 1479 \itemsep0.5em 1480 \item[$\Child$:] 1481 \begin{enumerate} 1482 \scriptsize 1483 \itemsep0.3em 1484 \item for all $i \in \{1,\dots,\kappa\}: 1485 (\commitment_i,\pruf_i,\beta_i) \leftarrow \Derive(\commitment, \pruf, \omega + i)$ 1486 \item $h \leftarrow \Hash\big(\Hash(\commitment_1,\beta_1)\parallel\dots\parallel\Hash(\commitment_\kappa,\beta_\kappa) \big)$ 1487 \item send $(\commitment, h)$ to $\Exchange$ 1488 \end{enumerate} 1489 \item[$\Exchange$:] 1490 \begin{enumerate} 1491 \setcounter{enumi}{3} 1492 \scriptsize 1493 \itemsep0.3em 1494 \item save $(\commitment, h)$ \label{st:hash} 1495 \item $\gamma \drawfrom \{1,\dots ,\kappa\}$ 1496 \item send $\gamma$ to $\Child$ 1497 \end{enumerate} 1498 \item[$\Child$:] 1499 \begin{enumerate} 1500 \setcounter{enumi}{6} 1501 1502 \scriptsize 1503 \itemsep0.3em 1504 \item $h'_\gamma \leftarrow \Hash(\commitment_\gamma, \beta_\gamma)$ 1505 \item $\mathbf{E}_\gamma \leftarrow \big[(\commitment_1,\beta_1),\dots, 1506 (\commitment_{\gamma-1}, \beta_{\gamma-1}), 1507 \Nil, 1508 (\commitment_{\gamma+1}, \beta_{\gamma+1}), 1509 \dots,(\commitment_\kappa, \beta_\kappa)\big]$ 1510 \item send $(\mathbf{E}_\gamma, h'_\gamma)$ to $\Exchange$ 1511 \end{enumerate} 1512 \item[$\Exchange$:] 1513 \begin{enumerate} 1514 \setcounter{enumi}{9} 1515 \scriptsize 1516 \itemsep0.3em 1517 \item for all $i \in \{1,\dots,\kappa\}\setminus\{\gamma\}: h_i \leftarrow \Hash(\mathbf{E}_\gamma[i])$ 1518 \item if $h \stackrel{?}{\neq} \HashF(h_1\|\dots\|h_{\gamma-1}\|h'_\gamma\|h_{\gamma+1}\|\dots\|h_{\kappa-1})$ return 0 1519 \item for all $i \in \{1,\dots,\kappa\}\setminus\{\gamma\}$: 1520 if $0 \stackrel{?}{=} \Compare(\commitment,\commitment_i, \beta_i)$ return $0$ 1521 \item return 1 1522 \end{enumerate} 1523 \end{itemize} 1524 \end{frame} 1525 1526 \begin{frame}{Basic Requirements} 1527 1528 Candidate functions 1529 \[ (\Commit, \Attest, \Verify, \Derive, \Compare) \] 1530 must first meet \textit{basic} requirements: 1531 1532 \begin{itemize} 1533 \item Existence of attestations 1534 \item Efficacy of attestations 1535 \item Derivability of commitments and attestations 1536 \end{itemize} 1537 \end{frame} 1538 1539 \begin{frame}{Basic Requirements} 1540 \framesubtitle{Formal Details} 1541 1542 \begin{description} 1543 \item[Existence of attestations] 1544 {\scriptsize 1545 \begin{align*} 1546 \Forall_{\age\in\N_\Age \atop \omega \in \Omega}: 1547 \Commit(\age, \omega) =: (\commitment, \pruf) 1548 \implies 1549 \Attest(\minage, \commitment, \pruf) = 1550 \begin{cases} 1551 \attest \in \Attests, \text{ if } \minage \leq \age\\ 1552 \Nil \text{ otherwise} 1553 \end{cases} 1554 \end{align*}} 1555 \item[Efficacy of attestations] 1556 {\scriptsize 1557 \begin{align*} 1558 \Verify(\minage, \commitment, \attest) = \ 1559 \begin{cases} 1560 1, \text{if } \Exists_{\pruf \in \Proofs}: \Attest(\minage, \commitment, \pruf) = \attest\\ 1561 0 \text{ otherwise} 1562 \end{cases} 1563 \end{align*}} 1564 1565 {\scriptsize 1566 \begin{align*} 1567 \forall_{n \leq \age}: \Verify\big(n, \commitment, \Attest(n, \commitment, \pruf)\big) = 1. 1568 \end{align*}} 1569 \item[etc.] 1570 \end{description} 1571 \end{frame} 1572 1573 \begin{frame}{Requirements} 1574 \framesubtitle{Details} 1575 1576 \begin{description} 1577 \item[Derivability of commitments and proofs:]~\\[0.1em] 1578 {\scriptsize 1579 Let \begin{align*} 1580 \age & \in\N_\Age,\,\, \omega_0, \omega_1 \in\Omega\\ 1581 (\commitment_0, \pruf_0) & \leftarrow \Commit(\age, \omega_0),\\ 1582 (\commitment_1, \pruf_1, \blinding) & \leftarrow \Derive(\commitment_0, \pruf_0, \omega_1). 1583 \end{align*} 1584 We require 1585 \begin{align*} 1586 \Compare(\commitment_0, \commitment_1, \blinding) = 1 \label{req:comparity} 1587 \end{align*} 1588 and for all $n\leq\age$: 1589 \begin{align*} 1590 \Verify(n, \commitment_1, \Attest(n, \commitment_1, \pruf_1)) &% 1591 = 1592 \Verify(n, \commitment_0, \Attest(n, \commitment_0, \pruf_0)) 1593 \end{align*}} 1594 \end{description} 1595 \end{frame} 1596 1597 \begin{frame}{Security Requirements} 1598 Candidate functions must also meet \textit{security} requirements. 1599 Those are defined via security games: 1600 \begin{itemize} 1601 \item Game: Age disclosure by commitment or attestation 1602 \item[$\leftrightarrow$] Requirement: Non-disclosure of age 1603 \vfill 1604 1605 \item Game: Forging attestation 1606 \item[$\leftrightarrow$] Requirement: Unforgeability of 1607 minimum age 1608 \vfill 1609 1610 \item Game: Distinguishing derived commitments and attestations 1611 \item[$\leftrightarrow$] Requirement: Unlinkability of 1612 commitments and attestations 1613 1614 \end{itemize} 1615 \vfill 1616 1617 Meeting the security requirements means that adversaries can win 1618 those games only with negligible advantage. 1619 \vfill 1620 Adversaries are arbitrary polynomial-time algorithms, acting on all 1621 relevant input. 1622 \end{frame} 1623 1624 \begin{frame}{Security Requirements} 1625 \framesubtitle{Simplified Example} 1626 1627 \begin{description} 1628 \item[Game $\Game{FA}(\lambda)$---Forging an attest:]~\\ 1629 {\small 1630 \begin{enumerate} 1631 \item $ (\age, \omega) \drawfrom \N_{\Age-1}\times\Omega $ 1632 \item $ (\commitment, \pruf) \leftarrow \Commit(\age, \omega) $ 1633 \item $ (\minage, \attest) \leftarrow \Adv(\age, \commitment, \pruf)$ 1634 \item Return 0 if $\minage \leq \age$ 1635 \item Return $\Verify(\minage,\commitment,\attest)$ 1636 \end{enumerate} 1637 } 1638 \vfill 1639 \item[Requirement: Unforgeability of minimum age] 1640 {\small 1641 \begin{equation*} 1642 \Forall_{\Adv\in\PPT(\N_\Age\times\Commitments\times\Proofs\to \N_\Age\times\Attests)}: 1643 \Probability\Big[\Game{FA}(\lambda) = 1\Big] \le \negl(\lambda) 1644 \end{equation*} 1645 } 1646 \end{description} 1647 \end{frame} 1648 1649 1650 \begin{frame}{Solution: Instantiation with ECDSA} 1651 % \framesubtitle{Definition of Commit} 1652 1653 \begin{description} 1654 \item[To Commit to age (group) $\age \in \{1,\dots,\Age\}$]~\\ 1655 \begin{enumerate} 1656 \item<2-> Guardian generates ECDSA-keypairs, one per age (group): 1657 \[\langle(q_1, p_1),\dots,(q_\Age,p_\Age)\rangle\] 1658 \item<3-> Guardian then \textbf{drops} all private keys 1659 $p_i$ for $i > \age$: 1660 \[\Big \langle(q_1, p_1),\dots, 1661 (q_\age, p_\age), 1662 (q_{\age +1}, \red{\Nil}),\dots, 1663 (q_\Age, \red{\Nil})\Big\rangle\] 1664 1665 \begin{itemize} 1666 \item $\Vcommitment := (q_1, \dots, q_\Age)$ is the \textit{Commitment}, 1667 \item $\Vpruf_\age := (p_1, \dots, p_\age, \Nil,\dots,\Nil)$ is the \textit{Proof} 1668 \end{itemize} 1669 \vfill 1670 \item<4-> Guardian gives child $\langle \Vcommitment, \Vpruf_\age \rangle$ 1671 \vfill 1672 \end{enumerate} 1673 \end{description} 1674 \end{frame} 1675 1676 \begin{frame}{Instantiation with ECDSA} 1677 \framesubtitle{Definitions of Attest and Verify} 1678 1679 Child has 1680 \begin{itemize} 1681 \item ordered public-keys $\Vcommitment = (q_1, \dots, q_\Age) $, 1682 \item (some) private-keys $\Vpruf = (p_1, \dots, p_\age, \Nil, \dots, \Nil)$. 1683 \end{itemize} 1684 \begin{description} 1685 \item<2->[To \blue{Attest} a minimum age $\blue{\minage} \leq \age$:]~\\ 1686 Sign a message with ECDSA using private key $p_\blue{\minage}$ 1687 \end{description} 1688 1689 \vfill 1690 1691 \uncover<3->{ 1692 Merchant gets 1693 \begin{itemize} 1694 \item ordered public-keys $\Vcommitment = (q_1, \dots, q_\Age) $ 1695 \item Signature $\sigma$ 1696 \end{itemize} 1697 \begin{description} 1698 \item<4->[To \blue{Verify} a minimum age $\minage$:]~\\ 1699 Verify the ECDSA-Signature $\sigma$ with public key $q_\minage$. 1700 \end{description} 1701 } 1702 \vfill 1703 \end{frame} 1704 1705 \begin{frame}{Instantiation with ECDSA} 1706 \framesubtitle{Definitions of Derive and Compare} 1707 Child has 1708 $\Vcommitment = (q_1, \dots, q_\Age) $ and 1709 $\Vpruf = (p_1, \dots, p_\age, \Nil, \dots, \Nil)$. 1710 \begin{description} 1711 \item<2->[To \blue{Derive} new $\Vcommitment'$ and $\Vpruf'$:] 1712 Choose random $\beta\in\Z_g$ and calculate 1713 \small 1714 \begin{align*} 1715 \Vcommitment' &:= \big(\beta * q_1,\ldots,\beta * q_\Age\big),\\ 1716 \Vpruf' &:= \big(\beta p_1,\ldots,\beta p_\age,\Nil,\ldots,\Nil\big) 1717 \end{align*} 1718 Note: $ (\beta p_i)*G = \beta*(p_i*G) = \beta*q_i$\\ 1719 \scriptsize $\beta*q_i$ is scalar multiplication on the elliptic curve. 1720 \end{description} 1721 1722 \vfill 1723 \uncover<3->{ 1724 Exchange gets $\Vcommitment = (q_1,\dots,q_\Age)$, $\Vcommitment' = (q_1', \dots, q_\Age')$ and $\beta$ 1725 \begin{description} 1726 \item[To \blue{Compare}, calculate:] 1727 \small 1728 $(\beta * q_1, \ldots , \beta * q_\Age) \stackrel{?}{=} (q'_1,\ldots, q'_\Age)$ 1729 \end{description} 1730 \vfill 1731 } 1732 \end{frame} 1733 1734 \begin{frame}{Instantiation with ECDSA} 1735 1736 Functions 1737 (Commit, Attest, Verify, Derive, Compare)\\ 1738 as defined in the instantiation with ECDSA\\[0.5em] 1739 \begin{itemize} 1740 \item meet the basic requirements,\\[0.5em] 1741 \item also meet all security requirements.\\ 1742 Proofs by security reduction, details are in the paper. 1743 \end{itemize} 1744 1745 \end{frame} 1746 1747 1748 \begin{frame}{Instantiation with ECDSA} 1749 \framesubtitle{Full definitions} 1750 \scriptsize 1751 1752 \begin{align*} 1753 \Commit_{E,\FDHg{\cdot}}(\age, \omega) &:= \Big\langle 1754 \overbrace{(q_1,\ldots,q_\Age)}^{= \Vcommitment},\; 1755 \overbrace{(p_1,\ldots,p_\age, \Nil,\ldots,\Nil)}^{= \Vpruf \text{, length }\Age} 1756 \Big\rangle\\ 1757 \Attest_{E,\HashF}(\bage, \Vcommitment, \Vpruf) &:= 1758 \begin{cases} 1759 \attest_\bage := \Sign_{E,\HashF}\big(\bage,\Vpruf[\bage]\big) & \text{if } \Vpruf[\bage] \stackrel{?}{\neq} \Nil\\ 1760 \Nil & \text{otherwise} 1761 \end{cases}\\ 1762 % 1763 \Verify_{E,\HashF}(\bage, \Vcommitment, \attest) &:= \Ver_{E,\HashF}(\bage, \Vcommitment[\bage], \attest)\\ 1764 % 1765 \Derive_{E, \FDHg{\cdot}}(\Vcommitment, \Vpruf, \omega) &:= 1766 \Big\langle(\beta * q_1,\ldots,\beta * q_\Age), 1767 (\beta p_1,\ldots,\beta p_\age,\Nil,\ldots,\Nil), \beta \Big\rangle \\ 1768 & \text{ with } \beta := \FDHg{\omega} \text{ and multiplication } \beta p_i \text{ modulo } g \nonumber\\ 1769 % 1770 \Compare_E(\Vcommitment, \Vcommitment', \beta) &:= 1771 \begin{cases} 1772 1 & \text{if } (\beta * q_1, \ldots , \beta * q_\Age) \stackrel{?}{=} (q'_1,\ldots, q'_\Age)\\ 1773 0 & \text{otherwise} 1774 \end{cases} 1775 \end{align*} 1776 \end{frame} 1777 1778 1779 \begin{frame}{Reminder: GNU Taler Fundamentals} 1780 \begin{center} 1781 \begin{tikzpicture}[scale=.55] 1782 \node[circle,fill=black!10] at (3, 4) (Exchange) {$\Exchange$}; 1783 \node[circle,fill=black!10] at (0, 0) (Customer) {$\Customer$}; 1784 \node[circle,fill=black!10] at (6, 0) (Merchant) {$\Merchant$}; 1785 1786 \draw[<->] (Customer) to [out=65,in=220] node[sloped,above] {\sf withdraw} (Exchange); 1787 \draw[<->] (Customer) to [out=45,in=240] node[sloped,below] {\sf refresh} (Exchange); 1788 \draw[<->] (Customer) to node[sloped, below] {\sf purchase} (Merchant); 1789 \draw[<->] (Merchant) to node[sloped, above] {\sf deposit} (Exchange); 1790 \end{tikzpicture} 1791 \end{center} 1792 1793 \vfill 1794 \begin{itemize} 1795 \item Coins are public-/private key-pairs $(C_p, c_s)$. 1796 \item Exchange blindly signs $\FDH(C_p)$ with denomination key $d_p$ 1797 \item Verification: 1798 \begin{eqnarray*} 1799 1 &\stackrel{?}{=}& 1800 \mathsf{SigCheck}\big(\FDH(C_p), D_p, \sigma_p\big) 1801 \end{eqnarray*} 1802 \scriptsize($D_p$ = public key of denomination and $\sigma_p$ = signature) 1803 1804 \end{itemize} 1805 \end{frame} 1806 1807 \begin{frame}{Integration with GNU Taler} 1808 \framesubtitle{Binding age restriction to coins} 1809 1810 To bind an age commitment $\commitment$ to a coin $C_p$, instead of 1811 signing $\FDH(C_p)$, $\Exchange$ now blindly signs 1812 \begin{center} 1813 $\FDH(C_p, \orange{H(\commitment)})$ 1814 \end{center} 1815 1816 \vfill 1817 Verfication of a coin now requires $H(\commitment)$, too: 1818 \begin{center} 1819 $1 \stackrel{?}{=} 1820 \mathsf{SigCheck}\big(\FDH(C_p, \orange{H(\commitment)}), D_p, \sigma_p\big)$ 1821 \end{center} 1822 \vfill 1823 \end{frame} 1824 1825 \begin{frame}{Integration with GNU Taler} 1826 \framesubtitle{Integrated schemes} 1827 \fontsize{8pt}{9pt}\selectfont 1828 \begin{tikzpicture}[scale=.9] 1829 \node[circle,minimum size=25pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1830 \node[circle,minimum size=25pt,fill=black!15] at ( 60:5) (Exchange) {$\Exchange$}; 1831 \node[circle,minimum size=25pt,fill=black!15] at ( 0:5) (Merchant) {$\Merchant$}; 1832 \node[circle,minimum size=25pt,fill=blue!15] at (130:3) (Guardian) {$\Guardian$}; 1833 1834 \draw[<->] (Guardian) to node[sloped,above,align=center] 1835 {{\sf withdraw}\orange{, using}\\ $\FDH(C_p\orange{, H(\commitment)})$} (Exchange); 1836 \draw[<->] (Client) to node[sloped,below,align=center] 1837 {{\sf refresh} \orange{ + }\\ \orange{$\DeriveCompare$}} (Exchange); 1838 \draw[<->] (Client) to node[sloped, below] 1839 {{\sf purchase} \blue{+ $(\attest_\minage, \commitment)$}} (Merchant); 1840 \draw[<->] (Merchant) to node[sloped, above] 1841 {{\sf deposit} \orange{+ $H(\commitment)$}} (Exchange); 1842 1843 \draw[->] (Guardian) to [out=70,in=150, loop] node[above] 1844 {$\Commit(\age)$} (Guardian); 1845 \draw[->] (Guardian) to node[below,sloped] 1846 {($\commitment$, $\pruf_\age$)} (Client); 1847 \draw[->,blue] (Client) to [out=-50,in=-130, loop] node[below] 1848 {\blue{$\Attest(\minage, \commitment, \pruf_{\age})$}} (Client); 1849 \draw[->,blue] (Merchant) to [out=-50,in=-130, loop] node[below] 1850 {\blue{$\Verify(\minage, \commitment, \attest_{\minage})$}} (Merchant); 1851 \end{tikzpicture} 1852 \end{frame} 1853 1854 \begin{frame}{Instantiation with Edx25519} 1855 Paper also formally defines another signature scheme: Edx25519.\\[1em] 1856 1857 \begin{itemize} 1858 \item Scheme already in use in GNUnet, 1859 \item based on EdDSA (Bernstein et al.), 1860 \item generates compatible signatures and 1861 \item allows for key derivation from both, private and public keys, independently. 1862 \end{itemize}~\\[1em] 1863 1864 Current implementation of age restriction in GNU Taler uses Edx25519. 1865 \end{frame} 1866 1867 1868 \begin{frame}{Age Restrictions based on KYC} 1869 Subsidiarity requires bank accounts being owned by adults. 1870 \begin{itemize} 1871 \item Scheme can be adapted to case where minors have bank accounts 1872 \begin{itemize} 1873 \item Assumption: banks provide minimum age 1874 information during bank 1875 transactions. 1876 \item Child and Exchange execute a variant of 1877 the cut\&choose protocol. 1878 \end{itemize} 1879 \end{itemize} 1880 \end{frame} 1881 1882 1883 \begin{frame}{Discussion} 1884 \begin{itemize} 1885 \item Our solution can in principle be used with any token-based payment scheme 1886 \item GNU Taler best aligned with our design goals (security, privacy and efficiency) 1887 \item Subsidiarity requires bank accounts being owned by adults 1888 \begin{itemize} 1889 \item Scheme can be adapted to case where minors have bank accounts 1890 \begin{itemize} 1891 \item Assumption: banks provide minimum age 1892 information during bank 1893 transactions. 1894 \item Child and Exchange execute a variant of 1895 the cut\&choose protocol. 1896 \end{itemize} 1897 \end{itemize} 1898 \item Our scheme offers an alternative to identity management systems (IMS) 1899 \end{itemize} 1900 \end{frame} 1901 1902 1903 \begin{frame}{Related Work} 1904 \begin{itemize} 1905 \item Current privacy-perserving systems all based on attribute-based credentials (Koning et al., Schanzenbach et al., Camenisch et al., Au et al.) 1906 \item Attribute-based approach lacks support: 1907 \begin{itemize} 1908 \item Complex for consumers and retailers 1909 \item Requires trusted third authority 1910 \end{itemize} 1911 \vfill 1912 \item Other approaches tie age-restriction to ability to pay ("debit cards for kids") 1913 \begin{itemize} 1914 \item Advantage: mandatory to payment process 1915 \item Not privacy friendly 1916 \end{itemize} 1917 \end{itemize} 1918 \end{frame} 1919 1920 1921 \begin{frame}{Conclusion} 1922 Age restriction is a technical, ethical and legal challenge. 1923 1924 Existing solutions are 1925 \begin{itemize} 1926 \item without strong protection of privacy or 1927 \item based on identity management systems (IMS) 1928 \end{itemize} 1929 \vfill 1930 1931 Our scheme offers a solution that is 1932 \begin{itemize} 1933 \item based on subsidiarity 1934 \item privacy preserving 1935 \item efficient 1936 \item an alternative to IMS 1937 \end{itemize} 1938 \end{frame} 1939 1940 1941 \section{Future Work \& Conclusion} 1942 1943 \begin{frame} 1944 \vfill 1945 \begin{center} 1946 {\bf Future Work \& Conclusion} 1947 \end{center} 1948 \vfill 1949 \end{frame} 1950 1951 1952 \begin{frame}{Use Case: Journalism} 1953 Today: 1954 \begin{itemize} 1955 \item Corporate structure % ($\Rightarrow$ filter) 1956 \item Advertising primary revenue % ($\Rightarrow$ dependence) 1957 \item Tracking readers critical for business success 1958 \item Journalism and marketing hard to distinguish 1959 \end{itemize}\vfill\pause 1960 With GNU Taler: 1961 \begin{itemize} 1962 \item One-click micropayments per article 1963 \item Hosting requires no expertise % (no PCI DSS) 1964 \item Reader-funded reporting separated from marketing 1965 \item Readers can remain anonymous 1966 \end{itemize} 1967 \end{frame} 1968 1969 1970 \begin{frame}{Taler: Project Status} 1971 \framesubtitle{\url{https://docs.taler.net/}} 1972 \begin{itemize} 1973 \item Cryptographic protocols and core exchange component are stable 1974 \item Pilot project at Bern University of Applied Sciences cafeteria 1975 \item Netzbon (regional currency) in Basel launched 1976 \item Taler Operations AG live Swiss-wide 1977 \item Internal alpha deployment with GLS Bank (Germany) 1978 \item Internal alpha deployment with Magnet Bank (Hungary) 1979 \end{itemize} 1980 \end{frame} 1981 1982 1983 \begin{frame}{Competitor comparison} 1984 \begin{center} \small 1985 \begin{tabular}{l||c|c|c|c|c} 1986 & Cash & Bitcoin & Zerocoin & Creditcard & GNU Taler \\ \hline \hline 1987 Online &$-$$-$$-$ & ++ & ++ & + & +++ \\ \hline 1988 Offline & +++ & $-$$-$ & $-$$-$ & + & $+$$+$ \\ \hline 1989 Trans. cost & + & $-$$-$$-$ & $-$$-$$-$ & $-$ & ++ \\ \hline 1990 Speed & + & $-$$-$$-$ & $-$$-$$-$ & o & ++ \\ \hline 1991 Taxation & $-$ & $-$$-$ & $-$$-$$-$ & +++ & +++ \\ \hline 1992 Payer-anon & ++ & o & ++ & $-$$-$$-$ & +++ \\ \hline 1993 Payee-anon & ++ & o & ++ & $-$$-$$-$ & $-$$-$$-$ \\ \hline 1994 Security & $-$ & o & o & $-$$-$ & ++ \\ \hline 1995 Conversion & +++ & $-$$-$$-$ & $-$$-$$-$ & +++ & +++ \\ \hline 1996 Libre & $-$ & +++ & +++ & $-$ $-$ $-$& +++ \\ 1997 \end{tabular} 1998 \end{center} 1999 \end{frame} 2000 2001 2002 \begin{frame}{Other ongoing developments} 2003 \begin{itemize} 2004 \item Privacy-preserving auctions (trading, currency exchange) ({\tt oezguer@taler.net}) 2005 \item Hardware and software support for embedded systems ({\tt mikolai@taler.net}) 2006 \item Tax-deductable receipts for donations to charities (donau.git) 2007 \item Unlinkable anonymous subscriptions and discount tokens ({\tt ivan@taler.net}) 2008 \item Support for illiterate and innumerate users\footnote{Background: \url{https://myoralvillage.org/}} 2009 ({\tt marc@taler.net}) 2010 \end{itemize} 2011 \end{frame} 2012 2013 2014 \begin{frame}{Open Challanges} 2015 \begin{itemize} 2016 \item Try to explain this to lawyers and AML staff of banks 2017 \item What are convincing arguments for citizens to switch? 2018 \item How to address anti-competitive cash-back from card payments? 2019 \item $\ldots$ 2020 \end{itemize} 2021 \end{frame} 2022 2023 2024 \begin{frame}{How to support?} 2025 \begin{description} 2026 \item[Join:] {\small \url{https://lists.gnu.org/mailman/listinfo/taler}} 2027 \item[Discuss:] {\small \url{https://ich.taler.net/}} 2028 \item[Develop:] \url{https://bugs.taler.net/}, \url{https://git.taler.net/} 2029 \item[Apply:] \url{https://nlnet.nl/propose}, \url{https://nlnet.nl/taler} 2030 \item[Translate:] \url{https://weblate.taler.net/}, \url{translation-volunteer@taler.net} 2031 \item[Integrate:] \url{https://docs.taler.net/} 2032 \item[Donate:] \url{https://gnunet.org/ev} 2033 \item[Partner:] \url{https://taler-systems.com/} 2034 \end{description} 2035 \end{frame} 2036 2037 2038 \begin{frame}{Conclusion} 2039 \begin{center} 2040 {\bf What can we do?} 2041 \end{center} 2042 \vfill 2043 \begin{itemize} 2044 \item{Suffer mass-surveillance enabled by credit card oligopolies with high fees, and} 2045 \item{Engage in arms race with deliberately unregulatable blockchains} 2046 % \item{Enjoy the ``benefits'' of cash \\ 2047 % \hfill \includegraphics[height=0.3\textheight]{atm-rupee.jpg} \hfill} 2048 \end{itemize} 2049 \vfill 2050 \begin{center} 2051 {\bf OR} 2052 \end{center} 2053 \vfill 2054 \begin{itemize} 2055 \item{Establish free software alternative balancing social goals!} 2056 \end{itemize} 2057 \vfill 2058 \end{frame} 2059 2060 2061 2062 \section*{References} 2063 \begin{frame}[allowframebreaks]{References} 2064 \bibliographystyle{plain} 2065 \bibliography{ref,extra,rfc,biblio-defqa} 2066 \end{frame} 2067 2068 2069 % This should be last... 2070 \begin{frame}{Acknowledgments} 2071 2072 \begin{minipage}{0.45\textwidth} \ \\ 2073 {\tiny Funded by the European Union (Project 101135475).} 2074 2075 \begin{center} 2076 \includegraphics[width=0.5\textwidth]{../bandera.jpg} 2077 \end{center} 2078 \end{minipage} 2079 \hfill 2080 \begin{minipage}{0.45\textwidth} 2081 {\tiny Funded by SERI (HEU-Projekt 101135475-TALER).} 2082 2083 \begin{center} 2084 \includegraphics[width=0.65\textwidth]{../sbfi.jpg} 2085 \end{center} 2086 \end{minipage} 2087 2088 \vfill 2089 2090 {\tiny 2091 2092 Views and opinions expressed are however those of the author(s) only 2093 and do not necessarily reflect those of the European Union. Neither the 2094 European Union nor the granting authority can be held responsible for 2095 them. 2096 2097 } 2098 \end{frame} 2099 2100 2101 \end{document} 2102 2103 2104 2105 \begin{frame}{Future work} 2106 \begin{itemize} 2107 \item Performance improvements for RSA in FLOSS crypto libraries 2108 \item Integrate with e-ID for easier \& cheaper KYC 2109 \item Buy anonymous pre-paid debit cards on-demand with Taler wallet 2110 \item Implement PQC across the stack (with cipher agility, where possible with additive security) 2111 \end{itemize} 2112 \end{frame}