NET API
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

Funciones

bool OATHCheck (cadena masterKeyId, cadena otp, ref byte[] bBlob)
 Compruebe el valor OTP.
 
bool OATHCheck (cadena masterKeyId, cadena otp, ref byte[] bBlob, int dwFlag)
 Compruebe el valor OTP.
 
bool OATHCheck (cadena masterKeyId, cadena otp, byte[] bBlob)
 
bool OATHCheck (cadena masterKeyId, cadena otp, byte[] bBlob, int dwFlag)
 
byte[] OATHBlobResync (cadena szMasterKeyId, cadena szOTP1, cadena szOTP2, byte[] bOATHBlob)
 Vuelve a sincronizar una nota OATH mostrando dos valores OTP continuos.
 
byte[] OATHGetKey (cadena szMasterKey, byte[] pbInBlob)
 Recupera la semilla de la clave que genera la mancha de OATH.
 
DinamoApi.OATH_PSKC_TRANSLATE_OUTPUT[] OATHPskcTranslate (cadena szMasterKeyId, cadena szPSK, byte[] pbPSKC)
 Importa semillas envueltas en el estándar PSKC (Portable Symmetric Key Container), RFC 6030.
 
byte[] OATHIssueGenerateHOTP (cadena szMasterKeyId)
 Genera un blob HOATH, es decir, un token de evento. La semilla será generada aleatoriamente por el HSM.
 
byte[] OATHIssueGenerateHOTP (cadena szMasterKeyId, byte seedLen)
 Genera un blob HOATH, es decir, un token de evento a partir de un tamaño de semilla.
 
byte[] OATHIssueImportHOTP (cadena szMasterKeyId, byte[] bSeed)
 Importa un blob HOATH, es decir, un token de evento a partir de una semilla suministrada.
 
byte[] OATHIssueGenerateTOTP (cadena szMasterKeyId)
 Genera un blob TOTP, es decir, un token de evento. La semilla será generada aleatoriamente por el HSM.
 
byte[] OATHIssueGenerateTOTP (cadena szMasterKeyId, short paso)
 Genera un blob TOTP, es decir, un token de evento. La semilla será generada aleatoriamente por el HSM.
 
byte[] OATHIssueGenerateTOTP (string szMasterKeyId, short step, ulong offset)
 Genera un blob TOTP, es decir, un token de evento. La semilla será generada aleatoriamente por el HSM.
 
byte[] OATHIssueGenerateTOTP (string szMasterKeyId, short step, ulong offset, byte seedLen)
 Genera un blob TOTP, es decir, un token de evento. La semilla será generada aleatoriamente por el HSM.
 
byte[] OATHIssueImportTOTP (cadena szMasterKeyId, byte[] bSeed)
 Importa un blob TOTP, es decir, un token de evento a partir de una semilla suministrada.
 
byte[] OATHIssueImportTOTP (cadena szMasterKeyId, byte[] bSeed, paso corto)
 Importa un blob TOTP, es decir, un token de evento a partir de una semilla suministrada.
 
byte[] OATHIssueImportTOTP (string szMasterKeyId, byte[] bSeed, short step, ulong offset)
 Importa un blob TOTP, es decir, un token de evento a partir de una semilla suministrada.
 
cadena EncodeBase32 (byte[] datos)
 Función de utilidad para codificar Base32. Codificación estándar para generadores OATH en software.
 
cadena OATHGetNext (cadena szMasterKeyId, byte lenOTP, byte[] bBlob)
 Recupera el siguiente valor para el OTP.
 

Funciones

OATHCheck() [1/4]

bool OATHCheck ( cadena masterKeyId,
cadena otp,
ref byte[] bBlob )
en línea

Compruebe el valor OTP.

Parámetros
masterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN.
otpOTP a comprobar para tamaño mínimo DinamoApi .ISSUE_OATH_MIN_OTP_LEN y máximo DinamoApi.ISSUE_OATH_MAX_OTP_LEN.
bBlobMatriz de bytes que contiene el blob que se utilizará para generar el OTP. Este búfer se reescribirá con el blob actualizado.
Excepciones
DinamoException.DinamoExceptionEn caso de error
Devolución
>Verdadero si el OTP pasado en el parámetro de la función es válido. En este caso, la persistencia del bBlob devuelto es importante para evitar ataques REPLAY.
Ejemplos
oath.cs.

OATHCheck() [2/4]

bool OATHCheck ( cadena masterKeyId,
cadena otp,
ref byte[] bBlob,
int dwFlag )
en línea

Compruebe el valor OTP.

