API C/C++
HSM Dinamo
Carregando...
Procurando...
Nenhuma entrada encontrado
OATH

Descrição detalhada

Autenticação padrão OATH.

Iniciativa OATH

A iniciativa OATH (Open Authentication) é um colaboração suportada por diversos membros da indústria de segurança para desenvolver uma arquitetura aberta e interoperável de autenticação forte. Este objetivo é conseguido pela definição de padrões abertos disponíveis para todos.

O ecossistema OATH é composto de fabricantes de dispositivos (tokens, chips, smart cards, computadores, celulares, PDAs. tablets), fabricantes de plataformas (serviços web, gerenciadores de identidade, servidores de aplicação, sistemas de federação de identificação), fabricantes de aplicações (VPN, CRM, ERP, DRM, comércio eletrônico, roaming, wi-fi) e integradores de sistema (ISPs, órgãos de governo, bandeiras de cartão de crédito, etc).

Módulo OATH

O HSM pode ser utilizado como gerador de sementes OATH e como autenticador de OTPs (One Time Password). A implementação do HSM está de acordo com os padrões listados abaixo.

Por prover uma fronteira criptográfica segura, ambiente controlado e algoritmos homologados o HSM apresenta vantagens na sua adoção em sistema de autenticação forte.

O módulo OATH do HSM tem três serviços básicos: emissão, autenticação e ressincronização:

  1. a emissão consiste da geração da semente pelo HSM, o que promove a emissão de um blob, que é devolvido para a aplicação para guarda em base de dados. Com o blob mantido em base da dados externa ao HSM, o processo de emissão fica bastante flexível, sem gerar carga no HSM, e mantendo o sigilo e a confidencialidade necessária.
  2. o serviço de autenticação do módulo é certamente o mais utilizado no dia a dia da produção. A aplicação quando precisar realizar uma autenticação dever recuperar o blob na base de dados, enviá-lo ao HSM, receber o resultado juntamente com o blob atualizado, para ser devolvido à base de dados.
  3. o serviço de ressincronização consiste basicamente em abrir a janela de tolerância normal, e solicitar que o usuário informe os OTPs n e n+1.

Cenários de Geração e Autenticação

Nos cenários de geração e autenticação descritos abaixo o que muda é a origem da semente e como ela é recebida pela aplicação para criação do blob e enviada ao usuário (como semente ou embarcada em token físico). Uma vez criado o blob a autenticação em qualquer cenário segue sempre o mesmo formato. Nos cenários abaixo não importa se o token é HOTP ou TOTP.

Cenário I: Token: a semente é gerada pelo fabricante do token e enviada em formato PSKC

a. Geração

  1. Aplicação seleciona ou gera uma chave master;
  2. Aplicação recebe arquivo PSKC e chave de transporte;
  3. Aplicação solicita ao HSM tradução do arquivo PSKC para blob;
  4. HSM retorna blob;
  5. Aplicação recebe o blob, cria relação entre blob e usuário e guarda em base de dados;
  6. Aplicação despacha o token físico para o usuário;

b. Autenticação

  1. Vide abaixo;

Cenário II: Token: a semente é gerada pelo fabricante do token e enviada em texto claro

a. Geração

  1. Aplicação seleciona ou gera uma chave master;
  2. Aplicação recebe uma semente em texto claro;
  3. Aplicação prepara uma estrutura de blob OATH;
  4. Aplicação solicita ao HSM criptografia do blob OATH com a chave master;
  5. HSM retorna dado cifrado, que é o blob;
  6. Aplicação recebe o blob, cria relação entre blob e usuário e guarda em base de dados;
  7. Aplicação despacha o token físico para o usuário;

b. Autenticação

  1. Vide abaixo;

Cenário III: Soft Token: a semente é gerada pelo usuário e recebida em texto claro

a. Geração

  1. Aplicação seleciona ou gera uma chave master;
  2. Usuário gera e exporta semente em sua aplicação OATH (smart phone, desktop, etc);
  3. Usuário envia semente para aplicação;
  4. Aplicação recebe uma semente em texto claro;
  5. Aplicação prepara uma estrutura de dados OATH;
  6. Aplicação solicita ao HSM criptografia da estrutura da dados OATH com a chave master;
  7. HSM retorna estrutura cifrada, que é o blob;
  8. Aplicação recebe o blob, cria relação entre blob e usuário e guarda em base de dados;

b. Autenticação

  1. Vide abaixo;

Cenário IV: Soft Token: HSM gera a semente

a. Geração

  1. Aplicação seleciona ou gera uma chave master;
  2. Aplicação solicita emissão de blob OATH;
  3. HSM gera semente, prepara blob e retorna para a aplicação;
  4. Aplicação recebe o blob, cria relação entre blob e usuário e guarda em base de dados;
  5. Aplicação envia o blob para HSM e solicita a semente em texto claro;
  6. Aplicação envia a semente para o usuário, normalmente usando algum canal seguro;
  7. Usuário importa semente para sua aplicação OATH (smart phone, desktop, etc);

b. Autenticação

  1. Vide abaixo;

Autenticação do usuário em qualquer cenário:

  1. Usuário apresenta OTP gerado para aplicação;
  2. Aplicação recupera blob do usuário a partir da base de dados e solicita verificação ao HSM passando blob e OTP;
  3. HSM processa pedido e devolve resultado e o blob processado;
  4. Aplicação recebe o blob e atualiza a base de dados;
  5. Aplicação informa usuário sobre resultado da autenticação;

Glossário

Referências

Autenticação padrão OATH. Mais...

Funções

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)
 

Funções

◆ DOATHIssueBlob()

int AAP_API DOATHIssueBlob ( HSESSIONCTX hSession,
char * szMasterKeyId,
DWORD dwParamBlobType,
void * pvParamBlob,
DWORD dwParamBlobLen,
BYTE * pbOTPBlob,
DWORD * pdwOTPBlobLen,
DWORD dwFlags )

#include <dinamo.h>

Gera ou importa um blob OATH para uso no HSM.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szMasterKeyIdNome da chave mestre, utilizada para proteger os blobs, de tamanho máximo MAX_OBJ_ID_FQN_LEN.
[in]dwParamBlobTypeA tabela seguinte é aceita.
valor Significado
ISSUE_OATH_GENERATE_HOTP Tipo de pvParamBlob: estrutura ISSUE_OTP_BLOB.
Gera blob HOTP no HSM. A semente é gerada dentro do HSM.
Os seguintes parâmetros da estrutura devem ser preenchidos: bSeedLen e bTruncationOffset. Os demais devem estar zerados.
ISSUE_OATH_GENERATE_TOTP Tipo de pvParamBlob: estrutura ISSUE_OTP_BLOB.
Gera blob TOTP no HSM. A semente é gerada dentro do HSM.
Os seguintes parâmetros da estrutura devem ser preenchidos: bSeedLen, bTruncationOffset, wTimeStep e otT0. Os demais devem estar zerados.
ISSUE_OATH_IMPORT_HOTP Tipo de pvParamBlob: estrutura ISSUE_OTP_BLOB.
Importa um blob HOTP. A semente é passada por parâmetro. Os seguintes parâmetros da estrutura devem ser preenchidos: bSeedLen, pbSeed e bTruncationOffset. Os demais devem estar zerados.
ISSUE_OATH_IMPORT_TOTP Tipo de pvParamBlob: estrutura ISSUE_OTP_BLOB.
Importa um blob TOTP. Semente é passada por parâmetro.
Os seguintes parâmetros da estrutura devem ser preenchidos: bUseDefaultMovingFactor, bSeedLen, pbSeed, bTruncationOffset, wTimeStep e otT0. Os demais devem estar zerados.
[in]pvParamBlobPonteiro para os dados ou estruturas especificados em dwParamBlobType.
[in]dwParamBlobLenTamanho dos dados ou estrutura especificados em dwParamBlobType.
[out]pbOTPBlobBuffer de tamanho mínimo de ISSUE_OATH_OUTPUT_MAX_BLOB_LEN que conterá o blob gerado.
[in,out]pdwOTPBlobLenTamanho do buffer apontado por pbOTPBlob. Na entrada deve conter o tamanho do buffer pbOTPBlob na saída conterá o tamanho do blob escrito no buffer alocado.
[in]dwFlagsReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
gen_check_oath.c.

