¿Una prueba de que NP está en P realmente romperá los algoritmos de criptografía?

[Sugerencia de servicio: primero lea el último párrafo y luego vuelva a leer la respuesta completa]

La pregunta original era:

“Internet dice que si se encontrara un algoritmo para un problema de NP, la criptografía se descifraría fácilmente, eso no es cierto, ¿verdad?”

Más tarde se cambió a:

¿La existencia de un algoritmo polinómico para un problema NP-duro implica que podremos romper fácilmente la criptografía?

Las respuestas son: “esto es casi cierto” y “más o menos”, respectivamente.

Comencemos con algunas definiciones. Intuitivamente, en informática, un problema de decisión es una pregunta bien definida para la que la respuesta es “sí” o “no”. Un ejemplo de este tipo de problema es el siguiente (no es necesario que comprenda el problema en sí mismo para comprender el ejemplo): dadas tres variables [matemáticas] x_0, x_1, x_2 [/ matemáticas] que pueden tomar 0 o 1, ¿existe una asignación (es decir, una elección de valores para cada uno de ellos), de modo que la ecuación [matemática] (x_0 \ vee x_1) \ wedge (x_0 \ vee x_2) = 1 [/ matemática] sea verdadera. Esto parece fácil de resolver, ¿verdad? Simplemente marque todas las asignaciones [matemáticas] 2 ^ 3 [/ matemáticas] para las variables y obtendrá su respuesta. Pero, ¿qué pasa si hay 60 variables? Verificar las opciones 2 ^ {60} llevará mucho tiempo, y verificar las opciones 2 ^ {128} ya no es factible con la tecnología actual (y no se espera que esto cambie durante la vida útil).

Por otro lado, para una ecuación de la forma [math] x_0 \ oplus x_1 \ oplus x_2 = 0 [/ math] es fácil verificar si existe una solución (la respuesta es sí, para cualquier valor de [math] x_0 \ oplus x_1 [/ math] simplemente establece [math] x_2 = x_0 \ oplus x_1 [/ math]). En este problema, no importa cuántas variables tenga, responder el problema lleva la misma cantidad de tiempo.

En este momento, debe comenzar a sospechar que la dificultad de resolver el problema se mide de alguna manera con respecto al número de entradas, lo que llamamos “el tamaño del problema”. Así que ahora podemos definir qué significa “fácil”. Un problema “fácil” es uno que “puede resolverse en tiempo polinómico” (con respecto a su tamaño). Mi último ejemplo es de tal naturaleza. Está bien si no sabes lo que significa el tiempo polinómico. Solo piense en ello como alguna función en el número de entradas. El tiempo que lleva resolver el problema no puede ser mayor que la respuesta a esta función cuando se calcula sobre los valores apropiados. Usaré la palabra “fácil” entre comillas para enfatizar que quiero decir “se puede resolver en tiempo polinómico”. Más adelante, explicaré la diferencia entre fácil y “fácil”

La clase de complejidad P es el conjunto de problemas que sabemos cómo resolver en tiempo polinómico o menos, estos son los problemas “fáciles”. La clase de complejidad NP es el conjunto de problemas que no sabemos cómo resolver en tiempo polinómico, pero cuando se nos da una solución, sabemos cómo verificarlo en tiempo polinómico. En mi ejemplo anterior, si le doy una asignación para todas las variables involucradas, puede simplemente sustituirlas y verificar si la ecuación es verdadera. Antes de continuar, necesito introducir dos clases más de problemas, estos son los problemas NP completos y los problemas NP difíciles. Son un poco más difíciles de entender, así que tengan paciencia conmigo mientras trato de simplificarlo. La clase de problemas NP-completos es el conjunto de todos los problemas para los cuales, si pudiéramos encontrar una solución, también podríamos resolver cualquier problema NP. En otras palabras, suponga que tiene un algoritmo que resuelve un problema de NP completo, y se le pide que resuelva un problema diferente que está en NP (no necesariamente NP-completo). Puede traducir su problema NP en el problema NP-completo que sabe cómo resolver, resolverlo y luego volver a traducir la solución obtenida a su problema original. Está comprobado que cualquier problema en NP puede traducirse a cualquier problema de NP completo; eso es lo que está “completo” al respecto. Todavía necesito explicar qué NP-hard, pero lo trataré más tarde.

En cierto sentido, los problemas NP completos son los “más difíciles” entre los problemas NP (pero no los “más difíciles” entre todos los problemas). Debido a este proceso de traducción que mencioné, ser capaz de resolver “fácilmente” un problema de NP completo, significa que podemos resolver “fácilmente” cualquier problema de NP. O, en otras palabras, significa que todos los problemas del mundo son tan “fáciles” de resolver (recuerde que la palabra “fácil” tiene un significado especial como se definió anteriormente, y no debe confundirse con el significado normal de la palabra fácil).

La criptografía se basa en la idea de que realizar algunas operaciones es fácil (o a veces “fácil”, para las ramas más teóricas de la criptografía), pero invertirlas no lo es. El ejemplo que más me gusta es del libro de Andrew Tanenbaum (reformulación de memoria): es fácil tirar un vaso al suelo y romperlo, es mucho más difícil invertir el proceso y pegar las piezas de una manera perfecta. Si todos los problemas son tan fáciles, significa que no hay una brecha de dificultad que podamos usar, y esas son malas noticias para la criptografía. Entonces, volviendo a la pregunta original: si se encontró un algoritmo para resolver problemas NP-completos (no solo NP), la criptografía está condenada.

