criptosistema rabin, merkle-hellman

23
CRIPTOGRAFÍA CLÁSICA Cifrado Asimétrico: Rabin, Merkle-Hellman Docente: Juan Carlos Broncano Torres FISE-UTP Lima-Perú

Upload: juan-carlos-broncanotorres

Post on 18-Jul-2015

152 views

Category:

Education


1 download

TRANSCRIPT

CRIPTOGRAFÍA CLÁSICA

Cifrado Asimétrico: Rabin,

Merkle-Hellman

Docente: Juan Carlos Broncano Torres FISE-UTP Lima-Perú

Criptograma RABIN

Este criptosistema es asimétrico cuya seguridad esta basada en la complejidad del problema de la factorización y el problema de la raíz cuadrada modulo un número compuesto N , tiene cierta

similaridad con el RSA. El algoritmo de este sistema criptográfico fue publicado en enero de 1979 por el investigador de origen israelí Michael Oser Rabin, quien junto con Dana Scott ganaron el premio Turing por su trabajo sobre autómatas no deterministas, el cual es un concepto clave para la teoría de complejidad computacional, en

particular para describir las clases de complejidad P y NP.

Antes de explicar el criptosistema de Rabin sería conveniente aclarar el concepto de raíces en operaciones modulares. Se dice que la raíz de un número es aquel que multiplicado por sí mismo, da ese número. Pues bien, en Aritmetica modular, esto sigue siendo así. Pero claro, un número al cuadrado en módulo n puede ser que sea mayor que ese n, por lo que al hacer módulo, se reduce su valor. Por lo tanto, un mismo número puede tener varias raíces. En el álgebra habitual, un número tiene 2 raíces reales (la positiva y la negativa), pero cuando n es el producto de 2 primos, existen valores que tienen 4 raíces distintas. De hecho, lo normal es que tengan 4 raíces. Y tendrán 4 raíces todos los número que no tengan como divisor a uno de los dos primos con los que se generó n, en cuyo caso tendrán sólo 2.

Criptosistema RABIN Dado un número N de 10100 cifras, N = p.q con p y q primos tal que. p≡3mod4; q≡3mod4. Sea M = C =ZN . Definimos el espacio de claves como:

K = { (n,p,q,β) / 0≤ β ≤ n-1 }

Para cada clave k∈ K, dada por k= (n,p,q, β) la regla de cifrado: encRAB:G → G es definido como: encRAB(x):y=x(x+ β)modn y el Estado de descifrado: descELG: G → G es definido como: descRAB(y)=

24

2 y

la clave pública Rabin es (N, β) y p;q se mantienen en privado. La función de encripción no es inyectiva, así que la decripción es ambigua pues existe cuatro posibles resultados.

En general, el receptor del mensaje no tiene forma de distinguir entre estos cuatro textos planos posibles a menos que el texto plano contenga suficiente redundancia como para eliminar tres de las cuatro posibilidades.

Un elemento clave para poder calcular es el hecho que p≡3mod 4 y q≡3mod 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.

Observación

Algoritmo de Rabin

El sistema de llave asimétrica de Rabin se basa en el problema de cálcular 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 3mod 4. Estos primos son la clave privada. La clave pública es su producto, y luego se elige al azar un valor: 0 ≤ < n-1

Para codificar un mensaje m, simplemente se calcula:

nbmmc mod

La decodificación del mensaje se hace calculando lo siguiente:

qpn .

24

2 cm

Observación Es interesante el hecho de que para el caso en que un primo p sea congruente a 1 módulo 4 no se conoce ningún algoritmo polinomial determinista para hallar las raíces cuadradas de residuos cuadráticos modulo p.

No hay actualmente un estandar para el algoritmo Rabin pero es explicado en varios libros. El proyecto IEEE P1363 podría proponer un estandar y de esta manera hacerlo ampliamente utilizado.

Diseño e Implementación del Sistema de Encriptación de Rabin Para el desarrollo del diseño e Implementación se tomaran en consideración dos cosas: El lenguaje de programación. 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.

Aritmética de precisión Infinita.

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.

Que ofrece Java para la Aritmética de precisión Infinita: Package java.math Description Class BigInteger.

