¿Cuál es la mejor manera de verificar de manera confiable la seguridad de una contraseña creada por el hombre y no generada por computadora de una manera algo segura?

[Descargo de responsabilidad: trabajo para AgileBits , creadores de 1Password .]

Sacrificar pollos

La forma habitual de determinar la fuerza de una contraseña específica es sacrificar un pollo y luego leer las entrañas. Pero en 1Password, lo hacemos mejor. Calculamos el horóscopo del pollo antes de sacrificarlo. Dado que algunos de nuestro personal son vegetarianos, siempre estamos buscando enfoques alternativos.

Hazañas imposibles de fuerza

El triste hecho del asunto es que los medidores precisos de contraseña son imposibles (salvo pasar años o décadas tratando de descifrar la contraseña ofrecida). La razón es porque la fuerza de una contraseña depende en gran medida del sistema por el cual se generó. Eso no es algo que pueda determinarse con confianza inspeccionando una sola contraseña.

Supongamos que tenemos un esquema tonto en el que arrojaste una moneda. Si surgió cara, usó la contraseña l&JXcpakQM8jOjYhb2y"N y si aparecía en cruz, usaría la contraseña .mVqm|Yv7NMfipFHqK6fg . Cada una de esas contraseñas se ve muy fuerte, pero debido a que el sistema solo le da dos posibilidades, es un sistema terrible Por lo tanto, vemos que la fortaleza de un sistema de creación de contraseñas no es cuántas letras, dígitos y símbolos tiene, sino cuántas maneras podría obtener un resultado diferente usando el mismo sistema.

Entonces, por ahora, el medidor de fuerza de contraseña en 1Password usa el mismo tipo de heurística que otros. Comprueba una lista de 10.000 contraseñas populares. Busca palabras simples y combinaciones simples. Es muy sensible a la longitud de la contraseña.

Sin embargo, dudamos en entrar en demasiados detalles, porque jugamos con los detalles. Y definitivamente jugamos con los límites para varias etiquetas de lenguaje sencillo, como “fuerte”. Por ejemplo, el medidor de seguridad de la contraseña en 1Password 2.5.9 (enero de 2008) es mucho menos estricto que el de hoy. Esta es una de esas partes de 1Password que está sujeta a cambios.

Hay muchas cosas que podríamos hacer para mejorarlo. Podríamos usar algo como PACK (kit de análisis y descifrado de contraseñas) para descubrir las reglas utilizadas para las contraseñas más comunes y luego probar las contraseñas enviadas contra esas reglas. Podríamos incluir los métodos utilizados por zxcvbn, y hay otros conocimientos adicionales que podemos incorporar al sistema.

La razón por la que no hemos estado haciendo mucho de eso es por la disminución de los retornos marginales. Cada verificación adicional que realizamos agrega complejidad al código y ralentiza las cosas, pero hace una mejora relativamente pequeña en los resultados reales.

Entonces, la mala noticia es que no importa cuán inteligente sea el medidor de seguridad de la contraseña, su precisión será limitada. La buena noticia es que, por imperfectos que sean, los medidores de fuerza de contraseña realmente ayudan a las personas a seleccionar mejores contraseñas.

Disculpe, pero ¿de dónde sacaste esa contraseña?

Una mejora que puede ver en nuestro medidor de seguridad de la contraseña es distinguir entre las contraseñas creadas con el generador de contraseñas incorporado y todo lo demás. Podemos calcular la precisión de las contraseñas creadas por el generador. Una contraseña de 23 caracteres creada con el generador de contraseñas (incluso si se limita solo a letras) va a ser enormemente más segura que cualquier contraseña creada por humanos (128 bits de entropía indescifrables).

Pero hasta entonces, tenemos que ajustar el generador bajo el supuesto de que las personas están inventando las contraseñas que se están probando. Esto subestima drásticamente la fortaleza de las contraseñas creadas con nuestro generador de contraseñas, lo que le brinda una estimación muy conservadora.

Hay tres formas de medir la seguridad de la contraseña: (1) la cantidad de contraseñas posibles diferentes según el método que utilizó para seleccionarla; (2) la cantidad de contraseñas que un atacante necesitaría probar antes de adivinar su contraseña, sin saber nada sobre cómo la seleccionó; (3) la cantidad de contraseñas que un atacante necesitaría probar antes de adivinar su contraseña, sabiendo cómo la seleccionó.

La longitud es el factor más importante en (2) porque cuanto más larga sea su contraseña, más contraseñas necesitará probar un atacante. Es por eso que la mayoría de los sitios que tienen reglas de contraseña imponen una longitud mínima.

