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