API C/C++
HSM Dinamo
|
Autenticação padrão 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).
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:
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
b. Autenticação
Cenário II: Token: a semente é gerada pelo fabricante do token e enviada em texto claro
a. Geração
b. Autenticação
Cenário III: Soft Token: a semente é gerada pelo usuário e recebida em texto claro
a. Geração
b. Autenticação
Cenário IV: Soft Token: HSM gera a semente
a. Geração
b. Autenticação
Autenticação do usuário em qualquer cená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) |
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.
[in] | hSession | Contexto adquirido através da função DOpenSession(). | ||||||||||
[in] | szMasterKeyId | Nome da chave mestre, utilizada para proteger os blobs, de tamanho máximo MAX_OBJ_ID_FQN_LEN. | ||||||||||
[in] | dwParamBlobType | A tabela seguinte é aceita.
| ||||||||||
[in] | pvParamBlob | Ponteiro para os dados ou estruturas especificados em dwParamBlobType . | ||||||||||
[in] | dwParamBlobLen | Tamanho dos dados ou estrutura especificados em dwParamBlobType . | ||||||||||
[out] | pbOTPBlob | Buffer de tamanho mínimo de ISSUE_OATH_OUTPUT_MAX_BLOB_LEN que conterá o blob gerado. | ||||||||||
[in,out] | pdwOTPBlobLen | Tamanho 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] | dwFlags | Reservado para uso futuro (deve ser 0). |
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.
[in] | hSession | Contexto adquirido através da função DOpenSession(). | ||||||
[in] | szMasterKeyId | Nome da chave mestre, utilizada para proteger os blobs, de tamanho máximo MAX_OBJ_ID_FQN_LEN. | ||||||
[in] | szOTP | OTP a ser verificado de tamanho mínimo ISSUE_OATH_MIN_OTP_LEN e máximo ISSUE_OATH_MAX_OTP_LEN. | ||||||
[in,out] | pbOATHBlob | Ponteiro para um buffer contendo o blob que terá o OTP verificado. Este buffer será reescrito com o buffer atualizado. | ||||||
[in,out] | pdwOATHBlobLen | Tamanho do buffer pbOATHBlob . Na entrada conterá o tamanho de pbOATHBlob e na saída o tamanho de dados escritos em pbOATHBlob . | ||||||
[in] | dwFlags | A 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.
|
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.
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. 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.
[in] | hSession | Contexto adquirido através da função DOpenSession(). |
[in] | szMasterKeyId | Nome da chave mestre, utilizada para proteger os blobs, de tamanho máximo MAX_OBJ_ID_FQN_LEN. |
[in] | bOTPLen | Tamanho do OTP que será gerado, podendo ser um valor entre ISSUE_OATH_MIN_OTP_LEN e ISSUE_OATH_MAX_OTP_LEN. |
[in] | pbOATHBlob | Ponteiro para um buffer contendo o blob que será utilizado para a geração do OTP. Este buffer não será alterado. |
[in] | dwOATHBlobLen | Tamanho do buffer pbOATHBlob . |
[out] | szOTP | Buffer que conterá o OTP gerado. Deverá ter o tamanho mínimo de bOTPLen + 1(terminador nulo). |
[in] | dwFlags | Reservado para uso futuro (deve ser 0). |
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.
[in] | hSession | Contexto adquirido através da função DOpenSession(). | ||||||
[in] | szMasterKey | Nome da chave mestre, utilizada para proteger os blobs, de tamanho máximo MAX_OBJ_ID_FQN_LEN. | ||||||
[in] | pbInBlob | Ponteiro para um buffer contendo o blob para extração das informações. | ||||||
[in] | dwInBlobLen | Tamanho do buffer pbInBlob . | ||||||
[in] | dwOutBlobType | Indica o tipo de dado de saída. A seguinte tabela é aceita.
| ||||||
[out] | pbOutInfo | Ponteiro para um buffer que receberá as informações do blob. Deve ser de acordo com o descrito em dwOutBlobType . | ||||||
[in,out] | pdwOutInfoLen | Tamanho do buffer apontado por pdwOutInfoLen . | ||||||
[in] | dwParam | Reservado para uso futuro (deve ser 0). |
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).
[in] | hSession | Contexto adquirido através da função DOpenSession(). |
[in] | szMasterKeyId | Nome da chave mestre, utilizada para proteger os blobs, de tamanho máximo MAX_OBJ_ID_FQN_LEN. |
[in] | szOTP1 | OTP a ser verificado de tamanho mínimo ISSUE_OATH_MIN_OTP_LEN e máximo ISSUE_OATH_MAX_OTP_LEN. |
[in] | szOTP2 | Segundo OTP a ser verificado de tamanho mínimo ISSUE_OATH_MIN_OTP_LEN e máximo ISSUE_OATH_MAX_OTP_LEN. |
[in,out] | pbOATHBlob | Ponteiro para um buffer contendo o blob a ser sincronizado. Este buffer será reescrito com o buffer sincronizado. |
[in,out] | pdwOATHBlobLen | Tamanho do buffer pbOATHBlob . Na entrada conterá o tamanho de pbOATHBlob e na saída o tamanho de dados escritos em pbOATHBlob . |
[in] | dwFlags | Aceita 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. |
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. 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.
[in] | hSession | Contexto adquirido através da função DOpenSession(). |
[in] | szMasterKey | Nome da chave mestre, utilizada para proteger os blobs, de tamanho máximo MAX_OBJ_ID_FQN_LEN de saída. |
[in] | pbPSK | Buffer de tamanho máximo OATH_MAX_PSK_LEN contendo a chave de transporte que protege as sementes informadas em pbPSKC . |
[in] | bPSKLen | Tamanho do buffer pbPSK. |
[in] | pbPSKC | Buffer PSKC contendo as sementes que serão transformadas em blobs no formato do HSM. |
[in] | dwPSKCLen | Tamanho do buffer pbPSKC. |
[out] | pvBlobList | Ponteiro 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] | pdwBlobListQuantity | Ponteiro para a quantidade de blobs retornados no buffer pvBlobList . |
[in] | dwParam | Reservado para uso futuro (deve ser 0). |