Hay dos aspectos a esto; El primero, como mencionas, es prevenir ataques de fuerza bruta.
Para este propósito, realmente cualquier número de intentos debería hacer: 3, 5, 20, 2000 ... con una política de contraseña adecuada (longitud + complejidad + ...) que ofrezca un espacio de teclas lo suficientemente grande, cualquiera el tipo de aceleración (X número de intentos por hora) asegurará que la fuerza bruta de todo el espacio lleve varias décadas. (Haz las matematicas).
Incluso si, y esto debería ser un requisito, el bloqueo es solo temporal, y luego de un corto período de tiempo se desbloquea automáticamente.
Por lo tanto, el número de intentos antes del bloqueo es arbitrario.
Sin embargo, hay otro problema más sutil y no matemático en juego aquí:
Simplemente no tiene sentido que un solo usuario introduzca repetidamente una contraseña incorrecta 2000 veces seguidas.
Es decir, si elige arbitrariamente 2000, sabe mucho tiempo antes de entonces que este NO es un usuario legítimo. Por lo tanto, realmente se reduce a lo que tiene sentido para el negocio, y a un compromiso de análisis de riesgo centrado en el negocio.
Creo que, históricamente, la compensación fue más inclinada hacia el lado del riesgo, ya que las contraseñas eran más cortas y menos complejas, la diferencia de 3 o 10 era mayor. Además, las personas tenían menos contraseñas, por lo que eran más fáciles de recordar ... Y, los usuarios tenían más conocimientos técnicos en general.
Hoy en día, tres realmente no tienen sentido, considerando el impacto en el negocio. Realmente es una cuestión de qué sentido tiene para su aplicación su , qué tipos de usuarios, con qué frecuencia inician sesión, etc. Por lo general, recomiendo averiguar cuántos intentos fallidos y legítimos es probable, luego duplicarlos.
( Como se mencionó @realworldcoder , PCI eligió seis de forma arbitraria, y si está sujeto a PCI, no tiene mucha decisión aquí. De lo contrario, elige un número que tenga sentido para ti.)