2022-ethz.tex (110343B)
1 \pdfminorversion=3 2 \documentclass[fleqn,xcolor={usenames,dvipsnames}]{beamer} 3 \usepackage{amsmath} 4 \usepackage{multimedia} 5 \usepackage[utf8]{inputenc} 6 \usepackage{framed,color,ragged2e} 7 \usepackage[absolute,overlay]{textpos} 8 \definecolor{shadecolor}{rgb}{0.8,0.8,0.8} 9 \usetheme{boxes} 10 \setbeamertemplate{navigation symbols}{} 11 \usepackage{xcolor} 12 \usepackage[normalem]{ulem} 13 \usepackage{listings} 14 \usepackage{adjustbox} 15 \usepackage{array} 16 \usepackage{bbding} 17 \usepackage{relsize} 18 \usepackage{graphicx} 19 \usepackage{tikz,eurosym,calc} 20 \usetikzlibrary{tikzmark} 21 \usetikzlibrary{shapes,arrows,arrows.meta} 22 \usetikzlibrary{positioning,fit,patterns} 23 \usetikzlibrary{calc} 24 25 % CSS 26 \lstdefinelanguage{CSS}{ 27 basicstyle=\ttfamily\scriptsize, 28 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}, 29 sensitive=true, 30 morecomment=[l]{//}, 31 morecomment=[s]{/*}{*/}, 32 morestring=[b]', 33 morestring=[b]", 34 alsoletter={:}, 35 alsodigit={-} 36 } 37 38 % JavaScript 39 \lstdefinelanguage{JavaScript}{ 40 basicstyle=\ttfamily\scriptsize, 41 morekeywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break}, 42 morecomment=[s]{/*}{*/}, 43 morecomment=[l]//, 44 morestring=[b]", 45 morestring=[b]' 46 } 47 48 \lstdefinelanguage{HTML5}{ 49 basicstyle=\ttfamily\scriptsize, 50 language=html, 51 sensitive=true, 52 alsoletter={<>=-}, 53 morecomment=[s]{<!-}{-->}, 54 tag=[s], 55 otherkeywords={ 56 % General 57 >, 58 % Standard tags 59 <!DOCTYPE, 60 </html, <html, <head, <title, </title, <style, </style, <link, </head, <meta, />, 61 % body 62 </body, <body, 63 % Divs 64 </div, <div, </div>, 65 % Paragraphs 66 </p, <p, </p>, 67 % scripts 68 </script, <script, 69 % More tags... 70 <canvas, /canvas>, <svg, <rect, <animateTransform, </rect>, </svg>, <video, <source, <iframe, </iframe>, </video>, <image, </image> 71 }, 72 ndkeywords={ 73 % General 74 =, 75 % HTML attributes 76 charset=, src=, id=, width=, height=, style=, type=, rel=, href=, 77 % SVG attributes 78 fill=, attributeName=, begin=, dur=, from=, to=, poster=, controls=, x=, y=, repeatCount=, xlink:href=, 79 % CSS properties 80 margin:, padding:, background-image:, border:, top:, left:, position:, width:, height:, 81 % CSS3 properties 82 transform:, -moz-transform:, -webkit-transform:, 83 animation:, -webkit-animation:, 84 transition:, transition-duration:, transition-property:, transition-timing-function:, 85 } 86 } 87 88 \lstdefinelanguage{JavaScript}{ 89 basicstyle=\ttfamily\scriptsize, 90 keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, for}, 91 keywordstyle=\color{blue}\bfseries, 92 ndkeywords={class, export, boolean, throw, implements, import, this}, 93 ndkeywordstyle=\color{darkgray}\bfseries, 94 identifierstyle=\color{black}, 95 sensitive=false, 96 comment=[l]{//}, 97 morecomment=[s]{/*}{*/}, 98 commentstyle=\color{purple}\ttfamily, 99 stringstyle=\color{red}\ttfamily, 100 morestring=[b]', 101 morestring=[b]" 102 } 103 104 \setbeamersize{description width=1em} 105 106 \definecolor{blue}{rgb}{0,0,0.7} 107 \newcommand{\orange}[1]{{\color{orange}#1}} 108 \newcommand{\blue}[1]{{\color{blue}#1}} 109 \newcommand{\red}[1]{{\color{red}#1}} 110 \newcommand{\Guardian}{\mathcal{G}} 111 \newcommand{\Child}{\mathcal{C}} 112 \newcommand{\Customer}{\mathcal{C}} 113 \newcommand{\Merchant}{\mathcal{M}} 114 \newcommand{\Exchange}{\mathcal{E}} 115 116 \newcommand{\Commit}{\mathsf{Commit}} 117 \newcommand{\Attest}{\mathsf{Attest}} 118 \newcommand{\Verify}{\mathsf{Verify}} 119 \newcommand{\Derive}{\mathsf{Derive}} 120 \newcommand{\DeriveCompare}{\mathsf{DeriveCompare_\kappa}} 121 \newcommand{\Compare}{\mathsf{Compare}} 122 \newcommand{\AgeVer}{\mathsf{AgeVer}} 123 124 \newcommand{\HashF}{\mathsf{H}} 125 \newcommand{\Hash}{\mathsf{H}} 126 \newcommand{\Block}{\mathbb{B}} 127 \newcommand{\Pub}{\mathsf{Pub}} 128 \newcommand{\Sign}{\mathsf{Sig}} 129 \newcommand{\Ver}{\mathsf{Ver}} 130 \newcommand{\Encoding}{\mathsf{Encoding}} 131 \newcommand{\ECDSA}{\mathsf{ECDSA}} 132 \newcommand{\Null}{\mathcal{O}} 133 \newcommand{\EC}{\mathrm{ec}} 134 \newcommand{\Curve}{\mathsf{Curve25519}} 135 \newcommand{\SHA}{\mathsf{SHA256}} 136 \newcommand{\SHAF}{\mathsf{SHA252}} 137 \newcommand{\FDH}{\mathsf{FDH}} 138 139 \newcommand{\negl}{\epsilon} 140 141 \newcommand{\rand}{\mathsf{rand}} 142 \newcommand{\age}{\mathsf{a}} 143 \newcommand{\Age}{\mathsf{M}} 144 \newcommand{\bage}{\mathsf{b}} 145 \newcommand{\minage}{\mathsf{m}} 146 \newcommand{\attest}{\mathsf{T}} 147 \newcommand{\commitment}{\mathsf{Q}} 148 \newcommand{\pruf}{\mathsf{P}} 149 \newcommand{\Vcommitment}{\vec{\mathsf{Q}}} 150 \newcommand{\Vpruf}{\vec{\mathsf{P}}} 151 \newcommand{\blinding}{\beta} 152 153 \newcommand{\ZN}{\mathbb{Z}_N} 154 \newcommand{\Z}{\mathbb{Z}} 155 \newcommand{\N}{\mathbb{N}} 156 \newcommand{\A}{\mathbb{A}} 157 \newcommand{\E}{\mathbb{E}} 158 \newcommand{\F}{\mathbb{F}} 159 \newcommand{\seck}{\mathsf{s}} 160 \newcommand{\pubk}{\mathsf{P}} 161 \renewcommand{\H}{\mathbb{H}} 162 \newcommand{\K}{\mathbb{K}} 163 \newcommand{\Proofs}{\mathbb{P}} 164 \newcommand{\Commitments}{\mathbb{O}} 165 \newcommand{\Attests}{\mathbb{T}} 166 \newcommand{\Blindings}{\mathbb{B}} 167 \newcommand{\Nil}{\perp} 168 169 \newcommand{\p}{\mathsf{p}} 170 \newcommand{\com}{\mathsf{com}} 171 \newcommand{\prf}{\mathsf{prf}} 172 173 \newcommand{\Adv}{\mathcal{A}} 174 \newcommand{\PPT}{\mathfrak{A}} 175 \newcommand{\Probability}{\mathrm{Pr}} 176 \newcommand{\Algorithm}{f} 177 \renewcommand{\Game}[1]{G_\Adv^\mathsf{#1}} 178 179 \DeclareMathOperator{\Image}{Im} 180 \DeclareMathOperator{\Mod}{mod} 181 182 \newcommand{\Encode}[1]{\overbracket[0.5pt][2pt]{\,#1\,}} 183 \newcommand{\Decode}[1]{\underbracket[0.5pt][3pt]{\,#1\,}} 184 \newcommand{\FDHg}[1]{[#1]_g\,} 185 \newcommand{\logg}{{\breve{g}}} 186 187 188 \newcommand{\drawfrom}{\xleftarrow{\$}} 189 \newcommand\Exists{% 190 \mathop{\lower0.75ex\hbox{\ensuremath{% 191 \mathlarger{\mathlarger{\mathlarger{\mathlarger{\exists}}}}}}}% 192 \limits} 193 194 \newcommand\Forall{% 195 \mathop{\lower0.75ex\hbox{\ensuremath{% 196 \mathlarger{\mathlarger{\mathlarger{\mathlarger{\forall}}}}}}}% 197 \limits} 198 199 200 \title{GNU Taler} 201 %\subtitle{} 202 203 \setbeamertemplate{navigation symbols}{\includegraphics[width=1cm]{inria.pdf} \includegraphics[width=2.3cm]{bfh.png} \includegraphics[width=1.6cm]{fub.pdf} \includegraphics[width=0.4cm]{ashoka.png} \includegraphics[width=0.4cm]{gnu.png} \includegraphics[width=1cm]{taler-logo-2021-inkscape.pdf} \hfill} 204 %\setbeamercovered{transparent=1} 205 206 \author[C. Grothoff]{J. Burdges, F. Dold, {\bf C. Grothoff}, M. Stanisci} 207 \date{\today} 208 \institute{The GNU Project} 209 210 211 \begin{document} 212 213 \justifying 214 215 \begin{frame} 216 \begin{center} 217 \LARGE {\bf GNU} 218 219 \vfill 220 % \includegraphics[width=0.66\textwidth]{logo-2017-fr.pdf} 221 \includegraphics[width=0.66\textwidth]{taler-logo-2021-inkscape.pdf} 222 \end{center} 223 \begin{textblock*}{6cm}(.5cm,7.7cm) % {block width} (coords) 224 {\Large {\bf \href{https://taler.net/}{taler.net}} \\ 225 \href{https://twitter.com/taler}{taler@twitter} \\ 226 \href{https://taler-systems.com/}{taler-systems.com}} 227 \end{textblock*} 228 229 % Substitute based on who is giving the talk! 230 \begin{textblock*}{6cm}(6.7cm,7.7cm) % {block width} (coords) 231 {\hfill {\Large {\bf Florian Dold \&} \\ 232 \hfill {\bf Christian Grothoff}} \\ 233 \hfill \{dold,grothoff\}@taler.net } 234 \end{textblock*} 235 236 \end{frame} 237 238 239 \begin{frame}{A Social Problem} 240 % \vfill 241 This was a question posed to RAND researchers in 1971: 242 243 \begin{quote} 244 ``Suppose you were an advisor to the head of the KGB, the Soviet Secret Police. 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?'' 245 \end{quote} 246 %The result: an electronic funds transfer system that looks 247 %strikingly similar today's debit card system. 248 \pause 249 \begin{center} 250 \includegraphics[height=2cm]{pics/nsa_spy.jpg} 251 \end{center} 252 \vfill 253 \begin{center} 254 ``I think one of the big things that we need to do, is we need 255 to get a way from true-name payments on the Internet. The credit 256 card payment system is one of the worst things that happened for the 257 user, in terms of being able to divorce their access from their 258 identity.'' \hfill --Edward Snowden, IETF 93 (2015) 259 \end{center} 260 261 \end{frame} 262 263 264 265 \section{The Bank's Problem} 266 \begin{frame}{The Bank's Problem} 267 268 3D secure (``verified by visa'') is a nightmare: 269 270 \begin{minipage}{5cm} 271 \begin{itemize} 272 \item Complicated process 273 \item Shifts liability to consumer 274 \item Significant latency 275 \item Can refuse valid requests 276 \item Legal vendors excluded 277 \item No privacy for buyers 278 \end{itemize} 279 \end{minipage} 280 \begin{minipage}{5cm} 281 \includegraphics[width=\textwidth]{illustrations/cc3ds.pdf} 282 \end{minipage} 283 \vfill 284 Online credit card payments will be replaced, but with what? 285 \end{frame} 286 287 288 \begin{frame}{The Bank's Problem} 289 \vfill 290 \begin{textblock*}{12cm}(0.5cm,1cm) % {block width} (coords) 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 \end{textblock*} 298 \begin{textblock*}{4cm}(3.5cm,5.2cm) % {block width} (coords) 299 {\includegraphics[width=\textwidth]{../investors/competitor-logos/amazon.png}} 300 \end{textblock*} 301 \begin{textblock*}{2cm}(7cm,3cm) % {block width} (coords) 302 {\includegraphics[width=\textwidth]{../investors/competitor-logos/alipay.jpeg}} 303 \end{textblock*} 304 \begin{textblock*}{2cm}(3cm,3.5cm) % {block width} (coords) 305 {\includegraphics[width=\textwidth]{../investors/competitor-logos/paypal.jpeg}} 306 \end{textblock*} 307 \begin{textblock*}{2cm}(9cm,5cm) % {block width} (coords) 308 {\includegraphics[width=\textwidth]{../investors/competitor-logos/applepay.jpeg}} 309 \end{textblock*} 310 \begin{textblock*}{2cm}(7.5cm,5.9cm) % {block width} (coords) 311 {\includegraphics[width=\textwidth]{../investors/competitor-logos/samsungpay.jpeg}} 312 \end{textblock*} 313 \begin{textblock*}{1cm}(9.5cm,6.3cm) % {block width} (coords) 314 {\includegraphics[width=\textwidth]{../investors/competitor-logos/android_pay.png}} 315 \end{textblock*} 316 \vfill 317 \end{frame} 318 319 320 \begin{frame}{The Distraction: Bitcoin} 321 322 \begin{itemize} 323 \item Unregulated payment system and currency: 324 \item[] $\Rightarrow$ lack of regulation is a feature! 325 \item Implemented in free software 326 \item Decentralised peer-to-peer system \pause 327 \item Decentralised banking requires solving Byzantine consensus 328 \item Creative solution: tie initial accumulation to solving consensus \pause 329 \item[] $\Rightarrow$ Proof-of-work advances ledger 330 \item[] $\Rightarrow$ Very expensive banking 331 \end{itemize} 332 \end{frame} 333 334 335 \begin{frame} 336 \frametitle{\includegraphics[height=0.5cm]{pics/bitcoin.png}?} 337 \framesubtitle{Background: \url{https://blockchain.com/charts/}} 338 \centering 339 \noindent 340 \includegraphics[width=\textwidth]{pics/btc-transaction-cost.png} 341 342 Current average transaction value: $\approx$ 1000 USD 343 \end{frame} 344 345 346 \begin{frame} 347 \frametitle{\includegraphics[height=0.5cm]{pics/zerocoin.png}?} 348 349 Cryptography is rather primitive: 350 \begin{center} 351 {\bf All Bitcoin transactions are public and linkable!} 352 \end{center} 353 354 \begin{itemize} 355 \item[] $\Rightarrow$ no privacy guarantees 356 \item[] $\Rightarrow$ enhanced with ``laundering'' services 357 \end{itemize} 358 ZeroCoin, CryptoNote (Monero) and ZeroCash (ZCash) offer anonymity. 359 \end{frame} 360 361 362 \begin{frame} 363 \vfill 364 \begin{center} 365 {\bf Do you want to have a libertarian economy?} 366 \end{center} 367 \vfill 368 \begin{center} 369 {\bf Do you want to live under total surveillance?} 370 \end{center} 371 \vfill 372 \end{frame} 373 374 375 376 \begin{frame}{The Bank of International Settlements} 377 \begin{center} 378 \movie[%scale=0.6, 379 autostart, 380 poster] 381 { 382 \includegraphics[height=0.6\textwidth,width=0.8\textwidth]{white.png} 383 } 384 {bis-cbdc.mp4} 385 \end{center} 386 \end{frame} 387 388 389 \begin{frame}{The Emergency Act of Canada\footnote{Speech by Premier Kenney, Alberta, February 2022}} 390 \begin{center} 391 \movie[%scale=0.6, 392 autostart, 393 poster] 394 { 395 \includegraphics[height=0.6\textwidth,width=0.8\textwidth]{ca.png} 396 } 397 {emergencyact.mp4} 398 399 {\tiny \url{https://www.youtube.com/watch?v=NehMAj492SA} (2'2022)} 400 \end{center} 401 \end{frame} 402 403 404 405 \begin{frame}{GNU Taler} 406 \vfill 407 \begin{center} 408 {\huge {\bf Digital} cash, made \textbf{socially responsible}.} 409 \end{center} 410 \vfill 411 \begin{center} 412 \includegraphics[scale=0.3]{taler-logo-2021-inkscape.pdf} 413 \end{center} 414 \vfill 415 \begin{center} 416 Privacy-Preserving, Practical, Taxable, Free Software, Efficient 417 \end{center} 418 \vfill 419 \vfill 420 \ % 421 \end{frame} 422 423 424 \section{What is Taler?} 425 \begin{frame}{What is Taler?} 426 \framesubtitle{\url{https://taler.net/en/features.html}} \noindent 427 Taler is 428 \vfill 429 \begin{itemize} 430 \item a Free/Libre software \emph{payment system} infrastructure project 431 \item ... with a surrounding software ecosystem 432 \item ... and a company (Taler Systems S.A.) and community that wants to deploy it 433 as widely as possible. 434 \end{itemize} 435 \vfill 436 \noindent 437 However, Taler is 438 \begin{itemize} 439 \item \emph{not} a currency 440 \item \emph{not} a long-term store of value 441 \item \emph{not} a network or instance of a system 442 \item \emph{not} decentralized 443 \item \emph{not} based on proof-of-work or proof-of-stake 444 \end{itemize} 445 \end{frame} 446 447 448 \begin{frame}{Design principles} 449 \framesubtitle{https://taler.net/en/principles.html} 450 GNU Taler must ... 451 \begin{enumerate} 452 \item {... be implemented as {\bf free software}.} 453 \item {... protect the {\bf privacy of buyers}.} 454 \item {... must enable the state to {\bf tax income} and crack down on 455 illegal business activities.} 456 \item {... prevent payment fraud.} 457 \item {... only {\bf disclose the minimal amount of information 458 necessary}.} 459 \item {... be usable.} 460 \item {... be efficient.} 461 \item {... avoid single points of failure.} 462 \item {... foster {\bf competition}.} 463 \end{enumerate} 464 \end{frame} 465 466 467 \begin{frame} 468 \frametitle{Taler Overview} 469 \begin{center} 470 \begin{tikzpicture} 471 \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em]; 472 \node (origin) at (0,0) {}; 473 \node (exchange) [def,above=of origin,draw]{Exchange}; 474 \node (customer) [def, draw, below left=of origin] {Customer}; 475 \node (merchant) [def, draw, below right=of origin] {Merchant}; 476 \node (auditor) [def, draw, above right=of origin]{Auditor}; 477 % \node (regulator) [def, draw, above=of auditor]{CSSF}; 478 479 \tikzstyle{C} = [color=black, line width=1pt] 480 481 \draw [<-, C] (customer) -- (exchange) node [midway, above, sloped] (TextNode) {withdraw coins}; 482 \draw [<-, C] (exchange) -- (merchant) node [midway, above, sloped] (TextNode) {deposit coins}; 483 \draw [<-, C] (merchant) -- (customer) node [midway, above, sloped] (TextNode) {spend coins}; 484 \draw [<-, C] (exchange) -- (auditor) node [midway, above, sloped] (TextNode) {verify}; 485 % \draw [<-, C] (regulator) -- (auditor) node [midway, above, sloped] (TextNode) {report}; 486 487 \end{tikzpicture} 488 \end{center} 489 \end{frame} 490 491 492 \begin{frame} 493 % TODO: replace with simplified NEW architecture picture! 494 \frametitle{Architecture of Taler} 495 \begin{center} 496 \includegraphics[width=1\textwidth]{operations.png} 497 \end{center} 498 \end{frame} 499 500 501 \begin{frame}{Taler: Unique Regulatory Features for Central Banks} 502 \framesubtitle{\url{https://www.snb.ch/en/mmr/papers/id/working_paper_2021_03}} 503 \begin{itemize} 504 \item Central bank issues digital coins equivalent to issuing cash \\ 505 $\Rightarrow$ monetary policy remains under CB control 506 \item Architecture with consumer accounts at commercial banks \\ 507 $\Rightarrow$ no competition for commercial banking (S\&L) \\ 508 $\Rightarrow$ CB does not have to manage KYC, customer support 509 \item Withdrawal limits and denomination expiration \\ 510 $\Rightarrow$ protects against bank runs and hoarding 511 \item Income transparency and possibility to set fees \\ 512 $\Rightarrow$ additional insights into economy and new policy options 513 \item Revocation protocols and loss limitations \\ 514 $\Rightarrow$ exit strategy and handles catastrophic security incidents 515 \item Privacy by cryptographic design not organizational compliance \\ 516 $\Rightarrow$ CB cannot be forced to facilitate mass-surveillance 517 \end{itemize} 518 \end{frame} 519 520 521 \begin{frame}{Usability of Taler} 522 \vfill 523 \begin{center} 524 \url{https://demo.taler.net/} 525 \end{center} 526 \begin{enumerate} 527 \item Install browser extension. 528 \item Visit the {\tt bank.demo.taler.net} to withdraw coins. 529 \item Visit the {\tt shop.demo.taler.net} to spend coins. 530 \end{enumerate} 531 \vfill 532 \end{frame} 533 534 535 \begin{frame}{Use Case: Journalism} 536 Today: 537 \begin{itemize} 538 \item Corporate structure % ($\Rightarrow$ filter) 539 \item Advertising primary revenue % ($\Rightarrow$ dependence) 540 \item Tracking readers critical for business success 541 \item Journalism and marketing hard to distinguish 542 \end{itemize}\vfill\pause 543 With GNU Taler: 544 \begin{itemize} 545 \item One-click micropayments per article 546 \item Hosting requires no expertise % (no PCI DSS) 547 \item Reader-funded reporting separated from marketing 548 \item Readers can remain anonymous 549 \end{itemize} 550 \end{frame} 551 552 553 \begin{frame}{How does it work?} 554 We use a few ancient constructions: 555 \begin{itemize} 556 \item Cryptographic hash function (1989) 557 \item Blind signature (1983) 558 \item Schnorr signature (1989) 559 \item Diffie-Hellman key exchange (1976) 560 \item Cut-and-choose zero-knowledge proof (1985) 561 \end{itemize} 562 But of course we use modern instantiations. 563 \end{frame} 564 565 566 \begin{frame}{Definition: Taxability} 567 We say Taler is taxable because: 568 \begin{itemize} 569 \item Merchant's income is visible from deposits. 570 \item Hash of contract is part of deposit data. 571 \item State can trace income and enforce taxation. 572 \end{itemize}\pause 573 Limitations: 574 \begin{itemize} 575 \item withdraw loophole 576 \item {\em sharing} coins among family and friends 577 \end{itemize} 578 \end{frame} 579 580 581 \begin{frame}{Exchange setup: Create a denomination key (RSA)} 582 \begin{minipage}{6cm} 583 \begin{enumerate} 584 \item Pick random primes $p,q$. 585 \item Compute $n := pq$, $\phi(n) = (p-1)(q-1)$ 586 \item Pick small $e < \phi(n)$ such that 587 $d := e^{-1} \mod \phi(n)$ exists. 588 \item Publish public key $(e,n)$. 589 \end{enumerate} 590 \end{minipage} 591 \begin{minipage}{6cm} 592 \begin{tikzpicture} 593 \tikzstyle{def} = [node distance=1em and 1em, inner sep=0em, outer sep=.3em]; 594 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 595 \node (primes) [draw=none, below = of origin] at (0,0) {$(p, q)$}; 596 \node (seal) [def, draw=none, below left=of primes]{\includegraphics[width=0.15\textwidth]{seal.pdf}}; 597 \node (hammer) [def, draw=none, below right=of primes]{\includegraphics[width=0.15\textwidth]{hammer.pdf}}; 598 599 \tikzstyle{C} = [color=black, line width=1pt] 600 601 \draw [<-, C] (primes) -- (origin) node [midway, above, sloped] (TextNode) {}; 602 \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {}; 603 \draw [<-, C] (hammer) -- (primes) node [midway, above, sloped] (TextNode) {}; 604 \end{tikzpicture} 605 % \includegraphics[width=0.4\textwidth]{seal.pdf} 606 \end{minipage} 607 \end{frame} 608 609 610 \begin{frame}{Merchant: Create a signing key (EdDSA)} 611 \begin{minipage}{6cm} 612 \begin{itemize} 613 \item pick random $m \mod o$ as private key 614 \item $M = mG$ public key 615 \end{itemize} 616 \end{minipage} 617 \begin{minipage}{6cm} 618 \begin{tikzpicture} 619 \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em]; 620 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 621 \node (m) [draw=none, below = of origin] at (0,0) {$m$}; 622 \node (seal) [draw=none, below=of m]{M}; 623 \tikzstyle{C} = [color=black, line width=1pt] 624 625 \draw [<-, C] (m) -- (origin) node [midway, above, sloped] (TextNode) {}; 626 \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {}; 627 \end{tikzpicture} 628 \end{minipage} 629 \parbox[t]{3cm}{{\bf Capability:} $m \Rightarrow$ } 630 \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{merchant-sign.pdf}} 631 \end{frame} 632 633 634 \begin{frame}{Customer: Create a planchet (EdDSA)} 635 \begin{minipage}{8cm} 636 \begin{itemize} 637 \item Pick random $c \mod o$ private key 638 \item $C = cG$ public key 639 \end{itemize} 640 \end{minipage} 641 \begin{minipage}{4cm} 642 \begin{tikzpicture} 643 \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em]; 644 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 645 \node (c) [draw=none, below = of origin] at (0,0) {$c$}; 646 \node (planchet) [draw=none, below=of c]{\includegraphics[width=0.4\textwidth]{planchet.pdf}}; 647 \tikzstyle{C} = [color=black, line width=1pt] 648 649 \draw [<-, C] (c) -- (origin) node [midway, above, sloped] (TextNode) {}; 650 \draw [<-, C] (planchet) -- (c) node [midway, above, sloped] (TextNode) {}; 651 \end{tikzpicture} 652 \end{minipage} 653 \parbox[t]{3cm}{{\bf Capability:} $c \Rightarrow$ } 654 \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{planchet-sign.pdf}} 655 \end{frame} 656 657 658 \begin{frame}{Customer: Blind planchet (RSA)} 659 \begin{minipage}{6cm} 660 \begin{enumerate} 661 \item Obtain public key $(e,n)$ 662 \item Compute $f := FDH(C)$, $f < n$. 663 \item Pick blinding factor $b \in \mathbb Z_n$ 664 \item Transmit $f' := f b^e \mod n$ 665 \end{enumerate} 666 \end{minipage} 667 \begin{minipage}{6cm} 668 \begin{tikzpicture} 669 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 670 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 671 \node (b) [def, draw=none, below = of origin] at (0,-0.2) {$b$}; 672 \node (blinded) [def, draw=none, below right=of b]{\includegraphics[width=0.2\textwidth]{blinded.pdf}}; 673 \node (planchet) [def, draw=none, above right=of blinded]{\includegraphics[width=0.15\textwidth]{planchet.pdf}}; 674 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 675 \tikzstyle{C} = [color=black, line width=1pt] 676 677 \draw [<-, C] (b) -- (origin) node [midway, above, sloped] (TextNode) {}; 678 \draw [<-, C] (blinded) -- (planchet) node [midway, above, sloped] (TextNode) {}; 679 \draw [<-, C] (blinded) -- (b) node [midway, above, sloped] (TextNode) {}; 680 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 681 \end{tikzpicture} 682 \end{minipage} 683 \end{frame} 684 685 686 \begin{frame}{Exchange: Blind sign (RSA)} 687 \begin{minipage}{6cm} 688 \begin{enumerate} 689 \item Receive $f'$. 690 \item Compute $s' := f'^d \mod n$. 691 \item Send signature $s'$. 692 \end{enumerate} 693 \end{minipage} 694 \begin{minipage}{6cm} 695 \begin{tikzpicture} 696 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 697 \node (hammer) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{hammer.pdf}}; 698 \node (signed) [def, draw=none, below left=of hammer]{\includegraphics[width=0.2\textwidth]{sign.pdf}}; 699 \node (blinded) [def, draw=none, above left=of signed]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 700 \node (customer) [node distance=4em and 0.5em, draw, below =of signed]{Customer}; 701 \tikzstyle{C} = [color=black, line width=1pt] 702 703 \draw [<-, C] (signed) -- (hammer) node [midway, above, sloped] (TextNode) {}; 704 \draw [<-, C] (signed) -- (blinded) node [midway, above, sloped] (TextNode) {}; 705 \draw [<-, C] (customer) -- (signed) node [midway, above, sloped] (TextNode) {{\small transmit}}; 706 \end{tikzpicture} 707 \end{minipage} 708 \end{frame} 709 710 711 \begin{frame}{Customer: Unblind coin (RSA)} 712 \begin{minipage}{6cm} 713 \begin{enumerate} 714 \item Receive $s'$. 715 \item Compute $s := s' b^{-1} \mod n$ % \\ 716 % ($(f')^d = (f b^e)^d = f^d b$). 717 \end{enumerate} 718 \end{minipage} 719 \begin{minipage}{6cm} 720 \begin{tikzpicture} 721 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 722 \node (b) [def, draw=none] at (0,0) {$b$}; 723 \node (coin) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 724 \node (signed) [def, draw=none, above left=of coin]{\includegraphics[width=0.15\textwidth]{sign.pdf}}; 725 \tikzstyle{C} = [color=black, line width=1pt] 726 727 \draw [<-, C] (coin) -- (b) node [midway, above, sloped] (TextNode) {}; 728 \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {}; 729 \end{tikzpicture} 730 \end{minipage} 731 \end{frame} 732 733 734 \begin{frame}{Customer: Build shopping cart} 735 \begin{center} 736 \begin{tikzpicture} 737 \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em]; 738 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{shop.pdf}}; 739 \node (cart) [draw=none, below=of m]{\includegraphics[width=0.2\textwidth]{cart.pdf}}; 740 \node (merchant) [node distance=4em and 0.5em, draw, below =of cart]{Merchant}; 741 \tikzstyle{C} = [color=black, line width=1pt]; 742 \draw [<-, C] (cart) -- (origin) node [midway, above, sloped] (TextNode) {}; 743 \draw [<-, C] (merchant) -- (cart) node [midway, above, sloped] (TextNode) {{\small transmit}}; 744 \end{tikzpicture} 745 \end{center} 746 \end{frame} 747 748 749 \begin{frame}{Merchant: Propose contract (EdDSA)} 750 \begin{minipage}{6cm} 751 \begin{enumerate} 752 \item Complete proposal $D$. 753 \item Send $D$, $EdDSA_m(D)$ 754 \end{enumerate} 755 \end{minipage} 756 \begin{minipage}{6cm} 757 \begin{tikzpicture} 758 \tikzstyle{def} = [node distance=2em and 0.5em, inner sep=0em, outer sep=.3em]; 759 \node (cart) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{cart.pdf}}; 760 \node (proposal) [def, draw=none, below right=of cart]{\includegraphics[width=0.5\textwidth]{merchant_propose.pdf}}; 761 \node (customer) [node distance=4em and 0.5em, draw, below =of proposal]{Customer}; 762 \tikzstyle{C} = [color=black, line width=1pt]; 763 \node (sign) [def, draw=none, above right=of proposal] {$m$}; 764 \tikzstyle{C} = [color=black, line width=1pt] 765 766 \draw [<-, C] (proposal) -- (sign) node [midway, above, sloped] (TextNode) {}; 767 \draw [<-, C] (proposal) -- (cart) node [midway, above, sloped] (TextNode) {}; 768 \draw [<-, C] (customer) -- (proposal) node [midway, above, sloped] (TextNode) {{\small transmit}}; 769 \end{tikzpicture} 770 \end{minipage} 771 \end{frame} 772 773 774 \begin{frame}{Customer: Spend coin (EdDSA)} 775 \begin{minipage}{6cm} 776 \begin{enumerate} 777 \item Receive proposal $D$, $EdDSA_m(D)$. 778 \item Send $s$, $C$, $EdDSA_c(D)$ 779 \end{enumerate} 780 \end{minipage} 781 \begin{minipage}{6cm} 782 \begin{tikzpicture} 783 \tikzstyle{def} = [node distance=2em and 0.4em, inner sep=0em, outer sep=.3em]; 784 \node (proposal) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{merchant_propose.pdf}}; 785 \node (contract) [def, draw=none, below right=of cart]{\includegraphics[width=0.3\textwidth]{contract.pdf}}; 786 \node (c) [def, draw=none, above=of contract] {$c$}; 787 \node (merchant) [node distance=4em and 0.5em, draw, below=of contract]{Merchant}; 788 \node (coin) [def, draw=none, right=of contract]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 789 \tikzstyle{C} = [color=black, line width=1pt] 790 791 \draw [<-, C] (contract) -- (c) node [midway, above, sloped] (TextNode) {}; 792 \draw [<-, C] (contract) -- (proposal) node [midway, above, sloped] (TextNode) {}; 793 \draw [<-, C] (merchant) -- (contract) node [midway, above, sloped] (TextNode) {{\small transmit}}; 794 \draw [<-, C] (merchant) -- (coin) node [midway, below, sloped] (TextNode) {{\small transmit}}; 795 \end{tikzpicture} 796 \end{minipage} 797 \end{frame} 798 799 800 \begin{frame}{Merchant and Exchange: Verify coin (RSA)} 801 \begin{minipage}{6cm} 802 \begin{equation*} 803 s^e \stackrel{?}{\equiv} FDH(C) \mod n 804 \end{equation*} 805 \end{minipage} 806 \begin{minipage}{6cm} 807 \begin{minipage}{0.2\textwidth} 808 \includegraphics[width=\textwidth]{coin.pdf} 809 \end{minipage} 810 $\stackrel{?}{\Leftrightarrow}$ 811 \begin{minipage}{0.2\textwidth} 812 \includegraphics[width=\textwidth]{seal.pdf} 813 \end{minipage} 814 \end{minipage} 815 \vfill 816 The exchange does not only verify the signature, but also 817 checks that the coin was not double-spent. 818 \vfill 819 \pause 820 \begin{center} 821 {\bf Taler is an online payment system.} 822 \end{center} 823 \vfill 824 \end{frame} 825 826 827 \begin{frame}{Requirements: Online vs. Offline Digital Currencies} 828 \framesubtitle{\url{https://taler.net/papers/euro-bearer-online-2021.pdf}} 829 \begin{itemize} 830 \item Offline capabilities are sometimes cited as a requirement for digital payment solutions 831 \item All implementations must either use restrictive hardware elements and/or introduce 832 counterparty risk. 833 \item[$\Rightarrow$] Permanent offline features weaken a digital payment solution (privacy, security) 834 \item[$\Rightarrow$] Introduces unwarranted competition for physical cash (endangers emergency-preparedness). 835 \end{itemize} 836 We recommend a tiered approach: 837 \begin{enumerate} 838 \item Online-first, bearer-based digital currency with Taler 839 \item (Optional:) Limited offline mode for network outages 840 \item Physical cash for emergencies (power outage, catastrophic cyber incidents) 841 \end{enumerate} 842 \end{frame} 843 844 845 \begin{frame}{Giving change} 846 It would be inefficient to pay EUR 100 with 1 cent coins! 847 \begin{itemize} 848 \item Denomination key represents value of a coin. 849 \item Exchange may offer various denominations for coins. 850 \item Wallet may not have exact change! 851 \item Usability requires ability to pay given sufficient total funds. 852 \end{itemize}\pause 853 Key goals: 854 \begin{itemize} 855 \item maintain unlinkability 856 \item maintain taxability of transactions 857 \end{itemize}\pause 858 Method: 859 \begin{itemize} 860 \item Contract can specify to only pay {\em partial value} of a coin. 861 \item Exchange allows wallet to obtain {\em unlinkable change} 862 for remaining coin value. 863 \end{itemize} 864 \end{frame} 865 866 867 \begin{frame}{Diffie-Hellman (ECDH)} 868 \begin{minipage}{8cm} 869 \begin{enumerate} 870 \item Create private keys $c,t \mod o$ 871 \item Define $C = cG$ 872 \item Define $T = tG$ 873 \item Compute DH \\ $cT = c(tG) = t(cG) = tC$ 874 \end{enumerate} 875 \end{minipage} 876 \begin{minipage}{6cm} 877 \begin{tikzpicture} 878 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 879 \node (t) [def, draw=none] at (0,0) {$t$}; 880 \node (ct) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{dh.pdf}}; 881 \node (c) [def, draw=none, above left= of ct] {$c$}; 882 \tikzstyle{C} = [color=black, line width=1pt] 883 884 \draw [<-, C] (ct) -- (c) node [midway, above, sloped] (TextNode) {}; 885 \draw [<-, C] (ct) -- (t) node [midway, above, sloped] (TextNode) {}; 886 \end{tikzpicture} 887 \end{minipage} 888 \end{frame} 889 890 891 \begin{frame}{Strawman solution} 892 \begin{minipage}{8cm} 893 Given partially spent private coin key $c_{old}$: 894 \begin{enumerate} 895 % \item Let $C_{old} := c_{old}G$ (as before) 896 \item Pick random $c_{new} \mod o$ private key 897 \item $C_{new} = c_{new}G$ public key 898 \item Pick random $b_{new}$ 899 \item Compute $f_{new} := FDH(C_{new})$, $m < n$. 900 \item Transmit $f'_{new} := f_{new} b_{new}^e \mod n$ 901 \end{enumerate} 902 ... and sign request for change with $c_{old}$. 903 \end{minipage} 904 \begin{minipage}{4cm} 905 \begin{tikzpicture} 906 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 907 \node (blinded) [def, draw=none]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 908 \node (planchet) [def, draw=none, above left= of blinded] {\includegraphics[width=0.15\textwidth]{planchet.pdf}}; 909 \node (cnew) [def, draw=none, above= of planchet] {$c_{new}$}; 910 \node (bnew) [def, draw=none, above right= of blinded] {$b_{new}$}; 911 \node (dice1) [def, draw=none, above = of cnew]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 912 \node (dice2) [def, draw=none, above = of bnew]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 913 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 914 915 \tikzstyle{C} = [color=black, line width=1pt] 916 917 \draw [<-, C] (cnew) -- (dice1) node [midway, above, sloped] (TextNode) {}; 918 \draw [<-, C] (planchet) -- (cnew) node [midway, above, sloped] (TextNode) {}; 919 \draw [<-, C] (bnew) -- (dice2) node [midway, above, sloped] (TextNode) {}; 920 \draw [<-, C] (blinded) -- (planchet) node [midway, above, sloped] (TextNode) {}; 921 \draw [<-, C] (blinded) -- (bnew) node [midway, above, sloped] (TextNode) {}; 922 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 923 \end{tikzpicture} 924 \end{minipage} 925 \pause 926 \vfill 927 {\bf Problem: Owner of $c_{new}$ may differ from owner of $c_{old}$!} 928 \end{frame} 929 930 931 \begin{frame}{Customer: Transfer key setup (ECDH)} 932 \begin{minipage}{8cm} 933 Given partially spent private coin key $c_{old}$: 934 \begin{enumerate} 935 \item Let $C_{old} := c_{old}G$ (as before) 936 \item Create random private transfer key $t \mod o$ 937 \item Compute $T := tG$ 938 \item Compute $X := c_{old}(tG) = t(c_{old}G) = tC_{old}$ 939 \item Derive $c_{new}$ and $b_{new}$ from $X$ 940 \item Compute $C_{new} := c_{new}G$ 941 \item Compute $f_{new} := FDH(C_{new})$ 942 \item Transmit $f_{new}' := f_{new} b_{new}^e$ 943 \end{enumerate} 944 \end{minipage} 945 \begin{minipage}{4cm} 946 \begin{tikzpicture} 947 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 948 \node (t) [def, draw=none] at (0,0) {$t$}; 949 \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 950 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 951 \node (d) [def, draw=none, above left= of dh] {$c_{old}$}; 952 \node (cp) [def, draw=none, below left= of dh] {$c_{new}$}; 953 \node (bp) [def, draw=none, below right= of dh] {$b_{new}$}; 954 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 955 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 956 957 \tikzstyle{C} = [color=black, line width=1pt] 958 959 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 960 \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {}; 961 \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {}; 962 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 963 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 964 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 965 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 966 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 967 \end{tikzpicture} 968 \end{minipage} 969 \end{frame} 970 971 972 \begin{frame}{Cut-and-Choose} 973 \begin{minipage}{4cm} 974 \begin{tikzpicture} 975 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 976 \node (t) [def, draw=none] at (0,0) {$t_1$}; 977 \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 978 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 979 \node (d) [def, draw=none, above left= of dh] {$c_{old}$}; 980 \node (cp) [def, draw=none, below left= of dh] {$c_{new,1}$}; 981 \node (bp) [def, draw=none, below right= of dh] {$b_{new,1}$}; 982 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 983 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 984 985 \tikzstyle{C} = [color=black, line width=1pt] 986 987 \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {}; 988 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 989 \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {}; 990 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 991 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 992 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 993 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 994 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 995 \end{tikzpicture} 996 \end{minipage} 997 \begin{minipage}{4cm} 998 \begin{tikzpicture} 999 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 1000 \node (t) [def, draw=none] at (0,0) {$t_2$}; 1001 \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 1002 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 1003 \node (d) [def, draw=none, above left= of dh] {$c_{old}$}; 1004 \node (cp) [def, draw=none, below left= of dh] {$c_{new,2}$}; 1005 \node (bp) [def, draw=none, below right= of dh] {$b_{new,2}$}; 1006 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 1007 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 1008 1009 \tikzstyle{C} = [color=black, line width=1pt] 1010 1011 \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {}; 1012 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 1013 \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {}; 1014 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 1015 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 1016 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 1017 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 1018 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 1019 \end{tikzpicture} 1020 \end{minipage} 1021 \begin{minipage}{4cm} 1022 \begin{tikzpicture} 1023 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 1024 \node (t) [def, draw=none] at (0,0) {$t_3$}; 1025 \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 1026 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 1027 \node (d) [def, draw=none, above left= of dh] {$c_{old}$}; 1028 \node (cp) [def, draw=none, below left= of dh] {$c_{new,3}$}; 1029 \node (bp) [def, draw=none, below right= of dh] {$b_{new,3}$}; 1030 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 1031 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 1032 1033 \tikzstyle{C} = [color=black, line width=1pt] 1034 1035 \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {}; 1036 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 1037 \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {}; 1038 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 1039 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 1040 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 1041 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 1042 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 1043 \end{tikzpicture} 1044 \end{minipage} 1045 \end{frame} 1046 1047 1048 \begin{frame}{Exchange: Choose!} 1049 \begin{center} 1050 \item Exchange sends back random $\gamma \in \{ 1, 2, 3 \}$ to the customer. 1051 \end{center} 1052 \end{frame} 1053 1054 1055 \begin{frame}{Customer: Reveal} 1056 \begin{enumerate} 1057 \item If $\gamma = 1$, send $t_2$, $t_3$ to exchange 1058 \item If $\gamma = 2$, send $t_1$, $t_3$ to exchange 1059 \item If $\gamma = 3$, send $t_1$, $t_2$ to exchange 1060 \end{enumerate} 1061 \end{frame} 1062 1063 1064 \begin{frame}{Exchange: Verify ($\gamma = 2$)} 1065 \begin{minipage}{4cm} 1066 \begin{tikzpicture} 1067 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 1068 \node (h) [def, draw=none] at (0,0) {$t_1$}; 1069 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 1070 \node (d) [def, draw=none, above left= of dh] {$C_{old}$}; 1071 \node (cp) [def, draw=none, below left= of dh] {$c_{new,1}$}; 1072 \node (bp) [def, draw=none, below right= of dh] {$b_{new,1}$}; 1073 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 1074 1075 \tikzstyle{C} = [color=black, line width=1pt] 1076 1077 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 1078 \draw [<-, C] (dh) -- (h) node [midway, above, sloped] (TextNode) {}; 1079 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 1080 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 1081 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 1082 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 1083 \end{tikzpicture} 1084 \end{minipage} 1085 \begin{minipage}{4cm} 1086 \ 1087 \end{minipage} 1088 \begin{minipage}{4cm} 1089 \begin{tikzpicture} 1090 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 1091 \node (h) [def, draw=none] at (0,0) {$t_3$}; 1092 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 1093 \node (d) [def, draw=none, above left= of dh] {$C_{old}$}; 1094 \node (cp) [def, draw=none, below left= of dh] {$c_{new,3}$}; 1095 \node (bp) [def, draw=none, below right= of dh] {$b_{new,3}$}; 1096 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 1097 1098 \tikzstyle{C} = [color=black, line width=1pt] 1099 1100 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 1101 \draw [<-, C] (dh) -- (h) node [midway, above, sloped] (TextNode) {}; 1102 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 1103 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 1104 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 1105 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 1106 \end{tikzpicture} 1107 \end{minipage} 1108 \end{frame} 1109 1110 1111 \begin{frame}{Exchange: Blind sign change (RSA)} 1112 \begin{minipage}{6cm} 1113 \begin{enumerate} 1114 \item Take $f_{new,\gamma}'$. 1115 \item Compute $s' := f_{new,\gamma}'^d \mod n$. 1116 \item Send signature $s'$. 1117 \end{enumerate} 1118 \end{minipage} 1119 \begin{minipage}{6cm} 1120 \begin{tikzpicture} 1121 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 1122 \node (hammer) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{hammer.pdf}}; 1123 \node (signed) [def, draw=none, below left=of hammer]{\includegraphics[width=0.2\textwidth]{sign.pdf}}; 1124 \node (blinded) [def, draw=none, above left=of signed]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 1125 \node (customer) [node distance=4em and 0.5em, draw, below =of signed]{Customer}; 1126 \tikzstyle{C} = [color=black, line width=1pt] 1127 1128 \draw [<-, C] (signed) -- (hammer) node [midway, above, sloped] (TextNode) {}; 1129 \draw [<-, C] (signed) -- (blinded) node [midway, above, sloped] (TextNode) {}; 1130 \draw [<-, C] (customer) -- (signed) node [midway, above, sloped] (TextNode) {{\small transmit}}; 1131 \end{tikzpicture} 1132 \end{minipage} 1133 \end{frame} 1134 1135 1136 \begin{frame}{Customer: Unblind change (RSA)} 1137 \begin{minipage}{6cm} 1138 \begin{enumerate} 1139 \item Receive $s'$. 1140 \item Compute $s := s' b_{new,\gamma}^{-1} \mod n$. 1141 \end{enumerate} 1142 \end{minipage} 1143 \begin{minipage}{6cm} 1144 \begin{tikzpicture} 1145 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 1146 \node (b) [def, draw=none] at (0,0) {$b_{new,\gamma}$}; 1147 \node (coin) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 1148 \node (signed) [def, draw=none, above left=of coin]{\includegraphics[width=0.15\textwidth]{sign.pdf}}; 1149 \tikzstyle{C} = [color=black, line width=1pt] 1150 1151 \draw [<-, C] (coin) -- (b) node [midway, above, sloped] (TextNode) {}; 1152 \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {}; 1153 \end{tikzpicture} 1154 \end{minipage} 1155 \end{frame} 1156 1157 1158 \begin{frame}{Exchange: Allow linking change} 1159 \begin{minipage}{7cm} 1160 \begin{center} 1161 Given $C_{old}$ 1162 1163 \vspace{1cm} 1164 1165 return $T_\gamma$, $s := s' b_{new,\gamma}^{-1} \mod n$. 1166 \end{center} 1167 \end{minipage} 1168 \begin{minipage}{5cm} 1169 \begin{tikzpicture} 1170 \tikzstyle{def} = [node distance= 3em and 0.5em, inner sep=0.5em, outer sep=.3em]; 1171 \node (co) [def, draw=none] at (0,0) {$C_{old}$}; 1172 \node (T) [def, draw=none, below left=of co]{$T_\gamma$}; 1173 \node (sign) [def, draw=none, below right=of co]{\includegraphics[width=0.15\textwidth]{sign.pdf}}; 1174 \node (customer) [def, draw, below right=of T] {Customer}; 1175 1176 \tikzstyle{C} = [color=black, line width=1pt] 1177 1178 \draw [<-, C] (T) -- (co) node [midway, above, sloped] (TextNode) {}; 1179 \draw [<-, C] (sign) -- (co) node [midway, above, sloped] (TextNode) {}; 1180 \draw [<-, C] (customer) -- (T) node [midway, above, sloped] (TextNode) {link}; 1181 \draw [<-, C] (customer) -- (sign) node [midway, above, sloped] (TextNode) {link}; 1182 \end{tikzpicture} 1183 \end{minipage} 1184 \end{frame} 1185 1186 1187 \begin{frame}{Customer: Link (threat!)} 1188 \begin{minipage}{6.3cm} 1189 \begin{enumerate} 1190 \item Have $c_{old}$. 1191 \item Obtain $T_\gamma$, $s$ from exchange 1192 \item Compute $X_\gamma = c_{old}T_\gamma$ 1193 \item Derive $c_{new,\gamma}$ and $b_{new,\gamma}$ from $X_\gamma$ 1194 \item Unblind $s := s' b_{new,\gamma}^{-1} \mod n$ 1195 \end{enumerate} 1196 1197 \end{minipage} 1198 \begin{minipage}{5.7cm} 1199 \begin{tikzpicture} 1200 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 1201 \node (T) [def, draw=none] at (0,0) {$T_\gamma$}; 1202 \node (exchange) [def, inner sep=0.5em, draw, above left=of T] {Exchange}; 1203 \node (signed) [def, draw=none, below left=of T]{\includegraphics[width=0.15\textwidth]{sign.pdf}}; 1204 \node (dh) [def, draw=none, below right=of T]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 1205 \node (bp) [def, draw=none, below left= of dh] {$b_{new,\gamma}$}; 1206 \node (co) [def, draw=none, above right= of dh] {$c_{old}$}; 1207 \node (cp) [def, draw=none, below= of dh] {$c_{new,\gamma}$}; 1208 \node (coin) [def, draw=none, below left = of bp]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 1209 \node (psign) [def, node distance=2.5em and 0em, draw=none, below = of cp]{\includegraphics[width=0.2\textwidth]{planchet-sign.pdf}}; 1210 1211 \tikzstyle{C} = [color=black, line width=1pt] 1212 1213 \draw [<-, C] (dh) -- (co) node [midway, above, sloped] (TextNode) {}; 1214 \draw [<-, C] (dh) -- (T) node [midway, above, sloped] (TextNode) {}; 1215 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 1216 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 1217 \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {}; 1218 \draw [<-, C] (coin) -- (bp) node [midway, above, sloped] (TextNode) {}; 1219 \draw [<-, C] (T) -- (exchange) node [midway, above, sloped] (TextNode) {link}; 1220 \draw [<-, C] (signed) -- (exchange) node [midway, below, sloped] (TextNode) {link}; 1221 \draw [<-, C, double] (psign) -- (cp) node [midway, below, sloped] (TextNode) {}; 1222 \end{tikzpicture} 1223 \end{minipage} 1224 \end{frame} 1225 1226 1227 \begin{frame}{Refresh protocol summary} 1228 \begin{itemize} 1229 \item Customer asks exchange to convert old coin to new coin 1230 \item Protocol ensures new coins can be recovered from old coin 1231 \item[$\Rightarrow$] New coins are owned by the same entity! 1232 \end{itemize} 1233 Thus, the refresh protocol allows: 1234 \begin{itemize} 1235 \item To give unlinkable change. 1236 \item To give refunds to an anonymous customer. 1237 \item To expire old keys and migrate coins to new ones. 1238 \item To handle protocol aborts. 1239 \end{itemize} 1240 \noindent 1241 \begin{center} 1242 \bf 1243 Transactions via refresh are equivalent to {\em sharing} a wallet. 1244 \end{center} 1245 \end{frame} 1246 1247 1248 \section{Age restrictions} 1249 1250 \begin{frame}{Age restriction in E-commerce} 1251 1252 \begin{description} 1253 \item[Problem:]~\\[1em] 1254 Verification of minimum age requirements in e-commerce.\\[2em] 1255 1256 \item[Common solutions:] 1257 1258 \begin{tabular}{l<{\onslide<2->}c<{\onslide<3->}cr<{\onslide}} 1259 & \blue{Privacy} & \tikzmark{topau} \blue{Ext. authority}& \\[\medskipamount] 1260 1. ID Verification & bad & required & \\[\medskipamount] 1261 2. Restricted Accounts & bad & required & \\[\medskipamount] 1262 3. Attribute-based & good & required &\tikzmark{bottomau} \\[\medskipamount] 1263 \end{tabular} 1264 \end{description} 1265 1266 \uncover<4->{ 1267 \begin{tikzpicture}[overlay,remember picture] 1268 \draw[orange,thick,rounded corners] 1269 ($(pic cs:topau) +(0,0.5)$) rectangle ($(pic cs:bottomau) -(0.3, 0.2)$); 1270 \end{tikzpicture} 1271 \begin{center} 1272 \bf Principle of Subsidiarity is violated 1273 \end{center} 1274 } 1275 \end{frame} 1276 1277 1278 \begin{frame}{Principle of Subsidiarity} 1279 \begin{center} \Large 1280 Functions of government---such as granting and restricting 1281 rights---should be performed\\ 1282 {\it at the lowest level of authority possible},\\ 1283 as long as they can be performed {\it adequately}. 1284 \end{center} 1285 \vfill 1286 \uncover<2->{ 1287 For age-restriction, the lowest level of authority is:\\ 1288 \begin{center}\Large 1289 Parents, guardians and caretakers 1290 \end{center} 1291 } 1292 \end{frame} 1293 1294 1295 \begin{frame}{Age restriction design for GNU Taler} 1296 Design and implementation of an age restriction scheme\\ 1297 with the following goals: 1298 1299 \begin{enumerate} 1300 \item It ties age restriction to the \textbf{ability to pay} (not to ID's) 1301 \item maintains \textbf{anonymity of buyers} 1302 \item maintains \textbf{unlinkability of transactions} 1303 \item aligns with \textbf{principle of subsidiartiy} 1304 \item is \textbf{practical and efficient} 1305 \end{enumerate} 1306 1307 \end{frame} 1308 1309 1310 \begin{frame}{Age restriction} 1311 \framesubtitle{Assumptions and scenario} 1312 1313 \begin{columns} 1314 \column{7.5cm} 1315 \begin{itemize} 1316 \item<1-> Assumption: Checking accounts are under control of eligible adults/guardians. 1317 \item<2-> \textit{Guardians} \textbf{commit} to an maximum age 1318 \item<3-> \textit{Minors} \textbf{attest} their adequate age 1319 \item<4-> \textit{Merchants} \textbf{verify} the attestations 1320 \item<5-> Minors \textbf{derive} age commitments from existing ones 1321 \item<6-> \textit{Exchanges} \textbf{compare} the derived age commitments 1322 \end{itemize} 1323 \column{5cm} 1324 \uncover<7-> 1325 { 1326 \begin{center} 1327 \fontsize{7pt}{7pt}\selectfont 1328 \begin{tikzpicture}[scale=.5] 1329 \node[circle,minimum size=15pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$}; 1330 \node[circle,minimum size=15pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1331 \node[circle,minimum size=15pt,fill=black!15] at ( 0:4) (Merchant) {$\Merchant$}; 1332 \node[circle,minimum size=15pt,fill=blue!15] at (140:3) (Guardian) {$\Guardian$}; 1333 1334 \draw[->] (Guardian) to [out=50,in=130, loop] node[above] 1335 {$\Commit$} (Guardian); 1336 \draw[->,blue] (Client) to [out=-125,in=-190, loop] node[below,left] 1337 {\blue{$\Attest$}} (Client); 1338 \draw[->,blue] (Merchant) to [out=50,in=130, loop] node[above] 1339 {\blue{$\Verify$}} (Merchant); 1340 \draw[->,orange] (Client) to [out=-35,in=-100, loop] node[below] 1341 {\orange{$\Derive$}} (Client); 1342 \draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above] 1343 {\orange{$\Compare$}} (Exchange); 1344 1345 \draw[orange,|->] (Client) to node[sloped,above,align=left] 1346 {\orange{\scriptsize }} (Exchange); 1347 \draw[blue,|->] (Client) to node[sloped, above] 1348 {\blue{\scriptsize }} (Merchant); 1349 \draw[,|->] (Guardian) to node[above,sloped,align=left] 1350 {{\scriptsize }} (Client); 1351 \end{tikzpicture} 1352 \end{center} 1353 } 1354 \end{columns} 1355 \vfill 1356 \uncover<7->{Note: Scheme is independent of payment service protocol.} 1357 \end{frame} 1358 1359 1360 \begin{frame}{Formal Function Signatures} 1361 \small 1362 Searching for functions \uncover<2->{with the following signatures} 1363 \begin{align*} 1364 &\bf \Commit\uncover<2->{: 1365 &(\age, \omega) &\mapsto (\commitment, \pruf) 1366 &\scriptstyle \N_\Age \times \Omega &\scriptstyle \to \Commitments\times\Proofs, 1367 } 1368 \\ 1369 &\bf \Attest\uncover<3->{: 1370 &(\minage, \commitment, \pruf) &\mapsto \attest 1371 &\scriptstyle \N_\Age\times\Commitments\times\Proofs &\scriptstyle \to \Attests \cup \{\Nil\}, 1372 } 1373 \\ 1374 &\bf \Verify\uncover<4->{: 1375 &(\minage, \commitment, \attest) &\mapsto b 1376 &\scriptstyle \N_\Age\times\Commitments\times\Attests &\scriptstyle \to \Z_2, 1377 } 1378 \\ 1379 &\bf \Derive\uncover<5->{: 1380 &(\commitment, \pruf, \omega) &\mapsto (\commitment', \pruf', \blinding) 1381 &\scriptstyle \Commitments\times\Proofs\times\Omega &\scriptstyle \to \Commitments\times\Proofs\times\Blindings, 1382 } 1383 \\ 1384 &\bf \Compare\uncover<6->{: 1385 &(\commitment, \commitment', \blinding) &\mapsto b 1386 &\scriptstyle \Commitments\times\Commitments\times\Blindings &\scriptstyle \to \Z_2, 1387 } 1388 \end{align*} 1389 \uncover<7->{ 1390 with $\Omega, \Proofs, \Commitments, \Attests, \Blindings$ 1391 sufficiently large sets.\\[1em] 1392 Basic and security requirements are defined later.\\[2em] 1393 } 1394 1395 \scriptsize 1396 \uncover<2->{ 1397 Mnemonics:\\ 1398 $\Commitments=$ \textit{c$\Commitments$mmitments}, 1399 $\commitment=$ \textit{Q-mitment} (commitment), 1400 $\Proofs=$ \textit{$\Proofs$roofs}, 1401 } 1402 \uncover<3->{ 1403 $\pruf=$ \textit{$\pruf$roof},\\ 1404 $\Attests=$ \textit{a$\Attests$testations}, 1405 $\attest=$ \textit{a$\attest$testation}, 1406 } 1407 \uncover<5->{ 1408 $\Blindings=$ \textit{$\Blindings$lindings}, 1409 $\blinding=$ \textit{$\blinding$linding}. 1410 } 1411 \end{frame} 1412 1413 \begin{frame}{Age restriction} 1414 \framesubtitle{Naïve scheme} 1415 \begin{center} 1416 \begin{tikzpicture}[scale=.85] 1417 \node[circle,minimum size=20pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$}; 1418 \node[circle,minimum size=20pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1419 \node[circle,minimum size=20pt,fill=black!15] at ( 0:4) (Merchant) {$\Merchant$}; 1420 \node[circle,minimum size=20pt,fill=blue!15] at (140:3) (Guardian) {$\Guardian$}; 1421 1422 \draw[->] (Guardian) to [out=50,in=130, loop] node[above] 1423 {$\Commit$} (Guardian); 1424 \draw[->,blue] (Client) to [out=-125,in=-190, loop] node[below,left] 1425 {\blue{$\Attest$}} (Client); 1426 \draw[->,blue] (Merchant) to [out=50,in=130, loop] node[above] 1427 {\blue{$\Verify$}} (Merchant); 1428 \draw[->,orange] (Client) to [out=-35,in=-100, loop] node[below] 1429 {\orange{$\Derive$}} (Client); 1430 \draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above] 1431 {\orange{$\Compare$}} (Exchange); 1432 1433 \draw[orange,|->] (Client) to node[sloped,above,align=left] 1434 {\orange{\scriptsize }} (Exchange); 1435 \draw[blue,|->] (Client) to node[sloped, above] 1436 {\blue{\scriptsize }} (Merchant); 1437 \draw[,|->] (Guardian) to node[above,sloped,align=left] 1438 {{\scriptsize }} (Client); 1439 \end{tikzpicture} 1440 \end{center} 1441 \end{frame} 1442 1443 \begin{frame}{Achieving Unlinkability} 1444 \begin{columns} 1445 \column{3cm} 1446 \begin{center} 1447 \fontsize{8pt}{9pt}\selectfont 1448 \begin{tikzpicture}[scale=.65] 1449 \node[circle,minimum size=20pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$}; 1450 \node[circle,minimum size=20pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1451 1452 \draw[->,orange] (Client) to [out=-35,in=-100, loop] node[below] 1453 {\orange{$\footnotesize \Derive()$}} (Client); 1454 \draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above] 1455 {\orange{$\footnotesize \Compare()$}} (Exchange); 1456 1457 \draw[orange,|->] (Client) to node[sloped,above,align=left] 1458 {\orange{\tiny \uncover<2->{$(\commitment_i,\commitment_{i+1})$}}} (Exchange); 1459 \end{tikzpicture} 1460 \end{center} 1461 1462 \column{9cm} 1463 Simple use of $\Derive()$ and $\Compare()$ is problematic. 1464 1465 \begin{itemize} 1466 \item<2-> Calling $\Derive()$ iteratively generates sequence 1467 $(\commitment_0, \commitment_1, \dots)$ of commitments. 1468 \item<2-> Exchange calls $\Compare(\commitment_i, \commitment_{i+1}, .)$ 1469 \item[$\implies$]\uncover<3->{\bf Exchange identifies sequence} 1470 \item[$\implies$]\uncover<3->{\bf Unlinkability broken} 1471 \end{itemize} 1472 \end{columns} 1473 \end{frame} 1474 1475 \begin{frame}{Achieving Unlinkability} 1476 Define cut\&choose protocol \orange{$\DeriveCompare$}, 1477 using $\Derive()$ and $\Compare()$.\\[0.5em] 1478 \uncover<2->{ 1479 Sketch: 1480 \small 1481 \begin{enumerate} 1482 \item $\Child$ derives commitments $(\commitment_1,\dots,\commitment_\kappa)$ 1483 from $\commitment_0$ \\ 1484 by calling $\Derive()$ with blindings $(\beta_1,\dots,\beta_\kappa)$ 1485 \item $\Child$ calculates $h_0:=H\left(H(\commitment_1, \beta_1)||\dots||H(\commitment_\kappa, \beta_\kappa)\right)$ 1486 \item $\Child$ sends $\commitment_0$ and $h_0$ to $\Exchange$ 1487 \item $\Exchange$ chooses $\gamma \in \{1,\dots,\kappa\}$ randomly 1488 \item $\Child$ reveals $h_\gamma:=H(\commitment_\gamma, \beta_\gamma)$ and all $(\commitment_i, \beta_i)$, except $(\commitment_\gamma, \beta_\gamma)$ 1489 \item $\Exchange$ compares $h_0$ and 1490 $H\left(H(\commitment_1, \beta_1)||...||h_\gamma||...||H(\commitment_\kappa, \beta_\kappa)\right)$\\ 1491 and evaluates $\Compare(\commitment_0, \commitment_i, \beta_i)$. 1492 \end{enumerate} 1493 \vfill 1494 Note: Scheme is similar to the {\it refresh} protocol in GNU Taler. 1495 } 1496 \end{frame} 1497 1498 \begin{frame}{Achieving Unlinkability} 1499 With \orange{$\DeriveCompare$} 1500 \begin{itemize} 1501 \item $\Exchange$ learns nothing about $\commitment_\gamma$, 1502 \item trusts outcome with $\frac{\kappa-1}{\kappa}$ certainty, 1503 \item i.e. $\Child$ has $\frac{1}{\kappa}$ chance to cheat. 1504 \end{itemize} 1505 \vfill 1506 Note: Still need Derive and Compare to be defined. 1507 \end{frame} 1508 1509 \begin{frame}{Refined scheme} 1510 1511 \begin{tikzpicture}[scale=.8] 1512 \node[circle,minimum size=25pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1513 \node[circle,minimum size=25pt,fill=black!15] at ( 60:5) (Exchange) {$\Exchange$}; 1514 \node[circle,minimum size=25pt,fill=black!15] at ( 0:5) (Merchant) {$\Merchant$}; 1515 \node[circle,minimum size=25pt,fill=blue!15] at (130:3) (Guardian) {$\Guardian$}; 1516 1517 \draw[orange,<->] (Client) to node[sloped,below,align=center] 1518 {\orange{$\DeriveCompare$}} (Exchange); 1519 \draw[blue,->] (Client) to node[sloped, below] 1520 {\blue{$(\attest_\minage, \commitment)$}} (Merchant); 1521 1522 \draw[->] (Guardian) to [out=150,in=70, loop] node[above] 1523 {$\Commit(\age)$} (Guardian); 1524 \draw[->] (Guardian) to node[below,sloped] 1525 {($\commitment$, $\pruf_\age$)} (Client); 1526 \draw[->,blue] (Client) to [out=-50,in=-130, loop] node[below] 1527 {\blue{$\Attest(\minage, \commitment, \pruf_{\age})$}} (Client); 1528 \draw[->,blue] (Merchant) to [out=-50,in=-130, loop] node[below] 1529 {\blue{$\Verify(\minage, \commitment, \attest_{\minage})$}} (Merchant); 1530 \end{tikzpicture} 1531 \end{frame} 1532 1533 % \begin{frame}{Achieving Unlinkability} 1534 % \scriptsize 1535 % $\DeriveCompare : \Commitments\times\Proofs\times\Omega \to \{0,1\}$\\ 1536 % \vfill 1537 % $\DeriveCompare(\commitment, \pruf, \omega) =$ 1538 % \begin{itemize} 1539 % \it 1540 % \itemsep0.5em 1541 % \item[$\Child$:] 1542 % \begin{enumerate} 1543 % \scriptsize 1544 % \itemsep0.3em 1545 % \item for all $i \in \{1,\dots,\kappa\}: 1546 % (\commitment_i,\pruf_i,\beta_i) \leftarrow \Derive(\commitment, \pruf, \omega + i)$ 1547 % \item $h \leftarrow \Hash\big(\Hash(\commitment_1,\beta_1)\parallel\dots\parallel\Hash(\commitment_\kappa,\beta_\kappa) \big)$ 1548 % \item send $(\commitment, h)$ to $\Exchange$ 1549 % \end{enumerate} 1550 % \item[$\Exchange$:] 1551 % \begin{enumerate} 1552 % \setcounter{enumi}{4} 1553 % \scriptsize 1554 % \itemsep0.3em 1555 % \item save $(\commitment, h)$ \label{st:hash} 1556 % \item $\gamma \drawfrom \{1,\dots ,\kappa\}$ 1557 % \item send $\gamma$ to $\Child$ 1558 % \end{enumerate} 1559 % \item[$\Child$:] 1560 % \begin{enumerate} 1561 % \setcounter{enumi}{7} 1562 % 1563 % \scriptsize 1564 % \itemsep0.3em 1565 % \item $h'_\gamma \leftarrow \Hash(\commitment_\gamma, \beta_\gamma)$ 1566 % \item $\mathbf{E}_\gamma \leftarrow \big[(\commitment_1,\beta_1),\dots, 1567 % (\commitment_{\gamma-1}, \beta_{\gamma-1}), 1568 % \Nil, 1569 % (\commitment_{\gamma+1}, \beta_{\gamma+1}), 1570 % \dots,(\commitment_\kappa, \beta_\kappa)\big]$ 1571 % \item send $(\mathbf{E}_\gamma, h'_\gamma)$ to $\Exchange$ 1572 % \end{enumerate} 1573 % \item[$\Exchange$:] 1574 % \begin{enumerate} 1575 % \setcounter{enumi}{10} 1576 % \scriptsize 1577 % \itemsep0.3em 1578 % \item for all $i \in \{1,\dots,\kappa\}\setminus\{\gamma\}: h_i \leftarrow \Hash(\mathbf{E}_\gamma[i])$ 1579 % \item if $h \stackrel{?}{\neq} \HashF(h_1\|\dots\|h_{\gamma-1}\|h'_\gamma\|h_{\gamma+1}\|\dots\|h_{\kappa-1})$ return 0 1580 % \item for all $i \in \{1,\dots,\kappa\}\setminus\{\gamma\}$: 1581 % if $0 \stackrel{?}{=} \Compare(\commitment,\commitment_i, \beta_i)$ return $0$ 1582 % \item return 1 1583 % \end{enumerate} 1584 % \end{itemize} 1585 % \end{frame} 1586 1587 \begin{frame}{Basic Requirements} 1588 1589 Candidate functions 1590 \[ (\Commit, \Attest, \Verify, \Derive, \Compare) \] 1591 must first meet \textit{basic} requirements: 1592 1593 \begin{itemize} 1594 \item Existence of attestations 1595 \item Efficacy of attestations 1596 \item Derivability of commitments and attestations 1597 \end{itemize} 1598 \end{frame} 1599 1600 \begin{frame}{Basic Requirements} 1601 \framesubtitle{Formal Details} 1602 1603 \begin{description} 1604 \item[Existence of attestations] 1605 {\scriptsize 1606 \begin{align*} 1607 \Forall_{\age\in\N_\Age \atop \omega \in \Omega}: 1608 \Commit(\age, \omega) =: (\commitment, \pruf) 1609 \implies 1610 \Attest(\minage, \commitment, \pruf) = 1611 \begin{cases} 1612 \attest \in \Attests, \text{ if } \minage \leq \age\\ 1613 \Nil \text{ otherwise} 1614 \end{cases} 1615 \end{align*}} 1616 \item[Efficacy of attestations] 1617 {\scriptsize 1618 \begin{align*} 1619 \Verify(\minage, \commitment, \attest) = \ 1620 \begin{cases} 1621 1, \text{if } \Exists_{\pruf \in \Proofs}: \Attest(\minage, \commitment, \pruf) = \attest\\ 1622 0 \text{ otherwise} 1623 \end{cases} 1624 \end{align*}} 1625 1626 {\scriptsize 1627 \begin{align*} 1628 \forall_{n \leq \age}: \Verify\big(n, \commitment, \Attest(n, \commitment, \pruf)\big) = 1. 1629 \end{align*}} 1630 \item[etc.] 1631 \end{description} 1632 \end{frame} 1633 1634 %\begin{frame}{Requirements} 1635 % \framesubtitle{Details} 1636 % 1637 % \begin{description} 1638 % \item[Derivability of commitments and proofs:]~\\[0.1em] 1639 % {\scriptsize 1640 % Let \begin{align*} 1641 % \age & \in\N_\Age,\,\, \omega_0, \omega_1 \in\Omega\\ 1642 % (\commitment_0, \pruf_0) & \leftarrow \Commit(\age, \omega_0),\\ 1643 % (\commitment_1, \pruf_1, \blinding) & \leftarrow \Derive(\commitment_0, \pruf_0, \omega_1). 1644 % \end{align*} 1645 % We require 1646 % \begin{align*} 1647 % \Compare(\commitment_0, \commitment_1, \blinding) = 1 \label{req:comparity} 1648 % \end{align*} 1649 % and for all $n\leq\age$: 1650 % \begin{align*} 1651 % \Verify(n, \commitment_1, \Attest(n, \commitment_1, \pruf_1)) &% 1652 % = 1653 % \Verify(n, \commitment_0, \Attest(n, \commitment_0, \pruf_0)) 1654 % \end{align*}} 1655 % \end{description} 1656 %\end{frame} 1657 1658 \begin{frame}{Security Requirements} 1659 Candidate functions must also meet \textit{security} requirements. 1660 Those are defined via security games: 1661 \begin{itemize} 1662 \item Game: Age disclosure by commitment or attestation 1663 \item[$\leftrightarrow$] Requirement: Non-disclosure of age 1664 \vfill 1665 1666 \item Game: Forging attestation 1667 \item[$\leftrightarrow$] Requirement: Unforgeability of 1668 minimum age 1669 \vfill 1670 1671 \item Game: Distinguishing derived commitments and attestations 1672 \item[$\leftrightarrow$] Requirement: Unlinkability of 1673 commitments and attestations 1674 1675 \end{itemize} 1676 \vfill 1677 1678 Meeting the security requirements means that adversaries can win 1679 those games only with negligible advantage. 1680 \vfill 1681 Adversaries are arbitrary polynomial-time algorithms, acting on all 1682 relevant input. 1683 \end{frame} 1684 1685 \begin{frame}{Security Requirements} 1686 \framesubtitle{Simplified Example} 1687 1688 \begin{description} 1689 \item[Game $\Game{FA}(\lambda)$---Forging an attest:]~\\ 1690 {\small 1691 \begin{enumerate} 1692 \item $ (\age, \omega) \drawfrom \N_{\Age-1}\times\Omega $ 1693 \item $ (\commitment, \pruf) \leftarrow \Commit(\age, \omega) $ 1694 \item $ (\minage, \attest) \leftarrow \Adv(\age, \commitment, \pruf)$ 1695 \item Return 0 if $\minage \leq \age$ 1696 \item Return $\Verify(\minage,\commitment,\attest)$ 1697 \end{enumerate} 1698 } 1699 \vfill 1700 \item[Requirement: Unforgeability of minimum age] 1701 {\small 1702 \begin{equation*} 1703 \Forall_{\Adv\in\PPT(\N_\Age\times\Commitments\times\Proofs\to \N_\Age\times\Attests)}: 1704 \Probability\Big[\Game{FA}(\lambda) = 1\Big] \le \negl(\lambda) 1705 \end{equation*} 1706 } 1707 \end{description} 1708 \end{frame} 1709 1710 1711 \begin{frame}{Solution: Instantiation with ECDSA} 1712 % \framesubtitle{Definition of Commit} 1713 1714 \begin{description} 1715 \item[To Commit to age (group) $\age \in \{1,\dots,\Age\}$]~\\ 1716 \begin{enumerate} 1717 \item<2-> Guardian generates ECDSA-keypairs, one per age (group): 1718 \[\langle(q_1, p_1),\dots,(q_\Age,p_\Age)\rangle\] 1719 \item<3-> Guardian then \textbf{drops} all private keys 1720 $p_i$ for $i > \age$: 1721 \[\Big \langle(q_1, p_1),\dots, 1722 (q_\age, p_\age), 1723 (q_{\age +1}, \red{\Nil}),\dots, 1724 (q_\Age, \red{\Nil})\Big\rangle\] 1725 1726 \begin{itemize} 1727 \item $\Vcommitment := (q_1, \dots, q_\Age)$ is the \textit{Commitment}, 1728 \item $\Vpruf_\age := (p_1, \dots, p_\age, \Nil,\dots,\Nil)$ is the \textit{Proof} 1729 \end{itemize} 1730 \vfill 1731 \item<4-> Guardian gives child $\langle \Vcommitment, \Vpruf_\age \rangle$ 1732 \vfill 1733 \end{enumerate} 1734 \end{description} 1735 \end{frame} 1736 1737 \begin{frame}{Instantiation with ECDSA} 1738 \framesubtitle{Definitions of Attest and Verify} 1739 1740 Child has 1741 \begin{itemize} 1742 \item ordered public-keys $\Vcommitment = (q_1, \dots, q_\Age) $, 1743 \item (some) private-keys $\Vpruf = (p_1, \dots, p_\age, \Nil, \dots, \Nil)$. 1744 \end{itemize} 1745 \begin{description} 1746 \item<2->[To \blue{Attest} a minimum age $\blue{\minage} \leq \age$:]~\\ 1747 Sign a message with ECDSA using private key $p_\blue{\minage}$ 1748 \end{description} 1749 1750 \vfill 1751 1752 \uncover<3->{ 1753 Merchant gets 1754 \begin{itemize} 1755 \item ordered public-keys $\Vcommitment = (q_1, \dots, q_\Age) $ 1756 \item Signature $\sigma$ 1757 \end{itemize} 1758 \begin{description} 1759 \item<4->[To \blue{Verify} a minimum age $\minage$:]~\\ 1760 Verify the ECDSA-Signature $\sigma$ with public key $q_\minage$. 1761 \end{description} 1762 } 1763 \vfill 1764 \end{frame} 1765 1766 \begin{frame}{Instantiation with ECDSA} 1767 \framesubtitle{Definitions of Derive and Compare} 1768 Child has 1769 $\Vcommitment = (q_1, \dots, q_\Age) $ and 1770 $\Vpruf = (p_1, \dots, p_\age, \Nil, \dots, \Nil)$. 1771 \begin{description} 1772 \item<2->[To \blue{Derive} new $\Vcommitment'$ and $\Vpruf'$:] 1773 Choose random $\beta\in\Z_g$ and calculate 1774 \small 1775 \begin{align*} 1776 \Vcommitment' &:= \big(\beta * q_1,\ldots,\beta * q_\Age\big),\\ 1777 \Vpruf' &:= \big(\beta p_1,\ldots,\beta p_\age,\Nil,\ldots,\Nil\big) 1778 \end{align*} 1779 Note: $ (\beta p_i)*G = \beta*(p_i*G) = \beta*q_i$\\ 1780 \scriptsize $\beta*q_i$ is scalar multiplication on the elliptic curve. 1781 \end{description} 1782 1783 \vfill 1784 \uncover<3->{ 1785 Exchange gets $\Vcommitment = (q_1,\dots,q_\Age)$, $\Vcommitment' = (q_1', \dots, q_\Age')$ and $\beta$ 1786 \begin{description} 1787 \item[To \blue{Compare}, calculate:] 1788 \small 1789 $(\beta * q_1, \ldots , \beta * q_\Age) \stackrel{?}{=} (q'_1,\ldots, q'_\Age)$ 1790 \end{description} 1791 \vfill 1792 } 1793 \end{frame} 1794 1795 \begin{frame}{Instantiation with ECDSA} 1796 1797 Functions 1798 (Commit, Attest, Verify, Derive, Compare)\\ 1799 as defined in the instantiation with ECDSA\\[0.5em] 1800 \begin{itemize} 1801 \item meet the basic requirements,\\[0.5em] 1802 \item also meet all security requirements.\\ 1803 Proofs by security reduction, details are in the paper. 1804 \end{itemize} 1805 1806 \end{frame} 1807 1808 1809 % \begin{frame}{Instantiation with ECDSA} 1810 % \framesubtitle{Full definitions} 1811 % \scriptsize 1812 % 1813 % \begin{align*} 1814 % \Commit_{E,\FDHg{\cdot}}(\age, \omega) &:= \Big\langle 1815 % \overbrace{(q_1,\ldots,q_\Age)}^{= \Vcommitment},\; 1816 % \overbrace{(p_1,\ldots,p_\age, \Nil,\ldots,\Nil)}^{= \Vpruf \text{, length }\Age} 1817 % \Big\rangle\\ 1818 % \Attest_{E,\HashF}(\bage, \Vcommitment, \Vpruf) &:= 1819 % \begin{cases} 1820 % \attest_\bage := \Sign_{E,\HashF}\big(\bage,\Vpruf[\bage]\big) & \text{if } \Vpruf[\bage] \stackrel{?}{\neq} \Nil\\ 1821 % \Nil & \text{otherwise} 1822 % \end{cases}\\ 1823 % % 1824 % \Verify_{E,\HashF}(\bage, \Vcommitment, \attest) &:= \Ver_{E,\HashF}(\bage, \Vcommitment[\bage], \attest)\\ 1825 % % 1826 % \Derive_{E, \FDHg{\cdot}}(\Vcommitment, \Vpruf, \omega) &:= 1827 % \Big\langle(\beta * q_1,\ldots,\beta * q_\Age), 1828 % (\beta p_1,\ldots,\beta p_\age,\Nil,\ldots,\Nil), \beta \Big\rangle \\ 1829 % & \text{ with } \beta := \FDHg{\omega} \text{ and multiplication } \beta p_i \text{ modulo } g \nonumber\\ 1830 % % 1831 % \Compare_E(\Vcommitment, \Vcommitment', \beta) &:= 1832 % \begin{cases} 1833 % 1 & \text{if } (\beta * q_1, \ldots , \beta * q_\Age) \stackrel{?}{=} (q'_1,\ldots, q'_\Age)\\ 1834 % 0 & \text{otherwise} 1835 % \end{cases} 1836 % \end{align*} 1837 % \end{frame} 1838 1839 1840 \begin{frame}{Reminder: GNU Taler Fundamentals} 1841 \begin{center} 1842 \begin{tikzpicture}[scale=.55] 1843 \node[circle,fill=black!10] at (3, 4) (Exchange) {$\Exchange$}; 1844 \node[circle,fill=black!10] at (0, 0) (Customer) {$\Customer$}; 1845 \node[circle,fill=black!10] at (6, 0) (Merchant) {$\Merchant$}; 1846 1847 \draw[<->] (Customer) to [out=65,in=220] node[sloped,above] {\sf withdraw} (Exchange); 1848 \draw[<->] (Customer) to [out=45,in=240] node[sloped,below] {\sf refresh} (Exchange); 1849 \draw[<->] (Customer) to node[sloped, below] {\sf purchase} (Merchant); 1850 \draw[<->] (Merchant) to node[sloped, above] {\sf deposit} (Exchange); 1851 \end{tikzpicture} 1852 \end{center} 1853 1854 \vfill 1855 \begin{itemize} 1856 \item Coins are public-/private key-pairs $(C_p, c_s)$. 1857 \item Exchange blindly signs $\FDH(C_p)$ with denomination key $d_p$ 1858 \item Verification: 1859 \begin{eqnarray*} 1860 1 &\stackrel{?}{=}& 1861 \mathsf{SigCheck}\big(\FDH(C_p), D_p, \sigma_p\big) 1862 \end{eqnarray*} 1863 \scriptsize($D_p$ = public key of denomination and $\sigma_p$ = signature) 1864 1865 \end{itemize} 1866 \end{frame} 1867 1868 \begin{frame}{Integration with GNU Taler} 1869 \framesubtitle{Binding age restriction to coins} 1870 1871 To bind an age commitment $\commitment$ to a coin $C_p$, instead of 1872 signing $\FDH(C_p)$, $\Exchange$ now blindly signs 1873 \begin{center} 1874 $\FDH(C_p, \orange{H(\commitment)})$ 1875 \end{center} 1876 1877 \vfill 1878 Verfication of a coin now requires $H(\commitment)$, too: 1879 \begin{center} 1880 $1 \stackrel{?}{=} 1881 \mathsf{SigCheck}\big(\FDH(C_p, \orange{H(\commitment)}), D_p, \sigma_p\big)$ 1882 \end{center} 1883 \vfill 1884 \end{frame} 1885 1886 \begin{frame}{Integration with GNU Taler} 1887 \framesubtitle{Integrated schemes} 1888 \fontsize{8pt}{9pt}\selectfont 1889 \begin{tikzpicture}[scale=.9] 1890 \node[circle,minimum size=25pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1891 \node[circle,minimum size=25pt,fill=black!15] at ( 60:5) (Exchange) {$\Exchange$}; 1892 \node[circle,minimum size=25pt,fill=black!15] at ( 0:5) (Merchant) {$\Merchant$}; 1893 \node[circle,minimum size=25pt,fill=blue!15] at (130:3) (Guardian) {$\Guardian$}; 1894 1895 \draw[<->] (Guardian) to node[sloped,above,align=center] 1896 {{\sf withdraw}\orange{, using}\\ $\FDH(C_p\orange{, H(\commitment)})$} (Exchange); 1897 \draw[<->] (Client) to node[sloped,below,align=center] 1898 {{\sf refresh} \orange{ + }\\ \orange{$\DeriveCompare$}} (Exchange); 1899 \draw[<->] (Client) to node[sloped, below] 1900 {{\sf purchase} \blue{+ $(\attest_\minage, \commitment)$}} (Merchant); 1901 \draw[<->] (Merchant) to node[sloped, above] 1902 {{\sf deposit} \orange{+ $H(\commitment)$}} (Exchange); 1903 1904 \draw[->] (Guardian) to [out=70,in=150, loop] node[above] 1905 {$\Commit(\age)$} (Guardian); 1906 \draw[->] (Guardian) to node[below,sloped] 1907 {($\commitment$, $\pruf_\age$)} (Client); 1908 \draw[->,blue] (Client) to [out=-50,in=-130, loop] node[below] 1909 {\blue{$\Attest(\minage, \commitment, \pruf_{\age})$}} (Client); 1910 \draw[->,blue] (Merchant) to [out=-50,in=-130, loop] node[below] 1911 {\blue{$\Verify(\minage, \commitment, \attest_{\minage})$}} (Merchant); 1912 \end{tikzpicture} 1913 \end{frame} 1914 1915 \begin{frame}{Instantiation with Edx25519} 1916 Paper also formally defines another signature scheme: Edx25519.\\[1em] 1917 1918 \begin{itemize} 1919 \item Scheme already in use in GNUnet, 1920 \item based on EdDSA (Bernstein et al.), 1921 \item generates compatible signatures and 1922 \item allows for key derivation from both, private and public keys, independently. 1923 \end{itemize}~\\[1em] 1924 1925 Current implementation of age restriction in GNU Taler uses Edx25519. 1926 \end{frame} 1927 1928 1929 \begin{frame}{Discussion} 1930 \begin{itemize} 1931 \item Our solution can in principle be used with any token-based payment scheme 1932 \item GNU Taler best aligned with our design goals (security, privacy and efficiency) 1933 \item Subsidiarity requires bank accounts being owned by adults 1934 \begin{itemize} 1935 \item Scheme can be adapted to case where minors have bank accounts 1936 \begin{itemize} 1937 \item Assumption: banks provide minimum age 1938 information during bank 1939 transactions. 1940 \item Child and Exchange execute a variant of 1941 the cut\&choose protocol. 1942 \end{itemize} 1943 \end{itemize} 1944 \item Our scheme offers an alternative to identity management systems (IMS) 1945 \end{itemize} 1946 \end{frame} 1947 \begin{frame}{Related Work} 1948 \begin{itemize} 1949 \item Current privacy-perserving systems all based on attribute-based credentials (Koning et al., Schanzenbach et al., Camenisch et al., Au et al.) 1950 \item Attribute-based approach lacks support: 1951 \begin{itemize} 1952 \item Complex for consumers and retailers 1953 \item Requires trusted third authority 1954 \end{itemize} 1955 \vfill 1956 \item Other approaches tie age-restriction to ability to pay ("debit cards for kids") 1957 \begin{itemize} 1958 \item Advantage: mandatory to payment process 1959 \item Not privacy friendly 1960 \end{itemize} 1961 \end{itemize} 1962 \end{frame} 1963 1964 \begin{frame}{Conclusion} 1965 Age restriction is a technical, ethical and legal challenge. 1966 1967 Existing solutions are 1968 \begin{itemize} 1969 \item without strong protection of privacy or 1970 \item based on identity management systems (IMS) 1971 \end{itemize} 1972 \vfill 1973 1974 Our scheme offers a solution that is 1975 \begin{itemize} 1976 \item based on subsidiarity 1977 \item privacy preserving 1978 \item efficient 1979 \item an alternative to IMS 1980 \end{itemize} 1981 \end{frame} 1982 1983 1984 \begin{frame}{Blockchain based cryptocurrencies} 1985 \begin{tikzpicture}[remember picture,overlay] 1986 \node (N1)[above right=5mm and 25mm of current page.center] {\includegraphics[width=34mm]{media/news1.png}}; 1987 \node (N0)[below=-3mm of N1] {\includegraphics[width=34mm]{media/news0.png}}; 1988 \node (N2)[below left=-26mm and -2.5mm of N1] {\includegraphics[width=34mm]{media/news2.png}}; 1989 \end{tikzpicture} 1990 \begin{block}{Biggest cryptocurrencies} 1991 \begin{itemize} 1992 \item \textbf{BTC} Bitcoin 1993 \item \textbf{ETH} Ethereum 1994 \end{itemize} 1995 \end{block} 1996 \begin{block}{Common blockchain limitations} 1997 \begin{itemize} 1998 \item \textbf{Delay} block and confirmation delay 1999 \item \textbf{Cost} transaction fees 2000 \item \textbf{Scalability} limited amount of transaction per second 2001 \item \textbf{Ecological impact} computation redundancy 2002 \item \textbf{Privacy} 2003 \item \textbf{Regulatory risk} 2004 \end{itemize} 2005 \end{block} 2006 \end{frame} 2007 2008 \begin{frame}{Taler}{Architecture} 2009 \begin{columns} 2010 \column{0.5\paperwidth} 2011 \begin{tikzpicture}[ 2012 rect/.style={circle, draw=black}, 2013 sym/.style={-stealth, shorten >= 2pt, shorten <= 2pt} 2014 ] 2015 % Taler payment system 2016 \node[rect](1) {Exchange}; 2017 \node[rect,below left=1.5cm and 0.7cm of 1](2) {Customer}; 2018 \node[rect,below right=1.5cm and 0.7cm of 1](3) {Merchant}; 2019 2020 \draw[sym] (1) -- node [midway, above, sloped] {\tiny Withdraw coins} (2); 2021 \draw[sym] (2) -- node [midway, above, sloped] {\tiny Spend coins} (3); 2022 \draw[sym] (3) -- node [midway, above, sloped] {\tiny Deposit coins} (1); 2023 2024 % Settlement layer 2025 \node[left=2cm of 1](E1){}; 2026 \node[right=2cm of 1](E2){}; 2027 \draw[sym] (E1) -- node [midway, above] {\tiny Deposit money} (1); 2028 \draw[sym] (1) -- node [midway, above] {\tiny Withdraw money} (E2); 2029 2030 % Auditor 2031 \node[above= of 1](A){Auditor}; 2032 \draw[sym] (A) -- node [midway, right] {\tiny Verify} (1); 2033 2034 % Separator 2035 \node[below=1mm of E1] (S1S) {}; 2036 \node[below=1mm of E2] (S1E) {}; 2037 \node[above=6mm of E1] (S2S) {}; 2038 \node[above=6mm of E2] (S2E) {}; 2039 2040 \draw[dotted] (S1S) -- (S1E); 2041 \draw[dotted] (S2S) -- (S2E); 2042 2043 \node[below right=-2mm and -1.5mm of S2S] {\tiny{\emph{Settlement Layer}}}; 2044 \node[below right=-2mm and -1.5mm of S1S] {\tiny{\emph{Taler payment system}}}; 2045 \end{tikzpicture} 2046 \column{0.47\paperwidth} 2047 \begin{block}{Settlement layer} 2048 \begin{itemize} 2049 \item This work, Blockchain! 2050 \end{itemize} 2051 \end{block} 2052 \begin{block}{Taler payment system} 2053 \begin{itemize} 2054 \item Realtime transactions, 1 RTT 2055 \item Scalable microtransactions 2056 \item Blind signatures (privacy) 2057 \end{itemize} 2058 \end{block} 2059 2060 \end{columns} 2061 \end{frame} 2062 2063 \begin{frame}{Taler}{Blockchain settlement layer} 2064 \begin{center} 2065 \begin{tikzpicture}[ 2066 rect/.style={rectangle, draw=black, minimum width=30mm}, 2067 sym/.style={stealth-stealth, shorten >= 2pt, shorten <= 2pt}, 2068 block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm}, 2069 ] 2070 2071 %% Architecture 2072 \node(Tt){Taler}; 2073 \node[rect,below=0cm of Tt](Tc){Exchange}; 2074 \node[rect,fit={(Tt) (Tc)}](T){}; 2075 2076 \node[rect,below=7mm of Tc](D) {\textbf{Depolymerization}}; 2077 2078 \node[rect,below=7mm of D](Bc){Node}; 2079 \node[below=0cm of Bc](Bt){Blockchain}; 2080 \node[rect,fit={(Bt) (Bc)}](B){}; 2081 2082 \draw[sym] (T) -- (D); 2083 \draw[sym] (D) -- (B); 2084 2085 %% Blockchain 2086 \node[block,right=8mm of B] (1){}; 2087 \node[block,right=4mm of 1] (2){}; 2088 \node[block,right=4mm of 2] (3){}; 2089 \node[block,right=4mm of 3] (4){}; 2090 \node[block,right=4mm of 4] (5){}; 2091 \node[block,right=4mm of 5] (6){}; 2092 \draw[-stealth] (1) -- (2); 2093 \draw[-stealth] (2) -- (3); 2094 \draw[-stealth] (3) -- (4); 2095 \draw[-stealth] (4) -- (5); 2096 \draw[-stealth] (5) -- (6); 2097 2098 \node[left=4mm of 1] (S){}; 2099 \node[right=4mm of 6] (E){}; 2100 \draw[-stealth] (S) -- (1); 2101 \draw[-stealth] (6) -- (E); 2102 2103 %% Taler 2104 \node[block, below right=-7.5mm and 20.5mm of T] (off){Off-chain transactions}; 2105 \node[above=-0.5mm of off] {\includegraphics[height=7mm]{media/taler.png}}; 2106 2107 %% Depolymerization 2108 \node[right=11mm of D] {\small{Credit}}; 2109 \node[right=50mm of D] {\small{Debit}}; 2110 \draw[dashed,-stealth] (1.north) |- (off.west); 2111 \draw[dashed,-stealth] (off.east) -| (6.north); 2112 \end{tikzpicture} 2113 \end{center} 2114 \end{frame} 2115 2116 \begin{frame}{Challenges} 2117 \begin{block}{Taler Metadata} 2118 \begin{itemize} 2119 \item Metadata are required to link a wallet to credits and 2120 allow merchant to link deposits to debits 2121 \item Putting metadata in blockchain transactions can be tricky 2122 \end{itemize} 2123 \end{block} 2124 \begin{block}{Blockchain based cryptocurrencies} 2125 \begin{itemize} 2126 \item Blockchain transactions lack finality (fork) 2127 \item Transactions can be stuck for a long time (mempool) 2128 \end{itemize} 2129 \end{block} 2130 \end{frame} 2131 2132 \begin{frame}{Blockchain challenges}{Chain reorganization} 2133 \begin{center} 2134 \begin{tikzpicture}[ 2135 block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm}, 2136 ar/.style={-stealth} 2137 ] 2138 % Common 2139 \node[block](1){}; 2140 \node[block,right=5mm of 1](2){$D_0$}; 2141 \node[block,right=5mm of 2](3){}; 2142 \draw[ar] (1) -- (2); 2143 \draw[ar] (2) -- (3); 2144 2145 % Current 2146 \node [block,right=5mm of 3](4){}; 2147 \node[block,right=5mm of 4](5){}; 2148 \node[block,right=5mm of 5](6){$D_1$}; 2149 \draw[ar] (3) -- (4); 2150 \draw[ar] (4) -- (5); 2151 \draw[ar] (5) -- (6); 2152 2153 % Fork 2154 \node [block,above=7mm of 4](4p){}; 2155 \node[block,right=5mm of 4p](5p){$D_2$}; 2156 \node[block,right=5mm of 5p](6p){}; 2157 \node[block,right=5mm of 6p](7p){}; 2158 \draw[ar] (3.east) -- (4p.west); 2159 \draw[ar] (4p) -- (5p); 2160 \draw[ar] (5p) -- (6p); 2161 \draw[ar] (6p) -- (7p); 2162 2163 % Indication 2164 \node [right=5mm of 7p]{\emph{fork}}; 2165 \node [right=17mm of 6]{\emph{active}}; 2166 \end{tikzpicture} 2167 \end{center} 2168 A fork is when concurrent blockchain states coexist. Nodes will follow 2169 the longest chain, replacing recent blocks if necessary during a 2170 blockchain reorganization. If a deposit transaction disappears from the 2171 blockchain, an irrevocable withdraw transactions would no longer be backed 2172 by credit. 2173 \end{frame} 2174 2175 \begin{frame}{Blockchain challenges}{Stuck transactions} 2176 We want confirmed debits within a limited time frame. 2177 \begin{figure} 2178 \centering 2179 \only<1> { 2180 \begin{tikzpicture}[ 2181 dot/.style={circle,fill,inner sep=1pt,} 2182 ] 2183 \node (I) {\includegraphics[width=\textwidth]{media/fee.png}}; 2184 \node [below left=-2.5mm and -1.5cm of I] (Tx) {\small Tx}; 2185 \node [dot,above=8.4mm of Tx](D) {}; 2186 \draw [dotted,thick] (Tx) -- (D); 2187 \node [left=-4.5cm of Tx] (C) {\small conf}; 2188 \node [dot,above=8.4mm of C](D1) {}; 2189 \draw [dotted,thick] (C) -- (D1); 2190 \end{tikzpicture} 2191 } 2192 \only<2> { 2193 \includegraphics[width=\textwidth]{media/fee_var.png} 2194 \caption{Bitcoin average transaction fee over 6 months {\tiny (ychart)}} 2195 } 2196 \end{figure} 2197 \only<1>{When we trigger a debit with a fee too small, it may not be 2198 confirmed in a timely fashion.} 2199 \only<2>{However, transaction fees are unpredictable.} 2200 \end{frame} 2201 2202 2203 \begin{frame}{Depolymerization}{Architecture} 2204 \begin{center} 2205 \begin{tikzpicture}[ 2206 rect/.style={rectangle, draw=black, minimum height=6mm, minimum width=28mm}, 2207 sym/.style={stealth-stealth, shorten >= 2pt, shorten <= 2pt} 2208 ] 2209 \node[rect](1) {Taler Exchange}; 2210 \node[rect,below=of 1](2) {Wire Gateway}; 2211 \node[rect,right=of 2](3) {PostgreSQL}; 2212 \node[rect,right=of 3](4) {DLT Adapter}; 2213 \node[rect,above=of 4](5) {DLT Full Node}; 2214 2215 \draw[sym] (1) -- node [midway,right] {\tiny HTTP} (2); 2216 \draw[sym] (2) -- node [midway,above] {\tiny SQL} (3); 2217 \draw[sym] (3) -- node [midway,above] {\tiny SQL} (4); 2218 \draw[sym] (4) -- node [midway,left ] {\tiny RPC} (5); 2219 2220 2221 \node[above= 2mm of 1]{\small{\emph{Wire Gateway API}}}; 2222 \node[above= 2mm of 5]{\small{\emph{DLT specific}}}; 2223 \node[above=22mm of 3](T) {}; 2224 \draw[dotted] (3) -- (T); 2225 \end{tikzpicture} 2226 \end{center} 2227 \begin{itemize} 2228 \item Common database to store transactions state and communicate 2229 with notifications 2230 \item Wire Gateway for Taler API compatibility 2231 \item DLT specific adapter 2232 \end{itemize} 2233 \end{frame} 2234 2235 \begin{frame}{Storing metadata}{Bitcoin} 2236 \begin{block}{Bitcoin - Credit} 2237 \begin{itemize} 2238 \item Transactions from code 2239 \item Only 32B + URI 2240 \item \textbf{OP\_RETURN} 2241 \end{itemize} 2242 \end{block} 2243 \begin{block}{Bitcoin - Debit} 2244 \begin{itemize} 2245 \item Transactions from common wallet software 2246 \item Only 32B 2247 \item \textbf{Fake Segwit Addresses} 2248 \end{itemize} 2249 \end{block} 2250 \end{frame} 2251 \begin{frame}{Storing metadata}{Ethereum} 2252 \begin{block}{Smart contract ?} 2253 \begin{itemize} 2254 \item Logs in smart contract is the recommend way {\tiny (ethereum.org)} 2255 \item Expensive (additional storage and execution fees) 2256 \item Avoidable attack surface (error prone) 2257 \end{itemize} 2258 \end{block} 2259 \begin{block}{Custom input format} 2260 Use input data in transactions, usually used to call smart contract, to 2261 store our metadata. 2262 \end{block} 2263 \end{frame} 2264 2265 \begin{frame}{Handling blockchain reorganization} 2266 \begin{center} 2267 \begin{tikzpicture}[ 2268 block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm}, 2269 conf/.style={draw=black!60!green,fill=black!60!green!10}, 2270 nconf/.style={dotted}, 2271 err/.style={draw=black!60!red,fill=black!60!red!10}, 2272 ar/.style={-stealth} 2273 ] 2274 % Common 2275 \node[block,conf](1){}; 2276 \node[block,conf,right=5mm of 1](2){$D_0$}; 2277 \node[block,conf,right=5mm of 2](3){}; 2278 \draw[ar] (1) -- (2); 2279 \draw[ar] (2) -- (3); 2280 2281 % Current 2282 \only<1>{ 2283 \node [block,nconf,right=5mm of 3](4){}; 2284 } 2285 \only<2->{ 2286 \node [block,conf,right=5mm of 3](4){\only<3>{$D_3$}}; 2287 } 2288 \node[block,nconf,right=5mm of 4](5){}; 2289 \node[block,nconf,right=5mm of 5](6){$D_1$}; 2290 \draw[ar] (3) -- (4); 2291 \draw[ar] (4) -- (5); 2292 \draw[ar] (5) -- (6); 2293 2294 % Fork 2295 \only<-2>{ 2296 \node [block,nconf,above=7mm of 4](4p){}; 2297 } 2298 \only<3>{ 2299 \node [block,dashed,err,above=7mm of 4](4p){$D_3'$}; 2300 } 2301 \node[block,nconf,right=5mm of 4p](5p){$D_2$}; 2302 \node[block,nconf,right=5mm of 5p](6p){}; 2303 \node[block,nconf,right=5mm of 6p](7p){}; 2304 \draw[ar] (3.east) -- (4p.west); 2305 \draw[ar] (4p) -- (5p); 2306 \draw[ar] (5p) -- (6p); 2307 \draw[ar] (6p) -- (7p); 2308 2309 % Indication 2310 \node [right=5mm of 7p]{\emph{fork}}; 2311 \node [right=17mm of 6]{\emph{active}}; 2312 \end{tikzpicture} 2313 \end{center} 2314 \only<1>{As small reorganizations are common, Satoshi already recommended to 2315 apply a confirmation delay to handle most disturbances and attacks.} 2316 \only<2>{If a reorganization longer than the confirmation delay happens, 2317 but it did not remove credits, Depolymerizer is safe and automatically 2318 resumes.} 2319 \only<3>{If a fork removed a confirmed debit, an attacker may create a 2320 conflicting transaction. Depolymerizer suspends operation until lost 2321 credits reappear.} 2322 \end{frame} 2323 2324 \begin{frame}{Adaptive confirmation} 2325 \begin{center} 2326 \begin{tikzpicture}[ 2327 block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm}, 2328 conf/.style={draw=black!60!green,fill=black!60!green!10}, 2329 nconf/.style={dotted}, 2330 conft/.style={text=black!60!green}, 2331 confl/.style={draw=black!60!green}, 2332 ar/.style={-stealth} 2333 ] 2334 % Common 2335 \node(0){}; 2336 \node[block,conf,right=5mm of 0](1){}; 2337 \node[block,conf,right=5mm of 1](2){}; 2338 \draw[ar] (0) -- (1); 2339 \draw[ar] (1) -- (2); 2340 2341 % Current 2342 \node[block,conf,right=5mm of 2](3){}; 2343 \node[block,nconf,right=5mm of 3](4){}; 2344 \node[block,nconf,right=5mm of 4](5){}; 2345 \node[block,nconf,right=5mm of 5](6){}; 2346 \draw[ar] (2) -- (3); 2347 \draw[ar] (3) -- (4); 2348 \draw[ar] (4) -- (5); 2349 \draw[ar] (5) -- (6); 2350 2351 % Fork 2352 \node[block,nconf,above=7mm of 3](3p){}; 2353 \node[block,nconf,right=5mm of 3p](4p){}; 2354 \node[block,nconf,right=5mm of 4p](5p){}; 2355 \node[block,nconf,right=5mm of 5p](6p){}; 2356 \node[block,nconf,right=5mm of 6p](7p){}; 2357 \draw[ar] (2.east) -- (3p.west); 2358 \draw[ar] (3p) -- (4p); 2359 \draw[ar] (4p) -- (5p); 2360 \draw[ar] (5p) -- (6p); 2361 \draw[ar] (6p) -- (7p); 2362 2363 % Indication 2364 \node[right=5mm of 7p]{\emph{fork}}; 2365 \node[right=17mm of 6]{\emph{active}}; 2366 2367 % Confirmation 2368 \path (0) -- (1) node[conft,midway, below=6mm] (M) {Max}; 2369 \path (2) -- (3) node[conft,midway, below=6mm] (N) {New}; 2370 \path (3) -- (4) node[conft,midway, below=6mm] (I) {Initial}; 2371 \node[above=25mm of M] (Mp) {}; 2372 \node[above=25mm of N] (Np) {}; 2373 \node[above=25mm of I] (Ip) {}; 2374 \draw[confl,thick,dotted](M) -- (Mp); 2375 \draw[confl](N) -- (Np); 2376 \draw[confl,thick,dotted](I) -- (Ip); 2377 \end{tikzpicture} 2378 \end{center} 2379 If we experience a reorganization once, its dangerously likely for another 2380 one of a similar scope to happen again. Depolymerizer learns from reorganizations 2381 by increasing its confirmation delay. 2382 \end{frame} 2383 2384 2385 2386 \begin{frame}{DLT Adapter}{Architecture} 2387 \begin{block}{Event system} 2388 \begin{itemize} 2389 \item \textbf{Watcher} watch and notify for new blocks with credits 2390 \item \textbf{Wire Gateway} notify requested debits 2391 \item \textbf{Worker} operates on notifications updating state 2392 \end{itemize} 2393 \end{block} 2394 \end{frame} 2395 2396 2397 \begin{frame}{DLT Adapter state machine} 2398 \begin{columns} 2399 \column{0.5\paperwidth} 2400 \begin{figure} 2401 \begin{tikzpicture}[ 2402 rect/.style={rectangle, draw=black, minimum height=6mm, minimum width=50mm}, 2403 ] 2404 2405 \node[rect](wo1) {Wait for notifications}; 2406 \node[rect, below=4mm of wo1](wo2) {Reconcile local DB with DLT}; 2407 \node[rect, below=4mm of wo2](wo3) {Trigger debits}; 2408 \node[rect, below=4mm of wo3](wo4) {Reissue stuck debits}; 2409 \node[rect, below=4mm of wo4](wo5) {Bounce malformed credits}; 2410 \draw[-stealth] (wo1) -- (wo2); 2411 \draw[-stealth] (wo2) -- (wo3); 2412 \draw[-stealth] (wo3) -- (wo4); 2413 \draw[-stealth] (wo4) -- (wo5); 2414 \draw[-stealth] (wo5) .. controls ([xshift=-0.4cm] wo5.west) and ([xshift=-0.4cm] wo1.west) .. (wo1); 2415 \end{tikzpicture} 2416 \caption{Worker loop} 2417 \end{figure} 2418 \column{0.47\paperwidth} 2419 \begin{block}{DLT reconcialisation} 2420 \begin{itemize} 2421 \item List new and removed transactions since last reconciliation 2422 \item Check for confirmed credits removal 2423 \item Register new credits 2424 \item Recover lost debits 2425 \end{itemize} 2426 \end{block} 2427 \end{columns} 2428 \end{frame} 2429 2430 \begin{frame}{Related work} 2431 \begin{block}{Centralization - Coinbase off-chain sending} 2432 \begin{itemize} 2433 \item [$+$] Fast and cheap: off chain transaction 2434 \item [$-$] Trust in Coinbase: privacy, security \& transparency 2435 \end{itemize} 2436 \end{block} 2437 \begin{block}{Layering - Lightning Network} 2438 \begin{itemize} 2439 \item [$+$] Fast and cheap: off-chain transactions 2440 \item [$-$] Requires setting up bidirectional payment channels 2441 \item [$-$] Fraud attempts are mitigated via a complex penalty system 2442 \end{itemize} 2443 \end{block} 2444 \end{frame} 2445 2446 \begin{frame}{Conclusion} 2447 Blockchains can be used as a settlement layer for GNU Taler 2448 with Depolymerizer. 2449 2450 \begin{itemize} 2451 \item [$-$] Trust exchange operator or auditors 2452 \item [$+$] Fast and cheap 2453 \item [$+$] Realtime, ms latency 2454 \item [$+$] Linear scalability 2455 \item [$+$] Ecological 2456 \item [$+$] Privacy when it can, transparency when it must (avoid tax evasion and money laundering) 2457 \end{itemize} 2458 Future work: 2459 \begin{itemize} 2460 \item Universal auditability, using sharded transactions history 2461 \item Smarter analysis, update confirmation delay based on currency network behavior 2462 \item Multisig by multiple operator for transactions validation 2463 \end{itemize} 2464 \end{frame} 2465 2466 2467 \section{Conclusion} 2468 2469 2470 \begin{frame}{Taler: Project Status} 2471 \framesubtitle{\url{https://docs.taler.net/}} 2472 \begin{itemize} 2473 \item Cryptographic protocols and core exchange component are stable 2474 \item Current focus: Merchant integration, settlement integration, wallet backup 2475 \item Pilot project at Bern University of Applied Sciences cafeteria 2476 \item Internal alpha deployment with a commercial bank in progress 2477 \end{itemize} 2478 \end{frame} 2479 2480 2481 \begin{frame}{Competitor comparison} 2482 \begin{center} \small 2483 \begin{tabular}{l||c|c|c|c|c} 2484 & Cash & Bitcoin & Zerocoin & Creditcard & GNU Taler \\ \hline \hline 2485 Online &$-$$-$$-$ & ++ & ++ & + & +++ \\ \hline 2486 Offline & +++ & $-$$-$ & $-$$-$ & + & $-$$-$ \\ \hline 2487 Trans. cost & + & $-$$-$$-$ & $-$$-$$-$ & $-$ & ++ \\ \hline 2488 Speed & + & $-$$-$$-$ & $-$$-$$-$ & o & ++ \\ \hline 2489 Taxation & $-$ & $-$$-$ & $-$$-$$-$ & +++ & +++ \\ \hline 2490 Payer-anon & ++ & o & ++ & $-$$-$$-$ & +++ \\ \hline 2491 Payee-anon & ++ & o & ++ & $-$$-$$-$ & $-$$-$$-$ \\ \hline 2492 Security & $-$ & o & o & $-$$-$ & ++ \\ \hline 2493 Conversion & +++ & $-$$-$$-$ & $-$$-$$-$ & +++ & +++ \\ \hline 2494 Libre & $-$ & +++ & +++ & $-$ $-$ $-$ & +++ \\ 2495 \end{tabular} 2496 \end{center} 2497 \end{frame} 2498 2499 2500 \begin{frame}{How to support?} 2501 \begin{description} 2502 \item[Join:] {\small \url{https://lists.gnu.org/mailman/listinfo/taler}}, \\ 2503 \url{https://libera.chat/\#taler} 2504 \item[Develop:] \url{https://bugs.taler.net/}, \url{https://git.taler.net/} 2505 \item[Translate:] \url{https://weblate.taler.net/}, \url{translation-volunteer@taler.net} 2506 \item[Integrate:] \url{https://docs.taler.net/} 2507 \item[Donate:] \url{https://gnunet.org/ev} 2508 \item[Invest:] \url{https://taler-systems.com/} 2509 \end{description} 2510 \end{frame} 2511 2512 2513 \begin{frame}{Conclusion} 2514 \begin{center} 2515 {\bf What can we do?} 2516 \end{center} 2517 \vfill 2518 \begin{itemize} 2519 \item{Suffer mass-surveillance enabled by credit card oligopolies with high fees, and} 2520 \item{Engage in arms race with deliberately unregulatable blockchains} 2521 % \item{Enjoy the ``benefits'' of cash \\ 2522 % \hfill \includegraphics[height=0.3\textheight]{atm-rupee.jpg} \hfill} 2523 \end{itemize} 2524 \vfill 2525 \begin{center} 2526 {\bf OR} 2527 \end{center} 2528 \vfill 2529 \begin{itemize} 2530 \item{Establish free software alternative balancing social goals!} 2531 \end{itemize} 2532 \vfill 2533 \end{frame} 2534 2535 2536 \begin{frame} 2537 \frametitle{Do you have any questions?} 2538 \vfill 2539 References: 2540 {\tiny 2541 \begin{enumerate} 2542 \item{David Chaum, Christian Grothoff and Thomas Moser. 2543 {\em How to issue a central bank digital currency}. 2544 {\bf SNB Working Papers, 2021}.} 2545 \item{Christian Grothoff, Bart Polot and Carlo von Loesch. 2546 {\em The Internet is broken: Idealistic Ideas for Building a GNU Network}. 2547 {\bf W3C/IAB Workshop on Strengthening the Internet Against Pervasive Monitoring (STRINT)}, 2014.} 2548 \item{Jeffrey Burdges, Florian Dold, Christian Grothoff and Marcello Stanisci. 2549 {\em Enabling Secure Web Payments with GNU Taler}. 2550 {\bf SPACE 2016}.} 2551 \item{Florian Dold, Sree Harsha Totakura, Benedikt M\"uller, Jeffrey Burdges and Christian Grothoff. 2552 {\em Taler: Taxable Anonymous Libre Electronic Reserves}. 2553 Available upon request. 2016.} 2554 \item{Eli Ben-Sasson, Alessandro Chiesa, Christina Garman, Matthew Green, Ian Miers, Eran Tromer and Madars Virza. 2555 {\em Zerocash: Decentralized Anonymous Payments from Bitcoin}. 2556 {\bf IEEE Symposium on Security \& Privacy, 2016}.} 2557 \item{David Chaum, Amos Fiat and Moni Naor. 2558 {\em Untraceable electronic cash}. 2559 {\bf Proceedings on Advances in Cryptology, 1990}.} 2560 \item{Phillip Rogaway. 2561 {\em The Moral Character of Cryptographic Work}. 2562 {\bf Asiacrypt}, 2015.} \label{bib:rogaway} 2563 \end{enumerate} 2564 } 2565 \begin{center} 2566 {\bf Let money facilitate trade; but ensure capital serves society.} 2567 \end{center} 2568 \end{frame} 2569 2570 2571 2572 2573 \end{document} 2574 2575 2576 2577 2578 \begin{frame}{Taler {\tt /withdraw/sign}} 2579 % Customer withdrawing coins with blind signatures 2580 % \bigskip 2581 \begin{figure}[th] 2582 \begin{minipage}[b]{0.45\linewidth} 2583 \begin{center} 2584 \begin{tikzpicture}[scale = 0.4, 2585 transform shape, 2586 msglabel/.style = { text = Black, yshift = .3cm, 2587 sloped, midway }, 2588 okmsg/.style = { ->, color = MidnightBlue, thick, 2589 >=stealth }, 2590 rstmsg/.style = { ->, color = BrickRed, thick, 2591 >=stealth } 2592 ] 2593 \node[draw = MidnightBlue, 2594 fill = CornflowerBlue, 2595 minimum width = .3cm, 2596 minimum height = 10cm 2597 ] (h1) at (-4, 0) {}; 2598 \node[draw = MidnightBlue, 2599 fill = CornflowerBlue, 2600 minimum width = .3cm, 2601 minimum height = 10cm 2602 ] (h2) at (4, 0) {}; 2603 \node[above = 0cm of h1] {Wallet}; 2604 \node[above = 0cm of h2] {Exchange}; 2605 2606 \path[->, color = MidnightBlue, very thick, >=stealth] 2607 (-5, 4.5) edge 2608 node[rotate=90, text = Black, yshift = .3cm] {Time} 2609 (-5, -4.5); 2610 \path[okmsg, dashed] 2611 ($(h1.east)+(0, 4.0)+(0, -1.0)$) edge 2612 node[msglabel] {SEPA(RK,A)} 2613 ($(h2.west)+(0, 3.5)+(0, -1.0)$); 2614 \path[okmsg] 2615 ($(h1.east)+(0, -1.0)$) edge 2616 node[msglabel] {POST {\tt /withdraw/sign} $S_{RK}(DK, B_b(C))$} 2617 ($(h2.west)+(0, -1.5)$); 2618 \path[okmsg] 2619 ($(h2.west)+(0, -2.0)$) edge 2620 node[msglabel] {200 OK: $S_{DK}(B_b(C))$)} 2621 ($(h1.east)+(0, -2.5)$); 2622 \path[rstmsg] 2623 ($(h2.west)+(0, -3.5)$) edge 2624 node[msglabel] {402 PAYMENT REQUIRED: $S_{RK}(DK, B_b(C))$)} 2625 ($(h1.east)+(0, -4)$); 2626 \node at (5.3, 0) {}; 2627 \end{tikzpicture} 2628 \end{center} 2629 Result: $\langle c, S_{DK}(C) \rangle$. 2630 \end{minipage} 2631 \hspace{0.5cm} 2632 \begin{minipage}[b]{0.45\linewidth} 2633 \tiny 2634 \begin{description} 2635 \item[$A$] Some amount, $A \ge A_{DK}$ 2636 \item[$RK$] Reserve key 2637 \item[$DK$] Denomination key 2638 \item[$b$] Blinding factor 2639 \item[$B_b()$] RSA-FDH blinding % DK supressed 2640 \item[$C$] Coin public key $C := cG$ 2641 \item[$S_{RK}()$] EdDSA signature 2642 \item[$S_{DK}()$] RSA-FDH signature 2643 \end{description} 2644 \end{minipage} 2645 \end{figure} 2646 \end{frame} 2647 2648 2649 \begin{frame}[t]{Taler {\tt /deposit}} 2650 Merchant and exchange see only the public coin $\langle C, S_{DK}(C) \rangle$. 2651 \bigskip 2652 \begin{figure}[th] 2653 \begin{minipage}[b]{0.45\linewidth} 2654 \begin{center} 2655 \begin{tikzpicture}[scale = 0.4, 2656 transform shape, 2657 msglabel/.style = { text = Black, yshift = .3cm, 2658 sloped, midway }, 2659 okmsg/.style = { ->, color = MidnightBlue, thick, 2660 >=stealth }, 2661 rstmsg/.style = { ->, color = BrickRed, thick, 2662 >=stealth } 2663 ] 2664 \node[draw = MidnightBlue, 2665 fill = CornflowerBlue, 2666 minimum width = .3cm, 2667 minimum height = 10cm 2668 ] (h1) at (-4, 0) {}; 2669 \node[draw = MidnightBlue, 2670 fill = CornflowerBlue, 2671 minimum width = .3cm, 2672 minimum height = 10cm 2673 ] (h2) at (4, 0) {}; 2674 \node[above = 0cm of h1] {Merchant}; 2675 \node[above = 0cm of h2] {Exchange}; 2676 2677 \path[->, color = MidnightBlue, very thick, >=stealth] 2678 (-5, 4.5) edge 2679 node[rotate=90, text = Black, yshift = .3cm] {Time} 2680 (-5, -4.5); 2681 \path[->, color = MidnightBlue, thick, >=stealth] 2682 ($(h1.east)+(0,3)$) edge 2683 node[text = Black, yshift = .3cm, sloped] {POST {\tt /deposit} $S_{DK}(C), S_{c}(D)$} 2684 ($(h2.west)+(0,2)$); 2685 \path[->, color = MidnightBlue, thick, >=stealth] 2686 ($(h2.west)+(0,0.5)$) edge 2687 node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(S_{c}(D))$} 2688 ($(h1.east)+(0,-0.5)$); 2689 \path[rstmsg] 2690 ($(h2.west)+(0, -2.5)$) edge 2691 node[msglabel] {409 CONFLICT: $S_{c}(D')$} 2692 ($(h1.east)+(0, -3.5)$); 2693 \node at (5.3, 0) {}; 2694 \end{tikzpicture} 2695 \end{center} 2696 \end{minipage} 2697 \hspace{0.5cm} 2698 \begin{minipage}[b]{0.45\linewidth} 2699 \tiny 2700 \begin{description} 2701 \item[$DK$] Denomination key 2702 \item[$S_{DK}()$] RSA-FDH signature using $DK$ 2703 \item[$c$] Private coin key, $C := cG$. 2704 \item[$S_{C}()$] EdDSA signature using $c$ 2705 \item[$D$] Deposit details 2706 \item[$SK$] Exchange's signing key 2707 \item[$S_{SK}()$] EdDSA signature using $SK$ 2708 \item[$D'$] Conficting deposit details $D' \not= D$ 2709 \end{description} 2710 \end{minipage} 2711 \end{figure} 2712 \end{frame} 2713 2714 2715 \begin{frame}{Taler {\tt /refresh/melt}} 2716 \begin{figure}[th] 2717 \begin{minipage}[b]{0.45\linewidth} 2718 \begin{center} 2719 \begin{tikzpicture}[scale = 0.4, 2720 transform shape, 2721 msglabel/.style = { text = Black, yshift = .3cm, 2722 sloped, midway }, 2723 okmsg/.style = { ->, color = MidnightBlue, thick, 2724 >=stealth }, 2725 rstmsg/.style = { ->, color = BrickRed, thick, 2726 >=stealth } 2727 ] 2728 \node[draw = MidnightBlue, 2729 fill = CornflowerBlue, 2730 minimum width = .3cm, 2731 minimum height = 10cm 2732 ] (h1) at (-4, 0) {}; 2733 \node[draw = MidnightBlue, 2734 fill = CornflowerBlue, 2735 minimum width = .3cm, 2736 minimum height = 10cm 2737 ] (h2) at (4, 0) {}; 2738 \node[above = 0cm of h1] {Customer}; 2739 \node[above = 0cm of h2] {Exchange}; 2740 2741 \path[->, color = MidnightBlue, very thick, >=stealth] 2742 (-5, 4.5) edge 2743 node[rotate=90, text = Black, yshift = .3cm] {Time} 2744 (-5, -4.5); 2745 \path[->, color = MidnightBlue, thick, >=stealth] 2746 ($(h1.east)+(0,3)$) edge 2747 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/melt} $S_{DK}(C), S_c({\cal DK}, {\cal T},{\cal B})$} 2748 ($(h2.west)+(0,2)$); 2749 \path[->, color = MidnightBlue, thick, >=stealth] 2750 ($(h2.west)+(0,0.5)$) edge 2751 node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(H({\cal T}, {\cal B}),\gamma)$} 2752 ($(h1.east)+(0,-0.5)$); 2753 \path[rstmsg] 2754 ($(h2.west)+(0, -2.5)$) edge 2755 node[msglabel] {409 CONFLICT: $S_{C}(X), \ldots$} 2756 ($(h1.east)+(0, -3.5)$); 2757 \node at (5.3, 0) {}; 2758 \end{tikzpicture} 2759 \end{center} 2760 \end{minipage} 2761 \hspace{0.5cm} 2762 \begin{minipage}[b]{0.45\linewidth} 2763 \tiny 2764 \begin{description} 2765 \item[$\kappa$] System-wide security parameter, usually 3. 2766 \\ \smallskip 2767 \item[$\cal DK$] $:= [DK^{(i)}]_i$ \\ List of denomination keys \\ 2768 $D + \sum_i A_{DK^{(i)}} < A_{DK}$ 2769 \item[$t_j$] Random scalar for $j<\kappa$ 2770 \item[${\cal T}$] $:= [T_j]_\kappa$ where $T_j = t_j G$ 2771 \item[$k_j$] $:= c T_j = t_j C$ is an ECDHE 2772 \item[$b_j^{(i)}$] $:= KDF_b(k_j,i)$ % blinding factor 2773 \item[$c_j^{(i)}$] $:= KDF_c(k_j,i)$ % coin secret keys 2774 \item[$C_j^{(i)}$] $: = c_j^{(i)} G$ % new coin publics % keys 2775 \item[${\cal B}$] $:= [H( \beta_j )]_\kappa$ where \\ 2776 $\beta_j := \left[ B_{b_j^{(i)}}(C_j^{(i)}) \right]_i$ 2777 \\ \smallskip 2778 \item[$\gamma$] Random value in $[0,\kappa)$ 2779 % \\ \smallskip 2780 % \item[$X$] Deposit or refresh 2781 \end{description} 2782 \end{minipage} 2783 \end{figure} 2784 \end{frame} 2785 2786 2787 \begin{frame}{Taler {\tt /refresh/reveal}} 2788 \begin{figure}[th] 2789 \begin{minipage}[b]{0.45\linewidth} 2790 \begin{center} 2791 \begin{tikzpicture}[scale = 0.4, 2792 transform shape, 2793 msglabel/.style = { text = Black, yshift = .3cm, 2794 sloped, midway }, 2795 okmsg/.style = { ->, color = MidnightBlue, thick, 2796 >=stealth }, 2797 rstmsg/.style = { ->, color = BrickRed, thick, 2798 >=stealth } 2799 ] 2800 \node[draw = MidnightBlue, 2801 fill = CornflowerBlue, 2802 minimum width = .3cm, 2803 minimum height = 10cm 2804 ] (h1) at (-4, 0) {}; 2805 \node[draw = MidnightBlue, 2806 fill = CornflowerBlue, 2807 minimum width = .3cm, 2808 minimum height = 10cm 2809 ] (h2) at (4, 0) {}; 2810 \node[above = 0cm of h1] {Customer}; 2811 \node[above = 0cm of h2] {Exchange}; 2812 2813 \path[->, color = MidnightBlue, very thick, >=stealth] 2814 (-5, 4.5) edge 2815 node[rotate=90, text = Black, yshift = .3cm] {Time} 2816 (-5, -4.5); 2817 \path[->, color = MidnightBlue, thick, >=stealth] 2818 ($(h1.east)+(0,3)$) edge 2819 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/reveal} $H({\cal T}, {\cal B}), {\tilde{\cal T}}, \beta_\gamma$} 2820 ($(h2.west)+(0,2)$); 2821 \path[->, color = MidnightBlue, thick, >=stealth] 2822 ($(h2.west)+(0,0.5)$) edge 2823 node[text = Black, yshift = .3cm, sloped] {200 OK: $\cal S$} 2824 ($(h1.east)+(0,-0.5)$); 2825 \path[rstmsg] 2826 ($(h2.west)+(0, -2.5)$) edge 2827 node[msglabel] {400 BAD REQUEST: $Z$} 2828 ($(h1.east)+(0, -3.5)$); 2829 \node at (5.3, 0) {}; 2830 \end{tikzpicture} 2831 \end{center} 2832 \end{minipage} 2833 \hspace{0.5cm} 2834 \begin{minipage}[b]{0.45\linewidth} 2835 \tiny 2836 \begin{description} 2837 \item[$\cal DK$] $:= [DK^{(i)}]_i$ 2838 \item[$t_j$] .. \\ \smallskip 2839 2840 \item[$\tilde{\cal T}$] $:= [t_j | j \in \kappa, j \neq \gamma]$ \\ \smallskip 2841 2842 \item[$k_\gamma$] $:= c T_\gamma = t_\gamma C$ 2843 \item[$b_\gamma^{(i)}$] $:= KDF_b(k_\gamma,i)$ 2844 \item[$c_\gamma^{(i)}$] $:= KDF_c(k_\gamma,i)$ 2845 \item[$C_\gamma^{(i)}$] $: = c_\gamma^{(i)} G$ 2846 2847 \item[$B_\gamma^{(i)}$] $:= B_{b_\gamma^{(i)}}(C_\gamma^{(i)})$ 2848 \item[$\beta_\gamma$] $:= \big[ B_\gamma^{(i)} \big]_i$ 2849 \item[$\cal S$] $:= \left[ S_{DK^{(i)}}( B_\gamma^{(i)} ) \right]_i$ \\ \smallskip 2850 2851 \item[$Z$] Cut-and-choose missmatch information 2852 \end{description} 2853 \end{minipage} 2854 \end{figure} 2855 \end{frame} 2856 2857 2858 \begin{frame}{Taler {\tt /refresh/link}} 2859 \begin{figure}[th] 2860 \begin{minipage}[b]{0.45\linewidth} 2861 \begin{center} 2862 \begin{tikzpicture}[scale = 0.4, 2863 transform shape, 2864 msglabel/.style = { text = Black, yshift = .3cm, 2865 sloped, midway }, 2866 okmsg/.style = { ->, color = MidnightBlue, thick, 2867 >=stealth }, 2868 rstmsg/.style = { ->, color = BrickRed, thick, 2869 >=stealth } 2870 ] 2871 \node[draw = MidnightBlue, 2872 fill = CornflowerBlue, 2873 minimum width = .3cm, 2874 minimum height = 10cm 2875 ] (h1) at (-4, 0) {}; 2876 \node[draw = MidnightBlue, 2877 fill = CornflowerBlue, 2878 minimum width = .3cm, 2879 minimum height = 10cm 2880 ] (h2) at (4, 0) {}; 2881 \node[above = 0cm of h1] {Customer}; 2882 \node[above = 0cm of h2] {Exchagne}; 2883 2884 \path[->, color = MidnightBlue, very thick, >=stealth] 2885 (-5, 4.5) edge 2886 node[rotate=90, text = Black, yshift = .3cm] {Time} 2887 (-5, -4.5); 2888 \path[->, color = MidnightBlue, thick, >=stealth] 2889 ($(h1.east)+(0,3)$) edge 2890 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/link} $C$} 2891 ($(h2.west)+(0,2)$); 2892 \path[->, color = MidnightBlue, thick, >=stealth] 2893 ($(h2.west)+(0,0.5)$) edge 2894 node[text = Black, yshift = .3cm, sloped] {200 OK: $T_\gamma$} 2895 ($(h1.east)+(0,-0.5)$); 2896 \path[rstmsg] 2897 ($(h2.west)+(0, -2.5)$) edge 2898 node[msglabel] {404 NOT FOUND} 2899 ($(h1.east)+(0, -3.5)$); 2900 \node at (5.3, 0) {}; 2901 \end{tikzpicture} 2902 \end{center} 2903 \end{minipage} 2904 \hspace{0.5cm} 2905 \begin{minipage}[b]{0.45\linewidth} 2906 \tiny 2907 \begin{description} 2908 \item[$C$] Old coind public key \\ \smallskip 2909 \item[$T_\gamma$] Linkage data $\cal L$ at $\gamma$ 2910 \end{description} 2911 \end{minipage} 2912 \end{figure} 2913 \end{frame} 2914 2915 2916 \begin{frame}{Operational security} 2917 \begin{center} 2918 \resizebox{\textwidth}{!}{ 2919 \begin{tikzpicture}[ 2920 font=\sffamily, 2921 every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm}, 2922 source/.style={draw,thick,rounded corners,fill=green!20,inner sep=.3cm}, 2923 process/.style={draw,thick,circle,fill=blue!20}, 2924 sink/.style={source,fill=green!20}, 2925 datastore/.style={draw,very thick,shape=datastore,inner sep=.3cm}, 2926 dots/.style={gray,scale=2}, 2927 to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize}, 2928 every node/.style={align=center}] 2929 2930 % Position the nodes using a matrix layout 2931 \matrix{ 2932 \node[source] (wallet) {Wallet}; 2933 \& \node[process] (browser) {Browser}; 2934 \& \node[process] (shop) {Web shop}; 2935 \& \node[sink] (backend) {Taler backend}; \\ 2936 }; 2937 2938 % Draw the arrows between the nodes and label them. 2939 \draw[to] (browser) to[bend right=50] node[midway,above] {(4) signed contract} 2940 node[midway,below] {(signal)} (wallet); 2941 \draw[to] (wallet) to[bend right=50] node[midway,above] {(signal)} 2942 node[midway,below] {(5) signed coins} (browser); 2943 \draw[<->] (browser) -- node[midway,above] {(3,6) custom} 2944 node[midway,below] {(HTTPS)} (shop); 2945 \draw[to] (shop) to[bend right=50] node[midway,above] {(HTTPS)} 2946 node[midway,below] {(1) proposed contract / (7) signed coins} (backend); 2947 \draw[to] (backend) to[bend right=50] node[midway,above] {(2) signed contract / (8) confirmation} 2948 node[midway,below] {(HTTPS)} (shop); 2949 \end{tikzpicture} 2950 } 2951 \end{center} 2952 \end{frame}