API C/C
HSM Dinamo
Cargando...
Buscando...
No se han encontrado entradas
OATH

Descripción detallada

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:

  1. 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.
  2. 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.
  3. 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

  1. La aplicación selecciona o genera una llave maestra;
  2. La aplicación recibe el archivo PSKC y la clave de transporte;
  3. La aplicación pide al HSM que traduzca el archivo PSKC a blob;
  4. HSM devuelve blob;
  5. La aplicación recibe el blob, crea una relación entre el blob y el usuario y lo almacena en la base de datos;
  6. La aplicación envía el token físico al usuario;

b. Autenticación

  1. 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

  1. La aplicación selecciona o genera una llave maestra;
  2. La aplicación recibe una semilla en texto claro;
  3. La aplicación prepara una estructura blob OATH;
  4. La aplicación pide al HSM que cifre el blob OATH con la clave maestra;
  5. HSM devuelve los datos encriptados, que son los blob;
  6. La aplicación recibe el blob, crea una relación entre el blob y el usuario y lo almacena en la base de datos;
  7. La aplicación envía el token físico al usuario;

b. Autenticación

  1. Véase más abajo;

Escenario III: Soft Token: la semilla es generada por el usuario y recibida en texto claro

a. Generación

  1. La aplicación selecciona o genera una llave maestra;
  2. El usuario genera y exporta semillas en su aplicación OATH (teléfono inteligente, ordenador de sobremesa, etc.);
  3. El usuario envía la semilla a la aplicación;
  4. La aplicación recibe una semilla en texto claro;
  5. La aplicación prepara una estructura de datos OATH;
  6. La aplicación solicita al HSM que cifre la estructura de datos OATH con la clave maestra;
  7. HSM devuelve una estructura cifrada, que es el blob;
  8. 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

  1. Véase más abajo;

Escenario IV: Soft Token: HSM genera la semilla

a. Generación

  1. La aplicación selecciona o genera una llave maestra;
  2. La aplicación solicita la emisión de blob OATH;
  3. HSM genera la semilla, prepara el blob y lo devuelve a la aplicación;
  4. La aplicación recibe el blob, crea una relación entre el blob y el usuario y lo almacena en la base de datos;
  5. La aplicación envía el blob al HSM y solicita la semilla en texto claro;
  6. La aplicación envía la semilla al usuario, normalmente utilizando un canal seguro;
  7. El usuario importa las semillas a su aplicación OATH (teléfono inteligente, ordenador de sobremesa, etc.);

b. Autenticación

  1. Véase más abajo;

Autenticación de usuarios en cualquier escenario:

  1. El usuario envía la OTP generada a la aplicación;
  2. 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;
  3. HSM procesa la solicitud y devuelve el resultado y el blob procesado;
  4. La aplicación recibe el blob y actualiza la base de datos;
  5. La aplicación informa al usuario del resultado de la autenticación;

Glosario

Referencias

Autenticación estándar OATH. Más...

Funciones

int AAP_API DOATHIssueBlob(HSESSIONCTX hSession, char *szMasterKeyId, DWORD dwParamBlobType, void *pvParamBlob, DWORD dwParamBlobLen, BYTE *pbOTPBlob, DWORD *pdwOTPBlobLen, DWORD dwFlags)
 
int AAP_API DOATHCheckOTP(HSESSIONCTX hSession, char *szMasterKeyId, char *szOTP, BYTE *pbOATHBlob, DWORD *pdwOATHBlobLen, DWORD dwFlags)
 
int AAP_API DOATHGetNextOTP(HSESSIONCTX hSession, char *szMasterKeyId, BYTE bOTPLen, BYTE *pbOATHBlob, DWORD dwOATHBlobLen, char *szOTP, DWORD dwFlags)
 
int AAP_API DOATHGetBlobInfo (const HSESSIONCTX hSession, char *szMasterKey, BYTE *pbInBlob, DWORD dwInBlobLen, DWORD dwOutBlobType, BYTE *pbOutInfo, DWORD *pdwOutInfoLen, DWORD dwParam)
 
