\input{aaa_fichier_source_bis.tex}
%\usepackage[xcas]{tablor} 
\usepackage{pstricks,pstricks-add,pst-math,pst-xkey}

\setlength{\topmargin}{0cm} %marge en haut sans en tete
\oddsidemargin=-1.25cm %marge a gauche
\evensidemargin=10cm
\textwidth=17.5cm %largeur sur laquelle on écrit
\textheight=27cm %longeur sur laquelle on écrit

% \oddsidemargin=-0.5cm %marge a gauche

% \leqslant inférieur ou égal
% \geqslant supérieur ou égal
% \guillemotright
% \guillemotleft

%comment inserer une image ?

%\unitlength=1cm
%\begin{picture}(0,0)
%     \put(14,-1.5){\includegraphics[scale=0.6]{spe_transfo_usuelles.jpg}}
% \end{picture}

%\textbackslash pour écrire \
%\displaystyle{texte mathematique a agrandir}
%\pagestyle{empty}
%\addtocounter{numeroexo}{-2}
%\everymath{\displaystyle}
%$\mathcal{ABC}$
%\textbackslash
%\textbf{Partie A} : \textit{Résolution graphique}


%é
%\dbend virage dangereux
%\begin{multicols}{2}
%\end{multicols}

%\linespread{1.2} interligne
%\scriptstyle (réduire texte mathematiques)

\usepackage{geometry}
\usepackage{multicol}
\geometry{vmargin = 0.99cm , hmargin =1.5cm}
%\usepackage{pstricks,pst-node,pst-text,pstricks-add}
\usepackage{color}
\usepackage[justification=centering]{caption}
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\usepackage{pstricks,pst-node,pst-text,pstricks-add}
\usetikzlibrary{fadings}
\usetikzlibrary{arrows,shapes,mindmap,trees}
\usetikzlibrary{positioning}
\newtheorem{exo}{Exercice}

\usepackage{hyperref}
%code source
\usepackage{listings}



\usepackage{xcolor}

\usepackage{pstricks-add}
\usepackage[tikz]{bclogo}

\usetikzlibrary{arrows,automata}


%\usepackage{verbatim}
%\usepackage{slashbox}




\definecolor{comColor}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{strColor}{rgb}{0.58,0,0.82}




