Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. El usuario solicita la ejecución de una acción protegida desde el dispositivo. Internamente el dispositivo lee la clave criptográfica almacenada durante el proceso de enrolamiento y genera un TOTP utilizando la hora actual. Posteriormente envía el TOTP junto con el cuerpo de la solicitud de validación.

  2. Los servicios de backend reciben la petición y la redirigen al servicio de agregación.

  3. El servicio de agregación retransmite la petición el servicio de Token

  4. El servicio de token ofusca el identificador de cuenta de usuario y lo usa como clave de acceso de registro para leer de la base de datos.

  5. El servicio de token recupera la clave cifrada de la base de datos

  6. El servicio de Token envía el TOTP generado por el cliente junto con la clave cifrada a HSM adapter.

  7. HSM adapter envía la clave cifrada a AWS ClodHSM para su descifrado.

  8. AWS CloudHSM descifra la clave y la retorna a HSM Adapter.

  9. HSM adapter genera un nuevo TOTP con la clave cifrada.

  10. Se compara el TOTP generado con el TOTP generado por el dispositivo. Si se encuentran en la misma ventana de tiempo el valor debe ser igual y la autenticación es exitosa.

  11. El resultado es retornado al servicio de Token

  12. El servicio de Token retransmite el resultado al servicio de agregación

  13. El servicio de agregación reenvía respuesta a servicios de backend, los cuales, en el caso de Spin, de ser exitosa generan un nuevo token para ser añadido en la cabecera que la transacción a autorizar desde el dispositivo.

  14. El dispositivo recibe la respuesta de la autenticación y en el caso de Spin, añaden e token a el encabezado de la solicitud de transacción.

Implementación del algoritmos

Generación de claves asimétricas desde el dispositivo

Con el fin de garantizar que solamente el dispositivo y el servicio de generación de TOTP conozcan la clave criptográfica, desde el dispositivo se debe generar un par de claves asimétricas. La implementación que se realizó en javascript para probar la solución fue la siguiente:

...

Como se mencionó anteriormente la validación de la funcionalidad se hizo usando RSA. Es posible utilizar otros algoritmos, sin embargo deben satisfacer la implementación anterior, y en algunos casos puede ser necesario especificar la codificación, lo que implicaría añadir un nuevo parámetro al servicio HSM adapter.

Generación de TOTP

Para generar el TOTP desde el dispositivo se desarrolló la siguiente implementación:

...

  • Se define un tamaño de TOTP de 9 dígitos

  • Se obtiene el timestamp actual en intervalos de 30 segundos.

  • Se formatea la hora en hexadecimal, mayúscula y con un padding de 16 ceros

  • Se convierte la hora y la cláveme criptográfica a su buffer de bytes equivalente

  • Se genera un HMAC con el buffer de la clave criptografica y se actualiza con el buffer de la hora.

  • Se genera el hash de HMAC.

  • Se extraen 4 bytes de el buffer del HASH, se convierten a su equivalente a entero de 32 bits, se redondea a 9 dígitos y se añade un padding a la izquierda en caso que el valor sea menor a 9 bytes.

Recomendaciones de uso

Pruebas locales

Para la ejecución de las pruebas locales probablemente el Servicio de AWS CloudHSM no esté disponible, por esta razón se sugiere deshabilitar la anotación @PostConstruct que se encuentra en el la clase com.oxxo.fintech.ffss.hsm.adapter.service.core.config.HSMConfig

De ésta forma las operaciones de cifrado se harán sobre un componente local y funcionarán de forma análoga a CloudHSM

https://fintechdigital.atlassian.net/browse/PALO-548