1 Pour décrire un peu plus précisément le principe de
2 la génération pseudo-aléatoire, considérons l'espace booléen
4 muni des lois \og +\fg{}, \og . \fg{} et \og $\overline{\mathstrut\enskip}$ \fg{}
5 définies par les tableaux ci-dessous:
7 \begin{minipage}{0.33\textwidth}
9 \begin{tabular}{|c|c|c|}
20 \begin{minipage}{0.33\textwidth}
22 \begin{tabular}{|c|c|c|}
33 \begin{minipage}{0.32\textwidth}
35 \begin{tabular}{|c|c|c|}
39 $\overline{\mathstrut\enskip}$ & 1& 0 \\
46 La fonction itérée est
47 une fonction $f$ de $\Bool^n$ dans lui-même qui à
48 un mot binaire $x = (x_1,\ldots,x_n)$
49 associe le mot $(f_1(x),\ldots, f_n(x))$.
50 Un exemple de fonction de $\Bool^n$ dans lui-même
51 est la fonction négation
53 $\neg(x)=(\overline{x_1},\dots,\overline{x_n})$.
55 Le principe itératif est le suivant:
56 à chaque itération $t$, on choisit un indice $i$ entre $1$ et $n$,
57 et le mot $x^t = (x_1^t,\ldots,x_n^t)$ est remplacé par
58 $x^{t+1} = (x_1^t,\ldots , x_{i-1}^t, f_i(x^t), x_{i+1}^t,\ldots, x_n^t)$.
60 Au bout d'un nombre $N$ d'itérations,
61 si la fonction, notée $G_f$ dans ce document,
62 que l'on peut associer à l'algorithme décrit ci-dessus
63 a de \og bonnes\fg{} propriétés chaotiques,
64 le mot $x^N$ doit être \og très différent\fg{} de $x^0$
65 de façon à même sembler ne plus dépendre de $x_0$:
66 pour un générateur aléatoire, il faut que la structure de
67 $x^N$ semble être due au hasard;
68 pour une application cryptographique, il faut qu'il
69 soit matériellement impossible (dans les conditions techniques actuelles)
70 de retrouver $x^0$ à partir de $x^N$.
73 $\Bool^n$ peuvent constituer les
74 $2^n$ sommets d'un \gls{graphoriente} (cf. glossaire)
75 dans lequel un arc relie deux sommets $x$ et $x'$
76 s'il existe une itération de l'algorithme
77 de génération qui permet de passer de $x$ à $x'$.
78 Ce graphe est appelé le graphe d'itérations et
79 ce document montre que si l'on a un \gls{graphfortementconnexe} (cf. glossaire),
80 alors la fonction $G_f$ est transitive, donc chaotique.
82 Enfin, un bon générateur aléatoire se doit de
83 fournir des nombres selon une \gls{distributionuniforme} (cf. glossaire).
84 La dernière partie de ce document donnera,
85 dans le cas où le graphe d'itérations est fortement connexe,
86 une condition nécessaire est suffisante pour que
87 cette propriété soit satisfaite.
90 Cette section présente une application directe de la théorie développée ci-avant
91 à la génération de nombres pseudo aléatoires. On présente tout d'abord le générateur
92 basé sur des fonctions chaotiques (section~\ref{sub:prng:algo}),
93 puis comment intégrer la contrainte de \gls{distributionuniforme}
94 (cf. glossaire) de la sortie
95 dans le choix de la fonction à itérer (section~\ref{sub:prng:unif}).
96 L'approche est évaluée dans la dernière section.
99 \subsection{ Générateur de nombres pseudo aléatoires basé sur le chaos}\label{sub:prng:algo}
105 On peut penser à construire un générateur de nombres pseudo
106 aléatoires comme dans l'algorithme~\ref{CI Algorithm} donné ci-dessous.
110 \KwIn{une fonction $f$, un nombre d'itérations $b$,
111 une configuration initiale $x^0$ ($n$ bits)}
112 \KwOut{une configuration $x$ ($n$ bits)}
114 $k\leftarrow b + \textit{Random}(b+1)$\;
115 %$k\leftarrow b + \textit{XORshift}(b+1)$\;
116 \For{$i=0,\dots,k-1$}
118 $s\leftarrow{\textit{Random}(n)}$\;
119 %$s\leftarrow{\textit{XORshift}(n)}$\;
120 $x\leftarrow{F_f(s,x)}$\;
124 \caption{Algorithme de génération de nombres pseudo aléatoires
125 à l'aide de la fonction chaotique $G_f$}
130 Celui-ci prend en entrée: une fonction $f$;
131 un entier $b$, qui assure que le nombre d'itérations
132 est compris entre $b+1 $ et $2b+1$ et une configuration initiale $x^0$.
133 Il retourne une nouvelle configuration $x$.
134 En interne, il exploite un algorithme de génération
135 de nombres pseudo aléatoires
136 \textit{Random}$(l)$.
137 Cet algorithme est utilisée dans notre générateur pour construire la longueur
138 de la stratégie ainsi que les éléments qui la composent.
139 Pratiquement, il retourne des entiers dans $\llbracket 1 ; l \rrbracket$
140 selon une \gls{distributionuniforme} (cf. glossaire) et utilise
141 \textit{XORshift} qui est une classe de générateurs de
142 nombres pseudo aléatoires
143 très rapides conçus par George Marsaglia.
145 % L'algorithme \textit{XORshift} exploite itérativement
146 % la fonction \og \gls{xor}\fg{} $\oplus$ (cf. glossaire)
147 % sur des nombres obtenus grâce à des \glspl{decalageDeBits} (cf. glossaire).
149 L'algorithme \textit{XORshift}
150 exploite itérativement l'opérateur $\oplus$
151 sur des nombres obtenus grâce à des \glspl{decalageDeBits} (cf. glossaire).
152 Cet opérateur, défini dans $\Bool^{n}$,
153 applique la fonction \og \gls{xor} \fg{} (cf. glossaire)
154 aux bits de même rang de ses deux opérandes (\og opération bit à bit \fg{}).
155 Une instance de cette classe est donnée dans l'algorithme~\ref{XORshift} donné
160 \KwIn{la configuration interne $z$ (un mot de 32-bit)}
161 \KwOut{$y$ (un mot de 32-bits)}
162 $z\leftarrow{z\oplus{(z\ll13)}}$\;
163 $z\leftarrow{z\oplus{(z\gg17)}}$\;
164 $z\leftarrow{z\oplus{(z\ll5)}}$\;
168 \caption{Une boucle de l'algorithme de \textit{XORshift}}
174 Il reste à instancier une fonction $f$ dans
175 l'algorithme~\ref{CI Algorithm}
176 en adéquation avec l'approche développée
177 en section~\ref{sec:sccg}.
178 La section suivante montre comment l'uniformité de la distribution a
179 contraint cette instanciation.
181 \subsection{Un générateur à sortie uniformément distribuée}\label{sub:prng:unif}
183 Une matrice stochastique est une matrice carrée
184 dont tous les éléments sont positifs ou nuls et dont
185 la somme de chaque ligne
187 Une matrice stochastique l'est doublement si la somme de chaque colonne est 1.
188 Enfin, une matrice stochastique de taille $n \times n$ est régulière
189 si la propriété suivante est établie:
190 $$\exists k \in \mathds{N}^\ast, \forall i,j \in \llbracket 1; n \rrbracket, M_{ij}^k>0.$$
192 On énonce enfin le théorème suivant liant les
193 \glspl{vecteurDeProbabilite} (cf. glossaire)
194 et les \glspl{chaineDeMarkov} (cf. glossaire):
198 \begin{Theo}\label{th}
199 Si $M$ est une matrice stochastique régulière, alors $M$
200 possède un unique vecteur stationnaire de probabilités $\pi$
202 De plus, si $\pi^0$ est un \gls{vecteurDeProbabilite}
204 la suite $(\pi^{k})^{k \in \Nats}$ par
205 $\pi^{k+1} = \pi^k.M $ pour $k = 0, 1,\dots$
206 alors la \gls{chaineDeMarkov} $\pi^k$
207 converge vers $\pi$ lorsque $k$ tend vers l'infini.
211 Montrons sur un exemple jouet à deux éléments
212 que ce théorème permet de vérifier si la sortie d'un générateur de
213 nombres pseudo aléatoires est uniformément distribuée ou non.
214 Soit alors $g$ et $h$ deux fonctions de $\Bool^2$
215 définies par $g(x_1,x_2)=(\overline{x_1},x_1.\overline{x_2}) $
216 et $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$.
217 Leurs graphes d'interactions donnés en figure \ref{fig:g:inter} et \ref{fig:h:inter}
218 vérifient les hypothèses du théorème~\ref{th:Adrien}.
219 Leurs graphes d'itérations
220 sont donc fortement connexes, ce que l'on a pu déjà vérifier aux figures
221 \ref{fig:g:iter} et \ref{fig:h:iter}.
222 \textit{A priori}, ces deux fonctions pourraient être intégrées
223 dans un générateur de nombres pseudo aléatoires. Montrons que ce n'est pas le cas pour $g$ et
224 que cela l'est pour $h$.
227 Comme le générateur \textit{Random} possède une sortie uniformément
228 distribuée, la stratégie est uniforme sur $\llbracket 1, 2 \rrbracket$,
230 pour tout sommet de $\Gamma(g)$ et de $\Gamma(h)$,
231 chaque arc sortant de ce sommet a, parmi l'ensemble des arcs sortant
232 de ce sommet, une probabilité $1/2$ d’être celui qui sera traversé.
233 En d'autres mots, $\Gamma(g)$ est le graphe orienté d'une chaîne de Markov.
234 Il est facile de vérifier que la \gls{matriceDeTransitions} (cf. glossaire)
236 est $M_g = \frac{1}{2} \check{M}_g$,
237 où $\check{M}_g$ est la \gls{matriceDAdjacence} (cf. glossaire) donnée en
238 figure~\ref{fig:g:incidence} (voir ci-après), et similairement pour $M_h$.
242 \subfloat[$\check{M}_g $.]{
243 \begin{minipage}{0.25\textwidth}
257 \label{fig:g:incidence}
259 \subfloat[$\check{M}_h $.]{
260 \begin{minipage}{0.25\textwidth}
273 \label{fig:h:incidence}
276 \caption{Graphe des fonctions candidates avec $n=2$}
280 Les deux matrices $M_g$ et $M_h$ sont stochastiques. Pour
281 montrer qu'elles sont régulières il suffit de constater qu'aucun élément de
282 $M^5_g$ ni de $M^3_h$ n'est nul.
283 De plus, les vecteurs de probabilités
284 $\pi_g=(\frac{4}{10}, \frac{1}{10},\frac{3}{10},\frac{2}{10})$ et
285 $\pi_h=(\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4})$
286 vérifient $\pi_g M_g = \pi_g$ et
288 Alors d'après le théorème~\ref{th},
289 pour n'importe quel vecteur initial de probabilités $\pi^0$, on a
290 $\lim_{k \to \infty} \pi^0 M^k_g = \pi_g$ et
291 $\lim_{k \to \infty} \pi^0 M^k_h = \pi_h$.
292 Ainsi la chaîne de Markov associé à $h$ tend vers une
293 distribution uniforme, contrairement à celle associée à $g$.
294 On en déduit que $g$ ne devrait pas être itérée dans
295 un générateur de nombres pseudo aléatoires.
297 $h$ devrait pouvoir être embarquée dans l'algorithme~\ref{CI Algorithm},
298 pour peu que le nombre $b$ d'itérations entre deux mesures successives
299 de valeurs soit suffisamment grand de sorte que
300 le vecteur d’état de la chaîne de Markov
301 ait une distribution suffisamment proche de la distribution uniforme.
304 Considérons le lemme technique suivant:
305 \begin{Lemma}\label{lem:stoc}
306 Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\Gamma(f)$ son graphe d'itérations, $\check{M}$ la matrice d'adjacence de $\Gamma(f)$, et $M$ la matrice
307 $2^n\times 2^n$ définie par
308 $M = \frac{1}{n}\check{M}$.
309 Alors $M$ est une matrice stochastique régulière si et seulement si
310 $\Gamma(f)$ est fortement connexe.
314 On remarque tout d'abord que $M$
315 est une matrice stochastique par construction.
316 Supposons $M$ régulière.
317 Il existe donc $k$ tel que $M_{ij}^k>0$ pour chaque $i,j\in \llbracket
318 1; 2^n \rrbracket$. L'inégalité $\check{M}_{ij}^k>0$ est alors établie.
319 Puisque $\check{M}_{ij}^k$ est le nombre de chemins de $i$ à $j$ de longueur $k$
320 dans $\Gamma(f)$ et puisque ce nombre est positif, alors
321 $\Gamma(f)$ est fortement connexe.
323 Réciproquement si $\Gamma(f)$
324 est fortement connexe, alors pour tous les sommets $i$ et $j$, un chemin peut être construit pour atteindre $j$ depuis $i$ en au plus $2^n$ étapes.
326 $k_{ij} \in \llbracket 1, 2^n \rrbracket$ tels que $\check{M}_{ij}^{k_{ij}}>0$.
327 Comme tous les multiples $l \times k_{ij}$ de $k_{ij}$ sont tels que
328 $\check{M}_{ij}^{l\times k_{ij}}>0$,
329 on peut conclure que, si
330 $k$ est le plus petit multiple commun de $\{k_{ij} \big/ i,j \in \llbracket 1, 2^n \rrbracket \}$ alors
331 $\forall i,j \in \llbracket 1, 2^n \rrbracket, \check{M}_{ij}^{k}>0$.
332 Ainsi, $\check{M}$ et donc $M$ sont régulières.
335 Ces résultats permettent formuler et de prouver le théorème suivant:
338 Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\Gamma(f)$ son
339 graphe d'itérations , $\check{M}$ sa matrice d'adjacence
340 et $M$ une matrice $2^n\times 2^n$ définie comme dans le lemme précédent.
341 Si $\Gamma(f)$ est fortement connexe, alors
342 la sortie du générateur de nombres pseudo aléatoires détaillé par
343 l'algorithme~\ref{CI Algorithm} suit une loi qui
344 tend vers la distribution uniforme si
345 et seulement si $M$ est une matrice doublement stochastique.
348 $M$ est une matrice stochastique régulière (Lemme~\ref{lem:stoc})
349 qui a un unique vecteur de probabilités stationnaire
351 Soit $\pi$ défini par
352 $\pi = \left(\frac{1}{2^n}, \hdots, \frac{1}{2^n} \right)$.
353 On a $\pi M = \pi$ si et seulement si
354 la somme des valeurs de chaque colonne de $M$ est 1,
355 \textit{i.e.} si et seulement si
356 $M$ est doublement stochastique.
360 \subsection{Expérimentations}
362 On considère le graphe d'interactions $G(f)$ donné en figure~\ref{fig:G}.
363 Il vérifie le théorème~\ref{th:Adrien}:
364 toutes les fonctions $f$ possédant un tel graphe d'interactions
365 ont un graphe d'itérations $\Gamma(f)$ fortement connexe.
366 Pratiquement, un algorithme simple de satisfaction de contraintes
367 a trouvé 520 fonctions $f$ non isomorphes de graphe d'interactions $G(f)$,
368 dont seulement 16 d'entre elles possédent une matrice doublement stochastique.
370 La figure~\ref{fig:listfonction} explicite ces 16 fonctions en
371 définissant les images des éléments de la liste
372 0, 1, 2,\ldots, 14, 15 en respectant l'ordre.
373 Expliquons enfin comment a été calculé le nombre de la troisième
374 colonne utilisé comme le paramètre $b$
375 dans l'algorithme~\ref{CI Algorithm}.
377 Soit $e_i$ le $i^{\textrm{ème}}$ vecteur la base canonique de $\R^{2^{n}}$.
378 Chacun des éléments $v_j$, $1 \le j \le 2^n$,
379 du vecteur $e_i M_f^t$ représente la probabilité
380 d'être dans la configuration $j$ après $t$ étapes du processus de Markov
381 associé à $\Gamma(f)$ en partant de la configuration $i$.
383 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
384 \}$ représente le plus petit nombre d'itérations où la distance de
385 ce vecteur au vecteur $\pi=(\frac{1}{2^n},\ldots,\frac{1}{2^n})$
386 -- autrement dit, où la déviation par rapport à la distribution uniforme --
388 à $10^{-4}$. En prenant le max pour tous les $e_i$, on obtient une valeur pour
391 b = \max\limits_{i \in \llbracket 1, 2^n \rrbracket}
394 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
401 \subfloat[Graphe d'interactions]{
402 \begin{minipage}{0.20\textwidth}
404 \includegraphics[width=3.5cm]{images/Gi.pdf}
409 \subfloat[Fonctions doublement stochastiques]{
410 \begin{minipage}{0.75\textwidth}
413 \begin{tabular}{|c|c|c|}
415 {Nom}& {Définition}&{$b$} \\
417 $\mathcal{F}_1$ & 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1, 0 & 206\\
419 $\mathcal{F}_2$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 0, 1
422 $\mathcal{F}_3$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 1, 0
425 $\mathcal{F}_4$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 0, 1
428 $\mathcal{F}_5$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 1, 0
431 $\mathcal{F}_6$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 0, 1
434 $\mathcal{F}_7$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 1, 0
437 $\mathcal{F}_8$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0
440 $\mathcal{F}_9$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
443 $\mathcal{F}_{10}$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
446 $\mathcal{F}_{11}$ &14, 15, 12, 13, 11, 10, 9, 8, 7, 6, 5, 4, 2, 3, 1, 0
449 $\mathcal{F}_{12}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 2, 3, 1, 0
452 $\mathcal{F}_{13}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 3, 2, 1, 0
455 $\mathcal{F}_{14}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 5, 4, 3, 2, 1, 0
458 $\mathcal{F}_{15}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
461 $\mathcal{F}_{16}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
468 \label{fig:listfonction}
471 \caption{Candidates pour le générateur avec $n=4$}
475 La qualité des séquences aléatoires a été évaluée à travers la suite
476 de tests statistiques développée pour les générateurs de nombres
477 pseudo aléatoires par le
478 \emph{National Institute of Standards and Technology} (NIST).
479 % Pour les 15 tests, le seuil $\alpha$ est fixé à $1\%$:
481 % qui est plus grande que $1\%$ signifie
482 % que la chaîne est considérée comme aléatoire avec une confiance de $99\%$.
483 % Le tableau~\ref{fig:TEST} donne une vision synthétique de toutes
484 % les expérimentations.
485 L'expérience a montré notamment que toutes ces fonctions
486 passent avec succès cette batterie de tests.
493 % \begin{tabular}{|*{17}{c|}}
495 % {Propriété}& $\mathcal{F}_{1}$ &$\mathcal{F}_{2}$ &$\mathcal{F}_{3}$ &$\mathcal{F}_{4}$ &$\mathcal{F}_{5}$ &$\mathcal{F}_{6}$ &$\mathcal{F}_{7}$ &$\mathcal{F}_{8}$ &$\mathcal{F}_{9}$ &$\mathcal{F}_{10}$ &$\mathcal{F}_{11}$ &$\mathcal{F}_{12}$ &$\mathcal{F}_{13}$ &$\mathcal{F}_{14}$ &$\mathcal{F}_{15}$ &$\mathcal{F}_{16}$ \\
497 % Fréquence &77.9 &15.4 &83.4 &59.6 &16.3 &38.4 &20.2 &29.0 &77.9 &21.3 &65.8 &85.1 &51.4 &35.0 &77.9 &92.4 \\
499 % Fréquence / bloc &88.3 &36.7 &43.7 &81.7 &79.8 &5.9 &19.2 &2.7 &98.8 &1.0 &21.3 &63.7 &1.4 &7.6 &99.1 &33.5 \\
501 % Somme cummulée &76.4 &86.6 &8.7 &66.7 &2.2 &52.6 &20.8 &80.4 &9.8 &54.0 &73.6 &80.1 &60.7 &79.7 &76.0 &44.7 \\
503 % Exécution &5.2 &41.9 &59.6 &89.8 &23.7 &76.0 &77.9 &79.8 &45.6 &59.6 &89.8 &2.4 &96.4 &10.9 &72.0 &11.5 \\
505 % Longue exécution &21.3 &93.6 &69.9 &23.7 &33.5 &30.4 &41.9 &43.7 &30.4 &17.2 &41.9 &51.4 &59.6 &65.8 &11.5 &61.6 \\
507 % Rang &1.0 &41.9 &35.0 &45.6 &51.4 &20.2 &31.9 &83.4 &89.8 &38.4 &61.6 &4.0 &21.3 &69.9 &47.5 &95.6 \\
509 % Fourrier Rapide &40.1 &92.4 &97.8 &86.8 &43.7 &38.4 &76.0 &57.5 &36.7 &35.0 &55.4 &57.5 &86.8 &76.0 &31.9 &7.6 \\
511 % Sans superposition &49.0 &45.7 &50.5 &51.0 &48.8 &51.2 &51.6 &50.9 &50.9 &48.8 &45.5 &47.3 &47.0 &49.2 &48.6 &46.4 \\
513 % Avec Superposition &27.6 &10.9 &53.4 &61.6 &16.3 &2.7 &59.6 &94.6 &88.3 &55.4 &76.0 &23.7 &47.5 &91.1 &65.8 &81.7 \\
515 % Universelle &24.9 &35.0 &72.0 &51.4 &20.2 &74.0 &40.1 &23.7 &9.1 &72.0 &4.9 &13.7 &14.5 &1.8 &93.6 &65.8 \\
517 % Entropie approchée &33.5 &57.5 &65.8 &53.4 &26.2 &98.3 &53.4 &63.7 &38.4 &6.7 &53.4 &19.2 &20.2 &27.6 &67.9 &88.3 \\
519 % Suite aléatoire &29.8 &35.7 &40.9 &36.3 &54.8 &50.8 &43.5 &46.0 &39.1 &40.8 &29.6 &42.0 &34.8 &33.8 &63.0 &46.3 \\
521 % Suite aléatoire variante &32.2 &40.2 &23.0 &39.6 &47.5 &37.2 &56.9 &54.6 &53.3 &31.5 &23.0 &38.1 &52.3 &57.1 &47.7 &40.8 \\
523 % Série &56.9 &58.5 &70.4 &73.2 &31.3 &45.9 &60.8 &39.9 &57.7 &21.2 &6.4 &15.6 &44.7 &31.4 &71.7 &49.1 \\
525 % Complexité linéaire &24.9 &23.7 &96.4 &61.6 &83.4 &49.4 &49.4 &18.2 &3.5 &76.0 &24.9 &97.2 &38.4 &38.4 &1.1 &8.6 \\
529 % \caption{Test de NIST réalisé sur des instances de générateurs}\label{fig:TEST}