sexta-feira, 15 de julho de 2011

Diagrama básico de um Sistema de Segurança de números aleatórios.

Para falar a verdade, desconheço o nome utilizado para este tipo de sistema, utilizei este porque achei o mais fácil de entender. Este sistema é muito comum na vida de muitos, pois é utilizado em vários bancos, como Itaú e Banco do Brasil, para evitar que um ladrão ou espertinho consiga saber sua senha olhando para a tela do Caixa Eletrônico, ou para o monitor do computador enquanto você digita.

Desenvolvi um programa similar para uso pessoal, de criptografia de arquivos. Existem keyloggers e outros tipos de aplicativos capazes de gravar o que o usuário digita ou onde ele clica, sendo possível então descobrir sua senha. Esta primeira versão que criei é só um exemplar de uma outra versão futura que irei desenvolver, bem mais complexa.

Nesta versão, escolhi utilizar uma senha de somente 4 dígitos, e 2 números aleatórios em cada botão (igual ao Banco Itaú). Quanto maior o número de dígitos da senha, mais difícil será descobríla, no caso, como são somente 4 dígitos e 2 números aleatórios, fazendo as contas, 4² = 16 combinações possíveis. Em um banco, isso é viável pois caso o cliente erre 3 vezes, terá de se dirigir à sua Agência para desbloquear a conta. Mas o que impediria o ladrão de tentar 16 vezes no computador? Uma chave no registro do sistema, uma autenticação online com seu MAC Adress, ou uma randomização mais elaborada.

No começo, o programa só randomizava ao iniciar, porém agora adaptei para que ele randomize toda vez que o usuário errar a senha, sendo assim, mesmo que o ladrão veja o usuário digitando a senha, será praticamente impossível dele conseguir adivinhar.

Segue adiante o diagrama que elaborei:

1.Número aleatório base é definido, como RN0 (Random Number 0)

2.Segundo número aleatório e definido como RN1, e em seguida, é verificado se é igual ao primeiro (RN0). Caso seja, entra num loop (while RN0 == RN1 do) de randomização até ser diferente.

3.Este processo se repete até a última unidade, o RN9.

4.Após definidos, as variáveis são aplicadas aos botões na interface. 5 botões, cada um com 2 números aleatórios. Cada botão já tem sua variável associada, junto do número randômico. (ex. Botão 1 = RN0 e RN1, Botão 2 = RN2 e RN3). A junção deve ser feita através da concatenação das variáveis (ex.: RN0..” - ”..RN1)

5.É criada então uma matriz, onde serão armazenados os valores dos botões clicados. Para cada botão, 2 espaços na matriz (já que são 2 números aleatórios em cada botão), em ordem.

6.Quando um botão é clicado então, o script puxa os valores dos números aleatórios associados com o botão, e os armazena em ordem na matriz. (ex. Matriz[1], Matriz[2]). Há um contador de dígitos em cada botão, no caso, denominei COM e COM2 (pois são 2 números aleatórios). No começo do Script, os valores são determinados como COM = –1 e COM2 = 0. Quando o botão é clicado, é somado 2 a cada COM (COM = COM + 2; COM2 = COM2 + 2), e então o script associa o valor à matriz de acordo com a contagem do COM (Matriz[COM] = RN0; Matriz[COM2] = RN1).

7. O programa então entra num loop de X vezes (sendo X o número de dígitos da senha) e Y números (no caso, sendo 2 números em cada botão, X=1,2 – De 1 até 2) para tentar todas as combinações de senha possíveis com os números digitados. Segue exemplo:

for A = 1, 2 do

for B = 3, 4 do

for C = 5, 6 do

for D = 7, 8 do

SenhaMaster = A..B..C..D  < A variável SenhaMaster criará uma senha de 4 dígitos com todas as combinações possíveis, e tentará validar logo adiante (no meu caso, utilizando uma string criptografada).

8.Caso uma das combinações tenha sucesso depois da validação, armazenar em uma variável a permissão concedida, para ao final do loop o programa conceder acesso.

9.Caso o loop não encontre nenhuma variável compatível, armazenar em outra variável o número de erros do usuário (ex.: X = X + 1), e logo embaixo, verificar a quantidade, e caso o número de erros seja superior a 3, fechar o aplicativo e armazenar uma entrada no registro do Windows, para que o programa só possa ser iniciado novamente depois de um determinado tempo. (12 horas?).

Segue abaxo uma imagem do exemplar que criei. Ele é 100% funcional, e você pode estranhar os 2 primeiros campos, senha primária e secundária, eles são usados junto desse sistema para aumentar mais ainda a segurança. A validação que utilizei usa uma biblioteca de criptografia Blowfish.

kronos

0 comentários: