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