ssl協(xié)商與秘鑰交換

一、SSL協(xié)商

由于非對稱加密的速度比較慢睦柴,所以它一般用于密鑰交換诽凌,雙方通過公鑰算法協(xié)商出一份密鑰,然后通過對稱加密來通信坦敌,當然侣诵,為了保證數(shù)據(jù)的完整性,在加密前要先經(jīng)過HMAC的處理狱窘。

SSL缺省只進行server端的認證杜顺,客戶端的認證是可選的。以下是其流程圖(摘自TLS協(xié)議)蘸炸。

Client? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Server

ClientHello? ? ? ? ? ? ? ? ? -------->

ServerHello

Certificate*

ServerKeyExchange*

CertificateRequest*

<-------- ? ? ServerHelloDone

Certificate*

ClientKeyExchange

CertificateVerify*

[ChangeCipherSpec]

Finished ? ? ? ? ? ? ? ? ? ? ?-------->

[ChangeCipherSpec]

<-------- ? ? ?Finished

Application Data

<------->? ? Application Data

簡單的說便是:SSL客戶端(也是TCP的客戶端)在TCP鏈接建立之后躬络,發(fā)出一個ClientHello來發(fā)起握手,這個消息里面包含了自己可實現(xiàn)的算法列表和其它一些需要的消息搭儒,SSL的服務(wù)器端會回應(yīng)一個ServerHello穷当,這里面確定了這次通信所需要的算法提茁,然后發(fā)過去自己的證書(里面包含了身份和自己的公鑰)。Client在收到這個消息后會生成一個秘密消息馁菜,用SSL服務(wù)器的公鑰加密后傳過去茴扁,SSL服務(wù)器端用自己的私鑰解密后,會話密鑰協(xié)商成功火邓,雙方可以用同一份會話密鑰來通信了丹弱。

密鑰協(xié)商的形象化比喻:

如果上面的說明不夠清晰德撬,這里我們用個形象的比喻铲咨,我們假設(shè)A與B通信,A是SSL客戶端蜓洪,B是SSL服務(wù)器端纤勒,加密后的消息放在方括號[]里,以突出明文消息的區(qū)別隆檀。雙方的處理動作的說明用圓括號()括起摇天。

A:我想和你安全的通話,我這里的對稱加密算法有DES,RC5,密鑰交換算法有RSA和DH恐仑,摘要算法有MD5和SHA泉坐。

B:我們用DES-RSA-SHA這對組合好了。

這是我的證書裳仆,里面有我的名字和公鑰腕让,你拿去驗證一下我的身份(把證書發(fā)給A)。

目前沒有別的可說的了歧斟。

A:(查看證書上B的名字是否無誤纯丸,并通過手頭早已有的CA的證書驗證了B的證書的真實性,如果其中一項有誤静袖,發(fā)出警告并斷開連接觉鼻,這一步保證了B的公鑰的真實性)

(產(chǎn)生一份秘密消息,這份秘密消息處理后將用作加密密鑰队橙,加密初始化向量和hmac的密鑰坠陈。將這份秘密消息-協(xié)議中稱為

per_master_secret-用B的公鑰加密,封裝成稱作ClientKeyExchange的消息捐康。由于用了B的公鑰畅姊,保證了第三方無法竊聽)

我生成了一份秘密消息,并用你的公鑰加密了吹由,給你(把ClientKeyExchange發(fā)給B)

注意若未,下面我就要用加密的辦法給你發(fā)消息了!

(將秘密消息進行處理倾鲫,生成加密密鑰粗合,加密初始化向量和hmac的密鑰)

[我說完了]

B:(用自己的私鑰將ClientKeyExchange中的秘密消息解密出來萍嬉,然后將秘密消息進行處理,生成加密密鑰隙疚,加密初始化向量和hmac的密鑰壤追,這時雙方已經(jīng)安全的協(xié)商出一套加密辦法了)

注意,我也要開始用加密的辦法給你發(fā)消息了供屉!

[我說完了]

A: [我的秘密是...]

B: [其它人不會聽到的...]

加密的計算

