文件完整性校驗——關於散列值和數字簽名

★什麼是"完整性校驗"?

  所謂的"完整性校驗",顧名思義,就是檢查文件是否完整。那麼,什麼情況下會導致文件不完整捏?大概有如下幾種情況。1. 感染病毒  比方說你的系統中了病毒,病毒感染了某個軟體安裝包或者某個可執行程序。那麼該文件的完整性就被破壞了。2. 植入木馬/後門  還有一種文件不完整的情況,是被別有用心的人植入木馬或後門。比方說某些國內的軟體下載站點,它們提供的 Windows 安裝光碟鏡像已經被安置了後門。3. 傳輸故障  這種情況主要發生在網絡下載時。因為網絡傳輸是有可能發生誤碼的(傳輸錯誤),另外還有可能下載到快結束的時候斷線(沒下載全)。這些情況都會導致你下載的文件不完整。  如今的上網環境相比當年的 Modem 撥號,已經有明顯改善。所以這種情況應該不多見了。

★散列算法(哈希算法)掃盲

◇什麼是"散列算法/哈希算法"?

  這裡所說的"散列"是一種計算機算法,洋文叫做 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 進行完整性校驗。

★散列值校驗的步驟

  如今,大伙兒的安全意識越來越高了。相應的,很多知名的軟體,除了在官網上提供下載,還會相應提供下載軟體的散列值。當你下載好某個軟體之後,先在自己電腦里計算一下散列值,然後跟官方網站提供的散列值對比一下。如果散列值一樣,通常就說明沒問題。再囉嗦一下,儘量不要用 MD5,改用 SHA1。  

★散列值校驗的工具——FCIV

  前面說完了校驗的流程,最後再說一下校驗的工具。  考慮到大部分讀者是 Windows 用戶,俺介紹一下微軟官方的 FCIV(全稱是 File Checksum Integrity Verifier)。這是一個小巧、綠色、免費的命令行工具,下載頁面在"這裡"。  因為是命令行工具,你需要先運行 CMD,出現 Windows 的命令行界面(黑窗口)之後,在其中使用該工具。下面是 FCIV 功能簡介。

◇計算單個文件

  比如你有一個微軟的系統安裝光碟鏡像,位於 C:\download\Windows.iso 那麼,用如下命令可以計算該文件的 SHA1 散列值fciv -sha1 C:\download\Windows.iso

◇批量計算某個目錄

  FCIV 支持批量計算某個目錄下的文件散列值。比方說,可以用如下命令可以計算 C:download 目錄下的每一個文件的 SHA1fciv -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,由大名鼎鼎的 SysInternals 出品(SysInternals 已經被微軟收購)。跟前面提到的 FCIV 類似,它也是一個小巧、綠色、免費的命令行工具,下載頁面在"這裡"。  使用如下命令,可以批量檢查某個目錄下(包括多層嵌套子目錄)的所有可執行程序,並且把"無簽名"或者"簽名無效"的文件列出來。sigcheck -u -e -s 某個目錄的路徑名先提醒一下,檢查數字簽名的有效性本身就比較慢,如果目錄下的文件很多,你要有足夠的耐心等它運行完畢。  稍微補充一下,這個 SigCheck 命令還順便提供了散列值(命令格式如下),該功能可替代 FCIV 的頭兩個功能,可惜無法替代 FCIV 的第三個功能。sigcheck -h 某個目錄或文件的路徑名。

