分類
1、CRC8、CRC16、CRC32CRC(Cyclic Redundancy Check,循環冗餘校驗)算法出現時間較長,套用也十分廣泛,尤其是通訊領域,現在套用最多的就是 CRC32 算法,它產生一個4位元組(32位)的校驗值,一般是以8位十六進制數,如FA 12 CD 45等。CRC算法的優點在於簡便、速度快,嚴格的來說,CRC更應該被稱為數據校驗算法,但其功能與數據摘要算法類似,因此也作為測試的可選算法。
在 WinRAR、WinZIP 等軟體中,也是以 CRC32 作為檔案校驗算法的。一般常見的簡單檔案校驗(Simple File Verify – SFV)也是以 CRC32算法為基礎,它通過生成一個後綴名為 .SFV 的文本檔案,這樣可以任何時候可以將檔案內容 CRC32運算的結果與 .SFV 檔案中的值對比來確定此檔案的完整性。
與 SFV 相關工具軟體有很多,如MagicSFV、MooSFV等。
2、MD2 、MD4、MD5
這是套用非常廣泛的一個算法家族,尤其是 MD5(Message-Digest Algorithm 5,訊息摘要算法版本5),它由MD2、MD3、MD4發展而來,由Ron Rivest(RSA公司)在1992年提出,目前被廣泛套用於數據完整性校驗、數據(訊息)摘要、數據加密等。MD2、MD4、MD5 都產生16位元組(128位)的校驗值,一般用32位十六進制數表示。MD2的算法較慢但相對安全,MD4速度很快,但安全性下降,MD5比MD4更安全、速度更快。
目前在網際網路上進行大檔案傳輸時,都要得用MD5算法產生一個與檔案匹配的、存儲MD5值的文本檔案(後綴名為 .md5或.md5sum),這樣接收者在接收到檔案後,就可以利用與 SFV 類似的方法來檢查檔案完整性,目前絕大多數大型軟體公司或開源組織都是以這種方式來校驗數據完整性,而且部分作業系統也使用此算法來對用戶密碼進行加密,另外,它也是目前計算機犯罪中數據取證的最常用算法。
與MD5 相關的工具有很多,如 WinMD5等。
3、SHA1、SHA256、SHA384、SHA512
SHA(Secure Hash Algorithm)是由美國專門制定密碼算法的標準機構—— 美國國家標準技術研究院(NIST)制定的,SHA系列算法的摘要長度分別為:SHA為20位元組(160位)、SHA256為32位元組(256位)、 SHA384為48位元組(384位)、SHA512為64位元組(512位),由於它產生的數據摘要的長度更長,因此更難以發生碰撞,因此也更為安全,它是未來數據摘要算法的發展方向。由於SHA系列算法的數據摘要長度較長,因此其運算速度與MD5相比,也相對較慢。
目前SHA1的套用較為廣泛,主要套用於CA和數字證書中,另外在目前網際網路中流行的BT軟體中,也是使用SHA1來進行檔案校驗的。
4、RIPEMD、PANAMA、TIGER、ADLER32 等
RIPEMD是Hans Dobbertin等3人在對MD4,MD5缺陷分析基礎上,於1996年提出來的,有4個標準128、160、256和320,其對應輸出長度分別為16位元組、20位元組、32位元組和40位元組。
TIGER由Ross在1995年提出。Tiger號稱是最快的Hash算法,專門為64位機器做了最佳化。
測試
1、測試方法
- 測試範圍 :常見的數據校驗、摘要算法,主要有 CRC32、MD5、SHA1、SHA256、SHA384、SHA512
- 樣本數據 :2G大小Vmware 虛擬機作業系統的磁碟檔案,其中包含其中各種類型的檔案,如二進制檔案和文本檔案等。
- 軟體平台 :Windows、.NET Framework 2.0
- 硬體平台 :
- 機器A(SCSI Disk):軟體配置 Windows 2000 + .Net Framework 2.0;硬體配置 CPU:4 (Xeon),2.8G,RAM:2G ,HD:70 GB SCSI
- 機器B(IDE Disk):軟體配置 Windows 2003 + .Net Framework 2.0;硬體配置 CPU:1 (P4),2.8G,RAM:1G,HD:40 GB IDE
考慮到整個測試過程只是涉及到檔案讀取與哈希值的計算,並無過多的與作業系統、軟體平台、開發語言相關的操作,因此可以認為上述測試方法的結果具有普遍性,即也適用於其它作業系統平台(如Linux/Unix)或套用語言/平台(C、Java)。
2、測試結果
1)不同配置機器間的對比在不同機器配置上的平均運算結果如下表所示:
注1:配有SCSI磁碟的機器運行時間反而比 IDE 磁碟時間長,可能是由於前者具有較多的套用負載造成的,如Oracle、WebSphere等,而且其OS為 Windows 2000,在之上運行 .NET 應用程式可能與 Windows 2003 的效率有所差別
注2:上述算法中,只有 CRC32 沒有包含在.NET Framework 中,而是使用C#單獨實現的,因此可能會對其測試結果帶來一些影響。
2)不同算法的CPU占用率比較
在不同的算法運行時,在機器B上監控其對於 CPU 的平均使用時間,結果如下表所示:
3.測試結論
- 數據摘要算法的處理是很快的,在一般配置的PC機上使用MD5算法,處理1G的檔案數據只需20-30秒(有些專用設備聲稱達 3GB/秒),不會對套用或機器帶來過多負載;
- MD5、SHA1雖然被發現存在缺陷(碰撞),但在近幾年內,仍然可以大量使用;
- SHA256/384/512 的速度較慢,可以用於少量數據摘要,目前不適合用於大檔案校驗;