lunch.tex (19589B)
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 16 % CSS 17 \lstdefinelanguage{CSS}{ 18 basicstyle=\ttfamily\scriptsize, 19 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}, 20 sensitive=true, 21 morecomment=[l]{//}, 22 morecomment=[s]{/*}{*/}, 23 morestring=[b]', 24 morestring=[b]", 25 alsoletter={:}, 26 alsodigit={-} 27 } 28 29 % JavaScript 30 \lstdefinelanguage{JavaScript}{ 31 basicstyle=\ttfamily\scriptsize, 32 morekeywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break}, 33 morecomment=[s]{/*}{*/}, 34 morecomment=[l]//, 35 morestring=[b]", 36 morestring=[b]' 37 } 38 39 \lstdefinelanguage{HTML5}{ 40 basicstyle=\ttfamily\scriptsize, 41 language=html, 42 sensitive=true, 43 alsoletter={<>=-}, 44 morecomment=[s]{<!-}{-->}, 45 tag=[s], 46 otherkeywords={ 47 % General 48 >, 49 % Standard tags 50 <!DOCTYPE, 51 </html, <html, <head, <title, </title, <style, </style, <link, </head, <meta, />, 52 % body 53 </body, <body, 54 % Divs 55 </div, <div, </div>, 56 % Paragraphs 57 </p, <p, </p>, 58 % scripts 59 </script, <script, 60 % More tags... 61 <canvas, /canvas>, <svg, <rect, <animateTransform, </rect>, </svg>, <video, <source, <iframe, </iframe>, </video>, <image, </image> 62 }, 63 ndkeywords={ 64 % General 65 =, 66 % HTML attributes 67 charset=, src=, id=, width=, height=, style=, type=, rel=, href=, 68 % SVG attributes 69 fill=, attributeName=, begin=, dur=, from=, to=, poster=, controls=, x=, y=, repeatCount=, xlink:href=, 70 % CSS properties 71 margin:, padding:, background-image:, border:, top:, left:, position:, width:, height:, 72 % CSS3 properties 73 transform:, -moz-transform:, -webkit-transform:, 74 animation:, -webkit-animation:, 75 transition:, transition-duration:, transition-property:, transition-timing-function:, 76 } 77 } 78 79 \lstdefinelanguage{JavaScript}{ 80 basicstyle=\ttfamily\scriptsize, 81 keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, for}, 82 keywordstyle=\color{blue}\bfseries, 83 ndkeywords={class, export, boolean, throw, implements, import, this}, 84 ndkeywordstyle=\color{darkgray}\bfseries, 85 identifierstyle=\color{black}, 86 sensitive=false, 87 comment=[l]{//}, 88 morecomment=[s]{/*}{*/}, 89 commentstyle=\color{purple}\ttfamily, 90 stringstyle=\color{red}\ttfamily, 91 morestring=[b]', 92 morestring=[b]" 93 } 94 95 \usetikzlibrary{shapes,arrows} 96 \usetikzlibrary{positioning} 97 \usetikzlibrary{calc} 98 99 \title{GNU Taler} 100 \subtitle{Montag Mittag, 25.1.2021} 101 102 \setbeamertemplate{navigation symbols}{\includegraphics[width=1cm]{inria.pdf} \includegraphics[width=0.5cm]{gnu.png} \includegraphics[width=0.5cm]{ashoka.png}\hfill} 103 %\setbeamercovered{transparent=1} 104 105 \author{L. Wittmann, C. Grothoff} 106 \date{\today} 107 \institute{Taler Systems SA} 108 109 110 \begin{document} 111 112 \justifying 113 114 \begin{frame} 115 \begin{center} 116 \LARGE {\bf GNU} 117 118 \vfill 119 \includegraphics[width=0.66\textwidth]{logo-2020.jpg} 120 \end{center} 121 \begin{textblock*}{4cm}(.5cm,7.7cm) % {block width} (coords) 122 {\Large {\bf \url{https://taler.net}} \\ 123 twitter@taler } 124 \end{textblock*} 125 126 % Substitute based on who is giving the talk! 127 \begin{textblock*}{6cm}(6.7cm,7.7cm) % {block width} (coords) 128 {\hfill {\Large {\bf L. Wittmann \&} \\ 129 \hfill {\bf C. Grothoff}} } 130 \end{textblock*} 131 132 \end{frame} 133 134 135 \begin{frame}{Design goals for the GNU Taler Payment System} 136 GNU Taler must ... 137 \begin{enumerate} 138 \item {... be implemented as {\bf free software}.} 139 \item {... protect the {\bf privacy of buyers}.} 140 \item {... must enable the state to {\bf tax income} and crack down on 141 illegal business activities.} 142 \item {... prevent payment fraud.} 143 \item {... only {\bf disclose the minimal amount of information 144 necessary}.} 145 \item {... be usable.} 146 \item {... be efficient.} 147 \item {... avoid single points of failure.} 148 \item {... foster {\bf competition}.} 149 \end{enumerate} 150 \end{frame} 151 152 153 \begin{frame}{How does Taler operate?} 154 \vfill 155 \begin{center} 156 \includegraphics[width=0.7\textwidth]{operations.png} 157 \end{center} 158 \end{frame} 159 160 161 \begin{frame} 162 \frametitle{Do you have any questions?} 163 \vfill 164 References: 165 {\tiny 166 \begin{enumerate} 167 \item{Christian Grothoff, Bart Polot and Carlo von Loesch. 168 {\em The Internet is broken: Idealistic Ideas for Building a GNU Network}. 169 {\bf W3C/IAB Workshop on Strengthening the Internet Against Pervasive Monitoring (STRINT)}, 2014.} 170 \item{Jeffrey Burdges, Florian Dold, Christian Grothoff and Marcello Stanisci. 171 {\em Enabling Secure Web Payments with GNU Taler}. 172 {\bf SPACE 2016}.} 173 \item{Florian Dold, Sree Harsha Totakura, Benedikt M\"uller, Jeffrey Burdges and Christian Grothoff. 174 {\em Taler: Taxable Anonymous Libre Electronic Reserves}. 175 Available upon request. 2016.} 176 \item{Eli Ben-Sasson, Alessandro Chiesa, Christina Garman, Matthew Green, Ian Miers, Eran Tromer and Madars Virza. 177 {\em Zerocash: Decentralized Anonymous Payments from Bitcoin}. 178 {\bf IEEE Symposium on Security \& Privacy, 2016}.} 179 \item{David Chaum, Amos Fiat and Moni Naor. 180 {\em Untraceable electronic cash}. 181 {\bf Proceedings on Advances in Cryptology, 1990}.} 182 \item{Phillip Rogaway. 183 {\em The Moral Character of Cryptographic Work}. 184 {\bf Asiacrypt}, 2015.} \label{bib:rogaway} 185 \end{enumerate} 186 } 187 \begin{center} 188 {\bf Let money facilitate trade; but ensure capital serves society.} 189 \end{center} 190 \end{frame} 191 192 193 194 195 \end{document} 196 197 198 199 200 \begin{frame}{Taler {\tt /withdraw/sign}} 201 % Customer withdrawing coins with blind signatures 202 % \bigskip 203 \begin{figure}[th] 204 \begin{minipage}[b]{0.45\linewidth} 205 \begin{center} 206 \begin{tikzpicture}[scale = 0.4, 207 transform shape, 208 msglabel/.style = { text = Black, yshift = .3cm, 209 sloped, midway }, 210 okmsg/.style = { ->, color = MidnightBlue, thick, 211 >=stealth }, 212 rstmsg/.style = { ->, color = BrickRed, thick, 213 >=stealth } 214 ] 215 \node[draw = MidnightBlue, 216 fill = CornflowerBlue, 217 minimum width = .3cm, 218 minimum height = 10cm 219 ] (h1) at (-4, 0) {}; 220 \node[draw = MidnightBlue, 221 fill = CornflowerBlue, 222 minimum width = .3cm, 223 minimum height = 10cm 224 ] (h2) at (4, 0) {}; 225 \node[above = 0cm of h1] {Wallet}; 226 \node[above = 0cm of h2] {Exchange}; 227 228 \path[->, color = MidnightBlue, very thick, >=stealth] 229 (-5, 4.5) edge 230 node[rotate=90, text = Black, yshift = .3cm] {Time} 231 (-5, -4.5); 232 \path[okmsg, dashed] 233 ($(h1.east)+(0, 4.0)+(0, -1.0)$) edge 234 node[msglabel] {SEPA(RK,A)} 235 ($(h2.west)+(0, 3.5)+(0, -1.0)$); 236 \path[okmsg] 237 ($(h1.east)+(0, -1.0)$) edge 238 node[msglabel] {POST {\tt /withdraw/sign} $S_{RK}(DK, B_b(C))$} 239 ($(h2.west)+(0, -1.5)$); 240 \path[okmsg] 241 ($(h2.west)+(0, -2.0)$) edge 242 node[msglabel] {200 OK: $S_{DK}(B_b(C))$)} 243 ($(h1.east)+(0, -2.5)$); 244 \path[rstmsg] 245 ($(h2.west)+(0, -3.5)$) edge 246 node[msglabel] {402 PAYMENT REQUIRED: $S_{RK}(DK, B_b(C))$)} 247 ($(h1.east)+(0, -4)$); 248 \node at (5.3, 0) {}; 249 \end{tikzpicture} 250 \end{center} 251 Result: $\langle c, S_{DK}(C) \rangle$. 252 \end{minipage} 253 \hspace{0.5cm} 254 \begin{minipage}[b]{0.45\linewidth} 255 \tiny 256 \begin{description} 257 \item[$A$] Some amount, $A \ge A_{DK}$ 258 \item[$RK$] Reserve key 259 \item[$DK$] Denomination key 260 \item[$b$] Blinding factor 261 \item[$B_b()$] RSA-FDH blinding % DK supressed 262 \item[$C$] Coin public key $C := cG$ 263 \item[$S_{RK}()$] EdDSA signature 264 \item[$S_{DK}()$] RSA-FDH signature 265 \end{description} 266 \end{minipage} 267 \end{figure} 268 \end{frame} 269 270 271 \begin{frame}[t]{Taler {\tt /deposit}} 272 Merchant and exchange see only the public coin $\langle C, S_{DK}(C) \rangle$. 273 \bigskip 274 \begin{figure}[th] 275 \begin{minipage}[b]{0.45\linewidth} 276 \begin{center} 277 \begin{tikzpicture}[scale = 0.4, 278 transform shape, 279 msglabel/.style = { text = Black, yshift = .3cm, 280 sloped, midway }, 281 okmsg/.style = { ->, color = MidnightBlue, thick, 282 >=stealth }, 283 rstmsg/.style = { ->, color = BrickRed, thick, 284 >=stealth } 285 ] 286 \node[draw = MidnightBlue, 287 fill = CornflowerBlue, 288 minimum width = .3cm, 289 minimum height = 10cm 290 ] (h1) at (-4, 0) {}; 291 \node[draw = MidnightBlue, 292 fill = CornflowerBlue, 293 minimum width = .3cm, 294 minimum height = 10cm 295 ] (h2) at (4, 0) {}; 296 \node[above = 0cm of h1] {Merchant}; 297 \node[above = 0cm of h2] {Exchange}; 298 299 \path[->, color = MidnightBlue, very thick, >=stealth] 300 (-5, 4.5) edge 301 node[rotate=90, text = Black, yshift = .3cm] {Time} 302 (-5, -4.5); 303 \path[->, color = MidnightBlue, thick, >=stealth] 304 ($(h1.east)+(0,3)$) edge 305 node[text = Black, yshift = .3cm, sloped] {POST {\tt /deposit} $S_{DK}(C), S_{c}(D)$} 306 ($(h2.west)+(0,2)$); 307 \path[->, color = MidnightBlue, thick, >=stealth] 308 ($(h2.west)+(0,0.5)$) edge 309 node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(S_{c}(D))$} 310 ($(h1.east)+(0,-0.5)$); 311 \path[rstmsg] 312 ($(h2.west)+(0, -2.5)$) edge 313 node[msglabel] {409 CONFLICT: $S_{c}(D')$} 314 ($(h1.east)+(0, -3.5)$); 315 \node at (5.3, 0) {}; 316 \end{tikzpicture} 317 \end{center} 318 \end{minipage} 319 \hspace{0.5cm} 320 \begin{minipage}[b]{0.45\linewidth} 321 \tiny 322 \begin{description} 323 \item[$DK$] Denomination key 324 \item[$S_{DK}()$] RSA-FDH signature using $DK$ 325 \item[$c$] Private coin key, $C := cG$. 326 \item[$S_{C}()$] EdDSA signature using $c$ 327 \item[$D$] Deposit details 328 \item[$SK$] Exchange's signing key 329 \item[$S_{SK}()$] EdDSA signature using $SK$ 330 \item[$D'$] Conficting deposit details $D' \not= D$ 331 \end{description} 332 \end{minipage} 333 \end{figure} 334 \end{frame} 335 336 337 \begin{frame}{Taler {\tt /refresh/melt}} 338 \begin{figure}[th] 339 \begin{minipage}[b]{0.45\linewidth} 340 \begin{center} 341 \begin{tikzpicture}[scale = 0.4, 342 transform shape, 343 msglabel/.style = { text = Black, yshift = .3cm, 344 sloped, midway }, 345 okmsg/.style = { ->, color = MidnightBlue, thick, 346 >=stealth }, 347 rstmsg/.style = { ->, color = BrickRed, thick, 348 >=stealth } 349 ] 350 \node[draw = MidnightBlue, 351 fill = CornflowerBlue, 352 minimum width = .3cm, 353 minimum height = 10cm 354 ] (h1) at (-4, 0) {}; 355 \node[draw = MidnightBlue, 356 fill = CornflowerBlue, 357 minimum width = .3cm, 358 minimum height = 10cm 359 ] (h2) at (4, 0) {}; 360 \node[above = 0cm of h1] {Customer}; 361 \node[above = 0cm of h2] {Exchange}; 362 363 \path[->, color = MidnightBlue, very thick, >=stealth] 364 (-5, 4.5) edge 365 node[rotate=90, text = Black, yshift = .3cm] {Time} 366 (-5, -4.5); 367 \path[->, color = MidnightBlue, thick, >=stealth] 368 ($(h1.east)+(0,3)$) edge 369 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/melt} $S_{DK}(C), S_c({\cal DK}, {\cal T},{\cal B})$} 370 ($(h2.west)+(0,2)$); 371 \path[->, color = MidnightBlue, thick, >=stealth] 372 ($(h2.west)+(0,0.5)$) edge 373 node[text = Black, yshift = .3cm, sloped] {200 OK: $S_{SK}(H({\cal T}, {\cal B}),\gamma)$} 374 ($(h1.east)+(0,-0.5)$); 375 \path[rstmsg] 376 ($(h2.west)+(0, -2.5)$) edge 377 node[msglabel] {409 CONFLICT: $S_{C}(X), \ldots$} 378 ($(h1.east)+(0, -3.5)$); 379 \node at (5.3, 0) {}; 380 \end{tikzpicture} 381 \end{center} 382 \end{minipage} 383 \hspace{0.5cm} 384 \begin{minipage}[b]{0.45\linewidth} 385 \tiny 386 \begin{description} 387 \item[$\kappa$] System-wide security parameter, usually 3. 388 \\ \smallskip 389 \item[$\cal DK$] $:= [DK^{(i)}]_i$ \\ List of denomination keys \\ 390 $D + \sum_i A_{DK^{(i)}} < A_{DK}$ 391 \item[$t_j$] Random scalar for $j<\kappa$ 392 \item[${\cal T}$] $:= [T_j]_\kappa$ where $T_j = t_j G$ 393 \item[$k_j$] $:= c T_j = t_j C$ is an ECDHE 394 \item[$b_j^{(i)}$] $:= KDF_b(k_j,i)$ % blinding factor 395 \item[$c_j^{(i)}$] $:= KDF_c(k_j,i)$ % coin secret keys 396 \item[$C_j^{(i)}$] $: = c_j^{(i)} G$ % new coin publics % keys 397 \item[${\cal B}$] $:= [H( \beta_j )]_\kappa$ where \\ 398 $\beta_j := \left[ B_{b_j^{(i)}}(C_j^{(i)}) \right]_i$ 399 \\ \smallskip 400 \item[$\gamma$] Random value in $[0,\kappa)$ 401 % \\ \smallskip 402 % \item[$X$] Deposit or refresh 403 \end{description} 404 \end{minipage} 405 \end{figure} 406 \end{frame} 407 408 409 \begin{frame}{Taler {\tt /refresh/reveal}} 410 \begin{figure}[th] 411 \begin{minipage}[b]{0.45\linewidth} 412 \begin{center} 413 \begin{tikzpicture}[scale = 0.4, 414 transform shape, 415 msglabel/.style = { text = Black, yshift = .3cm, 416 sloped, midway }, 417 okmsg/.style = { ->, color = MidnightBlue, thick, 418 >=stealth }, 419 rstmsg/.style = { ->, color = BrickRed, thick, 420 >=stealth } 421 ] 422 \node[draw = MidnightBlue, 423 fill = CornflowerBlue, 424 minimum width = .3cm, 425 minimum height = 10cm 426 ] (h1) at (-4, 0) {}; 427 \node[draw = MidnightBlue, 428 fill = CornflowerBlue, 429 minimum width = .3cm, 430 minimum height = 10cm 431 ] (h2) at (4, 0) {}; 432 \node[above = 0cm of h1] {Customer}; 433 \node[above = 0cm of h2] {Exchange}; 434 435 \path[->, color = MidnightBlue, very thick, >=stealth] 436 (-5, 4.5) edge 437 node[rotate=90, text = Black, yshift = .3cm] {Time} 438 (-5, -4.5); 439 \path[->, color = MidnightBlue, thick, >=stealth] 440 ($(h1.east)+(0,3)$) edge 441 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/reveal} $H({\cal T}, {\cal B}), {\tilde{\cal T}}, \beta_\gamma$} 442 ($(h2.west)+(0,2)$); 443 \path[->, color = MidnightBlue, thick, >=stealth] 444 ($(h2.west)+(0,0.5)$) edge 445 node[text = Black, yshift = .3cm, sloped] {200 OK: $\cal S$} 446 ($(h1.east)+(0,-0.5)$); 447 \path[rstmsg] 448 ($(h2.west)+(0, -2.5)$) edge 449 node[msglabel] {400 BAD REQUEST: $Z$} 450 ($(h1.east)+(0, -3.5)$); 451 \node at (5.3, 0) {}; 452 \end{tikzpicture} 453 \end{center} 454 \end{minipage} 455 \hspace{0.5cm} 456 \begin{minipage}[b]{0.45\linewidth} 457 \tiny 458 \begin{description} 459 \item[$\cal DK$] $:= [DK^{(i)}]_i$ 460 \item[$t_j$] .. \\ \smallskip 461 462 \item[$\tilde{\cal T}$] $:= [t_j | j \in \kappa, j \neq \gamma]$ \\ \smallskip 463 464 \item[$k_\gamma$] $:= c T_\gamma = t_\gamma C$ 465 \item[$b_\gamma^{(i)}$] $:= KDF_b(k_\gamma,i)$ 466 \item[$c_\gamma^{(i)}$] $:= KDF_c(k_\gamma,i)$ 467 \item[$C_\gamma^{(i)}$] $: = c_\gamma^{(i)} G$ 468 469 \item[$B_\gamma^{(i)}$] $:= B_{b_\gamma^{(i)}}(C_\gamma^{(i)})$ 470 \item[$\beta_\gamma$] $:= \big[ B_\gamma^{(i)} \big]_i$ 471 \item[$\cal S$] $:= \left[ S_{DK^{(i)}}( B_\gamma^{(i)} ) \right]_i$ \\ \smallskip 472 473 \item[$Z$] Cut-and-choose missmatch information 474 \end{description} 475 \end{minipage} 476 \end{figure} 477 \end{frame} 478 479 480 \begin{frame}{Taler {\tt /refresh/link}} 481 \begin{figure}[th] 482 \begin{minipage}[b]{0.45\linewidth} 483 \begin{center} 484 \begin{tikzpicture}[scale = 0.4, 485 transform shape, 486 msglabel/.style = { text = Black, yshift = .3cm, 487 sloped, midway }, 488 okmsg/.style = { ->, color = MidnightBlue, thick, 489 >=stealth }, 490 rstmsg/.style = { ->, color = BrickRed, thick, 491 >=stealth } 492 ] 493 \node[draw = MidnightBlue, 494 fill = CornflowerBlue, 495 minimum width = .3cm, 496 minimum height = 10cm 497 ] (h1) at (-4, 0) {}; 498 \node[draw = MidnightBlue, 499 fill = CornflowerBlue, 500 minimum width = .3cm, 501 minimum height = 10cm 502 ] (h2) at (4, 0) {}; 503 \node[above = 0cm of h1] {Customer}; 504 \node[above = 0cm of h2] {Exchagne}; 505 506 \path[->, color = MidnightBlue, very thick, >=stealth] 507 (-5, 4.5) edge 508 node[rotate=90, text = Black, yshift = .3cm] {Time} 509 (-5, -4.5); 510 \path[->, color = MidnightBlue, thick, >=stealth] 511 ($(h1.east)+(0,3)$) edge 512 node[text = Black, yshift = .3cm, sloped] {POST {\tt /refresh/link} $C$} 513 ($(h2.west)+(0,2)$); 514 \path[->, color = MidnightBlue, thick, >=stealth] 515 ($(h2.west)+(0,0.5)$) edge 516 node[text = Black, yshift = .3cm, sloped] {200 OK: $T_\gamma$} 517 ($(h1.east)+(0,-0.5)$); 518 \path[rstmsg] 519 ($(h2.west)+(0, -2.5)$) edge 520 node[msglabel] {404 NOT FOUND} 521 ($(h1.east)+(0, -3.5)$); 522 \node at (5.3, 0) {}; 523 \end{tikzpicture} 524 \end{center} 525 \end{minipage} 526 \hspace{0.5cm} 527 \begin{minipage}[b]{0.45\linewidth} 528 \tiny 529 \begin{description} 530 \item[$C$] Old coind public key \\ \smallskip 531 \item[$T_\gamma$] Linkage data $\cal L$ at $\gamma$ 532 \end{description} 533 \end{minipage} 534 \end{figure} 535 \end{frame} 536 537 538 \begin{frame}{Operational security} 539 \begin{center} 540 \resizebox{\textwidth}{!}{ 541 \begin{tikzpicture}[ 542 font=\sffamily, 543 every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm}, 544 source/.style={draw,thick,rounded corners,fill=green!20,inner sep=.3cm}, 545 process/.style={draw,thick,circle,fill=blue!20}, 546 sink/.style={source,fill=green!20}, 547 datastore/.style={draw,very thick,shape=datastore,inner sep=.3cm}, 548 dots/.style={gray,scale=2}, 549 to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize}, 550 every node/.style={align=center}] 551 552 % Position the nodes using a matrix layout 553 \matrix{ 554 \node[source] (wallet) {Wallet}; 555 \& \node[process] (browser) {Browser}; 556 \& \node[process] (shop) {Web shop}; 557 \& \node[sink] (backend) {Taler backend}; \\ 558 }; 559 560 % Draw the arrows between the nodes and label them. 561 \draw[to] (browser) to[bend right=50] node[midway,above] {(4) signed contract} 562 node[midway,below] {(signal)} (wallet); 563 \draw[to] (wallet) to[bend right=50] node[midway,above] {(signal)} 564 node[midway,below] {(5) signed coins} (browser); 565 \draw[<->] (browser) -- node[midway,above] {(3,6) custom} 566 node[midway,below] {(HTTPS)} (shop); 567 \draw[to] (shop) to[bend right=50] node[midway,above] {(HTTPS)} 568 node[midway,below] {(1) proposed contract / (7) signed coins} (backend); 569 \draw[to] (backend) to[bend right=50] node[midway,above] {(2) signed contract / (8) confirmation} 570 node[midway,below] {(HTTPS)} (shop); 571 \end{tikzpicture} 572 } 573 \end{center} 574 \end{frame}