Travaux pratiques de mathématiques - Méthode RSA S nb

publicité
Travaux pratiques de mathématiques - Méthode RSA
S nb-tp3.1 .
Crible d’Ératosthène. [1 - B. Ischi 08-09 ]
Compléter le script suivant de manière à obtenir un programme qui cherche les nombres premiers
inférieurs à n à l’aide du crible d’Ératosthène.
1
2
3
4
5
6
7
8
9
10
11
12
13
n =10000;
tableau = [ 1 : 1 : ? ] ;
t a b l e a u ( 1 ) =0;
f o r l =1:?
i f ( t a b l e a u ( l ) >0)
k =?;
while (?<=?)
t a b l e a u ( ? ) =0;
k=k +1;
end
end
end
t a b l e a u ( n −100: n )
S nb-tp3.2 . Nombres premiers. [1 - B. Ischi 08-09 ]
Compléter le script suivant de manière à obtenir un programme qui détermine si le nombre p
donné par l’utilisateur est premier. L’algorithme consiste à tester, pour chaque nombre k compris
entre 2 et p−1, si p est divisible par k.
1
2
3
4
5
6
7
8
9
10
p=input ( ” Tapez un nombre e n t i e r : ” ) ;
k =?;
while (mod ( ? , ? ) >0) & (? <?)
k=k +1;
end
i f (?==?)
p r i n t f ( ”Ce nombre e s t p r e m i e r . \ n” )
else
p r i n t f ( ”Ce nombre n ’ e s t pas p r e m i e r . \ n” )
end
Peut-on simplement améliorer l’algorithme de manière à accélérer le programme ?
S nb-tp3.3 .
Puissances et modulo: algorithme naı̈f. [1 - B. Ischi 08-09 ]
(1) Calculer 2355 mod 23.
(2) Exécuter la commande mod(23ˆ55,23) avec Octave. Le résultat est-il le même qu’au point 1
ci-dessus ?
(3) Compléter le script suivant de manière à obtenir une fonction qui calcule k e mod n
exactement.
1
2
3
4
5
6
7
8
9
10
11
clear
function x=pm( k , e , n )
s =?;
km=mod ( ? , ? ) ;
f o r l =1:?
s=mod ( ? ∗ ? , ? ) ;
end
x=s ;
end
#
pm( 5 5 , 1 2 3 4 , 5 5 )
(4) Vérifier le bon fonctionnement du programme en calculant 2355 mod 23 = 0.
1
Travaux pratiques de mathématiques - Méthode RSA
S nb-tp3.4 .
Puissances: algorithme naı̈f.
123456
(page 2/6)
[1 - B. Ischi 14-15 ]
1234567
(1) Calculer 12
mod 3, 12
mod 3, 1212345678 mod 3 et 12123456789 mod 3 de tête.
(2) Calculer 12123456 mod 3, 121234567 mod 3, 1212345678 mod 3 et 12123456789 mod 3 avec l’algorithme naı̈f en exécutant les commandes mp(12,123456,3), mp(12,1234567,3), etc.
Pourquoi le temps de calcul est-il long ?
300
(3) Est-il possible de calculer 12(10 ) mod 3 avec l’algorithme naı̈f ?
S nb-tp3.5 .
Base 2. [1 - B. Ischi 14-15 ]
Compléter le script Octave suivant
1
2
3
4
5
6
7
8
9
10
c l e a r −a
function r=t o b i n ( e )
l =?;
while e>?
r ( l )=mod ( ? , ? ) ;
e=(e −?) / ? ;
l=l +?;
end
end
tobin (123)
pour créer une fonction tobin qui donne l’écriture en base 2 d’un nombre e donné en base 10. Par
exemple, l’exécution de la commande tobin(123) donne
octave:16> tobin(123)
ans =
1
1
0
1
1
1
1
car
123 = 1 · 20 + 1 · 21 + 0 · 22 + 1 · 23 + 1 · 24 + 1 · 25 + 1 · 26
S nb-tp3.6 .
Algorithme rapide.
Compléter le script Octave suivant
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[1 - B. Ischi 14-15 ]
c l e a r −a
function r=t o b i n ( e )
l =;
while e>?
r ( l )=mod ( ? , ? ) ;
e=(e −?) / ? ;
l=l +?;
end
end
function s=pmsmart ( k , e , n )
r=t o b i n ( e ) ;
l=length ( ? ) ;
s =?;
kn=mod ( ? , ? ) ;
f o r k =1:?
i f r ( ? )==?
s=mod ( ? , ? ) ;
end
kn=mod ( ? , ? ) ;
end
end
pmsmart ( 1 2 , 1 2 3 4 5 6 7 8 9 , 3 )
pour créer une fonction
pmsmart(k,e,n)
qui calcule k e mod e avec l’algorithme rapide.
Travaux pratiques de mathématiques - Méthode RSA
(page 3/6)
S nb-tp3.7 .
PGCD. [1 - B. Ischi 08-09 ]
Compléter le script suivant de manière à obtenir une fonction qui calcule le pgcd de deux nombres
à l’aide de l’algorithme d’Euclide.
1
2
3
4
5
6
7
8
9
10
11
12
13
clear
function x=pgcd ( a , b )
c=min ( ? , ? ) ;
while ( c >?)
s=abs (? −?) ;
a =?;
b=?;
c=min ( ? , ? ) ;
end
x =?;
end
#
pgcd ( 2 0 , 8 )
S nb-tp3.8 .
Algorithme d’Euclide étendu. [1 - B. Ischi 08-09 ]
Compléter le script suivant de manière à obtenir une fonction qui calcule le pgcd de deux nombres
a et b à l’aide de l’algorithme d’Euclide étendu et qui donne deux entiers s et t tels que
pgcd(a, b) = a · s + b · t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
clear
function x=pgcd2 ( a , b )
s 1 =?;
t 1 =?;
s 2 =?;
t 2 =?;
a1=max( ? , ? ) ;
b1=min ( ? , ? ) ;
r 1=mod ( ? , ? ) ;
while ( r1 >0)
q1=f l o o r ( ? / ? ) ;
s =? −?∗?;
t =? −?∗?;
t 1 =?;
s 1 =?;
t 2 =?;
s 2 =?;
a1 =?;
b1 =?;
r 1=mod ( ? , ? ) ;
end
x ( 3 )=b1 ;
x ( 1 )=s 2 ;
x ( 2 )=t 2 ;
end
#
pgcd2 ( 2 3 2 2 , 6 5 4 )
S nb-tp3.9 .
Trouver
(1)
(2)
(3)
Système RSA. [1 - B. Ischi 08-09 ]
une clé RSA, c’est-à-dire quatre nombres p, q, e et d tels que
p et q sont premiers (avec p, q < 100 et n := p · q > 256)
e relativement premier à ϕ(n) := (p − 1) · (q − 1)
d positif tel que d · e ≡ 1(mod ϕ(n))
Travaux pratiques de mathématiques - Méthode RSA
(page 4/6)
Les nombres n et e doivent être communiqués à la classe. En revanche, les nombres p, q et d ne
doivent pas être divulgués; ils constituent la clé privée de la méthode RSA.
Indications: Pour le point (2) compléter et exécuter le script suivant
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
clear
function x=pgcd ( a , b )
c=min ( ? , ? ) ;
while ( c >?)
s=abs (? −?) ;
a =?;
b=?;
c=min ( ? , ? ) ;
end
x =?;
end
#
phin =?;
max=10;
n0 =40;
n1=n0+max;
p=1;
f o r k=n0 : n1
i f ( pgcd ( phin , k ) ==?)
e ( p ) =?;
p=p+1;
end
end
e
Pour le point (3), il faut remarquer que
d · e ≡ 1 (mod ϕ(n)) ⇔ d · e − k · ϕ(n) = 1
Comme pgcd(e, ϕ(n)) = 1, l’algorithme étendu d’Euclide permet de trouver d. Si le d trouvé est
négatif, il faut prendre d0 > 0 tel que d0 ≡ d (mod ϕ(n)).
S nb-tp3.10 .
Système RSA. [1 - B. Ischi 08-09 ]
(1) Compléter et exécuter le script suivant pour envoyer un message crypté à un camarade
(le texte est coupé en blocs contenant une seule lettre chacun).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
n=?;
e =?;
#
function x=pm( k , e , n )
s =?;
km=mod ( ? , ? ) ;
f o r l =1:?
s=mod ( ? ∗ ? , ? ) ;
end
x=s ;
end
#
m=” Bonjour , comment a l l e z −vous ? ” ;
M=t o a s c i i ( ? ) ;
l=length ( ? ) ;
f o r k =1:?
MESSAGE( k )=pm( ? , ? , ? ) ;
end
MESSAGE
Indication: Il faut utiliser les éléments de la clé publique du destinataire du message.
Travaux pratiques de mathématiques - Méthode RSA
(page 5/6)
(2) Compléter et exécuter le script suivant pour décrypter un message envoyé par un camarade.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
n=?;
d=?;
#
function x=pm( k , e , n )
s =?;
km=mod ( ? , ? ) ;
f o r l =1:?
s=mod ( ? ∗ ? , ? ) ;
end
x=s ;
end
#
l=length (MESSAGE) ;
f o r k =1:?
message ( k )=pm(MESSAGE( k ) , ? , ? ) ;
end
c h a r ( message )
S nb-tp3.11 .
Système RSA. [1 - B. Ischi 08-09 ]
Envoyer un message crypté avec la méthode RSA à un camarade en authentifiant le message par
une signature électronique.
S nb-tp3.12 .
Système RSA. [1 - B. Ischi 08-09 ]
(1) Compléter et exécuter le script suivant pour envoyer un message crypté à un camarade
en coupant le texte en blocs de deux lettres.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
b=2;
n=?;
e =?;
#
function x=pm( k , e , n )
s =?;
km=mod ( ? , ? ) ;
f o r l =1:?
s=mod ( ? ∗ ? , ? ) ;
end
x=s ;
end
#
m=” Bonjour , comment a l l e z −vous ? ” ;
l=length (m) ;
i f (mod( l , 2 ) >0)
m=[m, ” ” ] ;
end
#
MESSAGE= [ ] ;
M=t o a s c i i ( ? ) ;
l=length ( ? ) / 2 ;
f o r k =1:?
b=M( ? )+M( ? ) ∗ 2 5 6 ;
MESSAGE( k )=pm( ? , ? , ? ) ;
end
MESSAGE
Indication: Il faut utiliser les éléments de la clé publique du destinataire du message.
(2) Compléter et exécuter le script suivant pour décrypter un message envoyé par un camarade
(le texte est coupé en blocs de deux lettres).
Travaux pratiques de mathématiques - Méthode RSA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(page 6/6)
n=?;
d=?;
#
function x=pm( k , e , n )
s =?;
km=mod ( ? , ? ) ;
f o r l =1:?
s=mod ( ? ∗ ? , ? ) ;
end
x=s ;
end
#
l=length (MESSAGE) ;
message = [ ] ;
f o r k =1: l
b=pm(MESSAGE( k ) , ? , ? ) ;
c=mod ( ? , ? ) ;
message ( ? )=c ;
message ( ? ) =?;
end
c h a r ( message )
S nb-tp3.13 .
Message crypté. [1 - B. Ischi 08-09 ]
On a crypté un message avec la clé RSA n = 84779, e = 47. On a
1
MESSAGE=[23406 57791 72568
44154 45969
41418];
53645
14188
66425
34196
30835
2570
72219
23270
23214
Le message a été crypté en formant des blocs de deux lettres selon la correspondance:
“Bo” → toascii (”B”)+toascii(”o”)∗256
On remarque que n = 17 · 4987, donc ϕ(n) = 79776 et d = 18671. Compléter et exécuter le
script suivant pour trouver ce message:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
n=?;
d=?;
#
function x=pm( k , e , n )
s =?;
km=mod ( ? , ? ) ;
f o r l =1:?
s=mod ( ? ∗ ? , ? ) ;
end
x=s ;
end
#
l=length (MESSAGE) ;
message = [ ] ;
f o r k =1: l
b=pm(MESSAGE( k ) , ? , ? ) ;
c=mod ( ? , ? ) ;
message ( ? )=c ;
message ( ? ) =?;
end
c h a r ( message )
Téléchargement