張志軍
2017年2月24日,谷歌與阿姆斯特丹CWI研究所的研究人員宣布,他們成功實現(xiàn)了c散列算法的碰撞。這標志著用SHA-1(簡稱安全哈希算法)來做電子文本簽名已不再可靠,因為面對一個電子文本和它的SHA-1簽名,科學家們可以生成一個完全不同的文本并確保它有完全相同的SHA-1簽名。
安全哈希算法是對信息做一種不可逆的轉換,它有下列屬性:不論輸入信息量的大小,特定的哈希算法的輸出總是固定的長度;輸入信息的微小變化會帶來哈希值的很大變化;哈希值的計算必須包括輸入信息的每一個比特,否則上面一條將無法滿足。
安全哈希算法的強度在于從哈希值反推原來的輸入信息有多大的難度。如果黑客能在幾天內用現(xiàn)有的計算和存儲能力做到,該算法顯然不能用。安全哈希算法被普遍應用到用戶的口令保護,一般被稱為單向加密。其優(yōu)越性在于攻擊者不能根據口令的哈希值而反推出口令本身。攻擊者可以不斷地試不同口令的哈希值直到與要破譯的口令的哈希值相同。這種攻擊需要耗費的時間太多。于是黑客們發(fā)明了彩虹列表攻擊法。應對這種攻擊的方法有增加口令的長度、給哈希值加“鹽”,即在哈希值生成過程中加入一個隨機生成的數(shù)值作為哈希算法的另一個輸入。這樣,同一個口令因“鹽”值的不同,哈希值也不同,攻擊者就無法用一個彩虹列表來根據哈希值去反查原來的口令是什么。
安全哈希算法也是文本數(shù)字簽名或者電子簽名技術的一個重要組成部分。數(shù)字簽名實際上包括兩項主要的工作,簽名和檢驗,前者創(chuàng)建一個數(shù)字簽名,后者驗證簽名的有效性。這個應用首先要計算文本的哈希值,然后用服務商所提供的或者是用戶自己的密匙對哈希值用非對稱加密算法來加密,其結果就是這個文本的簽名。
這里如果用的是用戶自己的密匙,我們稱它為數(shù)字簽名,其不可否認性被全世界的法律體系所公認。如果是用服務商所提供的密匙,則稱作電子簽名,必須輔以較強的用戶認證過程以及服務商對密匙的有效保護,才能被接受。加了簽名的文本還需要加上包含了相應公匙的數(shù)字證書,這樣才能讓收到帶簽名文本的人把簽名解密,然后把結果與原文本的哈希值比較,如果數(shù)值相同就表示驗證成功,表明文本是真實的,并且在簽名之后沒有過任何改動。
區(qū)塊鏈技術也大量使用哈希值。區(qū)塊鏈技術的設計者直接選擇了比SHA-1更強的SHA-256。SHA-256的哈希值有256個比特,哈希值的可能性用十進制表示相對應64后面加75個0。
SHA-1的使用建議如下:對于提供數(shù)字簽名業(yè)務的服務商,應立即用SHA-256或者更強的哈希算法來替代SHA-1;數(shù)字證書的提供者都不應該再使用SHA-1;企業(yè)若在文檔簽名等應用程序中使用SHA-1,需要盡快升級,新的應用程序都應該杜絕使用SHA-1。到SHA-1完全不能使用應該還有幾年的時間。雖未迫在眉睫,為安全起見,企業(yè)內部的應用程序應該在兩年內把所有的SHA-1都替換掉。