相關文章

  1. 在Ghost中校驗映像文件完整性

    完成映像文件的製作以後,為了保證映像文件能夠正常恢復系統,用戶需要藉助Ghost的映像文件檢查功能對映像文件進行校驗,操作步驟如下所述. 工具/原料 Ghost 步驟/方法 第1步,在Ghost主界面 ...
  2. 老毛桃sha1校驗工具如何檢測文件完整性

    部分用戶遵照裝機教程一步步操作,但最後由於缺少某個文件以失敗告終.系統文件不完整是裝機時比較常見的問題,用戶怎麼判斷文件是否完整呢? 方法/步驟 進入老毛桃win8pe系統,然後在開始菜單文件工具中點 ...
  3. win10系統ISO文件怎麼校驗,怎麼校驗文件完整性

    從官網下載Win10系統ISO的時候,一般會帶有SHA-1碼供校驗 由於網絡或者電腦硬體原因,可能下載回來的Win10系統ISO文件有丟包 如果文件完整是無法正常使用的,所以校驗Win10系統ISO文 ...
  4. 藉助Ghost的文件檢查功能對映像文件進行校驗

    很多人都不知道gho文件是否完整,現在,我們就教大家藉助Ghost的映像文件檢查功能對映像文件進行校驗的方法. 首先,在Ghost主界面中依次指向"Local(本地)" →&quo ...
  5. 列印Excel文件時如何避免因列數太多而跨頁顯示

    Excel 是微軟辦公套裝軟體的一個重要的組成部分,它可以進行各種數據的處理.統計分析和輔助決策操作,廣泛地應用於管理.統計財經.金融等眾多領域.那麼列印Excel文件時如何避免因列數太多而跨頁顯示呢 ...
  6. Oracle sql:[1]獲取多列值相同數據行

    有的時候表中數據行中出現多行相同數據或者多行多列值數據相同的行,需要查詢出來或者刪除 方法/步驟 創建實驗模擬多行多列值數據相同的行 --創建表 create table CLGJXX ( ID   ...
  7. diffpatch升級,升級包安裝結束但文件CRC校驗

    lol更新時候出現了"diffpatch升級,升級包安裝結束,但文件CRC校驗失敗"處理的方法就是你直接到官網下載補丁,然後安裝就可以了,不用重新安裝那麼麻煩的. 工具/原料 lo ...
  8. winpe系統Hash文件信息校驗的教程

    現如今網絡上捆綁插件的技術越來越高超,為了防止個別文件被惡意捆綁了插件或者是木馬,用戶們可以使用Hash文件信息校驗工具查看文件MD5值,但是不少用戶表示不懂的如何進行操作,下面就一起來看看大白菜wi ...
  9. Excel如何查找A列值是否在B列中出現(vlookup)

    在Excel中蘊藏很多數據的邏輯關係,幫你解決很多頭疼的數據處理.小編也遇到這樣的問題,A列有500個數值,但是B列就是一個大容量的庫,數據可能是500條,我們如果簡單快速的查找A列值是否在B列中出現 ...
  10. Excel 怎樣快速的將一列值賦值為相同的一個

    需要將Excel一列值改為一個,如果點單元格右角下拉,少的還好,如果有幾千條幾萬條,那這個方法就不行了.今天一塊學習一個快捷鍵. 方法/步驟 選中需要重複賦值的一列,太多的話可以滑動右側滾動條,然後按 ...
  11. 圖解HighCharts的餅圖和散列圖分類

    Highcharts時一款功能強大.開源.美觀.圖表豐富.兼容絕大多數瀏覽器的純js圖表庫,本篇經驗將和大家介紹一下HighCharts的餅圖和散列圖種類及示例,希望對大家的工作和學習有所幫助! 餅圖 ...
  12. execl如何讓列值自動遞增

    execl是微軟辦公軟體里最常用的軟體之一,本篇文章我和大家交流如何讓execl的列值自動.快速遞增. 工具/原料 execl 方法/步驟 如圖所示,我們有這樣的需求,班級有19個學生.輸入學號時,因 ...
  13. winpe體系Hash文件信息校驗教程

    現如今網絡上綁縛插件的技能越來越高明,為了避免單個文件被歹意綁縛了插件或者是木馬,用戶們能夠運用Hash文件信息校驗東西檢查文件MD5值,可是不少用戶表明不明白的怎樣進行操作,下面就一起來看看大白菜w ...
  14. 鞋帶的各種系法:[6]單手棋盤分段散列拉鏈

    這次將介紹單手系法 拉鏈系法 棋盤系法 分段和散列系法 工具/原料 一雙帆布鞋(多雙) 巧手 方法/步驟 單手系法繫鞋帶的方法步驟 1.取一條比正常鞋帶稍短的鞋帶,並在一頭打上結. 2.用未打結的一頭 ...
  15. 大白菜winpe系統Hash文件信息校驗教程

    Hash文件信息校驗可以幫助用戶們查詢文件是否被捆綁了插件,同時也可以幫助用戶們查詢文件MD5值,但是不少大白菜新手用戶表示不懂的怎麼查MD5值,遇見這樣的情況有沒有什麼好的教程可以參考學習呢?下面就 ...
  16. 如何在u深度pe系統下進行Hash文件信息校驗

    在我們裝系統的時候需要ISO鏡像文件來支持,這些ISO鏡像文件一般都是從網上下載的,有些用戶需要的是原版乾淨的鏡像文件,而不是被修改過的,那麼這個要怎麼檢驗呢?接下來小編就給大家介紹u深度pe系統中的 ...
  17. PS實現散列圖片分布

    PS(Photoshop)是一個很強大的圖片編輯軟體,圖片的拼接及剪切,有順序排列,也有鬆散性分布,實現散列圖片分布有很多種方法,下面介紹的是一種簡單的方法,進行相關的操作.讓你的圖片散布得好看. 工 ...
  18. 點擊EXCEL單元格自動跳到對應列值相同的單元格

    在Excel中如何實現,點擊Sheet1中的某列,如A列中的某個單元格,就會自動跳到Sheet2中對應的A列的,與此單元格內容相同的單元格? 方法/步驟 這得使用VBA來實現,因為只有使用VBA最為簡 ...
  19. u深度pe系統Hash文件信息校驗工具使用教程

    在我們裝系統的時候需要ISO鏡像文件來支持,這些ISO鏡像文件一般都是從網上下載的,有些用戶需要的是原版乾淨的鏡像文件,而不是被修改過的,那麼這個要怎麼檢驗呢?接下來小編就給大家介紹u深度pe系統中的 ...
  20. 如何使用「Hash文件信息校驗」 工具

    在使用U盤裝系統的時候,需要先在網上下載windows作業系統鏡像文件時,我們一般要的是原版乾淨的ISO鏡像文件,而不是那種被修改過的.但是要怎麼分辨是不是原版的鏡像文件呢?這就需要通過U盤PE系統里 ...