Sei sulla pagina 1di 8

Generaci on de n umeros primos fuertes

para criptografa
Juan Alfredo Salas Santillana
Universidad Catolica San Pablo
juan.salas.santillana@ucsp.edu.pe
20 de Junio de 2014
Resumen
This paper review the interest of using strong primes in crypto-
graphy.
To generate eciently prime numbers, I need of an ecient random
generator and a primality test.
In the second part, I compare some algorithms to generate strong pri-
mes.
1. Introducci on
Los sistemas de criptograa como RSA necesitan de la generacion de
n umeros primos grandes, por lo cual se necesitan metodos efectivos y e-
cientes para la generacion de estos.
Dichos n umeros son la base de estos sistemas, deben cumplir ciertas
caracteristicas para que el sistema sea mas seguro. Los n umeros deben ser
generados de la manera m as aleatoria posible, ser de gran cantidad de bits
y ser primos fuertes.
2. Que es un n umero primo fuerte
En esta seccion deniremos que es un primo fuerte, por lo cual antes
necesitamos denir |Q| como el tama no en bits de Q.
Un n umero primo fuerte es aquel que cumple las siguientes caractersticas
[7]:
1
|P| debe ser grande (Actualmente se propone 2048 bits o mas).
El mayor factor de P 1, llamado P

debe cumplir que |P

| sea grande.
El mayor factor de P

1, llamado P

debe cumplir que |P

| sea
grande.
El mayor factor de P + 1, llamado P
+
debe cumplir que |P
+
| sea
grande.
Estas deniciones pueden variar en la diversa literatura, segun el autor.
3. Generar primos rapidamente
Debido a que los algoritmos de generacion de n umeros primos fuertes
hacen uso a su vez de otros generadores de primos, es necesario implementar
un algoritmo para esta tarea.
3.1. Encontrar primos
Debido a que para saber si un n umero es primo de manera determinista
es necesario probar la divisibilidad del numero N con todos los primos me-
nores o iguales a

N y esta tarea se vuelve inviable para n umeros de gran


tama no de bits, por ello es necesario utilizar algoritmos probabilisticos.
Para esta tarea se eligio el algoritmo de Miller-Rabin [8] el cual es muy
usado.
3.1.1. Algoritmo
Este algoritmo es una implementacion propia y hace uso del generador
de aleatorios URAND del sistema operativo GNU/Linux [5].
1. Parsear a un entero el valor aleatorio obtenido de /dev/urand y alma-
cenarlo en A.
2. Calcular
(A mod (END START)) + START
donde END y START es el mayor y menor numero que se almacena
en la cantidad de bits indicada.
3. Sumar en una unidad A.
2
4. Enviar A al test de primalidad de Miller-Rabin.
5. Si A es compuesto regresar al paso 3.
6. Retornar A.
3.2. Espiral de Ulam
3.2.1. Denicion
La espiral de Ulam, descrita por el matematico polaco-estadounidense
Stanis law Marcin Ulam (1909-1984), es una forma de representacion graca
de n umeros primos que muestra un patron.
Todos los n umeros primos, excepto el 2, son impares. Como en la espiral
de Ulam algunas diagonales contienen n umeros impares y otras contienen
n umeros pares, no sorprende ver como los n umeros primos caen todos (salvo
el 2) en diagonales alternas. Sin embargo, entre las diagonales que contienen
n umeros impares, unas contienen una proporcion visiblemente mayor que
otras de n umeros primos.
Las pruebas que se han hecho hasta ahora conrman que: incluso si se
extiende mucho la espiral, se siguen mostrando esas diagonales; El patron
se muestra igualmente aunque el n umero central no sea 1 (en efecto, puede
ser mucho mayor que 1). Esto signica que hay muchas constantes enteras
b y c tales que la funcion:
f(n) = 4n
2
+ bn + c
4. Generando primos fuertes
4.1. El metodo original del rsa
El algoritmo planteado en el articulo original de RSA [6], tiene la carac-
teristica de encontrar un numero P

primo el cual sera el menor factor de


(P

1) que sera el menor factor de (P 1).


4.1.1. Algoritmo
1. Encontrar un primo P

con un tama no de bits elegido.


3
2. Calcular P

= A

+ 1
Para alg un entero A

, el cual debe ser encontrado probando los valores


{2, 4, 6, 8, ...}.
3. Calcular P = A

+ 1
A

se obtiene de manera similar a A

.
4.2. Algoritmo de Williams/Schmid
En 1979, Williams y Schmid propusieron el siguiente algoritmo, es efec-
tivo y altamente recomendado para generar primos fuertes.
4.2.1. Algoritmo
1. Encontrar dos primos P

y P
+
del tama no de bits elegido.
2. Calcular R = (P

)
1
mod P
+
Por tanto 0 < r < p
+
, La inversa de P

en modulo P
+
puede ser
calculada mediante el algoritmo extendido de Euclides.
3. Encontrar el menor A tal que
P

= 2AP

P
+
+ 2RP

+ 1, y
P = 4AP

P
+
+ 4RP

+ 3
O encontrado P

P = 2P

+ 1
Hasta que sean primos.
4.3. Algoritmo de Gordon
En 1984, John Gordon [4] y [3] propuso un nuevo algoritmo para generar
primos fuertes, este es un poco mas eciente que el de Williams/Schmid,
debido a que no necesita calcular un P

fuerte.
4.3.1. Algoritmo
1. Encontrar dos primos P

y P
+
del tama no de bits elegido.
2. Calcular el menor primo de la forma P

= A

+1 para algun entero


