GRIFFORIX

The Grifforix, Marcos Paulo Soares
The Grifforix, Marcos Paulo Soares

Grifforix visa ser um gerador de senhas fortes e seguras feito na linguagem Java por Guilherme Faura. Tenho planos de torná-lo também um software autenticador seguro no futuro. Grifforix é atualmente experimental na versão v.0.6.0-alpha. Grifforix está sob a licença Apache 2.0, leia-a com atenção.

Grifforix sendo executado na linha de comando
Grifforix sendo executado na linha de comando

Este é o Grifforix em uso, restringi o limite de caracteres a 20 apenas para fins de demonstração, mas você pode gerar virtualmente uma senha gigante se quiser. Observe que as senhas são exibidas com uma boa combinação de todos os tipos de caracteres.


COMO FUNCIONA?

Bem, primeiro, ele não usa métodos comuns para geração de números aleatórios, como a famosa rand() da linguagem C — que é uma função pseudo-aleatória para geração de números, mas na verdade usa a classe java.security.SecureRandom do Java que gera um número aleatório criptograficamente seguro para ser usado no algoritmo de geração de senha.

Na computação, quando um número é gerado matematicamente de forma determinística, é chamado de "número pseudo-aleatório" ou apenas PRNG. Isso não é seguro porque PRNG não é verdadeiramente aleatório, pois é completamente determinado por um valor inicial, chamado de “seed” do PRNG.

John von Neumann disse uma vez:

"Qualquer um que considere métodos aritméticos de produzir dígitos aleatórios está, é claro, em estado de pecado."
–John von Neumann

Aplicações criptográficas exigem que a saída não seja previsível a partir de saídas anteriores. Com isso dito, surge a necessidade de um gerador de números verdadeiramente aleatórios ou um RNG. A linguagem Java possui a SecureRandom para isso... ela chama diretamente funções dos sistemas operacionais para obter aleatoriedade verdadeira (RNG) de forma inteligente. Após isso, o algoritmo usa os números gerados para a geração de caractéres, para formar a senha segura constituída por todos os tipos de caractéres.