Autenticación estándar OATH.
Iniciativa OATH
La iniciativa OATH (Open Authentication) es una colaboración apoyada por varios miembros de la industria de la seguridad para desarrollar una arquitectura de autenticación fuerte abierta e interoperable. Este objetivo se consigue definiendo normas abiertas a disposición de todos.
El ecosistema OATH está formado por fabricantes de dispositivos (fichas, chips, tarjetas inteligentes, ordenadores, teléfonos móviles, PDA, tabletas), fabricantes de plataformas (servicios web, gestores de identidad, servidores de aplicaciones, sistemas de federación de identificación), fabricantes de aplicaciones (VPN, CRM, ERP, DRM, comercio electrónico, itinerancia, Wi-Fi) e integradores de sistemas (ISP, organismos gubernamentales, marcas de tarjetas de crédito, etc.).
Módulo OATH
El HSM puede utilizarse como generador de semillas OATH y como autenticador OTP (One Time Password). La implementación del HSM cumple las normas que se indican a continuación.
Al proporcionar una frontera criptográfica segura, un entorno controlado y algoritmos aprobados, HSM ofrece ventajas para su adopción en un sistema de autenticación fuerte.
El módulo OATH de HSM dispone de tres servicios básicos: emisión, autenticación y resincronización:
- La emisión consiste en que el HSM genera la semilla, que provoca la emisión de un blob, que se devuelve a la aplicación para su almacenamiento en una base de datos. Con el blob guardado en una base de datos externa al HSM, el proceso de emisión es muy flexible, sin generar una carga en el HSM y manteniendo el secreto y la confidencialidad necesarios.
- El servicio de autenticación del módulo es sin duda el más utilizado en el día a día de la producción. Cuando la aplicación necesita realizar una autenticación, debe recuperar el blob de la base de datos, enviarlo al HSM, recibir el resultado junto con el blob actualizado, para devolverlo a la base de datos.
- el servicio de resincronización consiste básicamente en abrir la ventana normal de tolerancia y pedir al usuario que introduzca los OTP n y n+1.
Escenarios de generación y autenticación
En los escenarios de generación y autenticación que se describen a continuación, lo que cambia es el origen de la semilla y cómo la recibe la aplicación para crear el blob y la envía al usuario (como semilla o incrustada en un token físico). Una vez creado el blob, la autenticación en cualquier escenario sigue siempre el mismo formato. En los escenarios siguientes, no importa si el token es HOTP o TOTP.
Escenario I: Token: la semilla es generada por el fabricante del token y enviada en formato PSKC
a. Generación
- La aplicación selecciona o genera una llave maestra;
- La aplicación recibe el archivo PSKC y la clave de transporte;
- La aplicación pide al HSM que traduzca el archivo PSKC a blob;
- HSM devuelve blob;
- La aplicación recibe el blob, crea una relación entre el blob y el usuario y lo almacena en la base de datos;
- La aplicación envía el token físico al usuario;
b. Autenticación
- Véase más abajo;
Escenario II: Token: la semilla es generada por el fabricante del token y enviada en texto claro
a. Generación
- La aplicación selecciona o genera una llave maestra;
- La aplicación recibe una semilla en texto claro;
- La aplicación prepara una estructura blob OATH;
- La aplicación pide al HSM que cifre el blob OATH con la clave maestra;
- HSM devuelve los datos encriptados, que son los blob;
- La aplicación recibe el blob, crea una relación entre el blob y el usuario y lo almacena en la base de datos;
- La aplicación envía el token físico al usuario;
b. Autenticación
- Véase más abajo;
Escenario III: Soft Token: la semilla es generada por el usuario y recibida en texto claro
a. Generación
- La aplicación selecciona o genera una llave maestra;
- El usuario genera y exporta semillas en su aplicación OATH (teléfono inteligente, ordenador de sobremesa, etc.);
- El usuario envía la semilla a la aplicación;
- La aplicación recibe una semilla en texto claro;
- La aplicación prepara una estructura de datos OATH;
- La aplicación solicita al HSM que cifre la estructura de datos OATH con la clave maestra;
- HSM devuelve una estructura cifrada, que es el blob;
- La aplicación recibe el blob, crea una relación entre el blob y el usuario y lo almacena en la base de datos;
b. Autenticación
- Véase más abajo;
Escenario IV: Soft Token: HSM genera la semilla
a. Generación
- La aplicación selecciona o genera una llave maestra;
- La aplicación solicita la emisión de blob OATH;
- HSM genera la semilla, prepara el blob y lo devuelve a la aplicación;
- La aplicación recibe el blob, crea una relación entre el blob y el usuario y lo almacena en la base de datos;
- La aplicación envía el blob al HSM y solicita la semilla en texto claro;
- La aplicación envía la semilla al usuario, normalmente utilizando un canal seguro;
- El usuario importa las semillas a su aplicación OATH (teléfono inteligente, ordenador de sobremesa, etc.);
b. Autenticación
- Véase más abajo;
Autenticación de usuarios en cualquier escenario:
- El usuario envía la OTP generada a la aplicación;
- La aplicación recupera el blob del usuario de la base de datos y solicita la verificación al HSM pasándole el blob y la OTP;
- HSM procesa la solicitud y devuelve el resultado y el blob procesado;
- La aplicación recibe el blob y actualiza la base de datos;
- La aplicación informa al usuario del resultado de la autenticación;
Glosario
- otp: (one time password), contraseña de un solo uso
- token: dispositivo físico que genera otp a partir de una semilla, normalmente identificado por un número de serie único y del tamaño de un llavero. Es a prueba de manipulaciones.
- soft token: software generador de otp, normalmente instalado en un dispositivo móvil. Es menos seguro que el token físico.
- semilla: secuencia aleatoria de bytes utilizada como material criptográfico diversificador para generar otp. Debe mantenerse en secreto desde su generación hasta su utilización, incluido el transporte. Cada token o soft token debe estar asociado a una única semilla.
- paso de tiempo: intervalo utilizado para incrementar el cálculo TOTP para cada OTP. El tiempo en segundos entre cada generación de OTP.
- factor móvil: intervalo utilizado como incremento en el cálculo de HOTP para cada OTP. Contado por eventos.
- T0: Valor de tiempo UNIX (segundos desde la hora EPOCH) para empezar a contar los pasos de tiempo.
- truncation offset: método de truncamiento del cálculo HMAC para extraer el OTP.
- HOTP: (HMAC-based One-time Password Algorithm) estándar para generar otp por evento, normalmente provocado por el usuario, como pulsar un botón en el token, es decir, cada vez que el usuario pulsa el botón en el token, se genera una nueva otp.
- TOTP: (Time-based One-time Password Algorithm) norma para generar otp por tiempo; se genera una nueva otp en cada intervalo definido por el token, independientemente de la acción del usuario.
- blob: (binary large object), estructura cifrada que contiene información para la autenticación otp. El blob es completamente opaco fuera del HSM. La clave que cifra el blob es AES (128, 192 o 256 bits). La información contenida en el blob incluye la semilla, el tipo (HOTP o TOTP), el intervalo de generación y la hora de inicio (en el caso de TOTP) y mecanismos de protección contra ataques de repetición.
- resincronización: proceso de ajuste de los contadores internos de una blob a los valores generados por el token físico o soft token para que la autenticación siga funcionando correctamente. Este proceso suele realizarse aumentando temporalmente la ventana de tolerancia y buscando valores otp por el HSM, informando el usuario de dos o más otps generados en secuencia por el token.
- clave maestra: clave AES en el HSM que cifra el blob.
- clave de transporte: clave que cifra las semillas correspondientes a los tokens según la norma PSKC, para el transporte entre el fabricante del token y el integrador del sistema. Suele derivarse de una contraseña.
- pskc: (Portable Symmetric Key Container), un estándar para el transporte y la entrega seguros de semillas, basado en criptografía simétrica con derivación de clave por contraseña y formato XML.
- traducción pskc: proceso de importación de las semillas en formato PSKC, descifrado de las mismas y generación de blobs individuales para su almacenamiento en la base de datos. El proceso de traducción del descifrado del formato PSKC y del cifrado al blob se realiza dentro del HSM. Normalmente, un archivo PSKC contiene varias semillas cifradas con la misma clave de transporte; cada semilla corresponderá a una nota.
- base de datos: estructura para almacenar los blobs generados por el HSM. Puede ser, por ejemplo, un sistema de archivos o un DBMS (Database Management System). No hay necesidad de protección adicional para el blob almacenado, ya que solo se puede acceder a su contenido con la clave maestra AES del HSM.
Referencias
|
byte[] | generateOATHHotpBlob (String masterKey) throws TacException |
| Genera un blob OATH HOTP(HMAC-based One-Time Password).
|
|
byte[] | generateOATHHotpBlob (String masterKey, byte seedLen) throws TacException |
| Genera un blob OATH HOTP(HMAC-based One-Time Password).
|
|
byte[] | generateOATHHotpBlob (String masterKey, byte seedLen, byte truncationOffset) throws TacException |
| Genera un blob OATH HOTP(HMAC-based One-Time Password).
|
|
byte[] | importOATHHotpBlob (String masterKey, byte[] seed) throws TacException |
| Genera un blob OATH HOTP(HMAC-based One-Time Password).
|
|
byte[] | generateOATHTotpBlob (String masterKey) throws TacException |
| Genera un blob OATH TOTP(Time-based One-Time Password).
|
|
byte[] | generateOATHTotpBlob (String masterKey, byte seedLen, byte truncationOffset, int timeStep, long t0) throws TacException |
| Genera un blob OATH TOTP(Time-based One-Time Password).
|
|
byte[] | importOATHTotpBlob (String masterKey, byte[] seed, byte truncationOffset, int timeStep, long t0, boolean useDefaultMovingFactor, long movingFactor) throws TacException |
| Genera un blob OATH TOTP(Time-based One-Time Password).
|
|
byte[] | importOATHTotpBlob (String masterKey, byte[] seed) throws TacException |
| Genera un blob OATH TOTP(Time-based One-Time Password).
|
|
byte[] | getOATHSeed (String masterKey, byte[] blob) throws TacException |
| Recupera la semilla de la mancha OATH.
|
|
Cadena | getNextOATHOTP (String masterKey, int otpLen, byte[] oathBlob) throws TacException |
| Genera el siguiente OTP a partir del blob OATH proporcionado.
|
|
byte[] | checkOATHBlobOTP (String masterKey, String otp, byte[] oathBlob) throws TacException |
| Comprueba un valor OTP para un blob dado OATH.
|
|
byte[] | resyncOATHBlobOTP (String masterKey, String otp1, String otp2, byte[] oathBlob) throws TacException |
| Vuelve a sincronizar una nota OATH mostrando dos valores OTP continuos.
|
|
◆ generateOATHHotpBlob() [1/3]
Genera un blob OATH HOTP(HMAC-based One-Time Password).
También conocido como OTP por evento. La semilla se genera dentro del HSM. Tamaño de la semilla TacNDJavaLib.ISSUE_OATH_SHA1_LEN.
- Parámetros
-
masterKey | Nombre de la clave maestra utilizada para proteger los blobs. |
- Devolución
- Devuelve el blob OATH.
- Excepciones
-
◆ generateOATHHotpBlob() [2/3]
byte[] generateOATHHotpBlob |
( |
Cadena | masterKey, |
|
|
byte | seedLen ) lanza una TacException |
Genera un blob OATH HOTP(HMAC-based One-Time Password).
También conocido como OTP por evento. La semilla se genera dentro del HSM.
- Parámetros
-
masterKey | Nombre de la clave maestra utilizada para proteger los blobs. |
seedLen | Establece el tamaño de la semilla OATH. Se aceptan los siguientes valores.
|
- Devolución
- Devuelve el blob OATH.
- Excepciones
-
◆ generateOATHHotpBlob() [3/3]
byte[] generateOATHHotpBlob |
( |
Cadena | masterKey, |
|
|
byte | seedLen, |
|
|
byte | truncationOffset ) throws TacException |
Genera un blob OATH HOTP(HMAC-based One-Time Password).
También conocido como OTP por evento. La semilla se genera dentro del HSM.
- Parámetros
-
masterKey | Nombre de la clave maestra utilizada para proteger los blobs. |
seedLen | Establece el tamaño de la semilla OATH. Se aceptan los siguientes valores.
|
truncationOffset | Se subvenciona el siguiente importe:
|
- Devolución
- Devuelve el blob OATH.
- Excepciones
-
◆ importOATHHotpBlob()
byte[] importOATHHotpBlob |
( |
Cadena | masterKey, |
|
|
byte[] | semilla ) lanza una TacException |
Genera un blob OATH HOTP(HMAC-based One-Time Password).
También conocido como OTP por evento. La semilla es importada por la persona que llama.
- Parámetros
-
masterKey | Nombre de la clave maestra utilizada para proteger los blobs. |
semilla | Defina una semilla OATH. Se aceptan los siguientes tamaños.
|
- Devolución
- Devuelve el blob OATH.
- Excepciones
-
◆ generateOATHTotpBlob() [1/2]
Genera un blob OATH TOTP(Time-based One-Time Password).
También conocido como OTP por tiempo. La semilla se genera dentro del HSM. Semilla de tamaño TacNDJavaLib.ISSUE_OATH_SHA1_LEN.
- Parámetros
-
masterKey | Nombre de la clave maestra utilizada para proteger los blobs. |
- Devolución
- Devuelve el blob OATH.
- Excepciones
-
◆ generateOATHTotpBlob() [2/2]
byte[] generateOATHTotpBlob |
( |
Cadena | masterKey, |
|
|
byte | seedLen, |
|
|
byte | truncationOffset, |
|
|
int | timeStep, |
|
|
largo | t0 ) lanza una TacException |
Genera un blob OATH TOTP(Time-based One-Time Password).
También conocido como OTP por tiempo. La semilla se genera dentro del HSM.
- Parámetros
-
masterKey | Nombre de la clave maestra utilizada para proteger los blobs. |
seedLen | Establece el tamaño de la semilla OATH. Se aceptan los siguientes valores.
|
truncationOffset | Se subvenciona el siguiente importe:
|
timeStep | Valor del paso de tiempo en segundos. Además de establecer el paso de tiempo en segundos para las manchas TOTP, también se admiten los siguientes valores.
|
t0 | Valor temporal inicial.
|
- Devolución
- Devuelve el blob OATH.
- Excepciones
-
◆ importOATHTotpBlob() [1/2]
byte[] importOATHTotpBlob |
( |
Cadena | masterKey, |
|
|
byte[] | semilla, |
|
|
byte | truncationOffset, |
|
|
int | timeStep, |
|
|
largo | t0, |
|
|
booleano | useDefaultMovingFactor, |
|
|
largo | movingFactor ) lanza una TacException |
Genera un blob OATH TOTP(Time-based One-Time Password).
También conocido como OTP por tiempo. La semilla es importada por la persona que llama.
- Parámetros
-
masterKey | Nombre de la clave maestra utilizada para proteger los blobs. |
semilla | Defina una semilla OATH. Se aceptan los siguientes tamaños.
|
truncationOffset | Se subvenciona el siguiente importe:
|
timeStep | Valor del paso de tiempo en segundos. Además de establecer el paso de tiempo en segundos para las manchas TOTP, también se admiten los siguientes valores.
|
t0 | Valor temporal inicial.
|
useDefaultMovingFactor | Establézcalo a true para utilizar el factor móvil por defecto o a false para especificar un factor móvil en movingFactor. |
movingFactor | Define el incremento inicial del cliente antes de la utilización. Además de establecer el incremento manualmente, puede utilizar los valores de la tabla siguiente.
|
- Devolución
- Devuelve el blob OATH.
- Excepciones
-
◆ importOATHTotpBlob() [2/2]
byte[] importOATHTotpBlob |
( |
Cadena | masterKey, |
|
|
byte[] | semilla ) lanza una TacException |
Genera un blob OATH TOTP(Time-based One-Time Password).
También conocido como OTP por tiempo. La semilla es importada por la persona que llama.
- Parámetros
-
masterKey | Nombre de la clave maestra utilizada para proteger los blobs. |
semilla | Defina una semilla OATH. Se aceptan los siguientes tamaños.
|
- Devolución
- Devuelve el blob OATH.
- Excepciones
-
◆ getOATHSeed()
Recupera la semilla de la mancha OATH.
- Parámetros
-
masterKey | Nombre de la clave maestra utilizada para proteger los blobs. |
blob | blob OATH. |
- Devolución
- Semilla asociada a la mancha OATH.
- Excepciones
-
◆ getNextOATHOTP()
String getNextOATHOTP |
( |
Cadena | masterKey, |
|
|
int | otpLen, |
|
|
byte[] | oathBlob ) lanza una TacException |
Genera el siguiente OTP a partir del blob OATH proporcionado.
- Parámetros
-
- Devolución
- Devuelve el OTP generado.
- Excepciones
-
◆ checkOATHBlobOTP()
byte[] checkOATHBlobOTP |
( |
Cadena | masterKey, |
|
|
Cadena | otp, |
|
|
byte[] | oathBlob ) lanza una TacException |
Comprueba un valor OTP para un blob dado OATH.
- Parámetros
-
- Devolución
- blob OATH actualizado.
- Excepciones
-
◆ resincOATHBlobOTP()
byte[] resyncOATHBlobOTP |
( |
Cadena | masterKey, |
|
|
Cadena | otp1, |
|
|
Cadena | otp2, |
|
|
byte[] | oathBlob ) lanza una TacException |
Vuelve a sincronizar una nota OATH mostrando dos valores OTP continuos.
Sólo para HOTP (OTP por evento).
- Parámetros
-
- Devolución
- blob OATH actualizado.
- Excepciones
-