Exemplo de uso de geração de tokens OATH, validação e atualização do blob para evitar ataque de noreply.
using System;
using System.IO;
using QRCoder;
using System.Text;
namespace ConsoleATesteCheckOTPpp1
{
class Program
{
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";
private static string QRCODE_PATH = @".\seed_otp.jpg";
static void Main(string[] args)
{
client.
Connect(HSM_HOST, HSM_USER, HSM_PASS);
{
}
byte[] blob = null;
if (!File.Exists(BLOB_PATH))
{
File.WriteAllBytes(BLOB_PATH, blob);
}
else
{
blob = File.ReadAllBytes(BLOB_PATH);
}
if (!File.Exists(QRCODE_PATH))
{
QRCodeGenerator qrGenerator = new QRCodeGenerator();
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);
}
string otp = "";
client2.
Connect(HSM_HOST, HSM_USER, HSM_PASS);
do
{
Console.Out.Write("Digite o valor do OTP:");
otp = Console.In.ReadLine();
if (client.
OATHCheck(HSM_KEY, otp, blob, 10))
{
Console.Out.WriteLine("OTP Valido!!!");
File.WriteAllBytes(BLOB_PATH, blob);
}
else
{
Console.Out.WriteLine("OTP Invalido!!!");
}
} while (otp != "");
Console.Out.WriteLine("Arquivo gerado");
}
}
}
Classe de API para acesso às funcionalidades do HSM Dinamo. Nessa classe é possível programar utiliza...
Definição DinamoClient.cs:93
KEY_ALG
Definição DinamoClient.cs:227
bool IsKeyExist(string KeyId)
Definição DinamoClient.cs:2066
IntPtr GenerateKey(string KeyId, DinamoClient.KEY_ALG Alg, bool Exportable)
Gera uma chave permanente no HSM.
Definição DinamoClient.cs:1891
bool OATHCheck(string masterKeyId, string otp, ref byte[] bBlob)
Check OTP value.
Definição DinamoClient.cs:5783
byte[] OATHIssueGenerateTOTP(string szMasterKeyId)
Gera um blob TOTP, ou seja, um token de evento. A semente será gerada de forma aleatória pelo HSM.
Definição DinamoClient.cs:5998
string EncodeBase32(byte[] data)
Função utilitária para codificar Base32. Codificação padrão para geradores de OATH em sofware.
Definição DinamoClient.cs:6172
byte[] OATHGetKey(string szMasterKey, byte[] pbInBlob)
Recupera a semente da chave geradora do blob de OATH.
Definição DinamoClient.cs:5867
void Connect(string User, string Password)
Estabelece uma conexão cifrada com o HSM utilizando as configurações de load balance.
Definição DinamoClient.cs:562
void Disconnect(bool flagClose)
Encerra a conexão com o HSM.
Definição DinamoClient.cs:814
Namespace que denota um conjunto de funções para acesso ao HSM Dinamo e suas respectivas exceptions.
Definição DinamoClient.cs:12