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