1 Le cryptage avec la méthode RSA

publicité
1
Le cryptage avec la méthode RSA
Il faut d’abord une correspondance entre lettres d’un message à coder et nombres.
Pour passer d’un message à une suite de nombres, on groupe plusieurs caractères
(car sinon on pourrait décrypter le message en utilisant des statistiques de fréquence
des caractères en fonction de la langue), le groupement est l’écriture d’un nombre en
une base donnée (256 ici correspondant au codage ASCII d’un caractère), par exemple, puisque asc("BONJOUR")=[66,79,78,74,79,85,82], si on groupe par 3, BONJOUR
devient les nombres (66*256+79)*256+78=4345678, (74*256+79)*256+85=4869973,
(82*256+0)*256+0 =5373952.
0
1 !
11 +
21 5
31 ?
41 I
51 S
61 ]
71 g
81 q
91 {
2 "
12 ,
22 6
32 @
42 J
52 T
62 ˆ
72 h
82 r
92 |
3#
13 23 7
33 A
43 K
53 U
63 _
73 i
83 s
93 }
4$
14 .
24 8
34 B
44 L
54 V
64 ‘
74 j
84 t
94 ˜
5%
15 /
25 9
35 C
45 M
55 W
65 a
75 k
85 u
95 ê
6&
16 0
26 :
36 D
46 N
56 X
66 b
76 l
86 v
96 ù
7 ’
17 1
27 ;
37 E
47 O
57 Y
67 c
77 m
87 w
97 ç
8(
18 2
28 <
38 F
48 P
58 Z
68 d
78 n
88 x
98 à
9)
19 3
29 =
39 G
49 Q
59 [
69 e
79 o
89 y
99 è
10 *
20 4
30 >
40 H
50 R
60 n
70 f
80 p
90 z
100 é
=
Tartampion choisit deux grand nombres premiers p et q et pose n
pq, puis il
choisit m un nombre premier avec p
q
(par exemple il prend pour m un
nombre premier plus grand que p
= et que q
= ).
Il calcule l’entier u pour que um
p
q
(d’après l’identité de Bézout
il existe des entiers u et v tel que um
vp
q
). Puis il met dans
l’annuaire les nombres u et n (quand n est grand p et q sont difficiles à obtenir à partir
de n), le couple u; n est la clé publique alors que m; n est la clé secréte qui va
servir à décoder le message : bien sûr p et q restent secrets car sinon n’importe qui peut
calculer m en fonction de u avec l’identité de Bézout.
La fonction de codage f est la suivante :
à un entier a (de préférence premier avec pq , c’est le cas si a < p et a < q ), f fait
correspondre au
n.
Par exemple, BONJOUR codé par les nombres 4345678, 4869973, 5373952. qui
seront transformés par f en 156330358492191937, 126697584810299952, 50295601528998788
car powmod(4345678,u,n)=15633035849219193 etc...
( )
( 1)( 1)
( 1) 2
( 1) 2
= 1 mod ( 1)( 1)
= 1 + ( 1)( 1)
( )
mod
La fonction de décodage g est la suivante :
à un entier b, g on fait correspondre bm
n. Pour décoder l’exemple, on a :
powmod(15633035849219193,m,n)=4345678 etc...
Pour montrer que g f a
a, on utilise le petit théorème de Fermat :
si p et q sont premiers, si n pq et si a est premier avec n alors :
mod
a(p
q
1)(
1)
( ( )) =
=
= 1 mod n
On peut appliquer ce théorème ici car :
p et q sont premiers, n = pq et a est premier
1
avec n puisque a < p et a < q donc av(p
1)(q 1)
= 1v = 1 mod n on a donc bien :
u
um
v
(p 1)(q 1)
g(f (a)) = g(a ) mod n = a mod n = a a
mod n = a
Un exemple :
p = 123456791 et q = 1234567891
: n = p q = 152415790094497781
' = (p 1)(q 1) = 152415788736473100
m = 12345701 (m est un nombre premier et m ne divise pas ')
On cherche u en tapant inv(m%') on trouve :
(-36645934363466299) % 152415788736473100 et on a :
u=
36645934363466299 + ' = 115769854373006801
Pour coder, on utilise la clé publique u et n et pour décoder, on utilise la clé secréte m
et n.
Exemple avec xcas
examples/arit/rsa.cxx ->chaine2n("BON")=4345678 etc.
u:=115769854373006801; n:=152415790094497781; l:=codrsa("BONJOUR",u,n);
m:=12345701; n:=152415790094497781; decodrsa(l,m,n);
2
Téléchargement