GPG o GNU Privacy Guard es una herramienta para cifrado y firmas digitales, que viene a ser un reemplazo del PGP (Pretty Good Privacy) pero con la principal diferencia que es software libre licenciado bajo la GPL. GPG utiliza el estándar del IETF denominado OpenPGP.

GPG cifra los mensajes usando pares de claves individuales asimétricas generadas por los usuarios. Las claves públicas pueden ser compartidas con otros usuarios de muchas maneras, un ejemplo de ello es depositándolas en los servidores de claves. Siempre deben ser compartidas cuidadosamente para prevenir falsas identidades por la corrupción de las claves públicas. También es posible añadir una firma digital criptográfica a un mensaje, de esta manera la totalidad del mensaje y el remitente pueden ser verificados en caso de que se desconfíe de una correspondencia en particular.
GPG no usa algoritmos de software que están restringidos por patentes, entre estos se encuentra el algoritmo de cifrado IDEA que está presente en PGP casi desde sus inicios. En su lugar usa una serie de algoritmos no patentados como ElGamal, CAST5, Triple DES (3DES), AES y Blowfish. También es posible usar IDEA en GPG descargando un plugin extra, sin embargo este puede requerir una licencia para usuarios de algunos países en donde esté patentada IDEA.
GPG es un software de cifrado híbrido que usa una combinación convencional de criptografía de claves simétricas para la rapidez y criptografía de claves públicas para el fácil compartimiento de claves seguras, típicamente usando recipientes de claves públicas para cifrar una sesión de clave que es usada una vez. Este modo de operación es parte del estándar OpenPGP y ha sido parte del PGP desde su primera versión.

Generación de claves:

root@vserver1:/home/pablo# gpg ­­gen­key

root@vserver1:/home/pablo# gpg ­­list­keys 
/root/.gnupg/pubring.gpg
pub   1024D/5EBA0715 2009­08­11 

uid                  userGnuPg (Usuario encriptor con gnuPg) sub   4096g/84D2F2AA 2009­08­11
root@vserver1:/home/pablo# gpg ­­list­secret­keys 

/root/.gnupg/secring.gpg
sec   1024D/5EBA0715 2009­08­11
uid                  userGnuPg (Usuario encriptor con gnuPg) ssb   4096g/84D2F2AA 2009­08­11
­­­­­­­­­­­­­­­­­­­­­­­­ ­­­­­­­­­­­­­­­­­­­­­­­­

Exportación de clave privada (necesaria solo para desencriptar)

root@vserver1:/home/pablo# gpg ­­armor ­­output clavePrivada.gpg ­­export­secret­key
5EBA0715
root@vserver1:/home/pablo# cat clavePrivada.gpg
­­­­­BEGIN PGP PRIVATE KEY BLOCK­­­­­
Version: GnuPG v1.4.6 (GNU/Linux)
lQG7BEqBmb4RBADhnFGe/uhT6Nmam83IBiNGuJ3Tok2VrvsAGc5mUN+UeZxDiNZV



WoJvQtiFnVCf1QCeKHzcjYh17/xXFUC4+ypNU4bNn9M=
=cVdQ
­­­­­END PGP PRIVATE KEY BLOCK­­­­­

Exportación de clave pública e importación en server2

root@vserver1:/home/pablo# gpg ­­armor ­­output clavePublica.gpg ­­export 5EBA0715
root@vserver1:/home/pablo# scp clavePublica.gpg pablo@vserver2:/home/pablo
root@vserver1:/home/pablo# cat clavePublica.gpg
­­­­­BEGIN PGP PUBLIC KEY BLOCK­­­­­
Version: GnuPG v1.4.6 (GNU/Linux)
mQGiBEqBmb4RBADhnFGe/uhT6Nmam83IBiNGuJ3Tok2VrvsAGc5mUN+UeZxDiNZV



v7oDzlYFuELVYxG7BXBopXybAJ4/ju7RNn9cq2p1yMP+DoFkllu4vQ==
=f3oi
­­­­­END PGP PUBLIC KEY BLOCK­­­­­

root@vserver2:/home/pablo# gpg ­­import clavePublica.gpg
root@vserver2:/home/pablo# gpg ­­list­keys
/root/.gnupg/pubring.gpg

pub   1024D/5EBA0715 2009­08­11
uid                  userGnuPg (Usuario encriptor con gnuPg)sub   4096g/84D2F2AA 2009­08­11­­­­­­­­­­­­­­­­­­­­­­­­

Para el borrado de las claves privadas  y públicas se utilizan respectivamente los siguientes comandos

root@vserver1:/home/pablo# gpg ­­delete­secret­key 5EBA0715
root@vserver1:/home/pablo# gpg ­­delete­key 5EBA0715

Encripción de archivo “fileToCrypt.tar” con clave pública en server2

root@vserver2:/home/pablo# gpg ­­armor ­­recipient userGnuPg ­­encrypt
­­output fileCrypt.tar.gpg fileToCrypt.tar

Comprobación de que no se puede desencritar sin la clave privada

root@vserver2:/home/pablo# gpg ­­decrypt fileCrypt.tar.gpg
gpg: encrypted with 4096­bit ELG­E key, ID 84D2F2AA, created 2009­08­11
“userGnuPg (Usuario encriptor con gnuPg) ”
gpg: decryption failed: secret key not available

Importación de clave privada y desencripción del archivo

root@vserver2:/home/pablo# gpg ­­import clavePrivada.gpg
gpg: key 5EBA0715: secret key imported
gpg: key 5EBA0715: “userGnuPg (Usuario encriptor con gnuPg) ” not changed
gpg: Total number processed: 1
gpg:              unchanged: 1
gpg:       secret keys read: 1
gpg:   secret keys imported: 1
root@vserver2:/home/pablo# gpg ­­list­secret­keys
/root/.gnupg/secring.gpg

sec   1024D/5EBA0715 2009­08­11
uid                  userGnuPg (Usuario encriptor con gnuPg) ssb   4096g/84D2F2AA 2009­08­11
root@vserver2:/home/pablo# gpg ­­decrypt fileCrypt.tar.gpg > fileDecrypt.tar
gpg: encrypted with 4096­bit ELG­E key, ID 84D2F2AA, created 2009­08­11
“userGnuPg (Usuario encriptor con gnuPg) ”
root@vserver2:/home/pablo# md5sum fileToCrypt.tar
ddaf3a2242d02b99932d2433f947c5e4  fileToCrypt.tar
root@vserver2:/home/pablo# md5sum fileDecrypt.tar
ddaf3a2242d02b99932d2433f947c5e4  fileDecrypt.tar­­­­­­­­­­­­­­­­­­­­­­­­

Versión de GnuPg para MS Windows

Existe una versión para MS Windows llamada GnuPg4Win que se puede descargar  de http://www.gpg4win.org/ e instalar el ejecutable con los parametros por default. Con el comando gpg2.exe se pueden utilizar los mismos parametros que con el gpg de linux.