sábado, 28 de fevereiro de 2009

Protegendo senhas com GPG

Hoje em dia é muito comum alguns administradores de rede possuirem vários servidores

e possuir uma senha (forte) para cada um destes servidores, nas palestras que tenho ministrado

ja fui questinado algumas vezes de como guardar dezenas de senhas diferentes com segurança?

Bem na minha opinião a melhor forma é guarda-las no cérebro mesmo..rsrs mas como nem

sempre possuimos capacidade para armazenar tais informações nos meros 10% que utilizamod do nosso

cérebro eu decidi pesquisar sobre uma solução para tal problema e achei diversos programas que propoem

uma solução simples para nosso problema, eles armazenam as senhas em arquivos criptografados, ou seja

ao invés de termos que decorar 15 senhas com 20 caracteres cada uma precisamos lembras de apenas uma única senha.

Dentre os programas que eu achei mais interesantes estão o jpws[1], o Password Gorilla[2], o Password Dragon[3],

e o KeePassX[4], a proposta de todos eles é bem interessante gerenciar o armazenamento de senhas de forma segura

porém depois de ler sobre os programas eu pensei, "Perae por quê diabos estou querendo reinventar a roda?"

a solução sempre esteve mais perto do que imaginei, basta utilizar o GnuPG[5].GnuPG (GNU Privacy Guard)

é um projeto openource que implementa as definições da RFC 4880[6]. O GnuPG no permite criptografar e

assinar arquivos, emails, etc. A utilização do GnuPG (ou gpg na linha de comando) é bem simples como veremos

no Exemplo a seguir para criarmos um arquivo com as nossas senhas.

Primeiro verifique se vc possui o pacote gnupg instalado:


---

# dpkg -s gnupg (para sistemas debian-like)

# rpm -qv gnupg (para sistemas red-hat like)

---


Possuindo o gnupg instalado vamos criar uma chave de criptografia para o nosso usuário.

---

# gpg --gen-key (Comando para gerar uma nova assinatura)

gpg (GnuPG) 1.4.6; Copyright (C) 2006 Free Software Foundation, Inc.

This program comes with ABSOLUTELY NO WARRANTY.

This is free software, and you are welcome to redistribute it

under certain conditions. See the file COPYING for details.

Por favor selecione o tipo de chave desejado:

(1) DSA e Elgamal (padrão)

(2) DSA (apenas assinatura)

(5) RSA (apenas assinar)

Sua opção? 1

---

Escolheremos a opção 1 (padrão)

Então seremos questionados sobre o tamanho da chave que pode ter entre 1024 e 4096 bits,

neste ponto quanto maior a chave mais segura ela será, no exemplo eu escolhi uma chave com

2048 bits.

---

par de chaves DSA vai ter 1024 bits.

ELG-E chaves podem ter o seu comprimento entre 1024 e 4096 bits.

Que tamanho de chave você quer? (2048) 2048

---

Após definir o tamanho da chave seremos questionados sobre o tempo de validade

da chave, podemos difinir um temo X para que a chave expire porem para o nosso

caso como não vamos divulga-la e a utilizaremos somente para criptografar nosso arquivo de

senha podemos escolhes a opção "0 = chave não expira"

---

Por favor especifique por quanto tempo a chave deve ser válida.

0 = chave não expira

= chave expira em n dias

w = chave expira em n semanas

m = chave expira em n meses

y = chave expira em n anos

A chave é valida por? (0) 0

---

Agora vamos definir um identificador do usuário para o qual estamos criando

a chave. No exemplo vamos utilizar o Zé da Silva.

---

Você precisa de um identificador de usuário para identificar sua chave; o

programa constrói o identificador a partir do Nome Completo, Comentário e

Endereço Eletrônico desta forma:

"Heinrich Heine (Der Dichter) "

Nome completo: Ze da Silva

Endereço de correio eletrônico: [email protected]

Comentário: Chave do Ze da Silva

Você selecionou este identificador de usuário:

"Ze da Silva (Chave do Ze da Silva) "

Muda (N)ome, (C)omentário, (E)ndereço ou (O)k/(S)air? O

---

Agora vamos definir uma senha para esta chave, esta é a senha que nos

NÃO podemos esquecer pois ele será utilizada para criptografar o nosso

arquivo de texto com as senhas.

---

Você precisa de uma frase secreta para proteger sua chave.

Digite a frase secreta:

Digite novamente a frase secreta:

