1. 程式人生 > >雜湊函式和陣列簽名概念

雜湊函式和陣列簽名概念

一、雜湊函式

  也稱為雜湊函式,訊息摘要函式,單向函式或雜湊函式。

1. 作用:

  不是完成資料加密和解密的工作,而是用來驗證資料的完整性的技術。
 如下圖,通過對訊息進行雜湊,然後把訊息和雜湊值hashA一起傳送出去,當接受者收到訊息和雜湊值後,先對訊息進行雜湊,如果雜湊值hashB和接收到的hashA相同,說明資料沒有被更改過,從而保證資料的完整性。
在這裡插入圖片描述

2.特性:
  • 訊息的長度不受限制
  • 確定性:對於相同的輸入(根據同一函式),它必須始終生成相同的雜湊值,如果兩個雜湊值是不相同的,那麼這兩個雜湊值的原始輸入也是不相同的, 但是對於不同的輸入可能會雜湊成相同的輸出(雜湊碰撞),所以不可能從雜湊值來確定唯一的輸入值。
  • 均勻性:良好的雜湊函式應該輸入儘可能均勻的對映到輸出範圍上。
  • 單向性:在加密應用程式中,通常期望雜湊函式實際上是不可逆的。
3.雜湊函式常用演算法有

MD-訊息摘要演算法 SHA-安全雜湊演算法MAC-訊息認證碼演算法。不過現在MD已經被證實存在雜湊碰撞(不同的資料存在相同的MD演算法後相同),所以常用SHA演算法。

二、加密體制

1.對稱加密

   加密和解密的金鑰一樣,比如用123加密就是用123解密,但是實際中密碼都是普通資料在網際網路傳輸的,這樣一點密碼被中間人擷取並破解,加密直接被攻破

2.非對稱加密

   把金鑰分為公鑰和私鑰,公鑰是公開的所有人都可以認領,私鑰是保密的只有一個人知道。假設A要傳送一封Email給B,他不想讓任何其他人在傳輸中看到Email的內容,做法就是使用B的公鑰對Email加密,只有B的私鑰能夠解密(B的私鑰唯一性保證信件不會洩露)

三、數字簽名

  前面已經介紹了通過雜湊函式可以確保資料內容的完整性,但這還遠遠不夠。此外,還需要確保資料來源的可認證性(身份識別)和資料傳送行為的不可否認性(防止抵賴行為)。

數字簽名是雜湊函式和非對稱加密的結合。

1.特性

  即完整性、可認證性和不可否認性。這些正是數字簽名的主要特徵。

2.過程

問題:
  使用非對稱加密 對檔案本身加密可能是個耗時過程,比如這封Email足夠大,那麼私鑰加密整個檔案以及拿到檔案後的解密無疑是巨大的開銷。

數字簽名可以解決這個問題:

1.A先對這封Email執行雜湊運算得到hash值簡稱“摘要”,取名hashA
2.然後用自己私鑰對摘要加密,生成的東西叫“數字簽名”
3.把數字簽名加在Email正文後面,一起傳送給B
(當然,為了防止郵件被竊聽你可以用繼續公鑰加密,這個不屬於數字簽名範疇)
4.B收到郵件後用A的公鑰對數字簽名解密,成功則代表Email確實來自A,失敗說明有人冒充
5.B對郵件正文執行雜湊運算得到hash值,取名hashB
6.B 會對比第4步數字簽名的hash值hashA和自己運算得到的hashB,一致則說明郵件未被篡改。

注意點:只能把私鑰用來簽名,公鑰用來認證。 所以只能由擁有私鑰的人傳送給公鑰的,反之不安全。也稱為單向認證。
如圖所示:
在這裡插入圖片描述

數字簽名滿足了以下的要求:
  完整性:當使用公鑰解密後的訊息與訊息原文相同,則說明訊息是完整的,否則訊息不完整
  不可否認性和可認證性:當訊息原文和加密後的訊息密文一起被 A 傳送給 接收方B 後,接收方B 可以確信資訊確實是傳送方A 傳送的,同時 傳送方A 也不能否認傳送過該資訊,因為除了 A 本人之外,其他任何人都無法由訊息原文產生正確的訊息密文。

3.常用數字簽名演算法

  RSA演算法,DSA演算法。

參考:
https://www.jianshu.com/p/4932cb1499bf
https://www.cnblogs.com/liyutian/p/9525173.html
《Java加密與解密的藝術》