PROBLEMA
TIPO MOCHILA
CIFRADOS TIPO MOCHILA
Están basados en el problema NP- completo de la mochila, y se describen
como más característicos los siguientes tipos:
1.- MERKLE-HELLMAN (1978) [MEH 78]
Que se utiliza para secreto, y no para preservar la autenticación de
la firma.
2.- GRAHAM-SHAMIR (1984) [SHAM 84]
Que al igual que el anterior se utiliza para secreto, y no permite preservar
la autenticación.
Los métodos de la mochila, válidos para proveer a la vez secreto
y autenticación tienen el inconveniente de que se resuelven en tiempo
polinómico [DENN 83].
Este criptosistema ha caído en desuso debido a que la mayoría
de sus implementaciones han sido rotas por criptoanálisis [SHAM 84],
no obstante aún existen algunos criptosistemas basados en el que aquí
se presenta que todavía son seguros, aunque muy poco utilizados.
Definición: El problema de la mochila tramposa o simple o fácil,
puede plantearse en los siguientes términos: sea W={w1, w2, ..., wn
} un conjunto finito dado de números enteros, y sea s = wi1 + ... +
wit , con i1<...< it, una subsuma de elementos de W. Se trata de determinar
el subconjunto {wi1, ..., wit } de W, conocido W y s. El nombre de mochila
asignado al problema se debe a que s puede pensarse como la capacidad de una
mochila, y los elementos de W como los tamaños de diferentes objetos;
se trata entonces de saber si la mochila se puede llenar con un número
exacto de objetos y determinar qué objetos son éstos.
Dado que W es finito, también lo es el número de posibles subconjuntos;
por tanto el problema se puede resolver, aunque la dificultad estriba en hacerlo
de forma eficiente. Conviene señalar que puede haber dos subconjuntos
de W con la misma suma, y que para determinados conjuntos W es muy sencillo
encontrar la solución. Por ejemplo, si W=(1, 2, 22, 23, ...,2k,...)
entonces basta con calcular la expresión de s en base binaria.
Definición: Una sucesión de números enteros w1 < w2
< ... < wk < ... se dice supercreciente o una sucesión de
crecimiento rápido, si se verifica que wi+1 > w1 + ...+ wi , para
todo i. Si W = {w1, ..., wn } es una parte de una sucesión supercreciente
y se conoce la suma s de un subconjunto de W, es fácil determinar dicho
subconjunto. Basta considerar el mayor elemento de W menor que s, wit , luego
el mayor elementos de W menor que s - wit , wi(t-1) , y así sucesivamente.
Es claro que para el problema de la mochila 0 < w1.
ALGORITMO DE MERKLE-HELLMAN (M-H) Y SU SEGURIDAD
a) Algoritmo de Merkle - Hellman
Este método se basa en el problema NP-completo de la mochila de tipo
0-1 o problema de la mochila fácil, y el mayor atractivo que tiene
es su fácil implementación en un programa y su gran rapidez,
unas 100 veces más rápido que el RSA. También hay que
decir que para cifrar bloques de 200 bits (n = 200) en la mochila, almacenar
el vector mochila W = (w1 , ..., wn ) requiere del orden de 80 Kb, si consideramos
que cada wi es , de media, de 400 bits, mientras que con el RSA necesitaríamos,
solamente, 1 Kb para almacenar su clave.
Dado C entero positivo, W = (w1, ..., wn ) un vector con componentes wi enteros
positivos para todo i. Se trata de encontrar M = (m1 , ..., mn), mi = 0 ó
1, 1< i < n, Tal que C = W.M ó C = w1 m1 + ... + wn mn
EJEMPLO:
Sea n = 5, C = 14 y W = (l, l0, 5, 22, 3), entonces M = (1,1,0,0,1).
Este problema es NP-completo y se resuelve en un tiempo de magnitud 0(2n/2)
que es un tiempo exponencial y crece mucho cuando n se hace grande, lo que
lo hace altamente ineficaz de resolver.
Sin embargo, existe el problema de la mochila simple que se resuelve en un
tiempo lineal de complejidad 0(n), en el cual los wi son supercrecientes.
Lo que implica que mn = 1 si y sólo si C > wn . Y para i = n-l,
n-2, ..., l se verifica que:
EJEMPLO:
Sea W = (1, 3, 5, 10, 22). La solución que se obtiene fácilmente
es (1,1,0,1,0), para C = 14 del anterior ejemplo.
Un problema de la mochila simple o fácil se puede convertir en una
función trampa difícil de resolver sin la información
adicional, para ello:
1) Se escoge un vector del problema simple W' = (w1', ..., wn'). Esto permite
una solución sencilla de: C'= W'.M .
2) Se elige un entero u tal que: u > 2.wn' > w1' + ... + w n' .
3) Se elige un entero v tal que MCD (u, v) = 1 y el inverso multiplicativo
del mismo número v-1 mod u se obtiene de v.v-1 mod u = 1.
4) El vector W' se transforma en el. W = v W' mod u, donde, wi = wi' mod u.
Así, resolver C = W .M es difícil, pero si se conoce la información
adicional v -1 y u el problema es más sencillo, pues se puede convertir
el problema C = W .M en el C' = W' .M, fácil de resolver. Ya que:
C' = v -1. C mod u
= v -1. W .M. mod u
= v -1. (v. W') . M mod u
= W' .M mod u
= W' . M
El procedimiento de cifrado sería el siguiente:
Sea EA el algoritmo cifrado que utiliza la clave pública A, y DAV el
algoritmo de descifrado que utiliza (W', u , v -1 ) la clave privada.
El mensaje inicial se trocea en bloques de n bits (cardinal de W) M = (m1,
..., mn ) y cada bloque se cifra según: C = EAB (M) = W .M .
El mensaje C se descifra calculando: DAV (C) = Algoritmo Simple (v-1 . C mod
u, W') = M.
EJEMPLO:
Sea W = (1, 2, 5, 9), u = 20 y v = 7. Entonces v -1 = 3 el vector W se convierte
en el W' = v.W ó wi '= v. wi mod u. La clave privada es ((1, 2, 5,
9), 3, 20).
W' = (7.l mod 20, 7.2 mod 20, 7.5 mod 20, 7.9 mod 20) = (7, 14, l 5, 3), esto
es la clave pública.
Sea C = 13, el mensaje, que corresponde al vector binario M = (1,1,0,1).
Entonces:
C' = EAB (M) = 7 +14 +3 = 24
DAV (C') = DAV (24)
= Algoritmo Simple (3.24 mod 20, W')
= Algoritmo Simple (12, W')
= 1 + 2 + 9 = 13
EJEMPLO (Otra forma del criptosistema de la mochila):
Sea el conjunto:
{w1 = 20111, w2 = 10201, w3 = 10412, w4 = 20801, w5 = 11611, w6 = 13221}
donde los números wi forman el conjunto de objetos con los cuales llenar
la mochila. Estos números han sido tomados de forma que en su posición
cuarta y tercera, contadas a partir de la derecha, contienen diferentes potencias
de dos (1, 2, 4, 16, 32), mientras que en la primera y segunda contienen dígitos
cuya suma, extendida a todos los elementos wi , es menor que 100.
Este conjunto de números puede ser utilizado como clave de un sistema
de cifrado de la forma que sigue:
Supongamos que el mensaje a transmitir es M = 101101.
El mensaje cifrado será la suma de los números wi de forma que
la posición i-esima del mensaje a transmitir contenga un 1. Es decir,
C' = E(m)= w1 + w3 + w4 + w6 = 64545.
Obsérvese que en las columnas cuarta y tercera se encuentra el número
45, que tiene como expansión binaria a 101101, el cual coincide con
el mensaje que queríamos transmitir.
Este algoritmo, sin más precauciones, sería roto fácilmente,
por eso hay que hablar de la seguridad del criptosistema de la mochila que
como veremos no es tan maravillosa como se podría esperar en un principio.
EJEMPLO (Otra forma del criptosistema de la mochila):
Sea {2, 3, 7, 15, 31, 62, ...} una sucesión supercreciente. Dado que
vamos a utilizar el alfabeto de 26 letras (La "ñ" no se suele
contar) codificado con 0-25 y como 24 = 16 < 26 < 32 = 25, el conjunto
W tendrá sólo cinco elementos, pues las letras en base binaria
tendrán, como máximo, cinco bits. Así pues, W = {2, 3,
7, 15, 31} es suficiente. Por otra parte, 2 + 3 + 7 + 15 + 31 = 58, y podemos
considerar u = 61 > 58. Si elegimos v = 17, primo con 61, su inverso módulo
61 es v-1 = 18. La clave pública del usuario B, por ejemplo, será
W' = v .W = {34, 51, 58, 11, 39}, mientras que su clave privada es v-1 = 18,
junto con v = 17, u = 61 y W.
Supongamos que el usuario A quiere mandar el mensaje "HOLA" al usuario
B. A codifica el mensaje y luego lo encripta de la siguiente manera:
H: 7=1+2.3=1+2(1+2)=1+2+22 =(00111)2. -> 34 + 51 + 58 = 143,
O : 14= 2.7 = 2(1 + 2 + 22) = 2 + 22 + 23 = (01110)2. -> 51 + 58 + 11=120,
L: 11 = 1 + 2.5 = 1 + 2(1 + 22) = 1 + 2 + 23 = (01011) 2 . -> 34 + 51 +
11 = 96,
A : 0 = 0 = (00000) 2 . -> 0.
Por tanto, el mensaje a enviar a B es:
C' = (143, 120, 96, 0) mod 61 = (21, 59, 35, 0).
Para recuperar el mensaje recibido, B utiliza la sucesión supercreciente
W el inverso v-1 = 18 y lleva a cabo las siguientes operaciones:
v-1.C' = (12, 25, 20, 0)
12 = 7 + 3 + 2 ~ (00111) 2 = 1 + 2 + 22 = 7 : H
25 = 15 + 7 + 3 ~ (01110) 2 = 2 + 22 + 23 = 14 : O
20 = 15 + 3 + 2 ~ (01011) 2 = 1 + 2 + 23 = 11: L
0 = 0 ~ (00000) 2 = 0 : A
b) Seguridad del Algoritmo M-H
Los autores sugieren que la longitud de n sea 100 dígitos. Schroeppel
y Shamir [SCHR 79] han desarrollado un algoritmo para resolver problemas de
la mochila de este tamaño con ordenes de complejidad en tiempo y espacio:
T = 0(2n/2) y S = 0(2n/4)
Para n = 100, un procesador hallaría la solución en 11.574 días
y 1000 procesadores en 12 días aproximadamente.
Si n = 200, el algoritmo es ineficaz.
Los autores aconsejan que se tomen varios pares de (u, v) e iterarlos en la
transformación W' = v. W mod u para que el sistema no sea vulnerable
cuando se conoce u (*), pero al parecer este método también
es inseguro.
Pohling [POHL78] ha demostrado que si el problema de la mochila tiene subconjuntos
parcialmente ordenados (simples), puede ser factible encontrar una solución
en un tiempo menor. La probabilidad de que esto ocurra no parece muy alta.
En 1983, este esquema de iteraciones del sistema de Merkle-Hellman (*) sufrió
un ataque de Adleman [ADL 83] que proporcionó la evidencia de su inseguridad.
Luego, Lagarias y Odlyzko [LA0 83] demostraron que cualquier criptosistema
basado en una mochila de baja densidad (mochila (w1, w2, ..., wn ) tal que
el número n/log2 (wn ) es pequeño), se puede romper en tiempo
polinomial, en particular, este resultado se puede aplicar al sistema de Merkle-Hellman.
La idea de su ataque se basa en la reconstrucción de los vectores de
la mochila fácil a partir de los vectores de mochila difícil,
rompiendo así el sistema.
A partir de la misma idea que sirvió como base al sistema de Merkle-Hellman,
se han creado nuevas variantes, conocida con el nombre de sistemas de la mochila.
En 1982, Shamir [SHA 82] diseñó un algoritmo que resuelve en
tiempo polinomial el tipo de problema de la mochila que se presenta en el
sistema de Merkle-Hellman.
El ataque de Shamir procede analizando los números w1 ,w2 , ..., wn
, que forman la clave de cifrado de este sistema para intentar encontrar un
par de números enteros N y M tales que el conjunto { M .wi mod N }
constituya una mochila fácil cuya suma sea menor que N. Para ello,
es necesario suponer que el orden de los coeficientes wi corresponde al orden
creciente de los coeficientes de la mochila fácil original, y hay que
calcular una serie de intervalos cada vez más pequeños, donde
se sabe que están cada uno de los números wi.
El procedimiento es válido siempre que la longitud de los números
de la mochila fácil no sea mayor de l00 bits, pues en ese caso la consecución
de los intervalos y su posterior reducción se hace infactible.
Otro punto débil del ataque está en la suposición de
que el orden de los { wi }i corresponde al de la mochila fácil, pues
éste es un dato que no se suele tener, y si no se tiene hay que probar
todas las posibles combinaciones.
En general, el cálculo de los subintervalos se realiza resolviendo
una serie de inecuaciones que son resolubles en tiempo polinomial. Una vez
obtenido el intervalo final [e1 , e2 ], hay que encontrar una solución
a otro problema de programación entera, consistente en obtener la fracción
M/N tal que ei < M/N <= e2 Knuth ha desarrollado en [KNU 69] algunos
algoritmos eficientes que resuelven este problema. A partir de estos cocientes
se obtienen algunos pares (M, N) de los que se descartan aquellos tales que
{ M .ai mod N } no es una mochila fácil.
Muchos de estos sistemas han sido criptoanalizados utilizando herramientas
del área de la aproximación diofántica [BRO 88]. Sin
embargo, no todos estos sistemas han caído. Existen todavía
unos pocos que resisten los ataques, como los sistemas iterados y el sistema
de Chor-Rivest.
La búsqueda de sistemas de la mochila seguros continúa hoy en
día por dos motivos fundamentales: se obtienen grandes velocidades
de los cifrados y descifrados, y representan una alternativa elegante a los
sistemas simétricos y al propio RSA. Ambas características se
deben a la simplicidad de su diseño.
ALGORITMO DE GRAHAM - SHAMIR.
Este algoritmo presenta la ventaja frente al de M-H en que se disminuye el
tamaño del vector en la función trampa tipo mochila a costa
de aumentar el tamaño de cada componente de dicho vector.
El vector del problema simple es A' = (a'1,..., a'n ) donde cada a'j = (R
j, I j, S j).
Siendo a su vez: R j y S j cadenas aleatorias de bits e I j una cadena de
n bits tal que el bit j = 1 y los n-l restantes son cero. Cada cadena aleatoria
S j tiene log 2 n ceros en las cifras de mayor orden, de tal forma que no
se produce desbordamiento en el área de las I j 's , al operar para
el cálculo de C'.
Entonces, C'= A' .M tiene representación binaria de la forma C' = (R,
M, S) donde:
;
El vector de cadenas de bits ((In , Sn ), ..., (I1, S1 )), es decir, los elementos
a'j listados en sentido contrario, sin las Rj's, es un vector del problema
simple. Las Rj's se añaden para ocultar esta simplicidad.
Este problema tipo mochila es más simple que el de M-H, Ya que M puede
extraerse directamente de la representación binaria de C'.
El vector A' del problema simple se convierte en el vector A del problema
difícil al igual que en el M-H, es decir, tomando u y w y calculando
A = w A' mod u , de igual forma:
C = EAB (M) = A . M.
C se descifra resolviendo
C' = w -1 . C mod u
y extrayendo de C' los bits que representan M.
Shamir y Zippel [SHAM 8O] consideran esta variante más segura, más
rápida y simple de implantar que el esquema de M-H.
Ejemplo:
Sea n=5 A' se define por:
J
|
Rj
|
Ij
|
Sj |
|
1 |
011010
|
10000
|
000101 |
=a'1 |
2 |
001001 |
01000 |
000010 |
=a'2 |
3 |
010010
|
00100 |
000100 |
=a'3 |
4 |
011000
|
00010
|
000111 |
=a'4 |
5 |
000110 |
00001 |
000001 |
=a'5 |
Sea M=(0,
1, 0, 0, 1) Entonces:
C' = A'. M = a'2 + a'5 = (R2 + R5 , I2 + I5 , S2 + S5 ) = (001111, 01001,
000011).
Siendo 01001 el mensaje M.
CRIPTOANALISIS DE M-H
Se ha dicho antes que el criptosistema de la mochila se puede romper facilmente
(en tiempo polinomial), algunos de estos criptoanálisis fueron presentado
por Shamir [SHAM 82], por Lagarias y Odlyzko [LAGA 85] y por Brickell [BRIC
83].
Cada uno de ellos es suficiente para romper el criptosistema de la mochila
tipo M-H.
Ataque de Shamir
La clave pública del criptosistema de M-H es un conjunto de n números
W = {w1 , ..., wn} un mensaje m = m1 , ..., mn es cifrado por C = m1 w1 +
... + mn wn . Supongamos que un atacante conoce el conjunto W y también
C, cosa que no es difícil pues W es la clave pública y C puede
ser interceptado pues el canal es inseguro.
El ataque de Shamir analizará los números de W e intentará
encontar un par N y M tales que el conjunto {M wi mod N}i sea una sucesión
supercreciente y que tenga suma total menor que N (+). Una vez que hemos encontrado
ese par de números puede ocurrir que no sea el par original de la clave
secreta, entonces ese par de números sería suficiente para encontrar
los verdaderos pares y resolver el problema de la mochila en tiempo polinomial,
así pues sólo necesitamos que exista un par de números
que verifiquen (+), pero esto está garantizado pues es la base del
M-H.
Expliquemos el ataque con un ejemplo.
W = {467, 355, 131, 318, 113, 21, 135, 215} esta es la clave pública.
Nosotros queremos encontrar un par de numeros N y M que cumplan (+), es decir,
tales que el conjunto {M wi mod N}i sea una sucesión supercreciente
y que tenga suma total menor que N.
Supongamos, que hemos descubierto, por el método que sea, un par de
números M y N de posibles valores de la transformación de la
clave secreta a la pública, entonces podemos encontrar los verdaderos
valores de la clave secreta, veamos como.
Si encontramos M, N entonces M w 1' mod N tiene que ser menor que 2-7 N, pues
la sucesión de la clave secreta es una sucesión supercreciente,
(wi+1 > w 1 + ... + w i , entonces, N> w 1 + ... + w n > w1 + ...
+ w n-1 + (w 1 + ... + w n-1) = 2 (w 1 + ... + w n-1 ) > ... ...> 2n-1
w 1 ).
Sea y = f(m) = 467 M mod N, (estamos buscando w1).
Los ceros de esta función son: M = N/467, 2 N/467, ..., 466 N/467.
Además,
para el valor de y > 2-7 N no puede darse ningún w 1, lo que implica
que M pertenece al subintervalo I1 = [N/467, N/467 + 2-7 N/467] luego tenemos
una familia de 466 subintervalos pequeños de [0, N] de la forma:
Ip = [p N/467, p N/467 + 2-7 N/467] y M pertenece a Ip para algún p
con 1 < p < 466.
Tomamos, ahora w2' = 355 y razonamos del mismo modo, entonces
M w2' = M 355 mod N < 2-6 N, (estamos buscando w2).
Y encontramos otros intervalos Iq = [q N/355, q N/355 + 2-6 N/355] y también
se verifica que M pertenece a Iq para algún q entre 1 y 354.
Luego M pertenece a las interseccciones posibles de los Ip con los Iq.
Ahora se tomaría w3', ... y se razonaría de la misma manera
dando al final unos intervalos para cada una de los elementos de W' y verificandose
que M pertenece a la intersección de ellos.
Si lo hacemos hasta w4' tenemos sólo dos subintervalos (las otras posibles
conbinaciones se hacen el vacio), que dividiendolos por N son:
[0.053533190578, 0.053565140845]
[0.107066381156, 0.107086267606]
y en estos subintervalos es donde está la verdadera M/N de la transformación
de la clave secreta a la pública, como además N <= 2 max
wi', sólo tenemos un número pequeños de números
para probar (para este ejemplo hay 21 pares), sólo pongo unos cuantos:
M
|
N |
M/N |
25 |
467 |
0.053533190578 |
50 |
467 |
0.107066381156 |
53 |
495 |
0.107070 |
28 |
523 |
0.053537 |
56 |
523 |
0.107074 |
... |
... |
.... |
53 |
990 |
0.0535353 |
106 |
990 |
0.107070 |
se
toman cada uno de estos pares y se comprueba que verifican (+).
Por
ejemplo:
Para (25,467) la sucesión es: 0, 2, 6, 11, 23, 58, 106, 238; no es
supercreciente.
Para (50,467) la sucesión es: 0, 4, 12, 22, 46, 116, 212, 9; no es
supercreciente.
Para (53,990) la sucesión es: 1, 5, 13, 24, 49, 123, 225, 505 que sí
es supercreciente.
De hecho sólo los pares (28, 523) y (53, 990) dan sucesiones supercrecientes
para el problema de la mochila.
Con lo cual sólo tenemos dos posibles mensajes en claro y discernir
entre uno de ellos es factible.
Bibliografia
CRIPTOSISTEMA DE LA MOCHILA, Lázaro A. Escudero Ferrer
http://www.tierradelazaro.com/cripto/mochila.htm
Referencia.
departamentos.unican.es/macc/ personal/profesores/castillo/Libro/Chap2.pdf