La segunda pregunta se refiere a problemas NP-difíciles. La definición exacta no importa aquí, ya que es suficiente decir que estos son al menos tan difíciles como los problemas NP-completos. Por lo tanto, resolverlos también significaría que la criptografía se puede descifrar “fácilmente”, pero como señala Julien Hué en su respuesta, aún puede no ser fácil en el sentido normal, ya que el “tiempo polinómico” aún puede ser grande.

Para el OP original, su pregunta es asombrosa, y no debe desanimarse por el hecho de que alguien la haya cambiado para hacerlo más complejo (sin ninguna razón IMO). Esto es bastante avanzado, así que espero haber hecho accesible la respuesta. No se avergüence de pedir aclaraciones en los comentarios, me complacerá proporcionarlas.

Hay algunas suposiciones incorrectas en su pregunta. Permítanme corregir eso primero y luego responderé la pregunta. Primero, ya se sabe que P está en NP. La pregunta P vs. NP pregunta si la inclusión también va en sentido contrario (si P⊆NP y NP⊆P, entonces P = NP) o si P es simplemente un subconjunto adecuado (con todos los problemas en P también en NP, pero no todos los problemas en NP están en P). En segundo lugar, dado que la factorización prima no es NP-completa sino NP-intermedia, incluso si se encuentra un algoritmo de tiempo polinómico clásico (no cuántico) para ello, eso todavía no nos dice si P = NP o P⊊NP (también conocido como P ≠ NP). Y tercero, no estoy seguro de en qué basas tu afirmación “… pero probablemente sería de un orden muy alto de tiempo polinómico, lo que hace que sea prácticamente difícil romper el RSA”. Que yo sepa, eso es completamente incompatible. Nadie sabe el grado del polinomio en un algoritmo de factorización de números enteros clásico polytime aún no descubierto. La versión cuántica (algoritmo de Shor) es ciertamente razonable.

Ahora, si de hecho P = NP (con algunas advertencias, como la prueba tiene que ser constructiva, y el grado del polinomio tiene que ser razonable), lo que se cree que es muy improbable, entonces toda la criptografía, excepto la plataforma de una sola vez sería inútil Si, por otro lado, P⊊NP pero la factorización entera se muestra en P, entonces la criptografía actual de clave pública (y solo de clave pública) basada en la dificultad de factorizar números compuestos, como RSA, se vería afectada.

Además, tenga en cuenta que las computadoras cuánticas, que no se sabe que resuelven problemas de NP completo en el tiempo polinomial, pueden factorizar números enteros en el tiempo polinomial, por lo que si (o quizás más apropiadamente, cuándo) se realizan las computadoras cuánticas, también romperán RSA, junto con métodos de clave pública basados ​​en curvas elípticas. Existen esquemas de cifrado de clave pública actualmente resistentes al ataque cuántico (como los esquemas basados ​​en redes), pero no están listos para su uso en horario estelar. Según tengo entendido, los investigadores todavía están trabajando para reducir el tamaño de la clave a algo razonable.

Entonces, en resumen, P = NP (con las exenciones de responsabilidad habituales) mataría toda la criptografía, clave pública y privada, excepto el pad de una sola vez, mientras que la factorización de enteros rápidos o las computadoras cuánticas solo matarían la criptografía de clave pública, y tal vez no todas sus formas

Es cierto … y no es cierto 😀

La criptografía se basa precisamente en este postulado de que P = / = NP.

¡Hagamos un algoritmo en el que sea fácil verificar que su contraseña es buena pero es muy difícil de adivinar!

Esa es precisamente la definición de la clase de problema NP: “difícil de adivinar, fácil de verificar”. Entonces, si descubrimos que P == NP, el algoritmo de repente se convertirá en “fácil de adivinar, fácil de verificar”. ¡Qué fastidio!

Pero, pero … (¡Hay un pero!) Polinomio no significa que será fácil. Si el algoritmo está en O (log n ^ 12) (como la primera versión de la prueba de primitividad de AKS, por ejemplo), aún sería imposible usarlo para “descifrar la criptografía”.

Entonces es cierto … pero no es necesariamente cierto.

La prueba en sí misma probablemente no romperá ningún algoritmo directamente. Significará (y posiblemente muestre cómo) algunas tareas de NP se pueden realizar de manera más eficiente, lo que permite la fuerza bruta o analizar algunos algoritmos criptográficos, como se señaló.

Sin embargo, no todos los algoritmos criptográficos en uso dependen de las funciones NP-hard. Ahora hay un trabajo activo en esta área para comprender y construir nuevas criptomonedas que continuarán siendo sólidas incluso si el cálculo cuántico (por ejemplo, factorización) se vuelve factible en valores grandes, que no es lo mismo que pediste, pero que podría tener implicaciones similares

Sí, la mayoría de nuestros algoritmos criptográficos serán inútiles.
La mayoría de estos algoritmos dependen de la suposición de que P no es igual a NP. Si P = NP, tendremos algoritmos teóricamente eficientes para descifrar cualquier dato sin la clave requerida.

Incluso si P = NP, bien podría ser el caso de que el algoritmo sea demasiado complejo (es decir, que imponga requisitos demasiado altos en términos de implementación y recursos computacionales) para tener consecuencias prácticas en el mundo real. Si es así, los sistemas criptográficos son (aún) seguros.