2022-fed.tex (75848B)
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{tikz,eurosym} 13 \usepackage[normalem]{ulem} 14 \usepackage{listings} 15 \usepackage{adjustbox} 16 17 % CSS 18 \lstdefinelanguage{CSS}{ 19 basicstyle=\ttfamily\scriptsize, 20 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}, 21 sensitive=true, 22 morecomment=[l]{//}, 23 morecomment=[s]{/*}{*/}, 24 morestring=[b]', 25 morestring=[b]", 26 alsoletter={:}, 27 alsodigit={-} 28 } 29 30 % JavaScript 31 \lstdefinelanguage{JavaScript}{ 32 basicstyle=\ttfamily\scriptsize, 33 morekeywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break}, 34 morecomment=[s]{/*}{*/}, 35 morecomment=[l]//, 36 morestring=[b]", 37 morestring=[b]' 38 } 39 40 \lstdefinelanguage{HTML5}{ 41 basicstyle=\ttfamily\scriptsize, 42 language=html, 43 sensitive=true, 44 alsoletter={<>=-}, 45 morecomment=[s]{<!-}{-->}, 46 tag=[s], 47 otherkeywords={ 48 % General 49 >, 50 % Standard tags 51 <!DOCTYPE, 52 </html, <html, <head, <title, </title, <style, </style, <link, </head, <meta, />, 53 % body 54 </body, <body, 55 % Divs 56 </div, <div, </div>, 57 % Paragraphs 58 </p, <p, </p>, 59 % scripts 60 </script, <script, 61 % More tags... 62 <canvas, /canvas>, <svg, <rect, <animateTransform, </rect>, </svg>, <video, <source, <iframe, </iframe>, </video>, <image, </image> 63 }, 64 ndkeywords={ 65 % General 66 =, 67 % HTML attributes 68 charset=, src=, id=, width=, height=, style=, type=, rel=, href=, 69 % SVG attributes 70 fill=, attributeName=, begin=, dur=, from=, to=, poster=, controls=, x=, y=, repeatCount=, xlink:href=, 71 % CSS properties 72 margin:, padding:, background-image:, border:, top:, left:, position:, width:, height:, 73 % CSS3 properties 74 transform:, -moz-transform:, -webkit-transform:, 75 animation:, -webkit-animation:, 76 transition:, transition-duration:, transition-property:, transition-timing-function:, 77 } 78 } 79 80 \lstdefinelanguage{JavaScript}{ 81 basicstyle=\ttfamily\scriptsize, 82 keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, for}, 83 keywordstyle=\color{blue}\bfseries, 84 ndkeywords={class, export, boolean, throw, implements, import, this}, 85 ndkeywordstyle=\color{darkgray}\bfseries, 86 identifierstyle=\color{black}, 87 sensitive=false, 88 comment=[l]{//}, 89 morecomment=[s]{/*}{*/}, 90 commentstyle=\color{purple}\ttfamily, 91 stringstyle=\color{red}\ttfamily, 92 morestring=[b]', 93 morestring=[b]" 94 } 95 96 \usetikzlibrary{shapes,arrows} 97 \usetikzlibrary{positioning} 98 \usetikzlibrary{calc} 99 100 \title{GNU Taler} 101 %\subtitle{} 102 103 \setbeamertemplate{navigation symbols}{\includegraphics[width=1cm]{inria.pdf} \includegraphics[width=0.5cm]{gnu.png} \includegraphics[width=0.5cm]{ashoka.png}\hfill} 104 %\setbeamercovered{transparent=1} 105 106 \author[C. Grothoff]{L. Schumacher, F. Dold, {\bf C. Grothoff}, M. Stanisci} 107 \date{\today} 108 \institute{The GNU Project} 109 110 111 \begin{document} 112 113 \justifying 114 115 \begin{frame} 116 \begin{center} 117 \LARGE {\bf GNU} 118 119 \vfill 120 % \includegraphics[width=0.66\textwidth]{logo-2017-fr.pdf} 121 \includegraphics[width=0.66\textwidth]{logo-2020.jpg} 122 \end{center} 123 \begin{textblock*}{6cm}(.5cm,7.7cm) % {block width} (coords) 124 {\Large {\bf \href{https://taler.net/}{taler.net}} \\ 125 \href{https://twitter.com/taler}{taler@twitter} \\ 126 \href{https://taler-systems.com/}{taler-systems.com}} 127 \end{textblock*} 128 129 % Substitute based on who is giving the talk! 130 \begin{textblock*}{6cm}(6.7cm,7.7cm) % {block width} (coords) 131 {\hfill {\Large {\bf Leon Schumacher \&} \\ 132 \hfill {\bf Christian Grothoff}} \\ 133 \hfill \{schumacher,grothoff\}@taler.net } 134 \end{textblock*} 135 136 \end{frame} 137 138 139 \section{What is Taler?} 140 \begin{frame}{What is Taler?} 141 \begin{center} 142 Taler is an electronic instant payment system. 143 \end{center} 144 \begin{itemize} 145 \item Uses electronic coins stored in {\bf wallets} on customer's device 146 \item Like {\bf cash} 147 \item Pay in {\bf existing currencies} (i.e. EUR, USD, BTC), \\ 148 or use it to create new {\bf regional currencies} 149 \end{itemize} 150 \vfill 151 \pause 152 \noindent 153 However, Taler is 154 \begin{itemize} 155 \item \emph{not} a currency 156 \item \emph{not} a long-term store of value 157 \item \emph{not} a network or instance of a system 158 \item \emph{not} decentralized 159 \item \emph{not} based on proof-of-work or proof-of-stake 160 \item \emph{not} a speculative asset / ``get-rich-quick scheme'' 161 \end{itemize} 162 \end{frame} 163 164 165 \begin{frame}{Design principles} 166 \framesubtitle{https://taler.net/en/principles.html} 167 GNU Taler must ... 168 \begin{enumerate} 169 \item {... be implemented as {\bf free software}.} 170 \item {... protect the {\bf privacy of buyers}.} 171 \item {... must enable the state to {\bf tax income} and crack down on 172 illegal business activities.} 173 \item {... prevent payment fraud.} 174 \item {... only {\bf disclose the minimal amount of information 175 necessary}.} 176 \item {... be usable.} 177 \item {... be efficient.} 178 \item {... avoid single points of failure.} 179 \item {... foster {\bf competition}.} 180 \end{enumerate} 181 \end{frame} 182 183 184 \begin{frame} 185 \frametitle{Taler Overview} 186 \begin{center} 187 \begin{tikzpicture} 188 \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em]; 189 \node (origin) at (0,0) {}; 190 \node (exchange) [def,above=of origin,draw]{Exchange}; 191 \node (customer) [def, draw, below left=of origin] {Customer}; 192 \node (merchant) [def, draw, below right=of origin] {Merchant}; 193 \node (auditor) [def, draw, above right=of origin]{Auditor}; 194 % \node (regulator) [def, draw, above=of auditor]{CSSF}; 195 196 \tikzstyle{C} = [color=black, line width=1pt] 197 198 \draw [<-, C] (customer) -- (exchange) node [midway, above, sloped] (TextNode) {withdraw coins}; 199 \draw [<-, C] (exchange) -- (merchant) node [midway, above, sloped] (TextNode) {deposit coins}; 200 \draw [<-, C] (merchant) -- (customer) node [midway, above, sloped] (TextNode) {spend coins}; 201 \draw [<-, C] (exchange) -- (auditor) node [midway, above, sloped] (TextNode) {verify}; 202 % \draw [<-, C] (regulator) -- (auditor) node [midway, above, sloped] (TextNode) {report}; 203 204 \end{tikzpicture} 205 \end{center} 206 \end{frame} 207 208 \begin{frame}{The Taler Software Ecosystem} 209 \framesubtitle{\url{https://taler.net/en/docs.html}} 210 Taler is based on modular components that work together to provide a 211 complete payment system: 212 \vfill 213 \begin{itemize} 214 \item {\bf Exchange:} Service provider for digital cash 215 \begin{itemize} 216 \item Core exchange software (cryptography, database) 217 \item Air-gapped key management, real-time {\bf auditing} 218 \item LibEuFin: Modular integration with banking systems 219 \end{itemize} 220 \item {\bf Merchant:} Integration service for existing businesses 221 \begin{itemize} 222 \item Core merchant backend software (cryptography, database) 223 \item Back-office interface for staff 224 \item Frontend integration (E-commerce, Point-of-sale) 225 \end{itemize} 226 \item {\bf Wallet:} Consumer-controlled applications for e-cash 227 \begin{itemize} 228 \item Multi-platform wallet software (for browsers \& mobile phones) 229 \item Wallet backup storage providers 230 \item {\bf Anastasis}: Recovery of lost wallets based on secret splitting 231 \end{itemize} 232 \end{itemize} 233 \end{frame} 234 235 236 \begin{frame} 237 \frametitle{Architecture of Taler} 238 \begin{center} 239 \includegraphics[width=1\textwidth]{operations.png} 240 \end{center} 241 \end{frame} 242 243 244 \begin{frame}{Taler: Unique Regulatory Features for Central Banks} 245 \framesubtitle{\url{https://www.snb.ch/en/mmr/papers/id/working_paper_2021_03}} 246 \begin{itemize} 247 \item Central bank issues digital coins equivalent to issuing cash \\ 248 $\Rightarrow$ monetary policy remains under CB control 249 \item Architecture with consumer accounts at commercial banks \\ 250 $\Rightarrow$ no competition for commercial banking (S\&L) \\ 251 $\Rightarrow$ CB does not have to manage KYC, customer support 252 \item Withdrawal limits and denomination expiration \\ 253 $\Rightarrow$ protects against bank runs and hoarding 254 \item Income transparency and possibility to set fees \\ 255 $\Rightarrow$ additional insights into economy and new policy options 256 \item Revocation protocols and loss limitations \\ 257 $\Rightarrow$ exit strategy and handles catastrophic security incidents 258 \item Privacy by cryptographic design not organizational compliance \\ 259 $\Rightarrow$ CB cannot be forced to facilitate mass-surveillance 260 \end{itemize} 261 \end{frame} 262 263 264 \begin{frame}{Usability of Taler} 265 \vfill 266 \begin{center} 267 \url{https://demo.taler.net/} 268 \end{center} 269 \begin{enumerate} 270 \item Install browser extension. 271 \item Visit the {\tt bank.demo.taler.net} to withdraw coins. 272 \item Visit the {\tt shop.demo.taler.net} to spend coins. 273 \end{enumerate} 274 \vfill 275 \end{frame} 276 277 278 \begin{frame}{How does it work?} 279 We use a few ancient constructions: 280 \begin{itemize} 281 \item Cryptographic hash function (1989) 282 \item Blind signature (1983) 283 \item Schnorr signature (1989) 284 \item Diffie-Hellman key exchange (1976) 285 \item Cut-and-choose zero-knowledge proof (1985) 286 \end{itemize} 287 But of course we use modern instantiations. 288 \end{frame} 289 290 291 \begin{frame}{Definition: Taxability} 292 We say Taler is taxable because: 293 \begin{itemize} 294 \item Merchant's income is visible from deposits. 295 \item Hash of contract is part of deposit data. 296 \item State can trace income and enforce taxation. 297 \end{itemize}\pause 298 Limitations: 299 \begin{itemize} 300 \item withdraw loophole 301 \item {\em sharing} coins among family and friends 302 \end{itemize} 303 \end{frame} 304 305 306 \begin{frame}{Exchange setup: Create a denomination key (RSA)} 307 \begin{minipage}{6cm} 308 \begin{enumerate} 309 \item Pick random primes $p,q$. 310 \item Compute $n := pq$, $\phi(n) = (p-1)(q-1)$ 311 \item Pick small $e < \phi(n)$ such that 312 $d := e^{-1} \mod \phi(n)$ exists. 313 \item Publish public key $(e,n)$. 314 \end{enumerate} 315 \end{minipage} 316 \begin{minipage}{6cm} 317 \begin{tikzpicture} 318 \tikzstyle{def} = [node distance=1em and 1em, inner sep=0em, outer sep=.3em]; 319 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 320 \node (primes) [draw=none, below = of origin] at (0,0) {$(p, q)$}; 321 \node (seal) [def, draw=none, below left=of primes]{\includegraphics[width=0.15\textwidth]{seal.pdf}}; 322 \node (hammer) [def, draw=none, below right=of primes]{\includegraphics[width=0.15\textwidth]{hammer.pdf}}; 323 324 \tikzstyle{C} = [color=black, line width=1pt] 325 326 \draw [<-, C] (primes) -- (origin) node [midway, above, sloped] (TextNode) {}; 327 \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {}; 328 \draw [<-, C] (hammer) -- (primes) node [midway, above, sloped] (TextNode) {}; 329 \end{tikzpicture} 330 % \includegraphics[width=0.4\textwidth]{seal.pdf} 331 \end{minipage} 332 \end{frame} 333 334 335 \begin{frame}{Merchant: Create a signing key (EdDSA)} 336 \begin{minipage}{6cm} 337 \begin{itemize} 338 \item pick random $m \mod o$ as private key 339 \item $M = mG$ public key 340 \end{itemize} 341 \end{minipage} 342 \begin{minipage}{6cm} 343 \begin{tikzpicture} 344 \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em]; 345 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 346 \node (m) [draw=none, below = of origin] at (0,0) {$m$}; 347 \node (seal) [draw=none, below=of m]{M}; 348 \tikzstyle{C} = [color=black, line width=1pt] 349 350 \draw [<-, C] (m) -- (origin) node [midway, above, sloped] (TextNode) {}; 351 \draw [<-, C] (seal) -- (primes) node [midway, above, sloped] (TextNode) {}; 352 \end{tikzpicture} 353 \end{minipage} 354 \parbox[t]{3cm}{{\bf Capability:} $m \Rightarrow$ } 355 \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{merchant-sign.pdf}} 356 \end{frame} 357 358 359 \begin{frame}{Customer: Create a planchet (EdDSA)} 360 \begin{minipage}{8cm} 361 \begin{itemize} 362 \item Pick random $c \mod o$ private key 363 \item $C = cG$ public key 364 \end{itemize} 365 \end{minipage} 366 \begin{minipage}{4cm} 367 \begin{tikzpicture} 368 \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em]; 369 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 370 \node (c) [draw=none, below = of origin] at (0,0) {$c$}; 371 \node (planchet) [draw=none, below=of c]{\includegraphics[width=0.4\textwidth]{planchet.pdf}}; 372 \tikzstyle{C} = [color=black, line width=1pt] 373 374 \draw [<-, C] (c) -- (origin) node [midway, above, sloped] (TextNode) {}; 375 \draw [<-, C] (planchet) -- (c) node [midway, above, sloped] (TextNode) {}; 376 \end{tikzpicture} 377 \end{minipage} 378 \parbox[t]{3cm}{{\bf Capability:} $c \Rightarrow$ } 379 \raisebox{\dimexpr-\height+\baselineskip}{\includegraphics[width=0.1\textwidth]{planchet-sign.pdf}} 380 \end{frame} 381 382 383 \begin{frame}{Customer: Blind planchet (RSA)} 384 \begin{minipage}{6cm} 385 \begin{enumerate} 386 \item Obtain public key $(e,n)$ 387 \item Compute $f := FDH(C)$, $f < n$. 388 \item Pick blinding factor $b \in \mathbb Z_n$ 389 \item Transmit $f' := f b^e \mod n$ 390 \end{enumerate} 391 \end{minipage} 392 \begin{minipage}{6cm} 393 \begin{tikzpicture} 394 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 395 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{dice.pdf}}; 396 \node (b) [def, draw=none, below = of origin] at (0,-0.2) {$b$}; 397 \node (blinded) [def, draw=none, below right=of b]{\includegraphics[width=0.2\textwidth]{blinded.pdf}}; 398 \node (planchet) [def, draw=none, above right=of blinded]{\includegraphics[width=0.15\textwidth]{planchet.pdf}}; 399 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 400 \tikzstyle{C} = [color=black, line width=1pt] 401 402 \draw [<-, C] (b) -- (origin) node [midway, above, sloped] (TextNode) {}; 403 \draw [<-, C] (blinded) -- (planchet) node [midway, above, sloped] (TextNode) {}; 404 \draw [<-, C] (blinded) -- (b) node [midway, above, sloped] (TextNode) {}; 405 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 406 \end{tikzpicture} 407 \end{minipage} 408 \end{frame} 409 410 411 \begin{frame}{Exchange: Blind sign (RSA)} 412 \begin{minipage}{6cm} 413 \begin{enumerate} 414 \item Receive $f'$. 415 \item Compute $s' := f'^d \mod n$. 416 \item Send signature $s'$. 417 \end{enumerate} 418 \end{minipage} 419 \begin{minipage}{6cm} 420 \begin{tikzpicture} 421 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 422 \node (hammer) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{hammer.pdf}}; 423 \node (signed) [def, draw=none, below left=of hammer]{\includegraphics[width=0.2\textwidth]{sign.pdf}}; 424 \node (blinded) [def, draw=none, above left=of signed]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 425 \node (customer) [node distance=4em and 0.5em, draw, below =of signed]{Customer}; 426 \tikzstyle{C} = [color=black, line width=1pt] 427 428 \draw [<-, C] (signed) -- (hammer) node [midway, above, sloped] (TextNode) {}; 429 \draw [<-, C] (signed) -- (blinded) node [midway, above, sloped] (TextNode) {}; 430 \draw [<-, C] (customer) -- (signed) node [midway, above, sloped] (TextNode) {{\small transmit}}; 431 \end{tikzpicture} 432 \end{minipage} 433 \end{frame} 434 435 436 \begin{frame}{Customer: Unblind coin (RSA)} 437 \begin{minipage}{6cm} 438 \begin{enumerate} 439 \item Receive $s'$. 440 \item Compute $s := s' b^{-1} \mod n$ % \\ 441 % ($(f')^d = (f b^e)^d = f^d b$). 442 \end{enumerate} 443 \end{minipage} 444 \begin{minipage}{6cm} 445 \begin{tikzpicture} 446 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 447 \node (b) [def, draw=none] at (0,0) {$b$}; 448 \node (coin) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 449 \node (signed) [def, draw=none, above left=of coin]{\includegraphics[width=0.15\textwidth]{sign.pdf}}; 450 \tikzstyle{C} = [color=black, line width=1pt] 451 452 \draw [<-, C] (coin) -- (b) node [midway, above, sloped] (TextNode) {}; 453 \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {}; 454 \end{tikzpicture} 455 \end{minipage} 456 \end{frame} 457 458 \begin{frame}{Withdrawing coins on the Web} 459 \begin{center} 460 \includegraphics[height=0.9\textheight]{figs/taler-withdraw.pdf} 461 \end{center} 462 \end{frame} 463 464 465 \begin{frame}{Customer: Build shopping cart} 466 \begin{center} 467 \begin{tikzpicture} 468 \tikzstyle{def} = [node distance= 1em and 1em, inner sep=0em, outer sep=.3em]; 469 \node (origin) at (0,0) {\includegraphics[width=0.2\textwidth]{shop.pdf}}; 470 \node (cart) [draw=none, below=of m]{\includegraphics[width=0.2\textwidth]{cart.pdf}}; 471 \node (merchant) [node distance=4em and 0.5em, draw, below =of cart]{Merchant}; 472 \tikzstyle{C} = [color=black, line width=1pt]; 473 \draw [<-, C] (cart) -- (origin) node [midway, above, sloped] (TextNode) {}; 474 \draw [<-, C] (merchant) -- (cart) node [midway, above, sloped] (TextNode) {{\small transmit}}; 475 \end{tikzpicture} 476 \end{center} 477 \end{frame} 478 479 480 \begin{frame}{Merchant: Propose contract (EdDSA)} 481 \begin{minipage}{6cm} 482 \begin{enumerate} 483 \item Complete proposal $D$. 484 \item Send $D$, $EdDSA_m(D)$ 485 \end{enumerate} 486 \end{minipage} 487 \begin{minipage}{6cm} 488 \begin{tikzpicture} 489 \tikzstyle{def} = [node distance=2em and 0.5em, inner sep=0em, outer sep=.3em]; 490 \node (cart) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{cart.pdf}}; 491 \node (proposal) [def, draw=none, below right=of cart]{\includegraphics[width=0.5\textwidth]{merchant_propose.pdf}}; 492 \node (customer) [node distance=4em and 0.5em, draw, below =of proposal]{Customer}; 493 \tikzstyle{C} = [color=black, line width=1pt]; 494 \node (sign) [def, draw=none, above right=of proposal] {$m$}; 495 \tikzstyle{C} = [color=black, line width=1pt] 496 497 \draw [<-, C] (proposal) -- (sign) node [midway, above, sloped] (TextNode) {}; 498 \draw [<-, C] (proposal) -- (cart) node [midway, above, sloped] (TextNode) {}; 499 \draw [<-, C] (customer) -- (proposal) node [midway, above, sloped] (TextNode) {{\small transmit}}; 500 \end{tikzpicture} 501 \end{minipage} 502 \end{frame} 503 504 505 \begin{frame}{Customer: Spend coin (EdDSA)} 506 \begin{minipage}{6cm} 507 \begin{enumerate} 508 \item Receive proposal $D$, $EdDSA_m(D)$. 509 \item Send $s$, $C$, $EdDSA_c(D)$ 510 \end{enumerate} 511 \end{minipage} 512 \begin{minipage}{6cm} 513 \begin{tikzpicture} 514 \tikzstyle{def} = [node distance=2em and 0.4em, inner sep=0em, outer sep=.3em]; 515 \node (proposal) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{merchant_propose.pdf}}; 516 \node (contract) [def, draw=none, below right=of cart]{\includegraphics[width=0.3\textwidth]{contract.pdf}}; 517 \node (c) [def, draw=none, above=of contract] {$c$}; 518 \node (merchant) [node distance=4em and 0.5em, draw, below=of contract]{Merchant}; 519 \node (coin) [def, draw=none, right=of contract]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 520 \tikzstyle{C} = [color=black, line width=1pt] 521 522 \draw [<-, C] (contract) -- (c) node [midway, above, sloped] (TextNode) {}; 523 \draw [<-, C] (contract) -- (proposal) node [midway, above, sloped] (TextNode) {}; 524 \draw [<-, C] (merchant) -- (contract) node [midway, above, sloped] (TextNode) {{\small transmit}}; 525 \draw [<-, C] (merchant) -- (coin) node [midway, below, sloped] (TextNode) {{\small transmit}}; 526 \end{tikzpicture} 527 \end{minipage} 528 \end{frame} 529 530 531 \begin{frame}{Merchant and Exchange: Verify coin (RSA)} 532 \begin{minipage}{6cm} 533 \begin{equation*} 534 s^e \stackrel{?}{\equiv} FDH(C) \mod n 535 \end{equation*} 536 \end{minipage} 537 \begin{minipage}{6cm} 538 \begin{minipage}{0.2\textwidth} 539 \includegraphics[width=\textwidth]{coin.pdf} 540 \end{minipage} 541 $\stackrel{?}{\Leftrightarrow}$ 542 \begin{minipage}{0.2\textwidth} 543 \includegraphics[width=\textwidth]{seal.pdf} 544 \end{minipage} 545 \end{minipage} 546 \vfill 547 The exchange does not only verify the signature, but also 548 checks that the coin was not double-spent. 549 \vfill 550 \pause 551 \begin{center} 552 {\bf Taler is an online payment system.} 553 \end{center} 554 \vfill 555 \end{frame} 556 557 558 \begin{frame}{Requirements: Online vs. Offline Digital Currencies} 559 \framesubtitle{\url{https://taler.net/papers/euro-bearer-online-2021.pdf}} 560 \begin{itemize} 561 \item Offline capabilities are sometimes cited as a requirement for digital payment solutions 562 \item All implementations must either use restrictive hardware elements and/or introduce 563 counterparty risk. 564 \item[$\Rightarrow$] Permanent offline features weaken a digital payment solution (privacy, security) 565 \item[$\Rightarrow$] Introduces unwarranted competition for physical cash (endangers emergency-preparedness). 566 \end{itemize} 567 We recommend a tiered approach: 568 \begin{enumerate} 569 \item Online-first, bearer-based digital currency with Taler 570 \item (Optional:) Limited offline mode for network outages 571 \item Physical cash for emergencies (power outage, catastrophic cyber incidents) 572 \end{enumerate} 573 \end{frame} 574 575 576 \begin{frame}{Payment processing with Taler} 577 \begin{center} 578 \includegraphics[height=0.9\textheight]{figs/taler-pay.pdf} 579 \end{center} 580 \end{frame} 581 582 583 \begin{frame}{Giving change} 584 It would be inefficient to pay EUR 100 with 1 cent coins! 585 \begin{itemize} 586 \item Denomination key represents value of a coin. 587 \item Exchange may offer various denominations for coins. 588 \item Wallet may not have exact change! 589 \item Usability requires ability to pay given sufficient total funds. 590 \end{itemize}\pause 591 Key goals: 592 \begin{itemize} 593 \item maintain unlinkability 594 \item maintain taxability of transactions 595 \end{itemize}\pause 596 Method: 597 \begin{itemize} 598 \item Contract can specify to only pay {\em partial value} of a coin. 599 \item Exchange allows wallet to obtain {\em unlinkable change} 600 for remaining coin value. 601 \end{itemize} 602 \end{frame} 603 604 605 \begin{frame}{Diffie-Hellman (ECDH)} 606 \begin{minipage}{8cm} 607 \begin{enumerate} 608 \item Create private keys $c,t \mod o$ 609 \item Define $C = cG$ 610 \item Define $T = tG$ 611 \item Compute DH \\ $cT = c(tG) = t(cG) = tC$ 612 \end{enumerate} 613 \end{minipage} 614 \begin{minipage}{6cm} 615 \begin{tikzpicture} 616 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 617 \node (t) [def, draw=none] at (0,0) {$t$}; 618 \node (ct) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{dh.pdf}}; 619 \node (c) [def, draw=none, above left= of ct] {$c$}; 620 \tikzstyle{C} = [color=black, line width=1pt] 621 622 \draw [<-, C] (ct) -- (c) node [midway, above, sloped] (TextNode) {}; 623 \draw [<-, C] (ct) -- (t) node [midway, above, sloped] (TextNode) {}; 624 \end{tikzpicture} 625 \end{minipage} 626 \end{frame} 627 628 629 \begin{frame}{Strawman solution} 630 \begin{minipage}{8cm} 631 Given partially spent private coin key $c_{old}$: 632 \begin{enumerate} 633 % \item Let $C_{old} := c_{old}G$ (as before) 634 \item Pick random $c_{new} \mod o$ private key 635 \item $C_{new} = c_{new}G$ public key 636 \item Pick random $b_{new}$ 637 \item Compute $f_{new} := FDH(C_{new})$, $m < n$. 638 \item Transmit $f'_{new} := f_{new} b_{new}^e \mod n$ 639 \end{enumerate} 640 ... and sign request for change with $c_{old}$. 641 \end{minipage} 642 \begin{minipage}{4cm} 643 \begin{tikzpicture} 644 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 645 \node (blinded) [def, draw=none]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 646 \node (planchet) [def, draw=none, above left= of blinded] {\includegraphics[width=0.15\textwidth]{planchet.pdf}}; 647 \node (cnew) [def, draw=none, above= of planchet] {$c_{new}$}; 648 \node (bnew) [def, draw=none, above right= of blinded] {$b_{new}$}; 649 \node (dice1) [def, draw=none, above = of cnew]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 650 \node (dice2) [def, draw=none, above = of bnew]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 651 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 652 653 \tikzstyle{C} = [color=black, line width=1pt] 654 655 \draw [<-, C] (cnew) -- (dice1) node [midway, above, sloped] (TextNode) {}; 656 \draw [<-, C] (planchet) -- (cnew) node [midway, above, sloped] (TextNode) {}; 657 \draw [<-, C] (bnew) -- (dice2) node [midway, above, sloped] (TextNode) {}; 658 \draw [<-, C] (blinded) -- (planchet) node [midway, above, sloped] (TextNode) {}; 659 \draw [<-, C] (blinded) -- (bnew) node [midway, above, sloped] (TextNode) {}; 660 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 661 \end{tikzpicture} 662 \end{minipage} 663 \pause 664 \vfill 665 {\bf Problem: Owner of $c_{new}$ may differ from owner of $c_{old}$!} 666 \end{frame} 667 668 669 \begin{frame}{Customer: Transfer key setup (ECDH)} 670 \begin{minipage}{8cm} 671 Given partially spent private coin key $c_{old}$: 672 \begin{enumerate} 673 \item Let $C_{old} := c_{old}G$ (as before) 674 \item Create random private transfer key $t \mod o$ 675 \item Compute $T := tG$ 676 \item Compute $X := c_{old}(tG) = t(c_{old}G) = tC_{old}$ 677 \item Derive $c_{new}$ and $b_{new}$ from $X$ 678 \item Compute $C_{new} := c_{new}G$ 679 \item Compute $f_{new} := FDH(C_{new})$ 680 \item Transmit $f_{new}' := f_{new} b_{new}^e$ 681 \end{enumerate} 682 \end{minipage} 683 \begin{minipage}{4cm} 684 \begin{tikzpicture} 685 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 686 \node (t) [def, draw=none] at (0,0) {$t$}; 687 \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 688 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 689 \node (d) [def, draw=none, above left= of dh] {$c_{old}$}; 690 \node (cp) [def, draw=none, below left= of dh] {$c_{new}$}; 691 \node (bp) [def, draw=none, below right= of dh] {$b_{new}$}; 692 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 693 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 694 695 \tikzstyle{C} = [color=black, line width=1pt] 696 697 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 698 \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {}; 699 \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {}; 700 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 701 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 702 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 703 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 704 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 705 \end{tikzpicture} 706 \end{minipage} 707 \end{frame} 708 709 710 \begin{frame}{Cut-and-Choose} 711 \begin{minipage}{4cm} 712 \begin{tikzpicture} 713 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 714 \node (t) [def, draw=none] at (0,0) {$t_1$}; 715 \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 716 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 717 \node (d) [def, draw=none, above left= of dh] {$c_{old}$}; 718 \node (cp) [def, draw=none, below left= of dh] {$c_{new,1}$}; 719 \node (bp) [def, draw=none, below right= of dh] {$b_{new,1}$}; 720 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 721 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 722 723 \tikzstyle{C} = [color=black, line width=1pt] 724 725 \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {}; 726 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 727 \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {}; 728 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 729 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 730 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 731 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 732 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 733 \end{tikzpicture} 734 \end{minipage} 735 \begin{minipage}{4cm} 736 \begin{tikzpicture} 737 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 738 \node (t) [def, draw=none] at (0,0) {$t_2$}; 739 \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 740 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 741 \node (d) [def, draw=none, above left= of dh] {$c_{old}$}; 742 \node (cp) [def, draw=none, below left= of dh] {$c_{new,2}$}; 743 \node (bp) [def, draw=none, below right= of dh] {$b_{new,2}$}; 744 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 745 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 746 747 \tikzstyle{C} = [color=black, line width=1pt] 748 749 \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {}; 750 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 751 \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {}; 752 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 753 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 754 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 755 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 756 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 757 \end{tikzpicture} 758 \end{minipage} 759 \begin{minipage}{4cm} 760 \begin{tikzpicture} 761 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 762 \node (t) [def, draw=none] at (0,0) {$t_3$}; 763 \node (dice) [def, draw=none, above = of t]{\includegraphics[width=0.2\textwidth]{dice.pdf}}; 764 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 765 \node (d) [def, draw=none, above left= of dh] {$c_{old}$}; 766 \node (cp) [def, draw=none, below left= of dh] {$c_{new,3}$}; 767 \node (bp) [def, draw=none, below right= of dh] {$b_{new,3}$}; 768 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 769 \node (exchange) [node distance=4em and 0.5em, draw, below =of blinded]{Exchange}; 770 771 \tikzstyle{C} = [color=black, line width=1pt] 772 773 \draw [<-, C] (t) -- (dice) node [midway, above, sloped] (TextNode) {}; 774 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 775 \draw [<-, C] (dh) -- (t) node [midway, above, sloped] (TextNode) {}; 776 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 777 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 778 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 779 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 780 \draw [<-, C] (exchange) -- (blinded) node [midway, above, sloped] (TextNode) {{\small transmit}}; 781 \end{tikzpicture} 782 \end{minipage} 783 \end{frame} 784 785 786 \begin{frame}{Exchange: Choose!} 787 \begin{center} 788 \item Exchange sends back random $\gamma \in \{ 1, 2, 3 \}$ to the customer. 789 \end{center} 790 \end{frame} 791 792 793 \begin{frame}{Customer: Reveal} 794 \begin{enumerate} 795 \item If $\gamma = 1$, send $t_2$, $t_3$ to exchange 796 \item If $\gamma = 2$, send $t_1$, $t_3$ to exchange 797 \item If $\gamma = 3$, send $t_1$, $t_2$ to exchange 798 \end{enumerate} 799 \end{frame} 800 801 802 \begin{frame}{Exchange: Verify ($\gamma = 2$)} 803 \begin{minipage}{4cm} 804 \begin{tikzpicture} 805 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 806 \node (h) [def, draw=none] at (0,0) {$t_1$}; 807 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 808 \node (d) [def, draw=none, above left= of dh] {$C_{old}$}; 809 \node (cp) [def, draw=none, below left= of dh] {$c_{new,1}$}; 810 \node (bp) [def, draw=none, below right= of dh] {$b_{new,1}$}; 811 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 812 813 \tikzstyle{C} = [color=black, line width=1pt] 814 815 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 816 \draw [<-, C] (dh) -- (h) node [midway, above, sloped] (TextNode) {}; 817 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 818 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 819 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 820 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 821 \end{tikzpicture} 822 \end{minipage} 823 \begin{minipage}{4cm} 824 \ 825 \end{minipage} 826 \begin{minipage}{4cm} 827 \begin{tikzpicture} 828 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 829 \node (h) [def, draw=none] at (0,0) {$t_3$}; 830 \node (dh) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 831 \node (d) [def, draw=none, above left= of dh] {$C_{old}$}; 832 \node (cp) [def, draw=none, below left= of dh] {$c_{new,3}$}; 833 \node (bp) [def, draw=none, below right= of dh] {$b_{new,3}$}; 834 \node (blinded) [def, draw=none, below right=of cp]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 835 836 \tikzstyle{C} = [color=black, line width=1pt] 837 838 \draw [<-, C] (dh) -- (d) node [midway, above, sloped] (TextNode) {}; 839 \draw [<-, C] (dh) -- (h) node [midway, above, sloped] (TextNode) {}; 840 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 841 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 842 \draw [<-, C] (blinded) -- (cp) node [midway, above, sloped] (TextNode) {}; 843 \draw [<-, C] (blinded) -- (bp) node [midway, above, sloped] (TextNode) {}; 844 \end{tikzpicture} 845 \end{minipage} 846 \end{frame} 847 848 849 \begin{frame}{Exchange: Blind sign change (RSA)} 850 \begin{minipage}{6cm} 851 \begin{enumerate} 852 \item Take $f_{new,\gamma}'$. 853 \item Compute $s' := f_{new,\gamma}'^d \mod n$. 854 \item Send signature $s'$. 855 \end{enumerate} 856 \end{minipage} 857 \begin{minipage}{6cm} 858 \begin{tikzpicture} 859 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 860 \node (hammer) [def, draw=none] at (0,0) {\includegraphics[width=0.15\textwidth]{hammer.pdf}}; 861 \node (signed) [def, draw=none, below left=of hammer]{\includegraphics[width=0.2\textwidth]{sign.pdf}}; 862 \node (blinded) [def, draw=none, above left=of signed]{\includegraphics[width=0.15\textwidth]{blinded.pdf}}; 863 \node (customer) [node distance=4em and 0.5em, draw, below =of signed]{Customer}; 864 \tikzstyle{C} = [color=black, line width=1pt] 865 866 \draw [<-, C] (signed) -- (hammer) node [midway, above, sloped] (TextNode) {}; 867 \draw [<-, C] (signed) -- (blinded) node [midway, above, sloped] (TextNode) {}; 868 \draw [<-, C] (customer) -- (signed) node [midway, above, sloped] (TextNode) {{\small transmit}}; 869 \end{tikzpicture} 870 \end{minipage} 871 \end{frame} 872 873 874 \begin{frame}{Customer: Unblind change (RSA)} 875 \begin{minipage}{6cm} 876 \begin{enumerate} 877 \item Receive $s'$. 878 \item Compute $s := s' b_{new,\gamma}^{-1} \mod n$. 879 \end{enumerate} 880 \end{minipage} 881 \begin{minipage}{6cm} 882 \begin{tikzpicture} 883 \tikzstyle{def} = [node distance= 2em and 0.5em, inner sep=0em, outer sep=.3em]; 884 \node (b) [def, draw=none] at (0,0) {$b_{new,\gamma}$}; 885 \node (coin) [def, draw=none, below left=of b]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 886 \node (signed) [def, draw=none, above left=of coin]{\includegraphics[width=0.15\textwidth]{sign.pdf}}; 887 \tikzstyle{C} = [color=black, line width=1pt] 888 889 \draw [<-, C] (coin) -- (b) node [midway, above, sloped] (TextNode) {}; 890 \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {}; 891 \end{tikzpicture} 892 \end{minipage} 893 \end{frame} 894 895 896 \begin{frame}{Exchange: Allow linking change} 897 \begin{minipage}{7cm} 898 \begin{center} 899 Given $C_{old}$ 900 901 \vspace{1cm} 902 903 return $T_\gamma$, $s := s' b_{new,\gamma}^{-1} \mod n$. 904 \end{center} 905 \end{minipage} 906 \begin{minipage}{5cm} 907 \begin{tikzpicture} 908 \tikzstyle{def} = [node distance= 3em and 0.5em, inner sep=0.5em, outer sep=.3em]; 909 \node (co) [def, draw=none] at (0,0) {$C_{old}$}; 910 \node (T) [def, draw=none, below left=of co]{$T_\gamma$}; 911 \node (sign) [def, draw=none, below right=of co]{\includegraphics[width=0.15\textwidth]{sign.pdf}}; 912 \node (customer) [def, draw, below right=of T] {Customer}; 913 914 \tikzstyle{C} = [color=black, line width=1pt] 915 916 \draw [<-, C] (T) -- (co) node [midway, above, sloped] (TextNode) {}; 917 \draw [<-, C] (sign) -- (co) node [midway, above, sloped] (TextNode) {}; 918 \draw [<-, C] (customer) -- (T) node [midway, above, sloped] (TextNode) {link}; 919 \draw [<-, C] (customer) -- (sign) node [midway, above, sloped] (TextNode) {link}; 920 \end{tikzpicture} 921 \end{minipage} 922 \end{frame} 923 924 925 \begin{frame}{Customer: Link (threat!)} 926 \begin{minipage}{6.3cm} 927 \begin{enumerate} 928 \item Have $c_{old}$. 929 \item Obtain $T_\gamma$, $s$ from exchange 930 \item Compute $X_\gamma = c_{old}T_\gamma$ 931 \item Derive $c_{new,\gamma}$ and $b_{new,\gamma}$ from $X_\gamma$ 932 \item Unblind $s := s' b_{new,\gamma}^{-1} \mod n$ 933 \end{enumerate} 934 935 \end{minipage} 936 \begin{minipage}{5.7cm} 937 \begin{tikzpicture} 938 \tikzstyle{def} = [node distance= 1.5em and 0.5em, inner sep=0em, outer sep=.3em]; 939 \node (T) [def, draw=none] at (0,0) {$T_\gamma$}; 940 \node (exchange) [def, inner sep=0.5em, draw, above left=of T] {Exchange}; 941 \node (signed) [def, draw=none, below left=of T]{\includegraphics[width=0.15\textwidth]{sign.pdf}}; 942 \node (dh) [def, draw=none, below right=of T]{\includegraphics[width=0.2\textwidth]{ct.pdf}}; 943 \node (bp) [def, draw=none, below left= of dh] {$b_{new,\gamma}$}; 944 \node (co) [def, draw=none, above right= of dh] {$c_{old}$}; 945 \node (cp) [def, draw=none, below= of dh] {$c_{new,\gamma}$}; 946 \node (coin) [def, draw=none, below left = of bp]{\includegraphics[width=0.2\textwidth]{coin.pdf}}; 947 \node (psign) [def, node distance=2.5em and 0em, draw=none, below = of cp]{\includegraphics[width=0.2\textwidth]{planchet-sign.pdf}}; 948 949 \tikzstyle{C} = [color=black, line width=1pt] 950 951 \draw [<-, C] (dh) -- (co) node [midway, above, sloped] (TextNode) {}; 952 \draw [<-, C] (dh) -- (T) node [midway, above, sloped] (TextNode) {}; 953 \draw [<-, C] (cp) -- (dh) node [midway, above, sloped] (TextNode) {}; 954 \draw [<-, C] (bp) -- (dh) node [midway, above, sloped] (TextNode) {}; 955 \draw [<-, C] (coin) -- (signed) node [midway, above, sloped] (TextNode) {}; 956 \draw [<-, C] (coin) -- (bp) node [midway, above, sloped] (TextNode) {}; 957 \draw [<-, C] (T) -- (exchange) node [midway, above, sloped] (TextNode) {link}; 958 \draw [<-, C] (signed) -- (exchange) node [midway, below, sloped] (TextNode) {link}; 959 \draw [<-, C, double] (psign) -- (cp) node [midway, below, sloped] (TextNode) {}; 960 \end{tikzpicture} 961 \end{minipage} 962 \end{frame} 963 964 965 \begin{frame}{Refresh protocol summary} 966 \begin{itemize} 967 \item Customer asks exchange to convert old coin to new coin 968 \item Protocol ensures new coins can be recovered from old coin 969 \item[$\Rightarrow$] New coins are owned by the same entity! 970 \end{itemize} 971 Thus, the refresh protocol allows: 972 \begin{itemize} 973 \item To give unlinkable change. 974 \item To give refunds to an anonymous customer. 975 \item To expire old keys and migrate coins to new ones. 976 \item To handle protocol aborts. 977 \end{itemize} 978 \noindent 979 \begin{center} 980 \bf 981 Transactions via refresh are equivalent to {\em sharing} a wallet. 982 \end{center} 983 \end{frame} 984 985 986 987 \begin{frame}{Warranting deposit safety} 988 Exchange has {\em another} online signing key $W = wG$: 989 \begin{center} 990 Sends $EdDSA_w(M,H(D),FDH(C))$ to the merchant. 991 \end{center} 992 This signature means that $M$ was the {\em first} to deposit 993 $C$ and that the exchange thus must pay $M$. 994 \vfill 995 \begin{center} 996 Without this, an evil exchange could renege on the deposit 997 confirmation and claim double-spending if a coin were 998 deposited twice, and then not pay either merchant! 999 \end{center} 1000 \end{frame} 1001 1002 1003 \begin{frame}{Online keys} 1004 \begin{itemize} 1005 \item The exchange needs $d$ and $w$ to be available for online signing. 1006 \item The corresponding public keys $W$ and $(e,n)$ are certified using 1007 Taler's public key infrastructure (which uses offline-only keys). 1008 \end{itemize} 1009 \begin{center} 1010 \includegraphics[width=0.5\textwidth]{taler-diagram-signatures.png} 1011 \end{center} 1012 \vfill 1013 \begin{center} 1014 {\bf What happens if those private keys are compromised?} 1015 \end{center} 1016 \vfill 1017 \end{frame} 1018 1019 1020 \begin{frame}{Denomination key $(e,n)$ compromise} 1021 \begin{itemize} 1022 \item An attacker who learns $d$ can sign an arbitrary number of illicit coins 1023 into existence and deposit them. 1024 \item Auditor and exchange can detect this once the total number of deposits 1025 (illicit and legitimate) exceeds the number of legitimate coins the 1026 exchange created. 1027 \item At this point, $(e,n)$ is {\em revoked}. Users of {\em unspent} 1028 legitimate coins reveal $b$ from their withdrawal operation and 1029 obtain a {\em refund}. 1030 \item The financial loss of the exchange is {\em bounded} by the number of 1031 legitimate coins signed with $d$. 1032 \item[$\Rightarrow$] Taler frequently rotates denomination signing keys and 1033 deletes $d$ after the signing period of the respective key expires. 1034 \end{itemize} 1035 \begin{center} 1036 \includegraphics[width=0.5\textwidth]{taler-diagram-denom-expiration.png} 1037 \end{center} 1038 \end{frame} 1039 1040 1041 \begin{frame}{Online signing key $W$ compromise} 1042 \begin{itemize} 1043 \item An attacker who learns $w$ can sign deposit confirmations. 1044 \item Attacker sets up two (or more) merchants and customer(s) which double-spend 1045 legitimate coins at both merchants. 1046 \item The merchants only deposit each coin once at the exchange and get paid once. 1047 \item The attacker then uses $w$ to fake deposit confirmations for the double-spent 1048 transactions. 1049 \item The attacker uses the faked deposit confirmations to complain to the auditor 1050 that the exchange did not honor the (faked) deposit confirmations. 1051 \end{itemize} 1052 The auditor can then detect the double-spending, but cannot tell who is to blame, 1053 and (likely) would presume an evil exchange, forcing it to pay both merchants. 1054 \end{frame} 1055 1056 1057 \begin{frame}{Detecting online signing key $W$ compromise} 1058 \begin{itemize} 1059 \item Merchants are required to {\em probabilistically} report 1060 signed deposit confirmations to the auditor. 1061 \item Auditor can thus detect exchanges not reporting signed 1062 deposit confirmations. 1063 \item[$\Rightarrow$] Exchange can rekey if illicit key use is detected, 1064 then only has to honor deposit confirmations it already provided 1065 to the auditor {\em and} those without proof of double-spending 1066 {\em and} those merchants reported to the auditor. 1067 \item[$\Rightarrow$] Merchants that do not participate in reporting 1068 to the auditor risk their deposit permissions being voided in 1069 cases of an exchange's private key being compromised. 1070 \end{itemize} 1071 \end{frame} 1072 1073 1074 1075 1076 \section{Competitor analysis} 1077 \begin{frame}{Competitor comparison} 1078 \begin{center} \small 1079 \begin{tabular}{l||c|c|c|c|c} 1080 & Cash & Bitcoin & Zerocoin & Creditcard & GNU Taler \\ \hline \hline 1081 Online &$-$$-$$-$ & ++ & ++ & + & +++ \\ \hline 1082 Offline & +++ & $-$$-$ & $-$$-$ & + & $-$$-$ \\ \hline 1083 Trans. cost & + & $-$$-$$-$ & $-$$-$$-$ & $-$ & ++ \\ \hline 1084 Speed & + & $-$$-$$-$ & $-$$-$$-$ & o & ++ \\ \hline 1085 Taxation & $-$ & $-$$-$ & $-$$-$$-$ & +++ & +++ \\ \hline 1086 Payer-anon & ++ & o & ++ & $-$$-$$-$ & +++ \\ \hline 1087 Payee-anon & ++ & o & ++ & $-$$-$$-$ & $-$$-$$-$ \\ \hline 1088 Security & $-$ & o & o & $-$$-$ & ++ \\ \hline 1089 Conversion & +++ & $-$$-$$-$ & $-$$-$$-$ & +++ & +++ \\ \hline 1090 Libre & $-$ & +++ & +++ & $-$ $-$ $-$ & +++ \\ 1091 \end{tabular} 1092 \end{center} 1093 \end{frame} 1094 1095 1096 \begin{frame}{Taler: Project Status} 1097 \framesubtitle{\url{https://docs.taler.net/}} 1098 \begin{itemize} 1099 \item Cryptographic protocols and core exchange component are stable 1100 \item Current focus: Merchant integration, settlement integration, wallet backup 1101 \item Pilot project at Bern University of Applied Sciences cafeteria 1102 \item Internal alpha deployment with a commercial bank in progress 1103 \end{itemize} 1104 \end{frame} 1105 1106 1107 \begin{frame}{Next Steps: Possible Projects and Collaborations} 1108 \vfill 1109 \begin{center} 1110 \includegraphics[width=1.0\textwidth]{taler-in-use.png} 1111 \end{center} 1112 \end{frame} 1113 1114 1115 \begin{frame}{Area I: System Integration and Partnerships} 1116 Pilots with banking organizations could: 1117 \begin{itemize} 1118 \item Study integration with the underlying RTGS layer: 1119 \begin{itemize} 1120 \item Develop standardized operational procedures 1121 \item Assess transaction performance at scale 1122 \item Perform cost analysis in banking environment 1123 \item Assess effort for integration with commercial banks 1124 \end{itemize} 1125 \item Analyze regulatory considerations for different legislations 1126 % \item Building awareness of Taler as a bearer-based retail CBDC 1127 \item Perform independent security audits of Taler components 1128 \item Determine and possibly close gaps in the existing solution 1129 \end{itemize} 1130 \end{frame} 1131 1132 1133 \begin{frame}{Area II: Development/Research Extensions} 1134 \framesubtitle{Background: \url{https://myoralvillage.org/}} 1135 We have ideas for protocol extensions and ``programmable money'': 1136 \begin{itemize} 1137 \item Mediated wallet-to-wallet payments (instead of customer-to-merchant) 1138 \item Privacy-preserving auctions (trading, currency exchange) 1139 \item Age-restricted private payments for children (youth protection) 1140 \end{itemize} 1141 Central banks should also consider funding research to improve: 1142 \begin{itemize} 1143 \item General digital wallet usability and availability 1144 \item Accessibility features for illiterate and innumerate users 1145 \item Projects that facilitate integration at retailers 1146 \begin{itemize} 1147 \item Hardware and software support for embedded systems 1148 \item Integration into off-the-self E-commerce systems 1149 \end{itemize} 1150 \item Protocol extensions for automated tax reporting 1151 \end{itemize} 1152 \end{frame} 1153 1154 1155 \begin{frame}{How to support?} 1156 \begin{description} 1157 \item[Join:] {\small \url{https://lists.gnu.org/mailman/listinfo/taler}}, \\ 1158 \url{irc://irc.freenode.net/\#taler} 1159 \item[Develop:] \url{https://bugs.taler.net/}, \url{https://git.taler.net/} 1160 \item[Translate:] \url{https://weblate.taler.net/}, \url{translation-volunteer@taler.net} 1161 \item[Integrate:] \url{https://docs.taler.net/} 1162 \item[Donate:] \url{https://gnunet.org/ev} 1163 \item[Invest:] \url{https://taler-systems.com/} 1164 \end{description} 1165 \end{frame} 1166 1167 1168 \begin{frame} 1169 \frametitle{Do you have any questions?} 1170 \vfill 1171 References: 1172 {\tiny 1173 \begin{enumerate} 1174 \item{David Chaum, Christian Grothoff and Thomas Moser. 1175 {\em How to issue a central bank digital currency}. 1176 {\bf SNB Working Papers, 2021}.} 1177 \item{Christian Grothoff, Bart Polot and Carlo von Loesch. 1178 {\em The Internet is broken: Idealistic Ideas for Building a GNU Network}. 1179 {\bf W3C/IAB Workshop on Strengthening the Internet Against Pervasive Monitoring (STRINT)}, 2014.} 1180 \item{Jeffrey Burdges, Florian Dold, Christian Grothoff and Marcello Stanisci. 1181 {\em Enabling Secure Web Payments with GNU Taler}. 1182 {\bf SPACE 2016}.} 1183 \item{Florian Dold, Sree Harsha Totakura, Benedikt M\"uller, Jeffrey Burdges and Christian Grothoff. 1184 {\em Taler: Taxable Anonymous Libre Electronic Reserves}. 1185 Available upon request. 2016.} 1186 \item{Eli Ben-Sasson, Alessandro Chiesa, Christina Garman, Matthew Green, Ian Miers, Eran Tromer and Madars Virza. 1187 {\em Zerocash: Decentralized Anonymous Payments from Bitcoin}. 1188 {\bf IEEE Symposium on Security \& Privacy, 2016}.} 1189 \item{David Chaum, Amos Fiat and Moni Naor. 1190 {\em Untraceable electronic cash}. 1191 {\bf Proceedings on Advances in Cryptology, 1990}.} 1192 \item{Phillip Rogaway. 1193 {\em The Moral Character of Cryptographic Work}. 1194 {\bf Asiacrypt}, 2015.} \label{bib:rogaway} 1195 \end{enumerate} 1196 } 1197 \begin{center} 1198 {\bf Let money facilitate trade; but ensure capital serves society.} 1199 \end{center} 1200 \end{frame} 1201 1202 1203 \section{Integration with the core banking system} 1204 1205 \begin{frame} 1206 \vfill 1207 \begin{center} 1208 {\bf Part II: Integration with the core banking system} 1209 \end{center} 1210 \vfill 1211 \end{frame} 1212 1213 1214 \begin{frame} 1215 \frametitle{High-level Deployment Recipe} 1216 \dots as a bank 1217 \begin{enumerate} 1218 \item Create an escrow bank account for the exchange with EBICS access 1219 \item Provision offline signing machine (or account during testing) 1220 \item Provision two PostgreSQL databases (for LibEuFin Nexus and exchange) 1221 \item Provision user-facing exchange service and secmod processes 1222 \item Provision LibEuFin Nexus (connected to escrow account and providing 1223 an internal API to the exchange) 1224 \item Test using the ``taler-wallet-cli`` 1225 \end{enumerate} 1226 \end{frame} 1227 1228 1229 \begin{frame}{Exchange escrow account access} 1230 The Taler exchange needs to communicate with the core banking system \dots 1231 \begin{itemize} 1232 \item to query for transactions into the exchange's escrow account 1233 \item to initiate payments of aggregated Taler deposits to merchants 1234 \end{itemize} 1235 1236 In a Taler deployment, the \emph{Taler Wire Gateway} provides an API to the exchange 1237 for Taler-specific access to the Exchange's escrow account. Multiple implementations 1238 of the Taler Wire Gateway exist: 1239 1240 \begin{itemize} 1241 \item a self-contained play money demo bank 1242 \item LibEuFin, an adapter to EBICS and other protocols 1243 \end{itemize} 1244 1245 \end{frame} 1246 1247 \begin{frame}{LibEuFin} 1248 LibEuFin is a standalone project that provides adapters to bank account 1249 access APIs. 1250 1251 \begin{itemize} 1252 \item LibEuFin provides both a generic access layer and an 1253 implementation of the Taler Wire Gateway API for the exchange 1254 \item currently, only EBICS 2.5 is supported 1255 \item other APIs such as FinTS or PSD2-style XS2A APIs can be added 1256 without requiring changes to the Exchange 1257 \item tested with a GLS business account 1258 \end{itemize} 1259 \end{frame} 1260 1261 \begin{frame}{LibEuFin Concepts} 1262 \begin{itemize} 1263 \item A LibEuFin \emph{bank connection} is a set of credentials and parameters 1264 to talk to the bank's account access API. 1265 \item A LibEuFin \emph{bank account} is the information about a bank 1266 account (balances, transactions, payment initiations) stored locally 1267 within the LibEuFin service. A LibEuFin bank account has a default Bank 1268 Connection that is used to communicate with the bank's API. 1269 \item A \emph{facade} provides a domain-specific access layer to bank accounts 1270 and connections. The \emph{Taler Wire Gateway Facade} implements the 1271 API required by the Taler exchange and translates it to operations on the 1272 underlying account/connection. 1273 \end{itemize} 1274 \end{frame} 1275 1276 \begin{frame}{LibEuFin Tooling} 1277 \begin{itemize} 1278 \item \texttt{libeufin-nexus} is the main service 1279 \item Almost all configuration (except DB credentials) 1280 is stored in the database and managed via a RESTful HTTP API 1281 \item \texttt{libeufin-sandbox} implements a toy EBICS host for protocol 1282 testing 1283 \item \texttt{libeufin-cli} is client for the HTTP API (only implements a subset 1284 of available functionality) 1285 \end{itemize} 1286 \end{frame} 1287 1288 \begin{frame}{LibEuFin Setup Overview} 1289 \begin{itemize} 1290 \item Obtain EBICS subscriber configuration (host URL, host ID, user ID, 1291 partner ID) for the Exchange's escrow account 1292 \item Deploy the LibEuFin Nexus service 1293 \item Create a new LibEuFin bank connection (of type \texttt{ebics}) 1294 \item Export and back up the key material for the bank connection (contains 1295 EBICS subscriber configuration and private keys) 1296 \item Send subscriber initialization to the EBICS host (electronically) 1297 \item Export key letter and activate subscriber in the EBICS host (manually) 1298 \item Synchronize the bank connection 1299 \item Import the account into LibEuFin 1300 \item Create a Taler Wire Gateway facade 1301 \item Set up scheduled tasks for ingesting new transactions / sending payment 1302 initiations 1303 \end{itemize} 1304 \end{frame} 1305 1306 1307 1308 \begin{frame}{LibEuFin Implementation Limitations} 1309 \begin{itemize} 1310 \item LibEuFin is less stable than other Taler components, and future 1311 updates might contain breaking changes (tooling, APIs and database 1312 schema) 1313 \item Error handling and recovery is still rather primitive 1314 \item The Taler Wire Gateway does not yet implement automatic return 1315 transactions when transactions with a malformed subject (i.e. no reserve 1316 public key) are received 1317 \end{itemize} 1318 \end{frame} 1319 1320 \begin{frame}{LibEuFin EBICS Limitations} 1321 The GLS accounts with EBICS access that we have access to have some limitations: 1322 \begin{itemize} 1323 \item SEPA Instant Credit Transfers aren't supported yet 1324 \item Erroneous payment initiations are accepted by the GLS EBICS host, 1325 but an error message is later sent only by paper mail (and not reported 1326 by the CRZ download request) 1327 \item Limited access to transaction history (3 months) 1328 \end{itemize} 1329 \end{frame} 1330 1331 \begin{frame}[fragile]{LibEuFin Setup Guide} 1332 \vfill 1333 \begin{center} 1334 \url{https://docs.taler.net/libeufin/nexus-tutorial.html} 1335 \end{center} 1336 \vfill 1337 \end{frame} 1338 1339 1340 \section{Operator security considerations} 1341 1342 \begin{frame} 1343 \vfill 1344 \begin{center} 1345 {\bf Part III: Operator security considerations} 1346 \end{center} 1347 \vfill 1348 \end{frame} 1349 1350 1351 \begin{frame}{Key management} 1352 Taler has many types of keys: 1353 \begin{itemize} 1354 \item Coin keys 1355 \item Denomination keys 1356 \item Online message signing keys 1357 \item Offline key signing keys 1358 \item Merchant keys 1359 \item Auditor key 1360 \item Security module keys 1361 \item Transfer keys 1362 \item Wallet keys 1363 \item {\em TLS keys, DNSSEC keys} 1364 \end{itemize} 1365 \end{frame} 1366 1367 1368 \begin{frame}{Offline keys} 1369 Both exchange and auditor use offline keys. 1370 \begin{itemize} 1371 \item Those keys must be backed up and remain highly confidential! 1372 \item We recommend that computers that have ever had access to those 1373 keys to NEVER again go online. 1374 \item We recommend using a Raspberry Pi for offline key operations. 1375 Store it in a safe under multiple locks and keys. 1376 \item Apply full-disk encryption on offline-key signing systems. 1377 \item Have 3--5 full-disk backups of offline-key signing systems. 1378 \end{itemize} 1379 \begin{center} 1380 \includegraphics[scale=0.1]{pi.png} 1381 \end{center} 1382 \end{frame} 1383 1384 1385 \begin{frame}{Online keys} 1386 The exchange needs RSA and EdDSA keys to be available for online signing. 1387 \begin{itemize} 1388 \item Knowledge of these private keys will allow an adversary to 1389 mint digital cash, possibly resulting in huge financial losses 1390 (eventually, this will be detected by the auditor, but only 1391 after some financial losses have been irrevocably incurred). 1392 \item The corresponding public keys are certified using 1393 Taler's public key infrastructure (which uses offline-only keys). 1394 \end{itemize} 1395 \begin{center} 1396 \includegraphics[width=0.5\textwidth]{taler-diagram-signatures.png} 1397 \end{center} 1398 \vfill 1399 {\tt taler-exchange-offline} can also be used to {\bf revoke} the 1400 online signing keys, if we find they have been compromised. 1401 \vfill 1402 \end{frame} 1403 1404 1405 \begin{frame}{Protecting online keys} 1406 The exchange needs RSA and EdDSA keys to be available for online signing. 1407 \begin{itemize} 1408 \item {\tt taler-exchange-secmod-rsa} and {\tt taler-exchange-secmod-eddsa} 1409 are the only processes that must have access to the private keys. 1410 \item The secmod processes should run under a different UID, but share 1411 the same GID with the exchange. 1412 \item The secmods generate the keys, allow {\tt taler-exchange-httpd} to sign with 1413 them, and eventually delete the private keys. 1414 \item Communication between secmods and {\tt taler-exchange-httpd} is via 1415 a UNIX domain socket. 1416 \item Online private keys are stored on disk (not in database!) and should 1417 NOT be backed up (RAID should suffice). If disk is lost, we can always 1418 create fresh replacement keys! 1419 \end{itemize} 1420 \end{frame} 1421 1422 1423 \begin{frame}{Database} 1424 The exchange needs the database to detect double spending. 1425 \begin{itemize} 1426 \item Loss of the database will allow technically skilled people 1427 to double-spend their digital cash, possibly resulting in 1428 significant financial losses. 1429 \item The database contains total amounts customers withdrew and 1430 merchants received, so sensitive private banking data. It 1431 must also not become public. 1432 \item The auditor must have a (current) copy. Asynchronous replication 1433 is considered sufficient. This copy could also be used as an 1434 additional (off-site?) backup. 1435 \end{itemize} 1436 \end{frame} 1437 1438 1439 \begin{frame}{taler-exchange-wirewatch} 1440 {\tt taler-exchange-wirewatch} needs credentials to access data about 1441 incoming wire transfers from the Nexus. 1442 \begin{itemize} 1443 \item This tool should run as a separate UID and GID (from 1444 {\tt taler-exchange-httpd}). 1445 \item It must have access to the Postgres database (SELECT + INSERT). 1446 \item Its configuration file contains the credentials to talk to Nexus. 1447 \item[$\Rightarrow$] Configuration should be separate from {\tt taler-exchange-httpd}. 1448 \end{itemize} 1449 \end{frame} 1450 1451 1452 \begin{frame}{taler-exchange-transfer} 1453 Only {\tt taler-exchange-transfer} needs credentials to initiate wire 1454 transfers using the Nexus. 1455 \begin{itemize} 1456 \item This tool should run as a separate UID and GID (from 1457 {\tt taler-exchange-httpd}). 1458 \item It must have access to the Postgres database (SELECT + INSERT). 1459 \item Its configuration file contains the credentials to talk to Nexus. 1460 \item[$\Rightarrow$] Configuration should be separate from {\tt taler-exchange-httpd}. 1461 \end{itemize} 1462 \end{frame} 1463 1464 1465 \begin{frame}{Nexus} 1466 The Nexus has to be able to interact with the escrow account of the bank. 1467 \begin{itemize} 1468 \item It must have the private keys to sign EBICS/FinTS messages. 1469 \item It also has its own local database. 1470 \item The Nexus user and database should be kept separate from 1471 the other exchange users and the Taler exchange database. 1472 \end{itemize} 1473 \end{frame} 1474 1475 1476 \begin{frame}{Hardware} 1477 General notions: 1478 \begin{itemize} 1479 \item Platforms with disabled Intel ME \& disabled remote administration are safer. 1480 \item VMs are not a security mechanism. Side-channel attacks abound. Avoid running any 1481 Taler component in a virtual machine ``for security''. 1482 \end{itemize} 1483 \end{frame} 1484 1485 1486 \begin{frame}{Operating system} 1487 General notions: 1488 \begin{itemize} 1489 \item It should be safe to run the different Taler components (including Nginx, Nexus 1490 and Postgres) all on the same physical hardware (under different UIDs/GIDs). 1491 We would separate them onto different physical machines during scale-out, but not 1492 necessarily for ``basic'' security. 1493 \item Limiting and auditing system administrator access will be crucial. 1494 \item We recommend to {\bf not} use any anti-virus. 1495 \item We recommend using a well-supported GNU/Linux operating system (such as 1496 Debian or Ubuntu). 1497 \end{itemize} 1498 \end{frame} 1499 1500 1501 \begin{frame}{Network} 1502 \begin{itemize} 1503 \item We recommend to {\bf not} use any host-based firewall. 1504 Taler components can use UNIX domain sockets (or bind to localhost). 1505 \item A network-based 1506 firewall is not required, but as long as TCP 80/443 are open Taler should 1507 work fine. 1508 \item Any firewall must be configured to permit connection to Auditor 1509 for database synchronization. 1510 \item We recommend running the Taler exchange behind an Nginx or Apache 1511 proxy for TLS termination. 1512 \item We recommend using static IP address configurations (IPv4 and IPv6). 1513 \item We recommend using DNSSEC with DANE in addition to TLS certificates. 1514 \item We recommend auditing the TLS setup using \url{https://observatory.mozilla.org}. 1515 \end{itemize} 1516 \end{frame} 1517 1518 1519 \section{Integration considerations} 1520 1521 \begin{frame} 1522 \vfill 1523 \begin{center} 1524 {\bf Part IV: Integration considerations} 1525 \end{center} 1526 \vfill 1527 \end{frame} 1528 1529 1530 \begin{frame}[fragile]{RFC 8905: \texttt{payto:} Uniform Identifiers for Payments and Accounts} 1531 \vfill 1532 Like \texttt{mailto:}, but for bank accounts instead of email accounts! 1533 \vfill 1534 \begin{verbatim} 1535 payto://<PAYMENT-METHOD>/<ACCOUNT-NR> 1536 ?subject=InvoiceNr42 1537 &amount=EUR:12.50 1538 \end{verbatim} 1539 \vfill 1540 Default action: Open app to review and confirm payment. 1541 \vfill 1542 \includegraphics[width=0.25\textwidth]{einzahlschein-ch.jpeg} 1543 \hfill 1544 \includegraphics[width=0.2\textwidth]{de-ueberweisungsformular.png} 1545 \vfill 1546 \end{frame} 1547 1548 1549 \begin{frame}[fragile]{Benefits of {\tt payto://}} 1550 \begin{itemize} 1551 \item Standardized way to represent financial resources (bank account, bitcoin wallet) 1552 and payments to them 1553 \item Useful on the client-side on the Web and for FinTech backend applications 1554 \item Payment methods (such as IBAN, ACH, Bitcoin) are registered with 1555 IANA and allow extra options 1556 \end{itemize} 1557 \begin{center} 1558 {\bf Taler wallet can generate payto://-URI for withdraw!} 1559 \end{center} 1560 \end{frame} 1561 1562 1563 1564 \end{document} 1565 1566 1567 1568 1569 \begin{frame}{Taler {\tt /withdraw/sign}} 1570 % Customer withdrawing coins with blind signatures 1571 % \bigskip 1572 \begin{figure}[th] 1573 \begin{minipage}[b]{0.45\linewidth} 1574 \begin{center} 1575 \begin{tikzpicture}[scale = 0.4, 1576 transform shape, 1577 msglabel/.style = { text = Black, yshift = .3cm, 1578 sloped, midway }, 1579 okmsg/.style = { ->, color = MidnightBlue, thick, 1580 >=stealth }, 1581 rstmsg/.style = { ->, color = BrickRed, thick, 1582 >=stealth } 1583 ] 1584 \node[draw = MidnightBlue, 1585 fill = CornflowerBlue, 1586 minimum width = .3cm, 1587 minimum height = 10cm 1588 ] (h1) at (-4, 0) {}; 1589 \node[draw = MidnightBlue, 1590 fill = CornflowerBlue, 1591 minimum width = .3cm, 1592 minimum height = 10cm 1593 ] (h2) at (4, 0) {}; 1594 \node[above = 0cm of h1] {Wallet}; 1595 \node[above = 0cm of h2] {Exchange}; 1596 1597 \path[->, color = MidnightBlue, very thick, >=stealth] 1598 (-5, 4.5) edge 1599 node[rotate=90, text = Black, yshift = .3cm] {Time} 1600 (-5, -4.5); 1601 \path[okmsg, dashed] 1602 ($(h1.east)+(0, 4.0)+(0, -1.0)$) edge 1603 node[msglabel] {SEPA(RK,A)} 1604 ($(h2.west)+(0, 3.5)+(0, -1.0)$); 1605 \path[okmsg] 1606 ($(h1.east)+(0, -1.0)$) edge 1607 node[msglabel] {POST {\tt /withdraw/sign} $S_{RK}(DK, B_b(C))$} 1608 ($(h2.west)+(0, -1.5)$); 1609 \path[okmsg] 1610 ($(h2.west)+(0, -2.0)$) edge 1611 node[msglabel] {200 OK: $S_{DK}(B_b(C))$)} 1612 ($(h1.east)+(0, -2.5)$); 1613 \path[rstmsg] 1614 ($(h2.west)+(0, -3.5)$) edge 1615 node[msglabel] {402 PAYMENT REQUIRED: $S_{RK}(DK, B_b(C))$)} 1616 ($(h1.east)+(0, -4)$); 1617 \node at (5.3, 0) {}; 1618 \end{tikzpicture} 1619 \end{center} 1620 Result: $\langle c, S_{DK}(C) \rangle$. 1621 \end{minipage} 1622 \hspace{0.5cm} 1623 \begin{minipage}[b]{0.45\linewidth} 1624 \tiny 1625 \begin{description} 1626 \item[$A$] Some amount, $A \ge A_{DK}$ 1627 \item[$RK$] Reserve key 1628 \item[$DK$] Denomination key 1629 \item[$b$] Blinding factor 1630 \item[$B_b()$] RSA-FDH blinding % DK supressed 1631 \item[$C$] Coin public key $C := cG$ 1632 \item[$S_{RK}()$] EdDSA signature 1633 \item[$S_{DK}()$] RSA-FDH signature 1634 \end{description} 1635 \end{minipage} 1636 \end{figure} 1637 \end{frame} 1638 1639 1640 \begin{frame}[t]{Taler {\tt /deposit}} 1641 Merchant and exchange see only the public coin $\langle C, S_{DK}(C) \rangle$. 1642 \bigskip 1643 \begin{figure}[th] 1644 \begin{minipage}[b]{0.45\linewidth} 1645 \begin{center} 1646 \begin{tikzpicture}[scale = 0.4, 1647 transform shape, 1648 msglabel/.style = { text = Black, yshift = .3cm, 1649 sloped, midway }, 1650 okmsg/.style = { ->, color = MidnightBlue, thick, 1651 >=stealth }, 1652 rstmsg/.style = { ->, color = BrickRed, thick, 1653 >=stealth } 1654 ] 1655 \node[draw = MidnightBlue, 1656 fill = CornflowerBlue, 1657 minimum width = .3cm, 1658 minimum height = 10cm 1659 ] (h1) at (-4, 0) {}; 1660 \node[draw = MidnightBlue, 1661 fill = CornflowerBlue, 1662 minimum width = .3cm, 1663 minimum height = 10cm 1664 ] (h2) at (4, 0) {}; 1665 \node[above = 0cm of h1] {Merchant}; 1666 \node[above = 0cm of h2] {Exchange}; 1667 1668 \path[->, color = MidnightBlue, very thick, >=stealth] 1669 (-5, 4.5) edge 1670 node[rotate=90, text = Black, yshift = .3cm] {Time} 1671 (-5, -4.5); 1672 \path[->, color = MidnightBlue, thick, >=stealth] 1673 ($(h1.east)+(0,3)$) edge 1674 node[text = Black, yshift = .3cm, sloped] {POST {\tt /deposit} $S_{DK}(C), S_{c}(D)$} 1675 ($(h2.west)+(0,2)$); 1676 \path[->, color = MidnightBlue, thick, >=stealth] 1677 ($(h2.west)+(0,0.5)$) edge 1678 node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(S_{c}(D))$} 1679 ($(h1.east)+(0,-0.5)$); 1680 \path[rstmsg] 1681 ($(h2.west)+(0, -2.5)$) edge 1682 node[msglabel] {409 CONFLICT: $S_{c}(D')$} 1683 ($(h1.east)+(0, -3.5)$); 1684 \node at (5.3, 0) {}; 1685 \end{tikzpicture} 1686 \end{center} 1687 \end{minipage} 1688 \hspace{0.5cm} 1689 \begin{minipage}[b]{0.45\linewidth} 1690 \tiny 1691 \begin{description} 1692 \item[$DK$] Denomination key 1693 \item[$S_{DK}()$] RSA-FDH signature using $DK$ 1694 \item[$c$] Private coin key, $C := cG$. 1695 \item[$S_{C}()$] EdDSA signature using $c$ 1696 \item[$D$] Deposit details 1697 \item[$SK$] Exchange's signing key 1698 \item[$S_{SK}()$] EdDSA signature using $SK$ 1699 \item[$D'$] Conficting deposit details $D' \not= D$ 1700 \end{description} 1701 \end{minipage} 1702 \end{figure} 1703 \end{frame} 1704 1705 1706 \begin{frame}{Taler {\tt /refresh/melt}} 1707 \begin{figure}[th] 1708 \begin{minipage}[b]{0.45\linewidth} 1709 \begin{center} 1710 \begin{tikzpicture}[scale = 0.4, 1711 transform shape, 1712 msglabel/.style = { text = Black, yshift = .3cm, 1713 sloped, midway }, 1714 okmsg/.style = { ->, color = MidnightBlue, thick, 1715 >=stealth }, 1716 rstmsg/.style = { ->, color = BrickRed, thick, 1717 >=stealth } 1718 ] 1719 \node[draw = MidnightBlue, 1720 fill = CornflowerBlue, 1721 minimum width = .3cm, 1722 minimum height = 10cm 1723 ] (h1) at (-4, 0) {}; 1724 \node[draw = MidnightBlue, 1725 fill = CornflowerBlue, 1726 minimum width = .3cm, 1727 minimum height = 10cm 1728 ] (h2) at (4, 0) {}; 1729 \node[above = 0cm of h1] {Customer}; 1730 \node[above = 0cm of h2] {Exchange}; 1731 1732 \path[->, color = MidnightBlue, very thick, >=stealth] 1733 (-5, 4.5) edge 1734 node[rotate=90, text = Black, yshift = .3cm] {Time} 1735 (-5, -4.5); 1736 \path[->, color = MidnightBlue, thick, >=stealth] 1737 ($(h1.east)+(0,3)$) edge 1738 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/melt} $S_{DK}(C), S_c({\cal DK}, {\cal T},{\cal B})$} 1739 ($(h2.west)+(0,2)$); 1740 \path[->, color = MidnightBlue, thick, >=stealth] 1741 ($(h2.west)+(0,0.5)$) edge 1742 node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(H({\cal T}, {\cal B}),\gamma)$} 1743 ($(h1.east)+(0,-0.5)$); 1744 \path[rstmsg] 1745 ($(h2.west)+(0, -2.5)$) edge 1746 node[msglabel] {409 CONFLICT: $S_{C}(X), \ldots$} 1747 ($(h1.east)+(0, -3.5)$); 1748 \node at (5.3, 0) {}; 1749 \end{tikzpicture} 1750 \end{center} 1751 \end{minipage} 1752 \hspace{0.5cm} 1753 \begin{minipage}[b]{0.45\linewidth} 1754 \tiny 1755 \begin{description} 1756 \item[$\kappa$] System-wide security parameter, usually 3. 1757 \\ \smallskip 1758 \item[$\cal DK$] $:= [DK^{(i)}]_i$ \\ List of denomination keys \\ 1759 $D + \sum_i A_{DK^{(i)}} < A_{DK}$ 1760 \item[$t_j$] Random scalar for $j<\kappa$ 1761 \item[${\cal T}$] $:= [T_j]_\kappa$ where $T_j = t_j G$ 1762 \item[$k_j$] $:= c T_j = t_j C$ is an ECDHE 1763 \item[$b_j^{(i)}$] $:= KDF_b(k_j,i)$ % blinding factor 1764 \item[$c_j^{(i)}$] $:= KDF_c(k_j,i)$ % coin secret keys 1765 \item[$C_j^{(i)}$] $: = c_j^{(i)} G$ % new coin publics % keys 1766 \item[${\cal B}$] $:= [H( \beta_j )]_\kappa$ where \\ 1767 $\beta_j := \left[ B_{b_j^{(i)}}(C_j^{(i)}) \right]_i$ 1768 \\ \smallskip 1769 \item[$\gamma$] Random value in $[0,\kappa)$ 1770 % \\ \smallskip 1771 % \item[$X$] Deposit or refresh 1772 \end{description} 1773 \end{minipage} 1774 \end{figure} 1775 \end{frame} 1776 1777 1778 \begin{frame}{Taler {\tt /refresh/reveal}} 1779 \begin{figure}[th] 1780 \begin{minipage}[b]{0.45\linewidth} 1781 \begin{center} 1782 \begin{tikzpicture}[scale = 0.4, 1783 transform shape, 1784 msglabel/.style = { text = Black, yshift = .3cm, 1785 sloped, midway }, 1786 okmsg/.style = { ->, color = MidnightBlue, thick, 1787 >=stealth }, 1788 rstmsg/.style = { ->, color = BrickRed, thick, 1789 >=stealth } 1790 ] 1791 \node[draw = MidnightBlue, 1792 fill = CornflowerBlue, 1793 minimum width = .3cm, 1794 minimum height = 10cm 1795 ] (h1) at (-4, 0) {}; 1796 \node[draw = MidnightBlue, 1797 fill = CornflowerBlue, 1798 minimum width = .3cm, 1799 minimum height = 10cm 1800 ] (h2) at (4, 0) {}; 1801 \node[above = 0cm of h1] {Customer}; 1802 \node[above = 0cm of h2] {Exchange}; 1803 1804 \path[->, color = MidnightBlue, very thick, >=stealth] 1805 (-5, 4.5) edge 1806 node[rotate=90, text = Black, yshift = .3cm] {Time} 1807 (-5, -4.5); 1808 \path[->, color = MidnightBlue, thick, >=stealth] 1809 ($(h1.east)+(0,3)$) edge 1810 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/reveal} $H({\cal T}, {\cal B}), {\tilde{\cal T}}, \beta_\gamma$} 1811 ($(h2.west)+(0,2)$); 1812 \path[->, color = MidnightBlue, thick, >=stealth] 1813 ($(h2.west)+(0,0.5)$) edge 1814 node[text = Black, yshift = .3cm, sloped] {200 OK: $\cal S$} 1815 ($(h1.east)+(0,-0.5)$); 1816 \path[rstmsg] 1817 ($(h2.west)+(0, -2.5)$) edge 1818 node[msglabel] {400 BAD REQUEST: $Z$} 1819 ($(h1.east)+(0, -3.5)$); 1820 \node at (5.3, 0) {}; 1821 \end{tikzpicture} 1822 \end{center} 1823 \end{minipage} 1824 \hspace{0.5cm} 1825 \begin{minipage}[b]{0.45\linewidth} 1826 \tiny 1827 \begin{description} 1828 \item[$\cal DK$] $:= [DK^{(i)}]_i$ 1829 \item[$t_j$] .. \\ \smallskip 1830 1831 \item[$\tilde{\cal T}$] $:= [t_j | j \in \kappa, j \neq \gamma]$ \\ \smallskip 1832 1833 \item[$k_\gamma$] $:= c T_\gamma = t_\gamma C$ 1834 \item[$b_\gamma^{(i)}$] $:= KDF_b(k_\gamma,i)$ 1835 \item[$c_\gamma^{(i)}$] $:= KDF_c(k_\gamma,i)$ 1836 \item[$C_\gamma^{(i)}$] $: = c_\gamma^{(i)} G$ 1837 1838 \item[$B_\gamma^{(i)}$] $:= B_{b_\gamma^{(i)}}(C_\gamma^{(i)})$ 1839 \item[$\beta_\gamma$] $:= \big[ B_\gamma^{(i)} \big]_i$ 1840 \item[$\cal S$] $:= \left[ S_{DK^{(i)}}( B_\gamma^{(i)} ) \right]_i$ \\ \smallskip 1841 1842 \item[$Z$] Cut-and-choose missmatch information 1843 \end{description} 1844 \end{minipage} 1845 \end{figure} 1846 \end{frame} 1847 1848 1849 \begin{frame}{Taler {\tt /refresh/link}} 1850 \begin{figure}[th] 1851 \begin{minipage}[b]{0.45\linewidth} 1852 \begin{center} 1853 \begin{tikzpicture}[scale = 0.4, 1854 transform shape, 1855 msglabel/.style = { text = Black, yshift = .3cm, 1856 sloped, midway }, 1857 okmsg/.style = { ->, color = MidnightBlue, thick, 1858 >=stealth }, 1859 rstmsg/.style = { ->, color = BrickRed, thick, 1860 >=stealth } 1861 ] 1862 \node[draw = MidnightBlue, 1863 fill = CornflowerBlue, 1864 minimum width = .3cm, 1865 minimum height = 10cm 1866 ] (h1) at (-4, 0) {}; 1867 \node[draw = MidnightBlue, 1868 fill = CornflowerBlue, 1869 minimum width = .3cm, 1870 minimum height = 10cm 1871 ] (h2) at (4, 0) {}; 1872 \node[above = 0cm of h1] {Customer}; 1873 \node[above = 0cm of h2] {Exchagne}; 1874 1875 \path[->, color = MidnightBlue, very thick, >=stealth] 1876 (-5, 4.5) edge 1877 node[rotate=90, text = Black, yshift = .3cm] {Time} 1878 (-5, -4.5); 1879 \path[->, color = MidnightBlue, thick, >=stealth] 1880 ($(h1.east)+(0,3)$) edge 1881 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/link} $C$} 1882 ($(h2.west)+(0,2)$); 1883 \path[->, color = MidnightBlue, thick, >=stealth] 1884 ($(h2.west)+(0,0.5)$) edge 1885 node[text = Black, yshift = .3cm, sloped] {200 OK: $T_\gamma$} 1886 ($(h1.east)+(0,-0.5)$); 1887 \path[rstmsg] 1888 ($(h2.west)+(0, -2.5)$) edge 1889 node[msglabel] {404 NOT FOUND} 1890 ($(h1.east)+(0, -3.5)$); 1891 \node at (5.3, 0) {}; 1892 \end{tikzpicture} 1893 \end{center} 1894 \end{minipage} 1895 \hspace{0.5cm} 1896 \begin{minipage}[b]{0.45\linewidth} 1897 \tiny 1898 \begin{description} 1899 \item[$C$] Old coind public key \\ \smallskip 1900 \item[$T_\gamma$] Linkage data $\cal L$ at $\gamma$ 1901 \end{description} 1902 \end{minipage} 1903 \end{figure} 1904 \end{frame} 1905 1906 1907 \begin{frame}{Operational security} 1908 \begin{center} 1909 \resizebox{\textwidth}{!}{ 1910 \begin{tikzpicture}[ 1911 font=\sffamily, 1912 every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm}, 1913 source/.style={draw,thick,rounded corners,fill=green!20,inner sep=.3cm}, 1914 process/.style={draw,thick,circle,fill=blue!20}, 1915 sink/.style={source,fill=green!20}, 1916 datastore/.style={draw,very thick,shape=datastore,inner sep=.3cm}, 1917 dots/.style={gray,scale=2}, 1918 to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize}, 1919 every node/.style={align=center}] 1920 1921 % Position the nodes using a matrix layout 1922 \matrix{ 1923 \node[source] (wallet) {Wallet}; 1924 \& \node[process] (browser) {Browser}; 1925 \& \node[process] (shop) {Web shop}; 1926 \& \node[sink] (backend) {Taler backend}; \\ 1927 }; 1928 1929 % Draw the arrows between the nodes and label them. 1930 \draw[to] (browser) to[bend right=50] node[midway,above] {(4) signed contract} 1931 node[midway,below] {(signal)} (wallet); 1932 \draw[to] (wallet) to[bend right=50] node[midway,above] {(signal)} 1933 node[midway,below] {(5) signed coins} (browser); 1934 \draw[<->] (browser) -- node[midway,above] {(3,6) custom} 1935 node[midway,below] {(HTTPS)} (shop); 1936 \draw[to] (shop) to[bend right=50] node[midway,above] {(HTTPS)} 1937 node[midway,below] {(1) proposed contract / (7) signed coins} (backend); 1938 \draw[to] (backend) to[bend right=50] node[midway,above] {(2) signed contract / (8) confirmation} 1939 node[midway,below] {(HTTPS)} (shop); 1940 \end{tikzpicture} 1941 } 1942 \end{center} 1943 \end{frame}