◆ DOATHCheckOTP()

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

#include <dinamo.h>

Verifica um valor OTP para determinado blob OATH.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szMasterKeyIdNome da chave mestre, utilizada para proteger os blobs, de tamanho máximo MAX_OBJ_ID_FQN_LEN.
[in]szOTPOTP a ser verificado de tamanho mínimo ISSUE_OATH_MIN_OTP_LEN e máximo ISSUE_OATH_MAX_OTP_LEN.
[in,out]pbOATHBlobPonteiro para um buffer contendo o blob que terá o OTP verificado. Este buffer será reescrito com o buffer atualizado.
[in,out]pdwOATHBlobLenTamanho do buffer pbOATHBlob. Na entrada conterá o tamanho de pbOATHBlob e na saída o tamanho de dados escritos em pbOATHBlob.
[in]dwFlagsA partir da versão 4.0.2 do firmware pode-se passar, neste parâmetro, o tamanho da janela de look-ahead de autenticação. O padrão é de 10 intervalos para mais ou para menos. No caso de tokens HOTP os intervalos serão contados por quantidade de eventos, no caso dos tokens TOTP serão contados por quantidade de time-steps.
Valor Significado
0 Utiliza o valor default de 10 intervalos.
1 à MAX_OTP_LOOK_AHEAD_INTERVAL Define o valor da janela de look-ahead de autenticação.

Também é possível passar neste parâmetro a flag OATH_UPDATE_BLOB, para permitir a atualização do formato do OATH blob. Quando a flag OATH_UPDATE_BLOB é utilizada, deve-se passar o OATH blob atual em pbOATHBlob em um buffer suficientemente grande para comportar o blob atualizado. pdwOATHBlobLen deverá conter o valor do tamanho do buffer passado em pbOATHBlob. O tamanho de pbOATHBlob necessário, é retornado em pdwOATHBlobLen na chamada onde o erro D_OATH_BLOB_UPDATE é retornado. A atualização precisa ser apenas feita após receber o erro D_OATH_BLOB_UPDATE. Ver Anotações para mais detalhes.

Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Anotações
Caso seja retornado o erro D_OATH_BLOB_UPDATE a função retornará em pdwOATHBlobLen o tamanho do buffer que deverá ser utilizado para atualização do OATH blob em uma chamada posterior. Ver detalhes na especificação de OATH_UPDATE_BLOB.
Exemplos
gen_check_oath.c.

◆ DOATHGetNextOTP()

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

#include <dinamo.h>

Gera o próximo OTP à partir de um blob OATH. O OATH blob não será alterado.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szMasterKeyIdNome da chave mestre, utilizada para proteger os blobs, de tamanho máximo MAX_OBJ_ID_FQN_LEN.
[in]bOTPLenTamanho do OTP que será gerado, podendo ser um valor entre ISSUE_OATH_MIN_OTP_LEN e ISSUE_OATH_MAX_OTP_LEN.
[in]pbOATHBlobPonteiro para um buffer contendo o blob que será utilizado para a geração do OTP. Este buffer não será alterado.
[in]dwOATHBlobLenTamanho do buffer pbOATHBlob.
[out]szOTPBuffer que conterá o OTP gerado. Deverá ter o tamanho mínimo de bOTPLen + 1(terminador nulo).
[in]dwFlagsReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
gen_check_oath.c.

◆ DOATHGetBlobInfo()

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

#include <dinamo.h>

