Linux kernel releases PGP signatures

All kernel releases are cryptographically signed using OpenPGP-compliant signatures. Everyone is strongly encouraged to verify the integrity of downloaded kernel releases by verifying the corresponding signatures.

Linux kernel releases and all other files distributed via mirrors are no longer signed by one centrally issued key. You will need to rely on the PGP Web of Trust in order to verify the authenticity of downloaded archives.

Basic concepts

Every kernel release comes with a cryptographic signature from the person making the release. This cryptographic signature allows anyone to verify whether the files have been modified or otherwise tampered with since the developer created and signed them. The signing and verification process uses public-key cryptography and it is next to impossible to forge a PGP signature without first gaining access to the developer's private key. If this does happen, the developers will revoke the compromised key and will re-sign all their previously signed releases with the new key.

To learn more about the way PGP works, please consult Wikipedia. web of trust

In order for this section to make sense, you should first familiarize yourself with the way PGP Web of Trust works. You can start by reading the Wikipedia article on the subject.

In a few words, PGP keys used by members of are cross-signed by other members of (and, frequently, by many other people). If you wanted to verify the validity of any key belonging to a member of, you could review the list of signatures on their public key and then make a decision whether you trust that key or not. This article from the GnuPG manual is a good first step towards understanding how you can use PGP trust relationships to validate keys: Using trust to validate keys.

In order to become part of the web of trust, you should locate members in your geographical area, then verify and cross-sign your keys. To locate members of in your area, you can use the Google Map created for this purpose, or you may attend a Linux kernel development conference and join a key signing event.

Once you have verified and signed a few keys, you can use the trust relationship established in the process to verify other keys used in the web of trust.

Using GnuPG to verify kernel signatures

All software released via has corresponding PGP signatures. It should not be possible to upload any files to the mirrors without providing a trusted PGP signature to go along with them.

To better illustrate the verification process, let's use Linux 3.1.5 release as a walk-through example. First, use "wget" or "curl -O" to download the release and the corresponding signature:

$ wget
$ wget

You will notice that the signature is made against the uncompressed version of the archive. This is done so there is only one signature required for .gz, .bz2 and .xz compressed versions of the release. Start by uncompressing the archive, using unxz in our case:

$ unxz linux-3.1.5.tar.xz

Now verify the .tar archive against the signature:

$ gpg --verify linux-3.1.5.tar.sign

You can combine these steps into a one-liner:

$ xz -cd linux-3.1.5.tar.xz | gpg --verify linux-3.1.5.tar.sign -

The likely output will be:

gpg: Signature made Fri 09 Dec 2011 12:16:46 PM EST using RSA key ID 6092693E
gpg: Can't check signature: public key not found

You will need to first download the public key from the PGP keyserver in order to verify the signature. Look at the first line of the output and note the "key ID" listed, which in our example is 6092693E. Now download this key from the key servers:

$ gpg --keyserver hkp:// --recv-keys 6092693E
gpg: requesting key 6092693E from hkp server
gpg: key 6092693E: public key "Greg Kroah-Hartman
     (Linux kernel stable release signing key) <>" imported
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   3  signed:   1  trust: 0-, 0q, 0n, 0m, 0f, 3u
gpg: depth: 1  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 1f, 0u
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

Let's rerun "gpg --verify":

$ gpg --verify linux-3.1.5.tar.sign
gpg: Signature made Fri 09 Dec 2011 12:16:46 PM EST using RSA key ID 6092693E
gpg: Good signature from "Greg Kroah-Hartman
     (Linux kernel stable release signing key) <>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 647F 2865 4894 E3BD 4571  99BE 38DB BDC8 6092 693E

Notice the WARNING: This key is not certified with a trusted signature! You will now need to verify that the key used to sign the archive really does belong to the owner (in our example, Greg Kroah-Hartman). There are several ways you can do this:

  1. Use the web of trust. This will require that you first locate the members of in your area and sign their keys. Short of meeting the actual owner of the PGP key in real life, this is your best option to verify the validity of a PGP key signature.
  2. Review the list of signatures on the developer's key by using "gpg --list-sigs". Email as many people who have signed the key as possible, preferably at different organizations (or at least different domains). Ask them to confirm that they have signed the key in question. You should attach at best marginal trust to the responses you receive in this manner (if you receive any).

If you get "BAD signature"

If at any time you see "BAD signature" output from "gpg --verify", please first check the following first:

  1. Make sure that you are verifying the signature against the .tar version of the archive, not the compressed (.tar.xz) version.
  2. Make sure the the downloaded file is correct and not truncated or otherwise corrupted.

If you repeatedly get the same "BAD signature" output, email immediately, so we can investigate the problem. checksum autosigner and sha256sums.asc

We have a dedicated off-the-network system that connects directly to our central attached storage and calculates checksums for all uploaded software releases. The generated sha256sums.asc file is then signed with a PGP key generated for this purpose and that doesn't exist outside of that system.

These checksums are NOT intended to replace the web of trust. It is merely a way for someone to quickly verify whether contents on one of the many mirrors match the contents on the master mirror. While you may use them to quickly verify whether what you have downloaded matches what we have on our central storage system, you should still use the GPG web of trust to verify whether the release tarball actually matches what the kernel developer published.

Kernel releases prior to September, 2011

Prior to September, 2011 all kernel releases were signed automatically by the same PGP key:

pub   1024D/517D0F0E 2000-10-10 [revoked: 2011-12-11]
      Key fingerprint = C75D C40A 11D7 AF88 9981  ED5B C86B A06A 517D 0F0E
uid                  Linux Kernel Archives Verification Key <>

Due to the systems compromise, this key has been retired and revoked. It will no longer be used to sign future releases and you should NOT use this key to verify the integrity of any archives. It is almost certain that this key has fallen into malicious hands.

All kernel releases that were previously signed with this key were cross-checked and signed with another key, created specifically for this purpose:

pub   3072R/C4790F9D 2013-08-08
      Key fingerprint = BFA7 DD3E 0D42 1C9D B6AB  6527 0D3B 3537 C479 0F9D
uid   Linux Kernel Archives Verification Key
      (One-off resigning of old releases) <>

This key has been destroyed and will not be used to sign any new releases.

Revocation certificates

The following revocation certificates have been issued for keys used in the past to sign software releases:

Key ID 0x517D0F0E

Key fingerprint:

pub   1024D/517D0F0E 2000-10-10 [revoked: 2011-12-11]
      Key fingerprint = C75D C40A 11D7 AF88 9981  ED5B C86B A06A 517D 0F0E
uid                  Linux Kernel Archives Verification Key <>

Revocation certificate:

Version: GnuPG v1.4.11 (GNU/Linux)
Comment: A revocation certificate should follow


Key ID 0x1E1A8782

Key fingerprint:

pub   1024D/1E1A8782 1999-10-05 [revoked: 2000-10-10]
      Key fingerprint = 9DB4 C3A4 EF2A 3111 9072  82F3 F2A5 75DC 1E1A 8782
uid                  Linux Kernel Archives Verification Key <>

Revocation certificate:

Version: GnuPG v1.0.0 (GNU/Linux)
Comment: For info see
Comment: A revocation certificate should follow


Key ID 0x514C5279

Key fingerprint:

pub   1024R/514C5279 1998-12-16 [revoked: 1999-10-05]
      Key fingerprint = 59 B1 5F 6F E3 13 4C 8B  33 E5 14 35 21 F1 D1 03
uid                  Linux Kernel Archives <>

Revocation certificate:

Version: 2.6.3a


Other resources