Double Hash
Bitcoin está utilizando dos iteraciones hash (denotadas SHA256 ^ 2, es decir, "SHA256 función al cuadrado") y la razón de esto se relaciona con un ataque parcial en el hash SHA1 más pequeño pero relacionado. La resistencia de SHA1 a los ataques de cumpleaños se ha roto parcialmente a partir de 2005 en O (2 ^ 64) frente al diseño O (2 ^ 80). Si bien hashcash depende de la resistencia a la imagen previa y, por lo tanto, no es vulnerable a los ataques de cumpleaños, un método genérico para endurecer SHA1 contra el ataque de colisión de cumpleaños es iterarlo dos veces.
Hasta el momento, no existe un ataque comparable contra SHA256, sin embargo, como el diseño de SHA256 es similar a SHA1, probablemente sea defensivo para las aplicaciones usar doble SHA256. Y esto es lo que hace Bitcoin, no es necesario dada la confianza de hashcash en la seguridad de la preimagen, pero es un paso defensivo contra futuros desarrollos criptoanalíticos. El ataque a SHA1 y en principio a otros hashes de diseño similar como SHA256, también fue la motivación para la competencia de diseño de NIST SHA3, que todavía está en curso.
Future Hash
Una vez que el concurso NIST SHA3 haya finalizado, Bitcoin podría en el futuro considerar adoptar hashcash-SHA3 como una actualización de seguridad (por ejemplo, una invocación única de SHA3 frente a una invocación doble de SHA256). Parece claro desde el salto SHA1, y SHA256 es un diseño similar, que anteriormente había un malentendido sobre la seguridad de las funciones hash contra colisiones de cumpleaños, y los finalistas SHA3 todos apuntan a solucionar ese problema.
Un aspecto de relevancia para hashcash-SHA3 es que hay cierto debate dentro del proceso de comentarios del NIST sobre la propuesta de debilitar la resistencia de SHA3 a los ataques de preimagen de hasta 128 bits (frente al tamaño de hash completo como en los hash anteriores). La motivación es una pequeña ganancia de rendimiento, con la lógica de que algunos algoritmos de enchufable con hash no se basan en la resistencia de imagen completa de longitud completa. La propuesta ha recibido comentarios negativos significativos debido a que crea una suposición de seguridad no estándar (en comparación con todos los valores hash anteriores), y por lo tanto crea riesgo y necesitaría todos los algoritmos conectables mediante hash (como HMAC, RSA, DSA, hashcash, etc.) ser reexaminado caso por caso para ver si SHA3 es seguro de usar con ellos;
Riesgos criptoanalíticos
Un problema práctico con el cambio a hashcash-SHA3 es que invalidaría todos los [hardware de minería ASIC] (/ bitcoin-mining-hardware /) existente, y también es un cambio poco probable, salvo en caso de riesgo de seguridad; no hay ninguna indicación de que SHA1 o SHA256, o SHA256 ^ 2 sean vulnerables al ataque previo a la imagen, por lo que la motivación no se encuentra en ausencia de nuevos desarrollos criptoanalíticos. Además, incluso si SHA256 ^ 2 se hizo más fácil debido al ataque criptoanalítico, y los mineros comenzaron a usar lo que sea que fuera el nuevo enfoque algorítmico, no necesariamente importa ya que [la dificultad simplemente se adapta a él] (/ what-is-bitcoin-mining-difficulty /). Sin embargo, un posible efecto colateral sería que introduciría más intercambios de memoria o precomputación que podrían hacer que los ASIC no sean rentables, o dar ventajas a las personas con grandes recursos para hacer los pre-cálculos.
De todos modos, esto es toda especulación sobre si y hasta que cualquier preimagen que afecte a los ataques criptoanalíticos se encuentre en SHA256.
Función Hashcash
El algoritmo hashcash es relativamente simple de entender. La idea se basa en una propiedad de seguridad de valores hash criptográficos, que están diseñados para ser difíciles de invertir (los denominados propiedad unidireccional o resistente a la imagen previa). Puedes calcular y de x a bajo costo y = H (x), pero es muy difícil encontrar x dado solo y. Una inversión de hash completa tiene un tiempo de ejecución de fuerza bruta computacionalmente inviable, siendo O (2 ^ k) donde k es el tamaño de hash p. Ej. SHA256, k = 256, y si se encontró una imagen previa, cualquiera podría verificarla de manera muy eficiente computar un hash, entonces hay una gran asimetría en la minería de imágenes previas (computacionalmente no factible) frente a la verificación (una sola invocación de hash).
Una segunda pre-imagen hash significa dada una preimagen x de hash y donde y = H (x), la tarea es encontrar otra imagen previa de hash y: x 'para que y = H (x'). Esto no debe confundirse con una colisión de cumpleaños que consiste en encontrar dos valores x, x 'para que H (x) = H (x'), esto se puede hacer en un trabajo mucho más bajo O (sqrt (2 ^ k)) = O (2 ^ (k / 2)) porque puede proceder calculando muchos valores H (x) y almacenándolos hasta que encuentre un par coincidente. Se necesita mucha memoria, pero hay compensaciones de tiempo de memoria.
La versión 0 del protocolo hashcash (1997) utilizó una segunda preimagen parcial, sin embargo, la versión posterior 1 (2002) usa preimágenes parciales de una cadena bastante elegida, en lugar de dígitos de pi o algo arbitrario, 0 ^ k (es decir, todos 0 cadena) se utiliza por conveniencia, por lo que el trabajo es encontrar x tal que H (x) = 0. Esto también es equitativo y solo requiere una invocación de hash para verificar contra dos con 2º pre-imágenes parciales. (Esta optimización fue propuesta por Hal Finney e independientemente por Thomas Boschloo).
Para facilitar el trabajo, la definición de una preimagen parcial es encontrar x tal que H (x) / 2 ^ (nk) = 0 donde / es el cociente entero de la división, n es el tamaño de la salida de hash ( n = 256 bits para SHA256) yk es el factor de trabajo, es decir, los primeros k bits de la salida de hash son 0. Entonces, por ejemplo, k = 20 requiere un promedio de 1 millón de intentos. En realidad, es la salida que coincide parcialmente, no la imagen previa, por lo que podría llamarse más exactamente una imagen previa con una coincidencia de salida parcial, sin embargo, la preimagen parcial es efectivamente una mano corta para eso.



Comentarios