\documentclass[10pt]{article}


 \usepackage{ifthen}

  \usepackage[utf8]{inputenc}
% \usepackage{fourier}
\usepackage[T1]{fontenc}
  \usepackage[svgnames]{xcolor}

  \usepackage{geometry}
  \geometry{a4paper,hmargin=2cm,vmargin=2cm}

  \setlength{\parindent}{0pt}

  \usepackage{graphicx}
  \usepackage{ifpdf}
   \ifpdf
     \DeclareGraphicsRule{*}{mps}{*}{}
   \fi

 \usepackage{emp} % Le package pour mettre du metapost dans le fichier tex

  \usepackage{multicol}
  \setlength{\multicolsep}{12pt}
  \setlength{\columnsep}{40pt}
  \setlength{\columnseprule}{0.5pt}

  \usepackage{enumitem}
 % \setenumerate{align=left,leftmargin=*,noitemsep}
\setenumerate{align=left,leftmargin=*}
  \setenumerate[2]{label=\alph*),widest=a,ref=\theenumi.\alph*}
  \setitemize{nolistsep}

  \usepackage{amsmath,mathrsfs}
  \usepackage[np]{numprint}

   \usepackage{url}
  \usepackage{bclogo}
\usepackage{pstricks,pst-plot,pst-text,pst-tree,pst-eps,pst-fill,pst-node,pst-math}

  \usepackage[official,right]{eurosym}
  \usepackage[frenchb]{babel}
  \frenchbsetup{CompactItemize=false}
  \DecimalMathComma

\newcounter{exercice}
\newcounter{refex}
\renewcommand{\therefex}{\arabic{exercice}}
\newcounter{partie}[exercice]
\newcounter{refpart}
\renewcommand{\thepartie}{\Alph{partie}}
\renewcommand{\therefpart}{\Alph{partie}}