%entete
\newcommand\entete[1]{
\begin{center}

\begin{tikzpicture}

\draw[color=white,fill=BlanchedAlmond] (-2.2,0) rectangle (14.2,3.2);

\node[] () at (1.2,2.9){\bf \color{gray}{Lycée Voltaire}};

\node[] () at (6,1.7){\bf \color{Brown}{\scalebox{2}{#1}}};

\node[] () at (12,0.4){\bf \color{gray}{N.S.I}};

%\draw[color=gray!50] (1.7,1.23) -- (10.3,1.23);

\path[scope fading=south] (0,0.5) rectangle (12,1.1);
\node[yscale=-1] () at (6,0.8){\bf \color{Brown!25}{\scalebox{2}{#1}}};


\end{tikzpicture}

\end{center}
}































\begin{document}




\entete{T.P : Sécurité des communications}
















\section{Présentation de \textbf{openSSL}}


\subsection{Protocole SSL}

Le protocole SSL (Secure Socket Layer) a été développé par la
société Netscape Communications Corporation pour permettre aux
applications client/serveur de communiquer de façon sécurisée. SSL a été universellement adopté sur le World Wide Web pour authentifier et chiffrer les communications entre clients et serveurs.

Une session SSL se déroule en
deux temps :

\begin{enumerate}
\item  une phase de poignée de mains (handshake) durant laquelle le
    client et le serveur s'identifient, conviennent du syst?me de
    chiffrement et d'une clé qu'ils utiliseront par la suite.
\item la phase de communication proprement dite durant laquelle les
    données échangées sont compressées, chiffrées et signées.
\end{enumerate}



L'identification durant la poignée de mains est assurée à l'aide de
certificats X509.


\subsection{openSSL}

\underline{\href{http://www.~openssl~.org}{openSSL (http://www.~openssl~.org)}} est une boîte à outils cryptographiques  qui va nous permettre : 
\begin{itemize}
    \item   la création de clés RSA, DSA (signature) ;
    \item   la création de certificats X509 ;
    \item   le calcul d'empreintes (MD5, SHA, RIPEMD160, \ldots) ;
    \item   le chiffrement et déchiffrement (DES, IDEA, RC2, RC4, Blowfish, \ldots) ;
    \item   la réalisation de tests de clients et serveurs SSL/TLS ;
    \item   la signature et le chiffrement de courriers (S/MIME).
  \end{itemize}



Pour connaître toutes les fonctionnalités de \textbf{openSSL} taper dans un terminal :  \texttt{ man    openssl} 




\section{Chiffrement symétrique}

\textbf{openssl} permet d'utiliser plusieurs algorithmes de chiffrement symétrique. \\
Pour obtenir une liste des syst?mes disponibles taper dans un terminal : \texttt{openssl enc -ciphers}




\exercice

\begin{enumerate}
\item Créer un fichier \texttt{toto}. Contenant un texte de votre choix.
\item Ouvrir un terminal \underline{\href{https://bellard.org/jslinux/vm.html?cpu=riscv64&url=fedora33-riscv.cfg&mem=256}{(lien)}} et importer (petite fl?che en bas) le fichier toto.  La commande \texttt{ls} vous permettra de tester que le fichier est bien importé.
\item  Pour chiffrer un fichier en utilisant l'algorithme "blowfish"  en mode CBC,  on utilise :\\

\texttt{openssl enc -bf-cbc -in toto -out toto.chiffre}\\

Taper le code ci-dessus et observer le contenu du fichier avec la commande :  \texttt{cat toto.chiffre}


\item  Pour déchiffrer un message, on utilise :\\

\texttt{openssl enc -bf-cbc -d -in toto.chiffre -out toto.dechiffre}\\

\item Y a t-il une différence de taille entre les fichiers \texttt{toto} et \texttt{toto.dechiffre} ?

\item Comparer le contenu des fichiers \texttt{toto} et \texttt{toto.dechiffre} (Le faire manuellement et en utilisant  la commande :  \texttt{diff toto toto.dechiffre})


\end{enumerate}


\exercice
On a chiffré le fichier \underline{\href{http://bfourlegnie.com/Tnsi_2020/cours/securite/TP/exo2/top_secret.chiffre}{top$\_$secret.chiffre}}  avec l'algorithme "blowfish"  en mode CBC
\begin{enumerate}
\item Télécharger le fichier \underline{\href{http://bfourlegnie.com/Tnsi_2020/cours/securite/TP/exo2/top_secret.chiffre}{top$\_$secret.chiffre}}
\item Dans le terminal, importer  le fichier \texttt{top$\_$secret.chiffre}
\item Déchiffrer le message à  l'aide de la clef : \texttt{Password1234}
\item Exporter le fichier déchiffré avec la commande \texttt{export$\_$file nomfichier}
\end{enumerate}



\section{Chiffrement asymétrique - RSA avec openSSL}


\textbf{Génération d'une paire de clés}


Pour générer une paire de clés  RSA de 2048 bits, stockée
dans le fichier \texttt{maCle.pem}, on saisit la commande suivante :\\


\texttt{openssl genrsa -out maCle.pem 2048}\\

\exercice

Pourquoi parle t-on d'une \textbf{PAIRE} de clefs ?

~~\\~~
\hrule
~~\\~~

Le fichier \texttt{maCle.pem} obtenu est un fichier au format PEM (Privacy Enhanced
Mail, format en base 64).


Pour visualiser la clef privée saisir la commande :  \texttt{cat maCle.pem}

Pour visualiser la clef publique saisir la commande : \texttt{openssl rsa -in maCle.pem -pubout}


\exercice
\begin{enumerate}
\item  La commande : \texttt{openssl rsa -in maCle.pem -pubout -out maClePublique.pem}  permet d'enregistrer 
uniquement la clef publique dans le fichier \texttt{maClePublique.pem}.\\

\item La commande :  \texttt{cat  maClePublique.pem } permet de visualiser la clef publique.\\

\item Télécharger votre clé publique avec : \texttt{export$\_$file maClePublique.pem}.

\item Télécharger votre paire de clés avec : \texttt{export$\_$file maCle.pem}.


\item Pourquoi le fichier \textbf{meCle.pem} ne doit pas être diffusé?

\item Renommer votre clef publique : \texttt{nom$\_$pub.pem}. Déposer votre clef \textbf{PUBLIQUE} via \underline{\href{https://nuage03.apps.education.fr/index.php/s/G3Cw54Xby6YJr8F}{ce lien}} et \textbf{GARDER PRECIEUSEMENT} votre clef privée.
\end{enumerate}




\subsection{ Chiffrement/Déchiffrement de données avec RSA}


Voici la commande pour  chiffrer des données avec une clé publique RSA.\\


\texttt{openssl rsautl -encrypt -in $<$fichier$\_$entree$>$ -inkey $<$clePublique$>$ -pubin -out $<$fichier$\_$sortie$>$}\\

où :
\begin{itemize}
\item   \textbf{fichier$\_$entree} est le fichier des données à
    chiffrer. Attention, ce fichier ne doit pas avoir une taille
    excessive (ne doit pas dépasser 116 octets pour une clé de 1024
    bits) ;
\item   \textbf{clePublique} est le fichier contenant la clé RSA publique.
\item \textbf{fichier$\_$sortie} est le fichier chiffré.\\
\end{itemize}


Pour déchiffrer, on remplace l'option \texttt{-encrypt} par \texttt{-decrypt}. Le
fichier contenant la clé doit évidemment contenir la partie privée. Ce qui donne :\\



\texttt{openssl rsautl -decrypt -in $<$fichier$\_$entree$>$ -inkey $<$cle$>$ -out $<$fichier$\_$sortie$>$}


\newpage 
\exercice
\begin{enumerate}

\item Ecrire à mon intention un message \textbf{gentil et respectueux}. Ce message que vous signerez devra ?tre au format txt  et contenir au maximum 70 caractères. 
\item Chiffrer ce fichier avec \textbf{MA} clef publique. (récupérable via \underline{\href{https://nuage03.apps.education.fr/index.php/s/G3Cw54Xby6YJr8F}{ce lien}}).

\item Déposer le fichier chiffré via  \underline{\href{https://nuage03.apps.education.fr/index.php/s/FRHqm6mDnM8syKd}{ce lien}}
\item Je devrais ?tre capable de le déchiffrer. Patientez un peu ...en passant à la question suivante.
\item Récupérer un message gentil différent du votre \underline{\href{https://nuage03.apps.education.fr/index.php/s/FRHqm6mDnM8syKd}{ce lien}} et essayer de le déchiffrer.
\item Comparer la taille du fichier déchiffré avec celui chiffré. (donner le facteur multiplicatif)

\end{enumerate}


\section{Utilisation des deux chiffrements}

\exercice

Télécharger le fichier :  \underline{\href{http://bfourlegnie.com/Tnsi_2020/cours/securite/TP/exo6/operation_espadon.chiffre}{operation$\_$espadon.chiffre}} que j'ai chiffré avec une clé de chiffrement symétrique utilisant l'algorithme "blowfish"  en mode CBC.\\
Cette clé de chiffrement symétrique a été chiffée avec votre clef publique puis déposée via  \underline{\href{https://nuage03.apps.education.fr/index.php/s/riKaQjiPWCMqQTw}{ce lien.}}
 

Qu'est-ce qui se cache derri?re \textbf{operation$\_$espadon.chiffre} ? (J'esp?re que vous avez conservé précieusement votre clef privée !)


\exercice

\begin{enumerate}


\item Choisir une clé pour un chiffrement symétrique.
\item Créer un fichier qui décrit et explique vos souhaits d'orientation post-bac.
\item Chiffrer ce fichier avec la clé symétrique en utilisant  l'algorithme "blowfish"  en mode CBC.\\ (Nommé le fichier chiffré : \texttt{\textbf{VotreNom$\_$orientation.chiffre}})
\item Ecrire votre clé de chiffrement symétrique  dans un fichier texte et chiffrer le fichier avec \underline{\href{https://nuage03.apps.education.fr/index.php/s/G3Cw54Xby6YJr8F}{ma clef publique}}.\\ Nommer ce fichier chiffré : (\texttt{\textbf{VotreNom$\_$cle.chiffre}})
\item Déposer  les deux fichiers chiffrés via ce \underline{\href{https://nuage03.apps.education.fr/index.php/s/qyfqCSHGTbXPzJB}{lien.}}
\end{enumerate}

\end{document}


\section{Authentification}




Il n'est possible de signer que de petits documents. 
Pour signer un gros document on calcule d'abord une empreinte de ce document (avec une fonction de hachage). 
La commande \texttt{dgst} permet de le faire.\\


\texttt{openssl dgst <hachage>  $-$out <empreinte> <fichier$\_$entree>}\\


où \texttt{hachage} est une fonction de hachage. Avec \texttt{openssl}, plusieurs fonctions de hachage sont proposées dont :

\begin{itemize}
\item MD5 (option -md5), qui calcule des empreintes de 128 bits,
\item SHA1 (option -sha1), qui calcule des empreintes de 160 bits,
\item SHA256 (option -sha256), qui calcule des empreintes de 256 bits,
\item RIPEMD160 (option -ripemd160), qui calcule des empreintes de 160 bits. 
\end{itemize}
    
    
Signer un document revient à signer son empreinte avec sa clé privée. Pour cela, on utilise l?option \texttt{-sign} de la commande \texttt{rsautl} \\


\texttt{openssl rsautl -sign   -in <empreinte> -inkey <cle> -out <signature>}\\



On envoie cette signature ainsi que le document qui a servie à produire l'empreinte.


Le destinataire recoit la signature et le document. Pour  vérifier l'authentification, il doit :

\begin{enumerate}

\item 
Utiliser la clef publique de l'expéditeur pour avoir l'empreinte.

\texttt{openssl rsautl -verify   -in <signature> -pubin -inkey <cle>  -out <empreinte1>}\\



\item Vérifier que le document recu fournit la même empreinte :


\texttt{openssl dgst <hachage>  -out <empreinte2> <fichier$\_$entree>}\\



\texttt{diff <empreinte2> <empreinte1>}

\end{enumerate}


\exercice

Récupérez l'archive \underline{\href{http://bfourlegnie.com/Tnsi_2020/cours/securite/TP/exo8/exo8.zip}{exo8.zip}} qui contient deux fichiers accompagnés d'une signature. Vous avez à disposition :

\begin{itemize}
\item fichier : \texttt{quinquin.txt}, signature : \texttt{signature1}
\item fichier : \texttt{mirabeau.txt}, signature : \texttt{signature2}
\item La partie publique de la clé RSA ayant produit la signature : uneClePublique.pem.
\end{itemize}

De ces deux fichiers, lequel n'est pas authentifiable ?


\end{document}

