Post on 16-Nov-2018
El criptosistema de Rabin - SER
Sistema de Encriptación de Rabin
Reporte Final. Agosto de 2002
Oscar Gonzalo Landa Rosales Departamento de Ingeniería Eléctrica
Sección de Computación.
Centro de Investigación y de Estudios Avanzados del Instituto Politécnico Nacional.
e-mail: olanda@computacion.cs.cinvestav.mx
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_1
El criptosistema de Rabin - SER
Sistema de Encriptación de Rabin (SER)
Centro de Investigación y de Estudios Avanzados – IPN
5 de Agosto del 2002. Reporte del Proyecto
(Especificación y Diseño de Sistema)
Oscar Gonzalo Landa Rosales
Resumen
Se presenta una breve introducción a los conceptos básicos de criptografía y en particular al Criptosistema de Rabin; pretendiendo entrar en contexto con este sistema, el cual se analiza la complejidad de esta tema que abarca desde conceptos matemáticos, hasta serios problemas de software y sistemas, pasando por problemas de diseño y análisis de algoritmos, y donde todo esto debe interactuar como un todo para lograr una implementación de un sistema de encriptamiento seguro. Finalmente, se pretende destacar la importancia, que tiene un buen análisis y diseño de un Criptosistema, para las siguientes etapas de desarrollo del sistema.
1. Introducción
En este documento se realizo un análisis de requerimientos y de diseño, donde se persiguió el
descubrir los alcances y limites, refinamiento, modelización y especificación del sistema SER.
Comienza con una descripción detallado del ámbito del programa, con objeto de poder establecer
un buen diseño del sistema. Se crearon los modelos del flujo de la información y del control, del
comportamiento en operacional y del contenido de los datos. Se analizan las soluciones
alternativas, con la asignación de los distintos elementos del software. El objetivo de este
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_2
El criptosistema de Rabin - SER
documento es poder reducir el mayor numero de malas interpretaciones o falta de información que
da por ende un mal diseño.
Por ultimo la especificación de requisitos del sistema SER, facilitara al equipo de desarrollo la
especificación de la función y del rendimiento del software, la descripción de la interfaz con otros
elementos del sistema y el establecimiento de las restricciones de diseño que debe considerar el
SER.
1 .1 Contexto del sistema. Las amenazas que sufre la información durante su proceso, almacenamiento y transmisión son
crecientes, multiformes y complejas, más aun, desde la globalización de Internet. Dada la
potencialidad de esta herramienta y de sus innumerables aplicaciones cada vez más personas y
empresas sienten la necesidad de conectarse a este magnífico mundo.
Para contrarrestar estas amenazas se han desarrollado numerosas medidas de protección, que se
implementan en el equipo físico o lógico mediante los denominados mecanismos de seguridad. De
éstos, el mecanismo por excelencia es el cifrado de la información, de los cuales existen diversos
métodos que se encuentran clasificados en dos importantes ramas : criptografía clásica o de clave
simétrica y criptografía moderna o de clave publica.
1.1.1 Criptografía clásica
También conocida como criptografía de clave simétrica, este tipo de criptografía ha sido usada por
años, su nombre proviene del hecho que ambos, remitente y destinatario en una comunicación
comparten una sola clave que se debe guardar en secreto.
Si se quiere comunicar secretamente con alguien, lo primero que se debe hacer es notificar al
destinatario cual es la clave que se usará para encriptar el mensaje, este proceso es muy
importante y difícil de realizar adecuadamente además de él depende el éxito de la comunicación.
La siguiente figura 1. muestra una comunicación entre dos partes usando encriptación con clave
simétrica. [4]
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_3
El criptosistema de Rabin - SER
Figura 1.
El uso de una sola clave implica que el mensaje se encripta con e ^ K y se desencripta con d = e^
(-1).
No debemos basar la seguridad de nuestro sistema en suponer que nadie sabe cual es la
transformación aplicada. Siempre se debe asumir que todas las partes conocen el conjunto de
transformaciones de encriptación/desencriptación (es decir, adversarios, emisor y receptor). Lo
único que se debe mantener en secreto es la clave d, y por supuesto e dado que d puede ser
deducida de ésta.
Hay dos clases de esquemas de encriptación de claves simétricas las cuales son comúnmente
distinguibles : Cifrados de bloque y Cifrado corriente.
Cifrado por Bloque
El cifrado en bloques es un esquema de encriptación el cual descansa sobre los mensajes de texto
puro que serán transmitidos dentro de strings (llamados bloques) de largo fijo t sobre el alfabeto A ,
encriptando un bloque a la vez.
La mejor técnica de encriptación con clave simétrica conocida es el cifrado en bloque. Dos
importantes clases de cifrados en bloque son : cifrado por sustitución y cifrado por transposición,
además del cifrado por producto que es una combinación de los dos anteriores.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_4
El criptosistema de Rabin - SER
Cifrado por Sustitución
El cifrado por sustitución es cifrado de bloques con reemplazo de símbolos o grupos de símbolos
por otros símbolos o grupos de símbolos.
Cifrado por sustitución simple
Sea A un alfabeto de q símbolos y M el conjunto de todos los strings de largo t sobre A. Sea K, el
conjunto de todas las permutaciones en el conjunto A. Se define para cada símbolo e | K la
transformación de encripción Ee como sigue :
Ee(m) = (e(m1) e(m2) ........ e(mt)) = (c1 c2 c3 ....... ct) = c
donde m=(m1 m2 m3 ...... mt)
En otras palabras, para cada símbolo en t-tupla, reemplace éste por otro símbolo de A de acuerdo
a algunas permutaciones fijas de e. Para encriptar c=(c1 c2 ... ct) calcule la permutación inversa de
d = e^ -1 y Dd(c) = (d(c1) d(c2) ... d(ct)) = (m1 m2 ... mt) = m
Ee es llamado cifrado de sustitución simple o cifrado de sustitución monoalfabético.
El número de cifrados distintos es q! y es independiente del tamaño del bloque en el cifrado.
Cifrado Corriente
El cifrado corriente aplica transformaciones de encriptación simples, según la clave a ser usada,
sobre bloques de largo 1. Lo que tiene de útil es que la transformación de encriptación puede
cambiar para cada símbolo del texto puro que se está encriptando.
Sea K el espacio de claves para el conjunto de transformaciones de encriptación, la secuencia de
símbolos e1e2e3...ei | K, son llamadas claves corrientes.
Sea A un alfabeto de q símbolos y sea Ee la sustitución de cifrado con bloques de largo 1 donde e
| K. Sea m1m2m3...mi el string de texto puro y e1e2e3...ei, las claves corrientes de K. El cifrado
corriente toma el string de texto puro y produce otro string de texto cifrado c1c2c3...ci.
El cifrado corriente aplica transformaciones de encriptación simples, según la clave corriente a ser
usada, se puede generar la clave corriente al azar, o por un algoritmo que genere la clave corriente
a través de una semilla
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_5
El criptosistema de Rabin - SER
1.1.2 Criptografía con Clave-Pública
El concepto de encripción con clave-pública es simple y elegante, pero tiene grandes
consecuencias.
Encripción con Clave-Pública Sea (Ee: e | K) un conjunto de transformación de encripción, y sea (Dd : d | K) el conjunto de la
transformación de decripción correspondiente, donde K es el espacio de claves. Considere algún
par de transformaciones de encripción / decripción asociadas (Ee, Dd) y suponga que cada par
tiene la propiedad de que Ee es computacionalmente in factible de calcular, dado un texto cifrado al
azar c | C, se quiere encontrar el mensaje m | M tal que Ee (m)= c. Esta propiedad implica que
dado e es in factible determinar la correspondiente clave de decripción d ( por supuesto e y d son
simplemente medios para describir la función de encripción y decripción correspondiente) Ee es
vista aquí como una función unidireccional con trampa con d la trampa de información necesaria
para calcular la función inversa y así permitir la decripción. Esto es distinto del cifrado con Clave-
Simétrica donde e y d son esencialmente iguales.
Dentro de esta suposición, considere la comunicación entre dos partes Maria y Juan mostrado en
la Figura 1 Juan escoge el par de claves (e, d). Juan envía la clave de encripción e (llamada clave
pública) a Maria en algún canal, pero guarda la clave de decripción d (llamada clave privada)
segura y secretamente.
Maria puede subsiguientemente enviar un mensaje m a Juan aplicando la transformación de
encripción determinada por la clave pública de Juan para hacer c=Ee(m). Juan decripta el texto
cifrado c aplicando la transformación inversa Dd únicamente determinado por d.
Aquí la clave de encripción es transmitida a Maria a través de un canal no seguro. Este canal no
seguro tal vez el mismo canal sobre el cual el texto cifrado es transmitido.
Puesto que la clave de encripción e no necesita mantenerse en secreto ésta puede hacerse
pública. Cualquiera entidad puede enviar subsiguientemente mensajes encriptados a Juan que
sólo Juan puede decriptar. La Figura 2 muestra esta idea, donde A1, A2, y A3 son entidades
distintas. Note que si A1 destruye el mensaje m1 después de encriptarlo con c1, entonces A1 no
puede recobrar m1 por c1.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_6
El criptosistema de Rabin - SER
Una analogía física, considere una caja de metal con una tapa de seguridad que tiene una
combinación secreta. La combinación es conocida sólo por Bob. Si la cerradura se abre hacia la
izquierda y esto se hace público entonces cualquier persona puede poner un mensaje dentro y
cerrar la tapa. Pero sólo Bob puede recuperar el mensaje. Aún la entidad que puso el mensaje
dentro de la caja no puede recuperarlo.
La encripción con clave-pública, es descrita aquí, se asume el conocimiento de la clave-pública e y
no se permite el cálculo de la clave privada d. En otras palabras, Se asume la existencia de una
función unidireccional.
Figura 2. Uso esquemático de la encriptación con clave-pública.
Definición : Considere un esquema de encripción compuesto por un conjunto de transformaciones
de encripción y decripción (Ee: e | K) y (Dd : d | K), respectivamente. El método de encripción se
llama un esquema de encripción con clave-pública si por cada par asociado de
encripción/decripción (e,d), una clave e (la clave pública) se hace públicamente disponible,
mientras que la otra d (la clave-privada) se guarda confidencialmente. Para que el esquema sea
seguro, debe ser in factible computacionalmente calcular d a partir de e.
Comentario: (Clave pública vs Clave secreta) para evitar ambigüedad, se llego a un acuerdo en
común de usar el término clave-privada en asociación con el criptosistema con clave-pública y
clave- secreta en asociación con el criptosistema con clave simétrica. Esto motivado por el
siguiente pensamiento: Son necesarias dos o más partes para compartir un secreto, pero una
clave es en verdad privada cuando sólo una parte la sabe.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_7
El criptosistema de Rabin - SER
Hay muchos esquemas conocidos que creen ser claves públicas seguras para un método de
encripción, pero no tienen ninguna evidencia matemática para asegurar la independencia de ser
sólo suposiciones. Esto no es diferente en el caso de la clave-simétrica donde el único sistema que
ha probado ser seguro es el one-time-pad
1.2 La necesidad de autenticación en sistemas con claves-públicas. Autenticación e Identificación Recordemos que autenticación es un término que es usado (y a menudo abusado) en un sentido
muy extenso. Por lo mismo éste tiene un significado pequeño en cosas que llevan a la idea de que
algún medio tiene que ser provisto de seguridad para las entidades, o dar seguridad de que la
información no ha sido manipulada por partes no autorizadas. Autenticación es el objetivo
específico de la seguridad que uno trata de alcanzar. Unos de los ejemplos para especificar los
objetivos incluyen control de acceso, autenticación de las entidades, autenticación del mensaje,
integridad de los datos, no tener rechazos, y autenticación de la clave.
Autenticación es uno de los objetivos más importantes de la seguridad de la información. Hasta
mediados de los 1970s generalmente se creyó que secreto y autenticación estaban
intrínsecamente conectados. Hasta que el descubrimiento de las funciones hash y las firmas
digitales, dieron cuenta que el secreto y autenticación estaban separado en verdad y que la
información era independiente de los objetivos de la seguridad. No parecería al principio
importante separar los dos pero hay situaciones donde no es sólo útil sino esencial. Por ejemplo en
la comunicación entre dos partes Maria y Juan, Maria está en un país y Juan en otro, ambos
países no permiten secretos en el canal de comunicación; uno o ambos países quieren tener la
posibilidad de supervisar todo tipo de comunicación. A Maria y Juan, de todas formas, les gustaría
estar seguros de la identidad el uno del otro, y de la integridad y origen de la información que ellos
enviarán y recibirán.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_8
El criptosistema de Rabin - SER
El problema anterior ilustra varios aspectos independientes de la autenticación. Si Maria y Juan
desean asegurarse de la entidad de cada uno, hay dos posibilidades a considerar.
1.- Maria y Juan pueden comunicarse sin retraso de tiempo. Esto es, ambos son activos en
la comunicación de "tiempo real"
2.- Maria o Juan puede intercambiar mensajes con algún retraso. Esto es, pueden dirigir el
mensaje a través de varias redes, que lo almacenan, y luego lo reenvían un tiempo más
tarde.
En el primer ejemplo Maria y Juan querrían verificar las identidades en tiempo real. Esto se puede
lograr si por ejemplo Maria envía a Juan un mensaje-secreto o desafío, que sólo Juan pueda
responder correctamente. Juan podría ejecutar una acción similar para identificar Maria. Este tipo
de autenticación es comúnmente llamado autenticación de la entidad o simplemente identificación.
Con respecto a la posibilidad del segundo no es conveniente mandar un mensaje-secreto o desafío
y esperar una respuesta correcta, ya que el camino de la comunicación es sólo en una dirección.
Técnicas diferentes son ahora necesarias para autenticar al originador del mensaje. Esta forma de
autenticación es llamada autenticación del origen de los datos. Autenticación de los datos en el origen. Definición: (Autenticación de los datos en el origen o autenticación de mensajes) Existen técnicas
que proveen que una de las partes reciba un mensaje seguro (por evidencia corroborada) y la
identidad de la parte que originó el mensaje.
A menudo se proporciona un mensaje a B con información adicional para que B pueda determinar
la identidad de la entidad que originó el mensaje. Esta forma de autenticación típica no provee
ninguna garantía, pero es útil en situaciones donde una de las partes no es activa en la
comunicación.
Ejemplo (Necesidad de la autenticación del origen de los datos) Uno le envía un mensaje a B por
el correo electrónico. El mensaje puede viajar por sistemas de redes de comunicación y guardarse
para enviarlo a B un tiempo más tarde. A y B no tienen usualmente una comunicación directa.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_9
El criptosistema de Rabin - SER
A B le gustaría tener algún medio para verificar que el mensaje recibido y su contenido fueron
originados verdaderamente por A. La autenticación del origen de los datos implícitamente provee
la integridad de los datos ya que, si el mensaje fue modificado durante la transmisión, A podría no
recibir el mensaje con el largo original.
Pareciera que una criptografía con clave-pública es un sistema ideal, ya que no se requiere de un
canal seguro para pasar la clave de encripción. Esto implica que dos entidades podrían
comunicarse sobre en canal no seguro nunca teniendo claves de intercambio en el medio.
Desgraciadamente, éste no es el caso. La Figura 1. 3 muestra cómo un adversario activo puede
derrotar el sistema (decriptando el mensaje destinado a una segunda entidad) sin romper el
sistema del encripción. Este es un tipo de personificación y es un ejemplo de fracaso protocolar.
En este texto el adversario personifica a la entidad B y envía a la entidad A una clave-pública la
cual A asume (incorrectamente) que es la clave-pública de B. El adversario intercepta el mensaje
encriptado de A para B decriptándolo con su propia clave-privada d, reencriptando el mensaje bajo
la clave-pública de B e, y lo envía a B. Esto destaca la necesidad de autenticar las claves públicas
para lograr datos originales se debe autenticar la clave pública.
Se debe convencer que ella está encriptada bajo una legítima clave pública de B. Afortunadamente
las técnicas de clave pública también permiten una elegante solución a este problema.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_10
El criptosistema de Rabin - SER
Hace algunos años, este tipo de sistemas no parecía tener ninguna ventaja en el mundo
criptográfico, porque tradicionalmente la criptografía se usaba sólo con propósitos militares y
diplomáticos, y en estos casos el grupo de usuarios es lo suficientemente pequeño cómo para
compartir un sistema de claves. Sin embargo, en la actualidad, las aplicaciones de la criptografía
han aumentado progresivamente, hasta alcanzar muchas otras áreas donde los sistemas de
comunicación tienen un papel vital. Cada vez con mayor frecuencia se pueden encontrar grandes
redes de usuarios en las que es necesario que dos cualesquiera sean capaces de mantener
secretas sus comunicaciones entre sí. En estos casos, el intercambio continuo de claves no es una
solución muy eficiente.
Por otro lado, hay que resaltar la ventaja que representa en los sistemas asimétricos la posibilidad
de iniciar comunicaciones secretas sin haber tenido ningún contacto previo.
A continuación, nombramos algunos de los sistemas de clave pública que han tenido más
trascendencia.
• Sistema RSA. Se basa en el hecho de que no existe una forma eficiente
de factorizar números que sean productos de dos grandes primos.
• Sistema de Rabin. Se basa también en la factorizacion.
• Sistema de ElGamal. Se basa en el problema del logaritmo discreto.
• Sistema de Merkle-Hellman. Esta basado en el problema de la mochila.
• Sistema de McEliece. Se basa en la teoría de la codificación algebraica,
utilizando el hecho de que la decodificación de un código lineal general es
un problema NP-completo.
• Sistemas basados en curvas elípticas. En 1985, la teoría de las curvas
elípticas encontró de la mano de Miller aplicación en la criptografía. La
razón fundamental que lo motivó fue que las curvas elípticas definidas
sobre cuerpos finitos proporcionan grupos finitos abelianos, donde los
cálculos se efectúan con la eficiencia que requiere un criptosistema, y
donde el cálculo de logaritmos es aún más difícil que en los cuerpos
finitos. Además, existe mayor facilidad para escoger una curva elíptica que
para encontrar un cuerpo finito, lo que da una ventaja más frente a su
predecesor, el sistema de ElGamal.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_11
El criptosistema de Rabin - SER
2. Descripción del problema Para poder conseguir un proyecto de software fructífero, analizamos y delimitamos correctamente el planteamiento del problema del Sistema de Encriptación de Rabin (SER) siguiente:
“ Se diseñara e implementara un Sistema de Encriptación de Rabin, que consiste en
Implementar el Algoritmo del criptosistema propuesto por M. O. Rabin. El proyecto se
desarrollara en el leguaje de programación JAVA. La cual nos permitirá poder hacer
encriptaciones y decriptación de mensajes a través de este sistema. Y si el tiempo lo
permite, se implementara una interfaz de usuario del sistema la cual le facilitara interactuar
al cliente con el programa.”
3. Descripción del ámbito del SER.
3.1 Descripción General del Algoritmo de Rabin. El sistema de llave asimétrica de Rabin se basa en el problema de calcular raíces cuadradas
módulo un número compuesto. Este problema se ha demostrado que es equivalente al de la
factorización de dicho número. En primer lugar escogemos dos números primos, p y q, ambos congruentes con 3 módulo 4 (los
dos últimos bits a 1). Estos primos son la clave privada. La clave pública es su producto, n = pq.
Para codificar un mensaje m, simplemente se calcula
c = m2 (mod n)
La descodificación del mensaje se hace calculando lo siguiente:
m1 = c(p+1)/4 (mod p)
m2 = (p - c(p+1)/4) (mod p)
m3 = c(p+1)/4 (mod q)
m4 = (q -c(p+1)/4) (mod q)
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_12
El criptosistema de Rabin - SER
Luego se escogen a y b tales que a = q(q -1 (mod p)) y b = p(p -1 (mod q)). Los cuatro posibles
mensajes originales son
ma = (am1 + bm3) (mod n)
mb = (am1 + bm4) (mod n)
mc = (am2 + bm3) (mod n)
md = (am2 + bm4) (mod n) Desgraciadamente, no existe ningún mecanismo para decidir cuál de los cuatro es el auténtico, por
lo que el mensaje deberá incluir algún tipo de información para que el receptor pueda distinguirlo
de los otros.
3.2 Fundamentación del Algoritmo de Rabin.
Ahora presentaremos el Criptosistema de Rabin, el cual es computacionalmente seguro contra
todo ataque de texto plano elegido bajo el supuesto que es computacionalmente in factible
factorizar números de la forma n = p * q, donde p y q son primos.
Sea n el producto de dos primos distintos p y q, con p, q ≡ 3(mod A). Sea P = C = Ζn y definamos
Para K =(n , p, q, B) definimos
y
La clave pública es (n, B), y p y q se mantienen secretos.
La función de encripción no es inyectiva, así que la decripción es ambigua. En efecto si w es una
raíz cuadrada no trivial de 1, entonces para todo texto plano x hay tres valores distintos que
producen el mismo texto cifrado , y son
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_13
El criptosistema de Rabin - SER
x,
-x – B,
w(x + B/2) – B/2,
-w (x + B/2) – B/2.
Por ejemplo:
En general, el receptor d
posibles a menos que e
las cuatro posibilidades.
Para decriptar debemos
o equivalentemente,
donde x1 = x + B/2.
Sea entonces C = y + B
correctamente. Las solu
Teorema Chino del Resto
Oscar Gonzalo L
Ek(w(x + B/2) – B/2) = (w(x + B/2) – B/2)*(w(x + B/2) – B/2)
= w2 (x + B/2) 2 – B2/4
= x(x-B)(mod n)
= x(x-B)(mod n)
el mensaje no tiene forma de distinguir entre estos cuatro textos planos
l texto plano contenga suficiente redundancia como para eliminar tres de
resolver
2. Observemos que C es un residuo cuadrático si la encripción se hizo
ciones de la ecuación (x1)2 = C (mod n) se pueden obtener mediante el
a partir de las soluciones de las ecuaciones:
anda Rosales - Códigos y Criptografía - Página_14
El criptosistema de Rabin - SER
Cada una de estas ecuaciones tiene dos raíces. Estas se pueden combinar para obtener las cuatro
soluciones de la ecuación original (por el TCR). Por el criterio de Euler sabemos que si se encriptó
correctamente C es un residuo cuadrático módulo p y módulo q. Pero esto no basta para poder
resolver las ecuaciones. En realidad el elemento clave para esto es el hecho que p ≡ 3(mod 4) y q
≡ 4, pues en este caso tenemos un algoritmo determinista polinomial que nos permite calcular las
raíces cuadradas de residuos cuadráticos módulo p o q. Las raíces de la primera ecuación vienen
dadas por ±C(p+1)/4(mod p). En efecto:
(±C(p+1)/4) 2 ≡ C(p+1)/2(mod p).
≡ C(p-1)/2 C (mod p).
≡ C (mod p).
esto debido a que C es residuo cuadrático, luego por el criterio de Euler se tiene que: C(p-1)/2 ≡
1(mod p).
Análogamente, las raíces de la segunda ecuación son ±C(q+1)/4(mod q). Teniendo las soluciones de
ambas ecuaciones se obtienen directamente las cuatro raíces de C módulo n usando el Teorema
Chino del Resto.
Cabe hacer dos observaciones:
1. El adversario no sabe cuál de las cuatro es la decripción correcta, pero el receptor
tampoco. Esto se resuelve acordando ciertas reglas de redundancia en el mensaje (i.e.
el mensaje se transmite como dos copias concatenadas, el tercer bit se repite tres
veces, etc.) para poder distinguir cuál de las cuatro raíces corresponde al mensaje
original.
2. Es interesante el hecho que para el caso en que un primo p es congruente a 1 modulo
4 no se conoce ningún algoritmo polinomial determinista para determinar las raíces
cuadradas de residuos cuadráticos módulo p, i.e. el hecho que p ≡ 3 (mod 4) y q ≡ 4
(mod 3) es vital para el algoritmo de decripción (Sin embargo, se conoce un algoritmo
probabilista de tiempo polinomial que cumple este propósito).
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_15
El criptosistema de Rabin - SER
3.3 Pasos del Algoritmo de Rabin. Estos algoritmos son tomados de “Handbook of Applied Cryptography” [10].
Algorithm 1 Key generation for Rabin public-key encryption SUMMARY: each entity creates a public key and a corresponding private key. Each entity A should do the following: 1. Generate two large random (and distinct) primes p and q, each roughly the same size. 2. Compute n = pq. 3. A’s public key is n; A’s private key is (p; q).
Algorithm 2 Rabin public-key encryption SUMMARY: B encrypts a message m for A, which A decrypts. 1. Encryption. B should do the following: (a) Obtain A’s authentic public key n. (b) Represent the message as an integer m in the range {0,1, … , n – 1}. (c) Compute c = m2 mod n. (d) Send the ciphertext c to A. 2. Decryption. To recover plaintext m from c, A should do the following: (a) Use Algorithm 3 to find the four square roots m1,m2,m3, and m4 of c modulo n2. (See next Note). (b) The message sent was either m1,m2,m3, or m4. A somehow decides which of these is m.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_16
El criptosistema de Rabin - SER
Algorithm 3 Finding square roots modulo n given its prime factors p and q
INPUT: An integer n, its prime factors p and q, and a ∈ Qn. OUTPUT: the four square roots of a modulo n. 1. Use Algorithm 4 to find the two square roots r and -r of a modulo p. 2. Use Algorithm 4 to find the two square roots s and -s of a modulo q. 3. Use the extended Euclidean algorithm to find integers c and d such that cp + dq = 1. 4. Set x ←(rdq + scp) mod n and y ← (rdq - scp) mod n. 5. Return(±x mod n, ±y mod n).
Algorithm 4 Finding square roots modulo a prime p
INPUT: An odd prime p and a square a ∈ Qp. OUTPUT: the two square roots of a modulo p. 1. Choose random b ∈ Zp until b2 - 4a is a quadratic non-residue modulo p, i.e., (b2 -4a)/p = -1.. 2. Let f be the polynomial x2 - bx + a in Zp[x].
3. Compute r = x(p+1)/2 mod f 4. Return(r, -r).
Note (finding square roots of c modulo n = pq when p ≡ q ≡ 3 (mod 4)) If p and q are both chosen to
be ≡ 3 (mod 4), then Algorithm 4 for computing the four square roots of c modulo n simplifies as
follows:
1. Use the extended Euclidean algorithm to find integers a and b satisfying ap + bq = 1. Note that a
and b can be computed once and for all during the key generation stage.
2. Compute r = c (p+1)/4 mod p.
3. Compute s = c(q+1)/4 mod q.
4. Compute x = (aps + bqr) mod n.
5. Compute y = (aps - bqr) mod n.
6. The four square roots of c modulo n are x, -x mod n, y, and -y mod n.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_17
El criptosistema de Rabin - SER
3.4 Comentarios del Criptosistema de Rabin. Ahora probaremos que el criptosistema de Rabin es computacionalmente seguro. Suponemos
entonces que si existe un algoritmo A que conociendo n y B y dada una entrada y ∈ C entrega un x
∈ P tal que eK(x) = y.
El siguiente algoritmo toma como entrada n y B y utiliza A como subrutina y factoriza el módulo n
con probabilidad de a lo menos ½.
Existen varios puntos a explicar en este algoritmo. Primero observemos que:
Luego en el paso 3, A retorna un valor x ∈ P tal que:
De esta manera obtenemos que:
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_18
El criptosistema de Rabin - SER
donde w es una raíz cuadrada no trivial de 1 modulo n. Si x ≠ ± 1 (mod n) entonces como n|(x1 + r
)(x1 - r) sigue que al calcular mcd((,x)1 + r, n) se obtiene p o q.
Para determinar la probabilidad de éxito de quebrar el criptosistema de Rabin, definimos en Zn\{0}
la relación de equivalencia.
Se verifica fácilmente que ~ es relación de equivalencia. Notar que la clase de equivalencia de un
elemento r tiene cardinal 4 en efecto:
Pero todo elemento de [r] genera el mismo y ∈ C para el paso 2 y luego da lugar al mismo x1 en el
paso 4. Luego con probabilidad de a lo menos ½ en el paso 1 se eligió un término tal que x ≠
±r(mod n), luego el Criptosistema de Rabin es computacionalmente seguro bajo ataques de texto
plano elegido bajo el supuesto que no existe un algoritmo probabilística eficiente que permita
factorizar números de la forma
n = p * q, p y q primos.
Cabe hacer notar que bajo ataques de texto cifrado conocido el Criptosistema de Rabin es
inseguro, dado que el algoritmo A es reemplazado por el algoritmo de decripción del Criptosistema
de Rabin conocido por la persona que realiza el ataque.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_19
El criptosistema de Rabin - SER
4. Metodología de desarrollo para el diseño del SER.
En los cifrados asimétricos o de clave pública, tal y como ya se definieron anteriormente, la clave
de descifrado no se puede calcular a partir de la de cifrado.
En 1975, dos ingenieros electrónicos de la Universidad de Standford, Whitfield Diffie y Martín
Hellman[1], sugieren usar problemas computacionalmente irresolubles para el diseño de
criptosistemas seguros. La idea consiste básicamente en encontrar un sistema de cifrado
computacionalmente fácil (o al menos no difícil), de tal manera que el descifrado sea por el
contrario, computacionalmente irresoluble a menos que se conozca la clave. Para ello, hay que
usar una transformación criptográfica Tk de fácil aplicación, pero de tal manera que sea muy difícil
hallar una transformación inversa Tk ^(-1) sin la clave de descifrado. Dicha función Tk es, desde el
punto de vista computacional, no inversible sin cierta información adicional (clave de descifrado) y
se llama función de una vía o función trampa.
En estos esquemas se utiliza una clave de cifrado (clave pública) k que determina la función
trampa Tk, y una clave de descifrado (clave secreta o privada) que permite el cálculo de la inversa
Tk ^(-1).
En consonancia con el espíritu de la criptografía moderna, y tal como sucedía en los sistemas
simétricos, los algoritmos de cifrado y de descifrado son públicos, por lo que la seguridad del
sistema se basa únicamente en la clave de descifrado.
Según Diffie y Hellman, todo algoritmo de clave pública debe cumplir las siguientes propiedades de
complejidad computacional:
1. Cualquier usuario puede calcular sus propias claves pública y privada en tiempo
polinomial.
2. El emisor puede cifrar su mensaje con la clave pública del receptor en tiempo
polinomial.
3. El receptor puede descifrar el criptograma con la clave privada en tiempo polinomial.
4. El criptoanalista que intente averiguar la clave privada mediante la pública se
encontrará con un problema intratable.
5. El criptoanalista que intente descifrar un criptograma teniendo la clave pública se
encontrará con un problema intratable.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_20
El criptosistema de Rabin - SER
En la práctica el diseñador de algoritmos asimétricos se encuentra con cinco problemas numéricos
distintos. Los tres primeros, correspondientes a las condiciones 1, 2 y 3, deben pertenecer a la
clase polinomial. Los otros dos, correspondientes a las condiciones 4 y 5, son problemas
complejos, preferiblemente NP-completos, ya que aunque un problema pertenezca a esta clase
siempre puede darse algún ejemplo concreto que se resuelva en tiempo polinomial.
Cómo construir un criptosistema de Clave Pública En líneas generales, un esquema a seguir para la construcción de un criptosistema de clave
pública es el siguiente:
1) Escoger un problema P difícil, a se posible intratable.
2) Escoger un subproblema de P fácil, P fácil que se resuelva en tiempo polinomial,
preferiblemente en tiempo lineal.
3) Transformar el problema P fácil de tal manera que el problema resultante, P difícil, no se
parezca al inicial, pero si al problema original P.
4) Publicar el problema P difícil y la forma en que debe ser usado, constituyendo este
proceso la clave (pública) de cifrado. La información sobre cómo se puede recuperar el
problema P fácil a partir del problema P difícil se mantiene en secreto y constituye la clave
secreta de descifrado.
Los usuarios legítimos utilizan la clave secreta para llevar a cabo el descifrado, convirtiendo el
problema P difícil en el problema P fácil mientras que el criptoanalista tiene que enfrentarse
forzosamente a la resolución del problema P difícil.
En la construcción de criptosistemas se pueden observar diferencias entre los algoritmos
para sistemas simétricos y los algoritmos usados en clave pública. En primer lugar existen
mayores restricciones de diseño para un algoritmo asimétrico que para un simétrico, debido a
que la clave pública representa información adicional que potencialmente un enemigo puede
usar para llevar a cabo el criptoanálisis. Normalmente el algoritmo de clave pública basa su
seguridad en la dificultad de resolver algún problema matemático conocido, mientras que
algunos algoritmos simétricos, se diseñan de tal manera que las ecuaciones matemáticas que
los describen son tan complejas que no son resolubles analíticamente.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_21
El criptosistema de Rabin - SER
En segundo lugar, existen grandes diferencias en la generación de claves. En los algoritmos
simétricos en los que el conocimiento de la clave de cifrado es equivalente a la de descifrado, y
viceversa, la clave se puede seleccionar de forma aleatoria.
Sin embargo, en los algoritmos asimétricos, como la relación entre la clave de cifrado y la de
descifrado no es pública, se necesita un procedimiento para calcular la pública a partir de la
clave privada que sea computacionalmente eficiente y tal que el cálculo inverso sea imposible
de realizar.
Después de lo señalado hasta ahora hay que mencionar tres problemas o inconvenientes que
se suelen presentar en la Criptografía de Clave secreta :
1. Distribución de claves
Dos usuarios tienen que seleccionar una clave en secreto antes de empezar a
comunicarse, lo que deberán hacer bien personalmente (cosa que no siempre es posible ),
bien por medio de un canal inseguro.
2. Manejo de claves.
En una red de n usuarios cada pareja debe tener su clave secreta particular, lo que hace
un total de n(n-1)/2 claves para esa red.
3. Sin firma digital.
Una firma digital es lo análogo a una firma digital o rúbrica, pero en una red de
comunicaciones. En los criptosistemas de clave secreta no hay posibilidad, en general , de
firmar digitalmente los mensajes, con lo que el receptor del mismo no puede estar seguro
de que quien dice que le envia el mensaje sea realmente quien lo ha hecho.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_22
El criptosistema de Rabin - SER
5. Diseño e Implementación del Sistema de Encriptación de Rabin.
Para el desarrollo del diseño e Implementación se tomaron en consideración dos cosa:
1. El lenguaje de programación.
2. Y el protocolo de encriptación y desencriptación.
Estos dos punto se deben principalmente a que estos determinan la forma de organizar el
concepto del modelo de programación, y la forma de poder controlar el flujo de datos
entre los diferentes módulos.
El desarrollo de este punto dentro del reporte se describe de la siguiente reporte.
Inicialmente se discutirá el diseño del sistema; a partir de esto se discutirá los puntos mas
importantes que se deben tomar en cuenta sobre la implantación con base al diseño.
En seguida se describirá la implementación de cada uno de los módulos. Y por ultimo se
explica el diseño y funcionamiento de la interfase de usuario para el sistema SER. 5.1 Diseño del Sistema de SER.
RabinFrame
EECRoots
EncryptMessageDecryptMessageSetKey
Figura 5.1: Interrelación de las clases del sistema SER.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_23
El criptosistema de Rabin - SER
Como se muestra en la figura 5.1 se muestra el concepto de la Programación Orientada a
Objetos, que esta basada en dividir el problema en entidades que realizan un o varias
funciones para el Sistema.
En este caso el Sistema se divide en 6 clases principales, mas una clase que sirve como
la clase que se encarga de ejecutar el Sistema.
La figura 5.1 muestra una clase llamada RabinFrame; que es, la que hace uso de todas
las clases, esto se debe a que la clase contiene la interfaz del sistema y dentro de esa
Interfaz hace llamadas (agregación de los objetos) al resto de las 5 clases que se
implementan. Hay tres clases importantes dentro del Sistema de Encriptación de Rabin; y
estas son las clases KeySet, DecryptMessage y EncryptMessage; Esta división es obvia
por la simple razón de que el sistema realiza estas tres tareas.
Las ultimas dos clases hasta ahora no mencionadas son parte importante para que la
clase DecryptMessage realice su tarea de desencriptar el mensaje. Entre estas dos
clases, la mas importante para el sistema es la EEC, que realmente es la implantación del
Algoritmo extendido de Euclides y la pieza clave dentro de la implementación.
Figura 5.2. Relación que guardan las tres clases. La clase DescryptMessage agrega a ella a la
clase Roots y a su vez la clase Roots a la clase EEC.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_24
El criptosistema de Rabin - SER
En la etapa de diseño del Sistema; se basa principalmente en las diferentes pruebas de
programación que se hacen antes de poder valorar y cuantificar el poder del lenguaje de
programación. En este caso se escogió Java.
5.2 Transición del Diseño a Implementación. Uno de los problemas principales que se enfrenta con los lenguajes de programación, es
implementar la Aritmética de precisión infinita. Por ejemplo en C o C++, esta
implementación se debe de realizar a fuerza, si se quiere realizar un criptosistema seguro.
Pero primeramente, Que es Aritmética de precisión infinita? 5.2.1 Aritmética de precisión Infinita. Sistemas de numeración posicionales. En los sistema de numeración posicionales, el valor de una cifra depende del lugar que ésta ocupe dentro del número. El más conocido es el sistema decimal. En el número decimal 221 el dígito 2 figura dos veces, pero el de la derecha representa 2 decenas mientras que el de la izquierda representa dos centenas. Generalizando, en un sistema de numeración posicional de base b, la representación de un número se define a partir de la regla: (… a3 a2 a1 a0.a-1 a-2 a-3 …)b = … + a2 b2 + a1 b1 + a0 b0 + a-1 b-1 + a-2 b-2 + a-3 b-3 + …(1) Por ejemplo, (423.1)6 = 4⋅62 + 2⋅61 + 3⋅60 + 1⋅6-1. Cuando b es diez y los ai se eligen del conjunto de dígitos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 se trata del sistema decimal; y en este caso el subíndice b de la expresión (1) puede omitirse. Las generalizaciones más simples del sistema decimal se obtienen cuando b es un entero no negativo mayor a 1 y cuando los ai pertenecen al conjunto de enteros en el rango 0 ≤ ai < b. Así, cuando b es 2 se obtiene el sistema de numeración binario, cuando b es 8 el octal y cuando b es 16 el hexadecimal. Pero en general, se podría elegir cualquier b distinto de cero, y los ai de cualquier conjunto de números, obteniendo sistemas muy interesantes (ver [1] para más información). Números de precisión finita Al hacer operaciones aritméticas, en muy raras ocasiones uno se preocupa por la cantidad de dígitos decimales que son necesarios para representar a un número. Se puede calcular que hay 1078 electrones en el universo sin molestarse por el hecho de que se requieren 79 lugares decimales para escribir el número completo. Una persona que evalúa una función a mano buscando una solución de 6 dígitos significativos, simplemente trabaja con resultados intermedios de 7, 8 o cuantos dígitos necesite.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_25
El criptosistema de Rabin - SER
Con las computadoras, las cosas son bastante diferentes. En la mayoría de las computadoras, la cantidad de memoria disponible para guardar números se fija en el momento de su diseño. Con un poco de esfuerzo, el programador puede llegar a representar números 2 o 3 veces más grandes que este tamaño prefijado, pero al hacerlo no termina de cambiar la naturaleza del problema: la cantidad de dígitos disponibles para representar un número siempre será fija. Llamaremos a estos números: números de precisión finita. Para poder estudiar las propiedades de los números de precisión finita, se examinará el conjunto de los números enteros positivos que se pueden representar con tres dígitos decimales, sin punto decimal ni signo. Este conjunto tiene exactamente 1000 elementos: 000, 001, 002, 003, …., 999. Con estas restricciones es imposible representar algunos conjuntos de números enteros, como ser:
1. Números mayores a 999 2. Números negativos 3. Fracciones 4. Números irracionales 5. Números complejos
El conjunto de los números enteros tiene la propiedad de ser cerrado con respecto a la suma, resta y multiplicación. Es decir, para todo par de enteros a y b, a + b, a - b y a x b son también enteros. Pero el conjunto de enteros no es cerrado con respecto a la división ya que existen enteros a y b para los cuales el resultado de a / b no es un número entero. Desafortunadamente, el conjunto de los números de precisión finita no es cerrado con respecto a las operaciones aritméticas básicas, como se muestra a continuación, usando números de tres dígitos decimales como ejemplo: 600 + 600 = 1200 (muy grande) 003 - 005 = -2 (negativo) 050 x 050 = 2500 (muy grande) 007 / 002 = 3,5 (no es un entero) Las exclusiones se pueden dividir en dos clases: las operaciones cuyo resultado es mayor al máximo número del conjunto (error de overflow) o menor al mínimo número del conjunto (error de underflow), y las operaciones cuyos resultados simplemente no pertenecen al conjunto. De las cuatro exclusiones del ejemplo, las primeras tres pertenecen a la primera categoría y la última a la segunda. Como las computadoras tienen memoria finita y por lo tanto, deberán realizar operaciones sobre números de precisión finita, los resultados de algunos operaciones serán, desde el punto de vista matemático, totalmente erróneos. Una calculadora que da la respuesta incorrecta aunque todos sus circuitos estén funcionando en perfectas condiciones puede resultar extraña al principio, pero el error que comete es una consecuencia lógica de su naturaleza finita. Algunas computadoras tienen hardware que detecta los errores de overflow. El álgebra de los números de precisión finita es bastante diferente al álgebra al que estamos acostumbrados. Por ejemplo, consideremos la ley asociativa: a + (b - c) = (a + b) - c
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_26
El criptosistema de Rabin - SER
Evaluemos ambos lados de este igualdad con los siguientes valores: a = 700, b = 400, c = 300. Para calcular el término de la izquierda, primero evaluamos (b - c) que es 100, valor que sumamos a a, obteniendo 800. Para calcular el término de la derecha calculamos primero (a + b), que resulta en un error de overflow en aritmética de números de 3 dígitos decimales. El resultado dependerá de la máquina que se esté usando, pero no se puede garantizar que sea 1100. Al restar 300 de un número que es distinto de 1100, jamás obtendremos 800. La ley asociativa no se cumple, por lo tanto el orden de las operaciones es importante. Como otro ejemplo, consideremos la ley distributiva: a x (b - c) = a x b - a x c Si evaluamos ambos lados de la igualdad con a = 5, b = 210 y c = 195, el término izquierdo es 5 x 15 dando 75. El término de la izquierda no es 75 porque a x b resulta en un error de overflow. A juzgar por estos ejemplos, uno podría concluir que aunque las computadoras son máquinas de propósito general, su naturaleza finita las hace inadecuadas para llevar a cabo operaciones aritméticas. Esta conclusión, por supuesto, no es verdadera, pero sirve para mostrar lo importante que es saber cómo trabajan las computadoras y cuáles son sus limitaciones. 5.2.2 Que ofrece Java para la Aritmética de precisión Infinita. Package java.math Description Provides classes for performing arbitrary-precision integer arithmetic (BigInteger) and arbitrary-precision decimal arithmetic (BigDecimal). BigInteger is analogous to Java's primitive integer types except that it provides arbitrary precision, hence operations on BigIntegers do not overflow or lose precision. In addition to standard arithmetic operations, BigInteger provides modular arithmetic, GCD calculation, primality testing, prime generation, bit manipulation, and a few other miscellaneous operations. BigDecimal provides arbitrary-precision signed decimal numbers suitable for currency calculations and the like. BigDecimal gives the user complete control over rounding behavior, allowing the user to choose from a comprehensive set of eight rounding modes Class BigInteger. Immutable arbitrary-precision integers. All operations behave as if BigIntegers were represented in two's-complement notation (like Java's primitive integer types). BigInteger provides analogues to all of Java's primitive integer operators, and all relevant methods from java.lang.Math. Additionally, BigInteger provides operations for modular arithmetic, GCD calculation, primality testing, prime generation, bit manipulation, and a few other miscellaneous operations.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_27
El criptosistema de Rabin - SER
5.3 Implementación del Sistema de Encriptación de Rabin. El desarrollo de este punto radica principalmente en la explicación de la clase y su
implementación de la misma. Solo se explican las cinco clases que forman la medula del
sistema, con respecto a la interfase solo se detalla el funcionamiento para el usuario. 5.3.1| Implementación de la clase KetSet Esta clase es la encarga de generar las llaves publicas y privadas a partir del hecho que:
n = p * q, donde p y q son números primos muy grandes. Con esto, se definen como
llave privada el par de primos grandes (p , q) y como llave publica el resultado del
producto de los dos numeros primos ( n ).
Esta clase esta conformada por 3 variables que representan las llaves y los cinco
métodos que las generan y las muestran.
KetSet
q, p, n
KeySet( );
getPrime ( );
getP ( );
getQ ( );
getN ( );
Los métodos mas importantes para ser explicados son los siguientes:
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_28
El criptosistema de Rabin - SER
public KeySet (int size) { Size = size; long time = System.currentTimeMillis(); p = getPrime(time); while((p.mod(four)).compareTo(three) != 0){ time += 8; p = getPrime(time);
El constructor de la clase KeySet es realmente la encargada de generar las llaves n, p y q: aplicando n = p*q.
} time = System.currentTimeMillis(); q = getPrime(time); while((q.mod(four)).compareTo(three) != 0) { time += 12; q = getPrime(time); } n = p.multiply(q); }
Para poder generar un numero primo aleatorio grande se utiliza el constructor de la clase
BigInteger, como se muestra en la especificación. Para mas informes ver la
documentación de java 1.4.0.01 [11].
BigInteger(int bitLength, int certainty, Random rnd) Constructs a randomly generated positive BigInteger that is probably prime, with the specified bitLength.
Este método getPrime, hace uso del constructor BigInteger para generar el primo largo.
Como argumento se obtiene un numero de tipo long, la cual se utiliza para generar un
numero aleatorio que a su vez servia para obtener el numero primo largo. private static BigInteger getPrime ( long n ) { Random num = new Random(n); BigInteger prime = new BigInteger(Size, 100, num); return prime; }
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_29
El criptosistema de Rabin - SER
5.3.2 Implementación de la clase EncryptMessage.
En este caso, la clase esta formada por tres métodos; pero realmente el mas importante
de explicar es el encipher( ).
EncryptMessageq, p, n
plainText
cipherText
EncryptMessage( n , plainText)
getCipherText()
getPlainText()
encipher()
/* Matodo que encripta el Mensaje de plainText.*/ public void encipher() { StringTokenizer t = new StringTokenizer(plaintext, "\n"); while ( t.hasMoreTokens()) { // El mensaje se almacena linea a linea, en cipherText. String s = new String(); s = t.nextToken(); // Adiciona un bit extra al final de plaintext(Parte del Protocolo). byte[] temp = s.getBytes(); // Transforma una cadana a Bytes con el byte[] rabinbytes = new byte[temp.length + 1]; // objeto de obtener el tamaño del numero // bytes de cada cadena. System.arraycopy(temp, 0, rabinbytes, 0, temp.length); // Protocolo de reconocimiento. System.arraycopy(rabinbytes, (rabinbytes.length - 2), rabinbytes, (rabinbytes.length - 1), 1); BigInteger m = new BigInteger(rabinbytes); // Transforma la linea de mensaje en un BigInteger. c = m.modPow(two, n); ciphertext += c.toString() ; ciphertext += "\n"; } System.out.println("cipher text Completo: " + ciphertext); }
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_30
El criptosistema de Rabin - SER
Este método tiene realmente dos puntos de interesantes. Primero, se sigue al pie de la
letra el algoritmo de encriptación, pero la representación del mensaje se realiza por medio
de una secuencia de mensajes mas pequeños; Estos mensajes son una línea del
plainText, es decir que cada línea de texto representa un submensaje, la cual se debe de
encriptar. Segundo; Además como sabemos que el algoritmo de desencriptación se debe
de obtener 4 raíces, se agrega a cada línea el ultimo carácter dos veces con objeto de
identificar la raíz indicada o correcta. 5.3.3 Implementación de la clase EEC. Antes que nada debemos explicar un poquito que es el Algoritmo de Euclides.
Algoritmo de Euclides básico y extendido Algoritmo de Euclides
Sirve para calcular el máximo común divisor de dos números a y b. Para enunciar este algoritmo nos serviremos de una proposición y un teorema previos. Proposición Sean a ≤ b con b ≠ 0, por el algoritmo de la división tendremos que a = bq + r. Entonces se cumple: 1) Los divisores comunes de a y b también son divisores de r 2) Los divisores comunes de b y r también son divisores de a Demostración: (1) Sea c tal que c|a, c|b, entonces a = cq1, b = cq2. Luego cq2q + r = cq1 ⇒ r = c(q1 – q2·q) ⇒ c|r. (2) Supongamos ahora c tal que c|b, c|r. Por tanto b = cq1, r = cq2 y tendremos a = cq1q + cq2 ⇒ a = c(q1q+q2) ⇒ c|a. Teorema En una división el máximo común divisor del dividendo y el divisor es igual al máximo común divisor del divisor y el resto, es decir, si a = bq + r, con a, b, q, r∈Z, b ≠ 0, se cumple mcd(a,b) = mcd(b,r). Demostración: Como vimos antes, dividendo y divisor tienen los mismos divisores que divisor y resto. Por tanto, ambos tendrán el mismo máximo común divisor.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_31
El criptosistema de Rabin - SER
Algoritmo de Euclides Como mcd(a,b) = mcd(|a|,|b|), podemos suponer sin perdida de generalidad que a ≥ b > 0. Dividimos a por b, a = bq1 + r1 , con 0 ≤ r1< b Si r1 = 0, ya que a ≤ b, es obvio que b = mcd(a,b) y hemos terminado. Si r1 ≠ 0, dividimos b por r1, b = r1q2 + r2 , con 0 ≤ r2 < b Si r2 = 0, entonces mcd(b,r1) = r1 y por el teorema anterior mcd(b,r1) = r1 = mcd(a,b). Si r2 ≠ 0 continuamos dividiendo r1 por r2, y así sucesivamente De este modo obtenemos un conjunto de números r1 > r2 >...., de modo que llegaremos a un rn = 0. Entonces:
rn–1 = mcd(rn–2, rn–1) =...= mcd(b,r1) = mcd(a,b) Nota.- El número de pasos necesarios es como máximo 5 veces el número de dígitos del número más pequeño de entre los a, b por los que comenzamos a calcular el máximo común denominador Algoritmo extendido de Euclides Sirve para hallar los términos de la combinación lineal que da origen al máximo común divisor. Para ello se realiza el proceso inverso al seguido en el algoritmo de Euclides. Vamos a verlo con un ejemplo: Ejemplo: Calcular mcd(3120,270) y los números x, y tales que mcd(3120,270) = 3120x + 270y. 1.- Algoritmo de Euclides: 3120 = 11·270 + 150 270 = 1·150 + 120 150 = 1·120 + 30 120 = 4·30 + 0 30 = mcd(120,30) = mcd(150,120) = mcd(270,150) = mcd(3120,270) 30 = mcd(3120,270) 2.- Algoritmo extendido de Euclides: Realizamos el camino inverso al algoritmo de Euclides empezando por la expresión donde el máximo común divisor es igual al resto. Iremos sustituyendo valores con el objeto de llegar a los números de los que se hallo el máximo común denominador. 150–1·120 = 30 150–1·(270–1·150) = 30 → 150–270+150 = 30 → 2·150–270 = 30 2·(3120–11·270)–270 = 30 → 2·3120–22·270–270 = 30 → 2·3120–23·270–270 = 30 Así pues, mcd(3120, 270) = 30 = 2·3120+(–23)·270. Luego, x = 2, y = –23.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_32
El criptosistema de Rabin - SER
- Algoritmo de Euclides extendido:
Si mcd (a,b) = c, entonces c se puede expresar como combinación lineal de a y b, es decir, existen dos números k1 y k2 tal que:
c = k1*a + k2*b, con k1 y k2 números enteros. Dicho algoritmo determina los valores de k1 y k2 . Se trata de ir despejando en el Algortimo de Euclides desde la última división obtenida hasta llegar a la primera.
EECA
B
D
EEC(p_ in, q_in);
Compute( );
getA( );
getB( );
getD( );
/* * @(#)proyectos.Encriptamiento de Rabin 4/07/2002 * @author Oscar G. Landa Rosales * @version 1.0, 4/07/2002 * @since JDK_1.4.0 */ import java.math.*; /********************************************************* *Inmplementacion del algoritmo extendido de Euclides. *********************************************************/ class EEC{ private BigInteger p,q; // private BigInteger p,q; private BigInteger a,b,d; private BigInteger x1,x2,y1,y2,t1,t2; public EEC(BigInteger pin, BigInteger qin){ p = pin; q = qin; } public void compute( ){
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_33
El criptosistema de Rabin - SER
if (q.equals(BigInteger.valueOf(0))) { d = p; a = BigInteger.valueOf(1); b = BigInteger.valueOf(0); } else { x2 = BigInteger.valueOf(1); x1 = BigInteger.valueOf(0); y2 = BigInteger.valueOf(0); y1 = BigInteger.valueOf(1); while(q.compareTo(BigInteger.valueOf(0)) > 0){ t1 = p.divide(q); t2 = p.add((t1.multiply(q)).negate()); a = x2.add((t1.multiply(x1)).negate()); b = y2.add((t1.multiply(y1)).negate()); p = q; q = t2; x2 = x1; x1 = a; y2 = y1; y1 = b; } d = p; a = x2; b = y2; } } public BigInteger getD( ){ return d; } public BigInteger getA( ){ return a; } public BigInteger getB( ){ return b; } }
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_34
El criptosistema de Rabin - SER
5.3.4 Implementación de la clase Roots.
Rootsq, p, n
plainText
cipherText
Roots( p_in, q_in, cipherText)
computeRoots( )
/* * @(#)proyectos.Encriptamiento de Rabin 24/07/2002 * * "Codigos y Criptografia" * CENTRO DE INVESTIGACIÓN Y DE ESTUDIOS AVANZADOS DEL * INSTITUTO POLITECNICO NACIONAL. [CINVESTAV-IPN] * CINVESTAV - IPN * * Encuentra las cuatro raíces m1, m2, m3 y m4 de [c mod (n^2)]. * * @author Oscar G. Landa Rosales * @version 1.0, 24/07/2002 * @since JDK_1.4.0 * */ import java.math.*; import java.util.*; public class Roots{ private final BigInteger one = BigInteger.valueOf(1); private final BigInteger four = BigInteger.valueOf(4); private BigInteger p; private BigInteger q; private BigInteger n; private BigInteger cipher; private BigInteger roots[] = new BigInteger[4];
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_35
El criptosistema de Rabin - SER
/* Como argumentos se ingresa p, q y ciphertext. */ public Roots(BigInteger pin, BigInteger qin, BigInteger c){ p = pin; q = qin; n = p.multiply(q); cipher = c; } /* Optiene las raices r, s, x, y de */ public BigInteger[] computeRoots( ) { BigInteger a, b, r, s, x, y, exp; EEC eec; exp = p.add(one).divide(four); r = cipher.modPow(exp, p); exp = q.add(one).divide(four); s = cipher.modPow(exp, q); if (p.compareTo(q) > 0){ eec = new EEC(p,q); } else { eec = new EEC(q,p); } eec.compute(); a = eec.getA(); b = eec.getB(); x = a.multiply(p).multiply(s).add(b.multiply(q).mu y = a.multiply(p).multiply(s).add(b.multiply(q).mu roots[0] = x; roots[1] = y; roots[2] = x.negate().mod(n); roots[3] = y.negate().mod(n);
Se sigue los pasos del algoritmo tradicional,
para obtener las 4 raíces.
Se calcula r = c (p+1)/4 mod p.
Se calcula s = c(q+1)/4 mod q.
if(cipher.compareTo(roots[0].modPow(BigIntege System.out.println("Raiz No Valida -> x <-"); if(cipher.compareTo(roots[1].modPow(BigIntege System.out.println("Raiz No Valida -> y <-"); if(cipher.compareTo(roots[2].modPow(BigIntege System.out.println("Raiz No Valida -> -x <-"); if(cipher.compareTo(roots[3].modPow(BigIntege System.out.println("Raiz No Valida -> -y <-"); return roots; } }
Oscar Gonzalo Landa Rosales
Se calcula el Algoritmo Extendido de E.
Se calcula x = (aps + bqr) mod n.
Se calcula y = (aps - bqr) mod n.
6. Las cuatro raices del c mod n son:
x, -x mod n, y, and -y mod n.
ltiply(r)).mod(n); ltiply(r).negate()).mod(n);
r.valueOf(2),n)) != 0)
r.valueOf(2),n)) != 0)
r.valueOf(2),n)) != 0)
r.valueOf(2),n)) != 0)
- Códigos y Criptografía - Página_36
El criptosistema de Rabin - SER
5.3.4 Implementación de la clase DecryptMessage.
Como punto final de la desencriptación del funcionamiento del sistema; la clase de
DecryptMessage tiene la función de regresar el texto plano de uno encriptado. Esta clase
contiene solo dos métodos; pero el método mas importante es el constructor
DecryptMessage, que acepta las raíces provenientes de la clase Rotos.
DecryptMessage
plainText
DecryptMessage(BigInteger[] roots)
getPlainText()
Este método solo valida si alguno de las cuatro raíces cumple con el protocolo de
encriptación que se dio para poder identificar la raíz correcta. El mensaje que cumpla que
se repite los dos últimos caracteres de la línea, esa raíz es la correcta. /* Metodo que desencripta el mensaje de una linea de cipherText.*/ public DecryptMessage(BigInteger[] roots){ // Verifica cual de las raíces cumple con el protocolo. for(int i = 0; i<4;i++){ byte[] mes = roots[i].toByteArray(); if( mes[mes.length - 2] == mes[mes.length - 1]){ plaintext = new String(mes,0,(mes.length - 1)); } } }
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_37
El criptosistema de Rabin - SER
5.4 Desarrollo de la Interfase del SER. En este punto del documento; se describe el funcionamiento de la interfase del usuario,
como esta organizado. Como parte de la descripción de la interfase del sistema; este,
esta dividido en dos partes importantes la parte de generación de llaves y la parte de
encriptación / desencriptación. El Orden de cómo debe de ejecutarse no importa; con
esto se quiere decir que ya sea primero se generen las llaves o primero se llenes los
cuadros de texto del plano o del encriptado. Pero deben de haberse hecho estos dos
pasos para poder ejecutar los botones de encriptación o desencriptación si no, esto seria
incorrecto.
Área que nuestra la llave Publica
Árconpla
Área que nuestra la llave privada (p , q).
ea que es posible edi objeto de poner el tno para ser encripta
Oscar Gonzalo Landa R
Botón que permite general la llave publica y privada a partir de números primos aleatorios.
tar exto do.
enes
osales
Área que es posible editar con objeto de poner el texto
encriptado para ser desencriptado.
Botones que realizan la labor de criptar y desencriptar los textos que tén entre las cajas de encriptación o
de desencriptación.
- Códigos y Criptografía - Página_38
El criptosistema de Rabin - SER
Aquí muestra un ejemplo de ejecución del sistema. Una nota importante; cuando se
vuelve a generar una llave, y ya se había encriptó algún mensaje entonces la
desencriptación será imposible. Si no se guardo esta llaves con la cual se encriptó
entonces jamas se poderia desencriotar. 6. Descripción del Sistema
6.1 Código del fuente del Sistema. El proyecto consta de 7 archivos fuente, cada uno ya explicado anteriormente, excepto el
archivo Rabin.java, que es el encargado de ejecutar la clase RabinFrame, pues esta clase
contiene el public static void main( String [ ] argns) y crea una instancia de RabinFrame.
Estos archivos están en el directorio src.
EEC.java EncryptMessage.java KeySet.java Rabin.java
RabinFrame.java Roots.java DecryptMessage.java
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_39
El criptosistema de Rabin - SER
6.2 Como poder ejecutar el SER.
Para poder ejecutar el Sistema de Encriptación de Rabin se debe estar en el directorio
binarios, es en donde se encuentran los archivos ya compilados y listos para ejecutar
(Archivos de Bytecode). Los archivos que contiene el código fuente del proyecto, se
encuentran con extensión .java y los binarios con extensión *.class. Y para poder ejecutar
el sistema, escriba en un shell dentro del directorio binarios. Java Rabin
Es importante mencionar que el sistema en donde se quiera ejecutar debe contener una
versión de java SDK 2, ya sea 1.3.x o la ultima versión de java que es 1.4.0.01. El sistema
correrá sin ningún problema.
7. Conclusiones. Los esquemas de encriptación de clave simétrica y clave pública tienen varias ventajas y
desventajas, y algunos de éstas son comunes a ambos.
Ventajas de la criptografía con clave pública
Se debe guardar sólo la cave privada confidencial (la autenticidad de la claves públicas debe, sin embargo, ser garantizada). La administración de claves en una red requiere la presencia del funcionamiento de sólo un TTP en oposición al uso indispensable de varios TTP. Dependiendo del modo de uso, un par de clave privada/clave pública quedaría inalterado por períodos considerables de tiempo Muchos esquemas de clave pública son mecanismos relativamente eficaces para las firmas digitales. La clave que describe la función de verificación pública es típicamente más pequeña que la clave que corresponde a la clave simétrica. En una red grande, el número de claves necesarias sería considerablemente más pequeño que en el contexto de clave simétrica.
Desventajas de la encriptación con clave pública.
La tasa de manejo de datos para el más popular método de encriptación con clave pública son de varios órdenes de magnitud más lentos que el mejor esquemas con clave simétrica. El tamaño de las claves es típicamente más largo que para el cifrado con clave simétrica , y el tamaño del esquema de firma de clave pública es más largo que el de las etiquetas proporcionado por la técnica de autenticación de los datos con clave simétrica. No hay un esquema de clave publica que provea seguridad total (lo mismo se puede decir del cifrado por bloque). Los esquemas de encripción más eficaces de clave pública basaron su garantía en los problemas de un pequeños conjunto de números-teóricos.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_40
El criptosistema de Rabin - SER
La criptografía de clave pública no tiene una extensiva historia como la criptografía de clave privada, ya que sólo se descubrió a mediados de los 70’s.
Una propiedad deseable de cualquiera esquema de encripción es que quebrarlo sea tan difícil
como resolver computacionalmente el problema que desde siempre ha tenido una gran dificultad,
como es la factorización de un número o el problema del algoritmo discreto. Se cree ampliamente
que romper el esquema de encripción RSA , es tan difícil como factorizar el modulo de n, aunque
no se ha dado ninguna prueba de esta equivalencia.
El esquema de encripción de clave pública de Rabin fue el primer ejemplo de un algoritmo con un
probable seguro esquema de encripción - el problema de un adversario pasivo que puede recobrar
texto puro de algún texto cifrado es computacionalmente equivalente a factorizar. (Eficacia) el
método de encripción de Rabin es sumamente rápido ya que sólo involucra una simple raíz
cuadrada modular. En comparación con el sistema RSA, con e = 3 toma una multiplicación
modular y una raíz cuadrada modular. La desencriptación de Rabin es más lenta que la encripción,
pero es comparable en rapidez con la desencriptación del RSA.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_41
El criptosistema de Rabin - SER
8. La Propuesta de Java Java, como lenguaje de programación y como conjunto de herramientas para desarrollo de
aplicaciones en red, propone su propio modelo de seguridad, con el objetivo primordial de evitar
que un programa dañe el sistema de cómputo del usuario, y de que lea información privada del
sistema [9]. Conforme Java va evolucionando, el modelo de seguridad ha ido cambiando, e
incorporando más funcionalidades que logran otras metas de seguridad además de las dos
primordiales, algunas de éstas ya incluidas en la versión 1.4. Por ejemplo, autenticación de la
identidad de los participantes; encriptación de la información transmitida; auditación de
operaciones críticas para poderse analizar en caso de problemas; controles que eviten que un
programa consuma demasiados recursos. Proveyendo de facilidades de empaquetamiento y firma
de archivos, generación y administración de llaves y certicados, huellas digitales(message
digests).
El modelo de seguridad utiliza como concepto central la caja de arena o sandbox, que define el
espacio donde un programa puede operar. De manera análoga, la caja de arena o corral donde se
deja a un niño jugando define una región y recursos (número y tipo de juguetes) que son
suficientes para que se entretenga, mientras que protege al resto de la casa de él. Las
componentes básicas del modelo de seguridad de Java permiten definir una caja de arena. Cada
una de éstas tiene una función especifica de seguridad, que se relacionan con las demás como un
todo.
1. Lenguaje y Compilador: A este nivel, Java introduce, desde el diseño del lenguaje del
compilador, la idea de ofrecer seguridad a partir de un lenguaje robusto y de
restricciones a lo que se puede hacer a nivel de programación y de garantizar que
esas restricciones se verifiquen a tiempo de compilación.
Java es un lenguaje fuertemente tipificado. La planificación de memoria no se deja al
compilador sino que se hace hasta el momento de ejecución. La liberación de objetos
en memoria que han dejado de ser referenciados, la hace Java de forma automática
por medio de un recolector de basura. No se permite el uso de apuntadores.
El compilador de Java verifica que los programas no asignen ni manejen memoria
simulando apuntadores ilegales. Es el intérprete quien decide dónde ligar campos y
métodos a memoria. Rechaza código que no cumpla con las reglas del lenguaje
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_42
El criptosistema de Rabin - SER
relacionadas a su naturaleza fuertemente tipificada. Verifica que las operaciones sobre
arreglos se ajusten a los límites sobre el tamaño de éstos. Verifica que el acceso a
clases, variables, interfaces y métodos sea consistente con su declaración, evitando de
esta manera que se usen de modo no previsto. Verifica que todo acceso a objeto se
haga a través de su interfaz pública, asegurando con ello que, por ejemplo: los
métodos de un objeto private permanezcan privados. El compilador evita que se lean
variables no inicializadas y que se modifiquen constantes.
2. Verificador de Bytecodes: Antes de ejecutar cualquier contenido ejecutable importado
por la red. Java verifica que ese código (bytecodes) cumpla con las restricciones
iniciales de seguridad impuestas por el modelo.
3. Cargador de Clases: Provee una clase que es requerida de accesar por la máquina
virtual de Java. Para definir y cargar la clase, ejecuta varios pasos, como: si ya había
sido cargada, la entrega inmediatamente, consulta al administrador de seguridad para
verificar que el programa tiene permiso de accesar la clase, se encarga de que clases
bajadas de la red no sobre escriban a clases locales, el código de bytes es enviado al
verificador de bytecodes; carga otras clases referenciadas por la recién cargada. Se
encarga de evitar conflictos de nombres de distintas clases. Java permite identificar el
origen de una clase, si está firmada, y los permisos que la clase tiene
otorgados.
4. Administrador de Seguridad: Controlador de Acceso. El administrador de seguridad es
el encargado de determinar la mayoría de los parámetros de la caja de arena. Cada
vez que un programa desea hacer una operación potencialmente peligrosa, le pide
permiso al administrador de seguridad. Java ofrece un paquete de clases que
configuran las restricciones de seguridad que el usuario quiere imponer a cada
aplicación en particular para accesar los recursos locales. Las aplicaciones Java, por
omisión, no tienen ningún administrador de seguridad, cada aplicación puede
implementar una política de seguridad especifica, congurando al administrador de
seguridad. Todo esto lo puede lograr el administrador, utilizando el controlador de
acceso.
Es importante notar que el navegador o browser no es una parte de Java. Hay navegadores que ni siquiera están escritos en Java. La seguridad de un navegador no esta garantizada por el
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_43
El criptosistema de Rabin - SER
hecho de que Java sea seguro, sino de su propio diseño de seguridad, de cómo interactúa con el sistema operativo de la máquina donde se ejecuta, y de cómo usa el modelo de seguridad de Java, si es que esta escrito en Java.
Como ejemplo de las restricciones de seguridad implementadas sobre un visualizador listaremos
algunas típicas de Netscape para un applet que se carga de la red.
1. No puede crear un cargador de clases o un administrador de seguridad.
2. No puede crear clases en el espacio de nombres local.
3. No puede accesar paquetes locales fuera de los estándares.
4. No puede accesar archivos y directorios del sistema local.
5. Sólo puede hacer conexiones de red al host de donde se cargó.
6. No puede crear o instalar manejadores de protocolos o implementar sockets.
7. No puede leer, del sistema local, información sobre el usuario.
8. No puede modificar utilerías del sistema local.
9. No puede terminar otros programas o el sistema mismo.
10. No puede accesar hilos de control (threads) fuera de su grupo.
Java ofrece la opción de firma de applets y archivos, para garantizar que no se carguen applets o
archivos sin ser verificados por un esquema de firma digital. Otro problema serio es que
cuando se carga una aplicación para ser ejecutada localmente, esta aplicación está integrada por
varios archivos, cada uno de los cuales se cargan uno a uno, con la consecuente espera.
Como solución, Java ofrece empaquetar en un sólo archivo, todos los archivos relacionados a una
aplicación, ahorrando así tiempo de espera. Además este archivo integrado se puede firmar, lo que
equivale a firmar todo el applet. La facilidad que otorga este beneficio integrado, se llama Java
ARchive (JAR) y esta disponible a partir de JDK 1.1
Java implementa adicionalmente algoritmos criptográficos de llave publica y de llave secreta, así
como también algoritmos para certificar archivos y documentos como una facilidad para que el
usuario configure su propio esquema de control y transferencia de archivos y documentos.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_44
El criptosistema de Rabin - SER
9. Vocabulario sobre criptografía Privacidad: se refiere a tener control en el acceso de la información y solo permitirlo a personas autorizadas. Autenticidad: se refiere a estar seguros de la identidad de una entidad ya sea mensaje, persona, servidor etc. Integridad: se refiere a que la información no sea modificada. No-rechazo: se refiere a no poder negar la autoría de un mensaje o de una transacción. Criptografía: es el conjunto de técnicas (entre algoritmos y métodos matemáticos) que resuelven los problemas de autenticidad, privacidad, integridad y no rechazo en la transmisión de la información. Texto original: es un documento antes de ser cifrado. Cifrar : es la acción que produce un texto cifrado (Ilegible) a partir de un texto original. Texto cifrado: es un documento que ha sido cifrado. Descifrar: es la acción inversa de cifrar, es decir, convierte un texto cifrado a otro legible (texto original). Firma digital: es un método que usa criptografía asimétrica y permite autenticar una entidad (persona o servidor), tiene una función igual que la firma convencional. Consiste en dos procesos, uno de firma y otro de verificación de la firma. Físicamente es una cadena de caracteres que se adjunta al documento. Criptografía simétrica: es el conjunto de métodos que permite establecer comunicación cifrada, con la propiedad de que ambos lados de la comunicación tienen la misma clave, y ésta es secreta. Criptografía asimétrica: es el conjunto de métodos que permite establecer comunicación cifrada, donde una de las claves es pública y la otra clave es privada (secreta). Cada usuario tiene un par de claves una pública y otra privada. Clave privada: es la clave secreta que se usa en la criptografía asimétrica. Clave pública: es la clave públicamente conocida, que se usa en la criptografía asimétrica. Clave simétrica: es la clave secreta que tienen ambos lados de una comunicación en la criptografía simétrica. Par de claves: se refiere al par de claves una privada y otra pública usadas en la criptografía asimétrica. Longitud de la clave: es el número de bits (ceros y unos) que tienen las claves y es solo uno de los parámetros de los que depende la seguridad de un sistema criptográfico. Actualmente se usan 128 para las claves simétricas, 1024 para el sistema asimétrico RSA, 163 para los sistemas asimétricos que usan curvas elípticas. Firma digital con apéndice: método de firma digital que requiere al mensaje como entrada en el proceso de verificación. Firma digital con mensaje recuperable: método de firma digital que no requiere al mensaje como entrada en el proceso de verificación. El mensaje se recupera después de que se ha verificado la firma. Certificado digital: físicamente es un archivo de hasta 2K de tamaño que contiene principalmente, los datos de una entidad una persona o un servidor, la clave pública de esa entidad, y la firma de una autoridad certificadora que es reconocida con la capacidad de poder comprobar la identidad de la persona (o servidor) y válida la clave pública que es asociada a la entidad.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_45
El criptosistema de Rabin - SER
Familia criptográfica: es el conjunto de sistemas criptográficos que basan su seguridad en el mismo problema matemático, actualmente las familias criptográficas más conocidas son las que basan su seguridad en el Problema de Factorización Entera (RSA, RW), los que la basan en el problema del logaritmo discreto (DH, DSA), y los que la basan en el problema del logaritmo discreto elíptico (DHE, DSAE, MQV). Función hash: es una función de un solo sentido, resistente a colisiones que asocia una archivo o documento de longitud arbitraria a una cadena de longitud constante (se usa actualmente 160b de salida), las funciones hash más conocidas son: MD5, SHA1, RIPMED 160. Cifrador de Bloque: es un sistema criptográfico que cifra de bloques en bloque, usualmente cada bloque es de 128 bits. Algunos sistemas conocido son, TDES, RC5, AES. Cifrador de Flujo: es un sistema criptográfico de cifra de bit en bit, los más conocidos son, RC4, SEAL, WAKE. Generador de números seudoaleatorios: es una función que tiene como entrada una cadena (conjunto de bits) llamada semilla y como salida otra cadena de bits que al aplicarle ciertas pruebas de aleatoriedad pasan con un porcentaje aceptable (alrededor de un 95%). Primitiva criptográfica: es la función más básica que compone un sistema criptográfico, existen la primitiva de cifrado, la primitiva de descifrado, la primitiva de firma, la primitiva de verificación de firma etc. Esquema criptográfico: es un conjunto de primitivas que componen una aplicación criptográfica más completa, como el esquema de firma digital (compuesta de la primitiva de firma y la de verificación), el esquema de cifrado (compuesta con la primitiva de cifrado y la de descifrado) etc. Protocolo (criptográfico): es la parte más visible de la aplicación y esta compuesto de esquemas criptográficos conjuntamente con otras operaciones que permiten proporcionar seguridad a una aplicación mas especifica, por ejemplo el protocolo SSL, SET, SMIME, IPsec etc. Autoridad certificadora: es una entidad (compañía) que es reconocida para poder certificar la asociación de una clave pública a una persona o servidor. Comercio electrónico: es todo lo relacionado con realizar comercio principalmente por Internet. Compartición de secretos: es un esquema criptográfico que tiene como entrada un secreto (por ejemplo una clave criptográfica) y como salida un numero n de partes del secreto y todas o algunas de éstas n partes sirven para reconstruir el secreto. Criptografía Visual: es un esquema de compartición de secretos donde el secreto es una imagen y las partes son también varias imágenes. La ventaja de este tipo de cripotgrafía es que no es necesaria una computadora para la reconstrucción del secreto. Dinero electrónico: es un número (de alrededor de 100 dígitos) al que se le asocia cierto valor y pude ser usado como cualquier otro tipo de dinero. Este número va acompañado de la firma del dueño o de un banco. Número primo: es un número entero que no tiene divisores diferentes a 1 y así mismo, ejemplo 2,3,5,7,11, … Generador probabilístico de números primos: es un proceso que tiene como entrada un número entero y como salida un probable número primo con gran grado de aceptación. El método más aceptado para generar primos es el de Miller Rabin. Primo industrial: es un número primo generado probabilísticamente que tiene a lo más 1/(2^100) de probabilidad de error (de no ser número primo).
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_46
El criptosistema de Rabin - SER
Problema de Factorización: es el problema inverso a la multiplicación, es decir el problema de encontrar los factores conocido el producto. En criptografía los números a factorizar son los productos de dos números primos de la misma longitud, el producto tiene al menos 768 bits. Actualmente se han podido factorizar números de hasta 512 bits (155 dígitos) producto de dos primos del mismo tamaño (256 bits). 10. Referencias
• [1] Introducción a la criptografia. Pino Caballero Gil. Editorial RA-MA.
• [2] Codificación de la información. Carlos Munuera, Juan Tena. Universidad de Valladolid.
• [3] Códigos secretos. Andrea Sgarro. Editorial Piramides.
• [4] Garfinkel Simson. Criptografía - procesamiento de datos- medidas de seguridad, 1995 . (U. de Chile).
• [5] http://www.Kriptopolis.com
• [6] http://www.eff.org/pub/Privacy/Crypto_misc/DESCracker/HTML/ 19990119_deschallenge3.html
• [7] http://www.pgp.com
• [8] http://www.gvsu.edu/mathstat/enigma/enigma.html
• [9] Java Technology Home Page: http://java.sun.com/security.
• [10] Handbook of Applied Cryptography, by A. Menezes, P. van Oorschot, and S. Vanstone, CRC Press, 1996.
• [11] JavaTM 2 SDK, Standard Edition Documentation.
Oscar Gonzalo Landa Rosales - Códigos y Criptografía - Página_47