Supongamos que su contraseña tiene 4 letras. Tuviste:

  1. elige el nombre de tu mascota, Fido? Fuerza = 1 en 1 (es decir, ninguno).
  2. elegir una palabra de 4 letras del Diccionario Oficial de Jugadores de Scrabble (OSPD)? Fuerza = 1 en 4K.
  3. elegir una palabra del OSPD y resultó ser una palabra de 4 letras? Fuerza = 1 en 80K.
  4. ¿Tira un dado de 26 lados con las letras az cuatro veces? Fuerza = 1 en 457K.
  5. tira un dado de 26 lados con las letras az cuatro veces y luego rechaza cualquier palabra en el OSPD. Fuerza = 1 en 453K.

Estas fortalezas se basan en la cantidad de opciones que tenía. Pero la fuerza más importante es la fuerza del atacante. Suponiendo que un atacante no sabe cómo eligió su contraseña, generalmente comenzaría con palabras de diccionario y contraseñas más cortas y avanzaría. Saben cómo la mayoría de la gente elige las contraseñas. Sorprendentemente, la opción 3 no es realmente más fuerte que la opción 2. Y la opción 5 en realidad podría ser más segura que la opción 4. (La pérdida del 1% en las opciones supera el riesgo de que un atacante pruebe primero las palabras del diccionario). Aún mejor, solo agregue una más carta y esto sube a 11.9M.

Entonces, ¿cómo determinar la fuerza? Considere la cantidad de posibilidades aleatorias que elija para cada parte de su contraseña y multiplíquelas. Convierta a bits de entropía si lo desea tomando log base 2.

Un verificador de contraseñas le dice que su contraseña es mucho más segura cuando agrega un dígito al final porque asumen que esto significa que los atacantes ahora deben probar un alfabeto de 36 caracteres a-z0–9 en lugar de solo az para cada carácter. Y una letra mayúscula cambia el alfabeto a 52 o 62 caracteres. Pero no, “Contraseña1” no es realmente más segura porque los atacantes saben que las personas escriben con mayúscula la primera letra y agregan dígitos al final.

Aquí hay un gran resumen de las nuevas pautas de NIST: Hacia mejores requisitos de contraseña

Lo primero que debe considerar es “cuándo” podría comprobar la fuerza. En sistemas de contraseña bien implementados, la contraseña de texto sin cifrar no se almacena como parte del sistema, solo un hash de alguna forma. Entonces, el primer lugar que puede verificar es durante el proceso de “cambiar mi contraseña”. Hay módulos enchufables que pueden probar casi cualquier cosa que no se incluya en un diccionario, cumpla con los requisitos de complejidad y longitud, no una de las últimas 24 contraseñas utilizadas, etc. Muchos sistemas le permiten definir su propio módulo de “verificación de fortaleza”; pero tenga en cuenta que la mayoría de las personas que escriben sus propios módulos lo hacen mal y dejan los restos de la contraseña en claro.

Una vez que se cambia una contraseña, la prueba se convierte en una grieta. Carga los hashes de contraseña en una herramienta (como Lopht) y deja que intente descifrar la contraseña. La mayoría de las personas simplemente corren hacia el éxito frente a “detenerse después de X minutos de fuerza bruta sin éxito”. Nuevamente, esto crea nuevas vulnerabilidades. El resultado es un informe sobre el momento de descifrar el hash de contraseña que indica la fuerza de la contraseña.

Esto es peligroso, una vez trabajé en un lugar donde un gerente no técnico aprueba que un administrador ejecute Jack-the-Ripper para descifrar todas las contraseñas en el servidor corporativo. El administrador lo hizo y luego imprimió el informe que muestra la contraseña descifrada y el tiempo para descifrarla. Se suponía que esto verificaba que las personas usaban contraseñas seguras que no podían validarse cuando configuraban la contraseña. Desafortunadamente, el administrador dejó la lista en el baño y la perdió. La respuesta “oficial” fue que “quien haya robado este documento confidencial desde el interior del escritorio de los administradores debe devolverlo y ser rescindido posteriormente. Eso falló. Cuando se dieron cuenta de lo estúpidos que eran, se movieron para “simplemente devolverlo sin hacer preguntas”. Intenté convencerlos de que todas las contraseñas habían sido comprometidas y que debían requerir un cambio. Decidieron no porque eso era demasiado inconveniente. Me callé y me prometí un nuevo trabajo con menos personas estúpidas … 😉