terça-feira, 12 de julho de 2016

GNUPG :: Gerando Chaves de Criptografia Manualmente com o Linux


O GNUPG é um utilitário de criptografia simétrica e assimétrica que possui a licença GPL e funciona em multiplataforma, como Linux, Windows, MacOS e BSD que utiliza em seu escopo o padrão RSA para criptografia assimétrica, TripleDES, AES e Blowfish para criptografia simétrica.

De um modo geral, o GNUPG tem suporte para os seguintes algoritmos:

Criptografia Assimétrica:

  • RSA
  • RSA-E
  • ESA-S
  • ELG-E
  • DSA
Criptografia assimétrica:
  • IDEA
  • 3DES
  • CAST5
  • BLOWFISH
  • AES
  • AES192
  • AES256
  • TWOFISH
  • CAMElLIA128
  • CAMELLIA192
  • CAMELLIA256
Algoritmos de Dispersão e Hashing:
  • MD5
  • SHA1
  • SHA256
  • SHA384
  • SHA512
  • SHA224
  • RIPEMD160

Algoritmos de Compressão:
  • ZIP
  • ZLIB
  • BZIP

Instalando o GNUPG

Por default o GNUPG já vem instalado na maioria das distribuições. Mas caso não esteja, ele com certeza está no repositório default da sua distro. Para instalar, é bem simples:
 # sudo apt-get install gnupg  # Debian Like
 # sudo yum install gnupg  # CentOS/RHEL/Fedora
 root@webserver:/home/matheus# gpg --version  
 gpg (GnuPG) 1.4.18  
 Copyright (C) 2014 Free Software Foundation, Inc.  
 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>  
 This is free software: you are free to change and redistribute it.  
 There is NO WARRANTY, to the extent permitted by law.  
 Home: ~/.gnupg  
 Algoritmos suportados:  
 Chave pública: RSA, RSA-E, RSA-S, ELG-E, DSA  
 Cifra: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,  
     CAMELLIA128, CAMELLIA192, CAMELLIA256  
 Dispersão: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224  
 Compressão: Uncompressed, ZIP, ZLIB, BZIP2  
 root@webserver:/home/matheus#   


Gerando um par de Chaves GPG

O funcionamento do GPG e dos pares de chaves assimétricas em geral garantem a autenticidade e privacidade entre os usuários, uma vez que a chave privada gerada deve pertencer somente ao dono, e a mensagem do remetente autenticado com a chave pública confere a autenticidade entre ambas as partes, garantindo que somente o dono leia a mensagem e vice versa.

O tamanho da chave em bits impacta diretamente entre dois cenários, sendo eles o da performance e usabilidade e da segurança e privacidade, pois quanto maior o numero de bits da chave,mais segura será a mesma, porém vai exigir muito mais processamento. Claro, há casos e casos, basta adaptar para o seu tipo de situação. Mas em geral, eu não recomendaria chaves com menos de  1024 bits para gerar o par, e não recomendaria chaves muito maiores que 2048, e nem a chave de 4096 para não impactar tanto na performance.

Para gerar as chaves, o sistema usa uma série de dados aleatórios embasados na entropia do sistema. E as vezes ele irá sugerir que você faça algumas atividades aleatórias para gerar essa entropia, como atualizar o sistema, mover e deletar arquivos e etc.

