Вы находитесь на странице: 1из 7

RELEVANCIA DE UN GENERADOR DE

NUMEROS SIGNIFICATIVAMENTE ALEATORIOS


EN EL ENCRIPTAMIENTO DE DATOS
Daniel Rodríguez Torres, Jaime Andrés Castellanos L.
Universidad Distrital Francisco José de Caldas
Bogotá D.C., Colombia
dahuron@hotmail.com
jaancale85@hotmail.com

Abstract: The development of computer semilla, y, a partir de él, se van generando


sciences has been greatly built on the X1, X2, X3.
base of solid mathematical concepts. Como resultado en este artículo queremos
Random numbers are a good example. Mostrar la utilidad que tienen los números
They has been traditionally used in a aleatorios en el encriptamiento de datos, más
great variety of applications (games, específicamente en la aplicación del algoritmo
cryptography, scientific experiments, RSA.
etc.), and constitute the foundations for
studying and modeling of stochastic
system. II. Desarrollo de contenidos
The quality of random numbers is a
critical success factor for solving A) Definiciones:
problems in different areas. The solution Número aleatorio: Cualquiera de los
is guaranteed due to the mathematical números dentro de cierto rango en el que
theory and the advantages the todos tienen la misma oportunidad de
computers offer for implementing the ocurrir, pueden ser generados a partir de
different proposed methods for the fuentes de aleatoriedad. Son generados a
efficient generation of these numbers. partir de fuentes físicas o métodos
As a result in this paper we matemáticos, basados en relaciones
Show their usefulness random numbers recursivas.
in the encryption of data, more Azar: Casualidad, caso fortuito.
specifically in implementing the RSA Simulación: Formulada por R.E. Shannon
algorithm. es: "La simulación es el proceso de diseñar
un modelo de un sistema real y llevar a
término experiencias con él, con la finalidad
I. Introducción de comprender el comportamiento del
sistema o evaluar nuevas estrategias
Un Generador de números aleatorios es un -dentro de los límites impuestos por un
componente o funcionalidad que crea cierto criterio o un conjunto de ellos - para el
números o símbolos para un programa funcionamiento del sistema".
software en una forma que carezca de un Software: Es el conjunto de los programas
patrón evidente, y que así parezcan ser de cómputo, procedimientos, reglas,
números aleatorios. documentación y datos asociados que
La mayor parte de los generadores de forman parte de las operaciones de un
números aleatorios son, en realidad, sistema de computación. Extraído del
pseudoaleatorios: se calcula (o introduce estándar 729 del IEEE[6]
internamente) un valor X0, que llamaremos

1 Universidad Distrital Francisco José de Caldas 2010


Criptografía: (del griego κρύπτω krypto, – Los NA comenzaron en los 40 con el
«oculto», y γράφω graphos, «escribir», método llamado simulación de
literalmente «escritura oculta») es la Montecarlo.
técnica, bien sea aplicada al arte o la – 1949 inicio de la historia oficial del
ciencia, que altera las representaciones método.
lingüísticas de un mensaje. – 1951 Lehmer propuso el generador
CPU, abreviatura de Central Processing lineal de congruencia.
Unit (unidad de proceso central). Es el – Con modificaciones realizadas por
cerebro del ordenador. A veces es referido Thomson y Rotenberg, llegó a
simplemente como el procesador o convertirse en el método para la
procesador central, este es donde se GNA utilizado en la actualidad.
producen la mayoría de los cálculos. En – 1955 la Rand Corporatión publicó un
términos de potencia del ordenador, es el millón de dígitos producidos
elemento más importante de un sistema controlando una fuente de pulsos de
informático. frecuencia aleatoria.

B) Antecedentes en la historia: C) Características e importancia de un