Parámetros
masterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN.
otpOTP a comprobar para tamaño mínimo DinamoApi .ISSUE_OATH_MIN_OTP_LEN y máximo DinamoApi.ISSUE_OATH_MAX_OTP_LEN.
bBlobMatriz de bytes que contiene el blob que se utilizará para generar el OTP. Este búfer se reescribirá con el blob actualizado.
dwFlagA 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.
DinamoApi.MAX_OTP_LOOK_AHEAD_INTERVAL Establece el valor de la ventana de espera de autenticación.
Devolución
True si el OTP pasado en el parámetro de la función es válido. En este caso, es importante persistir el bBlob devuelto para evitar ataques REPLAY.
Excepciones
DinamoException.DinamoExceptionEn caso de error

OATHCheck() [3/4]

bool OATHCheck ( cadena masterKeyId,
cadena otp,
byte[] bBlob )
en línea
Obsoleto
Utilice OATHCheck con bBlob como referencia.

OATHCheck() [4/4]

bool OATHCheck ( cadena masterKeyId,
cadena otp,
byte[] bBlob,
int dwFlag )
en línea
Obsoleto
Utilice OATHCheck con bBlob como referencia.

OATHBlobResync()

byte[] OATHBlobResync ( cadena szMasterKeyId,
cadena szOTP1,
cadena szOTP2,
byte[] bOATHBlob )
en línea

Vuelve a sincronizar una nota OATH mostrando dos valores OTP continuos.

Parámetros
szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN.
szOTP1Primer valor de OATH.
szOTP2Segundo valor de OATH
bOATHBlobMancha de OATH
Devolución
Blob de OATH resincronizado, resultado de la operación.
Excepciones
DinamoException.DinamoExceptionEn caso de error

OATHGetKey()

byte[] OATHGetKey ( cadena szMasterKey,
byte[] pbInBlob )
en línea

Recupera la semilla de la clave que genera la mancha de OATH.

Parámetros
szMasterKeyNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN.
pbInBlobContenido del blob
Devolución
Semilla de la clave en forma de matriz de bytes.
Excepciones
DinamoException.DinamoExceptionEn caso de error
Ejemplos
oath.cs.

OATHPskcTraducir()

DinamoApi.OATH_PSKC_TRANSLATE_OUTPUT[] OATHPskcTranslate ( cadena szMasterKeyId,
cadena szPSK,
byte[] pbPSKC )
en línea

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

Parámetros
szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN.
szPSKClave de transporte que protege las semillas notificadas en pbPSKC.
pbPSKCContenido del archivo que contiene las semillas que se transformarán en blobs en formato HSM
Devolución
OATHMatriz de estructuras DinamoApi. _PSKC_TRANSLATE_OUTPUT. Esta estructura contendrá internamente los blobs de las semillas traducidas al formato HSM y el identificador de cada semilla.
Excepciones
DinamoException.DinamoExceptionEn caso de error

OATHIssueGenerateHOTP() [1/2]

byte[] OATHIssueGenerateHOTP ( cadena szMasterKeyId)
en línea

Genera un blob HOATH, es decir, un token de evento. La semilla será generada aleatoriamente por el HSM.

Parámetros
szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN
Devolución
Blob de OATH, el resultado de la operación.
Excepciones
DinamoException.DinamoExceptionEn caso de error

Esta función se utiliza cuando es posible asignar una semilla a un soft token. Se generará una semilla con el tamaño de un SHA1

OATHIssueGenerateHOTP() [2/2]

byte[] OATHIssueGenerateHOTP ( cadena szMasterKeyId,
byte seedLen )
en línea

Genera un blob HOATH, es decir, un token de evento a partir de un tamaño de semilla.

Parámetros
szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN
seedLenSemilla en formato binario.
Devolución
Blob de OATH, el resultado de la operación.
Excepciones
DinamoException.DinamoExceptionEn caso de error

Esta función se utiliza cuando la semilla la proporciona un dispositivo software soft token (por ejemplo, una aplicación de teléfono móvil) o un dispositivo hadware hard_token (por ejemplo, un llavero generador de secuencias).

OATHIssueImportHOTP()

byte[] OATHIssueImportHOTP ( cadena szMasterKeyId,
byte[] bSemilla )
en línea

Importa un blob HOATH, es decir, un token de evento a partir de una semilla suministrada.

Parámetros
szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN
bSeedSemilla en formato binario.
Excepciones
DinamoException.DinamoExceptionEn caso de error
Devolución
Blob de OATH, el resultado de la operación.

OATHIssueGenerateTOTP() [1/4]

byte[] OATHIssueGenerateTOTP ( cadena szMasterKeyId)
en línea

Genera un blob TOTP, es decir, un token de evento. La semilla será generada aleatoriamente por el HSM.

Parámetros
szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN
Devolución
Blob de OATH, el resultado de la operación.
Excepciones
DinamoExceptionEn caso de error

Esta función se utiliza cuando es posible asignar una semilla a un testigo blando

