% CVSId: $Id: adulau.tex,v 1.1 2003/02/07 17:51:53 adulau Exp adulau $
%
%
%     Copyright (c)  2001,2002,2003  Alexandre Dulaunoy <adulau@foo.be>
%     Permission is granted to copy, distribute and/or modify this document
%     under the terms of the GNU Free Documentation License, 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.
%     A copy of the license is included in the section entitled "GNU
%     Free Documentation License".
\documentclass[%
pdf,
%nocolorBG,
colorBG,
slideColor,
%slideBW,
%draft,
frames
%azure
%contemporain
%nuancegris
%troispoints
%lignesbleues
%darkblue
%alienglow
%autumn
]{prosper}
\usepackage{amsmath}
\usepackage[T1]{fontenc}
\usepackage{pslatex}
\usepackage[french,english]{babel}
%\usepackage{listings}

\begin{document}
\title{Sécurité en ingénierie du Logiciel}
\subtitle{Le cadre des Web Services \\ {\em Partie 5 : Authentification}}
\author{Alexandre Dulaunoy}
\email{adulau@foo.be}
\maketitle

\begin{slide}{Agenda}
\begin{itemize}
\item Introduction
\item Authentification HTTP
\item HTTP Basic
\item HTTP Digest
\item Authentification X.509/SSL
\item Authentification Services Web/applicative
\item Conclusion
\item Exemples
\end{itemize}
\end{slide}

\begin{slide}{Introduction}
Authentification et Services Web\\
L'authentification utilisateur(*) est le processus pour vérifier l'authenticité d'un utilisateur(*).
Utilisateur peut être une entité. 
\begin{itemize}
\item Plusieurs approches (difficile de choisir),
\item Questions de compatibilité entre browser/serveur,
\item Persistances de l'authentification,
\item Sécurité de l'authentification,
\end{itemize} 
\end{slide}

\begin{slide}{Authentification HTTP}
\begin{itemize}
\item HTTP est "stateless" (cf. cours 2),
\item Authentification HTTP/1.1 -> RFC2617,
\begin {itemize}
\item Basic et Digest Access Authentification
\end {itemize}
\item Valide pour les Web Services utilisant HTTP,
\item mais aussi pour toutes communications HTTP,
\end{itemize}
\end{slide}

\begin{slide}{HTTP Basic}
L'authentification "Basic" est basée sur le principe le client doit s'authentifier pour chaque "realm". Le "realm" est une valeur opaque.\\

realm="WallyWorld"\\

La chaine d'authentification est au format :\\

Authorization: Basic <base64 user:password>\\
p.ex :\\
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==\\

(encodée en Base64) 
\end{slide}

\begin{slide}{HTTP Basic : exemple}
\begin{itemize}
\item Le client émet une requête :\\
GET /admin/ HTTP/1.1\\
\item Le serveur répond avec une entête (header) WWW-Authenticate :\\
HTTP/1.1 401 Authorization Required\\
WWW-Authenticate: Basic realm="Admin Password"\\
\item Le client (suite à la saisie d'un password) émet une nouvelle requête avec :\\
GET /admin/ HTTP/1.1\\
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==\\
\end{itemize}

\end{slide}

\begin{slide}{HTTP Digest}
Pour résoudre plusieurs problèmes de HTTP Basic :
\begin{itemize}
\item L'interception du password,
\item Le rejeu possible (replay attack),
\item La vérification du client ET du serveur,
\item Le stockage des password sur le serveur,
\item La vérification de l'URI,...
\end{itemize}
\end{slide}

\begin{slide}{HTTP Digest}
\begin{itemize}
\item L'authentification "Digest" est basée sur le principe "challenge/response". Le serveur envoie un challenge au client pour chaque "realm".
\item Une fonction de "hashage" est utilisée dans le cadre du "challenge/response" pour ne pas divulguer le secret partagé.
\end{itemize}
Apache (mod\_auth\_digest).
\end{slide}

\begin{slide}{HTTP Digest : Calcul}

    request-digest  = <"> < KD ( H(A1), unq(nonce-value)\\
                                        ":" nc-value\\
                                        ":" unq(cnonce-value)\\
                                        ":" unq(qop-value)\\
                                        ":" H(A2)\\
                           ) <">\\

    KD (secret,data) = H(concat(secret, ":", data)\\
    A1 = unq(username-value) ":" unq(realm-value) ":" passwd\\
    A2 = Method ":" digest-uri-value\\

\end{slide}

\begin{slide}{HTTP Digest : Exemple}

\begin {itemize}
\item Le client émet une requête :\\
GET /admin/ HTTP/1.1\\
\item Le serveur répond avec une entête (header) WWW-Authenticate:\\
\end {itemize}
         HTTP/1.1 401 Unauthorized\\
         WWW-Authenticate: Digest\\
                 realm="testrealm@host.com",\\
                 qop="auth",\\
                 nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",\\
                 opaque="5ccc069c403ebaf9f0171e9517f40e41"\\

\end{slide}

\begin{slide}{HTTP Digest : Exemple}
\begin{itemize}
\item Le client répond (après le calcul de response) :\\
\end{itemize}
         Authorization: Digest username="Mufasa",\\
                 realm="testrealm@host.com",\\
                 nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",\\
                 uri="/admin/",\\
                 qop=auth,\\
                 nc=00000001,\\
                 cnonce="0a4f113b",\\
                 response="6629fae49393a05397450978507c4ef1",\\
                 opaque="5ccc069c403ebaf9f0171e9517f40e41"\\

Le serveur répond aussi une "reponse" (calcul identique que pour le client sauf pour A2 (:/admin/ uniquement)).

\end{slide}
\begin{slide}{HTTP auth - suivi authentification}
\begin {itemize}
\item HTTP Basic
\begin{itemize}
\item Transmission à chaque requête de l'entête.
\end{itemize}
\item HTTP Digest\\
\begin{itemize}
\item Transmission à chaque requête de l'entête (et donc recalcul).
\end{itemize}
\end{itemize}
\end{slide}

\begin{slide}{Authentification X.509/SSL}
\begin{itemize}
\item Authentification dans le protocole TLS/SSL,
\item Authentification X.509 unilatérale (le serveur uniquement),
\item Authentification X.509 mutuelle (serveur et client),
\item Comme TLS/SSL encapsule HTTP, une authentification "Basic" peut être utilisée sans divulguer le password
\end{itemize}
\end{slide}

\begin{slide}{Authentification X.509/SSL - suivi de session}
\begin{itemize}
\item Par session TLS/SSL, il y a une référence (SSL\_SESSION\_ID) qui permet de suivre une session authentifiée,
\item Export des paramètres X.509 (DistinguishedName, CommonName...),
\item Durée de vie des sessions (24 heures suivant RFC TLS),
\item Session authentifiée au niveau "applicatif".
\end{itemize}
\end{slide}

\begin{slide}{Authentification Applicative / Services Web}
Comment maintenir une authentification de session applicative ?
\begin{itemize}
\item Cookies et Secure Cookies (TLS),
\item Method GET/POST avec id de session,
\item Header de session propre au serveur,
\item Insertion dans les URI,
\item ....
\end{itemize}
\end{slide}

\begin{slide}{Q\&R}
\begin{itemize}
\item adulau@foo.be
\item http://www.foo.be/cours/securite-webservices/
\item 3B12 DCC2 82FA 2931 2F5B  709A 09E2 CD49 44E6 CBCD
\end{itemize}
\end{slide}

\end{document}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t%%% End: 