\makeatletter
\newenvironment{exercice}[1][]{%
		     \stepcounter{exercice}
		     \refstepcounter{refex}
		     \vspace{0.5em}
		     \par
                     \def\@svsechd{\large \color{white} \colorbox{purple}{\bfseries\arabic{exercice}}}%
                     \@xsect{-1em}%
                     \ifthenelse{\equal{#1}{}}{}{\textbf{#1}\par}%
                     }{\par\vspace{0.5em}}
\makeatother

\newenvironment{partie}[1][]{%
                     \stepcounter{partie}
                     \refstepcounter{refpart}
		      \par \vspace{0.5ex}\noindent
		     \textbf{Partie \thepartie \ifthenelse{\equal{#1}{}}{}{\quad -\quad#1}%
		     }\nopagebreak\par%
                     }{\par\vspace{1em}}



%%%%%%%%%%% Ensembles %%%%%%%%%%%%
\newcommand{\D}{\mathbb{D}}
\newcommand{\N}{\mathbb{N}}
\newcommand{\Q}{\mathbb{Q}}
\newcommand{\R}{\mathbb{R}}
\newcommand{\Z}{\mathbb{Z}}
\newcommand{\C}{\mathbb{C}}

%%%%%%%%%%% Intervalles %%%%%%%%%%%%
\newcommand{\intervalleOO}[2]{\left]{#1}\,{;}\,{#2}\right[}
\newcommand{\intervalleOF}[2]{\left]{#1}\,{;}\,{#2}\right]}
\newcommand{\intervalleFO}[2]{\left[{#1}\,{;}\,{#2}\right[}
\newcommand{\intervalleFF}[2]{\left[{#1}\,{;}\,{#2}\right]}

\newcommand{\couple}[2]{\left(#1\,{;}\,{#2}\right)}


\newcommand{\calc}{\mathscr{C}}
\newcommand{\cald}{\mathscr{D}}
\newcommand{\calt}{\mathscr{T}}
%%%%%%%%%%%% Vecteurs %%%%%%%%%%%%%%%
\usepackage[e]{esvect}
\newcommand{\vect}[1]{\vv{#1}}
\newcommand{\repere}[3]{\left(#1\,{;}\,\vect{#2}{,}\,\vect{#3} \right)}
\newcommand{\oij}{\repere{O}{\imath}{\jmath}}
\newcommand{\ouv}{\repere{O}{u}{v}}
\newcommand{\barre}[1]{\overline{#1\rule{0.1em}{0ex}}}

%%%%%%%%%%%% Coordonnées %%%%%%%%%%%%%%%
\newcommand{\cp}[2]{%
        \begin{pmatrix}
        #1\\
        #2
        \end{pmatrix}%
        }

%%%%%%%%%%%% Systèmes %%%%%%%%%%%%%%%
\newcommand{\sysd}[2]{%
       \left\{
       \begin{aligned}
          #1\\
          #2\\
       \end{aligned}
       \right.%
       }

\newcommand{\syst}[3]{%
       \left\{
       \begin{aligned}
          #1\\
          #2\\
	  #3
       \end{aligned}
       \right.%
       }

\newcommand{\sysq}[4]{%
       \left\{
       \begin{aligned}
          #1\\
          #2\\
	  #3
       \end{aligned}
       \right.%
       }




%%%%%%%%%%%% Divers %%%%%%%%%%%%%%%
\DeclareMathOperator{\card}{Card}


% perso nico

\newcommand{\orth}{\bot} % Pour faire le symbole perpendiculaire
\newcommand{\cm}{\,\mathrm{cm}} 
\newcommand{\pI}{{\ensuremath{+\infty}}} 
\newcommand{\mI}{{\ensuremath{-\infty}}} 

\newcommand{\cala}{\mathscr{A}}
\newcommand{\calb}{\mathscr{B}}
\newcommand{\calp}{\mathscr{P}}
\newcommand{\cale}{\mathscr{E}}
\newcommand{\calf}{\mathscr{F}}
\newcommand{\cals}{\mathscr{S}}
\newcommand{\calh}{\mathscr{H}}


%%%%%%%%%%% Limites %%%%%%%%%%%%olivier
\newcommand{\limn}{\ds\lim_{n\rightarrow +\infty}}
\newcommand{\limo}[1][x]{\ds\lim_{#1\rightarrow 0}}
%\newcommand{\limite}[2][x]{\ds\lim_{#1\rightarrow #2}}  % voir avec olivier
\newcommand{\limpinf}[1][x]{\ds\lim_{#1\rightarrow +\infty}}
\newcommand{\limminf}[1][x]{\ds\lim_{#1\rightarrow -\infty}}
\newcommand{\limiteg}[2][x]{\ds\lim_{x\xrightarrow{<}#2}}
\newcommand{\limited}[2][x]{\ds\lim_{x\xrightarrow{>}#2}}


% pour écrire des limites
\newcommand{\limite}[2]{\displaystyle\lim_{#1\rightarrow #2}}

\newcommand{\ssi}{\Longleftrightarrow} % Pour faire le symbole equivalent
\newcommand{\implique}{\Longrightarrow} % Pour faire le symbole implique

\usepackage{enumitem}
%\usepackage{xypic}

  \usepackage{amsmath}
  \usepackage{amssymb}
  \usepackage{amsfonts}
  \usepackage{mathrsfs}
%  \usepackage{shortlst}


\usepackage{pstricks,pst-plot,pst-text,pst-tree,pst-eps,pst-fill,pst-node,pst-math}
\usepackage{pstricks,pst-plot,pst-3dplot,pstricks-add}
\newtheorem{remarque}{Remarque}
\newtheorem{remarque*}{Remarque}
\newtheorem{theorem*}{Théorème}
\newtheorem{definition*}{Définition}


% --------------------------------------------------------------------------------------------------

%devoir surveillé personalisé
% #1 titre principal, #2 titre milieu haut en petit, #3 titre haut
% gauche, #4 titre haut droit 
\newcommand{\devpers}[4]{
                         %\pagestyle{empty} 
                         \noindent 
                         \begin{minipage}[t]{\linewidth}
                         \textit{#3 } \hfill \textit{ #2} \hfill \textit{#4}
                         \end{minipage}
                         \begin{center}{{\Large\bf #1 }} \end{center} 
                         \vspace{-0.3cm}
                         \rule{\linewidth}{0.5mm} 
                         }




\newenvironment{exnormal}[1]{
                             \addtocounter{exercice}{1}
                             \vspace{1em} \par \noindent
                              {\bf Exercice \arabic{exercice}{\bf #1 } :}
                            }{\vspace{0.25em}}

\newcommand{\ds}{\displaystyle}

\newenvironment{exodev}[2]{
                             \addtocounter{exercice}{1}
                             \vspace{0.5em} \par \noindent
                              {\subsubsection*{Exercice \arabic{exercice}~:{~\bf #2 } }}
                            }{\vspace{0.05em}%\hrule
			    }
%\newcommand{\exo}[1]{\begin{exnormal}{}}
%\newcommand{\finexo}{\end{exnormal}}

%\newcommand{\exo}[1]{\begin{exodev}{}}
%\newcommand{\finexo}{\end{exodev}}
\newcommand{\E}{\text{e}}
\renewcommand{\i}{\text{i}}
% pour faire le conjugué
\newcommand{\conj}[1]{\overline{\rule{0em}{1.5ex}#1\rule{0em}{1.5ex}} }
\usepackage{tabularx}


\usepackage{manfnt}   % pour utiliser des symboles comme danger etc ...
%\reversemarginpar  % pour faire apparaitre le symbole danger à gauche
\newcommand{\danger}{\marginpar[\Large \hfill\dbend]{\LARGE \dbend\hfill}}
%%%%%%%%%%%%%%%%%%%%%%%ù
% pour faire un cours 

\usepackage{amsmath,mathrsfs}
  \usepackage[np]{numprint}

\newcommand{\titrecours}[3]{
                           {\bf
                           {\Large
                           {\noindent Math\'{e}matiques-#2
                            \hfill Ann\'ee scolaire  $\mathbf{#3}$  
                            \noindent\rule{\linewidth}{0.5mm} 
                            \vspace{-1cm}
                            \begin{center}
	                    {\LARGE{#1}}
                            \end{center}
                           }
                           }
                           }
                           \vspace{-.4cm}
                           \noindent \rule{\linewidth}{0.5mm}
                           }          

% les definitions, remarques, theoremes .....

\newtheorem{theoreme}{Th\'eor\`eme}
%\newtheorem*{theoreme*}{Th\'eor\`eme}
\newtheorem{axiome}{Axiome}
%\newtheorem*{axiome*}{Axiome}
\newtheorem{definitiontheoreme}[theoreme]{D\'efinition et Th\'eor\`eme}
\newtheorem{notation}[theoreme]{Notation}
%\newtheorem*{notation*}{Notation}
\newtheorem{proposition}[theoreme]{Proposition}
\newtheorem{corollaire}[theoreme]{Corollaire}
\newtheorem{lemme}[theoreme]{Lemme}
%\theoremstyle{definition}
\newtheorem{propriete}[theoreme]{Propri\'et\'e}
%\newtheorem*{propriete*}{Propri\'et\'e}
\newtheorem{exemple}[theoreme]{\underline {Exemple}} 
%\newtheorem*{exemple*}{\underline {Exemple}} 
\newtheorem{question}{\underline {Question}}
%\newtheorem*{question*}{\underline {Question}}
\newtheorem{definition}[theoreme]{D\'efinition} 
%\newtheorem*{definition*}{D\'efinition} 
\newtheorem{consequence}[theoreme]{Cons\'equence} 
%\newtheorem*{consequence*}{Cons\'equence} 
%\theoremstyle{remark}
%\newtheorem{remarque}[theoreme]{Remarque}
%\newtheorem*{remarque*}{Remarque}
%Pour remetre à jour les commentaire voir le livre de modalidades ou c'est fait comme il faut.



% pour faire des compositions de limites
\newcommand{\composition}[4]{\ensuremath{\renewcommand{\arraystretch}{2}
\left.\begin{array}{l} 
#1 \\
#2 \\
#3 
\end{array} \right\} \implique #4}
\renewcommand{\arraystretch}{1}
}

%demonstration, preuves...
\newenvironment{preuve}{\vskip 2mm\noindent {\it Preuve : }}{\flushright $\Box$ \vskip 2mm}
\newenvironment{dem}{\vskip 2mm\noindent {\it D\'emonstration :}}{\par}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fin de pour faire un cours


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%% Algorithmes %%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{xcolor}
\colorlet{LFBcoultable1}{blue!25!black!20}

\usepackage[french,ruled,lined,linesnumbered,inoutnumbered]{algorithm2e}

\SetKwInput{Lire}{Lire}
\SetKwInput{Afficher}{Afficher}

\SetKwFor{VarAlgo}{Variables}{}{finVariables}
\newcommand{\Variables}[1]{\SetAlgoVlined%
                           \VarAlgo{}{#1}
                           \SetAlgoLined}

\SetKwFor{EntrAlgo}{Entrées}{}{fin}
\newcommand{\Entrees}[1]{\SetAlgoVlined%
                           \EntrAlgo{}{#1}
                           \SetAlgoLined}

\SetKwFor{TraitAlgo}{Traitement}{}{fin}
\newcommand{\Traitement}[1]{\SetAlgoVlined%
                           \TraitAlgo{}{#1}
                           \SetAlgoLined}

\SetKwFor{SortAlgo}{Sorties}{}{fin}
\newcommand{\Sorties}[1]{\SetAlgoVlined%
                           \SortAlgo{}{#1}
                           \SetAlgoLined}
\makeatletter
\newsavebox{\LFB@lgo}
\newenvironment{algoLFB}[2][0.5]% % 2 parametres : 1-facultatif largeur en proportion 2-titre de l'algo
               {\setlength{\fboxsep}{0pt}\begin{lrbox}{\LFB@lgo}
               \small\begin{minipage}{#1\linewidth}%
                \begin{algorithm}[H]%
                \caption{#2}}%
               {\end{algorithm}%
                \end{minipage}%
                \end{lrbox}%
                \begin{center}
                \fcolorbox{black}{LFBcoultable1}{\usebox{\LFB@lgo}}
%                \fcolorbox{LFBcoultable2}{LFBcoultable1}{\usebox{\LFB@lgo}}
                \end{center}}
\makeatother
\newcommand{\recoit}{\ensuremath{\leftarrow}}

%%%%%%%%%%%%%%%%%%%%%% pour inserer des bouts de code
%% voir http://www.latex-howto.be/files/LaTeX-HowTo-ch9.pdf
\usepackage{listings} 
\lstset{linewidth =12cm , xleftmargin =2cm ,aboveskip =5mm ,belowskip =1 cm , frame=tblr ,rulesep=1mm,framesep =5mm,framerule =2pt, xrightmargin =5mm ,xleftmargin =5mm ,
rulecolor ={\color[gray]{0.6}} , rulesepcolor ={\color[gray]{0.9}}, backgroundcolor={\color[gray]{0.9}},  basicstyle =\rm\footnotesize}
%%%%%%%%%%%%%%%%%



%inserer une figure à droite du texte 
  %\begin{textfig}{largeur en %}{echelle}figure}
\usepackage{calc}
\newsavebox{\maboite}
\newenvironment{textfig}[3]%
{\savebox{\maboite}{\begin{minipage}{\linewidth-#1\linewidth}
\begin{center}
\includegraphics[scale=#2]{#3}
\end{center}
\end{minipage}}
\begin{minipage}{#1\linewidth}}%
{\end{minipage} \usebox{\maboite}}




\newcommand{\exo}[1]{\begin{exercice}}
\newcommand{\finexo}{\end{exercice}}


\begin{document}
\pagestyle{empty}
% \begin{empfile} % Tout doit être inclus dans cet environnement
%                 % qui a un paramètre facultatif : le nom du fichier .mp
%                 % par défaut, c'est le nom du fichier .tex (plus simple)
% 
% \begin{empcmds} % le préambule du fichier .mp
% input latexmp;
% input repere;
% \end{empcmds}


\devpers{Chiffrement}{}{Janvier 2013}{Spécialité}
\section*{Le point sur le chiffrement}
 Le principe consiste à utiliser une bijection de $\Z/p\Z$ dans lui-même pour crypter le message. Le codage de Jules César peut être vu comme l’addition d’une constante dans $\Z/26\Z$,
Vigenère est l’addition des lettres du message à crypter avec les lettres d’un texte fixé. Le codage affine utilise une application affine
$x \rightarrow ax+b$ 

avec a inversible modulo p (le calcul de l’inverse fait intervenir l’identité de Bézout). Aucune de ces méthodes n’est résistante à une analyse statistique du message crypté 
(dans le cas de Vigenére, l’attaque est plus complexe à mettre en oeuvre).

Le chiffrement de Hill groupe les lettres du message à crypter par paquets de n (n fixé) pour éviter l’attaque par analyse statistique, on a donc un vecteur $v \in  (\Z/p\Z)^n$
 dont on calcule l’image par un chiffrement affine $v \rightarrow Av+b $

où A est une matrice inversible sur $\Z/p\Z$ (donc est à la limite du programme sauf dans des cas comme n=2 où on peut exprimer l’inverse explicitement de manière simple, malheureusement 
dans ce cas n n’est pas suffisamment grand pour que ce code soit résistant à une analyse statistique).

De plus toutes ces méthodes supposent que les clés de chiffrement et de déchiffrement sont secretes (en effet si on connait l’une des clefs on en déduit l’autre), 
alors que RSA par exemple permet de publier une des deux clefs.

Exercices : écrire des fonctions de chiffrement/déchiffrement par ces méthodes. Instruction en Xcas : asc, char, %, inv.
%\end{empfile}

\newpage
\devpers{Chiffrement}{}{Janvier 2013}{Spécialité}
\section{Travaux pratiques}
Les fichiers affine.py et decalage.py sont des programmes en python qui vous permettront toute sorte d'analyse en vu de décoder les textes fournis. 

Attention, toutes les chaines de caractères doivent être tapée entre guillemet !!!

\subsection{Prise en main rapide}
Ouvrez le fichier \texttt{Decalage.py} avec le programme \texttt{IDLE}. Jetez un oeil aux procèdures. 

En fin de programme taper par exemple la commande 
 \begin{lstlisting}[language=python]
l=Decale([12 , 24],4)
print(l)
\end{lstlisting}     
Faire Ctrl-S pour enregistrer et F5 pour faire tourner le programme. Comprenez-vous le résultat ? Si oui,
il est grand temps de  passer à la suite...

\subsection{Code cesar}
c'est un decalage du type $x \rightarrow x+b$. A chaque lettre on associe un entier, on y rajoute la valeur $b$, on regarde le reste modulo 26 et on repasse en lettre. 
On donne le texte suivant. 
\begin{bclogo}{Texte 1}
AP VGTCDJXAAT P VGPCST QDJRWT VDQT STH BDJRWTH PKTR HP VGPCST QDJRWT TAAT KXI SPCH JCT BPGT HJG JC CTCJEWPG FJX AJX HTGI ST EADCVTDXG
 BPXH KDXAP FJ JC HDXG TAAT TC P BPGGT STH BDJRWTH PJ ETIXI STYTJCTG STH BDJRWTH PJ SXCTG STH BDJRWTH IDJIT AP YDJGCTT  TAAT TC P PHHTO 
\end{bclogo}

 

 


\begin{enumerate}
 \item Que veut-il dire ? (servez-vous du fichier  \texttt{decalage.py}). Précisez la méthode utilisée.
 \item Que pensez-vous du chiffrement Cesar ?
\end{enumerate}



\subsection{Chiffrement affine}

On utilise un encodage du type $x \rightarrow ax+b$. C'est-à-dire une lettre associée à l'entier $x$ est chiffrée par l'entier $y$ reste de la division euclidienne de $ax+b$ par 26.

\begin{enumerate}
 \item Peut-on toujours decoder ? c'est-à-dire retrouver $x$ quand on connait $y$ ? Donner des conditions et le nombres de codages possibles.
 \item Ouvrez le fichier \texttt{Affine.py} avec le programme \texttt{IDLE}. Jetez un oeil aux procédures. En fin de programme, rajoutez les commandes  
 \begin{lstlisting}[language=python]
l=Affine([5,8],3,7)
print(l)
\end{lstlisting}
Faire tourner. Comprenez-vous ? 
\item On a le texte suivant. pouvez-vous le décoder ? Vous pouvez pour cela utiliser une analyse fréquentielle... Voir \url{http://www.dcode.fr/analyse-frequences}
\begin{bclogo}{Texte 2}
WPCGCHUA CVRRPQQ H AJUUP RJU RPUR AP QH WPHVGP FHGIPFHGXNVP PU LPR GPCFPR   QPR FHGIPFHGXNVPR LJURXAPCPPR H QPVC MVRGP FPRVCP YJRRPAPUG UJU RPVQPFPUG QH KPCXGP FHXR QH WPHVGP
 RVYCPFP VUP WPHVGP ECJXAP PG HVRGPCP LJFFP LPQQP A'VUP RLVQYGVCP RHUR CPEPCPULP H VUP YHCGXP AP UJGCP ECHTXQP UHGVCP RHUR QPR PEEPGR A XQQVRXJU FHTUXEXNVPR AP QH YPXUGVCP 
JV AP QH FVRXNVP YJVCGHUG YVC PG RVWQXFP LHYHWQP A VUP YPCEPLGXJU RPKPCP GPQQP NVP RPVQPFPUG QPR YQVR TCHUAR HCGR YPVKPUG QH FJUGCPC Q PRYCXG KCHX AV YQHXRXC Q POHQGHGXJU Q XFYCPRRXJU
 A PGCP YQVR NV VU IJFFP NVX PRG QH YXPCCP AP GJVLIP AP Q POLPQQPULP QH YQVR PQPKPP  AJXG PGCP GCJVKP AHUR QPR FHGIPFHGXNVPR HVRRX RVCPFPUG NVP QH YJPRXP
\end{bclogo}


\item Et maintenant, essayer avec celui là qui est plus court ...
\begin{bclogo}{Texte 3}
SZ O PL DPDMR JZ OP WJVWR
\end{bclogo}

\item Que pensez-vous de ce cryptage ? 
\end{enumerate}






 






\end{document}


