Contents

GnuPG is a hybrid-encryption software program because it uses a combination of conventional symmetric-key cryptography for speed, and public-key cryptography for ease of secure key exchange, typically by using the recipient's public key to encrypt a session key which is used only once. This mode of operation is part of the OpenPGP standard and has been part of PGP from its first version.

The GnuPG 1.x series uses an integrated cryptographic library, while the GnuPG 2.x series replaces this with Libgcrypt.

GnuPG encrypts messages using asymmetric key pairs individually generated by GnuPG users. The resulting public keys may be exchanged with other users in a variety of ways, such as Internet key servers. They must always be exchanged carefully to prevent identity spoofing by corrupting public key ↔ "owner" identity correspondences. It is also possible to add a cryptographic digital signature to a message, so the message integrity and sender can be verified, if a particular correspondence relied upon has not been corrupted.

GnuPG also supports symmetric encryption algorithms. By default, GnuPG uses the AES symmetrical algorithm since version 2.1[6], CAST5 was used in earlier versions. GnuPG does not use patented or otherwise restricted software or algorithms. Instead, GnuPG uses a variety of other, non-patented algorithms.[7]

For a long time it did not support the IDEA encryption algorithm used in PGP. It was in fact possible to use IDEA in GnuPG by downloading a plugin for it, however this might require a license for some uses in countries in which IDEA was patented. Starting with versions 1.4.13 and 2.0.20, GnuPG supports IDEA because the last patent of IDEA expired in 2012. Support of IDEA is intended "to get rid of all the questions from folks either trying to decrypt old data or migrating keys from PGP to GnuPG",[8] and hence is not recommended for regular use.

As of versions 2.0.26 and 1.4.18, GnuPG supports the following algorithms:

More recent releases of GnuPG 2.x ("modern" and the now deprecated "stable" series) expose most cryptographic functions and algorithms Libgcrypt (its cryptography library) provides, including support for elliptic curve cryptography (ECDSA, ECDH and EdDSA)[9] in the "modern" series (i.e. since GnuPG 2.1).

GnuPG is a system compliant to the OpenPGP standard, thus the history of OpenPGP is of importance; it was designed to interoperate with PGP, an email encryption program initially designed and developed by Phil Zimmermann.[12][13]

On February 7, 2014, a GnuPG crowdfunding effort closed, raising €36,732 for a new Web site and infrastructure improvements.[14]

As of January 2018[update], there are two actively maintained branches of GnuPG:

"Modern" (2.2), with numerous new features, such as elliptic curve cryptography, compared to the former "stable" (2.0) branch, which it replaced with the release of GnuPG 2.2.0 on August 28, 2017.[15] It was initially released on November 6, 2014.[9]

"Classic" (1.4), the older, but still maintained standalone version, most suitable for older or embedded platforms. Initially released on December 16, 2004.[16]

Different GnuPG 2.x versions (e.g. from the 2.2 and 2.0 branches) cannot be installed at the same time. However, it is possible to install a "classic" GnuPG version (i.e. from the 1.4 branch) along with any GnuPG 2.x version.[9]

Before the release of GnuPG 2.2 ("modern"), the now deprecated "stable" branch (2.0) was recommended for general use, initially released on November 13, 2006.[17] This branch reached its end-of-life on December 31, 2017;[18] Its last version is 2.0.31, released on December 29, 2017.[19]

Before the release of GnuPG 2.0, all stable releases originated from a single branch; i.e., before November 13, 2006 no multiple release branches were maintained in parallel. These former, sequentially succeeding (up to 1.4) release branches were:

1.2 branch, initially released on September 22, 2002,[20] with 1.2.6 as the last version, released on October 26, 2004.[21]

1.0 branch, initially released on September 7, 1999,[1] with 1.0.7 as the last version, released on April 30, 2002.[22]

(Note that branches with an odd minor release number (e.g. 2.1, 1.9, 1.3) are development branches leading to a stable release branch with a "+ 0.1" higher version number (e.g. 2.2, 2.0, 1.4), hence branches 2.2 and 2.1 both belong to the "modern" series, 2.0 and 1.9 both to the "stable" series, while the branches 1.4 and 1.3 both belong to the "classic" series.)

The GPG Suite project provides a number of Aqua front-ends for OS integration of encryption and key management as well as GnuPG installations via Installerpackages[23] for macOS. Furthermore, the GPG Suite Installer[24] installs all related OpenPGP applications (GPG Keychain Access), plugins (GPGMail) and dependencies (MacGPG) to use GnuPG based encryption.

In 2005, g10 Code GmbH and Intevation GmbH released Gpg4win, a software suite that includes GnuPG for Windows, GNU Privacy Assistant, and GnuPG plug-ins for Windows Explorer and Outlook. These tools are wrapped in a standard Windows installer, making it easier for GnuPG to be installed and used on Windows systems.

As a command-line-based system, GnuPG 1.x is not written as an API that may be incorporated into other software. To overcome this, GPGME (abbreviated from GnuPG Made Easy) was created as an API wrapper around GnuPG that parses the output of GnuPG and provides a stable and maintainable API between the components.[26] This currently requires an out-of-process call to the GnuPG executable for many GPGME API calls; as a result, possible security problems in an application do not propagate to the actual crypto code[citation needed] due to the process barrier. Various graphical front-ends based on GPGME have been created.

Since GnuPG 2.0, many of GnuPG's functions are available directly as C APIs in Libgcrypt.[27]

The OpenPGP standard specifies several methods of digitally signing messages. In 2003, due to an error in a change to GnuPG intended to make one of those methods more efficient, a security vulnerability was introduced.[28] It affected only one method of digitally signing messages, only for some releases of GnuPG (1.0.2 through 1.2.3), and there were fewer than 1000 such keys listed on the key servers.[29] Most people did not use this method, and were in any case discouraged from doing so, so the damage caused (if any, since none has been publicly reported) would appear to have been minimal. Support for this method has been removed from GnuPG versions released after this discovery (1.2.4 and later).

Two further vulnerabilities were discovered in early 2006; the first being that scripted uses of GnuPG for signature verification may result in false positives,[30] the second that non-MIME messages were vulnerable to the injection of data which while not covered by the digital signature, would be reported as being part of the signed message.[31] In both cases updated versions of GnuPG were made available at the time of the announcement.

In June 2017, a vulnerability (CVE-2017-7526) was discovered within Libgcrypt by Bernstein, Breitner and others: a library used by GnuPG, which enabled a full key recovery for RSA-1024 and about more than 1/8th of RSA-2048 keys. This side-channel attack exploits the fact that Libgcrypt used a sliding windows method for exponentiation which leads to the leakage of exponent bits and to full key recovery.[32][33] Again, an updated version of GnuPG was made available at the time of the announcement.

In October 2017, the ROCA vulnerability was announced that affects RSA keys generated by YubiKey 4 tokens, which often are used with PGP/GPG. Many published PGP keys were found to be susceptible.[34]

Around June 2018, the SigSpoof attacks were announced. These allowed an attacker to convincingly spoof digital signatures.[35][36]

In May 2014, The Washington Post reported on a 12-minute video guide "GPG for Journalists" posted to Vimeo in January 2013[37] by a user named anon108. The Post identified anon108 as fugitive NSA whistleblower Edward Snowden, who it said made the tutorial — "narrated by a digitally disguised voice whose speech patterns sound similar to those of Snowden" — to teach journalist Glenn Greenwald email encryption. Greenwald said that he could not confirm the authorship of the video.[38]