sexta-feira, 17 de julho de 2009

Guardando as senhas em segurança com o GnuPG...

Um dos problemas que assolam a todos na sociedade pós internet é guardar n senhas dos n sítios que nos cadastramos web a fora. Como é difícil guardar no cérebro n senhas diferente, uma para cada coisa, usar a mesma senha para tudo parece ser uma boa idéia. E de preferencia uma senha facilmente lembrável, como "senha", "123456", "qwerty" ou "pussy" (sim, acredite, a 5ª senha mais usada de todos os tempos). Obviamente, isso não é uma boa idéia.

Para resolver este problema, já fazia algum tempo que eu usava uma solução caseira. Eu tinha criado um arquivo em html com todas as minhas senhas, criptografadas por uma máquina enigma adaptada do código sugerido no artigo Máquina Enigma e encriptação em XOR. Isso já afastaria 99,9% do problema, já que os dados estariam seguros contra um eventual bisbilhoteiro. Salvo se este bisbilhoteiro entendesse um pouquinho de criptoanalise, já que a quebra deste tipo de criptografia é muito conhecida, podendo ser feita em questão de pouco tempo.

Para guardar bem minhas senhas e outros arquivos que devam ficar muuuuito bem guardados e em segredo, procurei uma solução mais robusta, e encontrei o GnuPG. O GPG é uma implementação completa e livre do OpenPGP, usado para assinar e criptografar dados, através de um par de chaves assimétricas, uma publica, outra privada. Resumidamente, num algorítimo de criptografia assimétrica, os dados que forem cifrados com a chave publica só podem ser decifrados com a utilização da chave privada, e vice-versa. Possui algumas interfaces gráficas, como o Seahorse, disponível nos pacotes do Ubuntu, mas preferi utilizar a consola mesmo.

Depois de criar as chaves (sugiro a leitura deste artigo), a operação se resume a dois comandos:

Cifrar o arquivo a ser guardado:
$ gpg --encrypt --armor texto.txt
Uso a opção --armor para criar um arquivo em ASCII. No caso, gerou o arquivo criptografado texto.txt.asc. Por padrão, seria criado um arquivo binário, o que geraria, neste caso, o arquivo texto.txt.gpg.

Decifrar o arquivo:
$ gpg --decrypt texto.txt.asc
Neste caso, como eu não informei o arquivo de saída (opção --output), o arquivo mostrado é visualizado no próprio terminal.

F.M.