一、數字簽名
1.簡介
如書信或文件是根據親筆簽名或印章來證明其真實性的。而計算機網絡中,則使用數字簽名。
實現如下三種功能:
1)接收者能夠覈實發送者對報文的簽名。也就是說,接收者能夠確信該報文的確是發送者發送的。其他人無法僞造對報文的簽名。這叫做報文鑑別。
2)接收者確信所收到的數據和發送者完全一樣而沒有被篡改過。這叫做報文的完整性。
3)發送者事後不能抵賴對報文的簽名。這叫做不可否認。
2.數字簽名及驗證
發送方使用自己的公鑰進行數字簽名;接收方使用發送方的公鑰進行驗證。
3.數字簽名生成流程
由於對較長的報文進行數字簽名,會對計算機造成非常大的負擔,因此需要找出一種非常簡單的方法對報文進行鑑別
即使用密碼散列函數(摘要),後面進行介紹
1)數字簽名過程:
將待發送信息原文做摘要
發送方使用自己的私鑰對摘要進行簽名
簽名附在信息原文後面一起發送
2)驗證數字簽名:
收到簽名數據包
對信息部分進行摘要
對簽名部分用發送方公鑰解密,得到摘要
比較兩個摘要是否相同,相同則數字簽名有效(原文信息一旦被篡改,生成相同摘要的概率非常低)
4.爲什麼數字簽名具有上述三種功能?
1)報文鑑別:除發送方自己之外,沒有人擁有它的私鑰,所以除發送方外,沒有人能產生用發送方私鑰進行數字簽名的密文;
2)報文的完整性:若其他人篡改過報文,由於無法得到發送方的私鑰而對報文進行數字簽名,那麼,接收方利用發送方的公鑰對接收到的報文進行數字簽名認證,則得到不可讀的報文,就知道收到的報文被篡改過;
3)不可否認:發送方要想抵賴發送報文給接收方,接收方可把報文及密文出示給進行公證的第三者,第三者很容易去證實發送方確實發送報文給接收方。
5.安全性
數字簽名的安全性和有用性取決於兩個關鍵因素:
用戶私鑰的保護(沒有其他人能擁有發送方自己的私鑰)
安全的哈希函數
最常見的安全哈希函數:
MD5:128bit校驗和
SHA:160bit校驗和
哈希函數是否安全:
函數是單向的
創建兩條經過函數計算後獲得相同校驗和的信息非常困難
二、密碼散列函數
1.簡介
兩個特點:
輸入長度可以很長,但輸出長度固定,且較短;
單向函數,即計算上,不可能找到兩個不同的報文,有相同的密碼散列函數輸出(摘要)
也就是說,若網絡入侵者截獲了摘要,也無法僞造出一個報文,使得該報文的摘要與原報文的摘要相同,即保護了報文的完整性
2.完整性驗證原理
單向摘要函數:信息原文的數字化摘要,不能根據概要推出原文
摘要驗證:對接收到的信息重做摘要,比較此摘要與原摘要
3.兩種密碼散列函數
(1)MD5(報文摘要的第5個版本,Message Digest 5)
以任意長度的報文作爲輸入,產生一個128bit的報文輸出
MD5已被中國學者王小云團隊證實是可逆的,即找到了一對報文,具有相同的MD5報文摘要
最終被SHA所取代
MD5算法的大致流程:
1)先把任意長的報文按模計算其餘數(64位),追加在報文的後面;
2)在報文和餘數之間填充1~512位,使得填充後的總長度爲512的整數倍。填充的首位是1,後面都是0;
3)把追加和填充後的報文分割爲一個個512位的數據塊,每個512位的報文數據再分成4個128位的數據塊依次送到不同的散列函數進行4輪運算。每一輪又都按32位的小數據塊進行復雜的運算。一直到最後計算出MD5報文摘要代碼。
(2)SHA-1(安全散列算法,Secure Hash Algorithm)
總體思路與MD5有相似之處
以任意長度報文輸入,160bit輸出(比MD5的128bit多了25%)
SHA-1也是可攻破的,後被SHA-2和SHA-3所取代
三、完整流程
網上銀行、電子商務使用的驗證流程:
A用戶:
利用哈希函數獲得明文的信息摘要1,利用A的私鑰對摘要1進行數字簽名;
將“明文+數字簽名+A的數字證書”,以某種對稱密鑰進行加密,獲得密文;
利用B的公鑰對此對稱密鑰進行加密,獲得數字信封;
將“數字信封+密文”,發送給B。
B用戶:
將“數字信封+密文”,拆開;
利用B的私鑰進行解密,還原出需要的對稱密鑰;
利用此對稱密鑰對密文進行解密,獲得明文信息;(下面考慮能否信任這個明文,即該明文是否被篡改)
對此明文進行哈希函數運算,得到信息摘要2;
並進行數字簽名驗證,以A的數字證書(即A的公鑰)操作,還原出信息摘要1;
將信息摘要1與信息摘要2進行比較,若相同,則傳送成功,中間未發生錯誤。
問題:數字證書是怎麼生成的?證書的安全性如何保障?見下篇。
四、鑑別
鑑別是要驗證通信的對方確實是自己所要通信的對象,而不是其他的冒充者,並且所傳送的報文是完整的,沒有被其他人篡改過
與授權不同,授權涉及的是所進行的過程是否被允許(如是否可對某文件進行讀或寫)
可把鑑別細分爲兩種:
報文鑑別:鑑別所收到的報文的確是報文的發送者所發送的,而不是其他人僞造的或篡改的,包含端點鑑別和報文完整性鑑別
實體鑑別:僅僅鑑別發送報文的實體,實體可以是一個人,也可以是一個進程,即端點鑑別
區別:
報文鑑別是對每一個收到的報文都要鑑別報文的發送者(前面數字簽名部分,是對每個報文的鑑別)
實體鑑別是在系統接入的全部持續時間內對和自己通信的對方實體只需驗證一次