天天看點

加解密算法、消息摘要、消息認證技術、數字簽名與公鑰證書

  本文講解對稱加密、非對稱加密、消息摘要、MAC、數字簽名、公鑰證書的用途、不足和解決的問題。

0.概述

  當發送方A向接收方B發送資料時,需要考慮的問題有:

  1.資料的安全性。

  2.資料的完整性,即資料不被篡改。

  3.資料的真實性,即資料确實來自于發送方,傳輸過程中沒有被替換。

  4.資料的不可否認性,即驗證發送方确實發送了資料。

  本文隻是對整套體系做一個整體的介紹,後續文章詳細講解各個步驟和算法。

  本文的整體結構見下圖。

加解密算法、消息摘要、消息認證技術、數字簽名與公鑰證書

  基本概念: 

  密碼:按特定法則編成,用以對通信雙方的資訊進行明密變換的符号。

  密鑰:在現代密碼學中,秘鑰指的是一組特定的秘密資料,在加密時,它控制密碼算法按照指定的方式将明文變換為相應的密文,并将一組信源辨別資訊變換不可僞造的簽名;在解密時,它控制密碼算法按照指定的方式将密文變換為相應的明文,并将簽名資訊變換成不可否認的信源證據。

1.資料傳輸的安全

  保證資料傳輸安全的方法就是對資料進行加密了,常用的加密算法有對稱加密和非對稱加密。

1.1 對稱加密

  又稱共享加密,加解密使用相同的密鑰。

常見算法:

  DES 3DES AES RC5 RC6

例:

  1).為了安全,A将資料加密發送給B。

  2).密文即使在傳送過程中被截獲,因為不知道密鑰也無法解密。

  3).B接收到密文之後,需要使用加密相同的密鑰來解密。

  4).需要A将密鑰傳給B,但保證密鑰傳輸過程中的安全又成了問題。

優點:

  計算速度快。

缺點:

  為了傳送資料的安全,将資料加密後進行傳輸,但是對稱加密需要發送方将密鑰安全地傳給接收方以便接收方解密,是以密鑰如何安全傳送又成了一個問題。

問題:

  如何保證密鑰的安全性?

1.2 非對稱加密

  也稱公鑰加密,這套密鑰算法包含配套的密鑰對,分為加密密鑰和解密密鑰。加密密鑰時公開的,又稱為公鑰;解密密鑰時私有的,又稱為私鑰。資料發送者使用公鑰加密資料,資料接收者使用私鑰進行資料解密。

  RSA

  1).B生成密鑰對,将公鑰傳給A,私鑰自己保留。公鑰即使被其他人獲得也沒有關系。

  2).A用B傳過來的密鑰将要發送的明文資料加密,然後将密文發送給A。其他人即使獲得密文也無法解密,因為沒有配對的用來解密的私鑰。

  3).B接收到A傳送過來的密文,用自己保留的私鑰對密文解密,得到明文。

  解決了密鑰的安全性問題。

  一是計算速度慢;

  二是無法保證公鑰的合法性,因為接收到的公鑰不能保證是B發送的,比如,攻擊者截獲B的消息,将公鑰替換。

  這裡先留下一個問題,後面叙述解決辦法:如何保證公鑰是合法的?

2.保證資料完整性

消息摘要

  消息摘要函數時一種用于判斷資料完整性的算法,也稱為散列函數或哈希函數,函數的傳回值就散列值,散列值又稱為消息摘要或者指紋。

  這種算法是不可逆的,即無法通過消息摘要反向推導出消息,是以又稱為單向散列函數。

  MD5 SHA

  當我們使用某一軟體時,下載下傳完成後需要确認是否是官方提供的完整版,是否被人篡改過。通常軟體提供方會提供軟體的散列值,使用者下載下傳軟體之後,在本地使用相同的雜湊演算法計算散列值,并與官方提供的散列值向對比。如果相同,說明軟體完整,未被修改過。

  可以保證資料的完整性。

  無法保證資料的真實性,即不能确定資料和散列值是來自發送方的,因為攻擊者完全可以将資料和散列值一起替換。

  如何驗證發送的資料确實來自于發送方?