El Criptosistema de Merkle y Hellman

Es uno de los inventores de la criptografía de clave pública, el inventor de hash criptográfica, y más recientemente, un investigador y conferencista en la nanotecnología molecular y la criónica. Merkle aparece en la novela de ciencia ficción La era del diamante, que implica la nanotecnología.

Merkle era el gerente de desarrollo compilador Elxsi a partir de 1980. En 1988, se convirtió en un científico de investigación en Xerox PARC. En 1999 se convirtió en un teórico de la nanotecnología para Zyvex.

Hellman es famoso por ser el inventor junto a Diffie de la criptografía de clave pública y junto con Ralph Merkle publicaron en 1976 el New Directions in Criptografhy que introducía un cambio radical, un nuevo método de distribución de claves que solucionó uno de los mayores problemas de la criptografía hasta entonces, la distribución de claves.

Es autor de más de setenta trabajos técnicos ( haga clic para ver la lista de la publicación) , diez patentes de Estados Unidos y un número de equivalentes extranjeros.

Problema de la mochila

En algoritmia, el problema de la mochila, comúnmente abreviado por KP (del inglés Knapsack problem) es un problema de optimización combinatoria, es decir, que busca la mejor solución entre un conjunto de posibles soluciones a un problema. Modela una situación análoga al llenar una mochila, incapaz de soportar más de un peso determinado, con todo o parte de un conjunto de objetos, cada uno

con un peso y valor específicos. Los objetos colocados en la mochila deben maximizar el valor total sin exceder el peso máximo.

El problema de la mochila es uno de los 21 problemas NP-completos de Richard Karp, establecidos por el informático teórico en un famoso artículo de 1972. Ha sido intensamente estudiado desde mediados del siglo XX y se hace referencia a él en el año 1897, en un artículo de George Mathews Ballard. Si bien la formulación del problema es sencilla, su resolución es más compleja, la estructura única del problema, y el hecho de que se presente como un subproblema de otros problemas más generales, lo convierten en un problema frecuente en la investigación.

El problema matemático de la mochila, referido ahora a números y no a los elementos físicos que puedan entrar en ella, se plantea como sigue:

Dada la siguiente secuencia de m números enteros positivos S = {S1, S2, S3, ..., Sm-2, Sm-1, Sm} y un valor u objetivo T, se pide encontrar un subconjunto de S SS = {Sa, Sb, ..., Sj} que cumpla con ese objetivo T:

T = SS = Sa + Sb + ... + Sj

Solución al problema de la mochila Tenemos la mochila S = {20, 5, 7, 36, 13, 2} con m = 6 y el valor T = 35. Se pide encontrar una solución, si es que ésta existe. En este momento no importa que los valores de la mochila no estén ordenados. SOLUCIÓN: Sin hacer ningún cálculo mental, podemos recorrer todos los valores (se puede descartar el elemento S4 pues es mayor que el objetivo T) de la mochila S, bien de izquierda a derecha o al revés (da igual el sentido elegido) y restaremos el elemento i-ésimo si es menor o igual que el objetivo T en esa etapa del algoritmo y termina cuando T = 0, como se indica:

S = {S1, S2, S3, S4, S5, S6} = {20, 5, 7, 36, 13, 2}; T = 35 S1=20 ¿Es menor que objetivo T=35? Sí T = 35-20 = 15 S2=5 ¿Es menor que objetivo T=15? Sí T = 15-5 = 10 S3=7 ¿Es menor que objetivo T=10? Sí T = 10-7 = 3 S4=36 ¿Es menor que objetivo T=3? No T = 3 S5=13 ¿Es menor que objetivo T=3? No T = 3 S6=2 ¿Es menor que objetivo T=3? Sí T = 3-2 = 1 0 Se ha recorrido toda la mochila y no se ha encontrado solución. En cambio sí existe una solución:

SS = {S1+S5+S6} = 20+13+2 = 35

Vi = [1,0,0,0,1,1]

¿Puede haber soluciones múltiples? Si para la misma mochila S = {20, 5, 7, 36, 13, 2} buscamos ahora el valor T = 27, encontramos tres soluciones válidas:

