\documentclass{beamer} \usepackage[utf8]{inputenc} \usepackage[french]{babel} \usepackage{amsmath} \usepackage{graphicx} \usepackage{tikz} \usetheme{Boadilla} \usecolortheme{beaver} \usepackage{listings} \lstdefinelanguage{pseudo} {morekeywords={if, then, else, end, let, and, or, for, in, while}} \lstset{escapechar=?, mathescape=true, language=pseudo, basicstyle=\tiny, keywordstyle=\bfseries} \renewcommand{\lstlistingname}{Spec.} \title[Pacemaker]{Pacemaker : preuves et mesures de disponibilité dans les réseaux pair-à-pair} \author{Thibaut Horel} \institute[stage INRIA Saclay]{Stage de MPRI sous la direction de Fabrice Le Fessant} \setbeamercovered{transparent} \begin{document} \AtBeginSection[] { \begin{frame} \frametitle{Plan} \tableofcontents[currentsection] \end{frame} } \begin{frame} \maketitle \end{frame} \begin{frame}{Plan} \tableofcontents \end{frame} \section{Cadre d'étude} \begin{frame}{Réseau} On suppose donné un \alert{réseau} : \begin{itemize} \item pair-à-pair, connaissance partielle \item asynchrone, communication de nœud à nœud \item pannes, déconnexion \item potentiellement beaucoup d'utilisateurs \end{itemize} \vfill \alert{Sécurité} : \begin{itemize} \item communications sûres, cryptographie asymétrique \item les pairs n'échangent pas leur clé privée \end{itemize} \end{frame} \begin{frame}{Disponibilité} \begin{block}{Définition : \alert{disponibilité}} Fraction du temps passé par le pair sur le réseau. \end{block} \vfill \alert{Quelle utilité ?} \begin{itemize} \item<2-> structurer le réseau, super-pairs \item<3-> prédire le comportement futur \item<4-> obliger les pairs à coopérer (donnant-donnant) \end{itemize} \end{frame} \begin{frame}{Disponibilité : profil} \begin{center} \begin{figure} \includegraphics[scale=0.42]{avail.eps} \caption{Répartition de la disponibilité de 1469 pairs sur Overnet} \end{figure} \end{center} \end{frame} \begin{frame}{Objectif} \alert{Protocole} : \begin{itemize} \item décentralisé : nécessaire pour le passage à l'échelle \item résistant à la collusion \item simple (bande passante, calcul) \end{itemize} \vfill \alert{Information} : \begin{itemize} \item précise \item non-falsifiable \item durable dans le temps \end{itemize} \end{frame} \section{Le protocole} \begin{frame}{Principe} Système de \alert{preuve} : \begin{itemize} \item Le pair reçoit une preuve de sa présence et la stocke \item La preuve est fournie plus tard à la demande \end{itemize} Fonctionement par \alert{ronde} : \begin{itemize} \item Le pair reçoit une preuve à intervalles réguliers \item La preuve certifie la présence au cours de la ronde \item Un pair particulier : le \alert{serveur}, pour initier la ronde \end{itemize} \begin{columns} \begin{column}{0.45\textwidth} \begin{block}{Avantages}<2-> \begin{itemize} \item décentralisation \item durabilité temporelle \end{itemize} \end{block} \end{column} \begin{column}{0.45\textwidth} \begin{block}{Attention}<3-> \begin{itemize} \item collusion \item falsification \end{itemize} \end{block} \end{column} \end{columns} \end{frame} \begin{frame}{Fonctionnement} \begin{columns}[t] \begin{column}{0.4\textwidth} \textbf{Phase 1 : Semaille} $1$ choisit un secret $S$ et le diffuse. \end{column} \begin{column}{0.55\textwidth} \begin{tikzpicture} \matrix [nodes=draw,circle,ampersand replacement=\&,row sep=1cm] { \node (a) {1}; \\ \node (b) {2}; \\ \node (c) {3}; \\ }; \draw [->] (a.south); \end{tikzpicture} \end{column} \end{columns} \end{frame} \begin{frame}{Fonctionnement (suite)} t \end{frame} \begin{frame}[fragile]{Spécification} \begin{columns}[t] \begin{column}{0.48\textwidth} \begin{block}{\tiny{Serveur au début de la ronde $i$}} \begin{lstlisting} let phase$^i$ = SEEDING; let seed$^i$ = random_seed(); let S$^i_{seed}$ = sign($\langle$$i$|seed$^i$|$T^i$$\rangle$, KS$_{priv}$); let M$^i_{seed}$ = Seed($i$, seed$^i$, $T^i$, S$^i_{seed}$); let map$^i$ = $\emptyset$; $\forall q \in$ NS$_{server}$, send($q$, M$^i_{seed}$); wait $T^i$; \end{lstlisting} \end{block} \begin{block}{\tiny{Toutes les $\Delta << T^i$ secondes chez le pair $p$}} \begin{lstlisting} if phase$^i$ = SEEDING then let H$^i$ = hash(map$^i$); let M$^i_{seedreply}$ = SeedReply($i$, H$^i$); nreplies$^i$ = nreplies$^i+1$; replies$^i$[nreplies$^i$] = (H$^i$, map$^i$); $\forall q \in$ NS$_p$, send($q$, M$^i_{seedreply}$); end if \end{lstlisting} \end{block} \end{column} \begin{column}{0.48\textwidth} \begin{block}{\tiny{Pair $p$ à la réception de \textsf{Seed($i$, seed$^i$, $T^i$, S$^i_{seed}$)}}} \begin{lstlisting} if verify(S$^i_{seed}$, $\langle$$i$|seed$^i$|$T^i$$\rangle$, KS$_{pub}$) then $\forall q \in$ NS$_p$, send($q$, M$^i_{seed}$); let S$^i_p$ = sign($\langle$$i$|seed$^i$$\rangle$, K$^p_{priv}$); let map$^i$ = {$p \rightarrow$hash(S$^i_p$)}; let nreplies$^i$ = 0; let replies$^i$ = $\emptyset$; let included$^i$ = $\bot$; let duration$^i$ = $T^i$; let phase$^i$ = SEEDING; end if \end{lstlisting} \end{block} \begin{block}{\tiny{Réception de \textsf{SeedReply($i$, X$_q$)} depuis le pair $q$}} \begin{lstlisting} if phase$^i$ = SEEDING then map$^i$ = $\{ q \rightarrow $X$_q \} \oplus$map$^i$; end if \end{lstlisting} \end{block} \end{column} \end{columns} \end{frame} \begin{frame}[fragile]{Spécification (suite)} \begin{columns}[t] \begin{column}{0.43\textwidth} \begin{block}{\tiny{Serveur après avoir attendu pendant $T^i$}} \begin{lstlisting} phase$^i$ = PULSE; let H$^i$ = hash(map$^i$); let branch$^i$ = $\emptyset$; branch$^i$[0] = map$^i$; let S$^i_{pulse}$ = sign($\langle$$i$|seed$^i$|H$^i$$\rangle$, KS$_{priv}$); let M$^i_{pulse}$ = Pulse($i$,seed$^i$,branch$^i$,S$^i_{pulse}$); $\forall q \in$ NS$_{server}$, send($q$, M$^i_{pulse}$); \end{lstlisting} \end{block} \end{column} \begin{column}{0.54\textwidth} \begin{block}{\tiny{Réception de \textsf{Pulse($i$, seed$^i$, branch$^i$, S$^i_{pulse}$)}}} \begin{lstlisting} if verify(S$^i_{pulse}$,$\langle$$i$|seed$^i$|hash(branch$^i$[0])$\rangle$,KS$_{pub}$) and phase$^i$ = SEEDING or phase$^i$ = PULSE then phase$^i$ = PULSE; let level = length(branch$^i$)-1; if $\exists$ {$p$ $\rightarrow$ H$^i$} $\in$ branch$^i$[level] and $\exists\; n\; |$replies[$n$] = (H$^i$, oldmap$^i$) and included$^i < n$ and $\forall n\in$[1..level],hash(branch$^i$[n])$\in$branch$^i$[n-1] then branch$^i$[level+1] = oldmap$^i$; let M$^i_{pulse}$ = Pulse($i$, seed$^i$, branch'$^i$, S$^i_{pulse}$); History[$i$] = ($i$, seed$^i$, branch'$^i$, S$^i_p$, S$^i_{pulse}$); included$^i$ = $n$; $\forall q \in$ NS$_p$, send($q$, M$^i_{pulse}$); end if end if \end{lstlisting} \end{block} \end{column} \end{columns} \end{frame} \section{Résultats} \begin{frame}{Non falsifiabilité} \end{frame} \begin{frame}{Simulation} \end{frame} \begin{frame}{PlanetLab} \end{frame} \section*{Conclusion} \begin{frame}{Conclusion} \end{frame} \end{document}