上一步講了密鑰的協(xié)商行冰,但是還沒有闡明是如何利用加密密鑰,加密初始化向量和hmac的密鑰來加密消息的伶丐。

其實其過程不過如此:

1 借助hmac的密鑰悼做,對明文的消息做安全的摘要處理,然后和明文放到一起哗魂。

2 借助加密密鑰肛走,加密初始化向量加密上面的消息。

二录别、秘鑰交換

ssl3_send_client_key_exchange是openssl中客戶端確定密鑰的函數(shù)朽色,同時也發(fā)送了“一部分”數(shù)據(jù)給服務(wù)器,這一部分數(shù)據(jù)就是所謂的pre_master组题,不管是客戶端還是服務(wù)器都根據(jù)對端傳過來的pre_master和自己計算出來的另一部分數(shù)據(jù)來生成最終的對稱密鑰葫男,生成過程中需要hello消息中的隨機數(shù),這樣生成的密鑰才不會每次都一樣崔列。由于ssl協(xié)議中dh份額來源于證書梢褐,而證書又是靜態(tài)的,因此十分有必要引入一種隨機因素來保證通過靜態(tài)證書導(dǎo)出的密鑰份額協(xié)商出來的密鑰的隨機性峻呕。同時這也是pre_master的意義利职,那就是隨機,對于rsa密鑰交換算法來說瘦癌,pre-master-key本身就是一個隨機數(shù)猪贪,再加上hello消息中的隨機,三個隨機數(shù)通過一個密鑰導(dǎo)出器最終導(dǎo)出一個對稱密鑰讯私,但是對于dh热押,包括ecdh算法(不考慮匿名dh和瞬時dh),就只有hello消息中的兩個隨機數(shù)因子了斤寇。

pre master的存在在于ssl協(xié)議不信任每個主機都能產(chǎn)生完全隨機的隨機數(shù)桶癣,如果隨機數(shù)不隨機,那么pre master secret就有可能被猜出來娘锁,那么僅適用pre master secret作為密鑰就不合適了牙寞,因此必須引入新的隨機因素,那么客戶端和服務(wù)器加上pre master secret三個隨機數(shù)一同生成的密鑰就不容易被猜出了,一個偽隨機可能完全不隨機间雀,可是是三個偽隨機就十分接近隨機了悔详,每增加一個自由度,隨機性增加的可不是一惹挟。

迪菲-赫爾曼密鑰交換(Diffie–Hellman key exchange茄螃,簡稱“D–H”) 是一種安全協(xié)議。

它可以讓雙方在完全沒有對方任何預(yù)先信息的條件下通過不安全信道建立起一個密鑰连锯。這個密鑰可以在后續(xù)的通訊中作為對稱密鑰來加密通訊內(nèi)容

(1)归苍、算法描述

離散對數(shù)的概念:

原根:如果a是素數(shù)p的一個原根,那么數(shù)值:

amodp运怖,a^2modp拼弃,…,a^(p-1)modp

是各不相同的整數(shù)驳规,且以某種排列方式組成了從1p-1的所有整數(shù)肴敛。

離散對數(shù):如果對于一個整數(shù)b和素數(shù)p的一個原根a署海,可以找到一個唯一的指數(shù)i吗购,使得:

b=(a的i次方)modp其中0ip-1

那么指數(shù)i稱為b的以a為基數(shù)的模p的離散對數(shù)。

Diffie-Hellman算法的有效性依賴于計算離散對數(shù)的難度砸狞,其含義是:當已知大素數(shù)p和它的一個原根a后捻勉,對給定的b,要計算i刀森,被認為是很困難的踱启,而給定i計算b卻相對容易。

Diffie-Hellman算法:

假如用戶A和用戶B希望交換一個密鑰研底。

取素數(shù)p和整數(shù)a埠偿,ap的一個原根,公開a和p榜晦。

A選擇隨機數(shù)XA<p冠蒋,并計算YA=a^XA mod p。

B選擇隨機數(shù)XB<p乾胶,并計算YB=a^XB mod p抖剿。

每一方都將X保密而將Y公開讓另一方得到。

A計算密鑰的方式是:K=(YB) ^XA modp

B計算密鑰的方式是:K=(YA) ^XB modp

