訊息摘要演算法簡介

2021-04-28 18:27:46 字數 2603 閱讀 4403

訊息摘要演算法簡介

一、什麼是訊息摘要演算法

訊息摘要演算法的主要特徵是加密過程不需要金鑰,並且經過加密的資料無法被解密,只有輸入相同的明文資料經過相同的訊息摘要演算法才能得到相同的密文。訊息摘要演算法不存在金鑰的管理與分發問題,適合於分布式網路相同上使用。由於其加密計算的工作量相當可觀,所以以前的這種演算法通常只用於資料量有限的情況下的加密,例如計算機的口令就是用不可逆加密演算法加密的。近年來,隨著計算機相同效能的飛速改善,加密速度不再成為限制這種加密技術發展的桎梏,因而訊息摘要演算法應用的領域不斷增加。

現在,訊息摘要演算法主要應用在「數字簽名」領域,作為對明文的摘要演算法。著名的摘要演算法有rsa公司的md5演算法和sha-1演算法及其大量的變體。

二、訊息摘要的特徵

訊息摘要是把任意長度的輸入柔和而產生長度固定的偽隨機輸入的演算法。訊息摘要的主要特點有:

①無論輸入的訊息有多長,計算出來的訊息摘要的長度總是固定的。例如應用md5演算法摘要的訊息有128個位元位,用sha-1演算法摘要的訊息最終有160位元位的輸出,sha-1的變體可以產生192位元位和256位元位的訊息摘要。一般認為,摘要的最終輸出越長,該摘要演算法就越安全。

②訊息摘要看起來是「隨機的」。這些位元看上去是胡亂的雜湊在一起的。可以用大量的輸入來檢驗其輸出是否相同,一般,不同的輸入會有不同的輸出,而且輸出的摘要訊息可以通過隨機性檢驗。但是,乙個摘要並不是真正隨機的,因為用相同的演算法對相同的訊息求兩次摘要,其結果必然相同;而若是真正隨機的,則無論如何都是無法重現的。因此訊息摘要是「偽隨機的」。

③一般地,只要輸入的訊息不同,對其進行摘要以後產生的摘要訊息也必不相同;但相同的輸入必會產生相同的輸出。這正是好的訊息摘要演算法所具有的性質:輸入改變了,輸出也就改變了;兩條相似的訊息的摘要確不相近,甚至會大相徑庭。

④訊息摘要函式是無陷門的單向函式,即只能進行正向的資訊摘要,而無法從摘要中恢復出任何的訊息,甚至根本就找不到任何與原資訊相關的資訊。當然,可以採用強力攻擊的方法,即嘗試每乙個可能的資訊,計算其摘要,看看是否與已有的摘要相同,如果這樣做,最終肯定會恢復出摘要的訊息。但實際上,要得到的資訊可能是無窮個訊息之一,所以這種強力攻擊幾乎是無效的。

⑤好的摘要演算法,沒有人能從中找到「碰撞」,雖然「碰撞」是肯定存在的。即對於給定的乙個摘要,不可能找到一條資訊使其摘要正好是給定的。或者說,無法找到兩條訊息,是它們的摘要相同。

三、訊息摘要的應用——數字簽名

一般地,把對乙個資訊的摘要稱為該訊息的指紋或數字簽名。數字簽名是保證資訊的完整性和不可否認性的方法。資料的完整性是指信宿接收到的訊息一定是信源傳送的資訊,而中間絕無任何更改;資訊的不可否認性是指信源不能否認曾經傳送過的資訊。其實,通過數字簽名還能實現對信源的身份識別(認證),即確定「信源」是否是信宿意定的通訊夥伴。

數字簽名應該具有唯一性,即不同的訊息的簽名是不一樣的;同時還應具有不可偽造性,即不可能找到另乙個訊息,使其簽名與已有的訊息的簽名一樣;還應具有不可逆性,即無法根據簽名還原被簽名的訊息的任何資訊。這些特徵恰恰都是訊息摘要演算法的特徵,所以訊息摘要演算法適合作為數字簽名演算法。

數字簽名方案是一種以電子形式儲存訊息簽名的方法。乙個完整的數字簽名方案應該由兩部分組成:簽名演算法和驗證演算法。一般地說,任何乙個公鑰密碼體制都可以單獨地作為一種數字簽名方案使用。如rsa作為數字簽名方案使用時,可以定義如下:

這種簽名實際上就是用信源地私鑰加密訊息,加密後地訊息即成了簽體;而用對應地公鑰進行驗證,若公鑰解密後的訊息與原來的訊息相同,則訊息是完整的,否則訊息不完整。它正好和公鑰密碼用於訊息保密是相反的過程。因為只有信源才擁有自己地私鑰,別人無法重新加密源訊息,所以即使有人截獲且更改了源訊息,也無法重新生成簽體,因為只有用信源的私鑰才能形成正確地簽體。同樣信宿只要驗證用信源的公鑰解密的訊息是否與明文訊息相同,就可以知道訊息是否被更改過,而且可以認證訊息是否是確實來自意定的信源,還可以使信源不能否認曾將傳送的訊息。所以這樣可以完成數字簽名的功能

但這種方案過於單純,它僅可以保證訊息的完整性,而無法確保訊息的保密性。而且這種方案要對所有的訊息進行加密操作,這在訊息的長度比較大時,效率使非常低的,主要原因在於公鑰體制的加解密過程的低效性。所以這種方案一般不可取。

幾乎所有的數字簽名方案都要和快速高效的摘要演算法(hash函式)一起使用,當公鑰演算法與摘要演算法結合起來使用時,便構成了一種有效地數字簽名方案。

這個過程是:首先用摘要演算法對訊息進行摘要,然後在把摘要值用信源的私鑰加密;接收方先把接收的明文用同樣的摘要演算法摘要,形成「準簽體」,然後再把準簽體與用信源的公鑰解密出的「簽體」進行比較,如果相同就認為訊息是完整的,否則訊息不完整。

這種方法使公鑰加密只對訊息摘要進行操作,因為一種摘要演算法的摘要訊息長度是固定的,而且都比較「短」(相對於訊息而言),正好符合公鑰加密的要求。這樣效率得到了提高,而其安全性也並未因為使用摘要演算法而減弱。

訊息摘要演算法 數字摘要

為了保證檔案或值的安全性,因為使用訊息摘要生成的值是不可篡改的 特點 準備工作 string input 訊息摘要 string algorithm md5 public static void main string args throws exception 建立乙個訊息摘要物件messaged...

Java 訊息摘要演算法

一 md5 因為在訊息摘要演算法中,md5應該最常用的,所以放在最前面。另外md家族中除了md5外,還有md2和md4,md2和md5在jdk中已經有實現,md4則是在bouncy castle有實現。public abstract class md5 catch nosuchalgorithmex...

訊息摘要演算法 HMAC演算法

hmac是一種使用單向雜湊函式來構造訊息認證碼的方法,其中hmac中的h就是hash的意思,以乙個金鑰和乙個訊息為輸入,生成乙個訊息摘要作為輸出。或者簡單點說,hmac就是資訊在hash的時候,按照一定規則在資訊裡新增了一些關鍵字,增加了hash破解的難度。hmac中所使用的單向雜湊函式並不僅限於一...