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
Nenhum comentário