證明:

(YB)^ XA modp= (a^XB modp)^ XA modp

= (a^XB)^ XA modp= (a^XA) ^XB modp(<-- 密鑰即為 a^(XA*XB) modp)

=(a^XA modp)^ XB modp= (YA) ^XB modp

由于XA和XB是保密的识窿,而第三方只有p斩郎、a、YB喻频、YA可以利用缩宜,只有通過取離散對數(shù)來確定密鑰,但對于大的素數(shù)p甥温,計算離散對數(shù)是十分困難的锻煌。

例子:

假如用戶Alice和用戶Bob希望交換一個密鑰膜宋。

取一個素數(shù)p=97和97的一個原根a=5。

Alice和Bob分別選擇秘密密鑰XA=36和XB=58炼幔,并計算各自的公開密鑰:

YA=a^XA modp=5^36 mod 97=50

YB=a^XB modp=5^58 mod 97=44

Alice和Bob交換了公開密鑰之后秋茫,計算共享密鑰如下:

Alice:K=(YB) ^XA modp=44^36 mod 97=75

Bob:K=(YA) ^XB modp=50^58 mod 97=75

(2)、安全性

當然乃秀,為了使這個例子變得安全肛著,必須使用非常大的XA,?XB 以及p, 否則可以實驗所有的可能取值跺讯。(總共有最多97個這樣的值, 就算XA和XB很大也無濟于事)枢贿。

如果p是一個至少 300 位的質(zhì)數(shù),并且XA和XB至少有100位長刀脏, 那么即使使用全人類所有的計算資源和當今最好的算法也不可能從a,p和a^(XA*XB) modp中計算出 XA*XB局荚。

這個問題就是著名的離散對數(shù)問題。注意g則不需要很大, 并且在一般的實踐中通常是2或者5愈污。

在最初的描述中耀态,迪菲-赫爾曼密鑰交換本身并沒有提供通訊雙方的身份驗證服務(wù),因此它很容易受到中間人攻擊暂雹。

一個中間人在信道的中央進行兩次迪菲-赫爾曼密鑰交換首装,一次和Alice另一次和Bob,就能夠成功的向Alice假裝自己是Bob杭跪,反之亦然仙逻。

而攻擊者可以解密(讀取和存儲)任何一個人的信息并重新加密信息,然后傳遞給另一個人涧尿。因此通常都需要一個能夠驗證通訊雙方身份的機制來防止這類攻擊系奉。

有很多種安全身份驗證解決方案使用到了迪菲-赫爾曼密鑰交換。例如當Alice和Bob共有一個公鑰基礎(chǔ)設(shè)施時姑廉,他們可以將他們的返回密鑰進行簽名缺亮。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市庄蹋,隨后出現(xiàn)的幾起案子瞬内,更是在濱河造成了極大的恐慌,老刑警劉巖限书,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虫蝶,死亡現(xiàn)場離奇詭異,居然都是意外死亡倦西,警方通過查閱死者的電腦和手機能真,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人粉铐,你說我怎么就攤上這事疼约。” “怎么了蝙泼?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵程剥,是天一觀的道長。 經(jīng)常有香客問我汤踏,道長织鲸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任溪胶,我火速辦了婚禮搂擦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哗脖。我一直安慰自己瀑踢,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布才避。 她就那樣靜靜地躺著橱夭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪工扎。 梳的紋絲不亂的頭發(fā)上徘钥,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天衔蹲,我揣著相機與錄音肢娘,去河邊找鬼。 笑死舆驶,一個胖子當著我的面吹牛橱健,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沙廉,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拘荡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撬陵?” 一聲冷哼從身側(cè)響起珊皿,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎巨税,沒想到半個月后蟋定,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡草添,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年驶兜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡抄淑,死狀恐怖屠凶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肆资,我是刑警寧澤矗愧,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站郑原,受9級特大地震影響贱枣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜颤专,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一纽哥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧栖秕,春花似錦春塌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至暑塑,卻和暖如春吼句,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背事格。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工惕艳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驹愚。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓远搪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親逢捺。 傳聞我的和親對象是個殘疾皇子谁鳍,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容