1 Au bout d'un nombre $b$ d'itérations,
2 si la fonction, notée $G_{f_u}$ (ou bien $G_{f_g}$)
3 présentée au chapitre~\ref{chap:carachaos},
4 a de \og bonnes\fg{} propriétés chaotiques,
5 le mot $x^b$ devrait \og sembler ne plus dépendre\fg{} de $x^0$.
6 On peut penser à exploiter une de ces fonctions $G_f$
7 comme un générateur aléatoire.
9 Ce chapitre présente donc une application directe
10 de la théorie développée ci-avant
11 à la génération de nombres pseudo-aléatoires.
12 La section~\ref{sec:PRNG:chaos:autres} présente un état de l'art (incomplet) de l'exploitation de
13 fonctions au comportement chaotique pour obtenir des PRNGs.
14 La section~\ref{sub:prng:algo}
15 présente ensuite l'algorithme de PRNG. La contrainte de
16 distribution uniforme de la sortie est discutée dans cette section.
17 La chaoticité du générateur est étudiée en
18 section~\ref{prng:unaire:chaos}.
19 La section~\ref{sub:prng:algo} a été publiée à ~\cite{bcgw11:ip,bcgr11:ip}.
21 \section{Quelques PRNGs basés sur des fonctions aux itérations chaotiques}\label{sec:PRNG:chaos:autres}
23 Les PRNGs chaotiques (CPRNGs) sont des générateurs non linéaires définis par
24 $x_0 \in \mathbb{R}$ et $x_{t+1} = f(x_t)$, où $f$ est une fonction au comportement chaotique.
25 Les raisons qui expliquent l'intérêt de telles fonctions sont naturellement la sensibilité aux conditions initiales,
26 leur imprévisibilité\ldots Cependant, comme l'ordinateur sur lequel elles s'exécutent a une précision finie,
27 les générateurs qui les embarquent peuvent avoir des périodes arbitrairement courtes,
28 ne pas fournir de sortie selon une distribution uniforme\ldots
29 D'un point de vue cryptographique, ces CPRNGs sont critiquables~\cite{wiggins2003introduction}.
30 Réduire ces critiques est l'objectif de nombreux travaux de recherche reportés ci dessous.
33 Parmi les suites simples classiquement embarquées dans les CPRNGs, on trouve principalement
34 la suite logistique et
35 la suite de Hénon. La suite logistique~\cite{may1976simple} est définie de $[0;1]$ dans lui même par $x_{t+1} = r \times x_t(1-x_t)$
36 avec $x_0 \in [0;1]$ et $3,57<r<4,0$.
37 La suite de Hénon~\cite{henon1976two} de $A \times B$ dans lui même, avec $A$ et $B$ deux sous-ensembles de $\R$,
39 $x_{t+1} = (1-a x_t^2)+y_t$ et $y_{t+1}= bx_{t+1}$, où $a$ et $b$ sont les paramètres canoniques.
40 Pour $a=1,4$, $b=0,3$, $A=[-1,5;1,5]$ et $B=-[0,4;0,4]$ le comportement de cette suite est chaotique.
42 La suite logistique est utilisée dans l'article~\cite{dabal2011chaos} dans lequel
43 les auteurs utilisent une représentation des réels à virgule fixe.
44 Les auteurs de~\cite{dabal2012fpga} comparent leur implantation de la suite logistique avec celle
46 Les auteurs de~\cite{6868789} ont exploité la réécriture de la suite logistique sous la forme
47 $x_{t+1} = (r \times x_t)-(r \times x_t^2)$ et la possibilité de paralléliser ceci
48 pour accroître la fréquence du PRNG.
49 Les auteurs de~\cite{liu2008improved} proposent de coupler deux suites logistiques,
50 chacune étant paramétrée différemment ($x_0$, $r_1$ et $y_0$, $r_2$ respectivement). L'idée principale
51 est de modifier iterrativement le paramètre $r_2$ à l'aide des itérés de $x_t$.
52 Quant aux auteurs de~\cite{merahcoupling13}, ils couplent la suite logistique et celle de Hénon.
53 La première suite sert à sélectionner les éléments parmi ceux générés par la seconde.
54 Les auteurs de~\cite{mao2006design}, combinent spatialement $L$ suites logistiques
55 et construisent ainsi $x_t(0)$, \dots, $x_t(L-1)$ selon l'équation suivante:
58 (1- \varepsilon) f(x_t(i)) +
60 (f(x_t(i-1)) + f(x_t(i+1))),
64 $i \in \dfrac{\Z}{L\Z}$,
65 $f$ est une adaptation de la suite logistique au cas discret,
66 la graine $(X_0(0),\dots, X_0(L-1))$ et la pondération $\varepsilon$ sont fournies par l'utilisateur.
68 Certaines équations différentielles ont été à la base de PRNGs chaotiques.
69 On pense aux équations de Lorenz~\cite{Lorenz1963}, à celles de Rössler~\cite{Rossler1976397}\ldots
70 Celles-ci ont par exemple embarquées dans les PRNG dans les articles~\cite{Silva:2009:LLP:1592409.1592411}
71 et~\cite{mansingka2013fibonacci} respectivement.
74 \section{ Nombres pseudo-aléatoires construits par itérations unaires}\label{sub:prng:algo}
83 \KwIn{une fonction $f$, un nombre d'itérations $b$,
84 une configuration initiale $x^0$ (${\mathsf{N}}$ bits)}
85 \KwOut{une configuration $x$ (${\mathsf{N}}$ bits)}
87 %$k\leftarrow b + \textit{XORshift}(b+1)$\;
90 $s\leftarrow{\textit{Random}({\mathsf{N}})}$\;
91 %$s\leftarrow{\textit{XORshift}(n)}$\;
92 $x\leftarrow{F_{f_u}(x,s)}$\;
96 \caption{PRNG basé sur les itérations unaires.}
100 \subsection{Algorithme d'un générateur}
101 On peut penser à construire un générateur de nombres
102 pseudo-aléatoires comme dans l'algorithme~\ref{CI Algorithm} donné ci-dessous.
105 Celui-ci prend en entrée: une fonction $f$;
106 un entier $b$, qui est le nombre d'itérations à effectuer entre deux sorties
107 et une configuration initiale $x^0$.
108 Il retourne une nouvelle configuration $x$ en appliquant
109 la fonction $F_{f_u}$ (équation~\ref{eq:iterations:unaires}
110 vue au chapitre~\ref{chap:carachaos}) et correspondant
111 à des itérations unaires.
112 En interne, il exploite un algorithme de génération
113 de nombres pseudo-aléatoires donné en paramètre.
114 Cela peut être n'importe quel PRNG (XORshift, Mersenne-Twister) dont la
115 sortie est uniformément distribuée.
116 Notre approche vise a donner des propriétés de chaos à ce générateur embarqué.
119 % \textit{Random}$(l)$.
120 % Cet algorithme est utilisée dans notre générateur pour construire la longueur
121 % de la stratégie ainsi que les éléments qui la composent.
122 % Pratiquement, il retourne des entiers dans $\llbracket 1 ; l \rrbracket$
123 % selon une distribution uniforme et utilise
124 % \textit{XORshift} qui est une classe de générateurs de
125 % nombres pseudo aléatoires conçus par George Marsaglia.
128 % L'algorithme \textit{XORshift}
129 % exploite itérativement l'opérateur $\oplus$
130 % sur des nombres obtenus grâce à des décalages de bits.
131 % Cet opérateur, défini dans $\Bool^{n}$,
132 % applique la fonction \og xor \fg{}
133 % aux bits de même rang de ses deux opérandes (\og opération bit à bit \fg{}).
134 % Une instance de cette classe est donnée dans l'algorithme~\ref{XORshift} donné
137 % \begin{algorithm}[h]
139 % \KwIn{la configuration interne $z$ (un mot de 32-bit)}
140 % \KwOut{$y$ (un mot de 32-bits)}
141 % $z\leftarrow{z\oplus{(z\ll13)}}$\;
142 % $z\leftarrow{z\oplus{(z\gg17)}}$\;
143 % $z\leftarrow{z\oplus{(z\ll5)}}$\;
147 % \caption{Une boucle de l'algorithme de \textit{XORshift}}
152 Nous avons vu au chapitre~\ref{chap:carachaos} que
153 $G_{f_u}$ est chaotique dans l'espace $\mathcal{X}_u$
154 si et seulement si le graphe d'itérations $\textsc{giu}(f)$
155 est fortement connexe.
156 Pour $b=1$, l'algorithme itère la fonction $F_{f_u}$.
158 Pour simuler au mieux l'aléa, un bon générateur de nombres pseudo-aléatoires
159 se doit de fournir des nombres selon une distribution uniforme.
160 Regardons comment l'uniformité de la distribution
161 contraint la fonction $f$ à itérer.
163 \subsection{Un générateur à sortie uniformément distribuée}\label{sub:prng:unif}
165 Une matrice stochastique est une matrice carrée
166 dont tous les éléments sont positifs ou nuls et dont
167 la somme de chaque ligne
169 Une matrice stochastique l'est doublement si la somme de chaque colonne est 1.
170 Enfin, une matrice stochastique de taille $n \times n$ est régulière
171 si la propriété suivante est établie:
172 $$\exists k \in \mathds{N}^\ast, \forall i,j \in \llbracket 1; n \rrbracket, M_{ij}^k>0.$$
174 On énonce le théorème classique suivant liant les
175 vecteurs de probabilités
176 et les chaînes de Markov.
181 \begin{theorem}\label{th}
182 Si $M$ est une matrice stochastique régulière, alors $M$
183 possède un unique vecteur stationnaire de probabilités $\pi$
185 De plus, si $\pi^0$ est un {vecteur de probabilités}
187 la suite $(\pi^{k})^{k \in \Nats}$ par
188 $\pi^{k+1} = \pi^k.M $ pour $k = 0, 1,\dots$
189 alors la {chaîne de Markov} $\pi^k$
190 converge vers $\pi$ lorsque $k$ tend vers l'infini.
194 Montrons sur un exemple jouet à deux éléments
195 que ce théorème permet de vérifier si la sortie d'un générateur de
196 nombres pseudo-aléatoires est uniformément distribuée ou non.
197 Soient alors $g$ et $h$ deux fonctions de $\Bool^2$
198 définies par $g(x_1,x_2)=(\overline{x_1},x_1.\overline{x_2}) $
199 et $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$.
200 Leurs graphes d'interactions donnés en figure \ref{fig:g:inter} et \ref{fig:h:inter}
201 vérifient les hypothèses du théorème~\ref{th:Adrien}.
202 Leurs graphes d'itérations
203 sont donc fortement connexes, ce que l'on peut vérifier aux figures~\ref{fig:g:iter}
205 \textit{A priori}, ces deux fonctions pourraient être intégrées
206 dans un générateur de nombres pseudo-aléatoires. Montrons que ce n'est pas le cas pour $g$ et
207 que cela l'est pour $h$.
219 \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
220 \begin{minipage}{0.40\textwidth}
222 \includegraphics[height=4cm]{images/g.pdf}
227 \subfigure[$h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$]{
228 \begin{minipage}{0.40\textwidth}
230 \includegraphics[height=4cm]{images/h.pdf}
235 \caption{Graphes des itérations unaires
236 de fonctions booléennes dans $\Bool^2$}
237 \label{fig:xplgraphIter}
250 \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
251 \begin{minipage}{0.40\textwidth}
253 \includegraphics[height=3cm]{images/gp.pdf}
258 \subfigure[$h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$]{
259 \begin{minipage}{0.40\textwidth}
261 \includegraphics[height=3cm]{images/hp.pdf}
266 \caption{Graphes d'interactions de fonctions booléennes dans $\Bool^2$}
267 \label{fig:xplgraphInter}
275 Comme le générateur \textit{Random} possède une sortie uniformément
276 distribuée, la stratégie est uniforme sur $\llbracket 1, 2 \rrbracket$,
278 pour tout sommet de $\textsc{giu}(g)$ et de $\textsc{giu}(h)$,
279 chaque arc sortant de ce sommet a, parmi l'ensemble des arcs sortant
280 de ce sommet, une probabilité $1/2$ d’être celui qui sera traversé.
281 En d'autres mots, $\textsc{giu}(g)$ est le graphe orienté d'une chaîne de Markov.
282 Il est facile de vérifier que la matrice de transitions
284 est $M_g = \frac{1}{2} \check{M}_g$,
285 où $\check{M}_g$ est la matrice d' adjacence donnée en
286 figure~\ref{fig:g:incidence} (voir ci-après), et de manière similaire pour $M_h$.
290 \subfigure[$\check{M}_g $.]{
291 \begin{minipage}{0.25\textwidth}
305 \label{fig:g:incidence}
307 \subfigure[$\check{M}_h $.]{
308 \begin{minipage}{0.25\textwidth}
321 \label{fig:h:incidence}
324 \caption{Graphe des fonctions candidates avec $n=2$}
328 Les deux matrices $M_g$ et $M_h$ sont stochastiques. Pour
329 montrer qu'elles sont régulières il suffit de constater qu'aucun élément de
330 $M^5_g$ ni de $M^3_h$ n'est nul.
331 De plus, les vecteurs de probabilités
332 $\pi_g=(\frac{4}{10}, \frac{1}{10},\frac{3}{10},\frac{2}{10})$ et
333 $\pi_h=(\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4})$
334 vérifient $\pi_g M_g = \pi_g$ et
336 Alors d'après le théorème~\ref{th},
337 pour n'importe quel vecteur initial de probabilités $\pi^0$, on a
338 $\lim_{k \to \infty} \pi^0 M^k_g = \pi_g$ et
339 $\lim_{k \to \infty} \pi^0 M^k_h = \pi_h$.
340 Ainsi la chaîne de Markov associée à $h$ tend vers une
341 distribution uniforme, contrairement à celle associée à $g$.
342 On en déduit que $g$ ne devrait pas être itérée dans
343 un générateur de nombres pseudo-aléatoires.
345 $h$ devrait pouvoir être embarquée dans l'algorithme~\ref{CI Algorithm},
346 pour peu que le nombre $b$ d'itérations entre deux mesures successives
347 de valeurs soit suffisamment grand de sorte que
348 le vecteur d’état de la chaîne de Markov
349 ait une distribution suffisamment proche de la distribution uniforme.
351 On énonce directement le théorème suivant dont la preuve est donnée en annexe~\ref{anx:generateur}.
353 \begin{restatable}[Uniformité de la sortie de l'algorithme~\ref{CI Algorithm}]{theorem}{PrngCIUniforme}\label{thm:prng:u}
354 Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\textsc{giu}(f)$ son
355 graphe d'itérations , $\check{M}$ sa matrice d'adjacence
356 et $M$ une matrice $2^n\times 2^n$
358 $M = \dfrac{1}{n} \check{M}$.
359 Si $\textsc{giu}(f)$ est fortement connexe, alors
360 la sortie du générateur de nombres pseudo-aléatoires détaillé par
361 l'algorithme~\ref{CI Algorithm} suit une loi qui
362 tend vers la distribution uniforme si
363 et seulement si $M$ est une matrice doublement stochastique.
367 \subsection{Quelques exemples}
369 On considère le graphe d'interactions $\Gamma(f)$ donné
370 en figure~\ref{fig:G}. C'est le même qui a été présenté
371 à la section~\ref{sec:11FCT}.
372 On a vu qu'il y avait 520 fonctions $f$ non isomorphes de graphe d'interactions $\Gamma(f)$.
374 Seulement 16 d'entre elles possèdent une matrice doublement stochastique.
375 La figure~\ref{fig:listfonction} explicite ces 16 fonctions en
376 définissant les images des éléments de la liste
377 0, 1, 2,\ldots, 14, 15 en respectant l'ordre.
378 Expliquons enfin comment a été calculé le nombre de la troisième
379 colonne utilisé comme le paramètre $b$
380 dans l'algorithme~\ref{CI Algorithm}.
382 Soit $e_i$ le $i^{\textrm{ème}}$ vecteur de la base canonique de $\R^{2^{n}}$.
383 Chacun des éléments $v_j$, $1 \le j \le 2^n$,
384 du vecteur $e_i M_f^t$ représente la probabilité
385 d'être dans la configuration $j$ après $t$ étapes du processus de Markov
386 associé à $\textsc{giu}(f)$ en partant de la configuration $i$.
388 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
389 \}$ représente le plus petit nombre d'itérations où la distance de
390 ce vecteur au vecteur $\pi=(\frac{1}{2^n},\ldots,\frac{1}{2^n})$
391 -- autrement dit, où la déviation par rapport à la distribution uniforme --
393 à $10^{-4}$. En prenant le max pour tous les $e_i$, on obtient une valeur pour
397 b = \max\limits_{i \in \llbracket 1, 2^n \rrbracket}
400 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
406 \noindent Par la suite, ce nombre sera appelé \emph{temps de mélange}.
412 \subfigure[Graphe d'interactions]{
413 \begin{minipage}{0.20\textwidth}
415 \includegraphics[width=3.5cm]{images/Gi.pdf}
420 \subfigure[Fonctions doublement stochastiques]{
421 \begin{minipage}{0.75\textwidth}
424 \begin{tabular}{|c|c|c|}
426 {Nom}& {Définition}&{$b$} \\
428 $\mathcal{F}_1$ & 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1, 0 & 206\\
430 $\mathcal{F}_2$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 0, 1
433 $\mathcal{F}_3$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 1, 0
436 $\mathcal{F}_4$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 0, 1
439 $\mathcal{F}_5$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 1, 0
442 $\mathcal{F}_6$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 0, 1
445 $\mathcal{F}_7$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 1, 0
448 $\mathcal{F}_8$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0
451 $\mathcal{F}_9$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
454 $\mathcal{F}_{10}$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
457 $\mathcal{F}_{11}$ &14, 15, 12, 13, 11, 10, 9, 8, 7, 6, 5, 4, 2, 3, 1, 0
460 $\mathcal{F}_{12}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 2, 3, 1, 0
463 $\mathcal{F}_{13}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 3, 2, 1, 0
466 $\mathcal{F}_{14}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 5, 4, 3, 2, 1, 0
469 $\mathcal{F}_{15}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
472 $\mathcal{F}_{16}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
479 \label{fig:listfonction}
482 \caption{Candidates pour le générateur avec $n=4$}
486 La qualité des séquences aléatoires a été évaluée à travers la suite
487 de tests statistiques développée pour les générateurs de nombres
488 pseudo-aléatoires par le
489 \emph{National Institute of Standards and Technology} (NIST).
490 L'expérience a montré notamment que toutes ces fonctions
491 passent avec succès cette batterie de tests.
493 Pour conclure cette section, on remarque que le générateur de nombres pseudo-aléatoires
494 a été prouvé chaotique pour $b=1$, \textit{i.e.}, lorsqu'il y a une sortie pour chaque itération.
495 Ceci est difficilement compatible avec la volonté d'avoir une sortie uniformément distribuée:
496 se rapprocher de cette distribution nécessite en effet un nombre plus élevé
497 d'itérations $b$ entre chaque sortie. Par exemple, dans l'exemple précédent, il est nécessaire
498 d'itérer au moins 42 fois entre chaque sortie pour suivre une loi uniforme à $10^{-4}$ près.
499 Montrer que les sous-séquences de suites chaotiques ainsi générées demeurent chaotiques
500 est l'objectif de la section suivante.
503 \section{Un PRNG basé sur des itérations unaires qui est chaotique }\label{prng:unaire:chaos}
505 Cette section présente un espace métrique adapté au générateur de nombres pseudo-aléatoires
506 présenté à l'algorithme~\ref{CI Algorithm} et prouve ensuite que la fonction qu'il représente
507 est chaotique sur cet espace.
509 \subsection{Un espace $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ pour le PRNG de l'algorithme~\ref{CI Algorithm}}
513 Introduisons tout d'abord $\mathcal{P} \subset \mathds{N}$ un ensemble fini non vide de cardinalité
514 $\mathsf{p} \in \mathds{N}^\ast$.
515 Intuitivement, c'est le nombre d'itérations qu'il est autorisé de faire.
516 On ordonne les $\mathsf{p}$ éléments de $\mathcal{P}$ comme suit:
517 $\mathcal{P} = \{ p_1, p_2, \hdots, p_\mathsf{p}\}$
518 et $p_1< p_2< \hdots < p_\mathsf{p}$.
520 Dans l'algorithme~\ref{CI Algorithm},
521 $\mathsf{p}$ vaut 1 et $p_1=b$.
522 Cet algorithme peut être vu comme $b$ compostions de la fonction $F_{f_u}$.
523 Ceci peut cependant se généraliser à $p_i$, $p_i \in \mathcal{P}$,
524 compositions fonctionnelles de $F_{f_u}$.
525 Ainsi, pour chaque $p_i \in \mathcal{P}$, on construit la fonction
526 $F_{{f_u},p_i} : \mathds{B}^\mathsf{N} \times [\mathsf{N}]^{p_i}
527 \rightarrow \mathds{B}^\mathsf{N}$ définie par
530 F_{f_u,p_i} (x,(u^0, u^1, \hdots, u^{p_i-1})) \mapsto
531 F_{f_u}(\hdots (F_{f_u}(F_{f_u}(x,u^0), u^1), \hdots), u^{p_i-1}).
535 On construit l'espace
536 $\mathcal{X}_{\mathsf{N},\mathcal{P}}= \mathds{B}^\mathsf{N} \times \mathds{S}_{\mathsf{N},\mathcal{P}}$, où
537 $\mathds{S}_{\mathsf{N},\mathcal{P}}=
538 [\mathsf{N}]^{\Nats}\times
539 \mathcal{P}^{\Nats}$.
540 Chaque élément de l'espace est une paire où le premier élément est
541 un $\mathsf{N}$-uplet de $\Bool^{\mathsf{N}}$ (comme dans $\mathcal{X}_u$).
542 Le second élément est une paire $((u^k)_{k \in \Nats},(v^k)_{k \in \Nats})$ de suites infinies.
543 La suite $(v^k)_{k \in \Nats}$ définit combien d'itérations sont exécutées au temps $k$ entre deux sorties.
544 La séquence $(u^k)_{k \in \Nats}$ définit quel élément est modifié (toujours au temps $k$).
546 Définissons la fonction de décalage $\Sigma$ pour chaque élément de $\mathds{S}_{\mathsf{N},\mathcal{P}}$.
547 $$\begin{array}{cccc}
548 \Sigma:&\mathds{S}_{\mathsf{N},\mathcal{P}} &\longrightarrow
549 &\mathds{S}_{\mathsf{N},\mathcal{P}} \\
550 & \left((u^k)_{k \in \mathds{N}},(v^k)_{k \in \mathds{N}}\right) & \longmapsto & \left(\sigma^{v^0}\left((u^k)_{k \in \mathds{N}}\right),\sigma\left((v^k)_{k \in \mathds{N}}\right)\right).
553 En d'autres termes, $\Sigma$ reçoit deux suites $u$ et $v$ et
554 effectue $v^0$ décalage vers la droite sur la première et un décalage vers la droite
558 Ainsi, les sorties $(y^0, y^1, \hdots )$ produites par le générateur détaillé dans
559 l'algorithme~\ref{CI Algorithm}
560 sont les premiers composants des itérations $X^0 = (x^0, (u,v))$ et $\forall n \in \mathds{N},
561 X^{n+1} = G_{f_u,\mathcal{P}}(X^n)$ dans $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ où
562 $G_{f_u,\mathcal{P}}$ est définie par:
569 G_{f_u,\mathcal{P}} :& \mathcal{X}_{\mathsf{N},\mathcal{P}} & \longrightarrow & \mathcal{X}_{\mathsf{N},\mathcal{P}}\\
570 & (e,(u,v)) & \longmapsto & \left( F_{f,v^0}\left( e, (u^0, \hdots, u^{v^0-1}\right), \Sigma (u,v) \right) .
576 \subsection{Une distance sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
578 On définit la fonction $d$ sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ comme suit:
579 Soit $x=(e,s)$ et $\check{x}=(\check{e},\check{s})$ dans
580 $\mathcal{X}_{\mathsf{N},\mathcal{P}} = \mathds{B}^\mathsf{N} \times \mathds{S}_{\mathsf{N},\mathcal{P}} $,
581 où $s=(u,v)$ et $\check{s}=(\check{u},\check{v})$ sont dans $ \mathds{S}_{\mathsf{N},\mathcal{P}} =
582 \mathcal{S}_{\llbracket 1, \mathsf{N} \rrbracket} \times \mathcal{S}_\mathcal{P}$.
584 \item $e$ et $\check{e}$ sont des entiers appartenant à $\llbracket 0, 2^{\mathsf{N}-1} \rrbracket$.
585 La distance de Hamming $d_{\mathds{B}^\mathsf{N}}$ entre les
586 décompositions binaires de $e$ et de $\check{e}$ (\textit{i.e.}, le
587 le nombre de bits qu'elles ont de différent) constitue
588 la partie entière de $d(X,\check{X})$.
589 \item la partie décimale est construite à partir des différences entre
590 $v^0$ et $\check{v}^0$, suivie des différences entre les séquences finies
591 $u^0, u^1, \hdots, u^{v^0-1}$ et $\check{u}^0, \check{u}^1, \hdots, \check{u}^{\check{v}^0-1}$, suivie par les différences entre $v^1$ et $\check{v}^1$,
592 suivie par les différences entre $u^{v^0}, u^{v^0+1}, \hdots, u^{v^1-1}$ et
593 $\check{u}^{\check{v}^0}, \check{u}^{\check{v}^0+1}, \hdots, \check{u}^{\check{v}^1-1}$, etc.
595 Plus précisément, soit
596 $p = \lfloor \log_{10}{(\max{\mathcal{P}})}\rfloor +1$ et
597 $n = \lfloor \log_{10}{(\mathsf{N})}\rfloor +1$.
599 \item Les $p$ premiers éléments de $d(x,\check{x})$ sont $|v^0-\check{v}^0|$
600 écrits en base 10 et sur $p$ indices;
601 \item les $n\times \max{(\mathcal{P})}$ éléments suivants servent
602 à évaluer de combien $u^0, u^1, \hdots, u^{v^0-1}$ diffère de
603 $\check{u}^0, \check{u}^1, \hdots, \check{u}^{\check{v}^0-1}$.
604 Les $n$ premiers éléments sont $|u^0-\check{u}^0|$. Il sont suivis de
605 $|u^1-\check{u}^1|$ écrits à l'aide de $n$ éléments, etc.
609 alors le processus se continue jusqu'à $|u^{v^0-1}-\check{u}^{\check{v}^0-1}|$ et la
610 partie décimale de $d(X,\check{X})$ est complétée par des 0
612 $p+n\times \max{(\mathcal{P})}$ éléments.
613 \item Si $v^0<\check{v}^0$, alors les $ \max{(\mathcal{P})}$ blocs de $n$
614 éléments sont $|u^0-\check{u}^0|$, ..., $|u^{v^0-1}-\check{u}^{v^0-1}|$,
615 $\check{u}^{v^0}$ (sur $n$ éléments), ..., $\check{u}^{\check{v}^0-1}$ (sur $n$ éléments), suivis par des 0, si besoin.
616 \item Le cas $v^0>\check{v}^0$ est similaire, et donc omis
618 \item Les $p$ suivants sont $|v^1-\check{v}^1|$, etc.
623 La fonction $d$ peut se formaliser comme suit:
624 $$d(x,\check{x})=d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s})+d_{\mathds{B}^\mathsf{N}}(e,\check{e}),$$
625 où: % $p=\max \mathcal{P}$ and:
627 \item $d_{\mathds{B}^\mathsf{N}}$ est la distance de Hamming,
628 \item $\forall s=(u,v), \check{s}=(\check{u},\check{v}) \in \mathcal{S}_{\mathsf{N},\mathcal{P}}$,\newline
630 d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) &= &
631 \sum_{k=0}^\infty \dfrac{1}{10^{(k+1)p+kn\max{(\mathcal{P})}}}
632 \bigg(|v^k - \check{v}^k| \\
633 & & + \left| \sum_{l=0}^{v^k-1}
634 \dfrac{u^{\sum_{m=0}^{k-1} v^m +l}}{ 10^{(l+1)n}} -
635 \sum_{l=0}^{\check{v}^k-1}
636 \dfrac{\check{u}^{\sum_{m=0}^{k-1} \check{v}^m +l}}{ 10^{(l+1)n}} \right| \bigg)
638 $$ %\left| \sum_{l=0}^{v^k-1} \dfrac{u^{\sum_{m=0}^{k-1} v^m +l}}{ 10^{l}} - \sum_{l=0}^{\check{v}^k-1} \dfrac{\check{u}^{\sum_{m=0}^{k-1} \check{v}^m +l}}{ 10^{l}}\right|\right)}.$$
644 On considère par exemple
645 $\mathsf{N}=13$, $\mathcal{P}=\{1,2,11\}$ ($\mathsf{p}$ vaut ainsi $3$),
649 u=\underline{6,} ~ \underline{11,5}, ...\\
656 \check{u}=\underline{6,4} ~ \underline{1}, ...\\
662 d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) =
663 0.01~0004000000000000000000~01~1005 \dots\]
664 En effet, les $p=2$ premiers éléments sont 01, c'est-à-dire
665 $|v^0-\check{v}^0|=1$,
666 et on utilise $p$ éléments pour représenter cette différence
667 (Comme $\mathcal{P}=\{1,2,11\}$, cette différence peut valoir 10).
668 On prend alors le $v^0=1$ premier terme de $u$,
669 chaque terme étant codé sur $n=2$ éléments, soit 06.
670 Comme on itère au plus $\max{(\mathcal{P})}$ fois,
671 on complète cette valeur par des 0 de sorte que
672 la chaîne obtenue ait $n\times \max{(\mathcal{P})}=22$ éléments, soit:
673 0600000000000000000000.
674 De manière similaire, les $\check{v}^0=2$ premiers
675 termes de $\check{u}$ sont représentés par
676 0604000000000000000000.
677 La valeur absolue de leur différence est égale à
678 0004000000000000000000.
679 Ces éléments sont concaténés avec 01. On peut construire alors le reste de
685 % On considère à présent que $\mathsf{N}=9$, que $\mathcal{P}=\{2,7\}$ et que
688 % u=\underline{6,7,} ~ \underline{4,2,} ...\\
693 % $$\check{s}=\left\{
695 % \check{u}=\underline{4, 9, 6, 3, 6, 6, 7,} ~ \underline{9, 8}, ...\\
701 % Ainsi $d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) = 0.5173633305600000...$,
703 % $|v^0-\check{v}^0|=5$, $|4963667-6700000| = 1736333$, $|v^1-\check{v}^1|=0$,
704 % et $|9800000-4200000| = 5600000$.
709 On a la proposition suivante, qui est démontrée en annexe~\ref{anx:generateur}.
712 \begin{restatable}[Une distance dans $\mathcal{X}_{\mathsf{N},\mathcal{P}}$]{theorem}{distancedsxnp}
713 $d$ est une distance sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$.
717 \subsection{Le graphe $\textsc{giu}_{\mathcal{P}}(f)$ étendant $\textsc{giu}(f)$}
719 A partir de $\mathcal{P}=\{p_1, p_2, \hdots, p_\mathsf{p}\}$, on
720 définit le graphe orienté $\textsc{giu}_{\mathcal{P}}(f)$ de la manière suivante:
722 \item les n{\oe}uds sont les $2^\mathsf{N}$ configurations de $\mathds{B}^\mathsf{N}$,
723 %\item Each vertex has $\displaystyle{\sum_{i=1}^\mathsf{p} \mathsf{N}^{p_i}}$ arrows, namely all the $p_1, p_2, \hdots, p_\mathsf{p}$ tuples
724 % having their elements in $\llbracket 1, \mathsf{N} \rrbracket $.
725 \item il y a un arc libellé $u_0, \hdots, u_{p_i-1}$, $i \in \llbracket 1, \mathsf{p} \rrbracket$ entre les n{\oe}uds $x$ et $y$ si et seulement si $p_i$ est un élément de
726 $\mathcal{P}$ (\textit{i.e.}, on peut itérer $p_i$ fois), et pour chaque
727 $k$, $0 \le k \le p_i-1$, on a
728 $u_k$ qui appartient à $[\mathsf{N}]$ et
729 $y=F_{f_u,p_i} (x, (u_0, \hdots, u_{p_i-1})) $.
731 Il n'est pas difficile de constater que $\textsc{giu}_{\{1\}}(f)$ est $\textsc{giu}(f)$.
739 \subfigure[$\textsc{giu}_{\{2\}}(h)$]{
740 \begin{minipage}{0.30\textwidth}
742 \includegraphics[scale=0.5]{images/h2prng}
747 \subfigure[$\textsc{giu}_{\{3\}}(h)$]{
748 \begin{minipage}{0.40\textwidth}
750 \includegraphics[scale=0.5]{images/h3prng}
755 \subfigure[$\textsc{giu}_{\{2,3\}}(h)$]{
756 \begin{minipage}{0.40\textwidth}
758 \includegraphics[scale=0.5]{images/h23prng}
765 \caption{Graphes d'itérations $\textsc{giu}_{\mathcal{P}}(h)$ pour $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$}
766 %\label{fig:xplgraphIter}
773 On reprend l'exemple où $\mathsf{N}=2$ et
774 $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$ déjà détaillé
775 à la section~\ref{sub:prng:unif}.
777 Le graphe $\textsc{giu}_{\{1\}}(h)$ a déjà été donné à la figure~\ref{fig:h:iter}.
778 Les graphes $\textsc{giu}_{\{2\}}(h)$, $\textsc{giu}_{\{3\}}(h)$ et
779 $\textsc{giu}_{\{2,3\}}(h)$ sont respectivement donnés aux figures~\ref{fig:h2prng}, ~\ref{fig:h3prng} et ~\ref{fig:h23prng}.
780 Le premier (respectivement le second)
781 illustre le comportement du générateur lorsque qu'on itère exactement
782 2 fois (resp. 3 fois) puis qu'on affiche le résultat.
783 Le dernier donnerait le comportement d'un générateur qui s'autoriserait
784 à itérer en interne systématiquement 2 ou 3 fois avant de retourner un résultat.
789 \subsection{le PRNG de l'algorithme~\ref{CI Algorithm} est chaotique sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
791 Le théorème suivant, similaire à ceux dans $\mathcal{X}_u$ et dans $\mathcal{X}_g$
792 est prouvé en annexe~\ref{anx:generateur}.
794 \begin{restatable}[Conditions pour la chaoticité de $G_{f_u,\mathcal{P}}$]{theorem}{thmchoticitgfp}
795 La fonction $G_{f_u,\mathcal{P}}$ est chaotique sur
796 $(\mathcal{X}_{\mathsf{N},\mathcal{P}},d)$ si et seulement si
797 le graphe d'itérations $\textsc{giu}_{\mathcal{P}}(f)$
798 est fortement connexe.
800 % On alors corollaire suivant
803 % Le générateur de nombre pseudo aléatoire détaillé
804 % à l'algorithme~\ref{CI Algorithm}
805 % n'est pas chaotique
806 % sur $(\mathcal{X}_{\mathsf{N},\{b\}},d)$ pour la fonction négation.
809 % Dans cet algorithme, $\mathcal{P}$ est le singleton $\{b\}$.
810 % Que $b$ soit pair ou impair, $\textsc{giu}_{\{b\}}(f)$
811 % n'est pas fortement connexe.
818 Ce chapitre a proposé un algorithme permettant de construire un
819 PRNG chaotique à partir d'un PRNG existant. Pour ce faire, il est nécessaire
820 et suffisant que la fonction $f$ qui est itérée un nombre $b$ de fois
821 possède un $\textsc{giu}_{\{b\}}(f)$ fortement connexe et que sa matrice de Markov associée soit doublement stochastique.
822 Le chapitre suivant montre comment construire une telle fonction.