對稱密碼、非對稱密碼、雜湊演算法與PKI
密碼學要解決的問題:機密性、完整性、身份驗證(抗抵賴性):
一、對稱密碼:
對稱密碼技術:發件人和收件人使用其共同擁有的單個密鑰 ,這種密鑰既用于加密,也用于解密,叫做機密密鑰(也稱為對稱密鑰或會話密鑰)。
能夠提供資訊機密性(沒有密鑰資訊不能被解密)、完整性(被改變的資訊不能被解密)的服務。
對稱式密碼學又稱:單鑰密碼學、秘密密鑰密碼學、會話密鑰密碼學、私鑰密碼學、共享秘鑰密碼學
常見的對稱式加密技術:
DES(資料加密标準):分組式加密,算法源于Lucifer,作為NIST對稱式加密标準;64位(有效位56位、校驗8位),分組算法
3DES:128位,分組算法
IDEA(國際資料加密算法):128位,比DES快,分組算法
Blowfish:32-448位,算法公開,分組算法
RC4:流密碼,密鑰長度可變
RC5:分組密碼,密鑰長度可變,最大2048位
Rijndael:128位/196位/256位
AES(進階加密标準):DES更新版,算法出自Rinjindael
對稱密碼的優點:
使用者隻需記憶一個密鑰,就可用于加密、解密;
與非對稱加密方法相比,加密解密的計算量小,速度快,簡單易用,适合于對海量資料進行加密處理 。
對稱密碼的缺點:
如果密鑰交換不安全,密鑰的安全性就會喪失。特别是在電子商務環境下,當客戶是未知的、不可信的實體時,如何使客戶安全地獲得密鑰就成為一大難題。
如果使用者較多情況下的密鑰管理問題。N*(N-1)/2
如果密鑰多個使用者被共享,不能提供抗抵賴性
例如:
假設Alice和Bob是認識的,兩人為了保證通信消息不被其它人截取,預先約定了一個密碼,用來加密在他們之間傳送的消息,這樣即使有人截取了消息沒有密碼也無法知道消息的内容。由此便實作了機密性。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCM581dvRWYoNHLwEzX5xCMx8FesU2cfdGLwATMfRHLGZkRGZkRfJ3bs92YskmNhVTYykVNQJVMRhXVEF1X0hXZ0xiNx8VZ6l2cssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2ITO5YTM2UTMycTN3ETNx8CXyAjMwgTMwIzLcNXZnFWbp9CXvwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
但是,以上的實作過程存在以下問題:
1):如果Alice和Bob是在網際網路中彼此不認識的,那麼Alice該如何和Bob協商(或者說傳送)共享密鑰(密碼)?
2):如果Alice要和100個人通信,他需要記住多少個密碼?和1000個、10000個人......通信呢?
3):如果Alice和其它人通信使用了和Bob相同的密碼,那麼如何知道這個消息一定是來自Bob呢?
由此就引入了非對稱密碼。
二、非對稱密碼:
使用一對密鑰:一個用于加密資訊,另一個則用于解密資訊。
兩個密鑰之間存在着互相依存關系:即用其中任一個密鑰加密的資訊隻能用另一個密鑰進行解密。
其中加密密鑰不同于解密密鑰,公鑰加密私鑰解密,反之也可私鑰加密公鑰解密。
密鑰依據性質劃分,将其中的一個向外界公開,稱為公鑰;另一個則自己保留,稱為私鑰。公鑰(Public key)常用于資料加密(用對方公鑰加密)或簽名驗證(用對方公鑰解密),私鑰(Private key)常用于資料解密(發送方用接收方公鑰加密)或數字簽名(用自己私鑰加密)。
機密性、完整性、抗抵賴性
常見的非對稱式加密技術:
Diffie-Hellman :最早産生,計算離散對數,是一種密鑰交換協定算法,不加密、不産生數字簽名。
第一個非對稱密鑰協商算法,重點解決密鑰分發問題
基于“有限域上的離散對數計算困難”的難題
通信雙方在不可信的網絡上交換他們彼此的公鑰,再在各自的系統上生成相同的對稱密鑰。
最初的Diffie-Hellman算法容易遭受到中間人攻擊,應對這種攻擊的方法是在接受某人的公鑰前進行身份驗證。
不提供加密、數字簽名功能。
RSA:大素數分解,可加密,可簽名
EI Gamal :離散對數,可加密,可簽名,最慢
橢圓曲線:計算離散對數,功能與RSA相似,更快
DSA:EI的變種,離散對數,不加密,可簽名,比RSA慢
背包:背包算法,可加密,可簽名,已淘汰
DSS:數字簽名标準
如下:
首先,Alice為了保證消息的機密性,用Bob的公鑰加密了資料,這樣就隻能用Bob的私鑰解密消息,是以隻有Bob才能看到消息。
這固然實作了機密性,然而Bob如何驗證消息是來自Alice呢,因為任何人都可以得到Bob的公鑰。由此就有了下面這種方式:
Alice為了向Bob證明消息确實是她發的,就用自己的私鑰加密消息然後發送給Bob,Bob用Alice的公鑰解密了消息,于是知道了消息的确是Alice發的,因為隻有用Alice私鑰加密的消息才能用她的公鑰解密。
這樣便實作了身份驗證,然而任何人都可以用Alice的公鑰來解密消息,這樣機密性又無從保證了,于是又有了下面這種方式:
Alice先用自己的私鑰加密資料(實作身份驗證),然後再用Bob的公鑰再次加密剛才加密過的消息密文(實作機密性),然後發送給Bob,Bob先用自己的私鑰解密,再用Alice的公鑰解密,如此便實作了機密性和身份驗證。
然而,非對稱算法本身就耗資源,運算速度慢,此處還加密了兩次,對于批量資料是絕對不可接受的,有沒有更好的辦法呢?由此又引入了下面的混合加密:
三、混合加密
混合加密簡單的說就是用非對稱算法交換對稱秘鑰,用對稱密鑰加密資料。
Alice先随機生成一個會話密鑰,然後用這個會話密鑰加密消息,再用Bob的公鑰加密會話密鑰,然後把消息密文和會話密鑰密文(數字信封)都發送給Bob,Bob收到消息先用自己的私鑰解密數字信封,得到會話秘鑰,再用會話密鑰解密消息密文。
注意,這裡不能實作身份驗證,Alice無法向Bob證明消息是自己發的。
四、雜湊演算法(哈希函數、單向加密)
消息完整性:
有很多協定使用校驗位和循環備援校驗(Cyclic Redundancy Check,CRC)函數來檢測位流從一台計算機傳送到另一台計算機時是否被更改。但校驗位和循環備援校驗通常隻能檢測出無意的更改。
如果消息被入侵者截獲,在更改之後重新計算校驗值,這樣接收方永遠也不會知道位流被篡改。為了實作這種保護,需要采用雜湊演算法來檢測有意或無意的對資料的未授權更改。
Hash(哈希)函數(也稱為散列函數):輸入可以是任何長度消息,通過一個單向的運算産生一個定長的輸出。這個輸出被稱之為Hash值(散列值,也被稱為哈希摘要),其具有以下特點:
Hash值應是不可預測的。
Hash函數是單向函數,不可逆。
Hash函數具有确定性(唯一性),對于輸入X應該總是産生相同的輸出Y。
尋找任何(x,y)對使得H(x)=H(y),在計算上不可行(強無碰撞,抗“生日攻擊”)
對任何給定分組x,尋找不等于x的y,使得H(y)=H(x),在計算上不可行(弱無碰撞)
散列的種類:
MD2:128位,比MD4、MD5慢
MD4:128
MD5:128,比MD4複雜
HAVAL算法:可變,MD5變種
SHA安全散列:SHA-1 160位,SHA-256 256位,SHA-384,SHA-512;
Tiger:192位,比MD5、SHA-1快
RIPEMD-160:160位,MD4、MD5的替代
Alice使用雜湊演算法對消息計算出消息摘要1,然後把消息摘要1附在消息明文後面一并發送給Bob,Bob收到消息後使用相同的雜湊演算法對消息明文計算出消息摘要2,然後和消息摘要1比較,如果相同則表示消息未遭到篡改。
但簡單的這樣做并不能實作真正的完整性,假如有人在中間截獲消息修改後重新計算消息摘要附在後面,Bob依然認為消息未遭到篡改。同時也不能實作身份驗證,于是便有了數字簽名:
數字簽名:
數字簽名是指使用者用自己的私鑰對原始資料的哈希摘要(Hash digest)進行加密所得的資料。
資訊接收者使用資訊發送者的公鑰對附在原始資訊後的數字簽名進行解密後獲得哈希摘要。通過與自己用收到的原始資料産生的哈希摘要對照,以确認以下兩點:
資訊是由簽名者發送的(身份驗證、不可抵賴性)
資訊自簽發後到收到為止未曾信得過任何修改(完整性)
數字簽名标準 :
在1991年,NIST提議了一個為數字簽名标準(Digital Signature Standard,DSS)的聯邦标準 FIPS 186( 使用SHA),它最近一次更新實在2013年,作為FIPS 186-4被釋出,包括了DSA、RSA、ECC
DSS有兩種建立簽名的方法DSA和RSA。與RSA不同,DSA隻能用于數字簽名,并且比RSA慢,RSA能夠用于數字簽名、加密以及密鑰分發。
Alice用雜湊演算法計算出消息摘要,然後用自己的私鑰加密消息摘要(數字簽名),然後将消息明文和數字簽名一起發送給Bob,Bob收到消息用Alice 的公鑰解密數字簽名得到原消息摘要(驗證了Alice的身份),用相同的雜湊演算法對消息計算消息摘要,然後将兩個消息摘要進行比較,如果消息摘要相同則表示消息沒有遭到篡改。
注意:這裡假如有第三者Tom進行中間人攻擊,他可以篡改消息,也可以重新計算消息摘要,但是Tom卻沒有Alice的私鑰來加密消息摘要,此時如果Tom用自己的私鑰加密消息摘要,當Bob收到消息後用Alice的公鑰将無法解密數字簽名得到消息摘要原文。
綜上,不能算法的不同功能:
從上面可以看出,在這些實作過程中,公鑰至關重要,那麼我們又如何驗證使用者的公鑰,就像本文的例子中,Alice如何得到Bob的公鑰,得到公鑰後又如何驗證這個公鑰就是Bob的?此時就需要一個雙方都信任的第三方機構,由此引入PKI:
五、公鑰基礎設施(PKI)
PKI是由軟體、通信協定、資料格式、安全政策等用于使用、管理、控制公鑰密碼體制的一套系統。它主要有三個目的:釋出公鑰/證書,證明綁定公鑰的實體,提供一個公鑰有效性的驗證。
PKI提供基本服務:
機密性
完整性
通路控制
真實性
不可否認性
數字證書:
PKI技術采用證書管理公鑰,通過第三方的可信任機構認證中心CA (Certificate Authority),把使用者的公鑰和使用者的其他辨別資訊(如名稱、email、×××号等)捆綁在一起,在Internet網上驗證使用者的身份。
公鑰證書是以數字方式簽名的聲明,它将公鑰的值與持有相應私鑰的主體(個人、裝置和服務)的身份綁定在一起。通過在證書上簽名,CA可以核實與證書上公鑰相應的私鑰為證書所指定的主體所擁有。
數字證書的格式是由CCITT X.509國際标準所規定的,它包含了以下幾點:
證書擁有者的姓名
證書擁有者的公鑰
公鑰的有效期
頒發數字證書的機關
數字證書的序列号(Serial number)
CA的名稱,并用CA的數字簽名簽署該證書
CA所遵循的用來确定證書主體身份政策的辨別符
在證書中辨別的密鑰對(公鑰及相關的私鑰)的用法
證書廢止清單(CRL)的位置
ITU-T X.509并非證書的惟一格式。例如,Pretty Good Privacy (PGP)安全電子郵件是依賴PGP所獨有的一種證書。
CA:
負責發放和管理數字證書的權威機構
具體功能:
接收驗證RA轉發來的最終使用者數字證書的申請。
确定是否接受最終使用者數字證書的申請-證書的審批。
生成密鑰對和證書
向申請者頒發證書
為簽發的證書提供組織與責任的權威公證
接收最終使用者數字證書的查詢、撤銷。
産生和釋出證書廢止清單(CRL)
密鑰管理(密鑰備份、密鑰恢複、密鑰更新)
數字證書的歸檔。
密鑰歸檔
曆史資料歸檔。