對稱密碼、非對稱密碼、散列算法與PKIgit
密碼學要解決的問題:機密性、完整性、身份驗證(抗抵賴性):算法
1、對稱密碼:安全
對稱密碼技術:發件人和收件人使用其共同擁有的單個密鑰 ,這種密鑰既用於加密,也用於解密,叫作機密密鑰(也稱爲對稱密鑰或會話密鑰)。網絡
可以提供信息機密性(沒有密鑰信息不能被解密)、完整性(被改變的信息不能被解密)的服務。併發
對稱式密碼學又稱:單鑰密碼學、祕密密鑰密碼學、會話密鑰密碼學、私鑰密碼學、共享祕鑰密碼學ide
常見的對稱式加密技術:函數
DES(數據加密標準):分組式加密,算法源於Lucifer,做爲NIST對稱式加密標準;64位(有效位56位、校驗8位),分組算法加密
3DES:128位,分組算法spa
IDEA(國際數據加密算法):128位,比DES快,分組算法3d
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呢?
由此就引入了非對稱密碼。
2、非對稱密碼:
使用一對密鑰:一個用於加密信息,另外一個則用於解密信息。
兩個密鑰之間存在着相互依存關係:即用其中任一個密鑰加密的信息只能用另外一個密鑰進行解密。
其中加密密鑰不一樣於解密密鑰,公鑰加密私鑰解密,反之也可私鑰加密公鑰解密。
密鑰依據性質劃分,將其中的一個向外界公開,稱爲公鑰;另外一個則本身保留,稱爲私鑰。公鑰(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的公鑰解密,如此便實現了機密性和身份驗證。
然而,非對稱算法自己就耗資源,運算速度慢,此處還加密了兩次,對於批量數據是絕對不可接受的,有沒有更好的辦法呢?由此又引入了下面的混合加密:
3、混合加密
混合加密簡單的說就是用非對稱算法交換對稱祕鑰,用對稱密鑰加密數據。
以下:
Alice先隨機生成一個會話密鑰,而後用這個會話密鑰加密消息,再用Bob的公鑰加密會話密鑰,而後把消息密文和會話密鑰密文(數字信封)都發送給Bob,Bob收到消息先用本身的私鑰解密數字信封,獲得會話祕鑰,再用會話密鑰解密消息密文。
注意,這裏不能實現身份驗證,Alice沒法向Bob證實消息是本身發的。
4、散列算法(哈希函數、單向加密)
消息完整性:
有不少協議使用校驗位和循環冗餘校驗(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位,比MD四、MD5慢
MD4:128
MD5:128,比MD4複雜
HAVAL算法:可變,MD5變種
SHA安全散列:SHA-1 160位,SHA-256 256位,SHA-384,SHA-512;
Tiger:192位,比MD五、SHA-1快
RIPEMD-160:160位,MD四、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:
5、公鑰基礎設施(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的公鑰。