Un avance reciente en criptografía

¿Un problema NP?

Se conoce (a través de una base) un subretículo del retículo de los puntos de coordenadas enteras en el espacio de n dimensiones.
Nos dan un punto.
Averiguar la distancia al hiperplano del retículo que se encuentre a mínima distancia.
Fácil si se tiene una base del subretículo con vectores de coordenadas pequeñas (basta una base con n-1 coordenadas pequeñas y la otra coordenada grande).
Difícil si la base que se conoce es de vectores de coordenadas grandes.


Recuerda la semejanza con el sistema RSA:

¿Problema NP?:
Resolver x^e==M(mod n), siendo e y n números conocidos, n grande (de 200 cifras por ejemplo).
Fácil si se sabe que n=p.q siendo p,q primos (por ejemplo de 100 dígitos cada uno).
Difícil si n=p.q, con p y q primos grandes y se desconocen p y q.



Para el problema de la mínima distancia en el retículo está demostrado (1996) por Miklos Ajtai (IBM Research Center, Almaden, California) que:

Si existe algún algoritmo que sea capaz de de resolver el problema eficazmente para una fracción de los hiperplanos posibles, existe un algoritmo que resuelve el problema para todos.

También (Ajtai):

Si existe algún algoritmo probabilístico que resuelve el problema con probabilidad mayor que cero, se puede construir uno que resuelve el problema con probabilidad 1.


Una buena aproximación a la conjetura P<NP (es decir que existe algún problema que se puede resolver no determinísticamente [es decir, vale adivinar] en tiempo polinómico pero para el que no existe un algoritmo determinístico que lo resuelva en tiempo polinómico [es decir, cuya complejidad crezca sólo como un polinomio función del tamaño de los datos]). Se podría pensar que el problema del retículo  es un buen candidato para ser NP pero no P, pero esto no se ha demostrado.



Basado en este problema  Ajtai y Cynthia Dwork (IBM Research Center, Almaden) han elaborado un sistema criptográfico de clave abierta.

El usuario A se fabrica su clave pública y su clave secreta.
A escoge un subretículo.
Para ello toma n-1 vectores de coordenadas pequeñas y otro aleatoriamente de coordenadas grandes. Esta será su clave secreta.
Escoge su clave pública: una base aleatoriamente elegida de su retículo.

El usuario B codifica para A el 0 y el 1.
Para codificar el 0 para A toma un punto del subretículo de A y añade aleatoriamente un vector pequeño del retículo Zn.
Para codificar el 1 toma un punto cualquiera de Zn.
Envía ese punto por conducto abierto a A.

El usuario A descodifica el mensaje.
Él sabe cómo hallar la mínima distancia a su retículo del punto enviado por B. Si la distancia es pequeña, con probabilidad casi 1 se trata de un 0. Si es grande es que se trata de un 1 con probabilidad casi 1.



Hay que decir que la implementación de estos procesos no se sabe hacer todavía de forma suficientemente sencilla para hacer operativo el nuevo sistema.