– Aproximadamente en el 3.500 a.C., Generador de números aleatorios.
juegos de azar practicados con Un generador de números pseudoaleatorios
objetos de hueso, eran considerados (PRNG, Pseudo Random Number
como precursores de los dados, Generator) provee a las aplicaciones con
desarrollados en Egipto y otros una fuente de números que tienen ciertas
lugares. propiedades importantes para la seguridad
– En el s. XVII, un noble francés del sistema:
Antoine Gombauld puso en tela de – Debería ser imposible que un
juicio el fundamento matemático del extraño pudiera predecir la salida del
éxito y del fracaso en las mesas de generador de números aleatorios,
juego. incluso, si conoce la salida anterior.
– Blaise Pascal, formuló la pregunta – Los números generados no deberían
¿Cuáles son las probabilidades de tener patrones que se repitieran, lo
que salgan dos seis por lo menos que quiere decir que el PRNG
una vez en veinticuatro lanzamientos debería tener una longitud de ciclo
de un par de dados?, resolvió el muy larga.
problema. Un PRNG es, por lo general, un algoritmo
– Primera revista académica dedicada en el que los mismos valores iniciales
a la probabilidad. producirán las mismas secuencias de
– Bernoulli, Moivre, Bayes y Lagrange salida. En un sistema operativo multiusuario
inventaron fórmulas técnicas de existen muchos recursos que permiten
probabilidad. alimentar el PRNG con datos aleatorios. El
– Hoy es una herramienta importante núcleo de OpenBSD usa el interruptor de
para la ingeniería, ciencias y tiempo del ratón, las señales de interrupción
administración, se constituye en la de datos de la red, las señales producidas
base para el estudio de fenómenos o entre diferentes pulsaciones de teclado y la
procesos aleatotios. información de E/S del disco, para alimentar
– 1939 Kenadll y Babington-Smith la entropía. Los números aleatorios están
publicaron 100.000 dígitos aleatorios disponibles para las rutinas del núcleo y se
obtenidos con un disco giratorio exportan mediante dispositivos a programas
iluminado con una lámpara en los directorios de usuario.[1]
relámpago.

2 Universidad Distrital Francisco José de Caldas 2010


D) Aplicabilidad y uso en simulaciones La generación de números aleatorios tienen
una gran importancia a la hora de hacer
Los números aleatorios tienen una gran algún tipo de simulación, cuando se quiere
cantidad de aplicaciones en diferentes hacer una proyección del comportamiento
áreas, en las que podemos mencionar las que tiene algún tipo de sistema que
siguientes: depende de variables externas y naturales
Criptografía: Seguridad de la información. (que son normalmente impredecibles), se
Hardware y tecnologías de seguridad: hace relevante el uso de números o valores
firma digital y protocolos de seguridad. verdaderamente aleatorios.
Sistema de comunicación y redes: En Entre sus aplicaciones más conocidas,
universidades, empresas, pentagon II, y podemos mencionar:
GPS, que generan códigos pseudo- – Simulación en un sistema
aleatorios que se generan en los meteorológico.
dispositivos satelitales y vendrían – Proyección del comportamiento en
deacuerdo con la fase de comunicación. un mercado de valores
Software para el modelamiento de – Uso como variables de entrada en
sistemas: Lenguajes, simuladores y algoritmos de encriptamiento.
sistemas híbridos, que ayudan a l usuario a
la creación de modelo de los sistemas E) Estructura actual
Aunque existe un gran número de métodos
posibles para la generación de números Existen varios métodos para la generación
aleatorios en una computadora, hay de números aleatorios como:
también unas ciertas consideraciones - Generador congruencial lineal de Lehmer.
importantes para la elección de un método u - Métodos mixto de congruencias.
otro. - Método multiplicativo de congruencias.
– La rutina debe ser rápida. - Generador Shift-register.
– La rutina debe ser transportable - Generador Lagged-Fibonnaci.
entre diferentes ordenadores e, - Generador de congruencia inversa.
idealmente, a diferentes lenguajes - Generador de congruencia lineal
de programación. combinada.
– La rutina debe tener un ciclo - Método de los cuadrados medios.
suficientemente largo. Un ciclo - Métodos de Tausworthe.
representa la longitud de una Todo proceso de generación consta de tres
secuencia antes que comiencen a fases:
repetirse los números en el orden [Semilla - Algoritmo - Validación]
anterior. La ocurrencia de P1 : Obtener semilla (valores iniciales)
repeticiones en los números P2 : Aplicación de algún algoritmo de
obtenidos puede propiciar la no generación recursivo
aceptación del generador. P3 : Validación del conjunto de números
– Las secuencias de números generados (Pruebas de Aleatoriedad)[3]
aleatorios deben ser replicables.
Partiendo del mismo número se F) Utilización en algoritmos de
debe poder obtener la misma encriptamiento.
secuencia
– Los números obtenidos deben Uno de los algoritmos más conocidos para
aproximarse a las propiedades el encriptamiento en un sistema de
estadísticas ideales de uniformidad e trasmisión de información es el algoritmo
independencia.[2]. RSA.

