使用gpg进展安全签名来验证下载的文件是否完整

使用gpg进行安全签名来验证下载的文件是否完整

/*********************************************************************
 * Author  : Samson
 * Date    : 04/04/2014
 * Test platform:
 *              Linux ubuntu 3.2.0-58-generic-pae
 *              GNU bash, version 4.2.39
 * *******************************************************************/


数字签名是什么?

数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
数字签名是非对称密钥加密技术与数字摘要技术的应用。

主要功能是什么?

保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。
数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
数字签名是个加密的过程,数字签名验证是个解密的过程。

下面将用一个例子来说明如何来进行签名的验证,以确保下载的文件是没有经过修改的,防止被非作者进行修改后重新打的包(这里面的文章可大了,你懂的:_()

如何使用gpg进行安全签名来验证下载的文件是否完整,以mediawiki为例:

首先,到mediawiki official web download:

mediawiki-1.22.5.tar.gz 

再得到上版本的签名文件,再得到pubkey,网页上的获取点如下图:

使用gpg进展安全签名来验证下载的文件是否完整

得到MediaWiki 1.22.5 GPG安全签名文件:mediawiki-1.22.5.tar.gz.sig

能过上图的 MediaWiki的GPG的公钥 得到pubkey文件,并保存到文件mediawiki_pubkey.txt中;

导入公钥到当前系统中:

 fuckids@debian-IDS:~/wiki$ gpg --import mediawiki_pubkey.txt
gpg: /home/fuckids/.gnupg/trustdb.gpg: trustdb created
gpg: key 7F901A30: public key "Mark A. Hershberger <mah@everybody.org>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
gpg: no ultimately trusted keys found


//列出当前的公钥,检查 是否导入 成功
fuckids@debian-IDS:~/wiki$ gpg -k
/home/fuckids/.gnupg/pubring.gpg
--------------------------------
pub   2048R/7F901A30 2009-07-01 [expires: 2019-06-29]
uid                  Mark A. Hershberger <mah@everybody.org>
sub   2048R/84896BEA 2009-07-01 [expires: 2019-06-29]

//使用签名文件对下载的文件进行验证:

fuckids@debian-IDS:~/wiki$ gpg --verify mediawiki-1.22.5.tar.gz.sig mediawiki-1.22.5.tar.gz
gpg: Signature made Fri 28 Mar 2014 08:21:11 AM CST using RSA key ID 7F901A30
gpg: Good signature from "Mark A. Hershberger <mah@everybody.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: 3CEF 8262 806D 3F0B 6BA1  DBDD 7956 EE47 7F90 1A30

其中 gpg: Good signature from "Mark A. Hershberger <mah@everybody.org>" 这一行表示签名文件是正确的,表示下载的包并没有被中间修改过;


关于gpg相关的请参考:

http://www.gnupg.org

http://www.ruanyifeng.com/blog/2013/07/gpg.html

http://hi.baidu.com/hs_fish/item/8eb09d0b1bab79006c9048c9