El criptosistema de mochila Merkle-Hellman fue uno de los primeros criptosistemas de clave pública . Fue publicado por Ralph Merkle y Martin Hellman en 1978. Adi Shamir publicó un ataque de tiempo polinomial en 1984. Como resultado, el criptosistema ahora se considera inseguro. [1] : 465 [2] : 190
Historia
El concepto de criptografía de clave pública fue introducido por Whitfield Diffie y Martin Hellman en 1976. [3] En ese momento propusieron el concepto general de una "función unidireccional de puerta trampa", una función cuya inversa es computacionalmente inviable de calcular sin alguna "información de puerta trampa" secreta; pero aún no habían encontrado un ejemplo práctico de tal función. Luego, otros investigadores propusieron varios criptosistemas de clave pública específicos en los años siguientes, como RSA en 1977 y Merkle-Hellman en 1978. [4]
Descripción
Merkle–Hellman es un criptosistema de clave pública, lo que significa que se utilizan dos claves, una clave pública para el cifrado y una clave privada para el descifrado. Se basa en el problema de la suma de subconjuntos (un caso especial del problema de la mochila ). [5] El problema es el siguiente: dado un conjunto de números enteros y un número entero , encuentre un subconjunto de cuya suma sea . En general, se sabe que este problema es NP-completo . Sin embargo, si es supercreciente , lo que significa que cada elemento del conjunto es mayor que la suma de todos los números del conjunto menores que él, el problema es "fácil" y solucionable en tiempo polinomial con un algoritmo voraz simple .
En Merkle–Hellman, descifrar un mensaje requiere resolver un problema de mochila aparentemente "difícil". La clave privada contiene una lista supercreciente de números , y la clave pública contiene una lista no supercreciente de números , que en realidad es una versión "disfrazada" de . La clave privada también contiene información de "trampa" que se puede utilizar para transformar un problema de mochila difícil usando en un problema de mochila fácil usando .
A diferencia de otros criptosistemas de clave pública como RSA , las dos claves de Merkle-Hellman no son intercambiables; la clave privada no se puede utilizar para el cifrado. Por lo tanto, Merkle-Hellman no se puede utilizar directamente para la autenticación mediante firma criptográfica , aunque Shamir publicó una variante que sí se puede utilizar para la firma. [6]
Generación de claves
1. Elija un tamaño de bloque . Con esta clave se pueden cifrar números enteros de hasta bits de longitud.
2. Elija una secuencia aleatoria supercreciente de números enteros positivos
- El requisito de superincremento significa que , para .
3. Elija un número entero aleatorio tal que
4. Elija un número entero aleatorio tal que (es decir, y son coprimos ).
5. Calcular la secuencia
- dónde .
La clave pública es y la clave privada es .
Encriptación
Sea un mensaje de -bit que consta de bits , con el bit de orden más alto. Seleccione cada uno para el cual sea distinto de cero y súmelos. De manera equivalente, calcule
- .
El texto cifrado es .
Descifrado
Para descifrar un texto cifrado , debemos encontrar el subconjunto de cuya suma sea . Para ello, transformamos el problema en uno de búsqueda de un subconjunto de . Ese problema se puede resolver en tiempo polinómico, ya que es supercreciente.
1. Calcular la inversa modular de módulo utilizando el algoritmo euclidiano extendido . La inversa existirá ya que es coprimo de .
- El cálculo es independiente del mensaje y puede realizarse solo una vez cuando se genera la clave privada.
2. Calcular
3. Resuelva el problema de suma de subconjuntos utilizando la secuencia supercreciente , mediante el algoritmo voraz simple que se describe a continuación. Sea la lista resultante de índices de los elementos cuya suma es . (Es decir, .)
4. Construya el mensaje con un 1 en cada posición de bit y un 0 en todas las demás posiciones de bit:
Solución del problema de la suma de subconjuntos
Este sencillo algoritmo codicioso encuentra el subconjunto de una secuencia supercreciente que suma , en tiempo polinomial:
- 1. Inicializar en una lista vacía.
- 2. Encuentra el elemento más grande en el que es menor o igual a , digamos .
- 3. Restar: .
- 4. Añadir a la lista .
- 5. Si es mayor que cero, vuelva al paso 2.
Ejemplo
Generación de claves
Cree una clave para cifrar números de 8 bits creando una secuencia supercreciente aleatoria de 8 valores:
La suma de estos es 706, así que seleccione un valor mayor para :
- .
Elige ser coprimo de :
- .
Construya la clave pública multiplicando cada elemento por módulo :
Por eso .
Encriptación
Sea 8 bits el mensaje . Multiplicamos cada bit por el número correspondiente en y sumamos los resultados:
0 * 295+ 1 * 592+ 1 * 301+ 0 * 14+ 0 * 28+ 0 * 353+ 0 * 120+ 1 * 236 = 1129
El texto cifrado es 1129.
Descifrado
Para descifrar 1129, primero use el algoritmo euclidiano extendido para encontrar el inverso modular de mod :
- .
Calcular .
Utilice el algoritmo voraz para descomponer 372 en una suma de valores:
Por lo tanto , la lista de índices es . El mensaje ahora se puede calcular como
- .
Criptoanálisis
En 1984, Adi Shamir publicó un ataque al criptosistema Merkle-Hellman que puede descifrar mensajes cifrados en tiempo polinomial sin utilizar la clave privada. [7] El ataque analiza la clave pública y busca un par de números y tal que sea una secuencia supercreciente. El par encontrado por el ataque puede no ser igual a la clave privada, pero al igual que ese par puede usarse para transformar un problema de mochila difícil en un problema fácil utilizando una secuencia supercreciente. El ataque opera únicamente sobre la clave pública; no es necesario acceder a los mensajes cifrados.
El ataque de Shamir al criptosistema Merkle-Hellman funciona en tiempo polinomial incluso si los números en la clave pública se mezclan aleatoriamente, un paso que normalmente no se incluye en la descripción del criptosistema, pero que puede ser útil contra algunos ataques más primitivos.
Referencias
- ^ Schneier, Bruce (1996). Criptografía aplicada . Nueva York: John Wiley & Sons. ISBN 0-471-12845-7.
- ^ Stinson, Douglas R. (1995). Criptografía: teoría y práctica . Boca Raton: CRC Press. ISBN 0-8493-8521-0.
- ^ Whitfield Diffie; Martin Hellman (1976). "Nuevas direcciones en criptografía". IEEE Transactions on Information Theory . 22 (6): 644. CiteSeerX 10.1.1.37.9720 . doi :10.1109/TIT.1976.1055638.
- ^ Merkle, Ralph; Hellman, Martin (1978). "Ocultar información y firmas en mochilas con trampilla". IEEE Transactions on Information Theory . 24 (5): 525–530. doi :10.1109/TIT.1978.1055927.
- ^ Cherowitzo, William (2002-03-02). "Criptograma de mochila Merkle-Hellman". Matemáticas 5410 - Criptología moderna . Consultado el 18 de agosto de 2019 .
- ^ Shamir, Adi (julio de 1978). "Un esquema de firma rápido". Memorándum técnico del Laboratorio de Ciencias de la Computación del MIT . 79 (MIT/LCS/TM–107): 15240. Código Bibliográfico :1978STIN...7915240S.
- ^ Shamir, Adi (1984). "Un algoritmo de tiempo polinomial para romper el criptosistema básico de Merkle-Hellman". IEEE Transactions on Information Theory . 30 (5): 699–704. doi :10.1109/SFCS.1982.5.