int AAP_API DOATHBlobResync(HSESSIONCTX hSession, char *szMasterKeyId, char *szOTP1, char *szOTP2, BYTE *pbOATHBlob, DWORD *pdwOATHBlobLen, DWORD dwFlags)
 
int AAP_API DOATHPskcTranslate(HSESSIONCTX hSession, char *szMasterKey, BYTE *pbPSK, BYTE bPSKLen, BYTE *pbPSKC, DWORD dwPSKCLen, void **pvBlobList, DWORD *pdwBlobListQuantity, DWORD dwParam)
 

Funciones

DOATHIssueBlob()

int AAP_API DOATHIssueBlob ( HSESSIONCTX hSesión,
char * szMasterKeyId,
DWORD dwParamBlobType,
vacío * pvParamBlob,
DWORD dwParamBlobLen,
BYTE * pbOTPBlob,
DWORD * pdwOTPBlobLen,
DWORD dwFlags )

#include <dinamo.h>

Genera o importa un blob OATH para su uso en HSM.

Parámetros
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo MAX_OBJ_ID_FQN_LEN.
[en]dwParamBlobTypeSe acepta la siguiente tabla.
valor Significado
ISSUE_OATH_GENERATE_HOTP Tipo de pvParamBlob: estructura ISSUE_OTP_BLOB.
Genera una mancha HOTP en el HSM. La semilla se genera dentro del HSM.
Deben rellenarse los siguientes parámetros de estructura: bSeedLen e bTruncationOffset. El resto debe ser cero.
ISSUE_OATH_GENERATE_TOTP Tipo de pvParamBlob: estructura ISSUE_OTP_BLOB.
Genera la mancha TOTP en el HSM. La semilla se genera dentro del HSM.
Deben rellenarse los siguientes parámetros de estructura: bSeedLen, bTruncationOffset, wTimeStep e otT0. El resto debe ser cero.
ISSUE_OATH_IMPORT_HOTP Tipo de pvParamBlob: estructura ISSUE_OTP_BLOB.
Importa un blob HOTP. La semilla se pasa por parámetro. Deben rellenarse los siguientes parámetros de estructura: bSeedLen, pbSeed e bTruncationOffset. El resto debe ser cero.
ISSUE_OATH_IMPORT_TOTP Tipo de pvParamBlob: estructura ISSUE_OTP_BLOB.
Importa un blob TOTP. La semilla se pasa por parámetro.
Deben rellenarse los siguientes parámetros de estructura: bUseDefaultMovingFactor, bSeedLen, pbSeed, bTruncationOffset, wTimeStep e otT0. El resto debe ser cero.
[en]pvParamBlobPuntero a los datos o estructuras especificados en dwParamBlobType.
[en]dwParamBlobLenTamaño de los datos o de la estructura especificada en dwParamBlobType.
[fuera]pbOTPBlobBuffer de tamaño mínimo de ISSUE_OATH_OUTPUT_MAX_BLOB_LEN que contendrá el blob generado.
[in,out]pdwOTPBlobLenTamaño del búfer indicado por pbOTPBlob. La entrada debe contener el tamaño del búfer pbOTPBlob en la salida contendrá el tamaño del blob escrito en el búfer asignado.
[en]dwFlagsReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Ejemplos
gen_check_oath.c.

DOATHCheckOTP()

int AAP_API DOATHCheckOTP ( HSESSIONCTX hSesión,
char * szMasterKeyId,
char * szOTP,
BYTE * pbOATHBlob,
DWORD * pdwOATHBlobLen,
DWORD dwFlags )

#include <dinamo.h>

Comprueba un valor OTP para un blob dado OATH.

Parámetros
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo MAX_OBJ_ID_FQN_LEN.
[en]szOTPOTP para comprobar el tamaño mínimo ISSUE_OATH_MIN_OTP_LEN y el máximo ISSUE_OATH_MAX_OTP_LEN.
[in,out]pbOATHBlobPuntero a un buffer que contiene el blob que tendrá el OTP comprobado. Este búfer se reescribirá con el búfer actualizado.
[in,out]pdwOATHBlobLenTamaño del búfer pbOATHBlob. La entrada contendrá el tamaño de pbOATHBlob y mostrar el tamaño de los datos escritos en pbOATHBlob.
[en]dwFlagsA partir de la versión de firmware 4.0.2, el tamaño de la ventana de espera de autenticación se puede establecer en este parámetro. El valor por defecto es de 10 intervalos más o menos. En el caso de tokens HOTP, los intervalos se contarán por número de eventos; en el caso de tokens TOTP, se contarán por número de pasos de tiempo.
Valor Significado
0 Utiliza el valor por defecto de 10 intervalos.
1 a MAX_OTP_LOOK_AHEAD_INTERVAL Establece el valor de la ventana de espera de autenticación.

