"O GnuPG é uma implementação completa e gratuita do padrão OpenPGP, conforme definido pela RFC4880 (também conhecido como PGP). O GnuPG permite criptografar e assinar dados e comunicações; ele oferece um sistema versátil de gerenciamento de chaves, com módulos de acesso a vários diretórios de chaves públicas [...]"
GPG (GnuPG, de código aberto) é diferente de PGP (proprietário). Ele usa principalmente chaves privadas e públicas para criptografar, descriptografar, assinar e verificar dados (também é possível usar criptografia simétrica, mas não é tão interessante).
gpg --full-gen-key
# For older versions (including Windows and MacOS) you can use --gen-key if the parameter above failsListe as chaves GPG geradas e salvas no seu perfil:
gpg --list-secret-keys --keyid-format LONG <EMAIL USED TO GENERATE THE KEY>
# The output will look like this (this example shows two keys):
#
# gpg: checking the trustdb
# gpg: marginals needed: 3 completes needed: 1 trust model: pgp
# gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u
# gpg: next trustdb check due at 2024-11-15
# /home/user/.gnupg/pubring.kbx
# ------------------------------
# sec rsa3072/CXXXXXXXXC540 2022-01-01 [SC] [expires: 2024-01-01]
# 4285ECCCCCCCCCCCCCCCCCB4C48AFCXXXXXXXXC540
# uid [ultimate] Your name <email@example.com>
# ssb rsa3072/F3DC33A661677229 2022-01-01 [E] [expires: 2024-01-01]
#
# sec rsa4096/84YYYYYYYYYYE 2022-01-01 [SC]
# 78C4E82E42C7AA5535B1233320ED984YYYYYYYYYYE
# uid [ultimate] Your name <email@example.com>
# ssb rsa4096/A7CCCCCCCCCC5214 2022-01-01 [E]O ID usado nos próximos comandos é a sequência depois da / (por exemplo, CXXXXXXXXC540).
Provavelmente você precisará enviar sua chave pública a alguém ou armazená-la em algum serviço para os usos descritos adiante. Para exportá-la como texto, use o parâmetro --export:
gpg --armor --export <ID>
# The output looks like this (always copy the key including the BEGIN and END lines):
#
# -----BEGIN PGP PUBLIC KEY BLOCK-----
#
# mQINBGN0XVIBEACgiLew1ciXwpKyLZqVMGJ/c70y7RyyrloQswm9rPdrJTIprDpk
# [a bunch of characters here]
# =R8RB
# -----END PGP PUBLIC KEY BLOCK-----A chave pública pode ser compartilhada com qualquer pessoa. A chave privada nunca deve sair do seu computador; mantenha-a em segredo.
Também é possível exportá-la para um arquivo .gpg, evitando copiar e colar:
gpg --armor --output <FILENAME>.gpg --export <ID>Você pode assinar apenas alguns commits com a opção -S:
git commit -S -m "Your regular commit message"Ou assinar todos os commits usando a configuração global:
git config --global commit.gpgsign true
# Now all following commits will include the signatureSe houver problemas com a assinatura, tente usar
gpg2. Para definir o programa em todos os repositórios:git config --global gpg.program gpg2.
O GitLab exibe um selo de verificação ao lado dos commits assinados. Consulte a documentação do GitLab.
Você pode encontrar a chave pública GPG de um usuário em https://gitlab.com/<username>.gpg.
O GitHub exibe um selo de verificação ao lado dos commits assinados. Consulte a documentação do GitHub.
Para criptografar um arquivo para alguém ou verificar a assinatura de um arquivo, solicite a chave pública da pessoa e importe-a:
# Import the received key from a file, such as the generated `.gpg` file
gpg --import recipient-pubkey.gpgA criptografia usa a chave pública do destinatário. Somente ele poderá descriptografar o arquivo com sua chave privada. É possível criptografar um arquivo por vez, seja um arquivo de texto ou outro formato, como .tar.gz.
Importe a chave pública do destinatário antes de executar o comando.
gpg --output encrypted-file.txt.gpg --encrypt --recipient recipient@example.com file.txtPara descriptografar, o destinatário deve executar:
gpg --output file.txt --decrypt encrypted-file.txt.gpgO comando usará a chave privada para descriptografar o arquivo.
Gerar um arquivo assinado é parecido com criptografá-lo, mas usa o comando --sign. O GPG usa sua chave privada para assinar o arquivo.
gpg --sign somefile.txtSerá gerado um arquivo com extensão .gpg, contendo o arquivo e a assinatura.
Para verificar a integridade, use --verify. Esse comando usa sua chave pública:
gpg --verify somefile.txt.sigTambém é possível ver o conteúdo do arquivo com --decrypt:
gpg --output file.txt --decrypt signed-file.txt.gpgA descriptografia usa a chave pública do remetente; portanto, o conteúdo não fica oculto de quem tiver essa chave. Chaves públicas devem ser compartilhadas.
Também é possível assinar ou criptografar e-mails com GPG. O Thunderbird é uma opção adequada. Consulte a documentação do Thunderbird para configurar o cliente.
A maioria dos webmails (inclusive o Gmail) não oferece um cliente compatível com GPG. Sua chave privada nunca deve sair de um local seguro (seu computador). Para provedores compatíveis, você pode usar o Thunderbird para enviar e receber e-mails com criptografia ponta a ponta por IMAP/SMTP/POP.
Se você tiver várias chaves, pode definir a chave padrão criando ou atualizando ~/.gnupg/gpg.conf:
# First list all keys
gpg --list-signatures
# Create file using vim/nano/anyother editor
# ~/.gnupg/gpg.conf
# and include the contents
# default-key YOURIDHERESe não definir uma chave padrão, normalmente a primeira gerada será usada.