3 Universidad Distrital Francisco José de Caldas 2010


G.1) Algoritmo RSA protocolo reversible acordado de antemano.
El algoritmo consta de tres pasos: Luego calcula el texto cifrado c mediante la
generación de claves, cifrado y descifrado. operación
[4] .
Esto puede hacerse rápido mediante el
G.1.1) Generación de claves método de exponenciación binaria. Ahora
- Cada usuario elige dos números primos Bob transmite c a Alicia.
distintos p y q. Por motivos de seguridad,
estos números deben escogerse de forma E.1.3) Descifrado
aleatoria y deben tener una longitud en bits Alicia puede recuperar m a partir de c
parecida. Se pueden hallar primos usando su exponente d de la clave privada
fácilmente mediante test de primalidad. mediante el siguiente cálculo:
- Se calcula n = pq. n se usa como el
módulo para ambas claves, pública y .
privada. Ahora que tiene m en su poder, puede
recuperar el mensaje original M invirtiendo
- Se calcula ,
el padding scheme.
donde es la función φ de Euler.
El procedimiento anterior funciona porque
- Se escoge un entero positivo e menor que
, que sea coprimo con . .
e se da a conocer como el exponente de la Esto es así porque, como hemos elegido d y
clave pública. e de forma que , se
Si se escoge un e con una suma cumple
encadenada corta, el cifrado será más
efectivo. Un exponente e muy pequeño (p.
ej. E = 3) podría suponer un riesgo para la
seguridad.1 La última congruencia se sigue
- Se determina un d (mediante aritmética directamente del teorema de Euler cuando
modular) que satisfaga la congruencia m es coprimo con n. Puede demostrarse
que las ecuaciones se cumplen para todo m
.
usando congruencias y el teorema chino del
Expresado de otra manera, de – 1 divide a
resto.
. Esto muestra que se obtiene el mensaje
Esto suele calcularse mediante el algoritmo original:
de Euclides extendido.
.
d se guarda como el exponente de la clave
privada.
La clave pública es (n,e), esto es, el módulo
y el exponente de cifrado. La clave privada G.2) Otros Usos Conocidos
es (n,d), esto es, el módulo y el exponente
de descifrado, que debe mantenerse en Kolmogorov (1987) [Complejidad
Algorítmica]
secreto.
Una sucesión de números es aleatoria si no
puede producirse eficientemente de una
E.1.2) Cifrado manera más corta que la propia serie. [5]
Alicia comunica su clave pública (n,e) a Bob
y guarda la clave privada en secreto. Ahora L’Ecuyer (1990) [Impredicibilidad]
Bob desea enviar un mensaje M a Alicia. Una sucesión de números es aleatoria si
Primero, Bob convierte M en un número nadie que utilice recursos computacionales
entero m menor que n mediante un razonables puede distinguir entre la serie y

4 Universidad Distrital Francisco José de Caldas 2010


una sucesión de números verdaderamente 3. Elija e = 3
aleatoria de una forma mejor que tirando Compruebe mcd (e, p-1) = mcd (3, 10)
una moneda legal para decidir cuál es cuál. = 1 (es decir, 3 y 10 no tienen factores
Obs: Esta definición conduce a los comunes excepto 1),
denominados generadores PT-perfectos y comprobar mcd (e, q-1) = mcd (3, 2)
usados en Criptografía. [5] =1
por lo tanto mcd (e, phi) = mcd (e, (p-
Un Número aleatorio es una realización de 1) (q-1)) = mcd (3, 20) = 1
una variable aleatoria que tiene asociada 4. Calcular d tal que ed ≡ 1 (mod phi)
una ley de probabilidades F. Obs: Una es decir, calcular d = e -1 mod phi = 3 -1
particular ley de Probabilidad base para la mod 20
generación de números seudoaleatorios u1, es decir, encontrar un valor de d tal
u2,…, un : es la uniforme (0 ; 1) ui ~ U(0,1). que divide phi (ED-1)
es decir, encontrar d tal que 20 divide
Una sucesión de números aleatorios 3d-1.
prueba simple (d = 1, 2, ...) da d = 7
generados {u1, u2,…, un} es una sucesión
Revise: ed-1 = 3,7 - 1 = 20, que es
de números U(0;1), si tiene las mismas
divisible por phi.
propiedades estadísticas relevantes que
dicha sucesión de números aleatorios
5. De clave pública = (n, e) = (33, 3)
Clave privada = (n, d) = (33, 7).
reales.