Recupera as informações internas de um blob OATH.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szMasterKeyNome da chave mestre, utilizada para proteger os blobs, de tamanho máximo MAX_OBJ_ID_FQN_LEN.
[in]pbInBlobPonteiro para um buffer contendo o blob para extração das informações.
[in]dwInBlobLenTamanho do buffer pbInBlob.
[in]dwOutBlobTypeIndica o tipo de dado de saída. A seguinte tabela é aceita.
Valor Significado
OATH_ISSUE_OATH_BLOB_t Tipo de pbOutInfo: ISSUE_OATH_BLOB_t. O Buffer de pbInBlob precisa ser um blob tipo V1 com tamanho ISSUE_OATH_OUTPUT_BLOB_V1_LEN.
OATH_ISSUE_OATH_INFO_t Tipo de pbOutInfo: ISSUE_OATH_INFO_t. Esta opção aceita blobs do tipo V1 e V2 com tamanhos ISSUE_OATH_OUTPUT_BLOB_V1_LEN e ISSUE_OATH_OUTPUT_BLOB_V2_LEN, respectivamente.
[out]pbOutInfoPonteiro para um buffer que receberá as informações do blob. Deve ser de acordo com o descrito em dwOutBlobType.
[in,out]pdwOutInfoLenTamanho do buffer apontado por pdwOutInfoLen.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DOATHBlobResync()

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

#include <dinamo.h>

Re-sincroniza um blob OATH através da apresentação de dois valores de OTP contínuos. Apenas para HOTP(OTP por evento).

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szMasterKeyIdNome da chave mestre, utilizada para proteger os blobs, de tamanho máximo MAX_OBJ_ID_FQN_LEN.
[in]szOTP1OTP a ser verificado de tamanho mínimo ISSUE_OATH_MIN_OTP_LEN e máximo ISSUE_OATH_MAX_OTP_LEN.
[in]szOTP2Segundo OTP a ser verificado de tamanho mínimo ISSUE_OATH_MIN_OTP_LEN e máximo ISSUE_OATH_MAX_OTP_LEN.
[in,out]pbOATHBlobPonteiro para um buffer contendo o blob a ser sincronizado. Este buffer será reescrito com o buffer sincronizado.
[in,out]pdwOATHBlobLenTamanho do buffer pbOATHBlob. Na entrada conterá o tamanho de pbOATHBlob e na saída o tamanho de dados escritos em pbOATHBlob.
[in]dwFlagsAceita a flag OATH_UPDATE_BLOB, para permitir a atualização do formato do OATH blob. Quando a flag OATH_UPDATE_BLOB é utilizada, deve-se passar o OATH blob atual em pbOATHBlob em um buffer suficientemente grande para comportar o blob atualizado. pdwOATHBlobLen deverá conter o valor do tamanho do buffer passado em pbOATHBlob. O tamanho de pbOATHBlob necessário, é retornado em pdwOATHBlobLen na chamada onde o erro D_OATH_BLOB_UPDATE é retornado. A atualização precisa ser apenas feita após receber o erro D_OATH_BLOB_UPDATE. Ver Anotações para mais detalhes.
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Anotações
A partir da versão 4.0.2 do firmware a janela será estendida em 200 intervalos para mais e para menos. No caso de tokens HOTP os intervalos serão contados por quantidade de eventos, no caso dos tokens TOTP serão contados por quantidade de time-steps. Caso seja retornado o erro D_OATH_BLOB_UPDATE a função retornará em pdwOATHBlobLen o tamanho do buffer que deverá ser utilizado para atualização do OATH blob em uma chamada posterior. Ver detalhes na especificação de OATH_UPDATE_BLOB.

◆ DOATHPskcTranslate()

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

#include <dinamo.h>

Importa sementes envelopadas no padrão PSKC (Portable Symmetric Key Container), RFC 6030.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szMasterKeyNome da chave mestre, utilizada para proteger os blobs, de tamanho máximo MAX_OBJ_ID_FQN_LEN de saída.
[in]pbPSKBuffer de tamanho máximo OATH_MAX_PSK_LEN contendo a chave de transporte que protege as sementes informadas em pbPSKC.
[in]bPSKLenTamanho do buffer pbPSK.
[in]pbPSKCBuffer PSKC contendo as sementes que serão transformadas em blobs no formato do HSM.
[in]dwPSKCLenTamanho do buffer pbPSKC.
[out]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=>".
[out]pdwBlobListQuantityPonteiro para a quantidade de blobs retornados no buffer pvBlobList.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.