**:
★什麼是」完整性校驗」?
所謂的」完整性校驗」,顧名思義,就是檢查檔案是否完整。那麼,什麼情況下會導致檔案不完整捏?大概有如下幾種情況。
1. 感染病毒
比方說你的系統中了病毒,病毒感染了某個軟體安裝包或者某個可執行程式。那麼該檔案的完整性就被破壞了。
★雜湊演算法(雜湊演算法)掃盲
◇什麼是」雜湊演算法/雜湊演算法」?
這裡所說的」雜湊」是一種計算機演算法,洋文叫做 hash,有時候也根據音譯稱為雜湊。
雜湊演算法可以把任意尺寸的資料(原始資料)轉變為乙個固定尺寸的」小」資料(叫」雜湊值」或」摘要」)。
◇摘要長度
對於某個具體的雜湊演算法,得到的雜湊值長度總是固定的。雜湊值的長度又稱」摘要長度」。
以下是常見雜湊演算法的摘要長度
crc32 32位元(4位元組)
md5 128位元(16位元組)
sha1 160位元(20位元組)
◇雜湊演算法的特色
1. 不可逆性
從剛才的描述看,雜湊似乎有點像壓縮。其實捏,雜湊演算法跟壓縮演算法是完全不同滴。壓縮演算法是可逆的(可以把壓縮後的資料再還原),而雜湊演算法是不可逆的。
還有一些人把雜湊演算法稱為」加密演算法」,這也是不對的。因為加密演算法是可逆的(」加密」的逆操作就是」解密」),而雜湊演算法是不可逆的。
2. 確定性
通過某種雜湊演算法,分別對兩個原始資料計算雜湊值。如果算出來的雜湊值不同,那麼可以 100% 肯定這兩段資料是不同的——這就是」確定性」。
但反過來,如果這兩段資料的雜湊值相同,則只能說,這兩段資料非常可能相同。所謂的」非常可能」,就是說,還達不到百分百。具體原因,請看下一節」雜湊函式的可靠性」。
★關於雜湊演算法的可靠性
◇什麼是」雜湊碰撞」?
剛才說了,存在非常小的可能性,導致兩段不同的原始資料,計算出相同的雜湊值。這種情況稱之為」雜湊碰撞」或」雜湊衝突」。
◇碰撞的型別
雜湊碰撞的型別,大體上有兩種:
1. 隨機碰撞
隨機碰撞就像買彩票中大獎,完全是出於小概率的偶然因素——你碰巧遇見兩個不同的資料(檔案),具有相同的雜湊值。
理論上講,任何雜湊演算法都存在隨機碰撞的可能性,只是可能性有大有小。
2. 人為碰撞
人為碰撞就是說,有人(通常是惡意的攻擊者)故意製造雜湊碰撞,以此來騙過」基於雜湊值的完整性校驗」。
◇如何避免碰撞
1. 對於隨機碰撞
要避免隨機碰撞,很簡單,只需要選擇摘要長度足夠長的雜湊演算法。
拿前面舉的3個例子。
crc32 的摘要長度是 32bit,也就說,最多可以表示 「2的32次方」 這麼多種可能性(也就是幾十億,數量級相當於地球總人口)。表面上看貌似很大,其實還不夠大。比如當前網際網路上的頁面總數就已經大大超過幾十億。如果對每個頁面計算 crc32 雜湊,會碰到很多重複(碰撞)。
而 md5 的摘要長度是128bit,也就是 2的128次方。這個數字足夠大了。通俗地說,從宇宙誕生到宇宙毀滅,你都未必有機會碰見 md5 的隨機碰撞。而 sha1 的摘要長度是160bit,那就更不用說了。
2. 對於人為碰撞
想避免人為碰撞,要同時兼顧兩個因素——雜湊演算法的摘要長度、雜湊演算法的優秀程度。」摘要長度」剛才已經解釋了。光說一下」演算法的優秀程度」。
如果某個雜湊演算法有缺陷(不夠優秀),那麼攻擊者就可以比較容易地構造出兩個不同的原始資料,但卻擁有相同的雜湊值。如此一來,就可以騙過基於雜湊演算法的完整性檢查。
典型的例子就是 md5,md5演算法在過去10多年裡曾經非常流行,但是前幾年被發現存在嚴重缺陷。所以,md5 雖然隨機碰撞的概率非常非常低,但人為碰撞的概率可不低。如果你比較注重安全性,盡量不要依賴 md5 進行完整性校驗。
★雜湊值校驗的步驟
下面,介紹幾個常用軟體的雜湊值頁面,便於大夥兒查詢
微軟的產品
到」這個頁面」:
可以查微軟發布的所有產品的雜湊值。微軟的產品很多,先根據型別或名稱篩選,找到某產品後,點」詳細資訊」,就可以看到 sha1 雜湊值。
firefox 瀏覽器
開啟如下鏈結,可以看到 firefox 某個版本的 sha1 列表(把鏈結中的 ***x 替換為版本號,比如18.0.2)。這個列表很長,包括各種語言,各個平台。為了方便起見,你可以先算好 sha1 雜湊值,然後到裡面搜尋該雜湊值
★雜湊值校驗的工具——fciv
◇計算單個檔案
比如你有乙個微軟的系統安裝光碟映象,位於c:\download\windows.iso 那麼,用如下命令可以計算該檔案的 sha1 雜湊值
fciv -sha1 c:\download\windows.iso
◇批量計算某個目錄
fciv 支援批量計算某個目錄下的檔案雜湊值。比方說,可以用如下命令可以計算 c:\download 目錄下的每乙個檔案的 sha1
fciv -sha1 c:\download\
◇批量計算並儲存,供前後對比
比如 c:\download 目錄下有很多檔案。俺想知道過一段時間之後,這些檔案是否被改過。那麼,可以先用如下命令,把該目錄中所有檔案的 sha1 雜湊都儲存到某個 xml 檔案中(本例中,儲存到 c:\hash.xml,你也可以儲存到其它檔名)
fciv -sha1 c:\download\ -xml c:\hash.xml
過了一段時間後,你可以用如下命令,就可以看出哪些檔案被修改過。
fciv -sha1 c:\download\ -xml c:\hash.xml -v
★什麼是」數字簽名」?
所謂的」數字簽名」,通俗來說,就是採用某種技術手段來證明某個資訊確實是由某個機構(或某個人)發布的。因為其用途有點類似於傳統的手寫簽字,所以稱之為」數字簽名」。
數字簽名的技術實現需要依賴於」非對稱加密技術」和」數字證書體系」。考慮到篇幅,這裡就不再囉嗦了。
★windows 平台的」數字簽名」
數字簽名有很多種,大夥兒比較常見的是 windows 平台下的數字簽名。如今大型 it 公司(比如:微軟、google、蘋果、等)或者是知名開源組織發布的 windows 軟體,安裝檔案通常都內建數字簽名。所以俺著重介紹 windows 平台的數字簽名該如何校驗。
◇利用資源管理器驗證單個檔案
大概從 windows 2000開始,windows 就支援在某個檔案尾部附加數字簽名,並且 windows 的資源管理器內建了對數字簽名的校驗功能。
下面俺通過幾個截圖,簡單介紹一下:如何在資源管理器中驗證數字簽名。
比如,俺手頭有乙個 firefox 的安裝檔案(帶有數字簽名)。當俺檢視該檔案的屬性,會看到如下的介面。眼神好的同學,會注意到到上面有個」數字簽名」的標籤頁。如果沒有出現這個標籤頁,就說明該檔案沒有附帶數字簽名。
選擇該標籤頁,出現如下介面。
順便說一下,某些數字簽名中沒有包含」郵件位址」,那麼這一項會顯示」不可用」;同樣的,某些數字簽名沒有包含」時間戳」,也會顯示」不可用」。不要緊張,這裡顯示的」不可用」跟數字簽名的有效性沒關係。
一般來說,簽名列表中,有且僅有乙個簽名。選中它,點」詳細資訊」按鈕。跳出如下介面:
通常這個介面會顯示一行字:」該數字簽名正常」(圖中紅圈標出)。如果有這行字,就說明該檔案從出廠到你手裡,中途沒有被篡改過(是原裝滴、是純潔滴)。
如果該檔案被篡改過了(比如,感染了病毒、被注入木馬),那麼對話方塊會出現乙個警告提示」該數字簽名無效」,介面如下。一旦出現數字簽名無效,那這個檔案就不要再使用了。
◇利用命令列工具批量驗證
使用如下命令,可以批量檢查某個目錄下(包括多層巢狀子目錄)的所有可執行程式,並且把」無簽名」或者」簽名無效」的檔案列出來。
sigcheck -u -e -s 某個目錄的路徑名
先提醒一下,檢查數字簽名的有效性本身就比較慢,如果目錄下的檔案很多,你要有足夠的耐心等它執行完畢。
稍微補充一下,這個 sigcheck 命令還順便提供了雜湊值(命令格式如下),該功能可替代 fciv 的頭兩個功能,可惜無法替代 fciv 的第三個功能。
sigcheck -h 某個目錄或檔案的路徑名
★pgp/gpg 的數字簽名
剛才聊了 windows 平台滴。但是,切莫以為只有 windows 平台才提供數字簽名——其它的數字簽名工具還有好幾種。名氣比較大的數字簽名工具當屬 pgp/gpg。這兩個縮寫就像繞口令,很容易搞混。pgp 是商業軟體,而 gpg 是 gnupg 的縮寫,是 gnu 的開源專案。後者是前者的開源替代品,兩者的功能基本相容。
這倆玩意兒的功能很強悍,校驗數字簽名對它倆只是小菜一碟。考慮到大夥兒平時較少碰到 gpg 的簽名,俺今天就偷懶一下,暫不介紹。以後如果有空,再專門寫一篇帖子介紹 pgp/gpg 的各種功能和使用場景。
檔案完整性校驗
什麼是 完整性校驗 所謂的 完整性校驗 顧名思義,就是檢查檔案是否完整。那麼,什麼情況下會導致檔案不完整捏?大概有如下幾種情況。1.感染病毒 比方說你的系統中了病毒,病毒感染了某個軟體安裝包或者某個可執行程式。那麼該檔案的完整性就被破壞了。雜湊演算法 雜湊演算法 掃盲 什麼是 雜湊演算法 雜湊演算法...
Dex檔案的完整性校驗
classes.dex 在 android 系統上基本負責完成所有的邏輯業務,因此很多針對android 應用程式的篡改都是針對 classes.dex 檔案的。在 apk 的自我保護上,也可以考慮對 classes.dex檔案進行完整性校驗,簡單的可以通過 crc 校驗完成,也可以檢查 hash ...
資料完整性校驗 釋疑
完整性 雜湊校驗 雜湊是一種不可逆的對映,可以將資料經過雜湊演算法計算得到乙個雜湊值,而無法再將該雜湊值反映射得到原始的資料。一般來說,不同的資料得到的雜湊值是不同的,但也有極少的可能會出現碰撞,但這種概率極小。在網路資料完整性校驗中使用的雜湊演算法通常包括 md5 sha。資料完整性校驗 資料完整...