Applications des
congruences
Michel Van Caneghem
Février 2003
Turing : des codes secrets aux machines universelles #4 c
2003 MVC
Tables de hashcode
Supposons que l’on désire associer chaque numéro de
carte d’étudiant (par exemple avec 9 chiffres) une clé unique
entre 0et m1. Une première idée consiste à utiliser la fonc-
tion définie par :
h(k)k(mod m)
Regardons comment mdoit être choisi :
pas une puissance de 10,
pas un nombre qui divise bk+aEx : 100010 (mod 111)
Il vaut mieux choisir pour mun nombre premier voisin de
l’espace mémoire disponible (Ex : si il y 5000 cases pour
2000 étudiants on peut choisir m= 4969)
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 1
Tables de hashcode (2)
Il faut cependant résoudre le problème des collisions Les
collisions peuvent être résolues ou bien par une liste chai-
née, ou bien on prend la première case libre en suivant, ou
bien on utilise une série de fonction de hash-code secon-
daires. On choisit mtel que m2soit aussi premier :
g(k)k+ 1 (mod m2)
hj(k)h(k) + jg(k) (mod m)
k h(k)h1(k)h2(k)
344 401 659 269
325 510 778 1526
329 938 157 1526 1742
132 489 973 1526 1742 1958
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 2
Tables de hashcode (3)
On va alors chercher les conditions pour une double colli-
sion :
h1(k1) = h1(k2)et h2(k1) = h2(k2)
On obtient alors :
k1k2(mod m2)
puis :
k1k2(mod m)
ce qui donne : k1k2(mod m(m2))
Ce qui est rare et même impossible si : m(m2) > k
Ex : 4969 ×4967 = 24681023.
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 3
Suites pseudo aléatoires
Pour engendrer des nombres pseudo aléatoires une bonne
méthode consiste à trouver des suites de grande période.
Un des moyens les plus simple consiste à utiliser des
congruences linéaires :
x0=generateur xn+1 =axn+c(mod m)
Cette congruence produit une suite de période msi et seule-
ment si :
cm= 1
a1 (mod p)pour tout ppremiers qui divise m
a1 (mod 4) si 4 divise m
x0= 8 xn+1 = 11xn+ 13 (mod 25)
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 4
Suites pseudo aléatoires (2)
On peut avoir des congruences plus simples si mest pre-
mier.
x0=generateur xn+1 =axn(mod m)
La solution est alors de la forme xn=anx0(mod m). Pour
que aiengendre tous les nombres de 0àm1il faut que a
soit une racine primitive de m.
Si dest un diviseur de m1alors aest une racine primitive
si :
a(m1)/d 6≡ 1 (mod m)
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 5
Suites pseudo aléatoires (3)
Montrons que 2 est une racine primitive de 19. 19 1 = 18 =
2×32
218/22956 18 6≡ 1 (mod 19)
218/32664 76≡ 1 (mod 19)
218/62386≡ 1 (mod 19)
218/92246≡ 1 (mod 19)
x0= 1 xn+1 2xn(mod 19)
et voici la suite produite :
1,2,4,8,16,13,7,14,9,18,17,15,11,3,6,12,5,10,1
mais pour 5 on obtient : 1,5,6,11,17,9,7,16,4,1
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 6
Suites pseudo aléatoires (4)
Voici une suite utilisable de période M31 = 231 1 =
2147483647 Ce nombre le 31ème de Mersenne est premier
et est aussi le plus grand entier signé sur 32 bits. On peut
montrer que 7 (en fait 75= 16807) est une racine primitive de
M31
M31 1 = 2 ×32×7×11 ×31 ×151 ×331
x0=seed xn+1 16807xn(mod 2147483647)
Il y a d’autres générateurs de plus grande périodes
construits avec des registres à décalage.
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 7
Les codes correcteurs d’erreurs
On fait des erreurs quand on utilise un canal de transmis-
sion avec du bruit.
Ligne de transmission (téléphone, radio, parole,...)
Transcription (papier, support magnétique,...)
Théorème de Shanon : On peut toujours réduire le débit
d’information pour diminuer le taux d’erreurs.
Pour représenter de l’information, on la code. Pour détecter
ou corriger des erreurs, il faut augmenter la redondance du
code. En général on travaille sur des codes binaires qui ont
comme taille kbits et qui peuvent représenter Minforma-
tions (mots du code). M << 2k.
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 8
Les codes correcteurs d’erreurs (2)
On dispose d’une procédure qui permet de vérifier si un mot
parmi le 2kmots possibles est valide : code detecteurs d’er-
reurs.
Si le code est bien construit, on peut remplacer un mot
contenant une erreur, par un mot correct voisin : code cor-
recteurs d’erreurs.
On construit de tels codes en utilisant les corps finis et
beaucoup de Mathématiques en plus!!!
Codes linéaires, codes cycliques;
Utilisés dans tous les disques dur CRC;
Utilisé dans les CD-Audio et CD-ROM, l’information codé est prati-
quement le double de l’information utile. On fait toujours des erreurs
quand on lit un CD!!!;
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 9
La carte d’étudiant
On veut savoir s’il y a eu une mauvaise transcription d’un
numéro de carte d’étudiant.
9623181E
c8c7c6c5c4c3c2c1
c1est la clé. Sa valeur est choisie de telle manière que :
8
X
i=1
ici0 (mod 11)
A1F6
B2G7
C3H8
D4J9
E5K10
8×9 + 7 ×6 + 6 ×2 + 5 ×3 + 4 ×1 + 3 ×8 + 2 ×1 + 1 ×5 = 176
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 10
La carte d’étudiant (2)
Détecte une erreur simple : Si c= (c8, . . . , c1)est correct
alors P8
i=1 ici0 (mod 11). Supposons une erreur sur le
chiffre ialors c0= (c8, . . . , c0
i, . . . , c1),ona:
8
X
i=1
ic0
i
8
X
i=1
ici+i(c0
ici)i(c0
ici)6≡ 0(mod 11)
Détecte une permutation de 2 chiffres : Avec les mêmes no-
tations c0
i=cjet c0
j=ci
8
X
i=1
ic0
ii(cjci) + i(cicj)(cjci)(ij)6≡ 0(mod 11)
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 11
La carte d’étudiant (3)
Corrige une erreur en position connue : Si l’on a
c= 96x3181E
c’est à dire que le troisième chiffre est effacé. Alors :
8×9+7×6 + 6 ×x+ 5 ×3 +4 ×1+ 3×8 +2 ×1+ 1×5 = 164+6x
Pour que le code soit valide :
164 + 6x0 (mod 11) 6x1 (mod 11)
x612 (mod 11)
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 12
Le code ISBN
C’est un code à dix chiffres pour tous les livres : Internatio-
nal Standard Book Number. Par exemple le livre : Méthodes
Mathématiques pour l’Informatique
2 04 018617 4
Langue Editeur No du livre clé
Si c= (c1, c2, . . . , c10)alors
10
X
i=1
ici0 (mod 11)
Attention si on doit noter 10 on le représente par X. Par
exemple : L’anatomie de Prolog : ISBN 2 7296 0149X.
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 13
Le code de la Sécurité Sociale
C’est un nombre Nss de 13 chiffres avec une clé de vérifi-
cation qui est un nombre deux chiffres.
1 xx 07 75 114524 84
Sexe Année Mois Départ. No registre clé
Nss +Cle 0 (mod 97)
Pour calculer cette clé avec une calculatrice, il faut couper
le nombre Nss en deux. On a :
1000000 27 (mod 97)
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 14
Le code du RIB
Il s’agit de la clé utilisé dans tous les numéros de comptes
bancaire. Voici la structure du code RIB :
30004 00703 0000xxxxxxx 94
Banque Guichet Numéro de compte clé RIB
Ce code est considéré comme un nombre Nc de 23 chiffres
dont les deux derniers chiffres sont la clé RIB qui est tel
que :
Nc 0 (mod 97)
Attention, c’est légèrement différent du code de la Sécurité
Sociale.
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 15
Un code décimal correcteur d’erreurs
Considérons un code sur 10 chiffres décimaux. Soit x=
(x1, x2, . . . , x10)un mot de code, tel que :
10
X
i=1
xi0 (mod 11)
10
X
i=1
ixi0 (mod 11)
On peut montrer que ce code contient 82644629 mots pos-
sibles. On peut donc imaginer des numéros de téléphone
Correction d’erreurs : Une erreur en jd’écart k
y= (x1, x2, . . . , xj+k, . . . , x10)
10
X
i=1
yik(mod 11)
10
X
i=1
iyijk (mod 11)
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 16
Un code décimal correcteur d’erreurs (2)
Voyons un exemple : y= 0610271355
10
X
i=1
yi8 (mod 11)
10
X
i=1
iyi6 (mod 11)
On a donc k= 8 et jk = 6 d’ou j= 9
0610271355
3
0610271385
Le numéro correct était donc : y= 0610271385
Turing : des codes secrets aux machines universelles #4 c
2003 MVC 17
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !