您好,登錄后才能下訂單哦!
理解加密算法和DH算法
理解加密算法
一個完整的加密方法由很多因素組成,但是最關鍵的兩個因素是加密算法和密鑰。加密算法通常是非常復雜的數學公式,這些公式確定如何將明文轉化為密文的運作過程與規則。密鑰是一串被加入到算法中的隨機比特,若要使兩個加密點之間進行加密的通信,必須使用相同的加密算法。而且在某些時候他們需要使用相同的密鑰(對稱式加密),當然在很多時候兩者使用不同的密鑰來進行加密或者解密(非對稱加密)。
下面描述對稱式加密算法和非對稱式加密算法:
對稱式加密:會使用同一把密鑰來加密和解密數據。
舉一個簡單的例子來說明這個問題,就是好比一把鎖和一把鑰匙,大家都知道,鎖門的時候用的時候用哪一把鎖頭,就要用鎖門時用的鑰匙來開這一把鎖,這就是對稱式加密算法。其實對稱式加密算法挺簡單的,那我們來看一下:
對稱式加密算法的優點:
對稱式加密算法的缺點:
對稱式加密算法需要一個安全的機制來分發密鑰。。為什么呢?因為每一個使用者都需要一對唯一的密鑰,因此密鑰的數量會隨著使用者增加成倍的增加,這對密鑰的管理造成了很大難度。
使用對稱式加密只能保證數據的機密性,也就是說只能保證數據不被看到,但是他不能提供對數據的認證和防抵賴性。什么意思呢?你用對稱式加密對數據加密以后,不能保證數據在傳輸的過程中被更改,也不能確定這數據是不是你需要的那個用戶A加密的。
對稱式加密的標準:des ,3des,aes
非對稱式加密
非對稱加密算法使用兩把不同的密鑰,一把叫做公開的密鑰,一把叫做私有密鑰,那么這兩把密鑰是不同的密鑰,但是他們必須成對使用,如果你用公鑰來加密數據,那么只能使用這把公鑰對應的私鑰來解密,如果用私鑰來加密了數據,那么只能使用這把私鑰對應的公鑰來解密。雖然他們是兩把不同的密鑰,但是他們之間存在著復雜的數學關聯,他們是有關系的,因為加密的過程中,我們使用了兩把不同的密鑰,所以我們把這種加密方式稱之為非對稱加密算法。
那非對稱式加密是怎么用的呢?具體過程中需要注意一些什么呢?
首先要說明一個問題,在非對稱加密算法中指的加密還有更深層的意義:
以下通過兩個例子來說明兩個問題:
1. 如何利用非對稱式秘鑰來保證數據的機密性
2. 如何利用非對稱式密鑰來保證數據的完整性和防抵賴性
使用非對稱式密鑰來保證數據的機密性
第一步:首先在用戶A和用戶B保存自己使用的公鑰和私鑰,然后,他們倆將彼此的公鑰進行交換,這個過程叫密鑰交換。事實上,公鑰是可公開的,所以交換公鑰不會造成任何安全威脅。注意私鑰不能用作公開,交換,或者是網絡傳遞。
第二步:經過公開密鑰(公鑰)的交換后,用戶A成功的獲得用戶B的公鑰,然后使用用戶B的公鑰來加密數據,然后將加密后的數據通過網絡傳給用戶B,此時如果網絡上有第三方的竊聽者截獲了這段加密的數據,他將無法獲取數據的內容,因為第三方沒有用戶B的私鑰,使用用戶B的公鑰加密的數據只有用戶B的私鑰可解密。用戶B的私鑰是不可公開的,所以這個過程保障了數據的機密性。
第三步:當數據到達用戶B處時,用戶B使用自己的私鑰解密文件,可讀取文件的內容,如果用戶B要回送機密消息給用戶A則使用用戶A的公鑰來加密回送文件。
這是一種使用接收方的公鑰來加密數據的方式,他的特點如下:
1. 能保障消息的私密性,只有接受者可以閱讀消息內容,因為只有接收者具備解密的私鑰
2. 無法提供來源可靠性的認證,因為公鑰是可以公開的,任何人都可能得到接收者的公鑰,那么如何保障來源的可靠性呢?
第二個例子
用戶A要給用戶B發送一個文檔,但是這個文檔不需要太高的機密保障但是絕對不能讓人修改,并且要讓用戶B相信這個文檔就是用戶A發的,而不是張三李四發的,那這個怎么做呢?用戶A可以使用自己的私鑰去加密這個文檔,注意,用私鑰加密,私鑰是不會再網絡上傳輸的,其實這個加密的過程,是對數據內容作了一個完整性驗證和防抵賴的認證,并不是確保它的私密性。然后在網絡上去傳輸數據,但不會傳輸私鑰。如果網絡上有中間人***,截獲數據,擁有用戶A的公鑰就可以讀到這個文檔,因為公鑰具有公開性,任何人都可能會獲得用戶A的公鑰,拿到用戶A的公鑰就可以讀到這個文檔了。但是讀歸讀,但是你不能修改文檔的內容,不能改變一個事實,這個文檔是用戶A發出來的,現在的電子交易就要用到了這個特性,當用戶B收到數據之后拿用戶A的公鑰解密這個文檔,確認文檔沒有被篡改,也確認是用戶A發送的文檔。
這是一種使用發送方的私鑰來加密數據的方式,它的特點如下:
1,不能保證消息的私密性,被稱為公開消息格式。為什么呢?因為每一個具備該公鑰的人都可以解密該消息。
2,可以保證消息來源的可靠性認證功能,因為發送者使用私鑰加密,私鑰只有發送者本人具備。而且中間人不能篡改消息,因為他沒有發送者的私鑰。
注意:在非對稱加密過程中,每一種密鑰類型都可以用來加密和解密,所以不要誤認為公鑰只能用來加密,私鑰只能用來解密,事實上它們都具有加密和解密的能力,取舍在于你重點需要的是機密性還是完整性。
非對稱加密的優點
1. 與對稱加密相比較,有更好的密鑰分發功能。為什么呢?只要有證書服務器架構的話,就可以有一臺專用的服務器,專門來管理這個公鑰,下發和注冊以及合法性認證等等。
2.比對稱式加密更具有擴展性,
3.能夠提供來源認證和防抵賴性,
當然也可提供一定的私密性,但是有一些小的問題。
非對稱加密的缺點:
1.非對稱加密的速度比對稱式加密更慢,
有一個問題,無論是用用戶A是還是用用戶B的公鑰來加密,如果是面對海量的數據,采用非對稱加密速度不是變的更慢了嗎?那怎么辦呢?效率會很低,既然效率很低,為什么還用非對稱式加密呢?因為非對稱式更安全,它的可管理型更好,擴展性更好,它有來源認證,防抵賴性,還可以支持第三方的認證機構。那這個問題如何解決?使用混合的加密方案來解決這個問題。
2.非對稱加密算法的數學模型比較復雜。
非對稱加密的標準:RSA,ECC,DH,EIGANAL ,DSA等等
混合的加密方案:由于對稱式密鑰和非對稱式密鑰各自具備自己的優點和缺點,那最好的一個解決方案是使用混合式加密方案,其實也挺簡單的,就是讓對稱式密鑰加密數據,在用非對稱式密鑰來加密對稱式密鑰,這樣既保證了數據加密的速度,也保證了加密的安全性。既同時使用對稱式密鑰和非對稱式密鑰。
理解DH算法:
我們剛才提到了對稱式加密的優點是:速度塊,即便是有很多的缺點,但是人們在將加密算法直接與數據結合的時候,還是首先選擇的是對稱式加密,然后用非對稱式加密來解決對稱式加密的3大缺陷:安全性服務,擴展能力,安全密鑰的傳送。那這些怎么理解呢?我們首先來回憶一下,混合式加密算法:首先有一個A用戶,一個B用戶,A用戶使用一個對稱式加密來加密我們的數據,然后在使用非對稱式加密(既使用B的公鑰來加密對稱式密鑰),最后把文件傳送到B用戶這里,B用戶用自己的私鑰來解密這個被自己公鑰加密的對稱式密鑰,然后再用對稱式密鑰來解密數據。那為什么要用對稱式密鑰加密數據呢?不用非對稱式密鑰當中的公鑰呢?原因很簡單,非對稱式加密的速度慢,對稱式加密的速度快。在實際的解決方案中已經沒有使用單純的加密解決方案,都會使用混合的加密方案。要考慮加密的速度和密鑰的管理以及實現更高的安全性都會使用混合式的解決方案。在混合式的解決方案中A如何獲得B的公鑰,因為公鑰是可以公開的,B可以把自己的公鑰傳給A,但是在混合解決方案中,對數據加密和解密時使用對稱式密鑰,這個密鑰是一樣的,那這個對稱式密鑰,B是如何獲得的呢?你又如何去保證加密和解密的數據的密鑰是一樣的呢?想過這個問題嗎?難道是把這個對稱式密鑰傳給對方嗎?這樣做肯定是不行的。
在很早以前,對稱式密鑰的發送是一個很大的問題,因為他需要機密的情報人員將密鑰送達到目標處,所以咱們看諜戰片時,都聽說過這樣一件事,就是密碼本,對端也要用相同的密碼本才能夠解密數據,萬一情報人員被俘虜了,那安全性怎么保障?如果把這個理念用在現今的網絡當中,直接在網絡上傳輸這個密碼本,那就錯上加錯了。中間安放協議分析器,就能夠解密數據了,所以這個對稱式密鑰一定不能在網絡上傳輸,所以我們要使用安全的方式將作用于數據的對稱式密鑰給算出來,這個安全的方式就是迪非-赫爾曼算法,這個算法到底是干嘛的呢?它解決了一個什么問題?解決了使用對稱式密鑰加密過程中對稱式密鑰的安全的傳送問題叫迪非-赫爾曼呢的原因是由這兩位兩位科學家開發的算法,所以命名為DH。
DH是一種確保對稱式密鑰安全穿越不安全網絡的方法。就是使用DH算法來保障安全密鑰的傳送。
在DH算法中,對稱密鑰是沒有在網絡中傳輸的,他是通過初始化發送一個偌大的整數,生成一個隨機數和自己的私鑰,在使用數學算法生成一個公鑰,然后再次交換公鑰,然后再次使用第五部的計算最后算出K的值既對稱密鑰。
第一步:用戶A上產生一個大的整數P,并將這個P發送給用戶B,用戶B上產生一個大整數Q,并把Q發送給對等體A;用戶A接受Q生成g;用戶B接受P生成g.
第二步:用戶A生成私鑰XA,用戶B生成私鑰XB
第三步:用戶A通過YA=g^XAmodP公式進行計算生成用戶A的公鑰YA,同理用戶B生成公鑰YB。此時的用戶A和B就分別擁有了自己的公鑰和私鑰對。
第四步:因為在非對稱式加密系統中,公鑰是可以公開的,所以用戶A和B相互交換彼此的公鑰,那么A用戶就具備用戶B的公鑰YB,用戶B就具備用戶A的公鑰YA.
第五步:用戶A將使用用戶B的公鑰結合自己的私鑰使用公式計算出對稱式密鑰K,用戶B使用相同的公式計算出與用戶A相同的對稱式密鑰K,然后使用密鑰K來加密數據。
所謂對稱式密鑰安全的穿越網絡,并不是將對稱密鑰拿到網絡上傳輸,而是通過上述的DH的算法,在彼此發送一個大的隨機數后,接收方計算出對稱式密鑰。通過這個過程來保障對稱密鑰安全的穿越網絡,只是把對稱式秘鑰給計算出來,完成公共密鑰的交換,但是DH算法不提供加密和數字鑒別功能。那這兩個功能怎么樣提供呢?那就要繼續關注DH算法的安全問題了。
學習DH算法必須要清晰的知道兩點:
1.DH算法的一個目的是用于密鑰交換,這里的密鑰指的公共密鑰<公鑰>的交換,然后經過交換了的公鑰,結合自己的私鑰在進行取摸運算,雙方算出一個K值<對稱式密鑰>,也就是我們常說的會話密鑰,這個會話密鑰是干嘛的?當然是作用于數據的。因為他作用于數據的速度最快,使用對稱式密鑰加密了數據之后,就可以用B的公鑰加密會話密鑰,最后會話密鑰的傳遞就會很安全,傳到B之后,B就用自己的私鑰來解密被他公鑰加密的會話密鑰也就是對稱式密鑰解密,然后用對稱式密鑰來解密數據。這就是一個簡單的加密過程。
下來繼續關注DH算法的安全問題,這部分內容可以作為補充內容提交給大家。
DH算法的一個特點是A必須要得到B的公鑰,B必須得到A的公鑰,那用戶A敢保證給自己發公鑰YB的就是用戶B,而不是其他非法用戶呢?那如果給A發公鑰的是一個***,那用戶就會和***計算對稱式秘鑰。這個道理很好懂。
其實,即使別人知道P或g,它也很難通過計算來得到對稱式秘鑰K,因為對大的整數的因式分解非常困難,但是第四步即公鑰交換的過程中存在一個安全風險,這個安全風險是,當用戶A向用戶B發送公鑰時被非法用戶C截取,同理用戶B向用戶A發送公鑰也被非法用戶C截取,此時用戶A和用戶B都無法成功的收到對方的公鑰。對于用戶A而言,用戶C就偽造為用戶B的身份將自己的公鑰發送給用戶A,用戶A誤認為非法用戶C就是B,所以與用戶C形成了對稱式秘鑰K A,同理B也與用戶C形成對稱式秘鑰KB,那么非法用戶C就同時擁有了用戶A和B的對稱式密鑰KA和KB。當用戶A和B之間傳輸數據時,用戶C就可以使用對稱式秘鑰解密數據,這將造成很大的安全風險。
雖然要成功的實施上述關于用戶C的欺騙行為很難,但是并不排除發生這種可能性,所以需要一種方法在DH算法過程中交換公鑰時對彼此進行身份驗證,比如使用數字簽名,那么在DH消息交換的過程中,使用RSA來進行數字簽名。也就是說數字簽名可以向A保證B的身份,能夠讓A相信,發給我公鑰的就是用戶B ,而不是其他非法用戶,RSA是實現數字簽名的方式,同時它還需一種架構來保證彼此公鑰的可信的程度。例如我們給淘寶付錢,淘寶要我們加密,我怎么確保我正在使用淘寶的公鑰加密,難道不可以是別人的公鑰嗎?當然我的確是使用淘寶的公鑰來加密,數據傳送到淘寶那里去的時候,淘寶就可以用自己的私鑰來解密,但是我萬一加密的是別人的公鑰,那你的錢就付到別人那里去了。
因為DH只做兩樣事情:交換秘鑰,算出相同的對稱式密鑰。而這兩個過程中是沒有保障的,它不能通過某種方式確定對方的身份。所以我們用RSA<數字簽名>保障DH算法的過程。
RSA是用于數字簽名,秘鑰交換和加密的標準,RSA的好處就是RSA即可以用于加密也可以用于數字簽名。RSA彌補了DH的無法生成數字簽名。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。