Estoy contribuyendo al complemento del secuenciador de palabras para contraseña de KeePass administrador , que puede generar contraseñas del estilo de diceware usando un PRNG de alta calidad. Algo en particular en lo que estoy trabajando es estimar la fortaleza de las contraseñas generadas usando la herramienta. Me cuesta un poco averiguar cómo dar cuenta de una de las opciones de configuración, que puede configurar una de las palabras en la secuencia para que tenga una probabilidad de aparecer en la contraseña generada o no; es decir, una opción para hacer que la contraseña tenga una longitud aleatoria.
Por ejemplo, supongamos que está eligiendo 2 palabras de una lista de 8 palabras para su contraseña (obviamente, en realidad querría una lista de palabras / número de palabras mucho más grande, esto es solo un ejemplo de juguete). Si siempre elige ambas palabras, entonces la entropía de la contraseña es:
lg(8*8) = lg(64) = 6
o alternativamente:
lg(8) + lg(8) = 3+3 = 6
Ahora, diga que ha configurado la segunda palabra para que no aparezca a veces. Por lo tanto, tiene la posibilidad de una contraseña de una palabra (8 posibles) o una contraseña de dos palabras (64 posibles) para un total de:
lg(8 + 8*8) = lg(9 * 8) = lg(9) + lg(8)
... que debería ser un poquito más que la entropía anterior de 6. Esta debería ser la entropía si un atacante estaba adivinando SOLO ESTA CONTRASEÑA y sabe exactamente cómo se generó la contraseña.
Pero en realidad no importa si la contraseña PODRÍA haber tenido 2 palabras de longitud. Si solo tiene una palabra, y el atacante simplemente adivina todas las contraseñas de una palabra, la posibilidad de una segunda palabra no hace que la contraseña de una palabra sea más fuerte. Entonces, suponiendo que hay un 25% de probabilidad de incluir la segunda palabra, tal vez una mejor estimación de la fuerza sería la entropía del valor esperado del espacio de la contraseña:
lg(8) + lg(3/4 * 0 + 1/4 * 8) = 3 + 1 = 4
O, quizás sea el valor esperado de la propia entropía :
lg(8) + [3/4 * 0 + 1/4 * lg(8)] = 3.75
Entonces, mi pregunta es: ¿qué método de cálculo de la entropía esperada de esta contraseña generada es correcto?
- ¿Debo tratar la longitud aleatoria como la adición de contraseñas adicionales, lo que aumenta ligeramente la fortaleza de una contraseña de 2 palabras?
- ¿Debo considerar la longitud aleatoria como una posible disminución de la longitud de la contraseña, así que tomo la entropía del número promedio de opciones de contraseña, para una fuerza en algún lugar entre una contraseña de 1 palabra y 2 palabras?
- ¿O debería tomar el valor esperado de la entropía, nuevamente para una fuerza intermedia?
- ¿Quizás sea algo completamente distinto?
Si, de hecho, el cálculo "correcto" disminuiría la fortaleza de la contraseña cuando la opción está habilitada, supongo que eso implica una pregunta de seguimiento: ¿hay alguna razón útil para tener esta opción? , si solo va a reducir el trabajo que un atacante debe hacer en promedio?