Contexto Inicial - Token Digital SPIN
Con la finalidad de entender la situación en la que se encuentra la funcionalidad actual de Tken Digital, hemos anaizado y detectado una propuesta como diagrama de secuencia para aterrizar los componentes a desarrollar en el proyecto.
Índice
Validación por medio de código de seguridad
En la actualidad, SPIN soporta la autenticación de acciones protegidas mediante el uso de un código de seguridad, que es solicitado cada vez que un usuario desea realizar la acción.
El código de seguridad actual es el mismo para cada operación y es asignado al usuario al momento del registro.
En este flujo se verifica la validez del código de seguridad mediante su comparación con su valor cifrado almacenado en la base de datos. Si la validación del código de seguridad es exitosa se genera un token con base en el User Id, posteriormente el token es registrado en Redis para ser consultado en la próxima operación que lo requiera.
Cuando se ejecuta una acción protegida por código de seguridad, junto con el payload de la acción se añade un HEADER de tipo x-pin-authorization junto con el valor de x-device-id. Cada servicio tiene integrado el filtro de validación de token, y de ser validado se elimina para evitar un nuevo uso.
Al realizar la autenticación del usuario mediante la contraseña pueden surgir código de seguridad varios inconvenientes:
Olvido de token.
Exposición voluntaria/involuntaria de token. El token puede ser visto o compartido con terceros, aumentando la probabilidad de fraude.
Tiempo adicional de diligenciamiento de información, afectando la experiencia del usuario.
Para mitigar los efectos negativos de la autenticación usando contraseña, se propone el uso de token digital basado en OTP, que se envíe automáticamente durante las ejecución de las transacciones
Token digital
Comparado con el token basado en código de seguridad, el Token Digital actuará como un mecanismo de autenticación que solicite automáticamente cada vez que el usuario realice una transacción, de ésta forma se evita la recordación y el ingreso del token manual por parte del usuario y al ser generado durante cada transacción, se reduce el riesgo de exposición, lo que otorga mayor seguridad a la transacción al evitar que un posible atacante lo acceda. Este tipo de token también es conocido como OTP (One time password).
OTP es una contraseña de un solo uso que se genera para una sola transacción de autenticación. Se genera por un algoritmo matemático que utiliza un valor secreto (secreto compartido) y un valor cambiante, dependiendo del tipo de implementación (puede ser un contador o la hora actual).
La contraseña OTP generada es válida solo por un corto período de tiempo, generalmente unos pocos minutos, y solo puede ser utilizada una vez. Después de ese tiempo, la contraseña OTP expira y ya no es válida para su uso.
Los mecanismos de OTP que se consideran para la solución son:
HMAC-based One-Time Password (HOTP). Utiliza una clave secreta compartida para generar una serie de contraseñas OTP únicas. La generación del token se hace al aplicar un algoritmo HMAC (Hash Message Authentication Code) a la clave secreta compartida junto con un contador sincronizado que mantienen el servidor y el cliente, garantizando que garantiza que cada contraseña OTP sea única y no se pueda reutilizar.
SMS One-Time Password. Envía una contraseña OTP al número de teléfono del usuario a través de un mensaje de texto. El usuario puede entonces ingresar la contraseña OTP en la aplicación de autenticación de dos factores. Este mecanismo es fácil de implementar, pero es menos seguro que los mecanismos basados en token ya que la contraseña OTP puede ser interceptada por un atacante.
Mobile Push Notification. Envía una notificación push al dispositivo móvil del usuario para solicitar la autenticación. El usuario puede entonces aprobar o denegar la solicitud de autenticación desde su dispositivo móvil. Para el funcionamiento de la notificación push es necesario que el la aplicación tenga habilitadas las notificaciones. Este mecanismo es más seguro que el envio de claves vía SMS, ya que no requiere que el usuario ingrese una contraseña OTP.
Time-based One-Time Password (TOTP). Genera una contraseña OTP única basada en el tiempo actual. El servidor y el cliente deben mantener el mismo reloj sincronizado para garantizar que la contraseña OTP generada sea válida. Este mecanismo es ampliamente utilizado en aplicaciones de autenticación de dos factores que requieren una contraseña OTP basada en el tiempo.
Componentes identificados
Activation service
Orquesta la activación del token para su registro y activación
Token service
Encapsula toda la funcionalidad del token
HSM Adapter
Encapsula acceso a servicio de HSM de AWS
Access service
Sincroniza la transferencia de mensajes entre el backend y el usuario
Enrollment API
Expone el API para permitir la generación de tokens
Flujo Propuesto
Activación de token digital
Se genera un código de activación y se envía al usuario en forma de OTP
Se ingresa el OTP para autenticar el usuario y se genera la semilla de valores aleatorios, luego se envía un nuevo OTP al usuario generado a partir de la semilla
Con el nuevo OTP se vincula el dispositivo
Generación de OTP y ejecución de acción protegida
Si el usuario tiene activo token digital, se solicita automáticamente la generación de token antes de iniciar la acción protegida. Posteriormente se envía un código mediante OTP.
El usuario activa el OTP (dependiendo del mecanismo), se valida internamente y si es correcto permite la acción protegida
Procesos necesarios para implementación de OTP
Proceso | Descripción | Servicios implicados | Puntos de acceso |
Registro de usuario | El registro de usuario corresponde al proceso actual de registro de información del usuario en la base de datos de SPIN | Servicios existentes de SPIN |
|
Solicitud de vinculación del dispositivo | Con base en la información del usuario se genera un código de activación que es enviado al dispositivo seleccionado. Para el envío del código se podrían considerar varios medios: Código QR, E-mail, SMTP, o Notificación Push | Activation service (Nuevo)
| getActivationCode
|
Access Service (Revisar) |
| ||
Autenticación de usuario | Se verifica que el usuario sea el dueño del dispositivo a vincular al ingresar el código de activación recibido previamente, si coinciden, se genera la semilla para la generación de OTP, y se envía al dispositivo (Revisar mecanismo) | Activation service | GenerateOTP |
Token service | createFactor | ||
Access service | send | ||
Vinculación de dipostivo | El dispositivo recibe la semilla y después de ser verificada se asocia al teléfono (considerar IMEI) | Activation service | BindDevice |
Access service | validate | ||
Token service | validate | ||
Ejecución de transacción | El cliente envía a información de la transacción al servidor, el servidor coordina con el cliente el factor de autenticación y el cliente envía el nuevo factor. Si el factor es válido se ejecuta la transacción. | Activation service
| getEntityFactor validateOTP
|
Token service | createChallenge validateChallenge | ||
Access service | send |
Contexto actual de una solicitud de una OTP:
Aspectos a considerar
Toda la comunicación entre los dispositivos debe estar adecuadamente cifrada. (Revisar especificaciones regulatorias)
No se deben almacenar datos en medios sensibles de estar expuestos a menos que se encuentren cifrados. Se usará HSM en AWS.
Si es necesario almacenar u obtener datos del dispositivo móvil, se procurará dar lineamientos para que no puedan ser falseados o interceptados.
La longitud del token y la ventana de tiempo se deben validar con el usuario.