Linux 内核签名验证

@2013-11-21 新版功能: 创建

一般校验文件的完整性是通过比较 MD5 或 SHA 系列的值,但这种方式存在 MD5 值也被 伪造的情况(如网站漏洞等)。因此,对比较重要或敏感的文件,往往需要通过签名来 验证文件确实没有被伪造。关于签名的原理可以参考密码学相关的书籍或文档。

本文简介如何验证从 kernel.org 下载的内核的完整性。 命令如下:

# xz -cd linux-3.10.tar.xz |gpg --verify linux-3.10.tar.sign -
gpg: Signature made Mon 01 Jul 2013 06:47:38 AM CST using RSA key ID 00411886
gpg: Can't check signature: public key not found

内核的完整性是通过 gpg 来验证的,上面的例子中验证 结果是失败,原因是找不到签名私钥对应的公钥,因此需要先导入该公钥:

# gpg --recv-keys 00411886
gpg: requesting key 00411886 from hkp server keys.gnupg.net
gpg: key 00411886: public key "Linus Torvalds <torvalds@linux-foundation.org>" imported
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

从导入过程可以看到该公钥对应的签发人为 Linus。

再次执行验证:

# xz -cd linux-3.10.tar.xz |gpg --verify linux-3.10.tar.sign -
gpg: Signature made Mon 01 Jul 2013 06:47:38 AM CST using RSA key ID 00411886
gpg: Good signature from "Linus Torvalds <torvalds@linux-foundation.org>"
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: ABAF 11C6 5A29 70B1 30AB  E3C4 79BE 3E43 0041 1886

只要输出结果没有 "BAD Signature" 就基本上可以确认文件没有被篡改。

上面的警告信息暂时可以忽略,如何消除该警告留在 GPG 的文档里再详细说明。 更多信息请参考 Linux kernel releases PGP signatures