bank.tex (47340B)
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 \usepackage{adjustbox} 9 \definecolor{shadecolor}{rgb}{0.8,0.8,0.8} 10 \usetheme{boxes} 11 \setbeamertemplate{navigation symbols}{} 12 \usepackage{xcolor} 13 \usepackage{tikz,eurosym} 14 \usepackage[normalem]{ulem} 15 \usepackage{listings} 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{Deployment Plan 2021} 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{F. Dold, C. Grothoff, L. Schumacher} 107 \date{\today} 108 \institute{Taler Systems SA} 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-2020.jpg} 121 \end{center} 122 \begin{textblock*}{4cm}(.5cm,6.5cm) % {block width} (coords) 123 {\Large {\bf \url{taler.net}} \\ 124 IRC{\bf \#taler} \\ 125 {\small (on freenode)} \\ 126 twitter@taler \\ 127 mail@taler.net } 128 \end{textblock*} 129 130 % Substitute based on who is giving the talk! 131 \begin{textblock*}{6cm}(6.7cm,7.7cm) % {block width} (coords) 132 {\hfill {\Large {\bf Florian Dold \&} \\ 133 \hfill {\bf Christian Grothoff}} \\ 134 \hfill \{dold,grothoff\}@taler.net } 135 \end{textblock*} 136 137 \end{frame} 138 139 140 \section{Introduction} 141 142 \begin{frame}{What is Taler?} 143 \vfill 144 \begin{center} 145 \includegraphics[width=0.7\textwidth]{operations.png} 146 \end{center} 147 \end{frame} 148 149 150 \begin{frame}{Design goals for the GNU Taler Payment System} 151 GNU Taler must ... 152 \begin{enumerate} 153 \item {... be implemented as {\bf free software}.} 154 \item {... protect the {\bf privacy of buyers}.} 155 \item {... must enable the state to {\bf tax income} and crack down on 156 illegal business activities.} 157 \item {... prevent payment fraud.} 158 \item {... only {\bf disclose the minimal amount of information 159 necessary}.} 160 \item {... be usable.} 161 \item {... be efficient.} 162 \item {... avoid single points of failure.} 163 \item {... foster {\bf competition}.} 164 \end{enumerate} 165 \end{frame} 166 167 168 \section{Architecture} 169 170 \begin{frame} 171 \vfill 172 \begin{center} 173 {\bf Part I: Architecture} 174 \end{center} 175 \vfill 176 \end{frame} 177 178 179 \begin{frame}{Taler Overview} 180 \begin{center} 181 \begin{tikzpicture} 182 \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em]; 183 \node (origin) at (0,0) {}; 184 \node (exchange) [def,above=of origin,draw]{Exchange}; 185 \node (customer) [def, draw, below left=of origin] {Customer}; 186 \node (merchant) [def, draw, below right=of origin] {Merchant}; 187 \node (auditor) [def, draw, above right=of origin]{Auditor}; 188 189 \tikzstyle{C} = [color=black, line width=1pt] 190 191 \draw [<-, C] (customer) -- (exchange) node [midway, above, sloped] (TextNode) {withdraw coins}; 192 \draw [<-, C] (exchange) -- (merchant) node [midway, above, sloped] (TextNode) {deposit coins}; 193 \draw [<-, C] (merchant) -- (customer) node [midway, above, sloped] (TextNode) {spend coins}; 194 \draw [<-, C] (exchange) -- (auditor) node [midway, above, sloped] (TextNode) {verify}; 195 196 \end{tikzpicture} 197 \end{center} 198 \end{frame} 199 200 201 \begin{frame}[fragile]{Taler: Bank Perspective} 202 \begin{adjustbox}{max totalsize={.9\textwidth}{.7\textheight},center} 203 \begin{tikzpicture} 204 \tikzstyle{def} = [node distance= 5em and 6.5em, inner sep=1em, outer sep=.3em]; 205 \node (origin) at (0,0) {}; 206 \node (exchange) [def,above=of origin,draw]{Exchange}; 207 \node (nexus) [def, draw, below right=of exchange] {Nexus}; 208 \node (corebanking) [def, draw, below left=of nexus] {Core Banking}; 209 \node (nginx) [def, draw, above=of exchange]{Nginx}; 210 \node (postgres) [def, draw, below left=of exchange]{Postgres}; 211 \node (postgres-nexus) [def, draw, below right=of nexus]{Postgres}; 212 213 \tikzstyle{C} = [color=black, line width=1pt] 214 215 \draw [<-, C] (exchange) -- (nginx) node [midway, above, sloped] (TextNode) {REST API}; 216 \draw [<-, C] (postgres) -- (exchange) node [midway, above, sloped] (TextNode) {SQL}; 217 \draw [<-, C] (postgres-nexus) -- (nexus) node [midway, above, sloped] (TextNode) {SQL}; 218 \draw [<-, C] (nexus) -- (exchange) node [midway, above, sloped] (TextNode) {Internal REST API}; 219 \draw [<-, C] (corebanking) -- (nexus) node [midway, above, sloped] (TextNode) {EBICS/FinTS}; 220 221 \end{tikzpicture} 222 \end{adjustbox} 223 \end{frame} 224 225 226 \begin{frame}{Taler: Exchange Details} 227 \begin{center} 228 \begin{tikzpicture} 229 \tikzstyle{def} = [node distance=2em and 2.5em, inner sep=1em, outer sep=.3em]; 230 \node (origin) at (0,0) {}; 231 \node (httpd) [def,above=of origin,draw]{httpd}; 232 \node (secmod-rsa) [def, draw, right=of httpd] {secmod-rsa}; 233 \node (secmod-eddsa) [def, draw, left=of httpd] {secmod-eddsa}; 234 \node (postgres) [def, draw, below=of httpd]{Postgres}; 235 \node (aggregator) [def, draw, right=of postgres]{aggregator}; 236 \node (transfer) [def, draw, below left=of postgres]{transfer}; 237 \node (wirewatch) [def, draw, below right=of postgres]{wirewatch}; 238 \node (nexus) [def, draw, below=of postgres]{Nexus}; 239 240 \tikzstyle{C} = [color=black, line width=1pt] 241 242 \draw [<->, C] (httpd) -- (postgres) node [midway, above, sloped] (TextNode) {}; 243 \draw [<->, C] (httpd) -- (secmod-rsa) node [midway, above, sloped] (TextNode) {}; 244 \draw [<->, C] (httpd) -- (secmod-eddsa) node [midway, above, sloped] (TextNode) {}; 245 \draw [<->, C] (aggregator) -- (postgres) node [midway, above, sloped] (TextNode) {}; 246 \draw [<->, C] (wirewatch) -- (postgres) node [midway, above, sloped] (TextNode) {}; 247 \draw [<->, C] (transfer) -- (postgres) node [midway, above, sloped] (TextNode) {}; 248 \draw [->, C] (transfer) -- (nexus) node [midway, above, sloped] (TextNode) {}; 249 \draw [<-, C] (wirewatch) -- (nexus) node [midway, above, sloped] (TextNode) {}; 250 \end{tikzpicture} 251 \end{center} 252 \end{frame} 253 254 255 \begin{frame} 256 \frametitle{Taler: Auditor Details} 257 \begin{center} 258 \begin{tikzpicture} 259 \tikzstyle{def} = [node distance=2em and 2.5em, inner sep=1em, outer sep=.3em]; 260 \node (origin) at (0,0) {}; 261 \node (httpd) [def,above left=of origin,draw]{auditor-httpd}; 262 \node (report) [def,above right=of origin,draw]{auditor-report}; 263 \node (postgres-A) [def, draw, below=of origin] {Postgres (Auditor)}; 264 \node (postgres-E) [def, draw, below=of postgres-A] {Postgres (Bank)}; 265 266 \tikzstyle{C} = [color=black, line width=1pt] 267 268 \draw [->, C] (postgres-E) -- (postgres-A) node [midway, above, sloped] (TextNode) {sync}; 269 \draw [<->, C] (httpd) -- (postgres-A) node [midway, above, sloped] (TextNode) {}; 270 \draw [<->, C] (report) -- (postgres-A) node [midway, above, sloped] (TextNode) {}; 271 \end{tikzpicture} 272 \end{center} 273 \end{frame} 274 275 276 \begin{frame} 277 \frametitle{Taler: Merchant Details} 278 \begin{center} 279 \begin{tikzpicture} 280 \tikzstyle{def} = [node distance= 5em and 4.5em, inner sep=1em, outer sep=.3em]; 281 \node (origin) at (0,0) {}; 282 \node (frontend) [def,above=of origin,draw]{merchant-frontend}; 283 \node (backend) [def,below=of frontend,draw]{taler-backend}; 284 \node (postgres) [def, draw, below left=of backend] {Postgres}; 285 \node (sqlite) [def, draw, below=of backend] {Sqlite}; 286 \node (alt) [def, draw, below right=of backend] {...}; 287 288 \tikzstyle{C} = [color=black, line width=1pt] 289 290 \draw [->, C] (frontend) -- (backend) node [midway, above, sloped] (TextNode) {REST API}; 291 \draw [<->, C] (backend) -- (postgres) node [midway, above, sloped] (TextNode) {SQL}; 292 \draw [<->, C] (backend) -- (sqlite) node [midway, above, sloped] (TextNode) {SQL}; 293 \draw [<->, C] (backend) -- (alt) node [midway, above, sloped] (TextNode) {SQL}; 294 \end{tikzpicture} 295 \end{center} 296 \end{frame} 297 298 299 \begin{frame} 300 \frametitle{Taler: Wallet Details} 301 \begin{center} 302 \begin{tikzpicture} 303 \tikzstyle{def} = [node distance= 5em and 4.5em, inner sep=1em, outer sep=.3em]; 304 \node (origin) at (0,0) {}; 305 \node (gui) [def,above=of origin,draw]{wallet-gui}; 306 \node (core) [def,below=of gui,draw]{wallet-core}; 307 \node (sync) [def, draw, below left=of core] {Sync}; 308 \node (taler) [def, draw, below right=of core] {Taler}; 309 \node (anastasis) [def, draw, below=of core] {Anastasis}; 310 311 \tikzstyle{C} = [color=black, line width=1pt] 312 \draw [<->, C] (gui) -- (core) node [midway, above, sloped] (TextNode) {}; 313 \draw [<->, C] (core) -- (sync) node [midway, above, sloped] (TextNode) {Backup}; 314 \draw [<->, C] (core) -- (taler) node [midway, above, sloped] (TextNode) {Payment}; 315 \draw [<->, C] (core) -- (anastasis) node [midway, above, sloped] (TextNode) {Key Escrow}; 316 \end{tikzpicture} 317 \end{center} 318 \end{frame} 319 320 \begin{frame} 321 \frametitle{High-level Deployment Recipe} 322 \dots as a bank 323 \begin{enumerate} 324 \item Create an escrow bank account for the exchange with EBICS access 325 \item Provision offline signing machine (or account during testing) 326 \item Provision two PostgreSQL databases (for LibEuFin Nexus and exchange) 327 \item Provision user-facing exchange service and secmod processes 328 \item Provision LibEuFin Nexus (connected to escrow account and providing 329 an internal API to the exchange) 330 \item Test using the ``taler-wallet-cli`` 331 \end{enumerate} 332 \end{frame} 333 334 335 \section{Integration with the core banking system} 336 337 \begin{frame} 338 \vfill 339 \begin{center} 340 {\bf Part II: Integration with the core banking system} 341 \end{center} 342 \vfill 343 \end{frame} 344 345 \begin{frame}{Exchange escrow account access} 346 The Taler exchange needs to communicate with the core banking system \dots 347 \begin{itemize} 348 \item to query for transactions into the exchange's escrow account 349 \item to initiate payments of aggregated Taler deposits to merchants 350 \end{itemize} 351 352 In a Taler deployment, the \emph{Taler Wire Gateway} provides an API to the exchange 353 for Taler-specific access to the Exchange's escrow account. Multiple implementations 354 of the Taler Wire Gateway exist: 355 356 \begin{itemize} 357 \item a self-contained play money demo bank 358 \item LibEuFin, an adapter to EBICS and other protocols 359 \end{itemize} 360 361 \end{frame} 362 363 \begin{frame}{LibEuFin} 364 LibEuFin is a standalone project that provides adapters to bank account 365 access APIs. 366 367 \begin{itemize} 368 \item LibEuFin provides both a generic access layer and an 369 implementation of the Taler Wire Gateway API for the exchange 370 \item currently, only EBICS 2.5 is supported 371 \item other APIs such as FinTS or PSD2-style XS2A APIs can be added 372 without requiring changes to the Exchange 373 \item tested with a GLS business account 374 \end{itemize} 375 \end{frame} 376 377 \begin{frame}{LibEuFin Concepts} 378 \begin{itemize} 379 \item A LibEuFin \emph{bank connection} is a set of credentials and parameters 380 to talk to the bank's account access API. 381 \item A LibEuFin \emph{bank account} is the information about a bank 382 account (balances, transactions, payment initiations) stored locally 383 within the LibEuFin service. A LibEuFin bank account has a default Bank 384 Connection that is used to communicate with the bank's API. 385 \item A \emph{facade} provides a domain-specific access layer to bank accounts 386 and connections. The \emph{Taler Wire Gateway Facade} implements the 387 API required by the Taler exchange and translates it to operations on the 388 underlying account/connection. 389 \end{itemize} 390 \end{frame} 391 392 \begin{frame}{LibEuFin Tooling} 393 \begin{itemize} 394 \item \texttt{libeufin-nexus} is the main service 395 \item Almost all configuration (except DB credentials) 396 is stored in the database and managed via a RESTful HTTP API 397 \item \texttt{libeufin-sandbox} implements a toy EBICS host for protocol 398 testing 399 \item \texttt{libeufin-cli} is client for the HTTP API (only implements a subset 400 of available functionality) 401 \end{itemize} 402 \end{frame} 403 404 \begin{frame}{LibEuFin Setup Overview} 405 \begin{itemize} 406 \item Obtain EBICS subscriber configuration (host URL, host ID, user ID, 407 partner ID) for the Exchange's escrow account 408 \item Deploy the LibEuFin Nexus service 409 \item Create a new LibEuFin bank connection (of type \texttt{ebics}) 410 \item Export and back up the key material for the bank connection (contains 411 EBICS subscriber configuration and private keys) 412 \item Send subscriber initialization to the EBICS host (electronically) 413 \item Export key letter and activate subscriber in the EBICS host (manually) 414 \item Synchronize the bank connection 415 \item Import the account into LibEuFin 416 \item Create a Taler Wire Gateway facade 417 \item Set up scheduled tasks for ingesting new transactions / sending payment 418 initiations 419 \end{itemize} 420 \end{frame} 421 422 423 424 \begin{frame}{LibEuFin Implementation Limitations} 425 \begin{itemize} 426 \item LibEuFin is less stable than other Taler components, and future 427 updates might contain breaking changes (tooling, APIs and database 428 schema) 429 \item Error handling and recovery is still rather primitive 430 \item The Taler Wire Gateway does not yet implement automatic return 431 transactions when transactions with a malformed subject (i.e. no reserve 432 public key) are received 433 \end{itemize} 434 \end{frame} 435 436 \begin{frame}{LibEuFin EBICS Limitations} 437 The GLS accounts with EBICS access that we have access to have some limitations: 438 \begin{itemize} 439 \item SEPA Instant Credit Transfers aren't supported yet 440 \item Erroneous payment initiations are accepted by the GLS EBICS host, 441 but an error message is later sent only by paper mail (and not reported 442 by the CRZ download request) 443 \item Limited access to transaction history (3 months) 444 \end{itemize} 445 \end{frame} 446 447 \begin{frame}[fragile]{LibEuFin Setup Guide} 448 \vfill 449 \begin{center} 450 \url{https://docs.taler.net/libeufin/nexus-tutorial.html} 451 \end{center} 452 \vfill 453 \end{frame} 454 455 456 \section{Operator security considerations} 457 458 \begin{frame} 459 \vfill 460 \begin{center} 461 {\bf Part III: Operator security considerations} 462 \end{center} 463 \vfill 464 \end{frame} 465 466 467 \begin{frame}{Key management} 468 Taler has many types of keys: 469 \begin{itemize} 470 \item Coin keys 471 \item Denomination keys 472 \item Online message signing keys 473 \item Offline key signing keys 474 \item Merchant keys 475 \item Auditor key 476 \item Security module keys 477 \item Transfer keys 478 \item Wallet keys 479 \item {\em TLS keys, DNSSEC keys} 480 \end{itemize} 481 \end{frame} 482 483 484 \begin{frame}{Offline keys} 485 Both exchange and auditor use offline keys. 486 \begin{itemize} 487 \item Those keys must be backed up and remain highly confidential! 488 \item We recommend that computers that have ever had access to those 489 keys to NEVER again go online. 490 \item We recommend using a Raspberry Pi for offline key operations. 491 Store it in a safe under multiple locks and keys. 492 \item Apply full-disk encryption on offline-key signing systems. 493 \item Have 3--5 full-disk backups of offline-key signing systems. 494 \end{itemize} 495 \begin{center} 496 \includegraphics[scale=0.1]{pi.png} 497 \end{center} 498 \end{frame} 499 500 501 \begin{frame}{Online keys} 502 The exchange needs RSA and EdDSA keys to be available for online signing. 503 \begin{itemize} 504 \item Knowledge of these private keys will allow an adversary to 505 mint digital cash, possibly resulting in huge financial losses 506 (eventually, this will be detected by the auditor, but only 507 after some financial losses have been irrevocably incurred). 508 \item The corresponding public keys are certified using 509 Taler's public key infrastructure (which uses offline-only keys). 510 \end{itemize} 511 \begin{center} 512 \includegraphics[width=0.5\textwidth]{taler-diagram-signatures.png} 513 \end{center} 514 \vfill 515 {\tt taler-exchange-offline} can also be used to {\bf revoke} the 516 online signing keys, if we find they have been compromised. 517 \vfill 518 \end{frame} 519 520 521 \begin{frame}{Protecting online keys} 522 The exchange needs RSA and EdDSA keys to be available for online signing. 523 \begin{itemize} 524 \item {\tt taler-exchange-secmod-rsa} and {\tt taler-exchange-secmod-eddsa} 525 are the only processes that must have access to the private keys. 526 \item The secmod processes should run under a different UID, but share 527 the same GID with the exchange. 528 \item The secmods generate the keys, allow {\tt taler-exchange-httpd} to sign with 529 them, and eventually delete the private keys. 530 \item Communication between secmods and {\tt taler-exchange-httpd} is via 531 a UNIX domain socket. 532 \item Online private keys are stored on disk (not in database!) and should 533 NOT be backed up (RAID should suffice). If disk is lost, we can always 534 create fresh replacement keys! 535 \end{itemize} 536 \end{frame} 537 538 539 \begin{frame}{Database} 540 The exchange needs the database to detect double spending. 541 \begin{itemize} 542 \item Loss of the database will allow technically skilled people 543 to double-spend their digital cash, possibly resulting in 544 significant financial losses. 545 \item The database contains total amounts customers withdrew and 546 merchants received, so sensitive private banking data. It 547 must also not become public. 548 \item The auditor must have a (current) copy. Asynchronous replication 549 is considered sufficient. This copy could also be used as an 550 additional (off-site?) backup. 551 \end{itemize} 552 \end{frame} 553 554 555 \begin{frame}{taler-exchange-wirewatch} 556 {\tt taler-exchange-wirewatch} needs credentials to access data about 557 incoming wire transfers from the Nexus. 558 \begin{itemize} 559 \item This tool should run as a separate UID and GID (from 560 {\tt taler-exchange-httpd}). 561 \item It must have access to the Postgres database (SELECT + INSERT). 562 \item Its configuration file contains the credentials to talk to Nexus. 563 \item[$\Rightarrow$] Configuration should be separate from {\tt taler-exchange-httpd}. 564 \end{itemize} 565 \end{frame} 566 567 568 \begin{frame}{taler-exchange-transfer} 569 Only {\tt taler-exchange-transfer} needs credentials to initiate wire 570 transfers using the Nexus. 571 \begin{itemize} 572 \item This tool should run as a separate UID and GID (from 573 {\tt taler-exchange-httpd}). 574 \item It must have access to the Postgres database (SELECT + INSERT). 575 \item Its configuration file contains the credentials to talk to Nexus. 576 \item[$\Rightarrow$] Configuration should be separate from {\tt taler-exchange-httpd}. 577 \end{itemize} 578 \end{frame} 579 580 581 \begin{frame}{Nexus} 582 The Nexus has to be able to interact with the escrow account of the bank. 583 \begin{itemize} 584 \item It must have the private keys to sign EBICS/FinTS messages. 585 \item It also has its own local database. 586 \item The Nexus user and database should be kept separate from 587 the other exchange users and the Taler exchange database. 588 \end{itemize} 589 \end{frame} 590 591 592 \begin{frame}{Hardware} 593 General notions: 594 \begin{itemize} 595 \item Platforms with disabled Intel ME \& disabled remote administration are safer. 596 \item VMs are not a security mechanism. Side-channel attacks abound. Avoid running any 597 Taler component in a virtual machine ``for security''. 598 \end{itemize} 599 \end{frame} 600 601 602 \begin{frame}{Operating system} 603 General notions: 604 \begin{itemize} 605 \item It should be safe to run the different Taler components (including Nginx, Nexus 606 and Postgres) all on the same physical hardware (under different UIDs/GIDs). 607 We would separate them onto different physical machines during scale-out, but not 608 necessarily for ``basic'' security. 609 \item Limiting and auditing system administrator access will be crucial. 610 \item We recommend to {\bf not} use any anti-virus. 611 \item We recommend using a well-supported GNU/Linux operating system (such as 612 Debian or Ubuntu). 613 \end{itemize} 614 \end{frame} 615 616 617 \begin{frame}{Network} 618 \begin{itemize} 619 \item We recommend to {\bf not} use any host-based firewall. 620 Taler components can use UNIX domain sockets (or bind to localhost). 621 \item A network-based 622 firewall is not required, but as long as TCP 80/443 are open Taler should 623 work fine. 624 \item Any firewall must be configured to permit connection to Auditor 625 for database synchronization. 626 \item We recommend running the Taler exchange behind an Nginx or Apache 627 proxy for TLS termination. 628 \item We recommend using static IP address configurations (IPv4 and IPv6). 629 \item We recommend using DNSSEC with DANE in addition to TLS certificates. 630 \item We recommend auditing the TLS setup using \url{https://observatory.mozilla.org}. 631 \end{itemize} 632 \end{frame} 633 634 635 636 \section{Deployment} 637 638 \begin{frame} 639 \vfill 640 \begin{center} 641 {\bf Part IV: Deployment} 642 \end{center} 643 \vfill 644 \end{frame} 645 646 647 \begin{frame}{Alpha: internal-only} 648 Objective: 649 \begin{center} 650 {\bf Bank staff to gain first operational experience.} 651 \end{center} 652 Proposed setup: 653 \begin{itemize} 654 \item Nexus with key material for escrow bank account 655 \item Taler exchange with Nexus banking backend 656 \item Offline key signing 657 \end{itemize} 658 Proposed timeline: Q1-Q2'2021. 659 \end{frame} 660 661 662 \begin{frame}{Alpha: internal-only} 663 Technical tasks in Alpha phase: 664 \begin{itemize} 665 \item Setup minimal merchant, run test transactions $\Rightarrow$ Integration test 666 \item Determine performance limits (benchmark $\Rightarrow$ capacity planning) 667 \item Document and verify procedures (setup, maintenance, disaster recovery) 668 \item Database synchronization setup with auditor ($\Rightarrow$ generate audit reports) 669 \item Test system upgrade procedure 670 \item Test system termination (out-of-business) procedure 671 \end{itemize} 672 Once Alpha is complete and BaFin approved, move to Beta phase. 673 \end{frame} 674 675 676 \begin{frame}{Beta: invitation-only} 677 Objectives: 678 \begin{center} 679 {\bf Merchants gain first operational experience.} \\ 680 {\bf Taler/Bank gain first support experience.} 681 \end{center} 682 Changes to setup: 683 \begin{itemize} 684 \item Limit access to production system (operational security) 685 \item RAID, synchronous backup to Auditor and locally 686 \item Deploy legally binding ToS/PP 687 \end{itemize} 688 Proposed timeline: Q3-Q4'2021. 689 \end{frame} 690 691 692 \begin{frame}{Beta: invitation-only} 693 Technical tasks in Beta phase: 694 \begin{itemize} 695 \item Onboard first merchant(s) with limited reach 696 \item Develop customer support procedures 697 \item Security audit of operational security 698 \item Integrate system monitoring (load, disk capacity, etc.) 699 \item Verify deployment is {\bf reproducibly deterministic} 700 \item Experiment with scale-out options: 701 \begin{itemize} 702 \item multiple Postgres backends (sharding) 703 \item multiple Nginx frontends (TLS termination) 704 \item multiple Exchange servers (Taler processing) 705 \end{itemize} 706 \end{itemize} 707 Once everyone is happy with Beta, move to production. 708 \end{frame} 709 710 711 712 \begin{frame}{Software status: Working key components} 713 \begin{itemize} 714 \item Command-line, WebExtension (Firefox, Chrome, Chromium, Brave) and Android wallet 715 \item Bank integration (libeufin / Nexus) 716 \item Backup solution (Sync) 717 \item Merchant backend 718 \item WooCommerce plugin 719 \item Taler-enabled vending machine (MDB) 720 \item Sample Web frontends 721 \end{itemize} 722 \end{frame} 723 724 725 \begin{frame}{Software status: Components under development} 726 \begin{itemize} 727 \item Key escrow solution (\url{https://anastasis.lu/}) [Q1'2021] 728 \item Merchant backoffice [Q2'2021] 729 \item iOS wallet [Q3'2021] 730 \end{itemize} 731 \end{frame} 732 733 734 \begin{frame}[fragile]{Ubuntu 20.04 LTS Installation Overview} 735 \noindent 736 Extend your {\tt /etc/apt/sources.list} with: 737 738 {\tiny 739 \begin{verbatim} 740 deb https://deb.taler.net/apt/ubuntu focal-fossa main 741 \end{verbatim} 742 } 743 \noindent 744 Key import and installation: 745 746 {\tiny 747 \begin{verbatim} 748 # wget -O - https://taler.net/static/taler-systems.gpg.key | apt-sign add - 749 # apt update 750 # apt install taler-exchange 751 \end{verbatim} 752 } 753 \end{frame} 754 755 756 \begin{frame}[fragile]{Configuration} 757 \vfill 758 \begin{center} 759 \url{https://docs.taler.net/taler-exchange-manual.html#id3} 760 \end{center} 761 \vfill 762 \end{frame} 763 764 765 \begin{frame}{Database setup} 766 \begin{center} 767 \includegraphics[width=\textwidth]{replication.pdf} 768 \end{center} 769 \end{frame} 770 771 \begin{frame}{Simplified database setup} 772 \begin{center} 773 \includegraphics[width=\textwidth]{replication2.pdf} 774 \end{center} 775 \end{frame} 776 777 \begin{frame}{Database setup with Nexus} 778 \begin{center} 779 \includegraphics[width=\textwidth]{db-full.pdf} 780 \end{center} 781 \end{frame} 782 783 784 785 786 787 \section{Integration} 788 789 \begin{frame} 790 \vfill 791 \begin{center} 792 {\bf Part V: Integration} 793 \end{center} 794 \vfill 795 \end{frame} 796 797 798 \begin{frame}{Integration considerations} 799 \begin{itemize} 800 \item KYC/CFT obligations 801 \item Bank branding strategy (unified (?) App) 802 \item Simple customer withdraw flow 803 \item Use for customer-to-customer payments 804 \item Support for customer financial (self-) analysis 805 \item Taler for use-cases beyond digital cash 806 \end{itemize} 807 \end{frame} 808 809 810 \begin{frame}{KYC/CFT obligations} 811 \begin{itemize} 812 \item Nexus or core-banking need to discharge KYC/CFT obligations 813 \item Taler exchange assumes incoming wire transfers have valid 814 wire transfer subject and KYC has passed. 815 \item Incoming transaction limits must be enforced by Nexus/core-banking and/or merchant. 816 \item KYC/CFT checks on (large) outgoing transactions must be triggered by 817 Nexus/core-banking. 818 \item So far, Nexus does {\bf nothing}. 819 \item[$\Rightarrow$] Need to determine where to discharge which legal requirement. 820 \end{itemize} 821 \end{frame} 822 823 824 \begin{frame}{Unified App} 825 \begin{itemize} 826 \item Taler wallet consists of GUI and wallet-core. 827 \item wallet-core is written in TypeScript and runs usually on top of NodeJS. 828 \item wallet-core exposes message-based API. 829 \item wallet-core {\em could} be integrated with (unified) bank App. 830 \item[$\Rightarrow$] Increased complexity of unified App may have negative 831 usability and security implications. 832 \end{itemize} 833 \end{frame} 834 835 836 \begin{frame}{User-friendly withdraw flow} 837 \begin{itemize} 838 \item Integration with online-banking (``withdraw button'') 839 \item Integration with (non-unified) bank App ({\bf discuss how!}) 840 \item Support for customers of other banks 841 \item Integration via {\tt payto://} 842 \end{itemize} 843 \end{frame} 844 845 846 \begin{frame}[fragile]{RFC 8905: \texttt{payto:} Uniform Identifiers for Payments and Accounts} 847 \vfill 848 Like \texttt{mailto:}, but for bank accounts instead of email accounts! 849 \vfill 850 \begin{verbatim} 851 payto://<PAYMENT-METHOD>/<ACCOUNT-NR> 852 ?subject=InvoiceNr42 853 &amount=EUR:12.50 854 \end{verbatim} 855 \vfill 856 Default action: Open app to review and confirm payment. 857 \vfill 858 \includegraphics[width=0.25\textwidth]{einzahlschein-ch.jpeg} 859 \hfill 860 \includegraphics[width=0.2\textwidth]{de-ueberweisungsformular.png} 861 \vfill 862 \end{frame} 863 864 865 \begin{frame}[fragile]{Benefits of {\tt payto://}} 866 \begin{itemize} 867 \item Standardized way to represent financial resources (bank account, bitcoin wallet) 868 and payments to them 869 \item Useful on the client-side on the Web and for FinTech backend applications 870 \item Payment methods (such as IBAN, ACH, Bitcoin) are registered with 871 IANA and allow extra options 872 \end{itemize} 873 \begin{center} 874 {\bf Taler wallet can generate payto://-URI for withdraw!} 875 \end{center} 876 \end{frame} 877 878 879 880 \begin{frame}{Customer-to-customer payments} 881 \begin{itemize} 882 \item Customer-to-bank account will be easy. 883 \item Wallet-to-wallet transactions require withdraw ($\Rightarrow$ customer authorization!) 884 \end{itemize} 885 \end{frame} 886 887 888 \begin{frame}{Financial self-analysis} 889 \begin{itemize} 890 \item Transaction history kept in Taler wallet 891 \item Visualization in Taler wallet is planned for future version 892 \item Possible to {\em export} transaction history from Taler wallet 893 for analysis in other tools 894 \end{itemize} 895 \end{frame} 896 897 898 \begin{frame}{Beyond digital cash} 899 \begin{itemize} 900 \item Taler can do transactions not just in EUR 901 \item Could also issue coins denominated in company stocks, or other trade goods 902 \item Can theoretically be combined with electronic voting for shareholder meetings, 903 and support dividend payments 904 \item[$\Rightarrow$] Many additional technical and regulatory issues to address. 905 \end{itemize} 906 \end{frame} 907 908 909 910 \section{Go to market strategy} 911 912 \begin{frame} 913 \vfill 914 \begin{center} 915 {\bf Part VI: Go to market strategy} 916 \end{center} 917 \vfill 918 \end{frame} 919 920 921 922 \begin{frame}{Use Case: Hackers\footnote{\url{https://www.gnu.org/philosophy/rms-hack.html}}} 923 Today: 924 \begin{itemize} 925 \item Most payment systems proprietary and not privacy-friendly 926 \item Crypto-currencies popular because Free Software and unregulated 927 \end{itemize}\vfill\pause 928 With GNU Taler: 929 \begin{itemize} 930 \item Free Software 931 \item Privacy-Friendly 932 \item Scalable 933 \item Legal 934 \item Easy-to-use, well-documented public API 935 \item[$\Rightarrow$] World-first {\em hacker-friendly} real-world payments! 936 \end{itemize} 937 \end{frame} 938 939 940 \begin{frame}{Use Case: Journalism} 941 Today: 942 \begin{itemize} 943 \item Corporate structure % ($\Rightarrow$ filter) 944 \item Advertising primary revenue % ($\Rightarrow$ dependence) 945 \item Tracking readers critical for business success 946 \item Journalism and marketing hard to distinguish 947 \end{itemize}\vfill\pause 948 With GNU Taler: 949 \begin{itemize} 950 \item One-click micropayments per article 951 \item Hosting requires no expertise % (no PCI DSS) 952 \item Reader-funded reporting separated from marketing 953 \item Readers can remain anonymous 954 \end{itemize} 955 \end{frame} 956 957 958 \begin{frame}{Use Case: Anti-Spam} 959 Today, p$\equiv$p provides authenticated encryption for e-mail: 960 \begin{itemize} 961 \item Free software 962 \item Easy to use opportunistic encryption 963 \item Available for Outlook, Android, Enigmail 964 \item Spies \& spam filters can no longer inspect content 965 \end{itemize}\vfill\pause 966 With GNU Taler: 967 \begin{itemize} 968 \item Peer-to-peer payments via e-mail 969 \item If unsolicited sender, hide messages from user \& 970 automatically request payment from sender 971 \item Sender can attach payment to be moved to inbox 972 \item Receiver may grant refund to sender 973 \end{itemize} 974 \end{frame} 975 976 977 978 \begin{frame} 979 \frametitle{Do you have any questions?} 980 \vfill 981 References: 982 {\tiny 983 \begin{enumerate} 984 \item{Christian Grothoff, Bart Polot and Carlo von Loesch. 985 {\em The Internet is broken: Idealistic Ideas for Building a GNU Network}. 986 {\bf W3C/IAB Workshop on Strengthening the Internet Against Pervasive Monitoring (STRINT)}, 2014.} 987 \item{Jeffrey Burdges, Florian Dold, Christian Grothoff and Marcello Stanisci. 988 {\em Enabling Secure Web Payments with GNU Taler}. 989 {\bf SPACE 2016}.} 990 \item{Florian Dold, Sree Harsha Totakura, Benedikt M\"uller, Jeffrey Burdges and Christian Grothoff. 991 {\em Taler: Taxable Anonymous Libre Electronic Reserves}. 992 Available upon request. 2016.} 993 \item{Eli Ben-Sasson, Alessandro Chiesa, Christina Garman, Matthew Green, Ian Miers, Eran Tromer and Madars Virza. 994 {\em Zerocash: Decentralized Anonymous Payments from Bitcoin}. 995 {\bf IEEE Symposium on Security \& Privacy, 2016}.} 996 \item{David Chaum, Amos Fiat and Moni Naor. 997 {\em Untraceable electronic cash}. 998 {\bf Proceedings on Advances in Cryptology, 1990}.} 999 \item{Phillip Rogaway. 1000 {\em The Moral Character of Cryptographic Work}. 1001 {\bf Asiacrypt}, 2015.} \label{bib:rogaway} 1002 \end{enumerate} 1003 } 1004 \begin{center} 1005 {\bf Let money facilitate trade; but ensure capital serves society.} 1006 \end{center} 1007 \end{frame} 1008 1009 1010 1011 1012 \end{document} 1013 1014 1015 1016 1017 \begin{frame}{Taler {\tt /withdraw/sign}} 1018 % Customer withdrawing coins with blind signatures 1019 % \bigskip 1020 \begin{figure}[th] 1021 \begin{minipage}[b]{0.45\linewidth} 1022 \begin{center} 1023 \begin{tikzpicture}[scale = 0.4, 1024 transform shape, 1025 msglabel/.style = { text = Black, yshift = .3cm, 1026 sloped, midway }, 1027 okmsg/.style = { ->, color = MidnightBlue, thick, 1028 >=stealth }, 1029 rstmsg/.style = { ->, color = BrickRed, thick, 1030 >=stealth } 1031 ] 1032 \node[draw = MidnightBlue, 1033 fill = CornflowerBlue, 1034 minimum width = .3cm, 1035 minimum height = 10cm 1036 ] (h1) at (-4, 0) {}; 1037 \node[draw = MidnightBlue, 1038 fill = CornflowerBlue, 1039 minimum width = .3cm, 1040 minimum height = 10cm 1041 ] (h2) at (4, 0) {}; 1042 \node[above = 0cm of h1] {Wallet}; 1043 \node[above = 0cm of h2] {Exchange}; 1044 1045 \path[->, color = MidnightBlue, very thick, >=stealth] 1046 (-5, 4.5) edge 1047 node[rotate=90, text = Black, yshift = .3cm] {Time} 1048 (-5, -4.5); 1049 \path[okmsg, dashed] 1050 ($(h1.east)+(0, 4.0)+(0, -1.0)$) edge 1051 node[msglabel] {SEPA(RK,A)} 1052 ($(h2.west)+(0, 3.5)+(0, -1.0)$); 1053 \path[okmsg] 1054 ($(h1.east)+(0, -1.0)$) edge 1055 node[msglabel] {POST {\tt /withdraw/sign} $S_{RK}(DK, B_b(C))$} 1056 ($(h2.west)+(0, -1.5)$); 1057 \path[okmsg] 1058 ($(h2.west)+(0, -2.0)$) edge 1059 node[msglabel] {200 OK: $S_{DK}(B_b(C))$)} 1060 ($(h1.east)+(0, -2.5)$); 1061 \path[rstmsg] 1062 ($(h2.west)+(0, -3.5)$) edge 1063 node[msglabel] {402 PAYMENT REQUIRED: $S_{RK}(DK, B_b(C))$)} 1064 ($(h1.east)+(0, -4)$); 1065 \node at (5.3, 0) {}; 1066 \end{tikzpicture} 1067 \end{center} 1068 Result: $\langle c, S_{DK}(C) \rangle$. 1069 \end{minipage} 1070 \hspace{0.5cm} 1071 \begin{minipage}[b]{0.45\linewidth} 1072 \tiny 1073 \begin{description} 1074 \item[$A$] Some amount, $A \ge A_{DK}$ 1075 \item[$RK$] Reserve key 1076 \item[$DK$] Denomination key 1077 \item[$b$] Blinding factor 1078 \item[$B_b()$] RSA-FDH blinding % DK supressed 1079 \item[$C$] Coin public key $C := cG$ 1080 \item[$S_{RK}()$] EdDSA signature 1081 \item[$S_{DK}()$] RSA-FDH signature 1082 \end{description} 1083 \end{minipage} 1084 \end{figure} 1085 \end{frame} 1086 1087 1088 \begin{frame}[t]{Taler {\tt /deposit}} 1089 Merchant and exchange see only the public coin $\langle C, S_{DK}(C) \rangle$. 1090 \bigskip 1091 \begin{figure}[th] 1092 \begin{minipage}[b]{0.45\linewidth} 1093 \begin{center} 1094 \begin{tikzpicture}[scale = 0.4, 1095 transform shape, 1096 msglabel/.style = { text = Black, yshift = .3cm, 1097 sloped, midway }, 1098 okmsg/.style = { ->, color = MidnightBlue, thick, 1099 >=stealth }, 1100 rstmsg/.style = { ->, color = BrickRed, thick, 1101 >=stealth } 1102 ] 1103 \node[draw = MidnightBlue, 1104 fill = CornflowerBlue, 1105 minimum width = .3cm, 1106 minimum height = 10cm 1107 ] (h1) at (-4, 0) {}; 1108 \node[draw = MidnightBlue, 1109 fill = CornflowerBlue, 1110 minimum width = .3cm, 1111 minimum height = 10cm 1112 ] (h2) at (4, 0) {}; 1113 \node[above = 0cm of h1] {Merchant}; 1114 \node[above = 0cm of h2] {Exchange}; 1115 1116 \path[->, color = MidnightBlue, very thick, >=stealth] 1117 (-5, 4.5) edge 1118 node[rotate=90, text = Black, yshift = .3cm] {Time} 1119 (-5, -4.5); 1120 \path[->, color = MidnightBlue, thick, >=stealth] 1121 ($(h1.east)+(0,3)$) edge 1122 node[text = Black, yshift = .3cm, sloped] {POST {\tt /deposit} $S_{DK}(C), S_{c}(D)$} 1123 ($(h2.west)+(0,2)$); 1124 \path[->, color = MidnightBlue, thick, >=stealth] 1125 ($(h2.west)+(0,0.5)$) edge 1126 node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(S_{c}(D))$} 1127 ($(h1.east)+(0,-0.5)$); 1128 \path[rstmsg] 1129 ($(h2.west)+(0, -2.5)$) edge 1130 node[msglabel] {409 CONFLICT: $S_{c}(D')$} 1131 ($(h1.east)+(0, -3.5)$); 1132 \node at (5.3, 0) {}; 1133 \end{tikzpicture} 1134 \end{center} 1135 \end{minipage} 1136 \hspace{0.5cm} 1137 \begin{minipage}[b]{0.45\linewidth} 1138 \tiny 1139 \begin{description} 1140 \item[$DK$] Denomination key 1141 \item[$S_{DK}()$] RSA-FDH signature using $DK$ 1142 \item[$c$] Private coin key, $C := cG$. 1143 \item[$S_{C}()$] EdDSA signature using $c$ 1144 \item[$D$] Deposit details 1145 \item[$SK$] Exchange's signing key 1146 \item[$S_{SK}()$] EdDSA signature using $SK$ 1147 \item[$D'$] Conficting deposit details $D' \not= D$ 1148 \end{description} 1149 \end{minipage} 1150 \end{figure} 1151 \end{frame} 1152 1153 1154 \begin{frame}{Taler {\tt /refresh/melt}} 1155 \begin{figure}[th] 1156 \begin{minipage}[b]{0.45\linewidth} 1157 \begin{center} 1158 \begin{tikzpicture}[scale = 0.4, 1159 transform shape, 1160 msglabel/.style = { text = Black, yshift = .3cm, 1161 sloped, midway }, 1162 okmsg/.style = { ->, color = MidnightBlue, thick, 1163 >=stealth }, 1164 rstmsg/.style = { ->, color = BrickRed, thick, 1165 >=stealth } 1166 ] 1167 \node[draw = MidnightBlue, 1168 fill = CornflowerBlue, 1169 minimum width = .3cm, 1170 minimum height = 10cm 1171 ] (h1) at (-4, 0) {}; 1172 \node[draw = MidnightBlue, 1173 fill = CornflowerBlue, 1174 minimum width = .3cm, 1175 minimum height = 10cm 1176 ] (h2) at (4, 0) {}; 1177 \node[above = 0cm of h1] {Customer}; 1178 \node[above = 0cm of h2] {Exchange}; 1179 1180 \path[->, color = MidnightBlue, very thick, >=stealth] 1181 (-5, 4.5) edge 1182 node[rotate=90, text = Black, yshift = .3cm] {Time} 1183 (-5, -4.5); 1184 \path[->, color = MidnightBlue, thick, >=stealth] 1185 ($(h1.east)+(0,3)$) edge 1186 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/melt} $S_{DK}(C), S_c({\cal DK}, {\cal T},{\cal B})$} 1187 ($(h2.west)+(0,2)$); 1188 \path[->, color = MidnightBlue, thick, >=stealth] 1189 ($(h2.west)+(0,0.5)$) edge 1190 node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(H({\cal T}, {\cal B}),\gamma)$} 1191 ($(h1.east)+(0,-0.5)$); 1192 \path[rstmsg] 1193 ($(h2.west)+(0, -2.5)$) edge 1194 node[msglabel] {409 CONFLICT: $S_{C}(X), \ldots$} 1195 ($(h1.east)+(0, -3.5)$); 1196 \node at (5.3, 0) {}; 1197 \end{tikzpicture} 1198 \end{center} 1199 \end{minipage} 1200 \hspace{0.5cm} 1201 \begin{minipage}[b]{0.45\linewidth} 1202 \tiny 1203 \begin{description} 1204 \item[$\kappa$] System-wide security parameter, usually 3. 1205 \\ \smallskip 1206 \item[$\cal DK$] $:= [DK^{(i)}]_i$ \\ List of denomination keys \\ 1207 $D + \sum_i A_{DK^{(i)}} < A_{DK}$ 1208 \item[$t_j$] Random scalar for $j<\kappa$ 1209 \item[${\cal T}$] $:= [T_j]_\kappa$ where $T_j = t_j G$ 1210 \item[$k_j$] $:= c T_j = t_j C$ is an ECDHE 1211 \item[$b_j^{(i)}$] $:= KDF_b(k_j,i)$ % blinding factor 1212 \item[$c_j^{(i)}$] $:= KDF_c(k_j,i)$ % coin secret keys 1213 \item[$C_j^{(i)}$] $: = c_j^{(i)} G$ % new coin publics % keys 1214 \item[${\cal B}$] $:= [H( \beta_j )]_\kappa$ where \\ 1215 $\beta_j := \left[ B_{b_j^{(i)}}(C_j^{(i)}) \right]_i$ 1216 \\ \smallskip 1217 \item[$\gamma$] Random value in $[0,\kappa)$ 1218 % \\ \smallskip 1219 % \item[$X$] Deposit or refresh 1220 \end{description} 1221 \end{minipage} 1222 \end{figure} 1223 \end{frame} 1224 1225 1226 \begin{frame}{Taler {\tt /refresh/reveal}} 1227 \begin{figure}[th] 1228 \begin{minipage}[b]{0.45\linewidth} 1229 \begin{center} 1230 \begin{tikzpicture}[scale = 0.4, 1231 transform shape, 1232 msglabel/.style = { text = Black, yshift = .3cm, 1233 sloped, midway }, 1234 okmsg/.style = { ->, color = MidnightBlue, thick, 1235 >=stealth }, 1236 rstmsg/.style = { ->, color = BrickRed, thick, 1237 >=stealth } 1238 ] 1239 \node[draw = MidnightBlue, 1240 fill = CornflowerBlue, 1241 minimum width = .3cm, 1242 minimum height = 10cm 1243 ] (h1) at (-4, 0) {}; 1244 \node[draw = MidnightBlue, 1245 fill = CornflowerBlue, 1246 minimum width = .3cm, 1247 minimum height = 10cm 1248 ] (h2) at (4, 0) {}; 1249 \node[above = 0cm of h1] {Customer}; 1250 \node[above = 0cm of h2] {Exchange}; 1251 1252 \path[->, color = MidnightBlue, very thick, >=stealth] 1253 (-5, 4.5) edge 1254 node[rotate=90, text = Black, yshift = .3cm] {Time} 1255 (-5, -4.5); 1256 \path[->, color = MidnightBlue, thick, >=stealth] 1257 ($(h1.east)+(0,3)$) edge 1258 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/reveal} $H({\cal T}, {\cal B}), {\tilde{\cal T}}, \beta_\gamma$} 1259 ($(h2.west)+(0,2)$); 1260 \path[->, color = MidnightBlue, thick, >=stealth] 1261 ($(h2.west)+(0,0.5)$) edge 1262 node[text = Black, yshift = .3cm, sloped] {200 OK: $\cal S$} 1263 ($(h1.east)+(0,-0.5)$); 1264 \path[rstmsg] 1265 ($(h2.west)+(0, -2.5)$) edge 1266 node[msglabel] {400 BAD REQUEST: $Z$} 1267 ($(h1.east)+(0, -3.5)$); 1268 \node at (5.3, 0) {}; 1269 \end{tikzpicture} 1270 \end{center} 1271 \end{minipage} 1272 \hspace{0.5cm} 1273 \begin{minipage}[b]{0.45\linewidth} 1274 \tiny 1275 \begin{description} 1276 \item[$\cal DK$] $:= [DK^{(i)}]_i$ 1277 \item[$t_j$] .. \\ \smallskip 1278 1279 \item[$\tilde{\cal T}$] $:= [t_j | j \in \kappa, j \neq \gamma]$ \\ \smallskip 1280 1281 \item[$k_\gamma$] $:= c T_\gamma = t_\gamma C$ 1282 \item[$b_\gamma^{(i)}$] $:= KDF_b(k_\gamma,i)$ 1283 \item[$c_\gamma^{(i)}$] $:= KDF_c(k_\gamma,i)$ 1284 \item[$C_\gamma^{(i)}$] $: = c_\gamma^{(i)} G$ 1285 1286 \item[$B_\gamma^{(i)}$] $:= B_{b_\gamma^{(i)}}(C_\gamma^{(i)})$ 1287 \item[$\beta_\gamma$] $:= \big[ B_\gamma^{(i)} \big]_i$ 1288 \item[$\cal S$] $:= \left[ S_{DK^{(i)}}( B_\gamma^{(i)} ) \right]_i$ \\ \smallskip 1289 1290 \item[$Z$] Cut-and-choose missmatch information 1291 \end{description} 1292 \end{minipage} 1293 \end{figure} 1294 \end{frame} 1295 1296 1297 \begin{frame}{Taler {\tt /refresh/link}} 1298 \begin{figure}[th] 1299 \begin{minipage}[b]{0.45\linewidth} 1300 \begin{center} 1301 \begin{tikzpicture}[scale = 0.4, 1302 transform shape, 1303 msglabel/.style = { text = Black, yshift = .3cm, 1304 sloped, midway }, 1305 okmsg/.style = { ->, color = MidnightBlue, thick, 1306 >=stealth }, 1307 rstmsg/.style = { ->, color = BrickRed, thick, 1308 >=stealth } 1309 ] 1310 \node[draw = MidnightBlue, 1311 fill = CornflowerBlue, 1312 minimum width = .3cm, 1313 minimum height = 10cm 1314 ] (h1) at (-4, 0) {}; 1315 \node[draw = MidnightBlue, 1316 fill = CornflowerBlue, 1317 minimum width = .3cm, 1318 minimum height = 10cm 1319 ] (h2) at (4, 0) {}; 1320 \node[above = 0cm of h1] {Customer}; 1321 \node[above = 0cm of h2] {Exchagne}; 1322 1323 \path[->, color = MidnightBlue, very thick, >=stealth] 1324 (-5, 4.5) edge 1325 node[rotate=90, text = Black, yshift = .3cm] {Time} 1326 (-5, -4.5); 1327 \path[->, color = MidnightBlue, thick, >=stealth] 1328 ($(h1.east)+(0,3)$) edge 1329 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/link} $C$} 1330 ($(h2.west)+(0,2)$); 1331 \path[->, color = MidnightBlue, thick, >=stealth] 1332 ($(h2.west)+(0,0.5)$) edge 1333 node[text = Black, yshift = .3cm, sloped] {200 OK: $T_\gamma$} 1334 ($(h1.east)+(0,-0.5)$); 1335 \path[rstmsg] 1336 ($(h2.west)+(0, -2.5)$) edge 1337 node[msglabel] {404 NOT FOUND} 1338 ($(h1.east)+(0, -3.5)$); 1339 \node at (5.3, 0) {}; 1340 \end{tikzpicture} 1341 \end{center} 1342 \end{minipage} 1343 \hspace{0.5cm} 1344 \begin{minipage}[b]{0.45\linewidth} 1345 \tiny 1346 \begin{description} 1347 \item[$C$] Old coind public key \\ \smallskip 1348 \item[$T_\gamma$] Linkage data $\cal L$ at $\gamma$ 1349 \end{description} 1350 \end{minipage} 1351 \end{figure} 1352 \end{frame} 1353 1354 1355 \begin{frame}{Operational security} 1356 \begin{center} 1357 \resizebox{\textwidth}{!}{ 1358 \begin{tikzpicture}[ 1359 font=\sffamily, 1360 every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm}, 1361 source/.style={draw,thick,rounded corners,fill=green!20,inner sep=.3cm}, 1362 process/.style={draw,thick,circle,fill=blue!20}, 1363 sink/.style={source,fill=green!20}, 1364 datastore/.style={draw,very thick,shape=datastore,inner sep=.3cm}, 1365 dots/.style={gray,scale=2}, 1366 to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize}, 1367 every node/.style={align=center}] 1368 1369 % Position the nodes using a matrix layout 1370 \matrix{ 1371 \node[source] (wallet) {Wallet}; 1372 \& \node[process] (browser) {Browser}; 1373 \& \node[process] (shop) {Web shop}; 1374 \& \node[sink] (backend) {Taler backend}; \\ 1375 }; 1376 1377 % Draw the arrows between the nodes and label them. 1378 \draw[to] (browser) to[bend right=50] node[midway,above] {(4) signed contract} 1379 node[midway,below] {(signal)} (wallet); 1380 \draw[to] (wallet) to[bend right=50] node[midway,above] {(signal)} 1381 node[midway,below] {(5) signed coins} (browser); 1382 \draw[<->] (browser) -- node[midway,above] {(3,6) custom} 1383 node[midway,below] {(HTTPS)} (shop); 1384 \draw[to] (shop) to[bend right=50] node[midway,above] {(HTTPS)} 1385 node[midway,below] {(1) proposed contract / (7) signed coins} (backend); 1386 \draw[to] (backend) to[bend right=50] node[midway,above] {(2) signed contract / (8) confirmation} 1387 node[midway,below] {(HTTPS)} (shop); 1388 \end{tikzpicture} 1389 } 1390 \end{center} 1391 \end{frame}