Beruflich Dokumente
Kultur Dokumente
Scolnik
Abril 2004.
Fundamentos matemticos
del mtodo RSA
Dr.Hugo D.Scolnik
Profesor Titular Regular
Departamento de Computacin
Facultad de Ciencias Exactas y Naturales
Universidad de Buenos Aires
Zn = {[a]n : 0 a n-1}
En general se usa la definicin: Zn ={0,1,...,n-1}
(3)
(4)
que debe leerse como equivalente a (3) entendiendo que 0 representa [0]n, 1
representa [1]n, etc.
Naturalmente hay que tener en cuenta a las clases de equivalencia subyacentes.
Por ejemplo, una referencia a 1 en Zn debe entenderse como una referencia a
[n-1]n dado que 1 n 1 mod n.
Divisores comunes y mxmo comn divisor (MCD)
Si d es un divisor de a y tambin un divisor de b, entonces diremos que d es un
divisor comn de a y b. Por ejemplo, los divisores de 30 son: 1,2,3,5,6,10,15,y 30,
as que los divisores comunes de 24 y 30 son 1,2,3, y 6. Una propiedad importante
de los divisores comunes es que:
(8)
(9)
(10)
(11)
(12)
(13)
(14)
donde algunos exponentes pueden ser nulos para que podamos usar el mismo
conjunto de primos para a y b.
Entonces,
MCD(a,b) = p1min(e1,f1) ... pkmin(ek,fk) (15)
Como veremos luego, los mejores algoritmos para factorizar NO son polinomiales,
o sea que el enfoque anterior para calcular MCD (a,b) no puede conducir a un
mtodo eficiente.
El algoritmo de Euclides se basa en el siguiente
(16)
(17)
Usando (7) para combinar las ecuaciones (16) y (17) resulta el teorema.
El algoritmo de Euclides
El siguiente algoritmo se describe en el libro Elementos (aproximadamente 300 aos
AC) aunque quizs sea anterior.
Sean a y b dos enteros arbitrarios no negativos
Procedimiento Euclides (a,b)
1. Si b = 0
2.
Entonces devolver a
3.
de lo contrario devolver Euclides (b, a mod b)
Ejemplo: sea calcular MCD (30,21)
Euclides (30,21) = Euclides (21,9) = Euclides (9,3) = Euclides (3,0) = 3
(18)
Notar que x,y pueden ser nulos o negativos. La utilidad de dicho algoritmo ser
para calcular inversas multiplicativas modulares.
El procedimiento extendido tiene como entrada a un par arbitrario de enteros y
devuelve una terna (d,x,y) que satisface (18).
Si b = 0
Retornar con (a,1,0)
de lo contrario, (d,x,y) Euclides extendido (b,a mod b)
(d,x,y) (d,y,x [a/b] y)
retornar (d,x,y)
b
78
21
[a/b]
1
3
d
3
3
x
-11
3
y
14
-11
(19)
10
11
(n) = n (1 1/p)
p<n
(20)
12
13
Ejemplos: en Z6
(i)
(i)
=a
(22)
14
15
16
(25)
donde a Zn , ai Z ni
y ai = a (mod n)i para i =1 , ... , k.
La correspondencia (25) es una biyeccin entre Zn y el producto cartesiano
Z n1 x Z n 2 x ... x Z n k . Las operaciones realizadas en Zn pueden ser realizadas
(26)
17
para i = 1 , ... , k
(29)
tenemos que
a (a1c1 + ... + akck) (mod n)
(30)
18
0
1
1
3
2 3 4 5 6
2 6 4 5 1
7
3
8
2
9
6
10
4
11
5
En esta seccin usaremos la notacin (a) para el subgrupo de Z*n generado por a
y sea ordn(a) el orden de a en Z*n .Ahora usamos la definicin de la funcin de
Euler (n) para la cardinalidad de Z*n y traducimos el Corolario 19( si (S , ) es un
grupo finito con identidad e, entonces a S , a (S) = e) en la notacin de Z*n
para obtener el Teorema de Euler y si adems lo especializamos al caso Z*p
resulta el Teorema de Fermat:
Teorema 30 (de Euler):
para cualquier entero n > 1, a (n) 1 (mod n) a Z*n
Teorema 31 (llamado el pequeo teorema de Fermat):
Si p es primo, a p-1 1 (mod p) a Z*p
Demostracin: por la ecuacin (21), (p) = p 1 si p es primo.
Esto se aplica a todo elemento en Zp excepto el 0 puesto que
0 Z*p . Para todo a Zp tenemos que a p a (mod p)
Si ordn(g) = Z*n resulta que todo elemento de Z*n es una potencia de g, y en ese
caso decimos que g es un generador o raz primitiva de Z*n
19
(34)
20
(g
log n, g ( x) 2
) g
log n, g (1)
(mod n)
(35)
Dado que logn,g (1) =0 , el Teorema 33 implica que la ecuacin (35) es equivalente
a
(36)
n,g
21
a 2c (mod n) = (a c )2 (mod n)
(caso bi = 0)
(caso bi = 1)
9
1
1
7
8
0
2
49
7
0
4
157
6
0
8
526
5
1
17
160
4
1
35
241
3
0
70
298
2
0
140
166
1
0
280
67
0
0
560
1
22
(37)
y para desencriptarlo,
(38)
23
Tambin
chino, M ed M (mod n) M
( n)
=1
n n / ln n
lim
24
a n 1 1 (mod n)
(40)
25
Pseudoprimo(n)
1. Si Exponenciacin modular (2,n 1,n) no es congruente con 1 (mod n)
2. entonces devolver COMPUESTO (con seguridad)
3. de lo contrario devolver PRIMO
( posiblemente)
Este procedimiento puede tener errores, pero solo de un tipo. Esto es, si dice que
n es compuesto, esto es definitivo. Si decimos que n es primo, podemos
equivocarnos pues podra ser un pseudoprimo de base 2. La cuestin es: esto
sucede con frecuencia ? Respuesta: es muy poco frecuente que suceda. Por
ejemplo, si n = 10000 solo hay 22 valores menores que n para los que esto
sucede (los primeros cuatro de ellos son 341, 561, 645 y 1105). Puede
demostrarse que la probabilidad de que el error ocurra con n un nmero de k bits
tiende a cero cuando k . Estimaciones ms precisas (C.Pomerance, On the
distribution of pseudoprimes, Mathematics of Computation, 37(156), pp. 587-593,
1981) muestran que un entero de 50 dgitos elegido al azar que es dado por primo
por el procedimiento anterior, tiene una probabilidad menor que una en un milln
de ser un pseudoprimo de base 2, y si fuera de 100 dgitos la probabilidad se
reduce a 10 13.
Lamentablemente no podemos eliminar los posibles errores testeando con otra
base, por ejemplo a =3 porque existen nmeros n compuestos tales que la
ecuacin (40) se cumple para todo a Z n* .Estos enteros n con dicha propiedad
son extremadamente raros, y se denominan nmeros de Carmichael (los primeros
tres son 561, 1105 y 1729). De hecho son tan poco frecuentes que solo hay 255
de ellos menores que 100.000.000
Veremos ahora como mejorar el test de primalidad de modo tal que no pueda ser
engaado por los nmeros de Carmichael.
El test de primalidad de Rabin-Miller:
Este test evita los problemas del procedimiento Pseudoprimo (n) mediante dos
modificaciones:
1. Prueba diversos valores de a elegidos al azar en vez de un solo
valor.
26
a n 1 1 (mod n)
Testigo (a,n)
1. Sea (b k, b k-1, ... , b 1, b 0) la representacin binaria de n 1
2. d 1
3. Para i k hasta 0
4.
do x d
5.
d (d.d) mod n
6.
si d = 1 y x 1 y x n 1
7.
entonces devolver VERDADERO
8.
Si b i = 1
9.
entonces d (d.a) mod n
10. Si d 1
11. entonces devolver VERDADERO
12. devolver FALSO
Este pseudocdigo para Testigo se basa en el procedimiento Exponenciacin
modular. La lnea 1 determina la representacin binaria de n 1 que se usar para
calcular a n-1. Las lneas 3-9 calculan
d como a n-1 mod n, tal como en Exponenciacin modular. Pero cada vez que se
calcula un cuadrado en la lnea 5 las lneas 6-7 controlan si se ha encontrado una
raz cuadrada no trivial de 1. Si es as, devuelve el valor VERDADERO. Las
lneas 10-11 devuelven VERDADERO si el valor computado para a n-1 mod n es
27
Para j 1 hasta s
do a Azar (1,n 1)
Si Testigo (a,n)
Entonces devolver COMPUESTO (con seguridad)
devolver PRIMO
(casi seguro)
9
1
1
7
28
8
0
2
49
7
0
4
157
6
0
8
526
5
1
17
160
4
1
35
241
3
0
70
298
2
0
140
166
1
0
280
67
0
0
560
1
(41)
29
(42)
En este caso n no puede ser una potencia de un primo, pues supongamos que
n = pe con p primo impar y e > 1. El Teorema 32 implica que Z n* contiene un
elemento g tal que ordn(g) = Z n* =(n)= (p-1)pe-1. Pero entonces, la ecuacin
(42) y el Teorema 33 del logaritmo discreto (tomando y =0) implican que
n-1 0 (mod (n)) o sea que (p-1)pe-1/ pe 1. Esta condicin falla para e > 1
puesto que el lado izquierdo es divisible por p pero el derecho no. Por lo tanto n no
puede ser la potencia de un primo. Y como no lo es, lo podemos escribir como un
producto n1n2 donde cada factor es mayor que 1 y son primos relativos entre s.
(puede haber muchas maneras de hacer esto, pero no importa para la
demostracin). Definamos t, u de modo tal que n 1= 2t u donde t 1 y u es
impar. Para cualquier a Z n* consideremos la sucesin
t
a = {au , a 2u ,..., a 2 u }
(43)
Que algn j existe surge del hecho que u es impar, con lo cual podemos tomar
v = -1 , j =0. Dejamos v fijo para satisfacer dicha condicin, y sea
j
B = {x Z n* : x 2 u 1 (mod n)}
30
w v (mod n1 )
w 1 (mod n2 )
y por lo tanto
j
w2 u 1 (mod n1 )
j
w2 u 1 (mod n2 )
(44)
y por lo tanto
Teorema 39: para cualquier entero impar n > 2 y cualquier entero positivo s, la
probabilidad de que el procedimiento Rabin-Miller (n,s) erre es a lo sumo 2 s
Demostracin: usando el Teorema 38, vemos que si n es compuesto, entonces
cada ejecucin del loop de las lneas 1-4 tiene una probabilidad de al menos de
descubrir un testigo x de que n es compuesto. El procedimiento solo comete un
error si no encuentra un testigo de que n es compuesto en ninguna de las s
iteraciones del loop principal. La probabilidad de que esa sucesin de no
encontrar un testigo es a lo sumo 2 s
Nota: esta cota del error se puede mejorar. Por ejemplo, en los trabajos:
I.B.Damgard and P.Landrock, Improved Bounds for the Rabin Primality Test,
Cryptography and Coding III,M.J.Ganley (ed), Oxford Clarendon Press, 1993,
pp.117 128.
I.B.Damgard, P.Landrock and C.Pomerance, Average Case Error Estimates for
the Strong Probable Prime Test, Mathematics of Computation, vol.61, 203,
Jul.1993, pp. 177-194.
31
veces.
Una observacin interesante es la siguiente, ilustrada con un ejemplo:
supongamos que queremos factorizar 8051. Dado que puede escribirse como
8100 49 = 902 72 =(90 +7)*(90 7) = 83*97, encontramos fcilmente sus
factores. Ahora, esto es general ? S, puesto que
1
1
a * b = ( (a + b))2 ( (a b))2
2
2
De hecho, esta idea se debe a Fermat, y si a y b estn prximos a n como
suceda en el caso 8051, es bastante simple encontrar los cuadrados. Pero en los
casos difciles este algoritmo es peor que simplemente dividir por los primos
menores que n .
En la dcada de 1920, Maurice Kraitchik propuso la idea que es la base de los
mtodos modernos (aunque se remonta a Gauss y Seethoff). En vez de buscar u,v
tales que n = u2 v2, la idea es que la diferencia de los cuadrados sea congruente
con n. Dicha congruencia puede tener soluciones no interesantes como u v
(mod n) o u -v (mod n), o interesantes donde lo anterior no vale. Si n es impar y
divisible al menos por dos primos distintos, entonces como mnimo la mitad de las
32
33
No.de bits de n
512
768
1024
2048
conocidos
se
encuentra
en
el
link
34