La entropía de la contraseña se basa en el número de combinaciones posibles.
Para que un patrón reduzca la entropía, el atacante debe conocer el patrón.
Si el patrón no es fijo y conocido, la reducción en la complejidad será específica del algoritmo del atacante . Será diferente para los diferentes atacantes. Por ejemplo, con un ataque de diccionario, la complejidad efectiva para las palabras del diccionario es el tamaño del diccionario, para las palabras fuera de la complejidad de la fuerza bruta del diccionario.
No sé si existe o puede haber un algoritmo matemáticamente óptimo para las repeticiones de letras. La solución más sencilla que se me ocurre es tratar las repeticiones de símbolos, hasta las repeticiones N, como grafemas adicionales. En ese caso, la fuerza de la contraseña será el número de grafemas que contiene.
Contra tal algoritmo, la fuerza agregada de cada símbolo consecutivo de los símbolos del 2 al N es 0, y es equivalente a otro grafema de hasta 2N. Pero tal algoritmo será más lento contra contraseñas aleatorias debido a un conjunto de caracteres efectivo más grande. Por ejemplo, la comprobación de repeticiones de 2 largos para cada símbolo disminuirá su velocidad en un factor de 2 ^ (longitud-1). Pero contra una contraseña que contiene todos los símbolos dobles, su velocidad mejorará hasta una raíz cuadrada de la complejidad anterior.
Si es imperativo que la eficiencia de la fuerza bruta no se vea comprometida, un ajuste gratuito siempre comienza a elegir el último grafema como igual al anterior. En ese caso, la resistencia agregada desde el primero (para longitud variable) o todos los símbolos de repetición al final (para longitud fija) es 0.
Hacerlo en el medio ya no es un pellizco gratis. Tampoco se intentan repeticiones adicionales en una contraseña de longitud variable, aunque es tan barato como para ser casi gratis.
En resumen, contra un algoritmo optimizado para seleccionar contraseñas con caracteres repetidos, la fuerza de una contraseña puede estimarse al eliminar todos los dígitos consecutivos después del primero para obtener la longitud efectiva L '. La fortaleza teórica sería aproximadamente (conjunto de caracteres * N) ^ L ', donde N es el número máximo de repeticiones que el atacante está probando.
Contra un algoritmo optimizado para la eficiencia de fuerza bruta, solo se deben eliminar los dígitos consecutivos al final. La fuerza teórica con un algoritmo ingenuo sería charset ^ (L'-1) * (charset + N). Sin embargo, cualquier algoritmo práctico probará muchos sufijos (las contraseñas a menudo terminan en "1" o "1!" Para omitir las reglas de complejidad).
Todo depende de qué algoritmo utilice el atacante. Los diccionarios, incluidas las listas de contraseñas filtradas, generalmente se intentarán primero.