安全體系(零)—— 加解密演算法、訊息摘要、訊息認證技術、數字簽名與公鑰證書
鋒影
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.待定