Los sistemas criptográficos basados en el problema de la mochila y válidos para ocultar el mensajes y proveer a la vez de 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 mochila simple o mochila 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 U={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 en tiempo finito, aunque la dificultad estriba en hacerlo de forma eficiente, es decir, en un tiempo razonable.
Ejemplo: Si tenemos que W={1, 3, 4, 5, 7, 10, 12, 15, 21, 26} y un subconjunto de él U={3, 4, 7, 10, 21, 26} cuya suma es s=71, conocido W y s resulta complicado determinar U.
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.
Ejemplo: Si tenemos que W={1, 2, 4, 8, 16} y s=12, como 12 en base 2 es 01100, concluimos que el subconjunto que buscamos es {4, 8}.
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.
Ejemplo: W={1, 2, 3, 6, 12, 25, 53}, se puede comprobar que wi+1 > w1 + …+ wi , para todo i y por tanto la serie es supercreciente, elegimos el subconjunto U={2, 6, 12, 53} que tiene por suma s=73. Aplicamos el resultado anterior y tenemos que 73 – 53 = 20 > 0, por tanto el 53 es parte del subconjunto, 20 – 25 = -5 < 0, por tanto 25 no es parte de U, 20 – 12 = 8 > 0, por tanto 12 es parte del subconjunto, 8 – 6 = 2 > 0, por tanto 6 es parte de U y por último 2 también es parte del subconjunto. Hemos determinado el subconjunto U={2, 6, 12, 53} fácilmente gracias a la propiedad de supercrecimiento.
Algoritmo de Merkle-Hellman (M-H) y su seguridad
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 su mayor atractivo 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 el sistema de la mochila se tiene que almacenar el vector mochila W = (w1 , …, wn ) y requiere del orden de 80 Kb, si consideramos que cada wies, de media, de 400 bits, mientras que con el RSA necesitaríamos, solamente, 1 Kb para almacenar su clave.
Dado C un 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 = M·W ó C = m1 w1 + … + mn wn.