Para formular esta pregunta con precisión, definiré una hipotética función hash "perfecta" idealizada H (n) que tiene buenas propiedades de escalabilidad, y formularé un problema PERFECT HASHCASH en términos de eso, entendiendo que las consideraciones prácticas pueden terminar dando solo una aproximación de este ideal.
Para simplificar, diremos que nuestra función hash H(n) toma como entrada un solo número natural n. Entonces decimos que H(n) es una función hash perfecta si y sólo si:
Lo primero formaliza la escalabilidad de nuestra función, y lo segundo formaliza la idea de que queremos que todos los hashes aparezcan aproximadamente "con la misma frecuencia" como salida. Aparte de eso, nuestra función hash perfecta es una caja negra, y no nos importa mucho cómo funciona exactamente, siempre que cumpla con las propiedades anteriores, así como con los deseos habituales que se aplican a las funciones hash (fáciles de calcular, difíciles de invertir, colisiones difíciles de encontrar, etc.).
Partiendo del supuesto de que existe una función hash perfecta, ahora podemos definir el problema HASHCASH PERFECTO de la siguiente manera: HASHCASH PERFECTO toma como entrada una función hash perfecta H, un número natural n y un vector de ceros 0^d de longitud d , que puede considerarse como una representación unaria de d. Una solución para el HASHCASH PERFECTO consiste en una n y una d tal que H(n) comienza con 0^d.
Dadas esas entradas, está claro que PERFECT HASHCASH está en la clase de complejidad TFNP , ya que este es un problema de función y se garantiza que existe una solución.
¿Podemos también identificar PERFECT HASHCASH como miembro de cualquier clase de complejidad más fina que TFNP?
¿Podría ser tal vez en PPP ? ¿ PPA ? PPAD ? ¿Algo más?
Para obtener información detallada, consulte Clase de complejidad en Wikipedia.
EDITAR : la pregunta anterior se ha revisado, ya que en la forma en que la formulé originalmente supuse que SHA256 es lo que ahora llamo una función hash perfecta. Muchas personas han notado en los comentarios que esto puede no ser cierto, por lo que en lugar de poner el énfasis en esta pregunta sobre si SHA256 tiene específicamente las buenas propiedades de escala que queremos, definí una función hash idealizada que esperamos que SHA256 al menos se aproxime lo suficientemente bien. para propósitos del mundo real, y reformuló la pregunta en términos de eso.
Como nota final para aclarar cualquier posible confusión, para hacer que el HASHCASH PERFECTO se asemeje al Hashcash real, tendríamos que hacer una suposición más: que existe alguna forma de comenzar con un bloque de datos (un correo electrónico, un bloque de Bitcoin, etc. ) y de alguna manera derivar una función hash perfecta característica de eso, tal vez "salando" una función hash perfecta diferente de manera que el resultado sea también otra función hash perfecta. Entonces, en el caso de un "Bitcoin perfecto", todos los mineros en la red de bitcoin estarían trabajando con sus propias funciones únicas de hash perfectas H'(n) que de alguna manera están vinculadas al bloque en el que están trabajando, y cada minero simplemente probarían H'(0), H'(1), H'(2), ... en orden hasta que encuentren algo que comience con suficientes 0. Cada H' sería una entrada diferente a PERFECT HASHCASH.
Hay una razón por la cual las funciones hash criptográficas, como el SHA256 doble que se usa para la prueba de trabajo en Bitcoin, generalmente no se describen usando estas clases de complejidad que clasifican el comportamiento asintótico. De hecho, hay varios.
Una razón técnica es que las funciones hash a menudo no escalan. Por ejemplo, no se define cómo se extendería la prueba de trabajo para operar en 512 bits. Entonces, una opción natural sería usar SHA512, pero pasar de SHA256 a SHA512 requiere muchas opciones esencialmente arbitrarias, como cambiar la cantidad de rondas de 64 a 80, que están estandarizadas pero no en una forma de escala natural y no para hash arbitrariamente grande tamaños
No es relevante para el criptógrafo. Incluso una función hash NP completa, que sería la más fuerte entre los casos de complejidad que enumeró para construir un hash fuerte, no garantiza todo lo que queremos de un hash criptográfico o una función de prueba de trabajo. Para calificar para NP-completo es simplemente una fuerte heurística de que el problema no puede resolverse mediante un algoritmo que es, asintóticamente, menos que exponencial. Pero para una buena función hash queremos que sea, en el conteo de bits muy limitado que elegimos para usarla, máximamente exponencial en el sentido de que resolverla es realmente tan difícil como probar todas las posibilidades en una función hash. Para su correspondiente función de prueba de trabajo con tal dificultad que solo una fracción x del rango de salida es aceptable, esto significaría que deberíamos esperar requerir una cantidad de intentos de x/2 veces el tamaño del rango de salida completo para encontrar una prueba de trabajo. Cualquier cosa mejor que eso incitaría a un académico a decir que la función hash asociada está rota, incluso si simplemente reduce el número de intentos a la mitad, lo que aún la colocaría en una clase de complejidad exponencial y sería fácilmente posible incluso con una función NP completa. .
Un ejemplo impresionante (pero solo superficialmente relacionado) de cómo elegir algo aparentemente NP-completo es insuficiente para obtener algo criptográficamente difícil es la criptografía de mochila. Por supuesto, allí el problema era que al elegir casos especiales se reducía la complejidad del problema. El punto es que incluso un problema NP-completo puede ser menos difícil que tener que probar todas las soluciones, ¡a pesar de que a veces se describe de esa manera! Para una calidad de grado de criptografía, tener que probar cada entrada se entiende literalmente; para el análisis de complejidad, es suficiente si la escala asintótica sigue siendo exponencial en el número de bits. Entonces, si pudiera reducir el problema a otra función NP-completa tomando solo cada 1000 bits como entrada,
¡Es difícil! Y creo que esta dificultad ya lo ha descarriado: incluso sus argumentos para ubicar este problema en TFNP son, aunque muy cercanos a la verdad, no verdaderos en el sentido matemático. Por ejemplo, si especifico x=0, ninguna y puede producir hash(y) <x, contradiciendo su afirmación. Si todos los demás x están bien o si hay un valor mínimo requerido para x probablemente depende de cómo defina las "cadenas" y en las que desea que opere el hashcash. Para Bitcoin con un número limitado de bits que ingresan al doble-SHA256, no me sorprendería si x=1 tampoco tiene una solución, es decir, si ningún hash de bloque puede volverse exactamente cero. Por supuesto, probablemente nunca lo sabremos. En la práctica, es deseable que una función hash produzca funciones de prueba de trabajo total en la forma que usted describe, pero no creo que sea una calidad comprobada. Descargo de responsabilidad: Sinceramente, no lo sé. Realmente deberías preguntarle a un criptógrafo.
Lo que queda por hacer para responder a su pregunta, después de encontrar cómo se escala la función hash y verificar que sigue siendo polinomial para tamaños grandes arbitrarios, es solo esta prueba de que la función de prueba de trabajo correspondiente es total. Si esta prueba se puede hacer usando el principio del casillero, has demostrado que está en PPA, etc.
Entonces, ¿dónde está la dificultad? Por ejemplo, si y tiene al menos tantos bits como x, y si cambiamos su hashcash para que tenga un valor menor o igual en lugar de menor que, y si estamos dispuestos a multiplicarlo aún más hasta el punto de que encontrar una prueba de trabajo o la existencia de una colisión hash es lo suficientemente bueno como para hacer que "hashcash" sea verdadero, entonces obviamente se aplicaría el principio del casillero como se explica en el artículo de wikipedia al que se vinculó.
Pero cualquier cosa menos que eso, hasta donde puedo ver, no sería suficiente para aplicar el principio del casillero y, por lo tanto, no respondería a la pregunta de si el hashcash está en PPP o no. Para volver a consultar su artículo de wikipedia vinculado: solo para muy pocos problemas, la respuesta es conocida, incluso para PPP. Para los casos especiales de PPP, PPA y PPAD, obviamente se vuelve aún más difícil. Si encuentra una solución, publíquela en una revista académica, ¡no solo aquí!
fabricante de cosas7
muro
Nate Eldredge
mike bataglia
Meni Rosenfeld
Meni Rosenfeld
usuario6049
Meni Rosenfeld
mike bataglia
usuario6049
usuario6049
Meni Rosenfeld
usuario6049
Meni Rosenfeld
usuario6049
Meni Rosenfeld
Meni Rosenfeld
usuario6049
Meni Rosenfeld