密鑰配送問題
問題緣由
之前講的分組密碼算法是使用的對稱密鑰,也就是說加密和解密用的同一個(gè)密鑰。如果兩個(gè)人通信。其中一個(gè)是發(fā)送者,一個(gè)是接收者,這兩者之間要正常通信,就必須同時(shí)知道這個(gè)密鑰。這就是密鑰配送問題的由來。
配送問題解決辦法
- 事先共享密鑰。這個(gè)很容易理解,例如先用人把密鑰告訴對方。問題也很明顯,每次通話都需要不同的密鑰,那么密鑰數(shù)量是海量的。這會導(dǎo)致人力根本無法晚成。
-
通過密鑰中心分配。簡單的說是通過一個(gè)中心服務(wù)器進(jìn)行分配密鑰。這個(gè)解決辦法帶出會話密鑰的概念。具體的方式如下:
1、中心服務(wù)器為每一個(gè)人分配唯一一個(gè)私有的密鑰
2、A和B需要通信,就向中心服務(wù)器申請一個(gè)臨時(shí)的會話密鑰
3、中心服務(wù)器把會話密鑰分別用A和B的私有密鑰進(jìn)行加密,然后發(fā)送給A和B
4、A和B接收到會話密鑰的密文后,用自己的私有密鑰進(jìn)行解密獲得會話密鑰,再用會話密鑰進(jìn)行通信。
問題。全部人員所有通信密鑰都產(chǎn)生于一個(gè)地方,這個(gè)地方的壓力就相當(dāng)大,而且一旦此服務(wù)器壞掉,則所有人員無法通信。 - Diffie-Hellman密鑰交換解決辦法。這個(gè)的特點(diǎn)是通信雙方通過交換一些信息,分別計(jì)算出通信密鑰。而這些信息哪怕被竊聽者知道,竊聽者也無法計(jì)算出密鑰。SSL通信使用的就是這種技術(shù)。
- 公鑰密碼解決辦法。這個(gè)就是本章要介紹的解決辦法。
公鑰密碼
- 所謂公鑰密碼,其實(shí)就是參與加密和解密的是兩套密鑰。
加密用接收者的公鑰,接收者用私鑰進(jìn)行解密,公鑰和私鑰是成對的。
由于加密的是公鑰,也就是本身就是公開的,所以即使是竊聽者截獲了公鑰也不能對密文進(jìn)行解密。這就解決了剛才討論的對稱密鑰的密鑰配送問題。 - 目前RSA是事實(shí)的公鑰密碼算法標(biāo)準(zhǔn)。
-
問題:
1、公鑰是否是真的接收者發(fā)送的公鑰?這個(gè)涉及到公鑰認(rèn)證問題,也就是可能受到中間人攻擊。
2、公鑰密碼加密的速度遠(yuǎn)遠(yuǎn)低于對稱密鑰,大概只有對稱密鑰的幾百分之一,這在實(shí)際應(yīng)用中也是一個(gè)明顯的缺陷。
RSA
加解密算法
-
加密算法。
- 密文 = 明文 E mod N ,就是明文自己乘以自己E次(E次冪),再和N取模。
- 公鑰 = {E,N}
-
解密算法。
- 明文 = 密文 D mod N ,就是密文自己乘以自己D次(D次冪),再和N取模。
- 私鑰 = {D,N}
-
生成密鑰對。也就是計(jì)算 E、N、D。
- 準(zhǔn)備兩個(gè)很大的質(zhì)數(shù) p 和 q。
- N = p x q
- L = lcm(p-1, q-1) 【L是中間過程的數(shù)值,L為 (p-1) 和 (q-1)的最小公倍數(shù)】
- 求解E,滿足如下條件:
1 < E < L
gcd(E, L) = 1 【E和L的最大公約數(shù)為1】 - 求解D,滿足如下條件:
1 < D < L
E x D mod L = 1
針對RSA攻擊
-
基于密鑰生成原理的攻擊
從上面的生成原理可以看到,E、N是公開的,D、p、q、L不是公開的。- 通過密文求得明文。
如果僅僅是"密文 = 明文 E",那么完全可以通過求對數(shù)由密文得到明文。但是由于加上了"mode N",所以問題變成了求離散對數(shù)。
這個(gè)目前沒有高效的算法,此辦法不通。 - 暴力破解D。
目前p和q基本是512比特,N為1024,E和D基本和N一樣。
如此長度下,暴力破解幾乎不可能,此辦法不通。 - 通過E和N求出D。
問題在于L不知道,其實(shí)最根本的是不知道p和q。
p和q是絕對不能讓攻擊者知道的,這等同于知道私鑰。 - 對N進(jìn)行質(zhì)因數(shù)分解攻擊。
N是由p和q相乘得到的,N是公開的,所以如果能進(jìn)行N的質(zhì)因數(shù)分解,就能得到p和q。
但現(xiàn)在沒有針對打證書進(jìn)行質(zhì)因數(shù)分解的高效算法,所以目前RSA還未破解。
從中可以得到p和q的長度很重要。 - 通過推測p和q進(jìn)行攻擊。
p和q是偽隨機(jī)數(shù)生成的,如果偽隨機(jī)數(shù)的算法很差,那么密碼是可以被推測破譯的。
- 通過密文求得明文。
中間人攻擊
下面講解整個(gè)流程,就很清楚如何進(jìn)行攻擊的了。
- 發(fā)送者通知接收者傳遞其公鑰,用來加密信息
- 攻擊者竊聽到此內(nèi)容
- 接收者向發(fā)送者發(fā)送公鑰
- 攻擊者截留接收者發(fā)送的公鑰信息,而自己將自己的公鑰發(fā)送給發(fā)送者
- 發(fā)送者收到攻擊者的公鑰后,以為是接收者的公鑰,則加密發(fā)送信息給接收者
- 攻擊者截留發(fā)送者發(fā)送信息,然后用自己的私鑰解密,獲得明文信息
- 攻擊者篡改發(fā)送者信息,然后用第4步截留的接收者的公鑰將篡改后的信息加密,發(fā)送給接收者
- 接收者接收到攻擊者篡改的密文后,可以正常的解密此信息,會認(rèn)為此篡改的信息是發(fā)送者發(fā)送的
中間人攻擊成功的根因在于,發(fā)送者和接收者都無法判斷接收到的信息,是否是真正的正確的人發(fā)送的信息。這就涉及到認(rèn)證的問題。此問題后面章節(jié)會解決。