簡介
密碼散列函式是一種單向散列函式,將任意長度的訊息壓縮到某一固定長度的訊息摘要,一個理想的密碼散列函式應該有四個主要的特性:對於任何一個給定的訊息,它都很容易就能運算出散列數值。難以由一個已知的散列數值,去推算出原始的訊息。在不更動散列數值的前提下,修改訊息內容是不可行的。對於兩個不同的訊息,它不能給與相同的散列數值。單向散列函式生成的信息摘要是不可預見的,訊息摘要看起來和原始的數據沒有任何的關係。而且,原始數據的任何微小變化都會對生成的信息摘要產生很大的影響 。它的模型為:
。
其中, 是待處理的明文,可以為任意長; 是單向散列函式, 是生成的報文摘要,它具有固定的長度,並且和 的長度無關。其中 具有以下的單向性質:給 和 ,很容易計算 ;給定 和 ,很難計算 ,甚至得不到的 任何訊息;給定 ,要找兩個不同的和,使得在計算上是不可行的。
散列函式
散列函式(Hash function)又稱散列算法、哈希函式,是一種從任何一種數據中創建小的數字“指紋”的方法。散列函式把訊息或數據壓縮成摘要,使得數據量變小,將數據的格式固定下來。該函式將數據打亂混合,重新創建一個叫做散列值(hash values,hash codes,hash sums,或hashes)的指紋。散列值通常用一個短的隨機字母和數字組成的字元串來代表。好的散列函式在輸入域中很少出現散列衝突。在散列表和數據處理中,不抑制衝突來區別數據,會使得資料庫記錄更難找到。所有散列函式都有如下一個基本特性:如果兩個散列值是不相同的(根據同一函式),那么這兩個散列值的原始輸入也是不相同的。這個特性是散列函式具有確定性的結果,具有這種性質的散列函式稱為單向散列函式。但另一方面,散列函式的輸入和輸出不是確定對應關係的,如果兩個散列值相同,兩個輸入值很可能是相同的,但也可能不同,這種情況稱為“散列碰撞(collision)”,這通常是兩個不同長度的輸入值,刻意計算出相同的輸出值。輸入一些數據計算出散列值,然後部分改變輸入值,一個具有強混淆特性的散列函式會產生一個完全不同的散列值。
套用
數字簽名(又稱公鑰數字簽名,Digital Signature)是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術實現,用於鑑別數字信息的方法。一套數字簽名通常定義兩種互補的運算,一個用於簽名,另一個用於驗證,但法條中的電子簽章與數字簽名,代表之意義並不相同,電子簽章用以辨識及確認電子檔案簽署人身份、資格及電子檔案真偽者。而數字簽名則是以數學算法或其他方式運算對其加密,才形成電子簽章,意即使用數字簽名才創造出電子簽章。數字簽名不是指將簽名掃描成數字圖像,或者用觸摸板獲取的簽名,更不是落款。數字簽名了的檔案的完整性是很容易驗證的(不需要騎縫章、騎縫簽名,也不需要筆跡鑑定),而且數字簽名具有不可抵賴性(即不可否認性),不需要筆跡專家來驗證。數字簽名套用了公鑰密碼領域使用的單向函式原理。單向函式指的是正向操作非常簡單,而逆向操作非常困難的函式,比如大整數乘法。這種函式往往提供一種難解或懷疑難解的數學問題。公鑰密碼領域具備實用性的三個懷疑難解問題為:質數分解,離散對數和橢圓曲線問題。
在密碼學中,訊息認證碼(Message authentication code,縮寫為MAC),又譯為訊息鑑別碼、檔案訊息認證碼、訊息鑑別碼、信息認證碼,是經過特定算法後產生的一小段信息,檢查某段訊息的完整性,以及作身份驗證。它可以用來檢查在訊息傳遞過程中,其內容是否被更改過,不管更改的原因是來自意外或是蓄意攻擊。同時可以作為訊息來源的身份驗證,確認訊息的來源。訊息認證碼的算法中,通常會使用帶密鑰的散列函式(HMAC),或者塊密碼的帶認證工作模式(如CBC-MAC)。信息鑑別碼不能提供對信息的保密,若要同時實現保密認證,同時需要對信息進行加密。