¿Por qué limitar las contraseñas a caracteres imprimibles ascii? [duplicar]

13

Todos los artículos sobre seguridad de contraseñas que leo le dicen a las personas que hagan más complicada la contraseña utilizando una gama más amplia de caracteres. Dicen que no solo use a-z, sino que también mezcle algunos A-Z, números 0-9 y algunos signos de puntuación. Básicamente utiliza todos los caracteres de tu teclado. Sin embargo, estoy creando sitios web diseñados para un público que no habla inglés. Específicamente los usuarios chinos. Me he dado cuenta de que muchos sitios web chinos también piden que las contraseñas se realicen utilizando el mismo conjunto de caracteres. Me quedo con un acertijo sobre por qué limitarme solo al conjunto básico de ascii. ¿Por qué no utilizar caracteres chinos u otros caracteres de guión?

Por ejemplo, en lugar de usar "! 0 *% y6 #! 7N @ 6", el usuario podría usar "胜 0 屿% y6 #! 7N 景 6", que es de la misma longitud pero significativamente más complejo.

Mi aplicación está construida en UTF-8 y es compatible con scripts chinos y otros complejos. Por lo tanto, no hay ningún problema de programación para permitir caracteres complejos en las contraseñas.

Al ampliar el posible conjunto de caracteres de contraseñas para incluir caracteres chinos, japoneses, coreanos y árabes, puedo aumentar la entropía de las contraseñas a niveles increíblemente altos sin hacer que la contraseña sea más larga o más difícil de recordar. De hecho, puede ser más fácil para mis usuarios chinos recordar una contraseña china que una en inglés. Sería muy improbable que alguien pudiera usar fuerza bruta o usar una tabla arco iris para descifrar la contraseña.

Puedo entender los límites del conjunto de caracteres en los usuarios occidentales donde los caracteres utilizados son todos los de un teclado y es bastante incómodo ingresar un carácter que no esté en su teclado. Sin embargo, los usuarios chinos tienen herramientas en su sistema para ingresar el conjunto completo de caracteres chinos, por lo que no hay problema para ellos allí.

Así que para hacer la pregunta en breve. ¿Existe algún problema de seguridad que permita a los usuarios crear contraseñas de caracteres más allá del conjunto de teclado normal?

Para expandir y responder el punto de AviD a continuación:

Cuando se ingresa una contraseña, no permanece como caracteres sino que se convierte en una secuencia de bits. Estos bits son la contraseña real. El proceso de convertir caracteres a bits es la codificación de caracteres. ASCII es una de esas codificaciones, aunque ahora es bastante antigua y de tamaño limitado. Otro común es Unicode, que ha evolucionado en la codificación UTF-8 que la mayoría de los sitios web se recomienda usar en la actualidad.

Unicode y UTF-8 son compatibles con ASCII, por lo que cualquier contraseña basada en ASCII sería la misma en bits, sin importar qué codificación se usó cuando se ingresó la contraseña. Sin embargo, hay algunas formas de codificación que siguen siendo populares y que no son compatibles con muchas otras que no son compatibles con Unicode o UTF-8. Estos incluyen sistemas de codificación como Big5 (usado en Tiawan y Hong Kong) y GB usados en China continental.

Si alguien ingresó su contraseña en una computadora un día en una codificación y otro día en otra codificación, la secuencia de bits enviada como la contraseña sería diferente.

Es posible detectar el sistema de codificación y convertirlo en el lado del servidor. Mis aplicaciones ya lo hacen, convirtiendo todo lo que se ingresa en UTF-8. Sin embargo, me pregunto qué tan perfecta es esa conversión. ¿Big5 convertido a UTF-8 daría el mismo resultado que GB convertido a UTF-8?

Además, hay algunos ataques XSS basados en codificación de caracteres que utilizan la codificación y el manejo de caracteres descuidados como su vector. ¿Podría usarse algo similar para comprometer las contraseñas de los usuarios o mi aplicación en la que no se colocan límites, o muy pocos, sobre qué caracteres se pueden imputar?

    
pregunta Rincewind42 27.07.2011 - 07:28
fuente

2 respuestas

12

Desde un punto de vista de seguridad, es deseable tener un conjunto de caracteres enorme para elegir los caracteres, tal como dijiste. La razón por la que algunos sitios alientan a los usuarios a atenerse a ASCII es por razones técnicas y organizativas:

Si el software fue escrito sin Unicode en mente o usando un entorno que no hace a Unicode totalmente transparente (como PHP, versiones antiguas de MySQL, etc.), requiere una cantidad significativa de trabajo. para agregar compatibilidad con Unicode.

Además, si el software no está dirigido al mercado asiático, a la empresa en desarrollo simplemente no le importa . Puede que no tenga experiencia y conocimiento para probar esos conjuntos de caracteres. Piense en resolver caracteres combinados, que se vean exactamente iguales pero que tengan códigos diferentes, etc.

Esto podría dar como resultado solicitudes de asistencia que deben manejarse y, por lo tanto, generar costos.

tl; dr: Si su software puede manejar Unicode correctamente y usted puede atender las solicitudes de soporte, vaya para toda la gama.

    
respondido por el Hendrik Brummermann 27.07.2011 - 08:49
fuente
3

La razón habitual citada para adherirse a un conjunto estandarizado de caracteres es más sobre la facilidad de uso, tanto desde la perspectiva del usuario como desde la perspectiva del servicio de asistencia.

Desde una perspectiva de seguridad, agregar más conjuntos de caracteres aumenta el espacio de caracteres que un atacante tendría que buscar, por lo que hace que el ataque de fuerza bruta sea más difícil y reduce la probabilidad de que exista una Tabla Arcoiris adecuada para su sistema.

    
respondido por el Rory Alsop 27.07.2011 - 08:33
fuente

Lea otras preguntas en las etiquetas