3.保證資料的真實性

  要保證資料來自發送方,即确認消息來自正确的發送者,稱為消息認證。

3.1 消息認證碼

  消息認證碼(Message Authentication Code,簡稱MAC)是一種可以确認消息完整性并進行認證的技術。消息認證碼可以簡單了解為一種與密鑰相關的單向散列函數。

  1).A把消息發送給B前,先把共享密鑰發送給B。

  2).A把要發送的消息使用共享密鑰計算出MAC值,然後将消息和MAC發送給B。

  3).B接收到消息和MAC值後,使用共享密鑰計算出MAC值,與接收到的MAC值對比。

  4).如果MAC值相同,說明接收到的消息是完整的,而且是A發送的。

  這裡還是存在對稱加密的密鑰配送問題,可以使用公鑰加密方式解決。

  可以保證資料的完整性和真實性。

  接收方雖然可以确定消息的完整性和真實性,解決篡改和僞造消息的問題,但不能防止A否認發送過消息。

  加入A給B發送了消息,B接收到之後,A否認自己發送過消息給B,并抵賴說,“雖然我和B都能計算處正确的MAC值,但是可能是B的密鑰被攻擊者盜取了,攻擊者給B發的消息。”

  如何讓發送方無法否認發送過資料?

3.2 數字簽名

  數字簽名(Digital Signature)可以解決發送方否認發送過消息的問題。

  數字簽名的重點在于發送方和接收方使用不同的密鑰來進行驗證,并且保證發送方密鑰的唯一性,将公鑰算法反過來使用可以達到此目的:A發送消息前,使用私鑰對消息進行簽名,B接收到消息後,使用配對的公鑰對簽名進行驗證;如果驗證通過,說明消息就是A發送的,因為隻有A采用配對的私鑰;第三方機構也是依據此來進行裁決,保證公正性。

  1).A把消息用哈希函數處理生成消息摘要,并報摘要用私鑰進行加密生成簽名,把簽名和消息一起發送給B。

  2). 資料經過網絡傳送給B,當然,為了安全,可以用上述的加密方法對資料進行加密。

  3). B接收到資料後,提取出消息和簽名進行驗簽。采用相同的哈希函數生成消息摘要,将其與接收的簽名用配對的公鑰解密的結果對比,如果相同,說明簽名驗證成功。消息是A發送的,如果驗證失敗,說明消息不是A發送的。

  依然是,如何確定公鑰的合法性?

4.公鑰證書

  我們看到,上面的公鑰加密,數字簽名的問題都在于如何保證公鑰的合法性。

  解決辦法是将公鑰交給一個第三方權威機構——認證機構(Certification Authority)CA來管理。接收方将自己的公鑰注冊到CA,由CA提供數字簽名生成公鑰證書(Public-Key Certificate)PKC,簡稱證書。證書中有CA的簽名,接收方可以通過驗簽來驗證公鑰的合法性。

  1).接收方B生成密鑰對,私鑰自己儲存,将公鑰注冊到CA。

  2).CA通過一系列嚴格的檢查确認公鑰是B本人的。

  3).CA生成自己的密鑰對,并用私鑰對B的公鑰進行數字簽名,生成數字證書。證書中包含B的公鑰和CA的簽名。這裡進行簽名并不是要保證B的公鑰的安全性,而是要确定公鑰确實屬于B。

  4).發送方A從CA擷取B的證書。

  5).A使用CA的公鑰對從CA擷取的證書進行驗簽,如果成功就可以確定證書中的公鑰确實來自B。

  6).A使用證書中B的公鑰對消息進行加密,然後發送給B。

  7).B接收到密文後,用自己的配對的私鑰進行解密,獲得消息明文。

5.算法詳解

 DES算法詳解