También puede pasar el OATH_UPDATE_BLOBpara permitir la actualización del formato de la nota OATH . Cuando el OATH_UPDATE_BLOB debe pasar el blob actual de OATH en pbOATHBlob en un búfer lo suficientemente grande como para contener la nota actualizada. pdwOATHBlobLen debe contener el valor del tamaño del búfer pasado en pbOATHBlob. El tamaño de pbOATHBlob necesario, se devuelve en pdwOATHBlobLen en la llamada en la que se produjo el error D_OATH_BLOB_UPDATE se devuelve. La actualización sólo tiene que hacerse después de recibir el error D_OATH_BLOB_UPDATE. Consulte las Notas para obtener más información.

Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Notas
Si se devuelve el error D_OATH_BLOB_UPDATE la función devolverá en pdwOATHBlobLen el tamaño del búfer que debe utilizarse para actualizar el blob OATH en una llamada posterior. Véanse los detalles en la sección OATH_UPDATE_BLOB.
Ejemplos
gen_check_oath.c.

DOATHGetNextOTP()

int AAP_API DOATHGetNextOTP ( HSESSIONCTX hSesión,
char * szMasterKeyId,
BYTE bOTPLen,
BYTE * pbOATHBlob,
DWORD dwOATHBlobLen,
char * szOTP,
DWORD dwFlags )

#include <dinamo.h>

Genera el siguiente OTP a partir de un blob OATH. El blob OATH no se modificará.

Parámetros
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo MAX_OBJ_ID_FQN_LEN.
[en]bOTPLenTamaño de la OTP a generar, que puede ser un valor comprendido entre ISSUE_OATH_MIN_OTP_LEN e ISSUE_OATH_MAX_OTP_LEN.
[en]pbOATHBlobPuntero a un búfer que contiene el blob que se utilizará para generar el OTP. Este búfer no se modificará.
[en]dwOATHBlobLenTamaño del búfer pbOATHBlob.
[fuera]szOTPBuffer que contendrá el OTP generado. Debe tener un tamaño mínimo de bOTPLen + 1 (terminador nulo).
[en]dwFlagsReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Ejemplos
gen_check_oath.c.

DOATHGetBlobInfo()

int AAP_API DOATHGetBlobInfo ( const HSESSIONCTX hSesión,
char * szMasterKey,
BYTE * pbInBlob,
DWORD dwInBlobLen,
DWORD dwOutBlobType,
BYTE * pbOutInfo,
DWORD * pdwOutInfoLen,
DWORD dwParam )

#include <dinamo.h>

Recupera la información interna de una mancha OATH.

Parámetros
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szMasterKeyNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo MAX_OBJ_ID_FQN_LEN.
[en]pbInBlobPuntero a un búfer que contiene el blob para extraer la información.
[en]dwInBlobLenTamaño del búfer pbInBlob.
[en]dwOutBlobTypeIndica el tipo de datos de salida. Se acepta la siguiente tabla.
Valor Significado
OATH_ISSUE_OATH_BLOB_t Tipo de pbOutInfo: ISSUE_OATH_BLOB_t. El búfer pbInBlob debe ser un blob de tipo V1 con tamaño ISSUE_OATH_OUTPUT_BLOB_V1_LEN.
OATH_ISSUE_OATH_INFO_t Tipo de pbOutInfo: ISSUE_OATH_INFO_t. Esta opción acepta blobs de tipo V1 y V2 con tamaños ISSUE_OATH_OUTPUT_BLOB_V1_LEN e ISSUE_OATH_OUTPUT_BLOB_V2_LEN, respectivamente.
[fuera]pbOutInfoPuntero a un búfer que recibirá la información del blob. Debe ser como se describe en dwOutBlobType.
[in,out]pdwOutInfoLenTamaño del búfer indicado por pdwOutInfoLen.
[en]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.

