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
36 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)$
37 avec $x_0 \in [0;1]$ et $3,57<r<4,0$.
38 La suite de Hénon~\cite{henon1976two} de $A \times B$ dans lui même, avec $A$ et $B$ deux sous-ensembles de $\R$,
40 $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.
41 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.
43 La suite logistique est utilisée dans l'article~\cite{dabal2011chaos} dans lequel
44 les auteurs utilisent une représentation des réels à virgule fixe.
45 Les auteurs de~\cite{dabal2012fpga} comparent leur implantation de la suite logistique avec celle
47 Les auteurs de~\cite{6868789} ont exploité la réécriture de la suite logistique sous la forme
48 $x_{t+1} = (r \times x_t)-(r \times x_t^2)$ et la possibilité de paralléliser ceci
49 pour accroître la fréquence du PRNG.
50 Les auteurs de~\cite{liu2008improved} proposent de coupler deux suites logistiques,
51 chacune étant paramétrée différemment ($x_0$, $r_1$ et $y_0$, $r_2$ respectivement). L'idée principale
52 est de modifier iterrativement le paramètre $r_2$ à l'aide des itérés de $x_t$.
53 Quant aux auteurs de~\cite{merahcoupling13}, ils couplent la suite logistique et celle de Hénon.
54 La première suite sert à sélectionner les éléments parmi ceux générés par la seconde.
55 Les auteurs de~\cite{mao2006design}, combinent spatialement $L$ suites logistiques
56 et construisent ainsi $x_t(0)$, \dots, $x_t(L-1)$ selon l'équation suivante:
59 (1- \varepsilon) f(x_t(i)) +
61 (f(x_t(i-1)) + f(x_t(i+1))),
65 $i \in \dfrac{\Z}{L\Z}$,
66 $f$ est une adaptation de la suite logistique au cas discret,
67 la graine $(X_0(0),\dots, X_0(L-1))$ et la pondération $\varepsilon$ sont fournies par l'utilisateur.
70 René Lozi a aussi étudié la construction de PRNGs en couplant
71 des suites de Lozi~\cite{espinelrojas:hal-00622989} (qui sont une variation des suites de Hénon: $x^2_t$ est remplacé par $| x_t|$),
72 la suite tente~\cite{DBLP:journals/ijbc/Lozi12} et en extrayant des
73 sous-suites pour construire la sortie du PRNG~\cite{lozi:hal-00813087}.
78 Certaines équations différentielles ont été à la base de PRNGs chaotiques.
79 On pense aux équations de Lorenz~\cite{Lorenz1963}, à celles de Rössler~\cite{Rossler1976397}\ldots
80 Celles-ci ont par exemple embarquées dans les PRNG dans les articles~\cite{Silva:2009:LLP:1592409.1592411}
81 et~\cite{mansingka2013fibonacci} respectivement.
86 \section{Nombres pseudo-aléatoires construits par itérations unaires}\label{sub:prng:algo}
95 \KwIn{une fonction $f$, un nombre d'itérations $b$,
96 une configuration initiale $x^0$ (${\mathsf{N}}$ bits)}
97 \KwOut{une configuration $x$ (${\mathsf{N}}$ bits)}
99 %$k\leftarrow b + \textit{XORshift}(b+1)$\;
102 $s\leftarrow{\textit{Random}({\mathsf{N}})}$\;
103 %$s\leftarrow{\textit{XORshift}(n)}$\;
104 $x\leftarrow{F_{f_u}(x,s)}$\;
108 \caption{PRNG basé sur les itérations unaires.}
112 \subsection{Algorithme d'un générateur}
113 On peut penser à construire un générateur de nombres
114 pseudo-aléatoires comme dans l'algorithme~\ref{CI Algorithm} donné ci-dessous.
117 Celui-ci prend en entrée: une fonction $f$;
118 un entier $b$, qui est le nombre d'itérations à effectuer entre deux sorties
119 et une configuration initiale $x^0$.
120 Il retourne une nouvelle configuration $x$ en appliquant
121 la fonction $F_{f_u}$ (équation~\ref{eq:iterations:unaires}
122 vue au chapitre~\ref{chap:carachaos}) et correspondant
123 à des itérations unaires.
124 En interne, il exploite un algorithme de génération
125 de nombres pseudo-aléatoires donné en paramètre.
126 Cela peut être n'importe quel PRNG (XORshift, Mersenne-Twister) dont la
127 sortie est uniformément distribuée.
128 Notre approche vise a donner des propriétés de chaos à ce générateur embarqué.
131 % \textit{Random}$(l)$.
132 % Cet algorithme est utilisée dans notre générateur pour construire la longueur
133 % de la stratégie ainsi que les éléments qui la composent.
134 % Pratiquement, il retourne des entiers dans $\llbracket 1 ; l \rrbracket$
135 % selon une distribution uniforme et utilise
136 % \textit{XORshift} qui est une classe de générateurs de
137 % nombres pseudo aléatoires conçus par George Marsaglia.
140 % L'algorithme \textit{XORshift}
141 % exploite itérativement l'opérateur $\oplus$
142 % sur des nombres obtenus grâce à des décalages de bits.
143 % Cet opérateur, défini dans $\Bool^{n}$,
144 % applique la fonction \og xor \fg{}
145 % aux bits de même rang de ses deux opérandes (\og opération bit à bit \fg{}).
146 % Une instance de cette classe est donnée dans l'algorithme~\ref{XORshift} donné
149 % \begin{algorithm}[h]
151 % \KwIn{la configuration interne $z$ (un mot de 32-bit)}
152 % \KwOut{$y$ (un mot de 32-bits)}
153 % $z\leftarrow{z\oplus{(z\ll13)}}$\;
154 % $z\leftarrow{z\oplus{(z\gg17)}}$\;
155 % $z\leftarrow{z\oplus{(z\ll5)}}$\;
159 % \caption{Une boucle de l'algorithme de \textit{XORshift}}
164 Nous avons vu au chapitre~\ref{chap:carachaos} que
165 $G_{f_u}$ est chaotique dans l'espace $\mathcal{X}_u$
166 si et seulement si le graphe d'itérations $\textsc{giu}(f)$
167 est fortement connexe.
168 Pour $b=1$, l'algorithme itère la fonction $F_{f_u}$.
170 Pour simuler au mieux l'aléa, un bon générateur de nombres pseudo-aléatoires
171 se doit de fournir des nombres selon une distribution uniforme.
172 Regardons comment l'uniformité de la distribution
173 contraint la fonction $f$ à itérer.
175 \subsection{Un générateur à sortie uniformément distribuée}\label{sub:prng:unif}
177 Une matrice stochastique est une matrice carrée
178 dont tous les éléments sont positifs ou nuls et dont
179 la somme de chaque ligne
181 Une matrice stochastique l'est doublement si la somme de chaque colonne est 1.
182 Enfin, une matrice stochastique de taille $n \times n$ est régulière
183 si la propriété suivante est établie:
184 $$\exists k \in \mathds{N}^\ast, \forall i,j \in \llbracket 1; n \rrbracket, M_{ij}^k>0.$$
186 On énonce le théorème classique suivant liant les
187 vecteurs de probabilités
188 et les chaînes de Markov.
193 \begin{theorem}\label{th}
194 Si $M$ est une matrice stochastique régulière, alors $M$
195 possède un unique vecteur stationnaire de probabilités $\pi$
197 De plus, si $\pi^0$ est un {vecteur de probabilités}
199 la suite $(\pi^{k})^{k \in \Nats}$ par
200 $\pi^{k+1} = \pi^k.M $ pour $k = 0, 1,\dots$
201 alors la {chaîne de Markov} $\pi^k$
202 converge vers $\pi$ lorsque $k$ tend vers l'infini.
206 Montrons sur un exemple jouet à deux éléments
207 que ce théorème permet de vérifier si la sortie d'un générateur de
208 nombres pseudo-aléatoires est uniformément distribuée ou non.
209 Soient alors $g$ et $h$ deux fonctions de $\Bool^2$
210 définies par $g(x_1,x_2)=(\overline{x_1},x_1.\overline{x_2}) $
211 et $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$.
212 Leurs graphes d'interactions donnés en figure \ref{fig:g:inter} et \ref{fig:h:inter}
213 vérifient les hypothèses du théorème~\ref{th:Adrien}.
214 Leurs graphes d'itérations
215 sont donc fortement connexes, ce que l'on peut vérifier aux figures~\ref{fig:g:iter}
217 \textit{A priori}, ces deux fonctions pourraient être intégrées
218 dans un générateur de nombres pseudo-aléatoires. Montrons que ce n'est pas le cas pour $g$ et
219 que cela l'est pour $h$.
231 \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
232 \begin{minipage}{0.40\textwidth}
234 \includegraphics[height=4cm]{images/g.pdf}
239 \subfigure[$h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$]{
240 \begin{minipage}{0.40\textwidth}
242 \includegraphics[height=4cm]{images/h.pdf}
247 \caption{Graphes des itérations unaires
248 de fonctions booléennes dans $\Bool^2$}
249 \label{fig:xplgraphIter}
262 \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
263 \begin{minipage}{0.40\textwidth}
265 \includegraphics[height=3cm]{images/gp.pdf}
270 \subfigure[$h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$]{
271 \begin{minipage}{0.40\textwidth}
273 \includegraphics[height=3cm]{images/hp.pdf}
278 \caption{Graphes d'interactions de fonctions booléennes dans $\Bool^2$}
279 \label{fig:xplgraphInter}
287 Comme le générateur \textit{Random} possède une sortie uniformément
288 distribuée, la stratégie est uniforme sur $\llbracket 1, 2 \rrbracket$,
290 pour tout sommet de $\textsc{giu}(g)$ et de $\textsc{giu}(h)$,
291 chaque arc sortant de ce sommet a, parmi l'ensemble des arcs sortant
292 de ce sommet, une probabilité $1/2$ d’être celui qui sera traversé.
293 En d'autres mots, $\textsc{giu}(g)$ est le graphe orienté d'une chaîne de Markov.
294 Il est facile de vérifier que la matrice de transitions
296 est $M_g = \frac{1}{2} \check{M}_g$,
297 où $\check{M}_g$ est la matrice d' adjacence donnée en
298 figure~\ref{fig:g:incidence} (voir ci-après), et de manière similaire pour $M_h$.
302 \subfigure[$\check{M}_g $.]{
303 \begin{minipage}{0.25\textwidth}
317 \label{fig:g:incidence}
319 \subfigure[$\check{M}_h $.]{
320 \begin{minipage}{0.25\textwidth}
333 \label{fig:h:incidence}
336 \caption{Graphe des fonctions candidates avec $n=2$}
340 Les deux matrices $M_g$ et $M_h$ sont stochastiques. Pour
341 montrer qu'elles sont régulières il suffit de constater qu'aucun élément de
342 $M^5_g$ ni de $M^3_h$ n'est nul.
343 De plus, les vecteurs de probabilités
344 $\pi_g=(\frac{4}{10}, \frac{1}{10},\frac{3}{10},\frac{2}{10})$ et
345 $\pi_h=(\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4})$
346 vérifient $\pi_g M_g = \pi_g$ et
348 Alors d'après le théorème~\ref{th},
349 pour n'importe quel vecteur initial de probabilités $\pi^0$, on a
350 $\lim_{k \to \infty} \pi^0 M^k_g = \pi_g$ et
351 $\lim_{k \to \infty} \pi^0 M^k_h = \pi_h$.
352 Ainsi la chaîne de Markov associée à $h$ tend vers une
353 distribution uniforme, contrairement à celle associée à $g$.
354 On en déduit que $g$ ne devrait pas être itérée dans
355 un générateur de nombres pseudo-aléatoires.
357 $h$ devrait pouvoir être embarquée dans l'algorithme~\ref{CI Algorithm},
358 pour peu que le nombre $b$ d'itérations entre deux mesures successives
359 de valeurs soit suffisamment grand de sorte que
360 le vecteur d’état de la chaîne de Markov
361 ait une distribution suffisamment proche de la distribution uniforme.
363 On énonce directement le théorème suivant dont la preuve est donnée en annexe~\ref{anx:generateur}.
365 \begin{restatable}[Uniformité de la sortie de l'algorithme~\ref{CI Algorithm}]{theorem}{PrngCIUniforme}\label{thm:prng:u}
366 Soit $f: \Bool^{\mathsf{N}} \rightarrow \Bool^{\mathsf{N}}$, $\textsc{giu}(f)$ son
367 graphe d'itérations , $\check{M}$ sa matrice d'adjacence
368 et $M$ une matrice $2^n\times 2^n$
370 $M = \dfrac{1}{\mathsf{N}} \check{M}$.
371 Si $\textsc{giu}(f)$ est fortement connexe, alors
372 la sortie du générateur de nombres pseudo-aléatoires détaillé par
373 l'algorithme~\ref{CI Algorithm} suit une loi qui
374 tend vers la distribution uniforme si
375 et seulement si $M$ est une matrice doublement stochastique.
379 \subsection{Quelques exemples}
381 On considère le graphe d'interactions $\Gamma(f)$ donné
382 en figure~\ref{fig:G}. C'est le même qui a été présenté
383 à la section~\ref{sec:11FCT}.
384 On a vu qu'il y avait 520 fonctions $f$ non isomorphes de graphe d'interactions $\Gamma(f)$.
386 Seulement 16 d'entre elles possèdent une matrice doublement stochastique.
387 La figure~\ref{fig:listfonction} explicite ces 16 fonctions en
388 définissant les images des éléments de la liste
389 0, 1, 2,\ldots, 14, 15 en respectant l'ordre.
390 Expliquons enfin comment a été calculé le nombre de la troisième
391 colonne utilisé comme le paramètre $b$
392 dans l'algorithme~\ref{CI Algorithm}.
394 Soit $e_i$ le $i^{\textrm{ème}}$ vecteur de la base canonique de $\R^{2^{\mathsf{N}}}$.
395 Chacun des éléments $v_j$, $1 \le j \le 2^{\mathsf{N}}$,
396 du vecteur $e_i M_f^t$ représente la probabilité
397 d'être dans la configuration $j$ après $t$ étapes du processus de Markov
398 associé à $\textsc{giu}(f)$ en partant de la configuration $i$.
400 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
401 \}$ représente le plus petit nombre d'itérations où la distance de
402 ce vecteur au vecteur $\pi=(\frac{1}{2^{\mathsf{N}}},\ldots,\frac{1}{2^{\mathsf{N}}})$
403 -- autrement dit, où la déviation par rapport à la distribution uniforme --
405 à $10^{-4}$. En prenant le max pour tous les $e_i$, on obtient une valeur pour
409 b = \max\limits_{i \in \llbracket 1, 2^{\mathsf{N}} \rrbracket}
412 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
418 \noindent Par la suite, ce nombre sera appelé \emph{temps de mélange}.
424 \subfigure[Graphe d'interactions]{
425 \begin{minipage}{0.20\textwidth}
427 \includegraphics[width=3.5cm]{images/Gi.pdf}
432 \subfigure[Fonctions doublement stochastiques]{
433 \begin{minipage}{0.75\textwidth}
436 \begin{tabular}{|c|c|c|}
438 {Nom}& {Définition}&{$b$} \\
440 $\mathcal{F}_1$ & 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1, 0 & 206\\
442 $\mathcal{F}_2$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 0, 1
445 $\mathcal{F}_3$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 1, 0
448 $\mathcal{F}_4$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 0, 1
451 $\mathcal{F}_5$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 1, 0
454 $\mathcal{F}_6$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 0, 1
457 $\mathcal{F}_7$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 1, 0
460 $\mathcal{F}_8$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0
463 $\mathcal{F}_9$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
466 $\mathcal{F}_{10}$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
469 $\mathcal{F}_{11}$ &14, 15, 12, 13, 11, 10, 9, 8, 7, 6, 5, 4, 2, 3, 1, 0
472 $\mathcal{F}_{12}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 2, 3, 1, 0
475 $\mathcal{F}_{13}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 3, 2, 1, 0
478 $\mathcal{F}_{14}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 5, 4, 3, 2, 1, 0
481 $\mathcal{F}_{15}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
484 $\mathcal{F}_{16}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
491 \label{fig:listfonction}
494 \caption{Candidates pour le générateur avec $n=4$}
498 La qualité des séquences aléatoires a été évaluée à travers la suite
499 de tests statistiques développée pour les générateurs de nombres
500 pseudo-aléatoires par le
501 \emph{National Institute of Standards and Technology} (NIST).
502 L'expérience a montré notamment que toutes ces fonctions
503 passent avec succès cette batterie de tests.
505 Pour conclure cette section, on remarque que le générateur de nombres pseudo-aléatoires
506 a été prouvé chaotique pour $b=1$, \textit{i.e.}, lorsqu'il y a une sortie pour chaque itération.
507 Ceci est difficilement compatible avec la volonté d'avoir une sortie uniformément distribuée:
508 se rapprocher de cette distribution nécessite en effet un nombre plus élevé
509 d'itérations $b$ entre chaque sortie. Par exemple, dans l'exemple précédent, il est nécessaire
510 d'itérer au moins 42 fois entre chaque sortie pour suivre une loi uniforme à $10^{-4}$ près.
511 Montrer que les sous-séquences de suites chaotiques ainsi générées demeurent chaotiques
512 est l'objectif de la section suivante.
515 \section{Un PRNG basé sur des itérations unaires qui est chaotique }\label{prng:unaire:chaos}
517 Cette section présente un espace métrique adapté au générateur de nombres pseudo-aléatoires
518 présenté à l'algorithme~\ref{CI Algorithm} et prouve ensuite que la fonction qu'il représente
519 est chaotique sur cet espace.
521 \subsection{Un espace $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ pour le PRNG de l'algorithme~\ref{CI Algorithm}}
525 Introduisons tout d'abord $\mathcal{P} \subset \mathds{N}$ un ensemble fini non vide de cardinalité
526 $\mathsf{p} \in \mathds{N}^\ast$.
527 Intuitivement, c'est le nombre d'itérations qu'il est autorisé de faire.
528 On ordonne les $\mathsf{p}$ éléments de $\mathcal{P}$ comme suit:
529 $\mathcal{P} = \{ p_1, p_2, \hdots, p_\mathsf{p}\}$
530 et $p_1< p_2< \hdots < p_\mathsf{p}$.
532 Dans l'algorithme~\ref{CI Algorithm},
533 $\mathsf{p}$ vaut 1 et $p_1=b$.
534 Cet algorithme peut être vu comme $b$ compostions de la fonction $F_{f_u}$.
535 Ceci peut cependant se généraliser à $p_i$, $p_i \in \mathcal{P}$,
536 compositions fonctionnelles de $F_{f_u}$.
537 Ainsi, pour chaque $p_i \in \mathcal{P}$, on construit la fonction
538 $F_{{f_u},p_i} : \mathds{B}^\mathsf{N} \times [\mathsf{N}]^{p_i}
539 \rightarrow \mathds{B}^\mathsf{N}$ définie par
542 F_{f_u,p_i} (x,(u^0, u^1, \hdots, u^{p_i-1})) =
543 F_{f_u}(\hdots (F_{f_u}(F_{f_u}(x,u^0), u^1), \hdots), u^{p_i-1}).
547 On construit l'espace
548 $\mathcal{X}_{\mathsf{N},\mathcal{P}}= \mathds{B}^\mathsf{N} \times \mathds{S}_{\mathsf{N},\mathcal{P}}$, où
549 $\mathds{S}_{\mathsf{N},\mathcal{P}}=
550 [\mathsf{N}]^{\Nats}\times
551 \mathcal{P}^{\Nats}$.
552 Chaque élément de l'espace est une paire où le premier élément est
553 un $\mathsf{N}$-uplet de $\Bool^{\mathsf{N}}$ (comme dans $\mathcal{X}_u$).
554 Le second élément est une paire $((u^k)_{k \in \Nats},(v^k)_{k \in \Nats})$ de suites infinies.
555 La suite $(v^k)_{k \in \Nats}$ définit combien d'itérations sont exécutées au temps $k$ entre deux sorties.
556 La séquence $(u^k)_{k \in \Nats}$ définit quel élément est modifié (toujours au temps $k$).
558 Définissons la fonction de décalage $\Sigma$ pour chaque élément de $\mathds{S}_{\mathsf{N},\mathcal{P}}$.
559 $$\begin{array}{cccc}
560 \Sigma:&\mathds{S}_{\mathsf{N},\mathcal{P}} &\longrightarrow
561 &\mathds{S}_{\mathsf{N},\mathcal{P}} \\
562 & \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).
565 En d'autres termes, $\Sigma$ reçoit deux suites $u$ et $v$ et
566 effectue $v^0$ décalage vers la droite sur la première et un décalage vers la droite
570 Ainsi, les sorties $(y^0, y^1, \hdots )$ produites par le générateur détaillé dans
571 l'algorithme~\ref{CI Algorithm}
572 sont les premiers composants des itérations $X^0 = (x^0, (u,v))$ et $\forall n \in \mathds{N},
573 X^{n+1} = G_{f_u,\mathcal{P}}(X^{\mathsf{N}})$ dans $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ où
574 $G_{f_u,\mathcal{P}}$ est définie par:
581 G_{f_u,\mathcal{P}} :& \mathcal{X}_{\mathsf{N},\mathcal{P}} & \longrightarrow & \mathcal{X}_{\mathsf{N},\mathcal{P}}\\
582 & (e,(u,v)) & \longmapsto & \left( F_{f,v^0}\left( e, (u^0, \hdots, u^{v^0-1}\right), \Sigma (u,v) \right) .
588 \subsection{Une distance sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
590 On définit la fonction $d$ sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ comme suit:
591 Soit $x=(e,s)$ et $\check{x}=(\check{e},\check{s})$ dans
592 $\mathcal{X}_{\mathsf{N},\mathcal{P}} = \mathds{B}^\mathsf{N} \times \mathds{S}_{\mathsf{N},\mathcal{P}} $,
593 où $s=(u,v)$ et $\check{s}=(\check{u},\check{v})$ sont dans $ \mathds{S}_{\mathsf{N},\mathcal{P}} =
594 \mathcal{S}_{\llbracket 1, \mathsf{N} \rrbracket} \times \mathcal{S}_\mathcal{P}$.
596 \item $e$ et $\check{e}$ sont des entiers appartenant à $\llbracket 0, 2^{\mathsf{N}-1} \rrbracket$.
597 La distance de Hamming $d_{\mathds{B}^\mathsf{N}}$ entre les
598 décompositions binaires de $e$ et de $\check{e}$ (\textit{i.e.}, le
599 le nombre de bits qu'elles ont de différent) constitue
600 la partie entière de $d(X,\check{X})$.
601 \item la partie décimale est construite à partir des différences entre
602 $v^0$ et $\check{v}^0$, suivie des différences entre les séquences finies
603 $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$,
604 suivie par les différences entre $u^{v^0}, u^{v^0+1}, \hdots, u^{v^1-1}$ et
605 $\check{u}^{\check{v}^0}, \check{u}^{\check{v}^0+1}, \hdots, \check{u}^{\check{v}^1-1}$, etc.
607 Plus précisément, soit
608 $p = \lfloor \log_{10}{(\max{\mathcal{P}})}\rfloor +1$ et
609 $n = \lfloor \log_{10}{(\mathsf{N})}\rfloor +1$.
611 \item Les $p$ premiers éléments de $d(x,\check{x})$ sont $|v^0-\check{v}^0|$
612 écrits en base 10 et sur $p$ indices;
613 \item les $n\times \max{(\mathcal{P})}$ éléments suivants servent
614 à évaluer de combien $u^0, u^1, \hdots, u^{v^0-1}$ diffère de
615 $\check{u}^0, \check{u}^1, \hdots, \check{u}^{\check{v}^0-1}$.
616 Les $n$ premiers éléments sont $|u^0-\check{u}^0|$. Il sont suivis de
617 $|u^1-\check{u}^1|$ écrits à l'aide de $n$ éléments, etc.
621 alors le processus se continue jusqu'à $|u^{v^0-1}-\check{u}^{\check{v}^0-1}|$ et la
622 partie décimale de $d(X,\check{X})$ est complétée par des 0
624 $p+n\times \max{(\mathcal{P})}$ éléments.
625 \item Si $v^0<\check{v}^0$, alors les $ \max{(\mathcal{P})}$ blocs de $n$
626 éléments sont $|u^0-\check{u}^0|$, ..., $|u^{v^0-1}-\check{u}^{v^0-1}|$,
627 $\check{u}^{v^0}$ (sur $n$ éléments), ..., $\check{u}^{\check{v}^0-1}$ (sur $n$ éléments), suivis par des 0, si besoin.
628 \item Le cas $v^0>\check{v}^0$ est similaire, et donc omis
630 \item Les $p$ suivants sont $|v^1-\check{v}^1|$, etc.
635 La fonction $d$ peut se formaliser comme suit:
636 $$d(x,\check{x})=d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s})+d_{\mathds{B}^\mathsf{N}}(e,\check{e}),$$
637 où: % $p=\max \mathcal{P}$ and:
639 \item $d_{\mathds{B}^\mathsf{N}}$ est la distance de Hamming,
640 \item $\forall s=(u,v), \check{s}=(\check{u},\check{v}) \in \mathcal{S}_{\mathsf{N},\mathcal{P}}$,\newline
642 d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) &= &
643 \sum_{k=0}^\infty \dfrac{1}{10^{(k+1)p+kn\max{(\mathcal{P})}}}
644 \bigg(|v^k - \check{v}^k| \\
645 & & + \left| \sum_{l=0}^{v^k-1}
646 \dfrac{u^{\sum_{m=0}^{k-1} v^m +l}}{ 10^{(l+1)n}} -
647 \sum_{l=0}^{\check{v}^k-1}
648 \dfrac{\check{u}^{\sum_{m=0}^{k-1} \check{v}^m +l}}{ 10^{(l+1)n}} \right| \bigg)
650 $$ %\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)}.$$
656 On considère par exemple
657 $\mathsf{N}=13$, $\mathcal{P}=\{1,2,11\}$ ($\mathsf{p}$ vaut ainsi $3$),
661 u=\underline{6,} ~ \underline{11,5}, ...\\
668 \check{u}=\underline{6,4} ~ \underline{1}, ...\\
674 d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) =
675 0.01~0004000000000000000000~01~1005 \dots\]
676 En effet, les $p=2$ premiers éléments sont 01, c'est-à-dire
677 $|v^0-\check{v}^0|=1$,
678 et on utilise $p$ éléments pour représenter cette différence
679 (Comme $\mathcal{P}=\{1,2,11\}$, cette différence peut valoir 10).
680 On prend alors le $v^0=1$ premier terme de $u$,
681 chaque terme étant codé sur $n=2$ éléments, soit 06.
682 Comme on itère au plus $\max{(\mathcal{P})}$ fois,
683 on complète cette valeur par des 0 de sorte que
684 la chaîne obtenue ait $n\times \max{(\mathcal{P})}=22$ éléments, soit:
685 0600000000000000000000.
686 De manière similaire, les $\check{v}^0=2$ premiers
687 termes de $\check{u}$ sont représentés par
688 0604000000000000000000.
689 La valeur absolue de leur différence est égale à
690 0004000000000000000000.
691 Ces éléments sont concaténés avec 01. On peut construire alors le reste de
697 % On considère à présent que $\mathsf{N}=9$, que $\mathcal{P}=\{2,7\}$ et que
700 % u=\underline{6,7,} ~ \underline{4,2,} ...\\
705 % $$\check{s}=\left\{
707 % \check{u}=\underline{4, 9, 6, 3, 6, 6, 7,} ~ \underline{9, 8}, ...\\
713 % Ainsi $d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) = 0.5173633305600000...$,
715 % $|v^0-\check{v}^0|=5$, $|4963667-6700000| = 1736333$, $|v^1-\check{v}^1|=0$,
716 % et $|9800000-4200000| = 5600000$.
721 On a la proposition suivante, qui est démontrée en annexe~\ref{anx:generateur}.
724 \begin{restatable}[Une distance dans $\mathcal{X}_{\mathsf{N},\mathcal{P}}$]{theorem}{distancedsxnp}
725 $d$ est une distance sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$.
729 \subsection{Le graphe $\textsc{giu}_{\mathcal{P}}(f)$ étendant $\textsc{giu}(f)$}
731 A partir de $\mathcal{P}=\{p_1, p_2, \hdots, p_\mathsf{p}\}$, on
732 définit le graphe orienté $\textsc{giu}_{\mathcal{P}}(f)$ de la manière suivante:
734 \item les n{\oe}uds sont les $2^\mathsf{N}$ configurations de $\mathds{B}^\mathsf{N}$,
735 %\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
736 % having their elements in $\llbracket 1, \mathsf{N} \rrbracket $.
737 \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
738 $\mathcal{P}$ (\textit{i.e.}, on peut itérer $p_i$ fois), et pour chaque
739 $k$, $0 \le k \le p_i-1$, on a
740 $u_k$ qui appartient à $[\mathsf{N}]$ et
741 $y=F_{f_u,p_i} (x, (u_0, \hdots, u_{p_i-1})) $.
743 Il n'est pas difficile de constater que $\textsc{giu}_{\{1\}}(f)$ est $\textsc{giu}(f)$.
751 \subfigure[$\textsc{giu}_{\{2\}}(h)$]{
752 \begin{minipage}{0.30\textwidth}
754 \includegraphics[scale=0.5]{images/h2prng}
759 \subfigure[$\textsc{giu}_{\{3\}}(h)$]{
760 \begin{minipage}{0.40\textwidth}
762 \includegraphics[scale=0.5]{images/h3prng}
767 \subfigure[$\textsc{giu}_{\{2,3\}}(h)$]{
768 \begin{minipage}{0.40\textwidth}
770 \includegraphics[scale=0.5]{images/h23prng}
777 \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)$}
778 %\label{fig:xplgraphIter}
785 On reprend l'exemple où $\mathsf{N}=2$ et
786 $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$ déjà détaillé
787 à la section~\ref{sub:prng:unif}.
789 Le graphe $\textsc{giu}_{\{1\}}(h)$ a déjà été donné à la figure~\ref{fig:h:iter}.
790 Les graphes $\textsc{giu}_{\{2\}}(h)$, $\textsc{giu}_{\{3\}}(h)$ et
791 $\textsc{giu}_{\{2,3\}}(h)$ sont respectivement donnés aux figures~\ref{fig:h2prng}, ~\ref{fig:h3prng} et ~\ref{fig:h23prng}.
792 Le premier (respectivement le second)
793 illustre le comportement du générateur lorsque qu'on itère exactement
794 2 fois (resp. 3 fois) puis qu'on affiche le résultat.
795 Le dernier donnerait le comportement d'un générateur qui s'autoriserait
796 à itérer en interne systématiquement 2 ou 3 fois avant de retourner un résultat.
801 \subsection{le PRNG de l'algorithme~\ref{CI Algorithm} est chaotique sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
803 Le théorème suivant, similaire à ceux dans $\mathcal{X}_u$ et dans $\mathcal{X}_g$
804 est prouvé en annexe~\ref{anx:generateur}.
806 \begin{restatable}[Conditions pour la chaoticité de $G_{f_u,\mathcal{P}}$]{theorem}{thmchoticitgfp}
807 La fonction $G_{f_u,\mathcal{P}}$ est chaotique sur
808 $(\mathcal{X}_{\mathsf{N},\mathcal{P}},d)$ si et seulement si
809 le graphe d'itérations $\textsc{giu}_{\mathcal{P}}(f)$
810 est fortement connexe.
812 % On alors corollaire suivant
815 % Le générateur de nombre pseudo aléatoire détaillé
816 % à l'algorithme~\ref{CI Algorithm}
817 % n'est pas chaotique
818 % sur $(\mathcal{X}_{\mathsf{N},\{b\}},d)$ pour la fonction négation.
821 % Dans cet algorithme, $\mathcal{P}$ est le singleton $\{b\}$.
822 % Que $b$ soit pair ou impair, $\textsc{giu}_{\{b\}}(f)$
823 % n'est pas fortement connexe.
830 Ce chapitre a proposé un algorithme permettant de construire un
831 PRNG chaotique à partir d'un PRNG existant. Pour ce faire, il est nécessaire
832 et suffisant que la fonction $f$ qui est itérée un nombre $b$ de fois
833 possède un $\textsc{giu}_{\{b\}}(f)$ fortement connexe et que sa matrice de Markov associée soit doublement stochastique.
834 Le chapitre suivant montre comment construire une telle fonction.