GPG操作——簽名驗證


問題描述:

可能大家都遇到過軟件在下載過程中由於網絡原因導致下載的軟件體積與實際軟件體積不符。最常見的辦法是對待下載文件附加一個摘要文件。這種做法比較常見,也比較容易實現。但是,還是會有一個問題:如果我篡改了網站,改變了文件的內容,並對該文件做了一次摘要,替換了原有的摘要文件。那用戶下載的文件就失去了摘要驗證的意義。如何避免這種問題呢?

解決方案:

軟件提供者對文件做簽名,軟件使用者對文件做驗證。

簽名/驗證,是一種用於對網絡數據傳輸有效性鑒別的常見方法,屬於非對稱加密算法領域。

使用私鑰對數據進行簽名,使用公鑰對數據簽名做校驗。

在這里的理解可以是,私鑰由軟件提供者保留,而公鑰由軟件提供者在網站上公布,並且,該公鑰經過更權威認證機構的簽名。是不是很想CA審核數字證書的系列流程?其實大同小異,只是這種方式更自由一些,也省去了CA認證的費用。這種開放的數字安全模式有別於我們熟悉的PKI,它屬於GunPG/PGP。

實踐操作:

用commons-cdec下載為例,上圖:


 
 以commons-codec-1.8-bin.tar.gz為例,左邊MD5的方式就不說了,看看pgp打開是個什么樣的東西。蠢話



 加有“PGP SIGNATURE”標識的一段BASE64編碼的數字簽名。

前面說過,要對簽名校驗,就需要有對應的公鑰。那么公鑰在那里呢?

就是那個紅框的KEYS。

 下載公鑰:

Shell代碼   收藏代碼
  1. wget http://www.apache.org/dist/commons/KEYS  

  接下來,導入公鑰,並對commons-codec-1.8-bin.tar.gz進行簽名驗證。

 

Shell代碼   收藏代碼
  1. $ gpg --import KEYS  
  2. $ gpg --verify commons-codec-1.8-bin.tar.gz.asc commons-codec-1.8-bin.tar.gz  

 得到如下提示:

gpg: Signature made Wed 24 Apr 2013 04:04:10 AM CST using RSA key ID A11262CB
gpg: Good signature from "Gary David Gregory (Code signing key) <ggregory@apache.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: 2DB4 F1EF 0FA7 61EC C4EA 935C 86FD C7E2 A112 62CB

gpg: Good signature from "Gary David Gregory (Code signing key) <ggregory@apache.org>"說明這個簽名有效。 

有個警告,是因為本地密鑰庫不信任該公鑰。

需要對這個公鑰簽名:

Shell代碼   收藏代碼
  1. $ gpg --sign-key  A11262CB  
  2. gpg: checking the trustdb  
  3. gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model  
  4. gpg: depth: 0  valid:   1  signed:   1  trust: 0-, 0q, 0n, 0m, 0f, 1u  
  5. gpg: depth: 1  valid:   1  signed:   0  trust: 1-, 0q, 0n, 0m, 0f, 0u  
  6. gpg: next trustdb check due at 2014-05-30  
  7.   
  8. pub  2048R/A11262CB  created: 2011-04-12  expires: never       usage: SC  
  9.                      trust: unknown       validity: full  
  10. sub  2048R/AD3D7F94  created: 2011-04-12  expires: never       usage: E  
  11. [  full  ] (1). Gary David Gregory (Code signing key) <ggregory@apache.org>  
  12.   
  13. "Gary David Gregory (Code signing key) <ggregory@apache.org>" was already signed  
  14.  by key 23E8E553  
  15. Nothing to sign with key 23E8E553  
  16.   
  17. Key not changed so no update needed.  

 這時候就不會有警告了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM