商業軟件有一些便利,但這通常伴隨著閉源的警告。在 ProPrivacy,我們讚揚開源的透明度,因為它是唯一確定的方法要知道一個程序就是它所說的那樣,它是罐頭里的,沒有什麼有趣的事情。
任何人都可以使用開源軟件作為其他程序的構建塊,這真是太好了,但這實際上是一把雙刃劍。這使得很難判斷您剛剛下載的軟件是否是開發人員想要的,或者是在某個地方進行了修改的軟件。
值得慶幸的是,通過檢查加密哈希可以找到部分解決方案。
什麼是加密哈希?
加密哈希是通過對包含計算機程序(或其他數字文件)的數據執行單向哈希函數(一種數學運算)而得出的校驗和或數字指紋。
構成計算機程序的數據的一個字節的任何變化都會改變哈希值。因此,哈希值是任何程序或其他數字文件的唯一指紋。
什麼是哈希檢查?
確保程序沒有被篡改或只是損壞是一個相當簡單的問題,只需計算其哈希值,然後將其與開發人員提供的哈希校驗和進行比較即可。
如果相同,那麼您就有足夠的信心認為您下載的程序與其開發人員發布的程序完全相同。如果不是,則程序已被某種方式更改。
造成這種情況的原因並不總是惡意的(見下文),但失敗的哈希檢查應該敲響警鐘。
哈希檢查的問題
在讚揚哈希檢查時,您可能已經發現了一個警告......
完整性但不認證
哈希檢查對於確保文件的完整性很有用,但它們不提供任何類型的身份驗證。也就是說,它們有助於確保您擁有的文件或程序與源匹配,但它們無法提供驗證源是否合法的方法。
例如,虛假網站存在分發流行開源軟件的惡意版本,例如凱通。許多這些網站甚至為他們提供的程序提供哈希校驗和,如果您將這些校驗和與假程序進行檢查,它們會匹配。哎呀。
數學弱點
另一個問題是數學上的弱點可能意味著哈希值不夠安全。
例如,MD5 算法仍然是一種非常流行的哈希函數,儘管它存在已知的漏洞碰撞攻擊。事實上,即使 SHA1 也是不再在這方面被認為是安全的。
儘管如此,MD5 和 SHA1 仍然是用於生成哈希值的最流行的算法。然而,SHA256 仍然是安全的。
開發者的懶惰
開發人員有時會通過錯誤修復和新功能來更新他們的程序,但忽略發布更新的哈希校驗和。當您下載並嘗試驗證其程序時,這會導致哈希檢查失敗。
當然,這遠沒有讓惡意軟件通過的哈希檢查那麼嚴重,但它會降低對生態系統的信任,導致人們懶得檢查他們下載的文件的完整性......
加密哈希與數字簽名
加密哈希的大多數問題都可以通過使用來解決數字簽名,保證完整性和身份驗證。
樂於使用專有代碼的開發人員可以在首次安裝軟件時使用 Microsoft、Apple 或 Google PKI(公鑰基礎設施)技術等機制自動、透明地驗證簽名。

開源開發人員沒有這種奢侈。他們必須使用 PGP,而任何專有操作系統本身都不支持 PGP,這也是 Linux 中不存在與 Microsoft、Apple 或 Google PKI 等效的原因。
所以PGP數字簽名必須手動驗證。但 PGP 是一個完整的豬使用並且不是一個簡單的過程,快速瀏覽一下我們的指南檢查 PGP 簽名在Windows中會演示。
對於開發人員來說,實際的簽名過程也不是,他們很清楚,無論如何,在現實世界中很少有人費心手動檢查數字簽名。
加密哈希遠不如 PGP 數字簽名安全,但它們更易於使用,因此許多開發人員只是選擇依賴它們,而不是對他們的工作進行數字簽名。
您確實應該進行哈希檢查(如果不存在數字簽名)
這是一種不太理想的情況,當開源程序的數字簽名可用時,您應該始終檢查該數字簽名。然而,如果不是,那麼檢查其加密哈希值比什麼都不做要好得多。
只要您對來源有信心(例如,您確定它來自開發人員的真實網站,該網站沒有被黑客攻擊而顯示虛假的加密哈希值),那麼檢查其哈希值可以提供相當程度的信心,即您下載的軟件是其開發人員打算讓您下載的軟件。
如果開源軟件既沒有數字簽名也沒有校驗和,則不要安裝或運行它。
如何進行哈希檢查
基本流程如下:
可選副標題
- 記下開發者發布的哈希值
- 生成您擁有的文件的哈希值
- 比較兩個哈希值
如果它們相同,那麼您就擁有了開發人員想要您擁有的文件。如果不是,那麼它要么已損壞,要么已被篡改。
如果 SHA256+ 哈希可用,請檢查該哈希。如果不是,則使用 SHA1。僅作為最後的手段,您才應檢查 MD5 哈希值。
簡單的方法(所有系統)
生成文件哈希值的最簡單方法是使用諸如在線工具。只需選擇您需要生成的哈希值類型,然後將所需的文件拖放到提供的空間中,就會生成相關的哈希值。
例子
我們想要檢查從 KeePass.org 網站(我們知道該網站是正確的域)下載的 KeePass 安裝程序文件的完整性。該網站發布了其所有版本的 KeePass 的 MD5、SHA1 和 SHA256 哈希值,因此我們將檢查我們下載的版本的 SHA256。
- 我們記下正確的哈希值,如 KeePass 網站上發布的那樣。

- 然後我們參觀在線工具網站,選擇文件哈希:SHA256,並將我們下載的 KeePassinstaller 文件拖到提供的空間中。

- 我們將輸出與 KeePass 網站上發布的校驗和進行比較,發現它們是相同的。因此,假設 KeePass 網站沒有被黑客攻擊而顯示錯誤的哈希值,我們就可以確信我們已經下載了一個未被篡改的文件。耶!Windows、macOS 和 Linux 也有內置的哈希值函數,可以通過命令行訪問......
視窗
此方法在 Windows 10 中開箱即用,而 Windows 7 用戶需要首先使用以下命令更新 Windows PowerShellWindows管理框架4.0。
要獲取 SHA256 哈希值,請右鍵單擊“開始”->“Windows PowerShell”並鍵入:
Get-FileHash [路徑/目標/文件]
例如:
Get-FileHash C:\Users\Douglas\Downloads\KeePass-2.43-Setup.exe

MD5 和 SHA1 哈希值可以使用以下語法計算:
Get-FileHash [[路徑/到/文件] 的路徑 - 算法 MD5
和
Get-FileHash [[path/to/file] 的路徑 - 算法 SHA1
例如:
Get-FileHash C:\Users\Douglas\Downloads\KeePass-2.43-Setup.exe -算法 MD5

macOS
打開終端並輸入:
openssl [哈希類型] [/path/to/file]
哈希類型應為 md5、SHA1 或 SHA256。
例如,要檢查 Windows KeePass 安裝程序的 SHA256 哈希值(只是為了讓本教程保持簡單),請鍵入:
openssl sha256 /Users/douglascrawford/Downloads/KeePass-2.43-Setup.exe

Linux
打開終端並輸入:
Md5sum [路徑/目標/文件]Sha1sum [路徑/目標/文件]
或者
Sha256sum [路徑/目標/文件]
例如:
sha256sum /home/dougie/Downloads/KeePass-2.43-Setup.exe