+++++++++++++++...+++++.+++++++++++++++++++++++++.+++++++++++++++....

+++++.+++++++++++++++++++++++++++++++++++++++++++++.

.++++++++++.+++++++++++++++....++++++++++>..+++++..+++++>+++++>.+++++..>+++++..+++++^^^

gpg: chave 62B6EE12 marcada como plenamente confiável

chaves pública e privada criadas e assinadas.

gpg: checando o trustdb

gpg: 3 parcial(is) necessária(s), 1 completa(s) necessária(s), modelo de confiança PGP

gpg: profundidade: 0 válidas: 2 assinadas: 0 confiança: 0-, 0q, 0n, 0m, 0f, 2u

pub 1024D/62B6EE12 2008-11-03

Impressão digital da chave: 6686 B77A 0DEB 5FBF 6A29 33C6 74F7 8A32 62B6 EE12

uid Ze da Silva (Chave do Ze da Silva)

sub 2048g/EB413A88 2008-11-03

---


Pronto ja temos uma chave para o Ze da Silva

Para verificar os dados da chave criada basta utilizar o

comando "gpg --list-key"

---

# gpg --list-key

/root/.gnupg/pubring.gpg

------------------------

pub 1024D/62B6EE12 2008-11-03

uid Ze da Silva (Chave do Ze da Silva)

sub 2048g/EB413A88 2008-11-03

---

Agora vamos ao que interessa, vamos criar um arquivo com as nossas senhas.

---

#cat senha.txt

Senha de root

root=22#$54543%4FDDwkdk439

Senha do gmail

[email protected] = Z20r$55ec$

Senha do msn

ze_silva@hotmail = Z3$1l\/@

---

Agora que ja temos o arquivo com as senhas vamos criptografa-lo com

a chave que criamos. No comando abaixo a opção "-r" indica o ID de usuário

para o qual estamos criptografando este arquivo e a opção "-e" indica

que queremos criptografar ao dados do arquivo senha.txt

---

gpg -r Ze -e senha.txt

---

Após executar o comando acima vc percebera que foi criado um arquivo chamado

senha.txt.gpg, este é o arquivo criptografado, com isso ja podemos apagar o arquivo

ariginal, (rm -f senha.txt) e ficarmos somente com o arquivo criptografado.

Agora para visualizarmos as senhas dentro do arquivo criptografado basta executar o seguinte comando

---

gpg -d senha.txt.gpg

Você precisa de uma frase secreta para destravar a chave secreta do usuário: "Ze da Silva (Chave do Ze da Silva) "

2048-bit ELG-E chave, ID EB413A88, criada 2008-11-03 (ID principal da chave 62B6EE12)

Digite a frase secreta:

----

Após digitar a frase secreta corretamente o conteudo do arquivo será exibido.

---

gpg: criptografado com 2048-bit ELG-E chave, ID EB413A88, criado 2008-11-03

"Ze da Silva (Chave do Ze da Silva) "

Senha de root

root=22#$54543%4FDDwkdk439

Senha do gmail

[email protected] = Z20r$55ec$

Senha do msn

ze_silva@hotmail = Z3$1l\/@

---

Outra opção legal é exportar a chave pública e enviar para outra pessoa,

desta forma a pessoa que receber esta chave pública também podera criptografar

arquivos que só vc podera descriptografar.

Exportar chave publica:

---

#gpg -a --export -r Ze > chave_publica-Ze.asc

---

Agora é só enviar o arquivo "chave_publica-Ze.asc"

para alguem e pedir para ele importa-la com o comando:

"gpg --import"

---

$ gpg --import /root/chave_publica-Ze.asc

gpg: chave 62B6EE12: chave pública "Ze da Silva (Chave do Ze da Silva) " importada

gpg: Número total processado: 1

gpg: importados: 1

---


Bem por enquanto é só, agora podemos ocupar a mente com outras coisas que não sejam as senhas

Espero que seja util para alguem...

Links

[1] http://jpws.sourceforge.net/

[2] http://www.fpx.de/fp/Software/Gorilla/

[3] http://www.passworddragon.com/

[4] http://www.keepassx.org/

[5] http://www.gnupg.org/

[6]http://www.ietf.org/rfc/rfc4880.txt

Se quiser enviar críticas, elogios, sugestões ou até mesmo

Me chamar pra tomar uma Cerveja basta enviar um email para.

[email protected]

By CleBeer |_b