Una sucesión de números aleatorios {ui} es Esto es en realidad el menor valor posible
para el módulo n para los que funciona el
aleatorio si h-tuplas de números sucesivos
algoritmo RSA.
no superpuestos se distribuyen
Ahora decimos que queremos cifrar el
aproximadamente como una [0,1]h, con mensaje m = 7, c = m e mod n = 7 3 mod 33
h=1,2,..,n, para n suficientemente grande. = 343 mod 33 = 13. Por lo tanto el texto
Obs: h=2 tenemos (ui,ui+1) , i=1,2,..n , se cifrado c = 13.
distribuye como una ley uniforme en [0,1]2.
Existe una gran número de métodos para
generar {ui} ≈ U(0,1): Para comprobar descifrado calculamos 'C = m
d
-Uniformente distribuidos mod n = 13 7 mod 33 = 7.Tenga en cuenta
- Independientes que no tenemos para calcular el valor total de
- E[U]= ½ ; V[U]= 1/12 13 a 7 el poder aquí. Podemos hacer uso del
- Período largo hecho de que un mod n = bc = (b mod n). (c
mod n) mod n por lo que podemos
H) Aplicación Práctica de la Generación descomponer un número potencialmente
de números aleatorios en el algoritmo
grande en sus componentes y combinar los
RSA, para la creación de una aplicación
JAVA que cifre y descifre archivos de resultados de más fácil, los cálculos más
texto. pequeños para calcular el valor final.

Teniendo en cuenta los siguientes pasos:[7] Una forma de calcular m 'es la siguiente::
'= M 13 7 mod 33 = 13 (3 +3 +1) mod 33 = 13 3 3
1. Seleccione los números primos p = 11, 0.13 0.13 mod 33
q = 3. (estos son los números = (13 3 mod 33). (13 3 mod 33). (13 mod 33)
generados aleatoriamente)
mod 33
2. n = pq = 11.3 = 33
phi = (p-1) (q-1) = 10,2 = 20 = (2197 mod 33). (2197 mod 33). (13 mod 33)
mod 33

5 Universidad Distrital Francisco José de Caldas 2010


