Estoy evaluando los requisitos para entregar un diseño de aplicación seguro en un sistema de administración de PIN. El contexto detrás de la necesidad es que los PIN se generan y se envían de forma segura a los clientes para fines de autenticación a través de un sistema de telefonía telefónica. El sistema de telefonía cuando se le presente una identificación de cuenta y un PIN llamará al sistema de administración de PIN para la autenticación del cliente.
A todos los efectos, he establecido que se deben seguir las mejores prácticas en un servicio de autenticación. Los PIN deben estar protegidos y ser confidenciales según cómo se podrían proteger las contraseñas en un sistema. Sin embargo, mi pregunta tiene que ver con la mejor manera de manejar la generación de un PIN.
Los clientes no tienen la capacidad de decidir sobre su propio PIN. El sistema debe generar un PIN para el cliente, luego pasarlo a una máquina de correo de seguridad que lo imprima dentro de un sobre de privacidad auto sellado. El PIN no caduca, pero puede ser revocado por un administrador. El cliente puede solicitar un nuevo PIN por cualquier motivo que invalide su PIN actual. El PIN es de 8 caracteres alfanuméricos.
El requisito del cual no estoy seguro es que la empresa insista en que todos los PIN deben ser únicos. No hay dos clientes que deban recibir accidentalmente el mismo PIN. En la superficie, esto parece ser un requisito relativamente benigno hasta que comienzo a considerar cómo el sistema podría verificar la singularidad de un PIN a escala global. Pienso que si es una práctica recomendada incluir el PIN con datos que son específicos de cada registro, y luego obtener el resultado, almacenaríamos un PIN criptográficamente único que no se puede revertir y es resistente al ataque de la tabla del arco iris. Sin embargo, para mantener un registro de todos los PIN únicos que ya se han generado, necesitaría mantener un hash separado de estos en otra ubicación, pero se sentó globalmente para poder verificar si un PIN recién generado tenía La probabilidad ya ha sido generada.
Creo que el solo hecho de mantener una lista de PIN con hash que se han generado históricamente representa una gran responsabilidad de seguridad para el sistema, posiblemente más riesgosa que la posibilidad de que cualquiera de los dos clientes tenga el mismo PIN.
Estoy teniendo problemas para entender no solo por qué la empresa se muestra inflexible al respecto, si es solo porque un sistema heredado similar funciona de esta manera, o si existe alguna razón regulatoria por la que debe ser así. También estoy teniendo problemas para entender cómo puedo implementar una solución de este tipo de forma segura sin crear una vulnerabilidad. ¿Alguna sugerencia sobre cómo o si esto se puede lograr de manera segura?
ACTUALIZACIÓN: información adicional, esta es una cantidad relativamente pequeña de clientes, quizás menos de 20k. Si uno fuera a determinar qué era la sal global al mirar el código, entonces una tabla de arco iris podría determinar una gran cantidad de PIN actualmente en uso. Cualquier PIN conocido podría tener una probabilidad de 1 / 20k de ser correcto para un cliente determinado.