A

4
3. Dejar
P
0
= ((P
+
)
P

1
(P

)
P
+
1
)(P

P
+
)
Notar que esto por el teorema de Fermat implicaria que P
0
1
(mod P

) y P
0
1 (mod p
+
)
4. Calcular el menor primo P de la siguiente manera
P = P
0
+ AP

P
+
para algun entero A.
5. Factorizacion
Para poder validar la seguridad que nos ofrecen los generadores de primos
fuertes con respecto al original, basta con regresar al concepto de numero
primo. Un n umero primo es un entero mayor que 1 que tiene unicamente
dos divisores distintos: el mismo y el 1 [2]. Por tanto como los algoritmos
anteriores usan como semilla un primo P

este sera uno de los factores gran-


des de P 1.
De igual manera podemos comprobar esto mediante la factorizacion de
los n umeros generados.
5.1. Algoritmo de Polar P-1
El algoritmo fue desarollado por J. M. Pollard en los 70, el metodo
basicamente usa alguna informacion acerca del orden de un elemento en el
grupo Z
p
para encontrar un factor p de N [1].
El Algoritmo hace uso del Teorema de Fermat el cual indica, Dado un
primo p y un a Z tal que p a entonces a
p1
1 mod p.
5.1.1. Algoritmo
1. Seleccionar un limite superior para B (Usualmente 10
5
y 10
6
)
2. Calcular m = lcm(b), Puede ser calculado mediante la multiplicatoria
de los primos generados mediante la Criba de Eratostenes [1].
3. Seleccionar un entero aleatorio positivo entre 1 y n
4. Calcular d = gcd(a, n).
Si d = 1, retornar d. (Este es un factor no trivial de n)
5
5. Calcular a
m
mod n
6. Calcular e = gcd(a
m
1, n)
Si e = 1, ir a 1 e incrementar B.
Si e = n, ir a 3 y cambiar a.
Si e = 1 y e = n, retornar d. (Este es un factor no trivial de n)
6. Comparativas
En esta seccion se evaluara el desempe no de los algoritmos propuestos
anteriormente.
6.1. Hardware utilizado
Las comparativas fueron realizadas en un computador con las siguientes
caractersticas:
CPU: AMD A8-5545M APU with Radeon(tm) HD Graphics
N umero de nucleos: 4
Velocidad del reloj: 1.7 GHz (Sin Overclocking)
Cache L2: 4 MB
Memoria Ram: 6GB
6.2. Metodologa usada
Es importante mencionar que el proceso se realizo en un solo nucleo y
no de manera paralela.
Los calculos se realizaron generando n umeros de diferentes tama nos de
bits: 64, 128, 256, 512, 1024, 2048.
Para tener una mayor precision en el calculo, se genero 100 n umeros por
cada generador y tama no de bits, luego de esto se calculo la media aritme-
tica del tiempo total.
Para obtener una medida mas exacta el metodo de evaluacion se utili-
zara la funcion gettimeofday() que en Linux brinda la precision de 10s.
6
6.3. Comparativas en el tiempo de generaci on
N. Bits No fuerte A. en RSA Williams Gordons
64b 0.0359229 0.161156 0.175932 0.118902
128b 0.112868 0.238891 0.339435 0.282909
256b 0.225215 0.535283 0.553583 0.515051
512b 0.261919 0.881877 0.937849 0.907238
1024b 1.03088 2.69978 2.39081 4.00394
2048b 2.13455 12.6628 20.5621 17.402
5
6
7
8
9
10
11
Time
B
i
t
s
2
x
No fuerte
RSA Method
Williams/Schmid
Gordons
7. Conclusiones
Debido a que de la fortaleza de los primos escogidos depende una ma-
yor seguridad del sistema criptograco usado, es altamente recomendable
la utilizacion de alguno de los metodos de generacion de primos indicados
anteriormente.
Como se observa en las comparativas la generacion de primos no fuertes
es mucho mas rapida, pero no cuentan con las fortalezas indicadas. Tambien
se observa que el Algoritmo de Williams/Schmid es mas eciente que el
de Gordon y que cuenta con una fortaleza mayor que los otros algoritmos
expuestos.
7
Referencias
[1] Charest, A.-S. Pollards p-1 and lenstras factoring algorithms.
[2] Fitzpatrick, R. Euclids Elements. 2009.
[3] Gordon, J. Strong primes are easy to nd. In Advances in Crypto-
logy: Proceedings of EUROCRYPT 84, A Workshop on the Theory and
Application of of Cryptographic Techniques, Paris, France, April 9-11,
1984, Proceedings (1984), vol. 209 of Lecture Notes in Computer Science,
Springer, pp. 216223.
[4] Gordon, J. Strong rsa keys. Electronics Letters 20, 12 (June 1984),
514516.
[5] Gutterman, Z., Pinkas, B., and Reinman, T. Analysis of the linux
random number generator. In Proceedings of the 2006 IEEE Symposium
on Security and Privacy (Washington, DC, USA, 2006), SP 06, IEEE
Computer Society, pp. 371385.
[6] Rivest, R. L., Shamir, A., and Adleman, L. A method for obtaining
digital signatures and public-key cryptosystems. Commun. ACM 21, 2
(Feb. 1978), 120126.
[7] Rivest, R. L., and Silverman, R. D. Are strong primes needed
for rsa? In In The 1997 RSA Laboratories Seminar Series, Seminars
Proceedings (1999), p. accepted.
[8] Schoof, R. Four primality testing algorithms, 2008.
8

Potrebbero piacerti anche