De que se trata o artigo

Este artigo trata de como criar senhas mais seguras na plataforma .NET. A ideia é criar senhas baseadas em tempo, utilizando recursos de hora e minuto. Tudo isso baseado no modelo RFC 4226 (que será explanado no decorrer deste artigo).

Em que situação o tema é útil

O tema é útil quando for necessário criar meios mais seguros de geração de senhas. O objetivo é fortalecer a segurança do algoritmo (a ser criado neste artigo), a fim de evitar uma possível reversão do mesmo.

Crie senhas baseadas em tempo

Um grande desafio ao desenvolver aplicações, visando o usuário final, é a criação de uma autenticação forte, fácil de implementar e barata. Apesar de existirem “N” formas seguras de autenticação, a implementação de um OTP (One Time Password) ou senha de única utilização, garante que o usuário do sistema é quem realmente diz ser.

Há algum tempo, as aplicações, principalmente voltadas para a Web, passaram a necessitar de um fortalecimento na maneira de autenticar usuários.

No circuito de sistemas bancários podemos perceber a cada dia novas iniciativas de autenticação de usuários, de forma a minimizar tentativas de ataques aos sistemas.

A melhor maneira de autenticar um usuário está na utilização de chaves criptográficas e um certificado digital. Deste modo, o par de chaves criptográfico é armazenado de uma forma segura e um terceiro confiável garante todo o processo de sorteio e distribuição destas chaves.

Infelizmente o uso deste tipo de processo e tecnologia é caro para o usuário final, principalmente se tratando de varejo.

Uma alternativa mais em conta, pensando em custo, é o uso de um gerador de senhas, forte e barato o suficiente para ter seu uso massificado. Algumas empresas internacionais como a RSA, líder neste segmento, têm seus próprios dispositivos, geralmente chamados de TOKENS por conta do formato que possuem. Esses dispositivos têm um firmware e um hardware que gera automaticamente a cada período de tempo, uma sequência numérica que pode ser usada para autenticar determinado usuário.

A solução funciona com uma contraparte servidora, contendo o mesmo algoritmo que o dispositivo e a mesma informação do firmware, que consegue gerar a mesma sequência numérica no mesmo instante da autenticação do usuário e validar se o mesmo é quem ele diz ser. Isto pode ser obtido ao mapearmos determinado username ou outra informação de identificação do usuário a um desses dispositivos. Deste modo, o servidor consegue mapear quem entra utilizando aquela sequência numérica. Estes algoritmos são fortes o suficiente para não ter uma colisão matematicamente provável, ou seja, para um determinado firmware ou semente uma sequência numérica é formada a cada instante de tempo. A Figura 1 exibe um token RSA da solução SecurID.

Nota do DevMan

Todo token ou gerador de senhas descartáveis, gera os números aleatórios baseados em um instante de tempo e em uma chave única, chamada de semente, por ser o fator gerador do número que será usado como senha.

Figura 1. SecurID da RSA

Nota do DevMan

HOTP é um HMAC (Hash-based Message Authentication Code) baseado no algoritmo One Time Password. O mesmo foi publicado como um informativo IETF RFC 4226 em dezembro de 2005, documentando o algoritmo, juntamente com uma implementação Java. Desde então, o algoritmo foi adotado por muitas empresas em todo o mundo. Para mais informações sobre o RFC 4226, veja seção Links.

Um dos ataques mais prováveis e triviais é o roubo de senhas ao serem digitadas. O uso deste tipo de autenticação não impede o roubo da sessão, mas, como a mesma só está disponível por um curto período de tempo, mesmo que o ladrão a roube, ele tem 30 segundos para utilizá-la. Se ao utilizarmos este tipo de mecanismo associarmos outros fatores, por exemplo, permitir apenas um Login por usuário (ou seja, não permitir que o mesmo realize Login a partir de endereços IP diferentes), conseguimos criar um mecanismo forte contra a maioria dos ataques triviais que temos hoje no ambiente computacional.

Há alguns anos, algumas iniciativas da comunidade em conjunto com algumas empresas de segurança, criaram algoritmos open source, como é o caso do padrão OATH (Open Authentication), permitindo popularizar este tipo de autenticação em aplicações.

Nota do DevMan

OATH é uma iniciativa conjunta de várias organizações de segurança que fornece um mecanismo seguro de autenticação entre dispositivos, websites, serviços e qualquer outro recurso que necessite garantir a autenticidade de um usuário. Como exemplo de utilização desse serviço temos o Facebook.

O padrão HOTP, portanto, permite que implementemos uma destas formas de geração de senhas baseada em instantes de tempo. Este que será objeto de estudo deste artigo.

Nosso projeto

Nosso projeto consistirá em uma solution do Visual Studio 2010 com a linguagem C#, contendo um projeto Web (em ASP.NET 4 comum, sem maiores detalhes de sua implementação), onde teremos um formulário de digitação do OTP, que será gerado pelo aplicativo Cliente em WPF, apenas para utilizar a biblioteca de autenticação que iremos criar. Outro projeto WPF que demonstrará um cliente de geração das senhas e uma biblioteca tanto de geração quanto de autenticação das senhas.

...
Quer ler esse conteúdo completo? Tenha acesso completo