SS1 = {S1+S3} = 20+7; SS2 = {S1+S2+S6} = 20+5+2 ; SS3 = {S2+S3+S5+S6} = 5+7+13+2

Esto sería inadmisible en un sistema de cifra puesto que el resultado de una operación de descifrado debe ser única ya que proviene de un único mensaje. La solución será el uso de las denominadas mochilas simples en que la solución al problema de la mochila, si existe, es única.

Esto sería inadmisible en un sistema de cifra puesto que el resultado de una operación de descifrado debe ser única ya que proviene de un único mensaje. La solución será el uso de las denominadas mochilas simples en que la solución al problema de la mochila, si existe, es única.

Mochila simple o supercreciente Una mochila es simple o supercreciente si el elemento Sk es mayor que la suma de los elementos que le anteceden:

k-1

Sk Sj j = 1

Por ejemplo, la mochila S = {2, 3, 7, 13, 28, 55, 110, 221} con m = 8 elementos es supercreciente y la solución para un objetivo T = 148 es única: Vi = [S2+S3+S5+S7]. Para resolver cualquier valor T válido para esta mochila, ésta se recorre de derecha a izquierda (desde el valor mayor al menor) una sola vez con el algoritmo ya visto. Compruebe que para T = 289, 196 y 353 los vectores son V1 = 00010101; V2 = 01001110; V3 = 10110011.

Operación de cifra con mochila simple

Se representa la información en binario y se pasan los bits por la mochila. Con la mochila S = {2, 4, 10, 19, 40} de m = 5 elementos cifraremos el mensaje M = ADIOS. SOLUCIÓN Usando código ASCII/ANSI: A = 01000001; D = 01000100; I = 01001001; O = 01001111; S = 01010011

M = 01000 00101 00010 00100 10010 10011 11010 10011

C = (4), (10+40), (19), (10), (2+19), (2+19+40), (2+4+19), (2+19+40)

C = 4, 50, 19, 10, 21, 61, 25, 61

Descifrado con mochila simple

C = 4, 50, 19, 10, 21, 61, 25, 61 S = {2, 4, 10, 19, 40}

La operación de descifrado es elemental: pasamos por la mochila los valores de C, encontramos el vector Vi y por último agrupamos el resultado en grupos de 8 bits. En este caso: 4 Vi = 01000 50 Vi = 00101, etc.

Se forma grupos de m en m

Se multiplica bloque a bloque los elementos de M con S

Se calcula los vi usando el algoritmo propuesto

Criptosistema de Merkle-Hellman

En 1978 Ralph Merkle y Martin Hellman proponen un sistema de cifra de clave pública denominado Mochila con Trampa. El algoritmo se basa en crear una mochila difícil a partir de una mochila simple de forma que el cifrado se haga con la mochila difícil y el descifrado con la mochila simple o fácil. Se puede pasar fácilmente de la mochila simple a la difícil o viceversa usando una trampa.

La trampa será nuestra clave secreta. La mochila difícil será nuestra clave pública.

Una función unidireccional

Diseño mochila de Merkle y Hellman

1. Se selecciona una mochila supercreciente de m elementos: S’ = {S1’, S2’, ..., Sm’}.

2. Se elige un entero (módulo de trabajo) mayor que la suma de los elementos de la mochila.

m

Si’ i = 1

más fácil: 2Sm’

3. Se elige un entero primo relativo con .

mcd (,) = 1 Se asegura el

inverso

Se recomienda que no tenga factores con los elementos de S’

4. Se multiplica S’ por mod .

Si = Si’ mod

Obteniendo una mochila difícil S = {S1, S2, ..., Sm}

5. Se calcula el inverso de en el cuerpo .

-1 = inv (,)

Clave privada: , -1

Clave pública: mochila S

CIFRADO: C = S M como S = S’ mod C = S’ M mod

DESCIFRADO: M = -1 C mod Entonces obtenemos: S’ M

Esto se interpreta como encontrar los vectores que cumplan con un valor de T.

Parámetros para el diseño de mochilas a) Tamaño de la mochila m 100

