天天看點

使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性

當你從網上下載下傳一個檔案後(比如:安裝程式、iso鏡像或者一個壓縮包),檔案可能在不同的情況下發生了損壞,比如:由于線路傳輸錯誤、中斷的下載下傳、存儲硬體錯誤、檔案系統錯誤等等。除了這些錯誤,檔案還可能在下載下傳前或者下載下傳中的攻擊而被有意地篡改了。比如,一個攻破證書頒發機構的攻擊者可以實施一個mitm攻擊(中間人攻擊),欺騙你從https網站上下載下傳隐藏惡意軟體的檔案。

要保護你自己免受這些問題的困擾,建議你去驗證從網上下載下傳的檔案的可靠性和完整性。特别是你下載下傳了一個非常敏感的檔案的時候)(比如:作業系統鏡像、二進制應用程式、可執行安裝包等等),盲目地相信下載下傳的檔案不是一個好習慣。

使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性

如果你想要同時驗證下載下傳檔案的可靠性(擁有者)和完整性(内容),你需要依賴于加密簽名。本教程中,我會描述如何使用gnupg(gnu privacy guard)來檢查檔案的可靠性和完整性。

使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性

至于下載下傳的檔案,發行商也會提供它相關的pgp簽名。

使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性

<a target="_blank"></a>

讓我們首先在你的linux系統上安裝gnupg。

在debian、ubuntu和其他debian衍生版上:

$ sudo apt-get install gnupg

在fedora、centos或者rhel上:

$ sudo yum install gnupg

完成安裝後,生成一個本篇中會使用到的鍵對。

$ gpg --gen-key

使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性

在生成鍵對期間,你會被要求提供你的姓名和email,還有保護你私鑰的密碼。你同樣也可以選擇鍵對何時過期(預設不會過期)。依賴于你選擇的key的大小(在1024和4096位之間),key生成會花上幾分鐘或者更多,同時它要求收集來自你桌面活動的大量的随機資料。(比如鍵盤輸入、滑鼠移動、磁盤通路等等,是以這個時候随便動動滑鼠鍵盤什麼的)。

一旦key生成完畢後,公鑰和私鑰會存儲在~/.gnupg目錄。

使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性

驗證下載下傳檔案的第一步是與任何提供檔案下載下傳的人建立信任。出于此,我們下載下傳了這個檔案的公鑰,并且驗證公鑰的擁有者是否是他或者她自稱的。

在下載下傳完檔案擁有者的公鑰後:

$ wget https://onionshare.org/signing-key.asc

使用gpg指令導入公鑰到你的keyring中

$ gpg --import signing-key.asc

使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性

一旦擁有者的公鑰導入後,他會像下面那樣列印出一個key id(比如:"eba34b1c")。記住這個key id。

現在,運作下面的指令檢查導入的公鑰的指紋:

$ gpg --fingerprint eba34b1c

使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性

你會看到key的指紋字元串。把這個和網站上顯示的指紋做對比。如果比對,你可以選擇信任這個檔案擁有者的公鑰。

一旦你決定相信這個公鑰,你可以通過編輯key來設定信任級别:

$ gpg --edit-key eba34b1c

這個指令會顯示gpg提示符:

使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性

在gpg提示符中輸入“trust”,它會讓你從1-5之間選擇這個key的信任等級。

使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性

本例中,我決定配置設定給它“4”,在這之後,輸入“sign”用你自己的私鑰簽名,接着輸入在gpg提示符中輸入“save”來完成操作。

使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性

要注意的是不需要這樣明确地給一個公鑰指派信任,通過key的導入隐式地信任往往就夠了。

回到教程,現在讓我們檢查導入的key清單。

$ gpg --list-keys

使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性

你至少會看到兩個key:一個帶 depth 0和終極信任("1u"),這就是你自己的key,另外一個帶depth 1和完全信任("1f"),這是你之前簽名的key。

一旦你建立了與檔案擁有者和他的/她的公鑰之間的信任關系,我們需要驗證你從擁有者那邊下載下傳的檔案的可靠性和完整性了。

本例中,檔案擁有者分别公布了一個檔案和它相關的pgp簽名(.asc)。簽名所起的作用就是認證(檔案)并且在其中加入一個時間戳。

一個典型的簽名(*.asc)看上去像這樣。

-----begin pgp signature-----

iqicbaabcgagbqjujghsaaojep1yctnro0sc1jup/ixny/lkdrcmiauoqlwkne8f

sj4sfiwremew76w66gasdf03fa5zpx6ess2kucgx8zsfeismn5t0y2p/asaxwzqf

kywzvezirktca5aj4dbzu6qrt9ggsw6jbjvv1objcmnyo+eaj341par3mudvnyqz

h/n5tc4qcilzy6m184opgizy4ipemmxflhsd7wjpayn+to/z3uhh9nknuygzpafr

olpswpe8revddjyfmfsmb3zrfmhln7fceltoi+a7sluvrmclizfnbec9rgljtjo0

cpdzy7tswmml0da3vvpmvqgvkg/dyhpn2iidrnalalvgq5aovf+4tjad5ihvyawx

4gds93g6hqvv5rwgx7or3hgt2o0y+qfsvdxvnpxerghxejxhzsdwlqmpdj9iosu

ae/53xxnxqsn6pozcwhihvbsv0pdlg0ea0ddaan0zeinnyzf1r0tljwkcgpvgctv

qkjuyff9w9cwhrapy2ov5hs/jzzpcg0evpnddzfooh1gdkadq9a5d2x5qjculsh9

wwu3x+e43oqisorzbucitd9hhzbeh7t8q0xaqnakgu3hrizp3dn4cnmfhm6i9hli

empsplkccemexu2o9qgzgxvm+agzje4qkuwahriccp5jdmvny61ulktasjy6co8h

5gbhhyybpefm+g1bodmd

=c9wo

-----end pgp signature-----

現在讓我們同時下載下傳它的檔案和簽名:

$ wget https://onionshare.org/files/0.6/onionshare.dmg

$ wget https://onionshare.org/files/0.6/onionshare.dmg.asc

現在驗證下載下傳檔案的pgp簽名。

$ gpg --verify onionshare.dmg.asc onionshare.dmg

使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性使用 GnuPG 加密簽名來驗證下載下傳檔案的可靠性和完整性

如果指令的輸出包含了“good signature from &lt;檔案所屬者&gt;”,那麼下載下傳的.dmg檔案就被成功地認證和核實了。如果下載下傳的檔案的任何地方在簽名後被篡改了,那麼驗證就會失敗。

這時你就可以放心地信任你下載下傳的檔案了。

原文釋出時間:2014-12-05

本文來自雲栖合作夥伴“linux中國”

下一篇: Kafka Tools

繼續閱讀