2023-moztw-crypto.tex (100595B)
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=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 \href{https://taler-systems.com/}{taler-systems.com}} 235 \end{textblock*} 236 237 % Substitute based on who is giving the talk! 238 \begin{textblock*}{6cm}(6.7cm,7.7cm) % {block width} (coords) 239 {\hfill {\bf Christian Grothoff} \\ 240 \hfill grothoff@taler.net } 241 \end{textblock*} 242 243 \end{frame} 244 245 246 \begin{frame}{Agenda} 247 \tableofcontents 248 \end{frame} 249 250 \section{Motivation \& Background} 251 252 253 \begin{frame}{A Social Problem} 254 % \vfill 255 This was a question posed to RAND researchers in 1971: 256 257 \begin{quote} 258 ``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?'' 259 \end{quote} 260 %The result: an electronic funds transfer system that looks 261 %strikingly similar today's debit card system. 262 \pause 263 \begin{center} 264 \includegraphics[height=1cm]{pics/nsa_spy.jpg} 265 \end{center} 266 \vfill 267 \begin{center} 268 ``I think one of the big things that we need to do, is we need 269 to get away from true-name payments on the Internet. The credit 270 card payment system is one of the worst things that happened for the 271 user, in terms of being able to divorce their access from their 272 identity.'' \hfill --Edward Snowden, IETF 93 (2015) 273 \end{center} 274 275 \end{frame} 276 277 278 \begin{frame}{The Bank of International Settlements} 279 \begin{center} 280 \movie[%scale=0.6, 281 autostart, 282 poster] 283 { 284 \includegraphics[height=0.6\textwidth,width=0.8\textwidth]{white.png} 285 } 286 {bis-cbdc.mp4} 287 \end{center} 288 \end{frame} 289 290 291 \section{GNU Taler: Introduction} 292 293 \begin{frame} 294 \vfill 295 \begin{center} 296 {\bf GNU Taler: Introduction} 297 \end{center} 298 \vfill 299 \end{frame} 300 301 302 \begin{frame}{GNU Taler} 303 \vfill 304 \begin{center} 305 {\huge {\bf Digital} cash, made \textbf{socially responsible}.} 306 \end{center} 307 \vfill 308 \begin{center} 309 \includegraphics[scale=0.3]{taler-logo-2021-inkscape.pdf} 310 \end{center} 311 \vfill 312 \begin{center} 313 Privacy-Preserving, Practical, Taxable, Free Software, Efficient 314 \end{center} 315 \vfill 316 \vfill 317 \ % 318 \end{frame} 319 320 321 \begin{frame}{What is Taler?} 322 \framesubtitle{\url{https://taler.net/en/features.html}} \noindent 323 Taler is 324 \vfill 325 \begin{itemize} 326 \item a Free/Libre software \emph{payment system} infrastructure project 327 \item ... with a surrounding software ecosystem 328 \item ... and a company (Taler Systems S.A.) and community that wants to deploy it 329 as widely as possible. 330 \end{itemize} 331 \vfill 332 \noindent 333 However, Taler is 334 \begin{itemize} 335 \item \emph{not} a currency or speculative asset 336 \item \emph{not} a long-term store of value 337 \item \emph{not} a network or instance of a system 338 \item \emph{not} decentralized 339 \item \emph{not} based on proof-of-work or proof-of-stake 340 \end{itemize} 341 \end{frame} 342 343 344 \begin{frame}{Design principles} 345 \framesubtitle{https://taler.net/en/principles.html} 346 GNU Taler must ... 347 \begin{enumerate} 348 \item {... be implemented as {\bf free software}.} 349 \item {... protect the {\bf privacy of buyers}.} 350 \item {... must enable the state to {\bf tax income} and crack down on 351 illegal business activities.} 352 \item {... prevent payment fraud.} 353 \item {... only {\bf disclose the minimal amount of information 354 necessary}.} 355 \item {... be usable.} 356 \item {... be efficient.} 357 \item {... avoid single points of failure.} 358 \item {... foster {\bf competition}.} 359 \end{enumerate} 360 \end{frame} 361 362 363 \begin{frame} 364 \frametitle{Taler Overview} 365 \begin{center} 366 \begin{tikzpicture} 367 \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em]; 368 \node (origin) at (0,0) {}; 369 \node (exchange) [def,above=of origin,draw]{Exchange}; 370 \node (customer) [def, draw, below left=of origin] {Customer}; 371 \node (merchant) [def, draw, below right=of origin] {Merchant}; 372 \node (auditor) [def, draw, above right=of origin]{Auditor}; 373 % \node (regulator) [def, draw, above=of auditor]{CSSF}; 374 375 \tikzstyle{C} = [color=black, line width=1pt] 376 377 \draw [<-, C] (customer) -- (exchange) node [midway, above, sloped] (TextNode) {withdraw coins}; 378 \draw [<-, C] (exchange) -- (merchant) node [midway, above, sloped] (TextNode) {deposit coins}; 379 \draw [<-, C] (merchant) -- (customer) node [midway, above, sloped] (TextNode) {spend coins}; 380 \draw [<-, C] (exchange) -- (auditor) node [midway, above, sloped] (TextNode) {verify}; 381 % \draw [<-, C] (regulator) -- (auditor) node [midway, above, sloped] (TextNode) {report}; 382 383 \end{tikzpicture} 384 \end{center} 385 \end{frame} 386 387 388 389 \begin{frame} 390 % TODO: replace with simplified NEW architecture picture! 391 \frametitle{Architecture of Taler} 392 \begin{center} 393 \includegraphics[width=1\textwidth]{operations.png} 394 \end{center} 395 \end{frame} 396 397 398 \begin{frame}{Usability of Taler} 399 \vfill 400 \begin{center} 401 \url{https://demo.taler.net/} 402 \end{center} 403 \begin{enumerate} 404 \item Install browser extension. 405 \item Visit the {\tt bank.demo.taler.net} to withdraw coins. 406 \item Visit the {\tt shop.demo.taler.net} to spend coins. 407 \end{enumerate} 408 \vfill 409 \end{frame} 410 411 412 \section{Protocol Basics} 413 414 \begin{frame} 415 \vfill 416 \begin{center} 417 {\bf Protocol Basics} 418 \end{center} 419 \vfill 420 \end{frame} 421 422 \begin{frame}{How does it work?} 423 We use a few ancient constructions: 424 \begin{itemize} 425 \item Cryptographic hash function (1989) 426 \item Blind signature (1983) 427 \item Schnorr signature (1989) 428 \item Diffie-Hellman key exchange (1976) 429 \item Cut-and-choose zero-knowledge proof (1985) 430 \end{itemize} 431 But of course we use modern instantiations. 432 \end{frame} 433 434 435 \begin{frame}{Definition: Taxability} 436 We say Taler is taxable because: 437 \begin{itemize} 438 \item Merchant's income is visible from deposits. 439 \item Hash of contract is part of deposit data. 440 \item State can trace income and enforce taxation. 441 \end{itemize}\pause 442 Limitations: 443 \begin{itemize} 444 \item withdraw loophole 445 \item {\em sharing} coins among family and friends 446 \end{itemize} 447 \end{frame} 448 449 450 \begin{frame}{Exchange setup: Create a denomination key (RSA)} 451 \begin{minipage}{6cm} 452 \begin{enumerate} 453 \item Pick random primes $p,q$. 454 \item Compute $n := pq$, $\phi(n) = (p-1)(q-1)$ 455 \item Pick small $e < \phi(n)$ such that 456 $d := e^{-1} \mod \phi(n)$ exists. 457 \item Publish public key $(e,n)$. 458 \end{enumerate} 459 \end{minipage} 460 \begin{minipage}{6cm} 461 \begin{tikzpicture} 462 \tikzstyle{def} = [node distance=1em and 1em, inner sep=0em, outer sep=.3em]; 463 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 464 \node (primes) [draw=none, below = of origin] at (0,0) {$(p, q)$}; 465 \node (seal) [def, draw=none, below left=of primes]{\includegraphics[width=0.15\textwidth]{seal.pdf}}; 466 \node (hammer) [def, draw=none, below right=of primes]{\includegraphics[width=0.15\textwidth]{hammer.pdf}}; 467 468 \tikzstyle{C} = [color=black, line width=1pt] 469 470 \draw [<-, C] (primes) -- (origin) node [midway, above, sloped] (TextNode) {}; 471 \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {}; 472 \draw [<-, C] (hammer) -- (primes) node [midway, above, sloped] (TextNode) {}; 473 \end{tikzpicture} 474 % \includegraphics[width=0.4\textwidth]{seal.pdf} 475 \end{minipage} 476 \end{frame} 477 478 479 \begin{frame}{Merchant: Create a signing key (EdDSA)} 480 \begin{minipage}{6cm} 481 \begin{itemize} 482 \item pick random $m \mod o$ as private key 483 \item $M = mG$ public key 484 \end{itemize} 485 \end{minipage} 486 \begin{minipage}{6cm} 487 \begin{tikzpicture} 488 \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em]; 489 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 490 \node (m) [draw=none, below = of origin] at (0,0) {$m$}; 491 \node (seal) [draw=none, below=of m]{M}; 492 \tikzstyle{C} = [color=black, line width=1pt] 493 494 \draw [<-, C] (m) -- (origin) node [midway, above, sloped] (TextNode) {}; 495 \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {}; 496 \end{tikzpicture} 497 \end{minipage} 498 \parbox[t]{3cm}{{\bf Capability:} $m \Rightarrow$ } 499 \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{merchant-sign.pdf}} 500 \end{frame} 501 502 503 \begin{frame}{Customer: Create a planchet (EdDSA)} 504 \begin{minipage}{8cm} 505 \begin{itemize} 506 \item Pick random $c \mod o$ private key 507 \item $C = cG$ public key 508 \end{itemize} 509 \end{minipage} 510 \begin{minipage}{4cm} 511 \begin{tikzpicture} 512 \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em]; 513 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 514 \node (c) [draw=none, below = of origin] at (0,0) {$c$}; 515 \node (planchet) [draw=none, below=of c]{\includegraphics[width=0.4\textwidth]{planchet.pdf}}; 516 \tikzstyle{C} = [color=black, line width=1pt] 517 518 \draw [<-, C] (c) -- (origin) node [midway, above, sloped] (TextNode) {}; 519 \draw [<-, C] (planchet) -- (c) node [midway, above, sloped] (TextNode) {}; 520 \end{tikzpicture} 521 \end{minipage} 522 \parbox[t]{3cm}{{\bf Capability:} $c \Rightarrow$ } 523 \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{planchet-sign.pdf}} 524 \end{frame} 525 526 527 \begin{frame}{Customer: Blind planchet (RSA)} 528 \begin{minipage}{6cm} 529 \begin{enumerate} 530 \item Obtain public key $(e,n)$ 531 \item Compute $f := FDH(C)$, $f < n$. 532 \item Pick blinding factor $b \in \mathbb Z_n$ 533 \item Transmit $f' := f b^e \mod n$ 534 \end{enumerate} 535 \end{minipage} 536 \begin{minipage}{6cm} 537 \begin{tikzpicture} 538 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 539 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 540 \node (b) [def, draw=none, below = of origin] at (0,-0.2) {$b$}; 541 \node (blinded) [def, draw=none, below right=of b]{\includegraphics[width=0.2\textwidth]{blinded.pdf}}; 542 \node (planchet) [def, draw=none, above right=of blinded]{\includegraphics[width=0.15\textwidth]{planchet.pdf}}; 543 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 544 \tikzstyle{C} = [color=black, line width=1pt] 545 546 \draw [<-, C] (b) -- (origin) node [midway, above, sloped] (TextNode) {}; 547 \draw [<-, C] (blinded) -- (planchet) node [midway, above, sloped] (TextNode) {}; 548 \draw [<-, C] (blinded) -- (b) node [midway, above, sloped] (TextNode) {}; 549 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 550 \end{tikzpicture} 551 \end{minipage} 552 \end{frame} 553 554 555 \begin{frame}{Exchange: Blind sign (RSA)} 556 \begin{minipage}{6cm} 557 \begin{enumerate} 558 \item Receive $f'$. 559 \item Compute $s' := f'^d \mod n$. 560 \item Send signature $s'$. 561 \end{enumerate} 562 \end{minipage} 563 \begin{minipage}{6cm} 564 \begin{tikzpicture} 565 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 566 \node (hammer) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{hammer.pdf}}; 567 \node (signed) [def, draw=none, below left=of hammer]{\includegraphics[width=0.2\textwidth]{sign.pdf}}; 568 \node (blinded) [def, draw=none, above left=of signed]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 569 \node (customer) [node distance=4em and 0.5em, draw, below =of signed]{Customer}; 570 \tikzstyle{C} = [color=black, line width=1pt] 571 572 \draw [<-, C] (signed) -- (hammer) node [midway, above, sloped] (TextNode) {}; 573 \draw [<-, C] (signed) -- (blinded) node [midway, above, sloped] (TextNode) {}; 574 \draw [<-, C] (customer) -- (signed) node [midway, above, sloped] (TextNode) {{\small transmit}}; 575 \end{tikzpicture} 576 \end{minipage} 577 \end{frame} 578 579 580 \begin{frame}{Customer: Unblind coin (RSA)} 581 \begin{minipage}{6cm} 582 \begin{enumerate} 583 \item Receive $s'$. 584 \item Compute $s := s' b^{-1} \mod n$ % \\ 585 % ($(f')^d = (f b^e)^d = f^d b$). 586 \end{enumerate} 587 \end{minipage} 588 \begin{minipage}{6cm} 589 \begin{tikzpicture} 590 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 591 \node (b) [def, draw=none] at (0,0) {$b$}; 592 \node (coin) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 593 \node (signed) [def, draw=none, above left=of coin]{\includegraphics[width=0.15\textwidth]{sign.pdf}}; 594 \tikzstyle{C} = [color=black, line width=1pt] 595 596 \draw [<-, C] (coin) -- (b) node [midway, above, sloped] (TextNode) {}; 597 \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {}; 598 \end{tikzpicture} 599 \end{minipage} 600 \end{frame} 601 602 603 \begin{frame}{Customer: Build shopping cart} 604 \begin{center} 605 \begin{tikzpicture} 606 \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em]; 607 \node (origin) [draw=none] at (0,0) {\includegraphics[width=0.2\textwidth]{cart.pdf}}; 608 \node (merchant) [node distance=4em and 0.5em, draw, below =of origin]{\includegraphics[width=0.2\textwidth]{shop.pdf}}; 609 \tikzstyle{C} = [color=black, line width=1pt]; 610 \draw [<-, C] (merchant) -- (origin) node [midway, above, sloped] (TextNode) {{\small transmit}}; 611 \end{tikzpicture} 612 \end{center} 613 \end{frame} 614 615 616 \begin{frame}{Merchant: Propose contract (EdDSA)} 617 \begin{minipage}{6cm} 618 \begin{enumerate} 619 \item Complete proposal $D$. 620 \item Send $D$, $EdDSA_m(D)$ 621 \end{enumerate} 622 \end{minipage} 623 \begin{minipage}{6cm} 624 \begin{tikzpicture} 625 \tikzstyle{def} = [node distance=2em and 0.5em, inner sep=0em, outer sep=.3em]; 626 \node (cart) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{cart.pdf}}; 627 \node (proposal) [def, draw=none, below right=of cart]{\includegraphics[width=0.5\textwidth]{merchant_propose.pdf}}; 628 \node (customer) [node distance=4em and 0.5em, draw, below =of proposal]{Customer}; 629 \tikzstyle{C} = [color=black, line width=1pt]; 630 \node (sign) [def, draw=none, above right=of proposal] {$m$}; 631 \tikzstyle{C} = [color=black, line width=1pt] 632 633 \draw [<-, C] (proposal) -- (sign) node [midway, above, sloped] (TextNode) {}; 634 \draw [<-, C] (proposal) -- (cart) node [midway, above, sloped] (TextNode) {}; 635 \draw [<-, C] (customer) -- (proposal) node [midway, above, sloped] (TextNode) {{\small transmit}}; 636 \end{tikzpicture} 637 \end{minipage} 638 \end{frame} 639 640 641 \begin{frame}{Customer: Spend coin (EdDSA)} 642 \begin{minipage}{6cm} 643 \begin{enumerate} 644 \item Receive proposal $D$, $EdDSA_m(D)$. 645 \item Send $s$, $C$, $EdDSA_c(D)$ 646 \end{enumerate} 647 \end{minipage} 648 \begin{minipage}{6cm} 649 \begin{tikzpicture} 650 \tikzstyle{def} = [node distance=2em and 0.4em, inner sep=0em, outer sep=.3em]; 651 \node (proposal) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{merchant_propose.pdf}}; 652 \node (contract) [def, draw=none, below right=of cart]{\includegraphics[width=0.3\textwidth]{contract.pdf}}; 653 \node (c) [def, draw=none, above=of contract] {$c$}; 654 \node (merchant) [node distance=4em and 0.5em, draw, below=of contract]{Merchant}; 655 \node (coin) [def, draw=none, right=of contract]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 656 \tikzstyle{C} = [color=black, line width=1pt] 657 658 \draw [<-, C] (contract) -- (c) node [midway, above, sloped] (TextNode) {}; 659 \draw [<-, C] (contract) -- (proposal) node [midway, above, sloped] (TextNode) {}; 660 \draw [<-, C] (merchant) -- (contract) node [midway, above, sloped] (TextNode) {{\small transmit}}; 661 \draw [<-, C] (merchant) -- (coin) node [midway, below, sloped] (TextNode) {{\small transmit}}; 662 \end{tikzpicture} 663 \end{minipage} 664 \end{frame} 665 666 667 \begin{frame}{Merchant and Exchange: Verify coin (RSA)} 668 \begin{minipage}{6cm} 669 \begin{equation*} 670 s^e \stackrel{?}{\equiv} FDH(C) \mod n 671 \end{equation*} 672 \end{minipage} 673 \begin{minipage}{6cm} 674 \begin{minipage}{0.2\textwidth} 675 \includegraphics[width=\textwidth]{coin.pdf} 676 \end{minipage} 677 $\stackrel{?}{\Leftrightarrow}$ 678 \begin{minipage}{0.2\textwidth} 679 \includegraphics[width=\textwidth]{seal.pdf} 680 \end{minipage} 681 \end{minipage} 682 \vfill 683 The exchange does not only verify the signature, but also 684 checks that the coin was not double-spent. 685 \vfill 686 \pause 687 \begin{center} 688 {\bf Taler is an online payment system.} 689 \end{center} 690 \vfill 691 \end{frame} 692 693 694 \begin{frame}{Giving change} 695 It would be inefficient to pay EUR 100 with 1 cent coins! 696 \begin{itemize} 697 \item Denomination key represents value of a coin. 698 \item Exchange may offer various denominations for coins. 699 \item Wallet may not have exact change! 700 \item Usability requires ability to pay given sufficient total funds. 701 \end{itemize}\pause 702 Key goals: 703 \begin{itemize} 704 \item maintain unlinkability 705 \item maintain taxability of transactions 706 \end{itemize}\pause 707 Method: 708 \begin{itemize} 709 \item Contract can specify to only pay {\em partial value} of a coin. 710 \item Exchange allows wallet to obtain {\em unlinkable change} 711 for remaining coin value. 712 \end{itemize} 713 \end{frame} 714 715 716 \begin{frame}{Diffie-Hellman (ECDH)} 717 \begin{minipage}{8cm} 718 \begin{enumerate} 719 \item Create private keys $c,t \mod o$ 720 \item Define $C = cG$ 721 \item Define $T = tG$ 722 \item Compute DH \\ $cT = c(tG) = t(cG) = tC$ 723 \end{enumerate} 724 \end{minipage} 725 \begin{minipage}{6cm} 726 \begin{tikzpicture} 727 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 728 \node (t) [def, draw=none] at (0,0) {$t$}; 729 \node (ct) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{dh.pdf}}; 730 \node (c) [def, draw=none, above left= of ct] {$c$}; 731 \tikzstyle{C} = [color=black, line width=1pt] 732 733 \draw [<-, C] (ct) -- (c) node [midway, above, sloped] (TextNode) {}; 734 \draw [<-, C] (ct) -- (t) node [midway, above, sloped] (TextNode) {}; 735 \end{tikzpicture} 736 \end{minipage} 737 \end{frame} 738 739 740 \begin{frame}{Strawman solution} 741 \begin{minipage}{8cm} 742 Given partially spent private coin key $c_{old}$: 743 \begin{enumerate} 744 % \item Let $C_{old} := c_{old}G$ (as before) 745 \item Pick random $c_{new} \mod o$ private key 746 \item $C_{new} = c_{new}G$ public key 747 \item Pick random $b_{new}$ 748 \item Compute $f_{new} := FDH(C_{new})$, $m < n$. 749 \item Transmit $f'_{new} := f_{new} b_{new}^e \mod n$ 750 \end{enumerate} 751 ... and sign request for change with $c_{old}$. 752 \end{minipage} 753 \begin{minipage}{4cm} 754 \begin{tikzpicture} 755 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 756 \node (blinded) [def, draw=none]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 757 \node (planchet) [def, draw=none, above left= of blinded] {\includegraphics[width=0.15\textwidth]{planchet.pdf}}; 758 \node (cnew) [def, draw=none, above= of planchet] {$c_{new}$}; 759 \node (bnew) [def, draw=none, above right= of blinded] {$b_{new}$}; 760 \node (dice1) [def, draw=none, above = of cnew]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 761 \node (dice2) [def, draw=none, above = of bnew]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 762 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 763 764 \tikzstyle{C} = [color=black, line width=1pt] 765 766 \draw [<-, C] (cnew) -- (dice1) node [midway, above, sloped] (TextNode) {}; 767 \draw [<-, C] (planchet) -- (cnew) node [midway, above, sloped] (TextNode) {}; 768 \draw [<-, C] (bnew) -- (dice2) node [midway, above, sloped] (TextNode) {}; 769 \draw [<-, C] (blinded) -- (planchet) node [midway, above, sloped] (TextNode) {}; 770 \draw [<-, C] (blinded) -- (bnew) node [midway, above, sloped] (TextNode) {}; 771 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 772 \end{tikzpicture} 773 \end{minipage} 774 \pause 775 \vfill 776 {\bf Problem: Owner of $c_{new}$ may differ from owner of $c_{old}$!} 777 \end{frame} 778 779 780 \begin{frame}{Customer: Transfer key setup (ECDH)} 781 \begin{minipage}{8cm} 782 Given partially spent private coin key $c_{old}$: 783 \begin{enumerate} 784 \item Let $C_{old} := c_{old}G$ (as before) 785 \item Create random private transfer key $t \mod o$ 786 \item Compute $T := tG$ 787 \item Compute $X := c_{old}(tG) = t(c_{old}G) = tC_{old}$ 788 \item Derive $c_{new}$ and $b_{new}$ from $X$ 789 \item Compute $C_{new} := c_{new}G$ 790 \item Compute $f_{new} := FDH(C_{new})$ 791 \item Transmit $f_{new}' := f_{new} b_{new}^e$ 792 \end{enumerate} 793 \end{minipage} 794 \begin{minipage}{4cm} 795 \begin{tikzpicture} 796 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 797 \node (t) [def, draw=none] at (0,0) {$t$}; 798 \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 799 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 800 \node (d) [def, draw=none, above left= of dh] {$c_{old}$}; 801 \node (cp) [def, draw=none, below left= of dh] {$c_{new}$}; 802 \node (bp) [def, draw=none, below right= of dh] {$b_{new}$}; 803 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 804 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 805 806 \tikzstyle{C} = [color=black, line width=1pt] 807 808 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 809 \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {}; 810 \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {}; 811 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 812 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 813 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 814 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 815 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 816 \end{tikzpicture} 817 \end{minipage} 818 \end{frame} 819 820 821 \begin{frame}{Cut-and-Choose} 822 \begin{minipage}{4cm} 823 \begin{tikzpicture} 824 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 825 \node (t) [def, draw=none] at (0,0) {$t_1$}; 826 \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 827 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 828 \node (d) [def, draw=none, above left= of dh] {$c_{old}$}; 829 \node (cp) [def, draw=none, below left= of dh] {$c_{new,1}$}; 830 \node (bp) [def, draw=none, below right= of dh] {$b_{new,1}$}; 831 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 832 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 833 834 \tikzstyle{C} = [color=black, line width=1pt] 835 836 \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {}; 837 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 838 \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {}; 839 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 840 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 841 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 842 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 843 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 844 \end{tikzpicture} 845 \end{minipage} 846 \begin{minipage}{4cm} 847 \begin{tikzpicture} 848 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 849 \node (t) [def, draw=none] at (0,0) {$t_2$}; 850 \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 851 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 852 \node (d) [def, draw=none, above left= of dh] {$c_{old}$}; 853 \node (cp) [def, draw=none, below left= of dh] {$c_{new,2}$}; 854 \node (bp) [def, draw=none, below right= of dh] {$b_{new,2}$}; 855 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 856 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 857 858 \tikzstyle{C} = [color=black, line width=1pt] 859 860 \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {}; 861 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 862 \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {}; 863 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 864 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 865 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 866 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 867 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 868 \end{tikzpicture} 869 \end{minipage} 870 \begin{minipage}{4cm} 871 \begin{tikzpicture} 872 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 873 \node (t) [def, draw=none] at (0,0) {$t_3$}; 874 \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 875 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 876 \node (d) [def, draw=none, above left= of dh] {$c_{old}$}; 877 \node (cp) [def, draw=none, below left= of dh] {$c_{new,3}$}; 878 \node (bp) [def, draw=none, below right= of dh] {$b_{new,3}$}; 879 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 880 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 881 882 \tikzstyle{C} = [color=black, line width=1pt] 883 884 \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {}; 885 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 886 \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {}; 887 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 888 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 889 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 890 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 891 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 892 \end{tikzpicture} 893 \end{minipage} 894 \end{frame} 895 896 897 \begin{frame}{Exchange: Choose!} 898 \begin{center} 899 \item Exchange sends back random $\gamma \in \{ 1, 2, 3 \}$ to the customer. 900 \end{center} 901 \end{frame} 902 903 904 \begin{frame}{Customer: Reveal} 905 \begin{enumerate} 906 \item If $\gamma = 1$, send $t_2$, $t_3$ to exchange 907 \item If $\gamma = 2$, send $t_1$, $t_3$ to exchange 908 \item If $\gamma = 3$, send $t_1$, $t_2$ to exchange 909 \end{enumerate} 910 \end{frame} 911 912 913 \begin{frame}{Exchange: Verify ($\gamma = 2$)} 914 \begin{minipage}{4cm} 915 \begin{tikzpicture} 916 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 917 \node (h) [def, draw=none] at (0,0) {$t_1$}; 918 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 919 \node (d) [def, draw=none, above left= of dh] {$C_{old}$}; 920 \node (cp) [def, draw=none, below left= of dh] {$c_{new,1}$}; 921 \node (bp) [def, draw=none, below right= of dh] {$b_{new,1}$}; 922 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 923 924 \tikzstyle{C} = [color=black, line width=1pt] 925 926 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 927 \draw [<-, C] (dh) -- (h) node [midway, above, sloped] (TextNode) {}; 928 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 929 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 930 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 931 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 932 \end{tikzpicture} 933 \end{minipage} 934 \begin{minipage}{4cm} 935 \ 936 \end{minipage} 937 \begin{minipage}{4cm} 938 \begin{tikzpicture} 939 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 940 \node (h) [def, draw=none] at (0,0) {$t_3$}; 941 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 942 \node (d) [def, draw=none, above left= of dh] {$C_{old}$}; 943 \node (cp) [def, draw=none, below left= of dh] {$c_{new,3}$}; 944 \node (bp) [def, draw=none, below right= of dh] {$b_{new,3}$}; 945 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 946 947 \tikzstyle{C} = [color=black, line width=1pt] 948 949 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 950 \draw [<-, C] (dh) -- (h) node [midway, above, sloped] (TextNode) {}; 951 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 952 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 953 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 954 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 955 \end{tikzpicture} 956 \end{minipage} 957 \end{frame} 958 959 960 \begin{frame}{Exchange: Blind sign change (RSA)} 961 \begin{minipage}{6cm} 962 \begin{enumerate} 963 \item Take $f_{new,\gamma}'$. 964 \item Compute $s' := f_{new,\gamma}'^d \mod n$. 965 \item Send signature $s'$. 966 \end{enumerate} 967 \end{minipage} 968 \begin{minipage}{6cm} 969 \begin{tikzpicture} 970 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 971 \node (hammer) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{hammer.pdf}}; 972 \node (signed) [def, draw=none, below left=of hammer]{\includegraphics[width=0.2\textwidth]{sign.pdf}}; 973 \node (blinded) [def, draw=none, above left=of signed]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 974 \node (customer) [node distance=4em and 0.5em, draw, below =of signed]{Customer}; 975 \tikzstyle{C} = [color=black, line width=1pt] 976 977 \draw [<-, C] (signed) -- (hammer) node [midway, above, sloped] (TextNode) {}; 978 \draw [<-, C] (signed) -- (blinded) node [midway, above, sloped] (TextNode) {}; 979 \draw [<-, C] (customer) -- (signed) node [midway, above, sloped] (TextNode) {{\small transmit}}; 980 \end{tikzpicture} 981 \end{minipage} 982 \end{frame} 983 984 985 \begin{frame}{Customer: Unblind change (RSA)} 986 \begin{minipage}{6cm} 987 \begin{enumerate} 988 \item Receive $s'$. 989 \item Compute $s := s' b_{new,\gamma}^{-1} \mod n$. 990 \end{enumerate} 991 \end{minipage} 992 \begin{minipage}{6cm} 993 \begin{tikzpicture} 994 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 995 \node (b) [def, draw=none] at (0,0) {$b_{new,\gamma}$}; 996 \node (coin) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 997 \node (signed) [def, draw=none, above left=of coin]{\includegraphics[width=0.15\textwidth]{sign.pdf}}; 998 \tikzstyle{C} = [color=black, line width=1pt] 999 1000 \draw [<-, C] (coin) -- (b) node [midway, above, sloped] (TextNode) {}; 1001 \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {}; 1002 \end{tikzpicture} 1003 \end{minipage} 1004 \end{frame} 1005 1006 1007 \begin{frame}{Exchange: Allow linking change} 1008 \begin{minipage}{7cm} 1009 \begin{center} 1010 Given $C_{old}$ 1011 1012 \vspace{1cm} 1013 1014 return $T_\gamma$, $s := s' b_{new,\gamma}^{-1} \mod n$. 1015 \end{center} 1016 \end{minipage} 1017 \begin{minipage}{5cm} 1018 \begin{tikzpicture} 1019 \tikzstyle{def} = [node distance= 3em and 0.5em, inner sep=0.5em, outer sep=.3em]; 1020 \node (co) [def, draw=none] at (0,0) {$C_{old}$}; 1021 \node (T) [def, draw=none, below left=of co]{$T_\gamma$}; 1022 \node (sign) [def, draw=none, below right=of co]{\includegraphics[width=0.15\textwidth]{sign.pdf}}; 1023 \node (customer) [def, draw, below right=of T] {Customer}; 1024 1025 \tikzstyle{C} = [color=black, line width=1pt] 1026 1027 \draw [<-, C] (T) -- (co) node [midway, above, sloped] (TextNode) {}; 1028 \draw [<-, C] (sign) -- (co) node [midway, above, sloped] (TextNode) {}; 1029 \draw [<-, C] (customer) -- (T) node [midway, above, sloped] (TextNode) {link}; 1030 \draw [<-, C] (customer) -- (sign) node [midway, above, sloped] (TextNode) {link}; 1031 \end{tikzpicture} 1032 \end{minipage} 1033 \end{frame} 1034 1035 1036 \begin{frame}{Customer: Link (threat!)} 1037 \begin{minipage}{6.3cm} 1038 \begin{enumerate} 1039 \item Have $c_{old}$. 1040 \item Obtain $T_\gamma$, $s$ from exchange 1041 \item Compute $X_\gamma = c_{old}T_\gamma$ 1042 \item Derive $c_{new,\gamma}$ and $b_{new,\gamma}$ from $X_\gamma$ 1043 \item Unblind $s := s' b_{new,\gamma}^{-1} \mod n$ 1044 \end{enumerate} 1045 1046 \end{minipage} 1047 \begin{minipage}{5.7cm} 1048 \begin{tikzpicture} 1049 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 1050 \node (T) [def, draw=none] at (0,0) {$T_\gamma$}; 1051 \node (exchange) [def, inner sep=0.5em, draw, above left=of T] {Exchange}; 1052 \node (signed) [def, draw=none, below left=of T]{\includegraphics[width=0.15\textwidth]{sign.pdf}}; 1053 \node (dh) [def, draw=none, below right=of T]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 1054 \node (bp) [def, draw=none, below left= of dh] {$b_{new,\gamma}$}; 1055 \node (co) [def, draw=none, above right= of dh] {$c_{old}$}; 1056 \node (cp) [def, draw=none, below= of dh] {$c_{new,\gamma}$}; 1057 \node (coin) [def, draw=none, below left = of bp]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 1058 \node (psign) [def, node distance=2.5em and 0em, draw=none, below = of cp]{\includegraphics[width=0.2\textwidth]{planchet-sign.pdf}}; 1059 1060 \tikzstyle{C} = [color=black, line width=1pt] 1061 1062 \draw [<-, C] (dh) -- (co) node [midway, above, sloped] (TextNode) {}; 1063 \draw [<-, C] (dh) -- (T) node [midway, above, sloped] (TextNode) {}; 1064 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 1065 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 1066 \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {}; 1067 \draw [<-, C] (coin) -- (bp) node [midway, above, sloped] (TextNode) {}; 1068 \draw [<-, C] (T) -- (exchange) node [midway, above, sloped] (TextNode) {link}; 1069 \draw [<-, C] (signed) -- (exchange) node [midway, below, sloped] (TextNode) {link}; 1070 \draw [<-, C, double] (psign) -- (cp) node [midway, below, sloped] (TextNode) {}; 1071 \end{tikzpicture} 1072 \end{minipage} 1073 \end{frame} 1074 1075 1076 \begin{frame}{Refresh protocol summary} 1077 \begin{itemize} 1078 \item Customer asks exchange to convert old coin to new coin 1079 \item Protocol ensures new coins can be recovered from old coin 1080 \item[$\Rightarrow$] New coins are owned by the same entity! 1081 \end{itemize} 1082 Thus, the refresh protocol allows: 1083 \begin{itemize} 1084 \item To give unlinkable change. 1085 \item To give refunds to an anonymous customer. 1086 \item To expire old keys and migrate coins to new ones. 1087 \item To handle protocol aborts. 1088 \end{itemize} 1089 \noindent 1090 \begin{center} 1091 \bf 1092 Transactions via refresh are equivalent to {\em sharing} a wallet. 1093 \end{center} 1094 \end{frame} 1095 1096 1097 1098 \section{Programmable money: Age restrictions} 1099 1100 \begin{frame} 1101 \vfill 1102 \begin{center} 1103 {\bf Programmable money: Age restrictions} 1104 \end{center} 1105 \vfill 1106 \end{frame} 1107 1108 1109 \begin{frame}{Age restriction in E-commerce} 1110 1111 \begin{description} 1112 \item[Problem:]~\\[1em] 1113 Verification of minimum age requirements in e-commerce.\\[2em] 1114 1115 \item[Common solutions:] 1116 1117 \begin{tabular}{l<{\onslide<2->}c<{\onslide<3->}cr<{\onslide}} 1118 & \blue{Privacy} & \tikzmark{topau} \blue{Ext. authority}& \\[\medskipamount] 1119 1. ID Verification & bad & required & \\[\medskipamount] 1120 2. Restricted Accounts & bad & required & \\[\medskipamount] 1121 3. Attribute-based & good & required &\tikzmark{bottomau} \\[\medskipamount] 1122 \end{tabular} 1123 \end{description} 1124 1125 \uncover<4->{ 1126 \begin{tikzpicture}[overlay,remember picture] 1127 \draw[orange,thick,rounded corners] 1128 ($(pic cs:topau) +(0,0.5)$) rectangle ($(pic cs:bottomau) -(0.3, 0.2)$); 1129 \end{tikzpicture} 1130 \begin{center} 1131 \bf Principle of Subsidiarity is violated 1132 \end{center} 1133 } 1134 \end{frame} 1135 1136 1137 \begin{frame}{Principle of Subsidiarity} 1138 \begin{center} \Large 1139 Functions of government---such as granting and restricting 1140 rights---should be performed\\ 1141 {\it at the lowest level of authority possible},\\ 1142 as long as they can be performed {\it adequately}. 1143 \end{center} 1144 \vfill 1145 \uncover<2->{ 1146 For age-restriction, the lowest level of authority is:\\ 1147 \begin{center}\Large 1148 Parents, guardians and caretakers 1149 \end{center} 1150 } 1151 \end{frame} 1152 1153 1154 \begin{frame}{Age restriction design for GNU Taler} 1155 Design and implementation of an age restriction scheme\\ 1156 with the following goals: 1157 1158 \begin{enumerate} 1159 \item It ties age restriction to the \textbf{ability to pay} (not to ID's) 1160 \item maintains \textbf{anonymity of buyers} 1161 \item maintains \textbf{unlinkability of transactions} 1162 \item aligns with \textbf{principle of subsidiartiy} 1163 \item is \textbf{practical and efficient} 1164 \end{enumerate} 1165 1166 \end{frame} 1167 1168 1169 \begin{frame}{Age restriction} 1170 \framesubtitle{Assumptions and scenario} 1171 1172 \begin{columns} 1173 \column{7.5cm} 1174 \begin{itemize} 1175 \item<1-> Assumption: Checking accounts are under control of eligible adults/guardians. 1176 \item<2-> \textit{Guardians} \textbf{commit} to an maximum age 1177 \item<3-> \textit{Minors} \textbf{attest} their adequate age 1178 \item<4-> \textit{Merchants} \textbf{verify} the attestations 1179 \item<5-> Minors \textbf{derive} age commitments from existing ones 1180 \item<6-> \textit{Exchanges} \textbf{compare} the derived age commitments 1181 \end{itemize} 1182 \column{5cm} 1183 \uncover<7-> 1184 { 1185 \begin{center} 1186 \fontsize{7pt}{7pt}\selectfont 1187 \begin{tikzpicture}[scale=.5] 1188 \node[circle,minimum size=15pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$}; 1189 \node[circle,minimum size=15pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1190 \node[circle,minimum size=15pt,fill=black!15] at ( 0:4) (Merchant) {$\Merchant$}; 1191 \node[circle,minimum size=15pt,fill=blue!15] at (140:3) (Guardian) {$\Guardian$}; 1192 1193 \draw[->] (Guardian) to [out=50,in=130, loop] node[above] 1194 {$\Commit$} (Guardian); 1195 \draw[->,blue] (Client) to [out=-125,in=-190, loop] node[below,left] 1196 {\blue{$\Attest$}} (Client); 1197 \draw[->,blue] (Merchant) to [out=50,in=130, loop] node[above] 1198 {\blue{$\Verify$}} (Merchant); 1199 \draw[->,orange] (Client) to [out=-35,in=-100, loop] node[below] 1200 {\orange{$\Derive$}} (Client); 1201 \draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above] 1202 {\orange{$\Compare$}} (Exchange); 1203 1204 \draw[orange,|->] (Client) to node[sloped,above,align=left] 1205 {\orange{\scriptsize }} (Exchange); 1206 \draw[blue,|->] (Client) to node[sloped, above] 1207 {\blue{\scriptsize }} (Merchant); 1208 \draw[,|->] (Guardian) to node[above,sloped,align=left] 1209 {{\scriptsize }} (Client); 1210 \end{tikzpicture} 1211 \end{center} 1212 } 1213 \end{columns} 1214 \vfill 1215 \uncover<7->{Note: Scheme is independent of payment service protocol.} 1216 \end{frame} 1217 1218 1219 \begin{frame}{Formal Function Signatures} 1220 \small 1221 Searching for functions \uncover<2->{with the following signatures} 1222 \begin{align*} 1223 &\bf \Commit\uncover<2->{: 1224 &(\age, \omega) &\mapsto (\commitment, \pruf) 1225 &\scriptstyle \N_\Age \times \Omega &\scriptstyle \to \Commitments\times\Proofs, 1226 } 1227 \\ 1228 &\bf \Attest\uncover<3->{: 1229 &(\minage, \commitment, \pruf) &\mapsto \attest 1230 &\scriptstyle \N_\Age\times\Commitments\times\Proofs &\scriptstyle \to \Attests \cup \{\Nil\}, 1231 } 1232 \\ 1233 &\bf \Verify\uncover<4->{: 1234 &(\minage, \commitment, \attest) &\mapsto b 1235 &\scriptstyle \N_\Age\times\Commitments\times\Attests &\scriptstyle \to \Z_2, 1236 } 1237 \\ 1238 &\bf \Derive\uncover<5->{: 1239 &(\commitment, \pruf, \omega) &\mapsto (\commitment', \pruf', \blinding) 1240 &\scriptstyle \Commitments\times\Proofs\times\Omega &\scriptstyle \to \Commitments\times\Proofs\times\Blindings, 1241 } 1242 \\ 1243 &\bf \Compare\uncover<6->{: 1244 &(\commitment, \commitment', \blinding) &\mapsto b 1245 &\scriptstyle \Commitments\times\Commitments\times\Blindings &\scriptstyle \to \Z_2, 1246 } 1247 \end{align*} 1248 \uncover<7->{ 1249 with $\Omega, \Proofs, \Commitments, \Attests, \Blindings$ 1250 sufficiently large sets.\\[1em] 1251 Basic and security requirements are defined later.\\[2em] 1252 } 1253 1254 \scriptsize 1255 \uncover<2->{ 1256 Mnemonics:\\ 1257 $\Commitments=$ \textit{c$\Commitments$mmitments}, 1258 $\commitment=$ \textit{Q-mitment} (commitment), 1259 $\Proofs=$ \textit{$\Proofs$roofs}, 1260 } 1261 \uncover<3->{ 1262 $\pruf=$ \textit{$\pruf$roof},\\ 1263 $\Attests=$ \textit{a$\Attests$testations}, 1264 $\attest=$ \textit{a$\attest$testation}, 1265 } 1266 \uncover<5->{ 1267 $\Blindings=$ \textit{$\Blindings$lindings}, 1268 $\blinding=$ \textit{$\blinding$linding}. 1269 } 1270 \end{frame} 1271 1272 \begin{frame}{Age restriction} 1273 \framesubtitle{Naïve scheme} 1274 \begin{center} 1275 \begin{tikzpicture}[scale=.85] 1276 \node[circle,minimum size=20pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$}; 1277 \node[circle,minimum size=20pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1278 \node[circle,minimum size=20pt,fill=black!15] at ( 0:4) (Merchant) {$\Merchant$}; 1279 \node[circle,minimum size=20pt,fill=blue!15] at (140:3) (Guardian) {$\Guardian$}; 1280 1281 \draw[->] (Guardian) to [out=50,in=130, loop] node[above] 1282 {$\Commit$} (Guardian); 1283 \draw[->,blue] (Client) to [out=-125,in=-190, loop] node[below,left] 1284 {\blue{$\Attest$}} (Client); 1285 \draw[->,blue] (Merchant) to [out=50,in=130, loop] node[above] 1286 {\blue{$\Verify$}} (Merchant); 1287 \draw[->,orange] (Client) to [out=-35,in=-100, loop] node[below] 1288 {\orange{$\Derive$}} (Client); 1289 \draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above] 1290 {\orange{$\Compare$}} (Exchange); 1291 1292 \draw[orange,|->] (Client) to node[sloped,above,align=left] 1293 {\orange{\scriptsize }} (Exchange); 1294 \draw[blue,|->] (Client) to node[sloped, above] 1295 {\blue{\scriptsize }} (Merchant); 1296 \draw[,|->] (Guardian) to node[above,sloped,align=left] 1297 {{\scriptsize }} (Client); 1298 \end{tikzpicture} 1299 \end{center} 1300 \end{frame} 1301 1302 \begin{frame}{Achieving Unlinkability} 1303 \begin{columns} 1304 \column{3cm} 1305 \begin{center} 1306 \fontsize{8pt}{9pt}\selectfont 1307 \begin{tikzpicture}[scale=.65] 1308 \node[circle,minimum size=20pt,fill=black!15] at ( 60:4) (Exchange) {$\Exchange$}; 1309 \node[circle,minimum size=20pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1310 1311 \draw[->,orange] (Client) to [out=-35,in=-100, loop] node[below] 1312 {\orange{$\footnotesize \Derive()$}} (Client); 1313 \draw[->,orange] (Exchange) to [out=50,in=130, loop] node[above] 1314 {\orange{$\footnotesize \Compare()$}} (Exchange); 1315 1316 \draw[orange,|->] (Client) to node[sloped,above,align=left] 1317 {\orange{\tiny \uncover<2->{$(\commitment_i,\commitment_{i+1})$}}} (Exchange); 1318 \end{tikzpicture} 1319 \end{center} 1320 1321 \column{9cm} 1322 Simple use of $\Derive()$ and $\Compare()$ is problematic. 1323 1324 \begin{itemize} 1325 \item<2-> Calling $\Derive()$ iteratively generates sequence 1326 $(\commitment_0, \commitment_1, \dots)$ of commitments. 1327 \item<2-> Exchange calls $\Compare(\commitment_i, \commitment_{i+1}, .)$ 1328 \item[$\implies$]\uncover<3->{\bf Exchange identifies sequence} 1329 \item[$\implies$]\uncover<3->{\bf Unlinkability broken} 1330 \end{itemize} 1331 \end{columns} 1332 \end{frame} 1333 1334 \begin{frame}{Achieving Unlinkability} 1335 Define cut\&choose protocol \orange{$\DeriveCompare$}, 1336 using $\Derive()$ and $\Compare()$.\\[0.5em] 1337 \uncover<2->{ 1338 Sketch: 1339 \small 1340 \begin{enumerate} 1341 \item $\Child$ derives commitments $(\commitment_1,\dots,\commitment_\kappa)$ 1342 from $\commitment_0$ \\ 1343 by calling $\Derive()$ with blindings $(\beta_1,\dots,\beta_\kappa)$ 1344 \item $\Child$ calculates $h_0:=H\left(H(\commitment_1, \beta_1)||\dots||H(\commitment_\kappa, \beta_\kappa)\right)$ 1345 \item $\Child$ sends $\commitment_0$ and $h_0$ to $\Exchange$ 1346 \item $\Exchange$ chooses $\gamma \in \{1,\dots,\kappa\}$ randomly 1347 \item $\Child$ reveals $h_\gamma:=H(\commitment_\gamma, \beta_\gamma)$ and all $(\commitment_i, \beta_i)$, except $(\commitment_\gamma, \beta_\gamma)$ 1348 \item $\Exchange$ compares $h_0$ and 1349 $H\left(H(\commitment_1, \beta_1)||...||h_\gamma||...||H(\commitment_\kappa, \beta_\kappa)\right)$\\ 1350 and evaluates $\Compare(\commitment_0, \commitment_i, \beta_i)$. 1351 \end{enumerate} 1352 \vfill 1353 Note: Scheme is similar to the {\it refresh} protocol in GNU Taler. 1354 } 1355 \end{frame} 1356 1357 \begin{frame}{Achieving Unlinkability} 1358 With \orange{$\DeriveCompare$} 1359 \begin{itemize} 1360 \item $\Exchange$ learns nothing about $\commitment_\gamma$, 1361 \item trusts outcome with $\frac{\kappa-1}{\kappa}$ certainty, 1362 \item i.e. $\Child$ has $\frac{1}{\kappa}$ chance to cheat. 1363 \end{itemize} 1364 \vfill 1365 Note: Still need Derive and Compare to be defined. 1366 \end{frame} 1367 1368 \begin{frame}{Refined scheme} 1369 1370 \begin{tikzpicture}[scale=.8] 1371 \node[circle,minimum size=25pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1372 \node[circle,minimum size=25pt,fill=black!15] at ( 60:5) (Exchange) {$\Exchange$}; 1373 \node[circle,minimum size=25pt,fill=black!15] at ( 0:5) (Merchant) {$\Merchant$}; 1374 \node[circle,minimum size=25pt,fill=blue!15] at (130:3) (Guardian) {$\Guardian$}; 1375 1376 \draw[orange,<->] (Client) to node[sloped,below,align=center] 1377 {\orange{$\DeriveCompare$}} (Exchange); 1378 \draw[blue,->] (Client) to node[sloped, below] 1379 {\blue{$(\attest_\minage, \commitment)$}} (Merchant); 1380 1381 \draw[->] (Guardian) to [out=150,in=70, loop] node[above] 1382 {$\Commit(\age)$} (Guardian); 1383 \draw[->] (Guardian) to node[below,sloped] 1384 {($\commitment$, $\pruf_\age$)} (Client); 1385 \draw[->,blue] (Client) to [out=-50,in=-130, loop] node[below] 1386 {\blue{$\Attest(\minage, \commitment, \pruf_{\age})$}} (Client); 1387 \draw[->,blue] (Merchant) to [out=-50,in=-130, loop] node[below] 1388 {\blue{$\Verify(\minage, \commitment, \attest_{\minage})$}} (Merchant); 1389 \end{tikzpicture} 1390 \end{frame} 1391 1392 % \begin{frame}{Achieving Unlinkability} 1393 % \scriptsize 1394 % $\DeriveCompare : \Commitments\times\Proofs\times\Omega \to \{0,1\}$\\ 1395 % \vfill 1396 % $\DeriveCompare(\commitment, \pruf, \omega) =$ 1397 % \begin{itemize} 1398 % \it 1399 % \itemsep0.5em 1400 % \item[$\Child$:] 1401 % \begin{enumerate} 1402 % \scriptsize 1403 % \itemsep0.3em 1404 % \item for all $i \in \{1,\dots,\kappa\}: 1405 % (\commitment_i,\pruf_i,\beta_i) \leftarrow \Derive(\commitment, \pruf, \omega + i)$ 1406 % \item $h \leftarrow \Hash\big(\Hash(\commitment_1,\beta_1)\parallel\dots\parallel\Hash(\commitment_\kappa,\beta_\kappa) \big)$ 1407 % \item send $(\commitment, h)$ to $\Exchange$ 1408 % \end{enumerate} 1409 % \item[$\Exchange$:] 1410 % \begin{enumerate} 1411 % \setcounter{enumi}{4} 1412 % \scriptsize 1413 % \itemsep0.3em 1414 % \item save $(\commitment, h)$ \label{st:hash} 1415 % \item $\gamma \drawfrom \{1,\dots ,\kappa\}$ 1416 % \item send $\gamma$ to $\Child$ 1417 % \end{enumerate} 1418 % \item[$\Child$:] 1419 % \begin{enumerate} 1420 % \setcounter{enumi}{7} 1421 % 1422 % \scriptsize 1423 % \itemsep0.3em 1424 % \item $h'_\gamma \leftarrow \Hash(\commitment_\gamma, \beta_\gamma)$ 1425 % \item $\mathbf{E}_\gamma \leftarrow \big[(\commitment_1,\beta_1),\dots, 1426 % (\commitment_{\gamma-1}, \beta_{\gamma-1}), 1427 % \Nil, 1428 % (\commitment_{\gamma+1}, \beta_{\gamma+1}), 1429 % \dots,(\commitment_\kappa, \beta_\kappa)\big]$ 1430 % \item send $(\mathbf{E}_\gamma, h'_\gamma)$ to $\Exchange$ 1431 % \end{enumerate} 1432 % \item[$\Exchange$:] 1433 % \begin{enumerate} 1434 % \setcounter{enumi}{10} 1435 % \scriptsize 1436 % \itemsep0.3em 1437 % \item for all $i \in \{1,\dots,\kappa\}\setminus\{\gamma\}: h_i \leftarrow \Hash(\mathbf{E}_\gamma[i])$ 1438 % \item if $h \stackrel{?}{\neq} \HashF(h_1\|\dots\|h_{\gamma-1}\|h'_\gamma\|h_{\gamma+1}\|\dots\|h_{\kappa-1})$ return 0 1439 % \item for all $i \in \{1,\dots,\kappa\}\setminus\{\gamma\}$: 1440 % if $0 \stackrel{?}{=} \Compare(\commitment,\commitment_i, \beta_i)$ return $0$ 1441 % \item return 1 1442 % \end{enumerate} 1443 % \end{itemize} 1444 % \end{frame} 1445 1446 \begin{frame}{Basic Requirements} 1447 1448 Candidate functions 1449 \[ (\Commit, \Attest, \Verify, \Derive, \Compare) \] 1450 must first meet \textit{basic} requirements: 1451 1452 \begin{itemize} 1453 \item Existence of attestations 1454 \item Efficacy of attestations 1455 \item Derivability of commitments and attestations 1456 \end{itemize} 1457 \end{frame} 1458 1459 \begin{frame}{Basic Requirements} 1460 \framesubtitle{Formal Details} 1461 1462 \begin{description} 1463 \item[Existence of attestations] 1464 {\scriptsize 1465 \begin{align*} 1466 \Forall_{\age\in\N_\Age \atop \omega \in \Omega}: 1467 \Commit(\age, \omega) =: (\commitment, \pruf) 1468 \implies 1469 \Attest(\minage, \commitment, \pruf) = 1470 \begin{cases} 1471 \attest \in \Attests, \text{ if } \minage \leq \age\\ 1472 \Nil \text{ otherwise} 1473 \end{cases} 1474 \end{align*}} 1475 \item[Efficacy of attestations] 1476 {\scriptsize 1477 \begin{align*} 1478 \Verify(\minage, \commitment, \attest) = \ 1479 \begin{cases} 1480 1, \text{if } \Exists_{\pruf \in \Proofs}: \Attest(\minage, \commitment, \pruf) = \attest\\ 1481 0 \text{ otherwise} 1482 \end{cases} 1483 \end{align*}} 1484 1485 {\scriptsize 1486 \begin{align*} 1487 \forall_{n \leq \age}: \Verify\big(n, \commitment, \Attest(n, \commitment, \pruf)\big) = 1. 1488 \end{align*}} 1489 \item[etc.] 1490 \end{description} 1491 \end{frame} 1492 1493 %\begin{frame}{Requirements} 1494 % \framesubtitle{Details} 1495 % 1496 % \begin{description} 1497 % \item[Derivability of commitments and proofs:]~\\[0.1em] 1498 % {\scriptsize 1499 % Let \begin{align*} 1500 % \age & \in\N_\Age,\,\, \omega_0, \omega_1 \in\Omega\\ 1501 % (\commitment_0, \pruf_0) & \leftarrow \Commit(\age, \omega_0),\\ 1502 % (\commitment_1, \pruf_1, \blinding) & \leftarrow \Derive(\commitment_0, \pruf_0, \omega_1). 1503 % \end{align*} 1504 % We require 1505 % \begin{align*} 1506 % \Compare(\commitment_0, \commitment_1, \blinding) = 1 \label{req:comparity} 1507 % \end{align*} 1508 % and for all $n\leq\age$: 1509 % \begin{align*} 1510 % \Verify(n, \commitment_1, \Attest(n, \commitment_1, \pruf_1)) &% 1511 % = 1512 % \Verify(n, \commitment_0, \Attest(n, \commitment_0, \pruf_0)) 1513 % \end{align*}} 1514 % \end{description} 1515 %\end{frame} 1516 1517 \begin{frame}{Security Requirements} 1518 Candidate functions must also meet \textit{security} requirements. 1519 Those are defined via security games: 1520 \begin{itemize} 1521 \item Game: Age disclosure by commitment or attestation 1522 \item[$\leftrightarrow$] Requirement: Non-disclosure of age 1523 \vfill 1524 1525 \item Game: Forging attestation 1526 \item[$\leftrightarrow$] Requirement: Unforgeability of 1527 minimum age 1528 \vfill 1529 1530 \item Game: Distinguishing derived commitments and attestations 1531 \item[$\leftrightarrow$] Requirement: Unlinkability of 1532 commitments and attestations 1533 1534 \end{itemize} 1535 \vfill 1536 1537 Meeting the security requirements means that adversaries can win 1538 those games only with negligible advantage. 1539 \vfill 1540 Adversaries are arbitrary polynomial-time algorithms, acting on all 1541 relevant input. 1542 \end{frame} 1543 1544 \begin{frame}{Security Requirements} 1545 \framesubtitle{Simplified Example} 1546 1547 \begin{description} 1548 \item[Game $\Game{FA}(\lambda)$---Forging an attest:]~\\ 1549 {\small 1550 \begin{enumerate} 1551 \item $ (\age, \omega) \drawfrom \N_{\Age-1}\times\Omega $ 1552 \item $ (\commitment, \pruf) \leftarrow \Commit(\age, \omega) $ 1553 \item $ (\minage, \attest) \leftarrow \Adv(\age, \commitment, \pruf)$ 1554 \item Return 0 if $\minage \leq \age$ 1555 \item Return $\Verify(\minage,\commitment,\attest)$ 1556 \end{enumerate} 1557 } 1558 \vfill 1559 \item[Requirement: Unforgeability of minimum age] 1560 {\small 1561 \begin{equation*} 1562 \Forall_{\Adv\in\PPT(\N_\Age\times\Commitments\times\Proofs\to \N_\Age\times\Attests)}: 1563 \Probability\Big[\Game{FA}(\lambda) = 1\Big] \le \negl(\lambda) 1564 \end{equation*} 1565 } 1566 \end{description} 1567 \end{frame} 1568 1569 1570 \begin{frame}{Solution: Instantiation with ECDSA} 1571 % \framesubtitle{Definition of Commit} 1572 1573 \begin{description} 1574 \item[To Commit to age (group) $\age \in \{1,\dots,\Age\}$]~\\ 1575 \begin{enumerate} 1576 \item<2-> Guardian generates ECDSA-keypairs, one per age (group): 1577 \[\langle(q_1, p_1),\dots,(q_\Age,p_\Age)\rangle\] 1578 \item<3-> Guardian then \textbf{drops} all private keys 1579 $p_i$ for $i > \age$: 1580 \[\Big \langle(q_1, p_1),\dots, 1581 (q_\age, p_\age), 1582 (q_{\age +1}, \red{\Nil}),\dots, 1583 (q_\Age, \red{\Nil})\Big\rangle\] 1584 1585 \begin{itemize} 1586 \item $\Vcommitment := (q_1, \dots, q_\Age)$ is the \textit{Commitment}, 1587 \item $\Vpruf_\age := (p_1, \dots, p_\age, \Nil,\dots,\Nil)$ is the \textit{Proof} 1588 \end{itemize} 1589 \vfill 1590 \item<4-> Guardian gives child $\langle \Vcommitment, \Vpruf_\age \rangle$ 1591 \vfill 1592 \end{enumerate} 1593 \end{description} 1594 \end{frame} 1595 1596 \begin{frame}{Instantiation with ECDSA} 1597 \framesubtitle{Definitions of Attest and Verify} 1598 1599 Child has 1600 \begin{itemize} 1601 \item ordered public-keys $\Vcommitment = (q_1, \dots, q_\Age) $, 1602 \item (some) private-keys $\Vpruf = (p_1, \dots, p_\age, \Nil, \dots, \Nil)$. 1603 \end{itemize} 1604 \begin{description} 1605 \item<2->[To \blue{Attest} a minimum age $\blue{\minage} \leq \age$:]~\\ 1606 Sign a message with ECDSA using private key $p_\blue{\minage}$ 1607 \end{description} 1608 1609 \vfill 1610 1611 \uncover<3->{ 1612 Merchant gets 1613 \begin{itemize} 1614 \item ordered public-keys $\Vcommitment = (q_1, \dots, q_\Age) $ 1615 \item Signature $\sigma$ 1616 \end{itemize} 1617 \begin{description} 1618 \item<4->[To \blue{Verify} a minimum age $\minage$:]~\\ 1619 Verify the ECDSA-Signature $\sigma$ with public key $q_\minage$. 1620 \end{description} 1621 } 1622 \vfill 1623 \end{frame} 1624 1625 \begin{frame}{Instantiation with ECDSA} 1626 \framesubtitle{Definitions of Derive and Compare} 1627 Child has 1628 $\Vcommitment = (q_1, \dots, q_\Age) $ and 1629 $\Vpruf = (p_1, \dots, p_\age, \Nil, \dots, \Nil)$. 1630 \begin{description} 1631 \item<2->[To \blue{Derive} new $\Vcommitment'$ and $\Vpruf'$:] 1632 Choose random $\beta\in\Z_g$ and calculate 1633 \small 1634 \begin{align*} 1635 \Vcommitment' &:= \big(\beta * q_1,\ldots,\beta * q_\Age\big),\\ 1636 \Vpruf' &:= \big(\beta p_1,\ldots,\beta p_\age,\Nil,\ldots,\Nil\big) 1637 \end{align*} 1638 Note: $ (\beta p_i)*G = \beta*(p_i*G) = \beta*q_i$\\ 1639 \scriptsize $\beta*q_i$ is scalar multiplication on the elliptic curve. 1640 \end{description} 1641 1642 \vfill 1643 \uncover<3->{ 1644 Exchange gets $\Vcommitment = (q_1,\dots,q_\Age)$, $\Vcommitment' = (q_1', \dots, q_\Age')$ and $\beta$ 1645 \begin{description} 1646 \item[To \blue{Compare}, calculate:] 1647 \small 1648 $(\beta * q_1, \ldots , \beta * q_\Age) \stackrel{?}{=} (q'_1,\ldots, q'_\Age)$ 1649 \end{description} 1650 \vfill 1651 } 1652 \end{frame} 1653 1654 \begin{frame}{Instantiation with ECDSA} 1655 1656 Functions 1657 (Commit, Attest, Verify, Derive, Compare)\\ 1658 as defined in the instantiation with ECDSA\\[0.5em] 1659 \begin{itemize} 1660 \item meet the basic requirements,\\[0.5em] 1661 \item also meet all security requirements.\\ 1662 Proofs by security reduction, details are in the paper. 1663 \end{itemize} 1664 1665 \end{frame} 1666 1667 1668 % \begin{frame}{Instantiation with ECDSA} 1669 % \framesubtitle{Full definitions} 1670 % \scriptsize 1671 % 1672 % \begin{align*} 1673 % \Commit_{E,\FDHg{\cdot}}(\age, \omega) &:= \Big\langle 1674 % \overbrace{(q_1,\ldots,q_\Age)}^{= \Vcommitment},\; 1675 % \overbrace{(p_1,\ldots,p_\age, \Nil,\ldots,\Nil)}^{= \Vpruf \text{, length }\Age} 1676 % \Big\rangle\\ 1677 % \Attest_{E,\HashF}(\bage, \Vcommitment, \Vpruf) &:= 1678 % \begin{cases} 1679 % \attest_\bage := \Sign_{E,\HashF}\big(\bage,\Vpruf[\bage]\big) & \text{if } \Vpruf[\bage] \stackrel{?}{\neq} \Nil\\ 1680 % \Nil & \text{otherwise} 1681 % \end{cases}\\ 1682 % % 1683 % \Verify_{E,\HashF}(\bage, \Vcommitment, \attest) &:= \Ver_{E,\HashF}(\bage, \Vcommitment[\bage], \attest)\\ 1684 % % 1685 % \Derive_{E, \FDHg{\cdot}}(\Vcommitment, \Vpruf, \omega) &:= 1686 % \Big\langle(\beta * q_1,\ldots,\beta * q_\Age), 1687 % (\beta p_1,\ldots,\beta p_\age,\Nil,\ldots,\Nil), \beta \Big\rangle \\ 1688 % & \text{ with } \beta := \FDHg{\omega} \text{ and multiplication } \beta p_i \text{ modulo } g \nonumber\\ 1689 % % 1690 % \Compare_E(\Vcommitment, \Vcommitment', \beta) &:= 1691 % \begin{cases} 1692 % 1 & \text{if } (\beta * q_1, \ldots , \beta * q_\Age) \stackrel{?}{=} (q'_1,\ldots, q'_\Age)\\ 1693 % 0 & \text{otherwise} 1694 % \end{cases} 1695 % \end{align*} 1696 % \end{frame} 1697 1698 1699 \begin{frame}{Reminder: GNU Taler Fundamentals} 1700 \begin{center} 1701 \begin{tikzpicture}[scale=.55] 1702 \node[circle,fill=black!10] at (3, 4) (Exchange) {$\Exchange$}; 1703 \node[circle,fill=black!10] at (0, 0) (Customer) {$\Customer$}; 1704 \node[circle,fill=black!10] at (6, 0) (Merchant) {$\Merchant$}; 1705 1706 \draw[<->] (Customer) to [out=65,in=220] node[sloped,above] {\sf withdraw} (Exchange); 1707 \draw[<->] (Customer) to [out=45,in=240] node[sloped,below] {\sf refresh} (Exchange); 1708 \draw[<->] (Customer) to node[sloped, below] {\sf purchase} (Merchant); 1709 \draw[<->] (Merchant) to node[sloped, above] {\sf deposit} (Exchange); 1710 \end{tikzpicture} 1711 \end{center} 1712 1713 \vfill 1714 \begin{itemize} 1715 \item Coins are public-/private key-pairs $(C_p, c_s)$. 1716 \item Exchange blindly signs $\FDH(C_p)$ with denomination key $d_p$ 1717 \item Verification: 1718 \begin{eqnarray*} 1719 1 &\stackrel{?}{=}& 1720 \mathsf{SigCheck}\big(\FDH(C_p), D_p, \sigma_p\big) 1721 \end{eqnarray*} 1722 \scriptsize($D_p$ = public key of denomination and $\sigma_p$ = signature) 1723 1724 \end{itemize} 1725 \end{frame} 1726 1727 \begin{frame}{Integration with GNU Taler} 1728 \framesubtitle{Binding age restriction to coins} 1729 1730 To bind an age commitment $\commitment$ to a coin $C_p$, instead of 1731 signing $\FDH(C_p)$, $\Exchange$ now blindly signs 1732 \begin{center} 1733 $\FDH(C_p, \orange{H(\commitment)})$ 1734 \end{center} 1735 1736 \vfill 1737 Verfication of a coin now requires $H(\commitment)$, too: 1738 \begin{center} 1739 $1 \stackrel{?}{=} 1740 \mathsf{SigCheck}\big(\FDH(C_p, \orange{H(\commitment)}), D_p, \sigma_p\big)$ 1741 \end{center} 1742 \vfill 1743 \end{frame} 1744 1745 \begin{frame}{Integration with GNU Taler} 1746 \framesubtitle{Integrated schemes} 1747 \fontsize{8pt}{9pt}\selectfont 1748 \begin{tikzpicture}[scale=.9] 1749 \node[circle,minimum size=25pt,fill=black!15] at ( 0:0) (Client) {$\Child$}; 1750 \node[circle,minimum size=25pt,fill=black!15] at ( 60:5) (Exchange) {$\Exchange$}; 1751 \node[circle,minimum size=25pt,fill=black!15] at ( 0:5) (Merchant) {$\Merchant$}; 1752 \node[circle,minimum size=25pt,fill=blue!15] at (130:3) (Guardian) {$\Guardian$}; 1753 1754 \draw[<->] (Guardian) to node[sloped,above,align=center] 1755 {{\sf withdraw}\orange{, using}\\ $\FDH(C_p\orange{, H(\commitment)})$} (Exchange); 1756 \draw[<->] (Client) to node[sloped,below,align=center] 1757 {{\sf refresh} \orange{ + }\\ \orange{$\DeriveCompare$}} (Exchange); 1758 \draw[<->] (Client) to node[sloped, below] 1759 {{\sf purchase} \blue{+ $(\attest_\minage, \commitment)$}} (Merchant); 1760 \draw[<->] (Merchant) to node[sloped, above] 1761 {{\sf deposit} \orange{+ $H(\commitment)$}} (Exchange); 1762 1763 \draw[->] (Guardian) to [out=70,in=150, loop] node[above] 1764 {$\Commit(\age)$} (Guardian); 1765 \draw[->] (Guardian) to node[below,sloped] 1766 {($\commitment$, $\pruf_\age$)} (Client); 1767 \draw[->,blue] (Client) to [out=-50,in=-130, loop] node[below] 1768 {\blue{$\Attest(\minage, \commitment, \pruf_{\age})$}} (Client); 1769 \draw[->,blue] (Merchant) to [out=-50,in=-130, loop] node[below] 1770 {\blue{$\Verify(\minage, \commitment, \attest_{\minage})$}} (Merchant); 1771 \end{tikzpicture} 1772 \end{frame} 1773 1774 \begin{frame}{Instantiation with Edx25519} 1775 Paper also formally defines another signature scheme: Edx25519.\\[1em] 1776 1777 \begin{itemize} 1778 \item Scheme already in use in GNUnet, 1779 \item based on EdDSA (Bernstein et al.), 1780 \item generates compatible signatures and 1781 \item allows for key derivation from both, private and public keys, independently. 1782 \end{itemize}~\\[1em] 1783 1784 Current implementation of age restriction in GNU Taler uses Edx25519. 1785 \end{frame} 1786 1787 1788 \begin{frame}{Discussion} 1789 \begin{itemize} 1790 \item Our solution can in principle be used with any token-based payment scheme 1791 \item GNU Taler best aligned with our design goals (security, privacy and efficiency) 1792 \item Subsidiarity requires bank accounts being owned by adults 1793 \begin{itemize} 1794 \item Scheme can be adapted to case where minors have bank accounts 1795 \begin{itemize} 1796 \item Assumption: banks provide minimum age 1797 information during bank 1798 transactions. 1799 \item Child and Exchange execute a variant of 1800 the cut\&choose protocol. 1801 \end{itemize} 1802 \end{itemize} 1803 \item Our scheme offers an alternative to identity management systems (IMS) 1804 \end{itemize} 1805 \end{frame} 1806 \begin{frame}{Related Work} 1807 \begin{itemize} 1808 \item Current privacy-perserving systems all based on attribute-based credentials (Koning et al., Schanzenbach et al., Camenisch et al., Au et al.) 1809 \item Attribute-based approach lacks support: 1810 \begin{itemize} 1811 \item Complex for consumers and retailers 1812 \item Requires trusted third authority 1813 \end{itemize} 1814 \vfill 1815 \item Other approaches tie age-restriction to ability to pay ("debit cards for kids") 1816 \begin{itemize} 1817 \item Advantage: mandatory to payment process 1818 \item Not privacy friendly 1819 \end{itemize} 1820 \end{itemize} 1821 \end{frame} 1822 1823 \begin{frame}{Conclusion} 1824 Age restriction is a technical, ethical and legal challenge. 1825 1826 Existing solutions are 1827 \begin{itemize} 1828 \item without strong protection of privacy or 1829 \item based on identity management systems (IMS) 1830 \end{itemize} 1831 \vfill 1832 1833 Our scheme offers a solution that is 1834 \begin{itemize} 1835 \item based on subsidiarity 1836 \item privacy preserving 1837 \item efficient 1838 \item an alternative to IMS 1839 \end{itemize} 1840 \end{frame} 1841 1842 1843 \section{Blockchain integration: Project Depolymerization} 1844 1845 \begin{frame} 1846 \vfill 1847 \begin{center} 1848 {\bf Blockchain integration: Project Depolymerization} 1849 \end{center} 1850 \vfill 1851 \end{frame} 1852 1853 1854 \begin{frame}{Blockchain based cryptocurrencies} 1855 \begin{tikzpicture}[remember picture,overlay] 1856 \node (N1)[above right=5mm and 25mm of current page.center] {\includegraphics[width=34mm]{media/news1.png}}; 1857 \node (N0)[below=-3mm of N1] {\includegraphics[width=34mm]{media/news0.png}}; 1858 \node (N2)[below left=-26mm and -2.5mm of N1] {\includegraphics[width=34mm]{media/news2.png}}; 1859 \end{tikzpicture} 1860 \begin{block}{Biggest cryptocurrencies} 1861 \begin{itemize} 1862 \item \textbf{BTC} Bitcoin 1863 \item \textbf{ETH} Ethereum 1864 \end{itemize} 1865 \end{block} 1866 \begin{block}{Common blockchain limitations} 1867 \begin{itemize} 1868 \item \textbf{Delay} block and confirmation delay 1869 \item \textbf{Cost} transaction fees 1870 \item \textbf{Scalability} limited amount of transaction per second 1871 \item \textbf{Ecological impact} computation redundancy 1872 \item \textbf{Privacy} 1873 \item \textbf{Regulatory risk} 1874 \end{itemize} 1875 \end{block} 1876 \end{frame} 1877 1878 \begin{frame}{Taler}{Architecture} 1879 \begin{columns} 1880 \column{0.5\paperwidth} 1881 \begin{tikzpicture}[ 1882 rect/.style={circle, draw=black}, 1883 sym/.style={-stealth, shorten >= 2pt, shorten <= 2pt} 1884 ] 1885 % Taler payment system 1886 \node[rect](1) {Exchange}; 1887 \node[rect,below left=1.5cm and 0.7cm of 1](2) {Customer}; 1888 \node[rect,below right=1.5cm and 0.7cm of 1](3) {Merchant}; 1889 1890 \draw[sym] (1) -- node [midway, above, sloped] {\tiny Withdraw coins} (2); 1891 \draw[sym] (2) -- node [midway, above, sloped] {\tiny Spend coins} (3); 1892 \draw[sym] (3) -- node [midway, above, sloped] {\tiny Deposit coins} (1); 1893 1894 % Settlement layer 1895 \node[left=2cm of 1](E1){}; 1896 \node[right=2cm of 1](E2){}; 1897 \draw[sym] (E1) -- node [midway, above] {\tiny Deposit money} (1); 1898 \draw[sym] (1) -- node [midway, above] {\tiny Withdraw money} (E2); 1899 1900 % Auditor 1901 \node[above= of 1](A){Auditor}; 1902 \draw[sym] (A) -- node [midway, right] {\tiny Verify} (1); 1903 1904 % Separator 1905 \node[below=1mm of E1] (S1S) {}; 1906 \node[below=1mm of E2] (S1E) {}; 1907 \node[above=6mm of E1] (S2S) {}; 1908 \node[above=6mm of E2] (S2E) {}; 1909 1910 \draw[dotted] (S1S) -- (S1E); 1911 \draw[dotted] (S2S) -- (S2E); 1912 1913 \node[below right=-2mm and -1.5mm of S2S] {\tiny{\emph{Settlement Layer}}}; 1914 \node[below right=-2mm and -1.5mm of S1S] {\tiny{\emph{Taler payment system}}}; 1915 \end{tikzpicture} 1916 \column{0.47\paperwidth} 1917 \begin{block}{Settlement layer} 1918 \begin{itemize} 1919 \item For Depolymerization: Blockchain! 1920 \end{itemize} 1921 \end{block} 1922 \begin{block}{Taler payment system} 1923 \begin{itemize} 1924 \item Realtime transactions, 1 RTT 1925 \item Scalable microtransactions 1926 \item Blind signatures (privacy) 1927 \end{itemize} 1928 \end{block} 1929 1930 \end{columns} 1931 \end{frame} 1932 1933 \begin{frame}{Taler}{Blockchain settlement layer} 1934 \begin{center} 1935 \begin{tikzpicture}[ 1936 rect/.style={rectangle, draw=black, minimum width=30mm}, 1937 sym/.style={stealth-stealth, shorten >= 2pt, shorten <= 2pt}, 1938 block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm}, 1939 ] 1940 1941 %% Architecture 1942 \node(Tt){Taler}; 1943 \node[rect,below=0cm of Tt](Tc){Exchange}; 1944 \node[rect,fit={(Tt) (Tc)}](T){}; 1945 1946 \node[rect,below=7mm of Tc](D) {\textbf{Depolymerization}}; 1947 1948 \node[rect,below=7mm of D](Bc){Node}; 1949 \node[below=0cm of Bc](Bt){Blockchain}; 1950 \node[rect,fit={(Bt) (Bc)}](B){}; 1951 1952 \draw[sym] (T) -- (D); 1953 \draw[sym] (D) -- (B); 1954 1955 %% Blockchain 1956 \node[block,right=8mm of B] (1){}; 1957 \node[block,right=4mm of 1] (2){}; 1958 \node[block,right=4mm of 2] (3){}; 1959 \node[block,right=4mm of 3] (4){}; 1960 \node[block,right=4mm of 4] (5){}; 1961 \node[block,right=4mm of 5] (6){}; 1962 \draw[-stealth] (1) -- (2); 1963 \draw[-stealth] (2) -- (3); 1964 \draw[-stealth] (3) -- (4); 1965 \draw[-stealth] (4) -- (5); 1966 \draw[-stealth] (5) -- (6); 1967 1968 \node[left=4mm of 1] (S){}; 1969 \node[right=4mm of 6] (E){}; 1970 \draw[-stealth] (S) -- (1); 1971 \draw[-stealth] (6) -- (E); 1972 1973 %% Taler 1974 \node[block, below right=-7.5mm and 20.5mm of T] (off){Off-chain transactions}; 1975 \node[above=-0.5mm of off] {\includegraphics[height=7mm]{taler-logo-2021-inkscape.pdf}}; 1976 1977 %% Depolymerization 1978 \node[right=11mm of D] {\small{Credit}}; 1979 \node[right=50mm of D] {\small{Debit}}; 1980 \draw[dashed,-stealth] (1.north) |- (off.west); 1981 \draw[dashed,-stealth] (off.east) -| (6.north); 1982 \end{tikzpicture} 1983 \end{center} 1984 \end{frame} 1985 1986 \begin{frame}{Challenges} 1987 \begin{block}{Taler Metadata} 1988 \begin{itemize} 1989 \item Metadata are required to link a wallet to credits and 1990 allow merchant to link deposits to debits 1991 \item Putting metadata in blockchain transactions can be tricky 1992 \end{itemize} 1993 \end{block} 1994 \begin{block}{Blockchain based cryptocurrencies} 1995 \begin{itemize} 1996 \item Blockchain transactions lack finality (fork) 1997 \item Transactions can be stuck for a long time (mempool) 1998 \end{itemize} 1999 \end{block} 2000 \end{frame} 2001 2002 \begin{frame}{Blockchain challenges}{Chain reorganization} 2003 \begin{center} 2004 \begin{tikzpicture}[ 2005 block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm}, 2006 ar/.style={-stealth} 2007 ] 2008 % Common 2009 \node[block](1){}; 2010 \node[block,right=5mm of 1](2){$D_0$}; 2011 \node[block,right=5mm of 2](3){}; 2012 \draw[ar] (1) -- (2); 2013 \draw[ar] (2) -- (3); 2014 2015 % Current 2016 \node [block,right=5mm of 3](4){}; 2017 \node[block,right=5mm of 4](5){}; 2018 \node[block,right=5mm of 5](6){$D_1$}; 2019 \draw[ar] (3) -- (4); 2020 \draw[ar] (4) -- (5); 2021 \draw[ar] (5) -- (6); 2022 2023 % Fork 2024 \node [block,above=7mm of 4](4p){}; 2025 \node[block,right=5mm of 4p](5p){$D_2$}; 2026 \node[block,right=5mm of 5p](6p){}; 2027 \node[block,right=5mm of 6p](7p){}; 2028 \draw[ar] (3.east) -- (4p.west); 2029 \draw[ar] (4p) -- (5p); 2030 \draw[ar] (5p) -- (6p); 2031 \draw[ar] (6p) -- (7p); 2032 2033 % Indication 2034 \node [right=5mm of 7p]{\emph{fork}}; 2035 \node [right=17mm of 6]{\emph{active}}; 2036 \end{tikzpicture} 2037 \end{center} 2038 A fork is when concurrent blockchain states coexist. Nodes will follow 2039 the longest chain, replacing recent blocks if necessary during a 2040 blockchain reorganization. If a deposit transaction disappears from the 2041 blockchain, an irrevocable withdraw transactions would no longer be backed 2042 by credit. 2043 \end{frame} 2044 2045 \begin{frame}{Blockchain challenges}{Stuck transactions} 2046 We want confirmed debits within a limited time frame. 2047 \begin{figure} 2048 \centering 2049 \only<1> { 2050 \begin{tikzpicture}[ 2051 dot/.style={circle,fill,inner sep=1pt,} 2052 ] 2053 \node (I) {\includegraphics[width=\textwidth]{media/fee.png}}; 2054 \node [below left=-2.5mm and -1.5cm of I] (Tx) {\small Tx}; 2055 \node [dot,above=8.4mm of Tx](D) {}; 2056 \draw [dotted,thick] (Tx) -- (D); 2057 \node [left=-4.5cm of Tx] (C) {\small conf}; 2058 \node [dot,above=8.4mm of C](D1) {}; 2059 \draw [dotted,thick] (C) -- (D1); 2060 \end{tikzpicture} 2061 } 2062 \only<2> { 2063 \includegraphics[width=\textwidth]{media/fee_var.png} 2064 \caption{Bitcoin average transaction fee over 6 months {\tiny (ychart)}} 2065 } 2066 \end{figure} 2067 \only<1>{When we trigger a debit with a fee too small, it may not be 2068 confirmed in a timely fashion.} 2069 \only<2>{However, transaction fees are unpredictable.} 2070 \end{frame} 2071 2072 2073 \begin{frame}{Depolymerization}{Architecture} 2074 \begin{center} 2075 \begin{tikzpicture}[ 2076 rect/.style={rectangle, draw=black, minimum height=6mm, minimum width=28mm}, 2077 sym/.style={stealth-stealth, shorten >= 2pt, shorten <= 2pt} 2078 ] 2079 \node[rect](1) {Taler Exchange}; 2080 \node[rect,below=of 1](2) {Wire Gateway}; 2081 \node[rect,right=of 2](3) {PostgreSQL}; 2082 \node[rect,right=of 3](4) {DLT Adapter}; 2083 \node[rect,above=of 4](5) {DLT Full Node}; 2084 2085 \draw[sym] (1) -- node [midway,right] {\tiny HTTP} (2); 2086 \draw[sym] (2) -- node [midway,above] {\tiny SQL} (3); 2087 \draw[sym] (3) -- node [midway,above] {\tiny SQL} (4); 2088 \draw[sym] (4) -- node [midway,left ] {\tiny RPC} (5); 2089 2090 2091 \node[above= 2mm of 1]{\small{\emph{Wire Gateway API}}}; 2092 \node[above= 2mm of 5]{\small{\emph{DLT specific}}}; 2093 \node[above=22mm of 3](T) {}; 2094 \draw[dotted] (3) -- (T); 2095 \end{tikzpicture} 2096 \end{center} 2097 \begin{itemize} 2098 \item Common database to store transactions state and communicate 2099 with notifications 2100 \item Wire Gateway for Taler API compatibility 2101 \item DLT specific adapter 2102 \end{itemize} 2103 \end{frame} 2104 2105 \begin{frame}{Storing metadata}{Bitcoin} 2106 \begin{block}{Bitcoin - Credit} 2107 \begin{itemize} 2108 \item Transactions from code 2109 \item Only 32B + URI 2110 \item \textbf{OP\_RETURN} 2111 \end{itemize} 2112 \end{block} 2113 \begin{block}{Bitcoin - Debit} 2114 \begin{itemize} 2115 \item Transactions from common wallet software 2116 \item Only 32B 2117 \item \textbf{Fake Segwit Addresses} 2118 \end{itemize} 2119 \end{block} 2120 \end{frame} 2121 \begin{frame}{Storing metadata}{Ethereum} 2122 \begin{block}{Smart contract ?} 2123 \begin{itemize} 2124 \item Logs in smart contract is the recommend way {\tiny (ethereum.org)} 2125 \item Expensive (additional storage and execution fees) 2126 \item Avoidable attack surface (error prone) 2127 \end{itemize} 2128 \end{block} 2129 \begin{block}{Custom input format} 2130 Use input data in transactions, usually used to call smart contract, to 2131 store our metadata. 2132 \end{block} 2133 \end{frame} 2134 2135 \begin{frame}{Handling blockchain reorganization} 2136 \begin{center} 2137 \begin{tikzpicture}[ 2138 block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm}, 2139 conf/.style={draw=black!60!green,fill=black!60!green!10}, 2140 nconf/.style={dotted}, 2141 err/.style={draw=black!60!red,fill=black!60!red!10}, 2142 ar/.style={-stealth} 2143 ] 2144 % Common 2145 \node[block,conf](1){}; 2146 \node[block,conf,right=5mm of 1](2){$D_0$}; 2147 \node[block,conf,right=5mm of 2](3){}; 2148 \draw[ar] (1) -- (2); 2149 \draw[ar] (2) -- (3); 2150 2151 % Current 2152 \only<1>{ 2153 \node [block,nconf,right=5mm of 3](4){}; 2154 } 2155 \only<2->{ 2156 \node [block,conf,right=5mm of 3](4){\only<3>{$D_3$}}; 2157 } 2158 \node[block,nconf,right=5mm of 4](5){}; 2159 \node[block,nconf,right=5mm of 5](6){$D_1$}; 2160 \draw[ar] (3) -- (4); 2161 \draw[ar] (4) -- (5); 2162 \draw[ar] (5) -- (6); 2163 2164 % Fork 2165 \only<-2>{ 2166 \node [block,nconf,above=7mm of 4](4p){}; 2167 } 2168 \only<3>{ 2169 \node [block,dashed,err,above=7mm of 4](4p){$D_3'$}; 2170 } 2171 \node[block,nconf,right=5mm of 4p](5p){$D_2$}; 2172 \node[block,nconf,right=5mm of 5p](6p){}; 2173 \node[block,nconf,right=5mm of 6p](7p){}; 2174 \draw[ar] (3.east) -- (4p.west); 2175 \draw[ar] (4p) -- (5p); 2176 \draw[ar] (5p) -- (6p); 2177 \draw[ar] (6p) -- (7p); 2178 2179 % Indication 2180 \node [right=5mm of 7p]{\emph{fork}}; 2181 \node [right=17mm of 6]{\emph{active}}; 2182 \end{tikzpicture} 2183 \end{center} 2184 \only<1>{As small reorganizations are common, Satoshi already recommended to 2185 apply a confirmation delay to handle most disturbances and attacks.} 2186 \only<2>{If a reorganization longer than the confirmation delay happens, 2187 but it did not remove credits, Depolymerizer is safe and automatically 2188 resumes.} 2189 \only<3>{If a fork removed a confirmed debit, an attacker may create a 2190 conflicting transaction. Depolymerizer suspends operation until lost 2191 credits reappear.} 2192 \end{frame} 2193 2194 2195 \begin{frame}{Related work} 2196 \begin{block}{Centralization - Coinbase off-chain sending} 2197 \begin{itemize} 2198 \item [$+$] Fast and cheap: off chain transaction 2199 \item [$-$] Trust in Coinbase: privacy, security \& transparency 2200 \end{itemize} 2201 \end{block} 2202 \begin{block}{Layering - Lightning Network} 2203 \begin{itemize} 2204 \item [$+$] Fast and cheap: off-chain transactions 2205 \item [$-$] Requires setting up bidirectional payment channels 2206 \item [$-$] Fraud attempts are mitigated via a complex penalty system 2207 \end{itemize} 2208 \end{block} 2209 \end{frame} 2210 2211 \begin{frame}{Conclusion} 2212 Blockchains can be used as a settlement layer for GNU Taler 2213 with Depolymerizer. 2214 2215 \begin{itemize} 2216 \item [$-$] Trust exchange operator or auditors 2217 \item [$+$] Fast and cheap 2218 \item [$+$] Realtime, ms latency 2219 \item [$+$] Linear scalability 2220 \item [$+$] Ecological 2221 \item [$+$] Privacy when it can, transparency when it must (avoid tax evasion and money laundering) 2222 \end{itemize} 2223 Future work: 2224 \begin{itemize} 2225 \item Universal auditability, using sharded transactions history 2226 \item Smarter analysis, update confirmation delay based on currency network behavior 2227 \item Multisig by multiple operator for transactions validation 2228 \end{itemize} 2229 \end{frame} 2230 2231 2232 \section{Future Work \& Conclusion} 2233 2234 \begin{frame} 2235 \vfill 2236 \begin{center} 2237 {\bf Future Work \& Conclusion} 2238 \end{center} 2239 \vfill 2240 \end{frame} 2241 2242 2243 \begin{frame}{How to support?} 2244 \begin{description} 2245 \item[Join:] {\small \url{https://lists.gnu.org/mailman/listinfo/taler}} 2246 \item[Develop:] \url{https://bugs.taler.net/}, \url{https://git.taler.net/} 2247 \item[Apply:] \url{https://nlnet.nl/propose}, \url{https://nlnet.nl/taler} 2248 \item[Translate:] \url{https://weblate.taler.net/}, \url{translation-volunteer@taler.net} 2249 \item[Integrate:] \url{https://docs.taler.net/} 2250 \item[Donate:] \url{https://gnunet.org/ev} 2251 \item[Partner:] \url{https://taler-systems.com/} 2252 \end{description} 2253 \end{frame} 2254 2255 2256 \begin{frame} 2257 \frametitle{Do you have any questions?} 2258 \vfill 2259 References: 2260 {\tiny 2261 \begin{enumerate} 2262 \item{Özgür Kesim, Christian Grothoff, Florian Dold and Martin Schanzenbach. 2263 {\em Zero-Knowledge Age Restriction for GNU Taler}. 2264 {\bf 27th European Symposium on Research in Computer Security (ESORICS), 2022}.} 2265 \item{David Chaum, Christian Grothoff and Thomas Moser. 2266 {\em How to issue a central bank digital currency}. 2267 {\bf SNB Working Papers, 2021}.} 2268 \item{David Chaum, Christian Grothoff and Thomas Moser. 2269 {\em How to issue a central bank digital currency}. 2270 {\bf SNB Working Papers, 2021}.} 2271 \item{Christian Grothoff, Bart Polot and Carlo von Loesch. 2272 {\em The Internet is broken: Idealistic Ideas for Building a GNU Network}. 2273 {\bf W3C/IAB Workshop on Strengthening the Internet Against Pervasive Monitoring (STRINT)}, 2014.} 2274 \item{Jeffrey Burdges, Florian Dold, Christian Grothoff and Marcello Stanisci. 2275 {\em Enabling Secure Web Payments with GNU Taler}. 2276 {\bf SPACE 2016}.} 2277 \item{Florian Dold, Sree Harsha Totakura, Benedikt M\"uller, Jeffrey Burdges and Christian Grothoff. 2278 {\em Taler: Taxable Anonymous Libre Electronic Reserves}. 2279 Available upon request. 2016.} 2280 \item{Eli Ben-Sasson, Alessandro Chiesa, Christina Garman, Matthew Green, Ian Miers, Eran Tromer and Madars Virza. 2281 {\em Zerocash: Decentralized Anonymous Payments from Bitcoin}. 2282 {\bf IEEE Symposium on Security \& Privacy, 2016}.} 2283 \item{David Chaum, Amos Fiat and Moni Naor. 2284 {\em Untraceable electronic cash}. 2285 {\bf Proceedings on Advances in Cryptology, 1990}.} 2286 \item{Phillip Rogaway. 2287 {\em The Moral Character of Cryptographic Work}. 2288 {\bf Asiacrypt}, 2015.} \label{bib:rogaway} 2289 \end{enumerate} 2290 } 2291 \end{frame} 2292 2293 2294 \end{document} 2295 2296 2297 2298 2299 \begin{frame}{Taler {\tt /withdraw/sign}} 2300 % Customer withdrawing coins with blind signatures 2301 % \bigskip 2302 \begin{figure}[th] 2303 \begin{minipage}[b]{0.45\linewidth} 2304 \begin{center} 2305 \begin{tikzpicture}[scale = 0.4, 2306 transform shape, 2307 msglabel/.style = { text = Black, yshift = .3cm, 2308 sloped, midway }, 2309 okmsg/.style = { ->, color = MidnightBlue, thick, 2310 >=stealth }, 2311 rstmsg/.style = { ->, color = BrickRed, thick, 2312 >=stealth } 2313 ] 2314 \node[draw = MidnightBlue, 2315 fill = CornflowerBlue, 2316 minimum width = .3cm, 2317 minimum height = 10cm 2318 ] (h1) at (-4, 0) {}; 2319 \node[draw = MidnightBlue, 2320 fill = CornflowerBlue, 2321 minimum width = .3cm, 2322 minimum height = 10cm 2323 ] (h2) at (4, 0) {}; 2324 \node[above = 0cm of h1] {Wallet}; 2325 \node[above = 0cm of h2] {Exchange}; 2326 2327 \path[->, color = MidnightBlue, very thick, >=stealth] 2328 (-5, 4.5) edge 2329 node[rotate=90, text = Black, yshift = .3cm] {Time} 2330 (-5, -4.5); 2331 \path[okmsg, dashed] 2332 ($(h1.east)+(0, 4.0)+(0, -1.0)$) edge 2333 node[msglabel] {SEPA(RK,A)} 2334 ($(h2.west)+(0, 3.5)+(0, -1.0)$); 2335 \path[okmsg] 2336 ($(h1.east)+(0, -1.0)$) edge 2337 node[msglabel] {POST {\tt /withdraw/sign} $S_{RK}(DK, B_b(C))$} 2338 ($(h2.west)+(0, -1.5)$); 2339 \path[okmsg] 2340 ($(h2.west)+(0, -2.0)$) edge 2341 node[msglabel] {200 OK: $S_{DK}(B_b(C))$)} 2342 ($(h1.east)+(0, -2.5)$); 2343 \path[rstmsg] 2344 ($(h2.west)+(0, -3.5)$) edge 2345 node[msglabel] {402 PAYMENT REQUIRED: $S_{RK}(DK, B_b(C))$)} 2346 ($(h1.east)+(0, -4)$); 2347 \node at (5.3, 0) {}; 2348 \end{tikzpicture} 2349 \end{center} 2350 Result: $\langle c, S_{DK}(C) \rangle$. 2351 \end{minipage} 2352 \hspace{0.5cm} 2353 \begin{minipage}[b]{0.45\linewidth} 2354 \tiny 2355 \begin{description} 2356 \item[$A$] Some amount, $A \ge A_{DK}$ 2357 \item[$RK$] Reserve key 2358 \item[$DK$] Denomination key 2359 \item[$b$] Blinding factor 2360 \item[$B_b()$] RSA-FDH blinding % DK supressed 2361 \item[$C$] Coin public key $C := cG$ 2362 \item[$S_{RK}()$] EdDSA signature 2363 \item[$S_{DK}()$] RSA-FDH signature 2364 \end{description} 2365 \end{minipage} 2366 \end{figure} 2367 \end{frame} 2368 2369 2370 \begin{frame}[t]{Taler {\tt /deposit}} 2371 Merchant and exchange see only the public coin $\langle C, S_{DK}(C) \rangle$. 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] {Merchant}; 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[->, color = MidnightBlue, thick, >=stealth] 2403 ($(h1.east)+(0,3)$) edge 2404 node[text = Black, yshift = .3cm, sloped] {POST {\tt /deposit} $S_{DK}(C), S_{c}(D)$} 2405 ($(h2.west)+(0,2)$); 2406 \path[->, color = MidnightBlue, thick, >=stealth] 2407 ($(h2.west)+(0,0.5)$) edge 2408 node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(S_{c}(D))$} 2409 ($(h1.east)+(0,-0.5)$); 2410 \path[rstmsg] 2411 ($(h2.west)+(0, -2.5)$) edge 2412 node[msglabel] {409 CONFLICT: $S_{c}(D')$} 2413 ($(h1.east)+(0, -3.5)$); 2414 \node at (5.3, 0) {}; 2415 \end{tikzpicture} 2416 \end{center} 2417 \end{minipage} 2418 \hspace{0.5cm} 2419 \begin{minipage}[b]{0.45\linewidth} 2420 \tiny 2421 \begin{description} 2422 \item[$DK$] Denomination key 2423 \item[$S_{DK}()$] RSA-FDH signature using $DK$ 2424 \item[$c$] Private coin key, $C := cG$. 2425 \item[$S_{C}()$] EdDSA signature using $c$ 2426 \item[$D$] Deposit details 2427 \item[$SK$] Exchange's signing key 2428 \item[$S_{SK}()$] EdDSA signature using $SK$ 2429 \item[$D'$] Conficting deposit details $D' \not= D$ 2430 \end{description} 2431 \end{minipage} 2432 \end{figure} 2433 \end{frame} 2434 2435 2436 \begin{frame}{Taler {\tt /refresh/melt}} 2437 \begin{figure}[th] 2438 \begin{minipage}[b]{0.45\linewidth} 2439 \begin{center} 2440 \begin{tikzpicture}[scale = 0.4, 2441 transform shape, 2442 msglabel/.style = { text = Black, yshift = .3cm, 2443 sloped, midway }, 2444 okmsg/.style = { ->, color = MidnightBlue, thick, 2445 >=stealth }, 2446 rstmsg/.style = { ->, color = BrickRed, thick, 2447 >=stealth } 2448 ] 2449 \node[draw = MidnightBlue, 2450 fill = CornflowerBlue, 2451 minimum width = .3cm, 2452 minimum height = 10cm 2453 ] (h1) at (-4, 0) {}; 2454 \node[draw = MidnightBlue, 2455 fill = CornflowerBlue, 2456 minimum width = .3cm, 2457 minimum height = 10cm 2458 ] (h2) at (4, 0) {}; 2459 \node[above = 0cm of h1] {Customer}; 2460 \node[above = 0cm of h2] {Exchange}; 2461 2462 \path[->, color = MidnightBlue, very thick, >=stealth] 2463 (-5, 4.5) edge 2464 node[rotate=90, text = Black, yshift = .3cm] {Time} 2465 (-5, -4.5); 2466 \path[->, color = MidnightBlue, thick, >=stealth] 2467 ($(h1.east)+(0,3)$) edge 2468 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/melt} $S_{DK}(C), S_c({\cal DK}, {\cal T},{\cal B})$} 2469 ($(h2.west)+(0,2)$); 2470 \path[->, color = MidnightBlue, thick, >=stealth] 2471 ($(h2.west)+(0,0.5)$) edge 2472 node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(H({\cal T}, {\cal B}),\gamma)$} 2473 ($(h1.east)+(0,-0.5)$); 2474 \path[rstmsg] 2475 ($(h2.west)+(0, -2.5)$) edge 2476 node[msglabel] {409 CONFLICT: $S_{C}(X), \ldots$} 2477 ($(h1.east)+(0, -3.5)$); 2478 \node at (5.3, 0) {}; 2479 \end{tikzpicture} 2480 \end{center} 2481 \end{minipage} 2482 \hspace{0.5cm} 2483 \begin{minipage}[b]{0.45\linewidth} 2484 \tiny 2485 \begin{description} 2486 \item[$\kappa$] System-wide security parameter, usually 3. 2487 \\ \smallskip 2488 \item[$\cal DK$] $:= [DK^{(i)}]_i$ \\ List of denomination keys \\ 2489 $D + \sum_i A_{DK^{(i)}} < A_{DK}$ 2490 \item[$t_j$] Random scalar for $j<\kappa$ 2491 \item[${\cal T}$] $:= [T_j]_\kappa$ where $T_j = t_j G$ 2492 \item[$k_j$] $:= c T_j = t_j C$ is an ECDHE 2493 \item[$b_j^{(i)}$] $:= KDF_b(k_j,i)$ % blinding factor 2494 \item[$c_j^{(i)}$] $:= KDF_c(k_j,i)$ % coin secret keys 2495 \item[$C_j^{(i)}$] $: = c_j^{(i)} G$ % new coin publics % keys 2496 \item[${\cal B}$] $:= [H( \beta_j )]_\kappa$ where \\ 2497 $\beta_j := \left[ B_{b_j^{(i)}}(C_j^{(i)}) \right]_i$ 2498 \\ \smallskip 2499 \item[$\gamma$] Random value in $[0,\kappa)$ 2500 % \\ \smallskip 2501 % \item[$X$] Deposit or refresh 2502 \end{description} 2503 \end{minipage} 2504 \end{figure} 2505 \end{frame} 2506 2507 2508 \begin{frame}{Taler {\tt /refresh/reveal}} 2509 \begin{figure}[th] 2510 \begin{minipage}[b]{0.45\linewidth} 2511 \begin{center} 2512 \begin{tikzpicture}[scale = 0.4, 2513 transform shape, 2514 msglabel/.style = { text = Black, yshift = .3cm, 2515 sloped, midway }, 2516 okmsg/.style = { ->, color = MidnightBlue, thick, 2517 >=stealth }, 2518 rstmsg/.style = { ->, color = BrickRed, thick, 2519 >=stealth } 2520 ] 2521 \node[draw = MidnightBlue, 2522 fill = CornflowerBlue, 2523 minimum width = .3cm, 2524 minimum height = 10cm 2525 ] (h1) at (-4, 0) {}; 2526 \node[draw = MidnightBlue, 2527 fill = CornflowerBlue, 2528 minimum width = .3cm, 2529 minimum height = 10cm 2530 ] (h2) at (4, 0) {}; 2531 \node[above = 0cm of h1] {Customer}; 2532 \node[above = 0cm of h2] {Exchange}; 2533 2534 \path[->, color = MidnightBlue, very thick, >=stealth] 2535 (-5, 4.5) edge 2536 node[rotate=90, text = Black, yshift = .3cm] {Time} 2537 (-5, -4.5); 2538 \path[->, color = MidnightBlue, thick, >=stealth] 2539 ($(h1.east)+(0,3)$) edge 2540 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/reveal} $H({\cal T}, {\cal B}), {\tilde{\cal T}}, \beta_\gamma$} 2541 ($(h2.west)+(0,2)$); 2542 \path[->, color = MidnightBlue, thick, >=stealth] 2543 ($(h2.west)+(0,0.5)$) edge 2544 node[text = Black, yshift = .3cm, sloped] {200 OK: $\cal S$} 2545 ($(h1.east)+(0,-0.5)$); 2546 \path[rstmsg] 2547 ($(h2.west)+(0, -2.5)$) edge 2548 node[msglabel] {400 BAD REQUEST: $Z$} 2549 ($(h1.east)+(0, -3.5)$); 2550 \node at (5.3, 0) {}; 2551 \end{tikzpicture} 2552 \end{center} 2553 \end{minipage} 2554 \hspace{0.5cm} 2555 \begin{minipage}[b]{0.45\linewidth} 2556 \tiny 2557 \begin{description} 2558 \item[$\cal DK$] $:= [DK^{(i)}]_i$ 2559 \item[$t_j$] .. \\ \smallskip 2560 2561 \item[$\tilde{\cal T}$] $:= [t_j | j \in \kappa, j \neq \gamma]$ \\ \smallskip 2562 2563 \item[$k_\gamma$] $:= c T_\gamma = t_\gamma C$ 2564 \item[$b_\gamma^{(i)}$] $:= KDF_b(k_\gamma,i)$ 2565 \item[$c_\gamma^{(i)}$] $:= KDF_c(k_\gamma,i)$ 2566 \item[$C_\gamma^{(i)}$] $: = c_\gamma^{(i)} G$ 2567 2568 \item[$B_\gamma^{(i)}$] $:= B_{b_\gamma^{(i)}}(C_\gamma^{(i)})$ 2569 \item[$\beta_\gamma$] $:= \big[ B_\gamma^{(i)} \big]_i$ 2570 \item[$\cal S$] $:= \left[ S_{DK^{(i)}}( B_\gamma^{(i)} ) \right]_i$ \\ \smallskip 2571 2572 \item[$Z$] Cut-and-choose missmatch information 2573 \end{description} 2574 \end{minipage} 2575 \end{figure} 2576 \end{frame} 2577 2578 2579 \begin{frame}{Taler {\tt /refresh/link}} 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] {Exchagne}; 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/link} $C$} 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: $T_\gamma$} 2616 ($(h1.east)+(0,-0.5)$); 2617 \path[rstmsg] 2618 ($(h2.west)+(0, -2.5)$) edge 2619 node[msglabel] {404 NOT FOUND} 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[$C$] Old coind public key \\ \smallskip 2630 \item[$T_\gamma$] Linkage data $\cal L$ at $\gamma$ 2631 \end{description} 2632 \end{minipage} 2633 \end{figure} 2634 \end{frame} 2635 2636 2637 \begin{frame}{Operational security} 2638 \begin{center} 2639 \resizebox{\textwidth}{!}{ 2640 \begin{tikzpicture}[ 2641 font=\sffamily, 2642 every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm}, 2643 source/.style={draw,thick,rounded corners,fill=green!20,inner sep=.3cm}, 2644 process/.style={draw,thick,circle,fill=blue!20}, 2645 sink/.style={source,fill=green!20}, 2646 datastore/.style={draw,very thick,shape=datastore,inner sep=.3cm}, 2647 dots/.style={gray,scale=2}, 2648 to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize}, 2649 every node/.style={align=center}] 2650 2651 % Position the nodes using a matrix layout 2652 \matrix{ 2653 \node[source] (wallet) {Wallet}; 2654 \& \node[process] (browser) {Browser}; 2655 \& \node[process] (shop) {Web shop}; 2656 \& \node[sink] (backend) {Taler backend}; \\ 2657 }; 2658 2659 % Draw the arrows between the nodes and label them. 2660 \draw[to] (browser) to[bend right=50] node[midway,above] {(4) signed contract} 2661 node[midway,below] {(signal)} (wallet); 2662 \draw[to] (wallet) to[bend right=50] node[midway,above] {(signal)} 2663 node[midway,below] {(5) signed coins} (browser); 2664 \draw[<->] (browser) -- node[midway,above] {(3,6) custom} 2665 node[midway,below] {(HTTPS)} (shop); 2666 \draw[to] (shop) to[bend right=50] node[midway,above] {(HTTPS)} 2667 node[midway,below] {(1) proposed contract / (7) signed coins} (backend); 2668 \draw[to] (backend) to[bend right=50] node[midway,above] {(2) signed contract / (8) confirmation} 2669 node[midway,below] {(HTTPS)} (shop); 2670 \end{tikzpicture} 2671 } 2672 \end{center} 2673 \end{frame} 2674 2675 2676 \begin{frame}{Use Cases: Refugee Camps} 2677 Today: 2678 \begin{itemize} 2679 \item Non-bankable 2680 \item Direct distribution of goods to population 2681 \item Limited economic activity in camps 2682 \item High level of economic dependence 2683 \end{itemize}\vfill\pause 2684 With GNU Taler: 2685 \begin{itemize} 2686 \item Local currency issued as basic income backed by aid 2687 \item Taxation possible based on economic status 2688 \item Local governance enabled by local taxes 2689 \item Increased economic independence and political participation 2690 \end{itemize} 2691 \end{frame} 2692 2693 2694 \begin{frame}{Use Case: Anti-Spam} 2695 \framesubtitle{Background: \url{https://pep.security/}} 2696 Today, p$\equiv$p provides authenticated encryption for e-mail: 2697 \begin{itemize} 2698 \item Free software 2699 \item Easy to use opportunistic encryption 2700 \item Available for Outlook, Android, Enigmail 2701 \item Spies \& spam filters can no longer inspect content 2702 \end{itemize}\vfill\pause 2703 With GNU Taler: 2704 \begin{itemize} 2705 \item Peer-to-peer payments via e-mail 2706 \item If unsolicited sender, hide messages from user \& 2707 automatically request payment from sender 2708 \item Sender can attach payment to be moved to inbox 2709 \item Receiver may grant refund to sender 2710 \end{itemize} 2711 \end{frame}