b) Módulo uniforme en el siguiente intervalo: [22m+1+1, 22m+2-1 (2m+2) bits

Si m = 100: todos los elementos de S son de 202 bits.

c) Valores de Si’ elegidos uniformemente en el intervalo: [(2i-1-1).2m +1, 2i-1.2m

Si m = 100: 1 S1’ 2100 S2’ 2101 S3’ 2102 ...

d) Elegir un valor x en el intervalo [2, -2. El factor se calcula como: = mcd(, x)

Mochila con parámetros proporcionales

a) Mochila con m = 6

b) Intervalo : [22m+1+1, 22m+2-1 = [226+1+1, 226 +2-1 =[213+1, 214+1 = [8193, 16385 Sea = 13515

c) Elección de los valores S’i:

i=1 : [(21-1-1)26+1, (21-1) 26 1 S1’ 64

i=2 : [(22-1-1)26+1, (22-1) 26 65 S2’ 128

i=3 : [(23-1-1)26+1, (23-1) 26 193 S3’ 256

i=4 : [(24-1-1)26+1, (24-1) 26 449 S4’ 512

i=5 : [(25-1-1)26+1, (25-1) 26 961 S5’ 1024

i=6 : [(26-1-1)26+1, (26-1) 26 1985 S6’ 2048

UNA ELECCIÓN

S1’ = 39

S2’ = 72

S3’ = 216

S4’ = 463

S5’ = 1.001

S6’ = 1.996

Todos estos elementos serán de (2m+2) = 14 bits

d) Cálculo del factor . Buscamos un valor x en el intervalo [2, -2 = [2, 13513, por ejemplo x = 9805. Como el máximo común divisor entre = 13515 y x = 9805 es 265, luego = 9805/265 = 37. Vamos a elegir: = 37 de forma que -1 = 4018 inv (37, 13515) = 4018 Luego, la mochila simple y la clave privada serán: Mochila simple: S’ = {39,72, 216, 463, 1001, 1996} Clave Privada: = 13515 -1 = 4018

Mochila simple: S’ = {39, 72, 216, 463, 1.001, 1.996} Módulo: = 13515 Factor multiplicador: = 37; -1 = 4.018 Clave privada

S1 = 3937 mod 13515 = 1443 S2 = 7237 mod 13515 = 2664 S3 = 21637 mod 13515 = 7992 S4 = 46337 mod 13515 = 3616 S5 = 100137 mod 13515 =10007 S6 = 199637 mod 13515 = 6277

Mochila difícil: S = {1.443, 2.664, 7.992, 3.616, 10.007, 6.277} Clave pública

Fortaleza de las mochilas

En el año 1982 Adi Shamir y Richard Zippel encuentran debilidades a las mochilas de Merkle-Hellman: Si se conoce el módulo (o bien éste puede deducirse) Y si los dos primeros elementos (S1 y S2) de la mochila difícil se corresponden con los

dos primeros elementos (S1’ y S2’) de la mochila simple y son primos con Entonces podemos generar la mochila simple a partir de la difícil ya que

encontraremos la clave secreta -1 .Esta debilidad no hace recomendable el uso de mochilas Merkle y Hellman para el cifrado de la información

Criptoanálisis de Shamir y Zippel

Este ataque exige fuertes restricciones. Para una mochila con 100 elementos, los autores suponen: a) Que los dos primeros elementos de S’ de 100 y 101 bits son mucho más pequeños

que el módulo de 202 bits. b) Que podemos identificar los elementos S1 y S2 en la mochila difícil y hacerlos

corresponder con S1’ y S2’. c) Que conocemos el módulo o podemos deducirlo.

a) Con estos datos se trata de encontrar los valores de S1’ y S2’ además del factor de multiplicación . b) Con estos valores generamos la mochila fácil S.

Pasos del ataque de Shamir y Zippel 1. Se calcula q = (S1/S2) mod

Como Si = Si’ mod entonces:

q = (S1’/S2’) mod = [S1’ inv (S2’, )] mod

Esto implica una condición fuerte: mcd (S2’, ) = 1

2. Se calculan todos los múltiplos modulares del valor q con multiplicadores en el rango [1, 2m+1] = [1, 2101]

CM = {1q mod , 2q mod , ..., 2m+1q mod }

3. El candidato para S1’ será el valor más pequeño de CM puesto que ese elemento podría ser el más pequeño de la mochila fácil S’.

4. Encontrado el candidato para S1’se calcula: = (S1/S1’) mod = [S1 inv (S1’, )] mod Esto implica otra condición fuerte: mcd (S1’, ) = 1

5. Conocido encontramos -1 = inv (, ) y así calculamos todos los elementos de la mochila Si’ = Si -1 mod que debería ser de tipo supercreciente o fácil.

6. Si no se genera una mochila supercreciente, se elige el siguiente valor más pequeño del conjunto CM y así hasta recorrer todos sus valores. Si con este conjunto CM no se obtiene una mochila simple, se repite el punto 2 tomando ahora valores en el rango 2m+i con i = 2, 3, etc. Por lo general el ataque prospera con el primer conjunto CM.

Ejemplo de ataque de Shamir y Zippel

La clave pública de un sistema de mochila Merkle-Hellman es: S = {S1, S2, S3, S4, S5} = {3.241, 572, 2.163, 1.256, 3.531} Si de alguna forma hemos conseguido conocer que el módulo = 4089, se pide encontrar la mochila fácil S’ = {S1’, S2’, S3’, S4’, S5’}.

Solución: • q = S1/S2 mod = S1 inv (S2, ) mod . Calculamos ahora inv (S2, ) es decir inv (572, 4,089) = 309, luego q = 3.241309 mod 4089 = 599 • Múltiplos CM = {1q mod , 2q mod , 3q mod , ..., 64q mod } puesto que la

mochila tiene m = 5 elementos y el intervalo será [1, 25+1]. • Luego CM = [599, 1198, 1.797, 2396, 2995, 3594, 104, 703, 1302, 1901, 2500, 3099,

3698, 208, 807, 1406, 2005, 2604, 3.203, 3802, 312, 911, 1510, 2109, 2708, 3307, 3906, 416, 1015, 1614, 2213, 2812, 3411, 4010, 520, 1119, 1718, 2317, 2916, 3515, 25, 624, 1223, 1822, 2421, 3020, 3619, 129,728, 1327, 1926, 2525, 3124, 3723, 233, 832, 1431, 2030, 2629, 3228, 3827, 337, 936, 1535].

• Suponemos que el número más pequeño de CM es candidato a S1’ = 25. • El factor de multiplicación sería = (S1/S1’) = S1 inv (S1’, ) mod . • Como inv (S1’, ) = inv (25, 4089) = 2617, el factor de multiplicación = 32412617

mod 4089 = 1111. • Por lo tanto su valor inverso será -1 = inv (, ) = inv (1111, 4089). Luego -1 = 622.

• Multiplicamos ahora los valores S de la mochila difícil por -1 a ver si obtenemos una mochila supercreciente S’ (Si’ = Si -1 mod ):

• S1’ = 25 (valor elegido como candidato del conjunto CM) • S2’ = S2 -1 mod = 572 622 mod 4.089 = 41 • S3’ = S3 -1 mod = 2.163 622 mod 4.089 = 105 • S4’ = S4 -1 mod = 1.256 622 mod 4.089 = 233 • S5’ = S5 -1 mod = 3.531 622 mod 4.089 = 489

• Como la mochila S’ = {25, 41, 105, 233, 489} es supercreciente, el ataque ha prosperado y hemos encontrado la clave privada.

Uso de los criptosistemas de mochilas Existen varios algoritmos propuestos como sistemas de cifra usando el problema de la mochila: el de Graham-Shamir, Chor-Rivest, etc., pero su estudio aquí no tiene sentido.

No obstante todos han sucumbido a los criptoanálisis y en la actualidad en el único entorno que se usan es en la protección de diversos programas de aplicación, en forma de hardware que se conecta en la salida paralela del computador para descifrar el código ejecutable de esa aplicación dejando, sin embargo, activa la salida a impresora. De esta manera sólo en aquel sistema con la mochila instalada se puede ejecutar el programa. No se usa en comunicaciones.