Sus "cadenas aleatorias" son lo que los criptógrafos llamarían claves : una clave es un valor secreto sin estructura interna implícita (a diferencia de una contraseña que es "a llave que cabe en un cerebro humano ").
En su primer caso, a los usuarios se les otorgará acceso según su capacidad para presentar una secuencia específica de 10 caracteres en el alfabeto a-zA-Z0-9. Estos son 62 signos posibles, por lo que hay 62 10 = 839299365868340224 claves posibles. Un atacante que intente forzar su entrada tendrá que "adivinar" la secuencia, lo que no puede hacer excepto probando las claves posibles en cualquier orden (asumimos que "no hay una estructura interna implícita", que significa "probabilidad uniforme"). En promedio, el atacante tendrá que probar la mitad de las claves posibles antes de tener éxito, y eso es 419649682934170112.
Ahora suponga que estamos en el segundo caso: el usuario será aceptado solo si ingresa dos cadenas de 5 caracteres en dos campos de texto. Ambos valores deben ser correctos si se otorga el acceso. En esa situación, hay 62 combinaciones 5 para cada cadena, para un total de 62 5 * 62 5 = 839299365868340224 posibilidades, que es exactamente la misma cantidad que antes, por lo que no importa .
Es decir, a menos que lo arruines . "Botching it" significaría, aquí, decirle al usuario si obtuvo una de las dos cadenas de 5 caracteres correctas, incluso si la otra no lo está. Por ejemplo, los dos campos de entrada están en páginas sucesivas, y su servidor mostrará la segunda página solo si la primera cadena es correcta. En ese caso, el atacante puede descifrar ambas cadenas de 5 caracteres una tras otra: eso es 62 5 / 2 = 458066416 intenta en promedio para la primera cadena, y luego 458066416 de nuevo para la segunda cadena. Luego, el atacante logra (en promedio) 916132832 intentos, es decir, 458066416 más rápido que con la implementación no fallida. Eso es lo que yo llamo un fracaso épico. (Tal error ya ha ocurrido , de Microsoft mismos.)
Es más sencillo, y más seguro, requerir la entrada de los 10 caracteres de una sola vez. La forma en que los muestres, como un campo de texto, dos campos de texto o un grupo de globos en forma de corazón flotando en la pantalla, no tiene importancia, siempre y cuando no filtres información sobre cuáles son los correctos. La información solo que debe proporcionar el sistema de verificación es si todos los caracteres eran correctos, o al menos uno no lo era.