* Encripta el texto usando la clave
19.19.13 mod = 33 = 4693 mod 33 pública
= 7. *
* @param mensaje String que
contiene el mensaje a encriptar
I) El siguiente código nos muestra la clase * @return El mensaje cifrado como un
principal que en nuestra aplicación nos arreglo de BigIntegers
*/
permitirá el cifrado o el descifrado de la public BigInteger[] encripta(String
clave según sea conveniente. mensaje)
{
import java.math.BigInteger; int i;
import java.util.*; byte[] temp = new byte[1];
import java.io.*; byte[] digitos = mensaje.getBytes();
BigInteger[] bigdigitos = new
/** BigInteger[digitos.length];
*
* @author Daniel for(i=0; i<bigdigitos.length;i++){
*/ temp[0] = digitos[i];
public class RSA { bigdigitos[i] = new
BigInteger(temp);
int tamPrimo; }
BigInteger n, q, p;
BigInteger totient; BigInteger[] encriptado = new
BigInteger e, d; BigInteger[bigdigitos.length];

/** Constructor de la clase RSA */ for(i=0; i<bigdigitos.length; i++)


public RSA(int tamPrimo) { encriptado[i] =
this.tamPrimo = tamPrimo; bigdigitos[i].modPow(e,n);
generaPrimos(); //Genera
p y q return(encriptado);
generaClaves(); //Genera }
e y d
} /**
* Desencripta el texto cifrado usando la
public void generaPrimos() clave privada
{//tama;o de bits *
p = new BigInteger(tamPrimo, 10, new * @param encriptado Arreglo de
Random());System.out.println("P es "+p); objetos BigInteger que contiene el texto
do q = new BigInteger(tamPrimo, 10, cifrado
new Random()); * que será
while(q.compareTo(p)==0); desencriptado
} * @return casting con el String del
texto desencriptado
public void generaClaves() */
{ public String desencripta(BigInteger[]
// n = p * q encriptado) {
n = p.multiply(q); BigInteger[] desencriptado = new
// toltient = (p-1)*(q-1) BigInteger[encriptado.length];
totient =
p.subtract(BigInteger.valueOf(1)); for(int i=0; i<desencriptado.length;
totient = i++)
totient.multiply(q.subtract(BigInteger.valueO desencriptado[i] =
f(1))); encriptado[i].modPow(d,n);
// Elegimos un e coprimo de y menor
que n char[] charArray = new
do e = new BigInteger(2 * tamPrimo, char[desencriptado.length];
new Random());
while((e.compareTo(totient) != for(int i=0; i<charArray.length; i++)
-1) || charArray[i] = (char)
(desencriptado[i].intValue());

(e.gcd(totient).compareTo(BigInteger.valueOf( return(new String(charArray));


1)) != 0)); }
// d = e^1 mod totient
d = e.modInverse(totient); public BigInteger damep() {return(p);}
} public BigInteger dameq() {return(q);}
public BigInteger dametotient()
/** {return(totient);}

6 Universidad Distrital Francisco José de Caldas 2010


public BigInteger damen() {return(n);} el cual los números aleatorios son una
public BigInteger damee() {return(e);}
public BigInteger damed() {return(d);} clave para lograr el objetivo.
}
– El algoritmo RSA es una manera
El uso de la clase BigInteger es trascendental,
adecuada de encriptar información, es
ya que esta nos brinda muchas utilidades a la
óptimo para tener un buen nivel de
hora de la generación o selección de los
seguridad, Pero para que este sea eficaz
números primos y el control del tamaño de
es necesario como parámetros de entrada,
clase claves
algunos números aleatorios.

III Conclusiones Referencias


– Los NA no deben ser generados con
[1] http://www.tendencias21.net/Crean-
métodos escogidos al azar. Alguna teoría
un-generador-de-numeros-
matemática que nos permita encontrar
verdaderamente-
una relación que produzca una
aleatorios_a4137.html
secuencia suficientemente aleatoria de
números, con un periodo máximo y con [2] http://raulespinola.wordpress.com/20
un mínimo de tiempo de computadora 09/03/30/criptografia-y-numeros-
deba ser usada. pseudoaleatorios-en-openbsd/
[3] http://www.scribd.com/doc/2557289/
– Los números generados, según la Numeros-Pseudoaleatorios
teoría o con ayuda de los computadores, [4] http://es.wikipedia.org/wiki/RSA
que logran pasar pruebas estadísticas [5] http://www.mitecnologico.com/Main/
con respecto a su carácter aleatorio, se NumerosAleatoriosDefinicionPropied
llaman, aunque se produzcan mediante adesGeneradoresYTablas
un proceso completamente [6] http://redalyc.uaemex.mx/redalyc/pdf
determinístico. /478/47802910.pdf
[7] http://informatica.uv.es/iiguia/MC/Teo
– Existen diferentes tipos de GNA, ya ria/mc_capitulo12.pdf
sea por HW o SW, los cuales brindan
comportamientos diferentes en la
secuencia de los números obtenidos de
acuerdo con sus características como
valor inicial, eficiencia, uniformidad y
longitud de periodo. Son importantes
todas al analizar un generador debido a
que suministran información del grado de
complejidad, implementación o
necesidad para lo que sea requerido.

– Los NA tienen una gran importancia


hoy en dia para diferentes procesos,
especialmente aquellos que necesitan
una gran cantidad de datos numéricos
para aplicaciones de simulación o
aquellos en los cuales la seguridad juega
un papel importante en el sistema, y para

7 Universidad Distrital Francisco José de Caldas 2010

Вам также может понравиться