Si la red de bitcoin se estaba resquebrajando bcrypt, ¿qué factor de costo usaría?

6

Dado que el mejor ejemplo de recurso agrupado para romper hashes es la red de bitcoin, actualmente se está batiendo a través de 2.14 ExaHashes / s.

Quiero preguntar, si los recursos de esta red apuntaran a craqueo de pez globo y (por extensión) bcrypt, ¿cuál sería el factor de costo mínimo a mantener cuando se protegen las contraseñas usando bcrypt?     

pregunta Amin Shah Gilani 04.12.2016 - 16:44
fuente

2 respuestas

5

Respuesta corta: si compara las velocidades en x86, el costo máximo en PHP de 31 (2 ^ 31 iteraciones) sería lo suficientemente seguro para una contraseña segura (aleatoria de 8 caracteres) . No es que se pueda utilizar, un hash tardaría aproximadamente 200 horas en generarse en un escritorio.

Respuesta larga: (gran margen de error debido a la falta de datos de rendimiento de hash precisos, no hay datos específicos sobre la seguridad de la contraseña y la aproximación perezosa).

El costo de la fuerza bruta en bruto puede variar con un factor de miles de millones entre una contraseña de 6 letras y una contraseña de longitud 10 con números y caracteres especiales. (26 ^ 6 = 3.0E + 8 para minúsculas, 94 ^ 10 = 5.3e + 19 para mixalpha-num-all) Las velocidades de hash pueden variar con la implementación.

Entonces, si el usuario elige una de las 1000 contraseñas más utilizadas, es tan bueno como un número de pin de 3 dígitos, lo que hace que la pregunta sea prácticamente irrelevante.

Para este fin, la respuesta es "tanto como puedas, no podemos salvar a todos de ellos mismos"

Pero hagamos un cálculo de la parte de atrás de la servilleta para tener una idea. Supongamos que la base de datos establece un requisito mínimo fuerte de "tan solo 8 caracteres aleatorios"

Con un conjunto de caracteres de todos los caracteres ASCII en minúsculas y mayúsculas, todos los dígitos y caracteres especiales que vendrían a 6161234432565770 combinaciones

Ahora vamos a tener una idea del rendimiento de los hashes. La única comparación de lado a lado que pude encontrar fue la siguiente: enlace

Indica que el factor de trabajo predeterminado de 10 es aproximadamente igual a 80.000 rondas de SHA512crypt . Ahora SHA 512 solo cuesta alrededor del 120% del tiempo 256 tomas

Eso hace que bcrypt con costo (10) sea aproximadamente igual a 100.000 rondas de SHA256.

El costo de BCrypt se define así:

  

El parámetro de costo de dos dígitos es el logaritmo base-2 de la iteración   cuente para el algoritmo de hashing basado en Blowfish y debe ser   en el rango 04-31, los valores fuera de este rango causarán que crypt () falle

costo (10) = 2 ^ 10 = 1024 iteraciones. por lo tanto, el algoritmo SHA256 de bitcoin es aproximadamente 100 veces más rápido por iteración. Asumiendo que la red BitCoins puede hacer 2.14E + 18 SHA256 / segundo, se reduciría a 2.14E + 16 iteraciones de BCrypt / segundo. El espacio de teclas de la contraseña aleatoria de longitud 8 en el conjunto de caracteres mixalpha-numeric-all es aproximadamente 6.16E + 16

  • Por lo tanto, en una iteración, podría imponer una fuerza bruta en dicha contraseña en < 3s. el mínimo para PHP es un costo de 4, así que 16 iteraciones.
  • Al costo predeterminado de 10, llevaría casi una hora.
  • Al costo máximo de 31 aumentaría otros 2 ^ 21 = 2097152. Eso se reduciría a > 200 años. (2097152 horas es un poco menos de 240 años. )

Esta es una fuerza bruta bastante inviable, y por el momento podría considerarse segura.

La cantidad máxima de 'costo' en BCrypt sería suficiente contra toda la red actual de BitCoin si la contraseña es moderadamente fuerte.

Sin embargo, la comparación de BCrypt con SHA512 menciona el costo (20) ya toma > 3 minutos en una estación de trabajo, por lo que los grandes costos no son prácticos por ahora. extrapolando 2 ^ 12 * 3.12 / 60 = ~ 213 horas

    
respondido por el J.A.K. 04.12.2016 - 19:57
fuente
2

Tal vez estás haciendo la pregunta incorrecta:

No desea preguntar qué factor de trabajo (recuento de iteraciones) utilizo? (con KDF / hashing adaptable), quiere preguntar cuánto tiempo durará una sola. hash take? y calcula el factor de trabajo a partir de eso.

La respuesta a este último es "siempre que pueda tolerar". Más aquí por un experto enlace

Entonces, para responder a su pregunta, necesita saber el tiempo que tomará dicha red para calcular un hash. O más útil, los H / s para un factor de trabajo dado. Los puntos de referencia de Bcrypt son a menudo citado en términos de bcrypt(5) , que es un factor de trabajo de 5. Si puede obtener los H / s para bcrypt (5) de dicha red, entonces tiene una base para comparar con puntos de referencia de craqueo alternativos.

Lo mejor que he encontrado para un dispositivo local es este 8x GTX Titan X cudaHashcat Benchmark que se agrietará bcrypt (5) a una velocidad de 133 KH / s (en el momento de la escritura). Esta es una buena base para comparar con una red de craqueo distribuido.

Solo una nota, distribución de hash distribuida es no es nuevo y debemos suponer que los poderes que tienen tendrán muchos órdenes de magnitud más poder de craqueo que cualquier cosa disponible públicamente.

¿Está preguntando qué factor de trabajo debe usar para mantener una contraseña segura?

Aquí está mi regla personal:

  

Evalúe su bcrypt en una máquina de desarrollo local y en un nodo de servidor web en el que se implementará su aplicación. Luego, elija el tiempo más largo tolerable (en términos de UX) al que esté dispuesto a someter a sus usuarios. Para mí, esto es aproximadamente 1000 ms (recuerde: pantallas de registro e inicio de sesión; no sucede con frecuencia). Luego encuentre el factor de trabajo que se encuentra justo dentro de ese tiempo y seleccione el más lento de su caja local de desarrollo y producción.

    
respondido por el cottsak 06.12.2016 - 04:22
fuente

Lea otras preguntas en las etiquetas