\include{parameters}
\usetheme{AFNIC}
\usepackage[french]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{bortzmeyer-utils}

\title{OpenID}
\author{Stéphane Bortzmeyer\\AFNIC\\\texttt{bortzmeyer@nic.fr}}
\date{Novembre 2007}

%\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex} 
% \setlength{\parskip}{15pt} 
\setlength{\parskip}{15pt plus 10pt minus 10pt} 

\begin{document}

\maketitle

\begin{frame}
  \titlepage
\end{frame}

\begin{frame}[fragile]
 Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License \url{http://www.gnu.org/licenses/licenses.html#FDL}, Version 1.2
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  
\end{frame}

\begin{frame}
  \frametitle{Identité}
  \begin{block}
    {La gestion des identités numériques est un sujet chaud
    aujourd'hui}
    {Mais que recouvre t-il exactement ?}
  \end{block}
Annonces diverses, Microsoft Cardspace, OpenID chez Orange,
inquiétudes pour la vie privée, problème de tous les mots de passe à
gérer, etc.
\end{frame}

\begin{frame}
  \frametitle{Ce que fournit un service d'identité}
  \begin{enumerate}
    \item<2-> Attribuer un identificateur à chaque entité,
    \only<2>{par exemple \url{bortzmeyer@gmail.com} ou bien « Numéro
    6 » (il existe de nombreuses syntaxes), et s'assurer de son
    unicité, voire de sa stabilité,}
    \item<3-> Authentifier une entité, \only<3>{par exemple par un mot
    de passe ou la présentation d'un passeport ou bien par une signature PGP,}
    \item<4-> Servir des données sur cette entité, \only<4>{par
    exemple son âge, son nom à afficher, sa langue maternelle, son
    nombre d'articles publiés sur Slashdot, \ldots}
    \item<5-> Donner accès à des données externes, \only<5>{ce qui est
    très proche du point précédent, à ceci près que les données sont
    gérées par un autre système,}
    \item<6-> Donner accès à des autorisations \only<6>{,par exemple
    \computer{smith} a le droit de committer mais uniquement dans
    \path{/usr/ports} ou bien SB126-FRNIC a le droit de modifier le
    domaine \url{bortzmeyer.fr}.}
  \end{enumerate}
  \begin{block}<7->
    {L'authentification ne garantit rien}
    {Il faut bien distinguer authentification et autorisation}
  \end{block}
\end{frame}

\begin{frame}
\frametitle{Philosophie et informatique}
L'identité n'est pas une caractéristique intrinsèque d'une entité.  

Une entité peut se présenter sous plusieurs identités (et c'est
souvent recommandé, notamment pour préserver la vie privée).
\end{frame}

\begin{frame}
  \frametitle{Cameron et l'identité}
Kim Cameron présente l'identité comme une liste d'\emph{assertions} :
\begin{itemize}
  \item Stéphane Bortzmeyer est orateur à JRES,
  \item Cette personne a plus de dix-huit ans,
  \item ``CerealesKiller'' est un contributeur Wikipédia,
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{Les sept lois de l'identité}
\only<1-4>{Élaborées par Cameron :}
\begin{enumerate}
  \item<2-> Contrôle par l'utilisateur,
  \item<3-> Divulgation minimale, \only<3>{par exemple, on ne devrait
  pas donner son nom pour boire dans un bar, seulement prouver qu'on
  est majeur,}
  \item<4-> Divulgation uniquement à ceux qui en ont besoin,
  \item<5->Identité dirigée, 
  \item<6->Les systèmes d'identité doivent être multiples. \only<6>{Pas de
fournisseur d'identité unique !}
  \item<7->Prise en compte des facteurs humains, \only<7>{au contraire
  de systèmes comme X509},
  \item<8->Apparence unique, \only<8>{unifier les différentes
  identités pour permettre à l'utilisateur une gestion simplifiée.}
\end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{OpenID}
Comment OpenID traite t-il mes cinq services ?
\begin{enumerate}
    \item<2-> Attribuer un identificateur à chaque entité, c'est un
    URL, \only<2>{par exemple \url{http://www.bortzmeyer.org/},}
    \item<3-> Authentifier une entité, chaque fournisseur OpenID
    choisit, \only<3>{typiquement un mot de passe avec le fournisseur,}
    \item<4-> Servir des données sur cette entité, ce n'est
    pas dans le protocole de base\only<4>{, c'est géré par des extensions}.
\end{enumerate}
\only<5->{Le reste est hors-sujet (mais il existe des
    réflexions). L'identité OpenID peut servir d'entrée dans un
    registre d'autorisations.}
\end{frame}

\begin{frame}
\frametitle{Un scénario avec OpenID}
\only<1-3>{Soit Loïc, un blogueur.}

\only<2->{Loïc aime bien laisser des
commentaires sur des tas de blogs. Mais les blogs sont envahis de spam
ou simplement de c{\ldots}ies.}  

\only<3->{Chaque plate-forme de blog crée donc des
\emph{identités}. La plate-forme \emph{authentifie} ces identités et
note des \emph{réputations}.}

\only<4->{Mais les plate-formes ne communiquent pas ! Non seulement il
faut retenir plusieurs mot de passe mais, surtout, on ne pas utiliser
sa réputation d'une plate-forme sur une autre. On repart de zéro.}

\end{frame}

\begin{frame}
\frametitle{Loïc passe à OpenID}

Il ouvre un compte chez MyOpenID, son identité est
\url{http://loic.myopenid.com/}. À chaque plate-forme de blog qui
accepte OpenID, il tape cet identificateur.

Il est redirigé vers MyOpenID, il rentre son mot de passe et hop.

\only<2->{Loïc est heureux mais il a tort.}

\only<3->{Car son identité dépend du fournisseur (l'OP pour
\foreign{OpenID provider}).}

\end{frame}

\begin{frame}[fragile]
\frametitle{Loïc comprend à quoi sert le DNS}

Il achète un nom de domaine pas cher dans un domaine sympa. Il est
désormais \url{http://www.loic.fr/}. 

Il met dans la page Web à laquelle on accède avec cet URL :
\begin{info}
<link rel="openid.server" 
href="http://www.myopenid.com/server/"/>
<link rel="openid.delegate" 
href="http://loic.myopenid.com/"/>
\end{info}

et il a désormais une identité à lui.
\end{frame}

\begin{frame}
\frametitle{Mais comment ça a marché ?}
\only<1-3>{OpenID marche sur HTTP.}

Le site Web qui veut authentifier est le RP\only<1-4>{ (\foreign{Relying
Party})}. Le fournisseur d'identité est l'OP\only<1-4>{ (\foreign{OpenID Provider})}.

\begin{enumerate}
\item<2-> Le RP regarde le site Web de l'utilisateur et trouve l'OP,
\item<3-> Le RP contacte l'OP, lui demandant d'authentifier l'utilisateur,
\item<4-> Le RP redirige l'utilisateur vers son OP,
\item<5-> L'OP authentifie l'utilisateur (OpenID ne dit pas comment),
\item<6-> L'OP redirige l'utilisateur vers le RP.
\end{enumerate}
\only<7->{Pour les requêtes HTTP exactes, voir l'article.}
\end{frame}

\begin{frame}
\frametitle{Support OpenID dans les logiciels}  
La plupart des moteurs de blog l'ont déjà, parfois via une extension.

Sinon, il existe plusieurs bibliothèques libres, pour plusieurs
langages de programmation.
\end{frame}

\begin{frame}
\frametitle{Choisir son identité}
\begin{itemize}
\item<2->Une identité ou plusieurs ? Une seule identité, c'est
probablement trop risqué pour la vie privée (risque de
jointure). Plutôt trois ou quatre.
\item<3->Dépendant de l'OP (\url{http://me.myprovider.com/}) ou pas
(\url{http://www.me.fr/}). Plutôt pas.			   
\item<4->Choix du nom de domaine (publicité : le \dns{fr} est ouvert
aux particuliers).
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{Choisir son OP}
Le choix d'un \emph{fournisseur d'identité} (OP pour \foreign{OpenID
provider}) demande les mêmes précautions que pour n'importe quel
fournisseur (prix, stabilité, etc).

\only<2->{En prime :
\begin{itemize}
\item Que fait-il de ses journaux ? (Risques pour la vie privée.)
\item Offre t-il des services supplémentaires, notamment les
extensions d'OpenID ? Et d'autres protocoles ?
\end{itemize}}

\end{frame}

\begin{frame}
\frametitle{Créer un OP}
Pour la vie privée, l'indépendance technologique et le plaisir, on
peut être son propre OP. C'est relativement facile.

\begin{itemize}
\item<2->Soit un logiciel tout fait qui utilise une base existante
  (comme Gracie, avec PAM),
\item<3->Soit en utilisant les bibliothèques libres existantes pour
  développer sa propre solution.
\end{itemize}

\end{frame}

\begin{frame}
\frametitle{Sécurité}
Risque pour la vie privée : l'OP est informé de nos
visites. Solutions : bien choisir son OP, être son propre OP, avoir
plusieurs identités.

\only<2->{Risque de hameçonnage : le RP nous redirige vers l'OP. Un méchant RP
peut donc nous rediriger vers un vilain OP qui gardera notre mot de
passe. Solutions : mécanismes anti-hameçonnage classiques (secret partagé), ne pas
utiliser de choses réutilisables comme les mots de passe, \ldots}
\end{frame}

\begin{frame}
\frametitle{Autres systèmes d'identité}
La plupart sont très différents d'OpenID donc ne sont pas réellement
« concurrents ».

\begin{itemize}
  \item<2-> Infospace de Microsoft (et son implémentation Cardspace)
  \item<3-> LibertyAlliance
  \item<4-> SAML
  \item<5-> X509
  \item<6-> Uprove
  \item<7-> Shibboleth
  \item<8-> \ldots
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{Questions politiques et sociales}
\begin{itemize}
  \item<2-> Identité contrôlée par l'utilisateur ? Par l'État ? Par une
  grosse société privée ?
  \item<3-> Le consentement de l'utilisateur a t-il un sens, si la
  révélation d'informations privées est une précondition pour accéder
  à un service ?
  \item<4-> Les données privées sont-elles une marchandise dont je
  suis propriétaire ? Ou bien, comme mon corps, sont-elles inaliénables ?
\end{itemize}
\end{frame}

\end{document}
