2009-12-12 9 views
9

Intenté recuperar una contraseña. Al pensar en esto, reconocí que el problema de "recuperación de contraseñas" es un buen ejemplo de un problema NP. Si conoce la contraseña, es muy fácil verificarla en tiempo polinomial. PERO, si no conoce la contraseña, debe buscar todo el espacio de soluciones posibles que se puede demostrar que demoran exponencialmente.¿Qué falta para esta prueba de P! = NP?

Ahora mi pregunta es: ¿Esto no demuestra que P! = NP ya que la "recuperación de contraseñas" es un elemento de NP que se puede demostrar que requiere más tiempo que el polinomio para ejecutarse?

+5

He descubierto una prueba verdaderamente notable que este margen es demasiado pequeño para contener –

Respuesta

1

El problema no es que la recuperación de contraseñas no sea polinómica, ya que está claro que hay que buscar en un espacio exponencial de respuestas.

En realidad, "recuperación de contraseña" no es realmente una descripción de un estándar computational problem. Parece que, formalmente, los algoritmos de descifrado de contraseñas toman algún tipo de "oráculo" que puede responder si una cadena dada es la contraseña correcta. Sin embargo, P y NP se definen en términos de máquinas de Turing, que toman cadenas como entrada.

+1

La recuperación de contraseña de fuerza bruta es, por supuesto, un problema de cómputo. Es fácilmente reducible a una entrada válida en la máquina estándar de Turing. Dichas reducciones son la base de una parte sustancial de toda la informática. – SomeWittyUsername

17

Si usted demuestra que cualquier algoritmo que resuelve "recuperación de la contraseña" requiere más tiempo polinómico, entonces sí demuestra que P ≠ NP.

De lo contrario, si solo muestra que requiere una solución en particular requiere más tiempo que el polinomio, no demuestra nada. Puedo escribir un género para requerir un tiempo exponencial (reorganizar la matriz hasta que esté ordenada), pero eso no significa que no haya una solución polinómica.

+2

No, también debe reformular la "recuperación de contraseña" como un problema de decisión y mostrar que el problema reformulado es NP-completo. – jason

+0

Pero, ¿de qué otro modo podría resolverse el problema de descifrar una contraseña arbitraria como una fuerza bruta que requiere tiempo exponencial? ¿No es el corazón del problema que la solución (por ejemplo, la contraseña) debe conocerse, de lo contrario, tendría que buscar todo el espacio de la solución? – gruenewa

+0

@gruenewa: El objetivo es dificultar las cosas (es decir, hacer que el cifrado de contraseñas sea fácil y el descifrado sea difícil). Pero la prueba de que su algoritmo se comporta de esta manera (como en: el descifrado no se puede calcular en tiempo polinomial en una máquina determinista) nunca se ha hecho. –

-1

¿Se acaba de verificación pertenecen a la misma clase de problemas como búsqueda?

+0

Probablemente debería agregar esto como un comentario en el OP en lugar de agregar una nueva respuesta. –

7

NP no significa "no polinomio", si eso es lo que estabas pensando (¡y mis disculpas de antemano si no lo fueras!). Significa "polinomio no determinista". Un algoritmo no determinista es aquel que es equivalente a un número ilimitado de instancias paralelas de un algoritmo. Como ejemplo, encontrar la contraseña correcta por fuerza bruta es un polinomio no determinista: si imagina que verificando la contraseña, si su suposición es correcta, toma tiempo lineal (es decir, polinomial) en la longitud de la contraseña, pero que necesita Verifique un número arbitrario de contraseñas posibles (k^n) en paralelo, luego el costo de encontrar la solución usando este método es un polinomio no determinista.

Un algoritmo no determinista también se puede considerar como uno cuyo estado se bifurca en algunos pasos. Un ejemplo simple de esto es un autómata finito no determinista (NFA): a veces no se sabe qué margen tomar entre los estados, por lo que se toman ambos. Es fácil mostrar que cada NFA es equivalente a un FA determinista, por lo que es tentador pensar que podría probarse lo mismo para otras clases de algoritmos interesantes. Desafortunadamente, es difícil hacerlo para el caso general del algoritmo polinómico, y la sospecha general es que no son equivalentes, es decir, que P! = NP.

4

