1. 程式人生 > >安全體系(零)—— 加解密演算法、訊息摘要、訊息認證技術、數字簽名與公鑰證書

安全體系(零)—— 加解密演算法、訊息摘要、訊息認證技術、數字簽名與公鑰證書

鋒影

email:[email protected]

如果你認為本系列文章對你有所幫助,請大家有錢的捧個錢場,點選此處贊助,贊助額0.1元起步,多少隨意

本文講解對稱加密、非對稱加密、訊息摘要、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.演算法詳解索引

   1.DES演算法詳解(已完成)

  2.RSA演算法詳解

  3.SHA演算法詳解

  4.AES演算法詳解

  5.待定