Ejemplos
oath.cs.

OATHIssueGenerateTOTP() [2/4]

byte[] OATHIssueGenerateTOTP ( cadena szMasterKeyId,
corto paso )
en línea

Genera un blob TOTP, es decir, un token de evento. La semilla será generada aleatoriamente por el HSM.

Parámetros
szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN
pasoIntervalo de tiempo utilizado en el cálculo, también conocido como ventana de tiempo para el cambio de valor.
Devolución
Blob de OATH, el resultado de la operación.
Excepciones
DinamoException.DinamoExceptionEn caso de error

OATHIssueGenerateTOTP() [3/4]

byte[] OATHIssueGenerateTOTP ( cadena szMasterKeyId,
corto paso,
ulong offset )
en línea

Genera un blob TOTP, es decir, un token de evento. La semilla será generada aleatoriamente por el HSM.

Parámetros
szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN
pasoIntervalo de tiempo utilizado en el cálculo, también conocido como ventana de tiempo para el cambio de valor.
offsetRetraso del reloj a tener en cuenta.
Devolución
Blob de OATH, el resultado de la operación.
Excepciones
DinamoExceptionEn caso de error

OATHIssueGenerateTOTP() [4/4]

byte[] OATHIssueGenerateTOTP ( cadena szMasterKeyId,
corto paso,
ulong offset,
byte seedLen )
en línea

Genera un blob TOTP, es decir, un token de evento. La semilla será generada aleatoriamente por el HSM.

Parámetros
szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN
pasoIntervalo de tiempo utilizado en el cálculo, también conocido como ventana de tiempo para el cambio de valor.
offsetRetraso del reloj a tener en cuenta.
seedLenTamaño de la semilla.
Devolución
Blob de OATH, el resultado de la operación.
Excepciones
DinamoExceptionEn caso de error

OATHIssueImportTOTP() [1/3]

byte[] OATHIssueImportTOTP ( cadena szMasterKeyId,
byte[] bSemilla )
en línea

Importa un blob TOTP, es decir, un token de evento a partir de una semilla suministrada.

Parámetros
szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN
bSeedSemilla en formato binario.
Devolución
Blob de OATH, el resultado de la operación.
Excepciones
DinamoException.DinamoExceptionEn caso de error

OATHIssueImportTOTP() [2/3]

byte[] OATHIssueImportTOTP ( cadena szMasterKeyId,
byte[] bSeed,
corto paso )
en línea

Importa un blob TOTP, es decir, un token de evento a partir de una semilla suministrada.

Parámetros
szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN
bSeedSemilla en formato binario.
pasoIntervalo de tiempo utilizado en el cálculo, también conocido como ventana de tiempo para el cambio de valor.
Devolución
Blob de OATH, el resultado de la operación.
Excepciones
DinamoException.DinamoExceptionEn caso de error

OATHIssueImportTOTP() [3/3]

byte[] OATHIssueImportTOTP ( cadena szMasterKeyId,
byte[] bSeed,
corto paso,
ulong offset )
en línea

Importa un blob TOTP, es decir, un token de evento a partir de una semilla suministrada.

Parámetros
szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN
bSeedSemilla en formato binario.
pasoIntervalo de tiempo utilizado en el cálculo, también conocido como ventana de tiempo para el cambio de valor.
offsetRetraso del reloj a tener en cuenta.
Devolución
Blob de OATH, el resultado de la operación.
Excepciones
DinamoException.DinamoExceptionEn caso de error

CodificarBase32()

cadena EncodeBase32 ( byte[] fecha)
en línea

Función de utilidad para codificar Base32. Codificación estándar para generadores OATH en software.

Derivado de https://github.com/google/google-authenticator-android/blob/master/AuthenticatorApp/src/main/java/com/google/android/apps/authenticator/Base32String.java

Parámetros
fechaSemilla generada
Devolución
Datos codificados en BASE32.
Ejemplos
oath.cs.

OATHGetNext()

cadena OATHGetNext ( cadena szMasterKeyId,
byte lenOTP,
byte[] bBlob )
en línea

Recupera el siguiente valor para el OTP.

Parámetros
szMasterKeyIdNombre de la clave maestra, utilizada para proteger los blobs, de tamaño máximo DinamoApi.MAX_OBJ_ID_FQN_LEN
lenOTPTamaño de la OTP que se generará, que puede ser un valor comprendido entre DinamoApi . ISSUE_OATH_MIN_OTP_LEN y DinamoApi.ISSUE_OATH_MAX_OTP_LEN.
bBlobMatriz de bytes que contiene el blob que se utilizará para generar el OTP.
Devolución
Valor de la siguiente ficha
Excepciones
DinamoExceptionLanza una excepción en caso de error.