Los humanos son bastante terribles para generar datos aleatorios. Pídale a una persona que le dé un número aleatorio entre 1 y 20, uno obtendrá mucho más 7 y 17 que otros números, ya que percibimos que esos números son más "aleatorios". (Fuente: enlace )
Las computadoras, por otro lado, son deterministas y, como tales, no pueden generar datos aleatorios verdaderos por sí mismos. Así que se utilizan generadores pseudoaleatorios que son ecuaciones ligeramente complejas. Esas ecuaciones necesitan una semilla que debería ser algo aleatoria. Para generar esta semilla aquí hay algunos métodos:
- Alta resolución de la medición del tiempo (a menudo ciclos de reloj) en el momento de la ejecución
- La entrada del usuario, a menudo de los ratones, las buenas implementaciones utilizan la incapacidad humana para controlar perfectamente los ratones
- Generador de aleatoriedad externa, existen dispositivos externos que utilizan algún proceso químico o físico no determinista o algunos parámetros ambientales que fluctúan mucho para generar datos aleatorios.
Así que para responder a sus preguntas.
¿La adición de un carácter aleatorio a una contraseña generada de forma pseudoaleatoria mejora significativamente la entropía?
Agregar caracteres a una contraseña incluso cuando no está distribuido de manera perfectamente uniforme aumenta la entropía. ¿Es significativo? Esto depende principalmente de la longitud de la contraseña, consulte el comentario de Anonymous Coward sobre esta respuesta para obtener una explicación.
¿Esto significa que los generadores de contraseñas, como el integrado en Keepass, apestan?
Esto depende completamente de la forma en que se genera la semilla. No sé cómo Keepass hace esto, pero definitivamente hay generadores de contraseñas que utilizan métodos de generación de semillas muy buenos (a veces combinaciones de métodos).
¿Ayudaría al usuario ingresar manualmente uno o dos caracteres en la contraseña generada?
Suponiendo que la contraseña resultante tenga la misma longitud, entonces depende de su punto de vista. Como dije, los humanos son muy malos generadores de aleatoriedad y, como resultado, esto reduciría teóricamente la entropía de la contraseña. Sin embargo, agrega más variables al proceso de generación de contraseñas que, si se implementa correctamente, podría aumentar la fortaleza de la contraseña contra ataques dirigidos contra el algoritmo pseudoaleatorio y el proceso inicial.
Editar: responder al comentario
¿Cómo podría un humano agregar 1 o 2 caracteres aleatorios (en una posición aleatoria de la contraseña existente) disminuir la entropía?
Supondré que te refieres a reemplazar 1 o 2 caracteres aleatorios como he explicado anteriormente, al responder a la pregunta del título, solo agregar caracteres aleatorios (aunque no estén distribuidos uniformemente) siempre aumentará la entropía.
Veamos nuevamente el proceso de generación de datos aleatorios:
- obtener una semilla
- usa la semilla como una entrada para el generador pseudoaleatorio
- obtenga resultados del generador pseudoaleatorio (y utilícelo en algún lugar)
- use la salida como la siguiente entrada al generador pseudoaleatorio (esto se hace más a menudo detrás de las pantallas del generador pseudoaleatorio)
- repetir desde el paso 3
Un proceso bastante simple y como una computadora es determinista, las únicas incógnitas para algunos atacantes son la semilla y el número de veces que el proceso se itera antes de que se use la salida para la contraseña específica que estamos intentando violar.
Si observamos este proceso, podríamos preguntarnos por qué no siempre se calcula una semilla y se usa como datos aleatorios, al final, la semilla es lo que hace que el proceso sea aleatorio. Entonces, ¿cuál es el trabajo del generador pseudoaleatorio? Su función es doble, la primera de ellas permite que se generen múltiples datos aleatorios a partir de una semilla. Esto es importante ya que las buenas semillas son caras. A continuación, y quizás más importante, crea datos aleatorios distribuidos uniformemente. Y esto es muy importante ya que la semilla (por ejemplo, cuando estamos usando una medida del tiempo) a menudo tendrá alguna estructura.
Ahora, cuando reemplaza 2 caracteres de estos datos aleatorios distribuidos uniformemente con datos aleatorios distribuidos uniformemente (recuerde los 7 y los 17), está reduciendo la entropía de la contraseña. Sin embargo, esto no significa necesariamente que la contraseña sea más difícil de romper, ya que crea un desconocido adicional para el sistema junto al número de referencia de iteraciones.
Sin embargo, como una nota lateral desde un punto de vista teórico, se podrían usar esos 2 caracteres de la entrada del usuario para ayudar a crear la semilla que podría aumentar la entropía en el sistema, dependiendo del método de semilla anterior y qué más se utiliza para crear la semilla .