DOATHBlobResync()

int AAP_API DOATHBlobResync ( HSESSIONCTX hSesión,
char * szMasterKeyId,
char * szOTP1,
char * szOTP2,
BYTE * pbOATHBlob,
DWORD * pdwOATHBlobLen,
DWORD dwFlags )

#include <dinamo.h>

Resincroniza una nota OATH mostrando dos valores continuos de OTP. Sólo para HOTP (OTP por evento).

Parámetros
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo MAX_OBJ_ID_FQN_LEN.
[en]szOTP1OTP para comprobar el tamaño mínimo ISSUE_OATH_MIN_OTP_LEN y el máximo ISSUE_OATH_MAX_OTP_LEN.
[en]szOTP2Segunda OTP a comprobar para tamaño mínimo ISSUE_OATH_MIN_OTP_LEN y máximo ISSUE_OATH_MAX_OTP_LEN.
[in,out]pbOATHBlobPuntero a un búfer que contiene la nota que se va a sincronizar. Este búfer se reescribirá con el búfer sincronizado.
[in,out]pdwOATHBlobLenTamaño del búfer pbOATHBlob. La entrada contendrá el tamaño de pbOATHBlob y mostrar el tamaño de los datos escritos en pbOATHBlob.
[en]dwFlagsAceptar la bandera OATH_UPDATE_BLOBpara permitir la actualización del formato de la nota OATH . Cuando el OATH_UPDATE_BLOB debe pasar el blob actual de OATH en pbOATHBlob en un búfer lo suficientemente grande como para contener la nota actualizada. pdwOATHBlobLen debe contener el valor del tamaño del búfer pasado en pbOATHBlob. El tamaño de pbOATHBlob necesario, se devuelve en pdwOATHBlobLen en la llamada en la que se produjo el error D_OATH_BLOB_UPDATE se devuelve. La actualización sólo tiene que hacerse después de recibir el error D_OATH_BLOB_UPDATE. Consulte las Notas para obtener más información.
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Notas
A partir de la versión de firmware 4.0.2, la ventana se ampliará hasta 200 intervalos. En el caso de las fichas HOTP, los intervalos se contarán por número de eventos; en el caso de las fichas TOTP, se contarán por número de pasos de tiempo. Si se devuelve un error D_OATH_BLOB_UPDATE la función devolverá en pdwOATHBlobLen el tamaño del búfer que debe utilizarse para actualizar el blob OATH en una llamada posterior. Véanse los detalles en la sección OATH_UPDATE_BLOB.

DOATHPskcTraducir()

int AAP_API DOATHPskcTranslate ( HSESSIONCTX hSesión,
char * szMasterKey,
BYTE * pbPSK,
BYTE bPSKLen,
BYTE * pbPSKC,
DWORD dwPSKCLen,
void ** pvBlobList,
DWORD * pdwBlobListQuantity,
DWORD dwParam )

#include <dinamo.h>

Importa semillas envueltas en el estándar PSKC(Portable Symmetric Key Container), RFC 6030.

Parámetros
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szMasterKeyNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo de salida MAX_OBJ_ID_FQN_LEN.
[en]pbPSKTamaño máximo del búfer OATH_MAX_PSK_LEN que contiene la clave de transporte que protege las semillas notificadas en pbPSKC.
[en]bPSKLenTamaño del búfer pbPSK.
[en]pbPSKCBúfer PSKC que contiene las semillas que se transformarán en blobs en formato HSM.
[en]dwPSKCLenTamaño del búfer pbPSKC.
[fuera]pvBlobListPonteiro para ponteiro que apontará para um buffer alocado internamente contendo um array de estruturas OATH_PSKC_TRANSLATE_OUTPUT. Esta estrutura conterá internamente os blobs das sementes traduzidas para o formato do HSM e o identificador de cada semente como na tag "<pskc:Key Id=>".
[fuera]pdwBlobListQuantityPuntero al número de blobs devueltos en el búfer pvBlobList.
[en]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.