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 genkey
/root/.gnupg/pubring.gpg
pub 1024D/5EBA0715 20090811
uid userGnuPg (Usuario encriptor con gnuPg)
root@vserver1:/home/pablo# gpg listsecretkeys
sec 1024D/5EBA0715 20090811
uid userGnuPg (Usuario encriptor con gnuPg)
Exportación de clave privada (necesaria solo para desencriptar)
root@vserver1:/home/pablo# gpg armor output clavePrivada.gpg exportsecretkey
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
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 listkeys
/root/.gnupg/pubring.gpg
pub 1024D/5EBA0715 20090811
uid userGnuPg (Usuario encriptor con gnuPg)
sub 4096g/84D2F2AA 20090811
Para el borrado de las claves privadas y públicas se utilizan respectivamente los siguientes comandosroot@vserver2:/home/pablo# gpg listkeys
/root/.gnupg/pubring.gpg
pub 1024D/5EBA0715 20090811
uid userGnuPg (Usuario encriptor con gnuPg)
sub 4096g/84D2F2AA 20090811
root@vserver1:/home/pablo# gpg deletesecretkey 5EBA0715
root@vserver1:/home/pablo# gpg deletekey 5EBA0715
root@vserver1:/home/pablo# gpg deletekey 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 4096bit ELGE key, ID 84D2F2AA, created 20090811
"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)
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: secret keys read: 1
gpg: secret keys imported: 1
root@vserver2:/home/pablo# gpg listsecretkeys
/root/.gnupg/secring.gpg
sec 1024D/5EBA0715 20090811
uid userGnuPg (Usuario encriptor con gnuPg)
ssb 4096g/84D2F2AA 20090811
root@vserver2:/home/pablo# gpg decrypt fileCrypt.tar.gpg > fileDecrypt.tar
gpg: encrypted with 4096bit ELGE key, ID 84D2F2AA, created 20090811
"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.