El razonamiento de que el problema está en NP es correcto: si se puede verificar en tiempo polinomial, está en NP. Incluso los problemas más simples están en NP. Básicamente, todo P está incluido en NP. (*)

Ahora, aquí es una forma en que podría ir en convertir esto en una prueba de que P = NP:

1) Demostrar que "la recuperación de la contraseña" es NP-completo. Es decir, cualquier problema en NP puede reducirse a "recuperación de contraseña" en tiempo polinomial. (es decir, existe un algoritmo eficiente para convertir cualquier otro problema NP en "recuperación de contraseña").

2) Una vez que tenga eso, como lo menciona Pavel Shved, no es suficiente mostrar que el algoritmo intuitivo no es polinomio. Debes demostrar que no existe un algoritmo polinomial para resolver la "recuperación de contraseñas". Una tarea muy difícil.

(*) Edmund también tiene razón: NP significa polinomio en una máquina no determinista. Una verificación polinómica es esencialmente la ruta elegida por la máquina no determinista.

+0

Jason comenta sobre la "recuperación de contraseña" no es un problema de decisión es correcto. Sin embargo, en la práctica, esto a menudo no es un problema, ya que hay "trucos" prácticos para convertir los problemas de decisión de/en problemas de respuesta libre. Por ejemplo, en lugar de "recuperación de contraseña", puede preguntar al sistema: "¿está la contraseña arriba de MMMMMMMM o debajo?". –

+0

No tiene que mostrar que es NP-completo. Es suficiente demostrar un límite inferior en la complejidad para cualquier problema en NP, no solo en los completos, para separar las dos clases y mostrar que P! = NP. –

+0

Es cierto, he actualizado mi respuesta. –

2
  1. Como se indicó, la "recuperación de contraseña" no es un problema de decisión.
  2. No ha probado que la "recuperación de contraseña" no tiene un algoritmo de tiempo polinomial, simplemente ha argumentado por motivos intuitivos que no es así. El hecho de que un espacio de solución sea gigantesco no significa que no haya algoritmos rápidos para encontrar la solución; por ejemplo, hay permutaciones n! de un conjunto de n enteros distintos, pero solo uno está ordenado de forma ascendente pero podemos encontrarlo en n log n time. Para un ejemplo más divertido, vea Project Euler #67.
  3. Incluso si reformuló "recuperación de contraseña" como un problema de decisión y pudo demostrar que no hay un algoritmo de tiempo polinomial para resolverlo, ahora debe probar que la "recuperación de contraseña" es NP-completa.

Para detalles sobre P/NP/etc. vea esto previous question.

1

La declaración formal de este problema sería uno que acepta como entrada el valor hash (y sal) y los intentos de encontrar una contraseña que generará ese resumen: el problema básico búsqueda de texto cifrado conocido colisión.

Dependiendo de la calidad del hash, este podría no requerir tiempo exponencial. De hecho, muchos hash criptográficos de uso generalizado han identificado ataques que se ejecutan más rápido que las búsquedas en el espacio de claves.

Cuál es decir: usted (y algunos de los otros respondedores) tienen asumió que la rutina que munging de la contraseña tiene todas las características que los diseñadores quisieron tener. Esto debería ser probado.

0

Escribo esta respuesta porque tuve esta idea en algún momento, y las respuestas aquí no fueron satisfactorias.

Ha demostrado que P =/= NP bajo la presencia de un 'Oracle' (esto es lo que dice si la contraseña es correcta o no).

Se ha demostrado que no se puede probar el P original frente a NP usando Oracles (esta técnica se denomina relativización).

Para demostrar el problema original, debe definir Oracle en términos de una máquina de turing. En otras palabras, debe describir lo que hace el verificador de contraseñas con la entrada, y luego probar que no existe un algoritmo que pueda adivinar la contraseña dado el código del verificador de contraseñas.

Tenga en cuenta que debe hacer esto para cualquier posible verificador rápido de contraseñas. El único requisito del algoritmo del verificador de contraseñas es que se ejecute en tiempo polinomial con respecto a la longitud de la contraseña.

Por lo tanto, dado cualquier posible algoritmo que compruebe si la contraseña es correcta o no en tiempo polinomial, debe escribir un algoritmo que lea el algoritmo verificador e intente adivinar que la contraseña está en tiempo polinomial. Si puede probar o refutar que existe ese algoritmo, entonces ha resuelto el problema.

Cuestiones relacionadas