Distribution des valeurs d'une expression par énumération
Le programme python suivant permet d'analyser par énumération la distribution des valeurs d'une expression. Les variables considérées pour l'expression ont soit une distribution aléatoire uniforme (variables de type masque), soit une distribution inconnue (considérée secrète).Lien vers le fichier
L'analyse donne pour résultat une valeur parmi 3 possibles :
- RUD : la distribution de l'expression est aléatoire uniforme
- ISD : la distribution de l'expression est indépendante des variables secrètes
- UKD : la distribution de l'expression dépend de la distribution d'au moins une des variables secrètes
$ ./check_formula_distrib.py -l "k ^ m"
La taille des variables (en nombre de bits) est à configurer dans le fichier python.Dans l'expression, par convention, les variables de type masque sont celles qui ont un nom de la forme m<val> ou r<val>, et les variables secrètes celles qui ont un nom de la forme k<val> ou s<val>.
Concernant les décalages, l'opérateur >> effectue un décalage non signé, tandis que la fonction sra(m, sh) effectue un décalage signé.
Par exemple :
- les expressions (k ^ m1) ^ m2 et (k ^ m) ^ (m << 1) sont aléatoires uniformes (DAU)
- l'expression (k ^ m1) & m2 n'est pas uniforme mais est statistiquement indépendante de k (DIS)
- l'expression (k ^ m) & m est statistiquement dépendante de k (DIN)