# GNU Privacy Guard

GNU Privacy Guard (GnuPG ou GPG) é um software livre alternativo ao conjunto de softwares criptográficos PGP da Symantec, e em conformidade com o RFC 4880, a especificação de rastreio de padrões IETF do OpenPGP. Versões modernas do PGP (e Filecrypt da Veridis) possuem interoperabilidade com o GnuPG e com outros sistemas compatíveis com o OpenPGP.
GnuPG é parte da Free Software Foundation e do Projeto GNU. Além disso, ele recebeu grande patrocínio do Governo Alemão.

## História

O projeto GnuPG foi iniciado em 1997 pelo alemão Werner Koch, que ainda é o principal desenvolvedor e o programa de criptografia de e-mail foi inicialmente desenvolvido por Phil Zimmermann. A versão 1.0.0 foi anunciada em 7 de setembro de 1999. O Ministério Federal Alemão de Economia e Tecnologia patrocinou a documentação e a portabilidade para o sistema Microsoft Windows em 2000. A versão 2.0 foi anunciada em 13 de novembro de 2006. O antigo ramo 1.x, cuja última versão é o 1.4.11 será continuado em paralelo com o novo GnuPG 2 pois existem mudanças significativas na arquitetura do programa.

## Visão geral

O GnuPG é um programa de software de criptografia híbrida porque usa uma combinação de criptografia de chave simétrica convencional por questões de velocidade e criptografia de chave pública para facilitar a troca segura de chaves, geralmente usando a chave pública do destinatário para criptografar uma chave de sessão que é usada apenas uma vez. Este modo de operação faz parte do padrão OpenPGP e faz parte do PGP desde sua primeira versão.
A série GnuPG 1.x usa uma biblioteca criptográfica integrada, enquanto a série GnuPG 2.x a substitui por Libgcrypt.
O GnuPG criptografa mensagens usando pares de chaves assimétricas geradas individualmente pelos usuários do GnuPG. As chaves públicas resultantes podem ser trocadas com outros usuários de diversas maneiras, como servidores de chaves da Internet. Eles devem sempre ser trocados cuidadosamente para evitar falsificação de identidade corrompendo correspondências de identidade de "proprietário" de chave pública. Também é possível adicionar uma assinatura digital criptográfica a uma mensagem, para que a integridade e o remetente da mensagem possam ser verificados, se uma correspondência específica invocada não tiver sido corrompida.
O GnuPG também suporta algoritmos de criptografia simétrica. Por padrão, o GnuPG usa o algoritmo simétrico CAST5. O GnuPG não usa software ou algoritmos patenteados ou restritos. Em vez disso, o GnuPG usa uma variedade de outros algoritmos não patenteados.

## Utilização

Apesar do programa básico do GnuPG ter uma interface de linha de comando, existem várias interfaces gráficas.
Por exemplo, GnuPG esta integrado ao Kmail, cliente de e-mail do KDE e ao Evolution, o cliente de email do GNOME. KDE e GNOME são os desktops Linux mais populares. Além da integração com os clientes de e-mail, existem as interfaces gráficas Seahorse para GNOME e KGPG para KDE.
Para Mac OS X, o projeto Mac GPG provê diversas interfaces Aqua para integração com a criptografia e gerenciamento de chaves, assim como instalações GnuPG via o instalador do Mac OS X:. Além disso o software GPGTools instala todas as aplicações OpenPGP (GPG Keychain Access), plugins (GPGMail) e dependências (MacGPG) para utilizar criptografia usando o GnuPG.
Aplicações de mensagens instantâneas como o Psi e Fire podem trocar mensagens seguras automaticamente quando o GnuPG esta instalado e configurado. Softwares Web-based, como o Horde também utiliza o GnuPG. O plugin Enigmail prove suporte GnuPG as plataformas Mozilla Thunderbird e SeaMonkey. De maneira similar, o Enigform prove suporte para que o Mozilla Firefox. FireGPG (extensão para o Mozilla Firefox) foi descontinuado em 7 de Junho de 2010.
Em 2005 o G10 Code e o Intervation anunciaram o Gpg4win, um software que inclui o GnuPG para o Windows e plugins para Windows Explorer e Outlook. Essas ferramentes estão unificadas em um instalador tornando fácil seu uso na plataforma Windows.

## Processos

GnuPg criptografa mensagens utilizando a criptografia de chaves assimétricas. O resultado é que chaves públicas podem ser trocadas com outros usuários de várias maneiras, uma delas são os servidores de chaves. As chaves devem sempre ser trocadas com cuidado para evitar o roubo de identidade. É possível também adicionar uma assinatura digital a mensagem de maneira que a integridade da mensagem e do remetente possam ser verificadas. GnuPG também suporta algoritmos de criptografia simétrica. Por padrão GnuPG usa o algoritmo simétrico CAST5.
GnuPG não utiliza algoritmos patenteados ou restritos, como por exemplo o algoritmo IDEA utilizado no PGP (Na verdade é possível utilizar o IDEA no GnuPG fazendo o download de um plugin, entretanto isso pode requerer a compra de licença em alguns países aonde o IDEA é patenteado). Ao invés disso, GnuPG usa uma variedade de outros algoritmos não patenteados, incluindo:
GnuPG é um software de criptografia hibrido que utiliza a combinação de criptografia de chaves simétricas para velocidade e criptografia de chaves publicas para a troca de mensagens seguras. Isso é conseguido utilizando a criptografia de chave pública para encriptar uma chave de sessão que é utilizada apenas uma vez. Esse modo de operação é parte do padrão OpenPGP e é parte do PGP desde sua primeira versão.

## Problemas

O padrão OpenPGP especifica diversos métodos de assinatura digital. Em 2003, ao tentar tornar um desses métodos mais eficiente, uma vulnerabilidade de segurança no GnuPG foi introduzida. Esse erro afetou apenas um método de assinatura de mensagens, e apenas algumas versões do GnuPG (1.0.2 ao 1.2.3). Como existiam menos de 1000 chaves desse tipo nos servidores e a maioria das pessoas não utilizava esse método, o dano causado por esse erro parece ter sido minimo. Suporte a esse método foi removido das versões do GnuPG após a descoberta desse erro (nas versões 1.2.4 e posteriores).
Duas outras vulnerabilidades foram descobertas em 2006. A primeira é que a utilização de scripts que utilizam o GnuPG para verificação de assinatura poderiam resultar em falsos positivos. A segunda é que mensagens non-MIME eram vulneráveis a inserção de dados não cobertas pela assinatura digital que seriam erroneamente reportadas como parte da mensagem assinada: Em ambos os casos, versões atualizadas do GnuPG foram disponibilizas.
GnuPG é um sistema baseado em linha de comando e não possui uma API que possa ser incorporado em outros softwares. GPGME é uma API wrapper que lê a saída do GnuPG. Várias interfaces gráficas foram criadas utilizando o GPGME. Como o GPGME utiliza uma interface especial do GnuPG desenvolvida para o uso automatizado, uma API estável entre os componentes é possível. Possíveis erros de segurança em uma aplicação não se propagam para o código do GnuPG devido a barreira entre os processos. Existem outros softwares que encapsulam a linha de comando em um script Perl (por exemplo: gpg-dialog).