Linux下的學(xué)習(xí)開始總是艱難的,但有的時(shí)候,卻發(fā)現(xiàn)Linux下遠(yuǎn)比Windows的操作來的實(shí)在的多——這下載文件的完整性就是其中一件,讓本人覺著很爽的一件事情。在編譯安裝各種軟件的時(shí)候,總要到各個(gè)網(wǎng)站上收集下軟件源碼包。正由于此,軟件的入口就非常復(fù)雜,校驗(yàn)下載的文件是否被修改過就顯得非常有必要了。而校驗(yàn)方法當(dāng)前一般是MD5,SHA1,PGP三種。在Windows那個(gè)漫長的歲月里(滄桑有木有),一般只能接觸到前兩種——前提是你會(huì)去校驗(yàn)的話。
MD5校驗(yàn)
原理:對文件進(jìn)行MD5 Hash,求出文件的MD5哈希值,通過下載后文件MD5哈希值和發(fā)布者提供的MD5哈希值是否一致來判斷文件是否在發(fā)布者發(fā)布之后被篡改過。
說明:壽命老長的一個(gè)Hash算法,適用范圍廣,網(wǎng)站存儲(chǔ)密碼也經(jīng)常使用。不同的文件產(chǎn)生的MD5哈希值是唯一的,但這點(diǎn)已經(jīng)有辦法通過對文件進(jìn)行少量的修改,讓文件的MD5后的哈希值保持一致。
使用:在CentOS下,要對文件進(jìn)行MD5 Hash是很簡單的,一個(gè) md5sum 命令即可:
你是文件的發(fā)布者話,你可以通過md5sum把文件的哈希值發(fā)送給驗(yàn)證者,這樣下載你文件的人就可以通過MD5哈希值來驗(yàn)證你的文件正確性。反過來,我們在網(wǎng)站上下載文件之后,同時(shí)可以獲取發(fā)布者的MD5哈希值和本地生成的Hash值對比,如果一致,認(rèn)為文件是正確的。
SHA1校驗(yàn)
原理: 原理同MD5一樣,都是通過對文件進(jìn)行HASH求值,比對文件發(fā)布者發(fā)布的HASH值,通過是否相等判斷文件是否被篡改
說明: SHA1 HASH求值方法可以說是MD5的一個(gè)升級版本(SHA1 20位,MD5 16位),在HASH求值方面,MD5退出的舞臺(tái)將有SHA1占據(jù)。SHA家族有五個(gè)算法:SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,后四種有時(shí)候稱為SHA2
使用: CentOS有SHA1的命令: sha1sum
這個(gè)SHA1和MD5基本一致,需要補(bǔ)充說明下的是,在使用 md5sum 也好,還是 sha1sum 也罷,校驗(yàn)文件的時(shí)候,務(wù)必要讓系統(tǒng)能夠根據(jù)文件中提供的路徑找到文件,如果文件找不到,是沒有辦法進(jìn)行校驗(yàn)的。
如果是做多個(gè)文件的Hash校驗(yàn),可以通過一個(gè)文件保存多個(gè)文件的Hash值即可。
PGP校驗(yàn)
原理:使用非對稱加密,程序生成唯一的密鑰對(公鑰和私鑰:Public Key和Private Key/Secret Key)。操作方法如下:
1.發(fā)布者通過用生成的密鑰對中的私鑰對要發(fā)布的文件進(jìn)行簽名,得到簽名文件(sign);
2.發(fā)布者將密鑰對中的公鑰發(fā)布到公鑰服務(wù)器;
3.發(fā)布者將文件和用私鑰生成的簽名一起發(fā)布;
4.驗(yàn)證者下載發(fā)布者發(fā)布的文件和簽名;
5.使用PGP的程序獲取的發(fā)布者第二步發(fā)布的公鑰;
6.使用公鑰校驗(yàn)文件簽名
說明:簽名算法中,密鑰的用處分別是:公鑰用于加密信息和驗(yàn)證,私鑰用于解密和簽名。私鑰掌握在信息發(fā)布方,公鑰可以任意分發(fā)。信息發(fā)布方用密鑰進(jìn)行對信息進(jìn)行簽名,接收方在獲取公鑰后,可以用公鑰對發(fā)布方發(fā)布的信息+簽名進(jìn)行驗(yàn)證。如果驗(yàn)證失敗則認(rèn)為信息被篡改。在網(wǎng)絡(luò)中,我們經(jīng)常碰到的HTTPS協(xié)議,使用了同樣的機(jī)制。
使用:由于PGP是商業(yè)應(yīng)用程序,在CentOS/Linux中,具有同類功能的是GPG(也就是:GnuPG),同樣遵守OpenPGP數(shù)據(jù)加密標(biāo)準(zhǔn)( RFC 4880 ),沒有安裝可以用 yum install gnupg 安裝,命令是: gpg
這里有多種情況,如果你只有簽名,但生成簽名的文件不存在時(shí)(系統(tǒng)沒找到,一般應(yīng)該放在同目錄下面),返回的是:
當(dāng)你有文件的時(shí)候,但還沒有與簽名對應(yīng)的公鑰時(shí),gpg返回的信息類似下面:
注意:上面的信息在不同的文件和操作系統(tǒng)上生成的信息是不同的。但在沒有公鑰的時(shí)候,你可以發(fā)現(xiàn)gpg提供了一個(gè)該簽名對應(yīng)的鑰匙號:47ACDAFB,這個(gè)是我們需要找的公鑰。
上面已經(jīng)說過,發(fā)布者已經(jīng)將公鑰發(fā)布到公鑰服務(wù)器中,供驗(yàn)證者下載,因此我們需要到公鑰服務(wù)器中下載公鑰,要下載公鑰,鑰匙號就很重要了。
可用的公鑰服務(wù)器可以通過wikipedia 上的Key Server條目來查看常用的一些key服務(wù)器列表。這里使用hkp://pgp.mit.edu:
--recv-keys要與--keyserver配合使用,導(dǎo)入密鑰對的公鑰之后,我們就能夠使用這個(gè)公鑰來驗(yàn)證我們的簽名了。
再次運(yùn)行我們之前的驗(yàn)證命令(gpg --verify sign-file),就可以看到驗(yàn)證的結(jié)果了。
看到這個(gè)結(jié)果,至少確認(rèn)一個(gè)結(jié)果:這個(gè)文件是沒有被篡改過的。
一般我們到這步也就差不多了。
但注意消息里面有個(gè)警告,說明這個(gè)是未受信任的簽名認(rèn)證。因?yàn)檫@個(gè)公鑰誰都可以發(fā)布上去的,如果你確實(shí)需要進(jìn)一步認(rèn)證,可以在簽名認(rèn)證之前,你能還要聯(lián)系下真正的發(fā)布者,確認(rèn)這個(gè)密鑰的信息——指紋!這個(gè)是這個(gè)算法的一個(gè)弱點(diǎn)。
如果簽名認(rèn)證已經(jīng)通過,你也就可以安心的在自己的系統(tǒng)內(nèi)編譯,安裝它了。
關(guān)于PGP的更多信息,可以參考以下網(wǎng)站:
新聞熱點(diǎn)
疑難解答
圖片精選