Para gerar a chave, basta:
 root@webserver:/home/matheus# gpg --gen-key  
 gpg (GnuPG) 1.4.18; Copyright (C) 2014 Free Software Foundation, Inc.  
 This is free software: you are free to change and redistribute it.  
 There is NO WARRANTY, to the extent permitted by law.  
   
 gpg: directory `/root/.gnupg' created  
 gpg: criado um novo ficheiro de configuração `/root/.gnupg/gpg.conf'  
 gpg: AVISO: opções em `/root/.gnupg/gpg.conf' ainda não estão activas nesta execução  
 gpg: porta-chaves `/root/.gnupg/secring.gpg' criado  
 gpg: porta-chaves `/root/.gnupg/pubring.gpg' criado  
 Por favor selecione o tipo de chave desejado:  
   (1) RSA and RSA (default)  [RECOMENDADO ESTE]
   (2) DSA and Elgamal  
   (3) DSA (apenas assinatura)  
   (4) RSA (apenas assinatura)  
 Sua opção? 1  
 RSA keys may be between 1024 and 4096 bits long.  
 What keysize do you want? (2048)   
 O tamanho de chave pedido é 2048 bits  [AQUI USEI O DEFAULT DE 2048 bits mesmo]
 Por favor especifique por quanto tempo a chave deve ser válida.  
      0 = chave não expira  
    <n> = chave expira em n dias  
    <n>w = chave expira em n semanas  
    <n>m = chave expira em n meses  
    <n>y = chave expira em n anos  
 A chave é valida por? (0) 0  [CHAVE SEM DATA DE EXPIRAÇÃO. ADAPTE PARA O SEU CASO]
 Key does not expire at all  
 Is this correct? (y/N) y  
   
 You need a user ID to identify your key; the software constructs the user ID  
 from the Real Name, Comment and Email Address in this form:  
   "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"  
   
 Nome completo: Matheus Fidelis  
 Endereço de correio eletrônico: matheus.fidelis@protonmail.com  
 Comentário: Meu par de chaves!  
 Você selecionou este identificador de usuário:  
   "Matheus Scarpato Fidelis (Meu par de chaves!) <matheus.fidelis@protonmail.com>"  
   
 Muda (N)ome, (C)omentário, (E)ndereço ou (O)k/(S)air? o  
 Você precisa de uma frase secreta para proteger sua chave.  
   
 Precisamos gerar muitos bytes aleatórios. É uma boa idéia realizar outra  
 atividade (digitar no teclado, mover o mouse, usar os discos) durante a  
 geração dos números primos; isso dá ao gerador de números aleatórios  
 uma chance melhor de conseguir entropia suficiente.  
   
 Não há bytes aleatórios suficientes. Por favor, faça algum outro trabalho  
 para que o sistema possa coletar mais entropia!  
 (São necessários mais 108 bytes)  
     
                                    
 ....+++++  
 .+++++  
 Precisamos gerar muitos bytes aleatórios. É uma boa idéia realizar outra  
 atividade (digitar no teclado, mover o mouse, usar os discos) durante a  
 geração dos números primos; isso dá ao gerador de números aleatórios  
 uma chance melhor de conseguir entropia suficiente.  
 .......+++++  
 ...........+++++  
 gpg: /root/.gnupg/trustdb.gpg: banco de dados de confiabilidade criado  
 gpg: key 270F136D marked as ultimately trusted  
 chaves pública e privada criadas e assinadas.  
   
 gpg: a verificar a base de dados de confiança  
 gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model  
 gpg: depth: 0 valid:  1 signed:  0 trust: 0-, 0q, 0n, 0m, 0f, 1u  
 pub  2048R/270F136D 2016-07-07  
    Key fingerprint = BCB1 F20A D5D8 C721 2092 2AE4 DF15 9555 270F 136D  
 uid         Matheus Scarpato Fidelis (Meu par de chaves!) <matheus.fidelis@protonmail.com>  
 sub  2048R/CFBFC7BD 2016-07-07  
   


Exportando a Chave Pública

Podemos utilizar o próprio gpg para exportar nossa chave para um arquivo, e assim disponibilizarmos para quem desejarmos. Usemos o comando a seguir para exportar tudo para um arquivo chamado minha_chave_publica.txt. Lembrando que a chave é uma linha só bem grande. Portanto evite quebrar linhas dentro dele, pode acabar com todo o processo.
 root@webserver:/home/matheus# gpg --armor --output "minha_chave_publica.txt" --export  
 root@webserver:/home/matheus# cat minha_chave_publica.txt   
 -----BEGIN PGP PUBLIC KEY BLOCK-----  
 Version: GnuPG v1  
   
 mQENBFd+TlYBCAC9H55ugiL+SB63CZt/ege5k+IQq6+So72axRD/zSlMtQDiYNWC  
 211BT8fFC6KslA5jSBMZ2ySb07x+6s3KHYZ/zKvoWeyjqIxcVnYdMr/pznMNBVv/  
 jLuXve6m79YFX+XFt8MA1T3SXVg25N6FmHlKyVnHmXtMS42kPabn1oM1JBojJzEl  
 XjH+Gl0sN0uWbzn069l2kwrLZtuOkti9eRXHvMwBFojoaZpvAgom/QIBmDHMyOrE  
 6ovnfs4e1zp/iSfTTd170DpnJKX5Z6Fby/5r2WyYz+6LKnsRtpumvUMX55n9epL2  
 +7ID9XJAmIaqywJ9zq7a+SBS8ZwDg7lFvd6TABEBAAG0Tk1hdGhldXMgU2NhcnBh  
 dG8gRmlkZWxpcyAoTWV1IHBhciBkZSBjaGF2ZXMhKSA8bWF0aGV1cy5maWRlbGlz  
 QHByb3Rvbm1haWwuY29tPokBOAQTAQIAIgUCV35OVgIbAwYLCQgHAwIGFQgCCQoL  
 BBYCAwECHgECF4AACgkQ3xWVVScPE21RswgAs3NesGBWq8lIQLs8rYOugFxVq3pc  
 wWugEcs91e+iXxY+PdGu6x60TXzgq+y5M9r2gkLpu6g3QknZlWDIjCqB25GY8DoS  
 Lw3gMT8AjXBh/UlWwG3JEyKalfuQ0P615YAyUBjSo9+uVtEGk1q+65m1KF9YaKfr  
 BeS2Prhqq/IX7UXeCpAQo+CiBM79SNp8ayL/nzVe5QQmSFPGcOUw2exhpU+VTQWT  
 JpwqS9tWurXa6b2FQxlr0gJSmLy/u3W14bIIIp7qKFLgy2keq+Z/GLJf3U1cgjfV  
 /2kkrHD3ksfaoGkKdE9K5mGwQ31KmrD3Z9rS/KRWmp6NPOtdWZnO2JwovrkBDQRX  
 fk5WAQgA07/BEHtNV6OpmBgsw3RKXq82U28MreaRcglIXTwgQd/tMJlyPpNwrhzS  
 fEuGf8rxpBu/y6VwYelYySui0edo6V0vzEFxmydnXrD11PFfhIVHBpZlXIzPd7YZ  
 G306rT5wJhs14JOmJFUKMPNrrlp6zLZ713G3tC1+5eagIHzT6wt7WoA6HtCJG4pv  
 h2VNXtmGn8+U2FoPP+Qnijqh8X9179IupfNm0+YTt0vJbOjQzr3z1MMrfRO/xsKn  
 1ya3dLU1QrwN1rLYiB9jVnsV6rK3hhE2WYykry66lh4UsWHY1Jtbd3OigNOsWYLR  
 CAeaseMuptkpb1v/T9dssMABUczH+wARAQABiQEfBBgBAgAJBQJXfk5WAhsMAAoJ  
 EN8VlVUnDxNt348H/3FYIZm8OX3ohJ0qXEmCuLvxNWBILJTASUbzgGWv/QbJvrJm  
 lBia8OE1hvzVmgqRgDI4Pgdg62AEdBpfNPyP/pLfJnR5RPQlVxo00AN/0bY4/9C/  
 EUjPE7KDKwsKmFffJBXW3LZc/0NU3VpuVqUFSqn/mS/7Pc/rkmElKMjw/PwqsYHW  
 dUkyB4M35i//dePRnCCs5kKxaBDapebXufDzPZL5KZdH+tgIMGP5rjmPPxHzCWvj  
 oqBShQCFDWDpdjApkmMmQ/jRHz9zzZ6pQZXmLMkANO0cTrtU2X44eyf1zv1xwgXP  
 AbV3TFQEySkhuhXLnmV68lVIvYl3+xHMrMI+F8M=  
 =LFmZ  
 -----END PGP PUBLIC KEY BLOCK-----  
 root@webserver:/home/matheus#   
   

Importando a Chave Pública 

Para importar um certificado de confiança de uma máquina, você deverá possuir a chave pública da mesma. Sendo assim, logue em uma segunda máquina repita o passo de criação da chave com outro usuário alterando os dados como nome, e-mail e etc. Vo

 matheus@webserver:~$ gpg --import minha_chave_publica.txt   
 gpg: key 270F136D: public key "Matheus Fidelis (Meu par de chaves!) <matheus.fidelis@protonmail.com>" imported  
 gpg: Número total processado: 1  
 gpg:        importados: 1 (RSA: 1)  
 matheus@webserver:~$ gpg --list-keys  
 /home/matheus/.gnupg/pubring.gpg  
 --------------------------------  
 pub  2048R/F54151E9 2016-07-07  
 uid         Harmando  
 sub  2048R/D7448235 2016-07-07  

pub   2048R/270F136D 2016-07-07
uid                  Matheus Scarpato Fidelis (Meu par de chaves!) <matheus.fidelis@protonmail.com>
sub   2048R/CFBFC7BD 2016-07-07


Agora vamos editar a chave e informar o grau de confiança da mesma
 matheus@webserver:~$ gpg --edit-key "Matheus Scarpato Fidelis"  
 Command > trust





SOBRE O AUTOR

Matheus Fidelis

http://msfidelis.github.io/

Power Ranger, Piloto de Helicópteros e Astronauta da NASA. Desenvolvedor Web PHP com foco em Backend e POO, Linux SysAdmin DevOps e Entusiasta Python. Criou esse site pra contribuir com a comunidade com coisas que aprende dentro de um setor maluco de TI :)

Postar um comentário

 
Nanoshots | Open Source Security, Linux e Tutoriais © 2015 - Designed by Templateism.com