Rapport-PAF

16 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
16
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
1
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Rapport-PAF

  1. 1. Télécom ParisTech PAF Peut-on être certain de l’incertitude ? Auteurs : Nathan Azoulay Anas Barakat Adrien Cohen-Olivar Encadrants : Lirida Naviner You Wang 29 juin 2016
  2. 2. 1 Objectif du projet 1.1 Présentation du projet Les nombres aléatoires sont essentiels dans divers domaines. On peut citer par exemple la cryptographie où ils permettent de générer des mots de passes imprévisibles et donc sécurisés. Il est légitime de se demander comment savoir si un nombre binaire donné est vraiment aléatoire. 1.2 But du projet Le but était de : 1. mettre en oeuvre un testeur de qualité de nombres aléatoires en implémentant des algorithmes de test 2. développer une interface graphique (GUI) 1.3 Choix technologiques Nous avons choisi : — Python pour l’implémentation des algorithmes car c’est un langage que l’on connaît un peu. — le Framework Tkinter en Python pour garder le même langage pour l’interface graphique. 2 Explication des algorithmes de test Le critère choisi pour la qualité d’une séquence aléatoire est Pvalue qui est calculée différemment selon les différents algorithmes. Il s’agit de la probabilité qu’un générateur parfait de nombres aléatoires ait produit une séquence moins aléatoire que la séquence testée. Ainsi, si elle vaut 1, c’est que la séquence générée est parfaitement aléatoire. Le seuil choisi pour Pvalue est pris à α = 1% où α désigne la probabilité que le test indique que la séquence n’est pas aléatoire alors qu’elle l’est en réalité. 2.1 Frequency (Monobit) Test (1) 2.1.1 Principe Le test qui paraît le plus trivial, pour savoir si un nombre binaire est bien aléatoire, est de calculer la fréquence de 1 (ou de 0 vu qu’elles sont clairement reliées) dans la suite. Pour une suite aléatoire, on sait que chaque élément est généré par une variable de Bernouilli de probabilité 1/2. Donc, la fréquence observé doit être proche de 1/2. 2.1.2 Description succincte des étapes — Transformation des 0 en -1 — Somme des éléments et calcul de Sobs — Calcul de Pvalue 2.1.3 Calcul de Pvalue — séquence (vraiment) aléatoire : 1, 2, ... n générée par une variable aléatoire de Bernoulli de probabilité 1/2 et de variance 1. — n k=1 2 k−1√ n suit une loi normale d’espérance nulle et de variance 1 pour n très grand — Pvalue est alors calculée avec la distribution gaussienne. 2.2 Frequency Test within a Block (2) 2.2.1 Principe Le test est dans la prolongation du précédent. Cette fois-ci la séquence est partagée en différent blocs où l’algorithme de Frequence test est appliqué sur chaque bloc. On applique ensuite un χ2 test 1 pour vérifier si les échantillons vérifient bien l’hypothèse nulle. 1. Le χ2 test est un test statistique permettant de tester l’adéquation d’une série d’échantillons, où l’on suppose l’hypothèse nulle, avec un modèle voulu. Ce test utilise une χ2 - distribution pour mesurer la qualité des échantillons.
  3. 3. 2.2.2 Description succincte des étapes — découpage de la séquence en blocs de taille M — calcul de la fréquence de 1dans chaque bloc — calcul de χ2 — détermination de Pvalue 2.2.3 Calcul de Pvalue Plus χ2 est faible et plus les échantillons sont en adéquation avec un comportement aléatoire car les propor- tions sont alors plus proches de 1/2 dans chaque bloc. Pvalue est basé sur un test χ2 2.3 Binary Matrix Rank Test (5) 2.3.1 Principe Le test est basé sur le calcul de rang de sous-matrices obtenues à partir d’un découpage de la séquence binaire d’origine en séquences plus petites dont on fait des matrices de taille M x Q où M désignera le nombre de lignes et Q le nombre de colonnes associées. Le rang permet alors de quantifier la dépendance linéaire entre différents bouts de la séquence. 2.3.2 Description succincte des étapes — découpage de la séquence en blocs de taille M x Q — Ecriture matricielle de ces blocs — Calcul du rang de chacune des matrices — Comptage statistique des matrices de rangs M et M-1 — Calcul de Pvalue à partir des fréquences précédentes avec la distribution χ2 2.4 Discrete Fourier Transform (Spectral) Test (6) 2.4.1 Principe A partir de la détection de pics du module de la Transformée de Fourier Discrète, on cherche à détecter les motifs périodiques proches les uns des autres. 2.4.2 Description succincte des étapes — Transformation des 0 de la séquence en -1 — Calcul de la DFT — Calcul du module de la DFT — Comptage statistique des pics de module inférieurs à un seuil T, référence pour les suites aléatoires — Calcul de Pvalue avec la distribution gaussienne en utilisant la fonction erreur. 2.5 Non-overlapping Template Matching Test (7) 2.5.1 Principe Le but de ce test est d’énumérer le nombre d’occurrences d’un motif donné dans la séquence. En effet, une séquence qui comporte un motif qui se répète plusieurs fois n’est certainement pas générée par un RNG. 2.5.2 Description succincte des étapes — Partition de la séquence en N blocs de taille M — Calcul du nombre d’occurences du motif dans chaque échantillon grâce à une fenêtre glissante. — Calcul du χ2 en fonction des nombres précédents. — Calcul de Pvalue en fonction de χ2 2
  4. 4. 2.5.3 Calcul de Pvalue Soit W le nombre d’occurrence du motif B dans une séquence aléatoire de taille n. W = Somme de n Bernoullis m-dépendantes de probabilité 1/2m . D’après le théorème centrale limite pour des variables m- dépendantes, W suit une loi normale. On obtient grâce à cela l’expression de χ2 avec N degrés de liberté puis de Pvalue = P(χ2 ≥ χ2 obs) 2.6 Overlapping Template Matching Test (8) 2.6.1 Principe Ce test ressemble au précédent sauf que cette fois-ci la fenêtre passe au bit suivant au lieu de sauter m bits quand le motif est trouvé. Le traitement du nombre d’occurrence dans les échantillons est aussi différent. En effet, on peut ici détecter si un motif est trop peu présent ou présent de manière irrégulière. 2.6.2 Description succincte des étapes — Partition de la séquence en N blocs de taille M — Calcul du nombre d’occurences Oi du motif dans chaque échantillon grâce à une fenêtre glissante de 1 bit à chaque fois indépendemment de la correspondance avec le motif. — On limite le degré de liberté à 6 en incrémentant 6 variables Vi en fonction du nombre d’occurences. — Calcul des probabilités théoriques πi pour les différentes classes théoriques de nombre d’occurences. — Calcul de Pvalue en fonction de χ2 2.6.3 calcul de Pvalue En théorie, si W compte le nombre de présence (avec chevauchement) d’un motif de longueur m dans une séquence aléatoire de taille M et où chaque élément suit une loi binomiale d’espérance 1/2, alors on a que W suit une loi de Poisson-Géométrique qui nous permettent d’accéder aux πi théoriques. On obtient grâce à cela l’expression de χ2 avec 6 degrés de liberté cette fois-ci puis de Pvalue comme précédemment. 2.7 Linear Complexity Test (10) 2.7.1 Principe Ce test consiste à mesurer la complexité linéaire d’une séquence pour déterminer sa qualité aléatoire. En effet, on essaie de voir si il existe une équation de récurrence pouvant générer les éléments de la suite. Si tel est le cas, la séquence n’est pas du tout aléatoire. On introduit dans ce test un LFSR (Linear Feedback Shift Register). Plus le LFSR est long et plus la séquence est censée être aléatoire. 2.7.2 Description succincte des étapes — Partition de la séquence en N blocs de M bits — Calcul de la complexité linéaire Li pour chaque bloc par l’algorithme de Berkelamp-Massey — On limite le degré de liberté à 7 en incrémentant 7 variables Vi en fonction des Li. — Calcul de Pvalue en fonction de χ2 3 Analyse des résultats Les autres paramètres sont par défaut : — 2 Block Frequency Test - block length(M) : 128 — 7 NonOverlapping Template Test - template : 000000001 — 8 Overlapping Template Test - template : 000000001 — 12 Approximate Entropy Test - block length(m) : 10 — 11 Serial Test - block length(m) : 16 — 10 Linear Complexity Test - block length(M) : 500 3
  5. 5. 3.1 Résultats pour l’uniformité des Pvalues et des proportions de séquences déclarées aléatoires — Les Ci représentent les tranches de [0,1x i ;0,1 x (i+1)] — La proportion désigne le nombre de séquences aléatoires déclarées réellement aléatoires sur 50 ou 100 selon le fichier testé matlab ou data, noms d’origine des fichiers contenant les séquences binaires. 3.1.1 Résultats des tests avec le fichier data : n = 10000, N = 100 sans encodage RC4 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 PvalueT Proportion Algo testé 9 6 8 13 12 7 12 17 6 10 0.262249 98/100 Frequency 10 10 12 10 12 10 10 14 8 4 0.699313 100/100 Block Frequency 100 0 0 0 0 0 0 0 0 0 0.000000 0/100 Rank 11 9 11 7 12 16 2 11 8 13 0.186566 100/100 FFT 15 8 6 6 2 9 16 19 8 11 0.003201 96/100 Non-Overlapping Template 100 0 0 0 0 0 0 0 0 0 0.000000 0/100 Overlapping Template 12 6 6 5 13 10 12 11 18 6 0.096578 95/100 Linear Complexity 3.1.2 Résultats des tests avec le fichier matlab : n = 2000, N = 50 sans encodage RC4 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 PvalueT Proportion Algo testé 6 3 3 5 4 6 4 4 7 8 0.816537 49/50 Frequency 6 4 5 4 6 3 7 9 2 4 0.574903 49/50 Block Frequency 0 0 50 0 0 0 0 0 0 0 0.000000 50/50 Rank 5 6 3 6 4 8 6 0 11 1 0.014550 50/50 FFT 4 5 0 13 0 0 0 0 28 0 0.000000 48/50 Non-Overlapping Template 50 0 0 0 0 0 0 0 0 0 0.000000 0/50 Overlapping Template 9 1 3 1 0 1 2 2 10 21 0.000000 47/50 Linear Complexity Quelques histogrammes sont en annexe pour attester des résultats de ce tableau. L’histogramme a été choisi pour une lecture plus simple des valeurs mais le camembert et le graphe linéaire à points sont aussi disponibles sur l’interface graphique. 3.1.3 Résultats des tests avec le fichier data : n = 10000, N = 100 avec encodage RC4 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 PvalueT Proportion Algo testé 7 14 14 8 13 5 11 10 7 11 0.446556 100/100 Frequency 13 12 11 7 8 13 9 10 5 12 0.678686 100/100 Block Frequency 100 0 0 0 0 0 0 0 0 0 0.000000 0/100 Rank 13 12 11 11 6 14 4 9 7 13 0.282626 99/100 FFT 6 9 6 10 11 18 4 14 15 7 0.030806 98/100 Non-Overlapping Template 100 0 0 0 0 0 0 0 0 0 0.000000 0/100 Overlapping Template 9 7 9 8 15 9 7 8 17 11 0.319084 98/100 Linear Complexity 3.1.4 Résultats des tests avec le fichier matlab : n = 2000, N = 50 avec encodage RC4 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 PvalueT Proportion Algo testé 3 6 2 10 5 6 2 5 6 5 0.334538 50/50 Frequency 6 6 5 2 5 2 7 5 6 6 0.816537 50/50 Block Frequency 0 0 50 0 0 0 0 0 0 0 0.000000 50/50 Rank 5 6 3 6 4 8 6 0 11 1 0.028817 50/50 FFT 5 4 0 14 1 0 0 0 26 0 0.000000 49/50 Non-Overlapping Template 50 0 0 0 0 0 0 0 0 0 0.000000 0/50 Overlapping Template 5 0 6 2 2 1 5 2 9 18 0.000000 49/50 Linear Complexity Pour les algorithmes 7 et 8, on n’a testé que pour un template donné mais le code sur le dépôt github permet de le tester rapidement pour tous les templates. 4
  6. 6. 3.1.5 Commentaires sur les résultats 1. Les proportions obtenues sont en général très grandes (proches de 100/100), ce qui traduit un caractère réellement aléatoire des séquences testées selon les algorithmes de test. 2. PvalueT diffère selon les algorithmes, ce qui traduit une distribution plus ou moins uniforme selon les algorithmes. Plus PvalueT est élevée et plus la répartition des Pvalues est uniforme. 3. La performance des tests est vérifiée par l’uniformité des Pvalues donc par PvalueT calculée statistiquement par un test χ2 . En effet, intuitivement, les tests sur des bouts de la séquence d’origine doivent donner des résultats indépendants, répartis de manière uniforme. 4. nos résultats VS résultats fournis (sans codage RC4) ? Les proportions obtenues sont égales à celles ob- tenues dans le fichier fourni. Néanmoins, nous avons noté que dans certains cas nous avons exactement les mêmes répartitions (C1, ..., C10) mais des PvalueT différentes (de l’ordre de 0.02 d’écart) alors que PvalueT est calculée uniquement à partir des Ci par des fonctions usuelles très simples. Ceci peut être du à la précision de calcul, étant donné que les résultats qui nous ont été fournis datent de plusieurs années même si l’article a été revisité en 2010. 5. data VS matlab ? D’après les proportions obtenues, la séquence data semble être plus aléatoire que matlab. Les proportions obtenues sur 100 tests sont plus importantes dans le cas de data quelque soit l’algorithme. 6. avec RC4 VS sans RC4 ? On constate que l’encodage de notre séquence de bits a tendance a rendre la séquence plus aléatoire. En effet, d’après les résultats, les proportions obtenues avec encodage RC4 augmentent quasiment toutes après application de celui-ci. Le traitement lié au chiffrement mélange la séquence de façon à la rendre plus aléatoire, au sens moins prévisible. D’où un intérêt du chiffrement RC4 dans les applications de sécurisation de systèmes. 7. Paramètres de test ? Notons qu’ils ne respectent pas toujours les recommendations d’entrées décrites dans l’article de la NIST, ce qui peut alors donner des résultats pas très satisfaisants sur les séquences, n’étant pas dans les conditions optimales d’application des résultats statistiques et mathématiques. 8. Algorithmes ? Tous les tests faisant intervenir un découpage en blocs utilisent la distribution χ2 puisqu’il s’agit toujours de comparer un modèle théorique d’ "aléatoirité" aux fréquences expérimentales sur les séquences. 3.1.6 Comparaison des algorithmes On constate que l’on peut classer les 7 algorithmes que nous avons implémenté en 2 grandes classes : la première étant celle de la fréquence de 1 dans la séquence et la deuxième regroupant les algorithmes pour la détection de motifs ou de périodicité. On analyse ici l’efficacité des différents algorithmes en considérant le rapport qualité- temps de calcul. Les algorithmes de complexité linéaire (10) et ceux de la détection de motifs redondants sont de complexité élevée et sont donc coûteux en temps de calcul (de l’ordre de la minute avant l’affichage). Néanmoins celui de la détection de motifs reste assez fiable et efficace puisqu’il donne des proportions correspondant à la qualité des nombres aléatoires d’autant plus que le critère de détection de motifs redondants est pertinent. En effet, le critère sur lequel est basé cet algorithme est largement plus fiable que l’algorithme 1 et 2 qui sont basés sur un comptage des 1 sur la séquence, ce qui reste naïf. Cependant, les algorithmes 1 et 2 restent nettement plus rapides (de l’ordre de la seconde). Notons aussi, que l’algorithme 1 de test fréquentiel est un test que toutes les séquences aléatoires doivent vérifier avant d’effectuer d’autres tests. Une séquence qui est rejetée par ce premier test est automatiquement déclarée comme non-aléatoire. Enfin, rappelons que la démarche du testeur de qualité consiste à combiner plusieurs tests sur la séquence binaire à tester avant de se prononcer définitivement sur le caractère aléatoire de la séquence. En effet, chaque algorithme teste le caractère aléatoire d’un point de vue donné : fréquence de 1, motifs redondants, périodicité de la séquence, dépendance linéaire entre les bouts de la séquence. Notons aussi que dans tous les cas, l’encodage RC4 améliore le caractère aléatoire des séquences. 5
  7. 7. 4 Récapitulatif du travail effectué tâche Nathan Anas Adrien Algorithmes 1et2, 7et8, 10 90 % 0 % 10% 5, 6 0 % 100 % 0 % Option codage RC4 0 % 100 % 0% GUI 45 % 45% 10% visualisation de données 80% 0% 20% Poster 20 % 80 % 0 % Rapport 40 % 50% 10 % 5 Prolongements 5.1 A propos des générateurs aléatoires La génération de nombres aléatoires grâce à des phénomènes physiques comme les phénomènes quantiques qui sont non déterministes via le bruit thermique par exemple. On peut citer comme exemples : la différence ohmique entre deux résistances identiques ou la différence de temps de trajets à travers deux fils identiques. En prolongation de notre travail, nous avons également utilisé la fonction random de Python, générateur pseudo-aléatoire, pour générer des séquences de taille choisie par l’utilisateur auxquelles on peut appliquer les 7 algorithmes que nous avons implémentés. Ces nombres ne sont pas vraiment aléatoires car Python les calcule grâce à des calculs complexes. Ces nombres peuvent donc être prévisibles. 5.2 Etudes connexes Les tests réalisés (algorithmes) sont produits par la NIST ( National Institute of Standards and Technology) , l’agence nationale américaine qui gère la sécurité de l’information. Un standard européen existe aussi : AIS31 qui définit ses propres tests des nombres aléatoires. Il est intéressant de comparer ces différents standards. 6 Annexe : graphes Figure 1 – Histogramme des résultats pour l’algorithme 1 avec la séquence data sans encodage RC4 avec les paramètres décrits dans la section résultat 6
  8. 8. Figure 2 – Histogramme des résultats pour l’algorithme 2 avec la séquence data sans encodage RC4 avec les paramètres décrits dans la section résultat Figure 3 – Histogramme des résultats pour l’algorithme 10 avec la séquence data sans encodage RC4 avec les paramètres décrits dans la section résultat Figure 4 – Histogramme des résultats pour l’algorithme 1 avec la séquence matlab sans encodage RC4 avec les paramètres décrits dans la section résultat 7
  9. 9. Figure 5 – Histogramme des résultats pour l’algorithme 2 avec la séquence matlab sans encodage RC4 avec les paramètres décrits dans la section résultat Figure 6 – Histogramme des résultats pour l’algorithme 10 avec la séquence matlab sans encodage RC4 avec les paramètres décrits dans la section résultat Figure 7 – Histogramme des résultats pour l’algorithme 2 avec la séquence data avec encodage RC4 avec les paramètres décrits dans la section résultat 8
  10. 10. Figure 8 – Histogramme des résultats pour l’algorithme 2 avec la séquence matlab avec encodage RC4 avec les paramètres décrits dans la section résultat

×