/*********************************************************************
* 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,網頁上的擷取點如:
得到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