1 Introduction 2 Utilisation de la fonction ”générateur de nombre

Transcription

1 Introduction 2 Utilisation de la fonction ”générateur de nombre
Université Joseph Fourier
UE Informatique et Aléatoire
TP : simulation de mots de passe
[email protected]
Objectifs : Comprendre qu’une loi est un modèle. Manipulation de lois conditionnelles.
Simulation de variables discrètes indépendantes, dépendantes, en utilisant les algorithmes
classiques de découpage d’intervalles, rejet, Walker.
Le TP peut être fait en C ou en R.
1
Introduction
Un mot de passe = 8 signes extraits du dictionnaire D = ∪4j=1 (Dj ) avec
D1 = {A, · · · , Z}, D2 = {a, · · · , z},
D3 = {0, · · · , 9}, D4 = {”?”, ”!”, ”.”, ”, ”, ” : ”, ””}.
On note :
• Xi le ieme signe du mot de passe. Xi ∈ D,
• Y le mot de passe, Y = (X1 , · · · , X8 ), Y ∈ D8 ,
• n la taille du mot (n = 8),
• N le nombre de symboles possibles (N = |D| = 68).
On peut générer automatiquement ces mots de passe suivant les lois :
1. Les signes Xi sont indépendants et identiquement distribués (i.i.d). Tous les symboles
de D sont equiprobables (la distribution est uniforme).
2. Les signes sont i.i.d. A l’intéreur de chaque dictionnaire, la distribution est uniforme
( ou non) et le choix du dictionnaire suit une loi uniforme (ou non).
3. Les signes ne sont pas indépendants. Si Xi est une lettre, alors Xi+1 est un chiffre ou
un symbole de D4 (et inversement). La distribution est uniforme au sein de chaque
dictionnaire (ou non).
2
Utilisation de la fonction ”générateur de nombre
aléatoire”
• Créez les ensemble D1 , D2 , D3 , D4 et D = ∪Dj .
Sous R, vous pouvez utilisez la commande c pour concanenate ainsi que les dictionnaires existants, letters et LETTERS.
• Tirez aléatoirement avec remise suivant une loi uniforme n nombres entre 1 et N —
et créez le mot de passe correspondant.
Sous R, vous pouvez utilisez la commande sample.
3
Simulation par découpage d’intervalles
Supposons qu’au sein de chaque dictionnaire, tous les signes soient équiprobables mais que
la distribution des dictionnaires suit la loi suivante
P (D1 ) = P (D2 ) = 0.25, P (D3 ) = 0.4, P (D4 ) = 0.1
1
P
On alors P (Xi = xi ) = j P (Xi = xi |Dj )P (Dj ) = P (Xi = xi |Dji )P (Dji ) où Dji est le
dictionnaire auquel appartient xi . La simulation d’un signe se fera alors en 2 temps :
• on choisit le dictionnaire en respectant P (Dj ),
• puis au sein de chaque dictionnaire, on tire un signe uniformément.
Utilisez l’algorithme de rejet pour simuler un mot de passe. Pour cela
• Créez le vecteur de fréquences cumulées d’apparition de chaque dictionnaire (F1 , · · · , F4 ),
• Répétez pour chaque signe du mot de passe :
1. Tirer aléatoirement un nombre U entre 0 et 1 (runif()),
2. Sélectionnez le dictionnaire Dj tel que Fj−1 < U ≤ Fj (which()),
3. Tirer suivant une loi uniforme un signe dans Dj .
4
Simulation par la méthode de rejet
Nous ne considérons plus la distribution uniforme au sein de chaque dictionnaire.
Considérez la liste de tous les signes de D avec leur probabilité d’apparition pk = P (X =
xk ). Soit vous simulez N valeurs de probablité (N entre 0 et 1 et tels que leur somme soit
égale à 1), soit vous utilisez P (xk ) = p(xk |Djk )P (Djk ) avec p(x|Djk ) uniforme ou non.
Utilisez maintenant la méthode de rejet. Pour cela :
1. Choisir le vecteur chances tel que chances[k] = p(xk )
2. Tirer aléatoirement un nombre K entre 1 et N . Ce sera le numero K du signe de D
que l’on va choisir ou rejeter,
3. Tirer aléatoirement U un nombre entre 0 et 1,
4. Choisir xK si U ≤ chances[k] sinon recommencez à 2,
5. Comptez le nombre d’itérations que vous avez faı̂tes pour simuler le mot de passe
Notez que sous R, vous pouvez réaliser les points 2. et 3. directement sur un vecteur de
taille 8.
pk
.
Accélerez cet algorithmes en choisisant chances[k] =
maxi pi
Comparez le nombre d’itérations pour les 2 algorithmes.
5
Algorithme de Walker
Considérez la liste de tous les signes de D avec leur probabilité d’apparition pk .
Utilisez maintenant la méthode de Walker pour simuler votre mot de passe. Pour cela
1. Créer la table d’aliasing
(a) Initialisation :
• Créez le vecteur seuils = N ∗ p.
• Créez la structure tab qui pour chaque entier k entre 1 et N contiendra
bink , seuilk et aliask . Lors du tirage, si le tirage uniforme U est inférieur à
seuilk , on choisira xbink sinon xaliask .
• Ordonnez les éléments de tab par ordre croissant des valeurs seuilk .
• i=1
(b) Construction de la table : Afin de ramener les valeurs seuil à des probabilités, donc plus petites que 1, on ôte la partie supérieure à 1 de seuilN et on
répartit ce poids sur les indices i pour lesquelles les valeurs seuili sont petites.
Chaque colonne ne peut être complétée qu’une seule fois.
2
• tant que seuilN > 1 {
•
aliasi = binN ,
•
seuilN = seuilN − (1 − seuili ),
•
ordonner les éléments de tab par ordre croissant des valeurs seuilk ,
•
i++
• }
2. 2. Effectuez le tirage
• Tirer aléatoirement K entre 1 et N
• Tirer aléatoirement U un nombre entre 0 et 1
• Choisir xbinK si U ≤ seuilk sinon choisir xaliask .
• Comptez le nombre d’itérations que vous avez faı̂tes pour simuler le mot de passe.
6
Utilisation d’une matrice de transition pour simuler la dépendance
Considéros la matrice de transition entre les différents dictionnaires suivante :


0
0
0.5 0.5
 1/3
0 1/3 1/3


0.25 0.25 0 0.5 
0
0
1
0
L’ élément de la k eme ligne et j ieme colonne est p(Xi ∈ Dj |Xi−1 ∈ Dk )
• Pourquoi la somme des éléments d’une même ligne fait elle 1 ?
• Pourquoi la somme des éléments d’une même colonne est elle différente de 1 ?
• Pour simulez un mot de passe, il faut simuler le premier signe du mot puis chaque
signe est simulé en fonction du signe précédent. Concrétement :
1. Simulez le choix du dictionnaire avec l’une des méthodes précédentes pour le premier
signe en utilisant la distribution
P (D1 ) = P (D2 ) = 0.25, P (D3 ) = 0.4, P (D4 ) = 0.1
2. Simulez le choix du dictionnaire pour le second signe en utilisant la distribution
conditionnelle p(X2 ∈ DJ |X1 inDj1 ). Cette distribution est la jiieme lignes de la
matrice de transition. Vous pouvez utiliser l’une des méthodes précédentes.
3. ...
4. Simulez le choix du dictionnaire pour le iieme signe en utilisant la distribution conditionnelle p(Xi ∈ DJ |Xi−1 ∈ Dji−1 )
5. Simulez le mot de passe en tirant uniformément chaque signe dans le dictionnaire
choisi.
3