1. 程式人生 > >對稱密碼、非對稱密碼、散列算法與PKI

對稱密碼、非對稱密碼、散列算法與PKI

pem 商務 包括 sign 51cto idea 重新 digest ima

對稱密碼、非對稱密碼、散列算法與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是認識的,兩人為了保證通信消息不被其它人截取,預先約定了一個密碼,用來加密在他們之間傳送的消息,這樣即使有人截取了消息沒有密碼也無法知道消息的內容。由此便實現了機密性。

技術分享圖片

但是,以上的實現過程存在以下問題:

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)

密鑰管理(密鑰備份、密鑰恢復、密鑰更新)

數字證書的歸檔。

密鑰歸檔

歷史數據歸檔。


簡單的說,PKI實現的功能就是用一個大家都信任的機構CA給用戶頒發一個數字證書,證書中包含用戶的公鑰(這個公鑰可以是用戶自己生成的提交給CA的也可以是CA生成發給用戶的)及相關身份信息。以本文的Alice和Bob為例,Alice為了向Bob證明自己是Alice和某個公鑰是自己的,她便向一個Alice和Bob都信任的CA機構申請證書,Alice先自己生成了一對密鑰對(私鑰和公鑰),把自己的私鑰保存在自己電腦上,然後把公鑰給CA申請證書,CA接受申請於是給Alice頒發了一個數字證書,證書中包含了Alice的那個公鑰以及其它身份信息,當然,CA會計算這些信息的消息摘要並用自己的私鑰加密消息摘要(數字簽名)一並附在Alice的證書上,以此來證明這個證書就是CA自己頒發的。Bob得到Alice 的證書後用CA的證書(自簽署的)中的公鑰來解密消息摘要,這樣就確認Alice的證書是CA發的,證書中的信息未遭到篡改,同時也得到了Alice的公鑰。


對稱密碼、非對稱密碼、散列算法與PKI