¿Una contraseña con todos los puntos de código Unicode posibles causaría problemas en los algoritmos de hash tradicional, como Bcrypt?

3

He estado jugando con esta idea, pero hipotéticamente, si tuvieras un administrador de contraseñas que usaría cualquier posible interpretación (por ejemplo, no caracteres de control como BEL, NUL, DEL, etc., o caracteres sustitutos) código Unicode puntos, y un algoritmo de backend y hash del sitio que los aceptaría, ¿cuántos bits de entropía proporcionaría una contraseña de dieciséis caracteres?

No estoy 100% seguro de que estoy calculando esto correctamente, pero de acuerdo con esta respuesta de StackOverflow , hay 1,111,998 puntos de código válidos posibles para este propósito, por lo que cada carácter debe proporcionar log2(1111998) ≈ 20 bits of entropy per character , ¿correcto?

¿Esto rompería algún algoritmo común de hashing de contraseña como bcrypt? ¿Hay algún problema imprevisto en el uso de puntos de código Unicode sin asignar en contraseñas, excepto en algunos sitios que restringen el conjunto de caracteres disponibles para usar?

    
pregunta Brandon Anzaldi 07.07.2016 - 03:38
fuente

2 respuestas

7

En realidad no. Los algoritmos de hash y las funciones de derivación de claves (nota al margen: bcrypt es un KDF, no hash) funcionan en bytes, no en caracteres. Esto significa que, en lugar de trabajar en Unicode, ve en su lugar los bytes codificados en utf-8 (o cualquier codificación que use). Por lo tanto, el hash / KDF en sí no tendría ningún problema al procesar las contraseñas de Unicode.

Sin embargo , Unicode tenía muchas representaciones diferentes para los mismos personajes. Esto se debe a combinar caracteres . Diferentes sistemas operativos y diferentes métodos de entrada de texto pueden producir diferentes puntos de código para los mismos caracteres. Los desarrolladores de aplicaciones deben asegurarse de que los caracteres Unicode están normalizados antes de pasarlos a bcrypt.

Otra posible complicación es que hay un número diferente de caracteres posibles entre la cadena Unicode no normalizada y normalizada. Para generar un método de generación de contraseñas Unicode aleatoriamente uniforme, debe generar uniformemente sobre los caracteres normalizados, de lo contrario, su método de generación de contraseñas puede desviarse hacia los caracteres que tienen representaciones múltiples.

    
respondido por el Lie Ryan 07.07.2016 - 03:59
fuente
4

BCrypt no funcionará con un byte NUL porque está reservado para su propio uso interno (creo que para hacer un seguimiento del final de la contraseña o algo así).

Aparte de eso, lo que realmente hace BCrypt es un hash de una matriz de bytes, no de caracteres. Desde su punto de vista, solo es una combinación de números y si esos números se correlacionan con una cadena presentable en un conjunto de caracteres u otro nunca juega un factor en el algoritmo.

Esto también es válido para todos los demás algoritmos de hash importantes (que yo sepa).

    
respondido por el Numeron 07.07.2016 - 03:51
fuente

Lea otras preguntas en las etiquetas