Revelación completa: soy uno de los autores del artículo.
Un sistema exacto de comprobación de contraseñas almacena un estándar salado,
hash de compilación lento de la contraseña. Cuando una contraseña, como
password123, está registrado con el servicio de autenticación, un salt aleatorio
Se selecciona "sa" (esto debería ser 16 o más bytes aleatorios) y una
se aplica la función hash H de ralentización para calcular: H (sa, contraseña123). El resultado,
llámalo h, se almacena en una base de datos junto con la sal sa. Como se mencionó,
uno debe elegir H para ser lento (10s o 100s de milisegundos para calcular).
Las buenas opciones son argon2, scrypt o PBKDF2, correctamente configuradas.
Cuando un usuario intenta iniciar sesión más tarde, si ingresan su contraseña, el hash
Se recalcula y verifica contra el valor almacenado. En el ejemplo anterior,
Si el usuario envía la contraseña123, entonces se vuelve a calcular (otra vez lentamente)
H (sa, contraseña123) y verifica el resultado --- coincide con el anterior
computar h y el inicio de sesión puede ser permitido.
Cualquier desviación en la contraseña enviada de la registrada previamente.
da como resultado un valor hash totalmente diferente, y el inicio de sesión falla.
Nuestra idea es simple: si la primera comprobación falla, el sistema también puede
aplicar un pequeño número de funciones "correctoras" a la contraseña enviada,
y luego aplicar el algoritmo hash al resultado. Por ejemplo, podríamos
corregir una función de corrector de bloqueo de mayúsculas F_caps que toma como entrada una contraseña
y genera la contraseña con el uso de mayúsculas en todas las letras cambiadas:
F_caps (PASSWORD123) = password123 y F_caps (pAsSwOrD123) = PaSsWoRd123.
También podríamos arreglar un corrector de mayúsculas de primera letra:
F_first (Contraseña123) = password123 y F_first (pASSWORD123) = PASSWORD123.
Tenga en cuenta que estos son fáciles de implementar.
Luego, para realizar una comprobación tipográfica-tolerante, se aplicaría la siguiente lógica para
una sal previamente registrada, hash pair (sa, h) y contraseña enviada pw
Si H (sa, pw) = h o H (sa, F_caps (pw)) = h o (sa, F_first (pw)) = h entonces
permitir inicio de sesión
A modo de ejemplo, si uno envía PASSWORD123, las comprobaciones estarán activadas.
PASSWORD123, password123 y pASSWORD123, con la segunda verificación
teniendo éxito.
Algunos puntos:
1) La eficacia de los ataques de fuerza bruta fuera de línea es exactamente la misma que
antes de. ¿Por qué? Porque solo almacenamos sa, h. El atacante, dado sa, h, lo hará.
Sólo aprenda la contraseña a través de un ataque de fuerza bruta que intenta la correcta
contraseña, en nuestro ejemplo contraseña123. No hay pérdida de seguridad aquí como
No hemos cambiado cómo se calcula H.
2) Hay un cambio insignificante en la seguridad contra la adivinación remota
los ataques. Lo mostramos a través de extensos análisis en el documento, pero hierve.
hasta el hecho de que en el mundo real la mejor estrategia es presentar el
las contraseñas más probables hasta cierto umbral (por ejemplo, muchos sitios bloquean un
cuenta después de 10 intentos fallidos). Los controles extra realizados por error tipográfico.
La corrección puede ayudar al atacante a tener un poco más de suerte, pero mostramos
que es esencialmente despreciable. Si uno está preocupado por eso le damos
Técnicas que lo reducen aún más.
3) La tolerancia tipográfica aumentará la utilización de la CPU para el servidor de inicio de sesión (y
posiblemente carga de memoria, cuando H es un hash de memoria como Scrypt o
argon2). Esto se debe a las invocaciones extra lentas de cómputo de H. In
practicar esto no parece ser tan caro como podría esperarse (3x
en nuestro ejemplo anterior) porque de todos modos los usuarios habrían terminado
vuelve a enviarlo después del rechazo y pagas el precio por cada intento.
4) No sugerimos permitir errores tipográficos arbitrarios. Esto ni siquiera es posible
actualmente, ya que requeriría recalcular H un número prohibitivo de veces
(¡Recuerda que es lento!), y de todos modos esto sería inseguro. Uno necesita
Elegir cuidadosamente qué errores tipográficos permitir en base a un análisis de principios. Nosotros
Cree los dos correctores mencionados arriba, mayúsculas y primera letra.
capitalización, son una obviedad para el despliegue seguro, más allá de eso
empieza a tener más matices.
Agregamos una pregunta frecuente que proporciona información adicional:
enlace