Respuesta original
Esta es una política mala, mala. Solo hay 10 6 o un millón de números diferentes de 6 dígitos. Eso es muy poco.
Es casi imposible prevenir un ataque de fuerza bruta sin conexión, sin importar qué tan lento sea el algoritmo de hash que uses. Si un intento demora 1 segundo, descifrará una contraseña en 11 días. También puede ser demasiado poco para detener por completo un ataque inteligente de fuerza bruta en línea, si el atacante puede usar múltiples IP (por ejemplo, para controlar una botnet) y tiene muchos números de tarjeta diferentes para probar.
Esto se agrava por el hecho de que, al igual que con las contraseñas comunes, la mayoría de las personas no las selecciona al azar . 123456
está obligado a aparecer mucho, y también lo son los números que representan fechas. En la práctica, la mayoría de las contraseñas tendrán menos de 6 × log 2 (10) ≈ 20 bits de entropía.
No veo ninguna razón por la que no se le permita elegir una contraseña más segura. Esta práctica envía la señal de que simplemente no les importa la seguridad. También me hace sospechar que en algún lugar de su base de datos hay un NUMBER(6)
en lugar de un hash almacenado.
Que los pagos no se pueden hacer sin otro factor de autenticación es un poco reconfortante, pero no mucho. Un atacante aún podría ver el historial de su cuenta, algo que podría contener información muy confidencial y también ser utilizado para el phishing.
Incluso si esto probablemente nunca se usará en tu contra, si yo fuera tú, consideraría cambiarme a un nuevo banco. Preferiblemente uno que requiera autenticación de dos factores al iniciar sesión.
Otros comentarios
Ha habido cierta discusión en los comentarios y han aparecido algunas buenas respuestas con otra vista, por lo que me gustaría elaborar y responder a algunas críticas.
¡Pero los nombres de usuario son secretos!
Según la pregunta, los números de la tarjeta de identificación (que no deben confundirse con los números de las tarjetas de crédito) son "casi públicos", y OP ha aclarado en los comentarios que ha visto las listas de ellos como "resultados para los servicios del sector público". En otras palabras, los nombres de usuario no son secretos . Y no deberían tener que serlo. Si la seguridad de su sistema se basa en el hecho de que los nombres de usuario son secretos, lo está haciendo mal.
El límite de tasa por cuenta y / o número de IP se hará cargo de esto.
Un ataque de fuerza bruta distribuida, por ejemplo, usando una red de bots, tendría una buena oportunidad de romper algunas cuentas. Digamos que tiene 10 000 computadoras y cada computadora prueba 3 contraseñas por día durante un mes en diferentes cuentas. Eso es alrededor de 10 intentos 6 . Eso le dará una cuenta en promedio si las contraseñas son verdaderamente aleatorias. En el mundo real, obtendrás mucho, mucho más.
Claro, el banco podría en teoría tener algún sistema sofisticado para detectar y defenderse contra ataques como este. Tal vez tal vez no. Como cliente, no tengo forma de saberlo, y ciertamente no confío en una organización que ni siquiera puede obtener la contraseña correcta para hacer algo más avanzado.
Un ataque sin conexión es irrelevante. Si las contraseñas están fuera, también lo están los datos confidenciales que están protegiendo.
Tal vez, tal vez no. Hay un montón de volcados de datos flotando en Internet con datos incompletos. Afirmar que las contraseñas se pegarán para siempre en el historial de su cuenta hace algunos supuestos muy sólidos sobre cómo ocurrió la violación y cómo se manejaron los datos posteriormente.
El PIN de su tarjeta de crédito solo tiene cuatro dígitos, así que, ¿qué importa de todos modos?
El PIN de su tarjeta de crédito es un factor débil en una autenticación de dos factores. El otro factor, la posesión de la tarjeta, fortalece el sistema.
Esta contraseña es un factor débil y también es el único factor que protege su información financiera.
Conclusión
Para ser claros, no estoy diciendo que sería imposible para un banco asegurar este sistema con otros medios. No estoy diciendo que un ataque exitoso en la cuenta de alguien sea probable, y mucho menos en el suyo específicamente. Lo que estoy diciendo es que esto no es "lo suficientemente seguro" para un banco.
El banco ya pasó por el problema de configurar la autenticación de dos factores para las transferencias financieras. ¿Por qué no usarlo también para los inicios de sesión?
El banco (con suerte) ya ha pasado por el problema de copiar una contraseña y almacenarla en una base de datos. ¿Por qué no eliminar simplemente la parte del código que limita la contraseña a seis dígitos?