NET API
HSM Dinamo
Cargando...
Buscando...
No se han encontrado entradas
oath.cs

Ejemplo de uso de la generación de tokens OATH, validación y actualización de blobs para evitar un ataque noreply.

Véase la nota sobre ejemplos.
usando System;
utilizando Dinamo.Hsm;
usando System.IO;
utilizando QRCoder;
usando System.Text;
namespace ConsolaATesteCheckOTPpp1
{
clase Programa
{
private static string HSM_HOST = "200.201.208.61";
private static string HSM_USER = "tstotp";
private static string HSM_PASS = "12345678";
private static string HSM_KEY = "key_c";
private static string BLOB_PATH = @".\blob_otp.bin"; // Actualizar la base de datos - vinculada al usuario
private static string QRCODE_PATH = @".\seed_otp.jpg";
static void Main(string[] args)
{
DinamoClient cliente = nuevo DinamoClient();
cliente.Connect(HSM_HOST, HSM_USER, HSM_PASS);
// Gera a chave se nao tiver
if (!client.IsKeyExist(HSM_KEY))
{
cliente.GenerateKey(HSM_KEY, DinamoClient.KEY_ALG.ALG_AES_256, false);
}
// Gera OTP
byte[] blob = null;
if (!File.Exists(BLOB_PATH))
{
blob = cliente. OATHIssueGenerateTOTP(HSM_KEY, 30);
File.WriteAllBytes(BLOB_PATH, blob);
}
si no
{
blob = Archivo.ReadAllBytes(BLOB_PATH);
}
if (!File.Exists(QRCODE_PATH))
{
QRCodeGenerator qrGenerator = new QRCodeGenerator();
byte[] seed = client. OATHGetKey(HSM_KEY, blob);
string semilla_base32 = cliente.EncodeBase32(semilla);
string payload = string.Format("otpauth://totp/Dinamo:teste?secret={0}&algorithm=SHA1&digits=6&period=30", seed_base32);
QRCodeData qrCodeData = qrGenerator.CreateQrCode(payload, QRCodeGenerator.ECCLevel.Q);
QRCode qrCode = new QRCode(qrCodeData);
System.Drawing.Bitmap fig = qrCode.GetGraphic(20);
fig.Save(QRCODE_PATH, System.Drawing.Imaging.ImageFormat.Jpeg);
}
cadena otp = "";
DinamoClient cliente2 = nuevo DinamoClient();
client2.Connect(HSM_HOST, HSM_USER, HSM_PASS);
de
{
// Pode-se usar a função se quiser que o HSM gere um OTP, ou seja, envio por SMS
//Console.Out.WriteLine("Valor do próximo OTP:{0}", client.OATHGetNext(HSM_KEY, DinamoApi.ISSUE_OATH_MIN_OTP_LEN, blob));
//
//No cenário que dispomos de um Google Autenticator para gerar o valor:
Console.Out.Write("Introduzca el valor OTP:");
otp = Console.In.ReadLine();
if (client. OATHCheck(HSM_KEY, otp, blob, 10)) // 10 ventanas de 30 segundos
{
Console.Out.WriteLine("¡¡¡OTP Válido!!!");
File.WriteAllBytes(BLOB_PATH, blob);
}
si no
{
Console.Out.WriteLine("¡¡¡OTP inválido!!!");
}
} while (otp != "");
cliente2.Disconnect();
Console.Out.WriteLine("Archivo generado");
client.Disconnect();
}
}
}
Clase API para acceder a las funcionalidades del HSM Dinamo. En esta clase se puede programar utilizando...
Definición DinamoClient.cs:93
CLAVE_ALG
Definición DinamoClient.cs:227
bool IsKeyExist(cadena KeyId)
Definición DinamoClient.cs:2066
IntPtr GenerateKey(cadena KeyId, DinamoClient.KEY_ALG Alg, bool Exportable)
Genera una clave permanente en el HSM.
Definición DinamoClient.cs:1891
bool OATHCheck(cadena masterKeyId, cadena otp, ref byte[] bBlob)
Compruebe el valor OTP.
Definición DinamoClient.cs:5783
byte[] OATHIssueGenerateTOTP(cadena szMasterKeyId)
Genera un blob TOTP, es decir, un token de evento. La semilla será generada aleatoriamente por el HSM.
Definición DinamoClient.cs:5998
string EncodeBase32(byte[] data)
Función de utilidad para codificar Base32. Codificación estándar para generadores OATH en software.
Definición DinamoClient.cs:6172
byte[] OATHGetKey(cadena szMasterKey, byte[] pbInBlob)
Recupera la semilla de la clave que genera la mancha de OATH.
Definición DinamoClient.cs:5867
void Conectar(cadena Usuario, cadena Contraseña)
Establece una conexión cifrada con el HSM utilizando los ajustes de equilibrio de carga.
Definición DinamoClient.cs:562
void Desconectar(bool flagCerrar)
Finaliza la conexión con el HSM.
Definición DinamoClient.cs:814
Espacio de nombres que denota un conjunto de funciones para acceder al HSM Dinamo y sus respectivas excepciones.
Definición DinamoClient.cs:12