摘要:王蒙沒那么淺地談?wù)勁c二四加密算法和密鑰管理介紹密鑰交換機(jī)制之前先普及一些加密算法基本知識以及為什么要有密鑰管理機(jī)制。證書證書,顧名思義,就是頒發(fā)的證書。公鑰基礎(chǔ)設(shè)施公鑰基礎(chǔ)設(shè)施,簡稱是目前網(wǎng)絡(luò)安全建設(shè)的基礎(chǔ)與核心。
**玫瑰與荊棘共生,香菇與毒菇同長,真實(shí)與假冒比翼騰飛?!趺?br>**
介紹密鑰交換機(jī)制之前先普及一些加密算法基本知識以及為什么要有密鑰管理機(jī)制。
加密算法就是將普通信息(明文)轉(zhuǎn)換成難以理解的數(shù)據(jù)(密文)的過程;
加解密包含了這兩種算法,一般加密即同時(shí)指稱加密與解密的技術(shù)。
加解密的具體運(yùn)作由兩部分決定:一個(gè)是算法,另一個(gè)是密鑰。
密鑰是一個(gè)用于加解密算法的秘密參數(shù),通常只有通信者擁有。
對稱密鑰加密是密碼學(xué)中的一種加密法,是以轉(zhuǎn)換其中一個(gè)數(shù)字、字母或僅字符串隨機(jī)字母,一個(gè)秘密密鑰會以特定的方式變更消息里面的文字或字母,例如更換字母相對位置(例如hello變成lohel)。只要寄件者與收件者知道秘密密鑰,他們可以加密和解密并使用這個(gè)數(shù)據(jù)。
公開密鑰加密(也稱為非對稱加密)是密碼學(xué)中的一種加密法,非對稱密鑰,是指一對加密密鑰與解密密鑰,某用戶使用加密密鑰加密后所獲得的數(shù)據(jù),只能用該用戶的解密密鑰才能夠解密。如果知道了其中一個(gè),并不能計(jì)算出另外一個(gè)。因此如果公開了其中一個(gè)密鑰,并不會危害到另外一個(gè)。因此公開的密鑰為公鑰;不公開的密鑰為私鑰。
通信雙方使用加密算法之后,需要密鑰來解密和加密信息,而雙方如何得到、交換密鑰,并且不會被第三方竊取,或者說密鑰就算被竊取也不會導(dǎo)致密文被解密讀取呢?
如果“單純用對稱加密”,瀏覽器和網(wǎng)站之間勢必先要交換“對稱加密的密鑰”。
如果這個(gè)密鑰直接用【明文】傳輸,很容易就會被第三方(有可能是“攻擊者”)偷窺到;如果這個(gè)密鑰用密文傳輸,那就再次引入了“如何交換加密密鑰”的問題——這就變成“先有雞還是先有蛋”的循環(huán)邏輯了。
基于“加密和解密采用不同的密鑰”的特點(diǎn),可以避開前面提到的“循環(huán)邏輯”的困境。大致的步驟如下:
第1步 網(wǎng)站服務(wù)器先基于“非對稱加密算法”,隨機(jī)生成一個(gè)“密鑰對”(為敘述方便,稱之為“k1 和 k2”)。因?yàn)槭请S機(jī)生成的,目前為止,只有網(wǎng)站服務(wù)器才知道 k1 和 k2。
第2步 網(wǎng)站把 k1 保留在自己手中,把 k2 用【明文】的方式發(fā)送給訪問者的瀏覽器。 因?yàn)?k2 是明文發(fā)送的,自然有可能被偷窺。不過不要緊。即使偷窺者拿到 k2,也【很難】根據(jù) k2 推算出 k1 (這一點(diǎn)是由“非對稱加密算法”從數(shù)學(xué)上保證的)。
第3步 瀏覽器拿到 k2 之后,先【隨機(jī)生成】第三個(gè)對稱加密的密鑰(簡稱 k)。 然后用 k2 加密 k,得到 k(k 是 k 的加密結(jié)果) 瀏覽器把 k 發(fā)送給網(wǎng)站服務(wù)器。 由于 k1 和 k2 是成對的,所以只有 k1 才能解密 k2 的加密結(jié)果。 因此這個(gè)過程中,即使被第三方偷窺,第三方也【無法】從 k 解密得到 k
第4步 網(wǎng)站服務(wù)器拿到 k 之后,用 k1 進(jìn)行解密,得到 k 至此,瀏覽器和網(wǎng)站服務(wù)器就完成了密鑰交換,雙方都知道 k,而且【貌似】第三方無法拿到 k 然后,雙方就可以用 k 來進(jìn)行數(shù)據(jù)雙向傳輸?shù)募用堋?/blockquote>乍看以上步驟很嚴(yán)密,即使被第三方偷窺,第三方也難以從 k 解密得到 k。
但這種方法有一個(gè)致命的缺陷,就是無法防止數(shù)據(jù)篡改,也無法識別假冒的身份。
攻擊方法如下:
第1步 這一步跟原先一樣——服務(wù)器先隨機(jī)生成一個(gè)“非對稱的密鑰對”k1 和 k2(此時(shí)只有網(wǎng)站知道 k1 和 k2)
第2步 當(dāng)網(wǎng)站發(fā)送 k2 給瀏覽器的時(shí)候,攻擊者截獲 k2,保留在自己手上。 然后攻擊者自己生成一個(gè)【偽造的】密鑰對(以下稱為 pk1 和 pk2)。 攻擊者把 pk2 發(fā)送給瀏覽器。
第3步 瀏覽器收到 pk2,以為 pk2 就是網(wǎng)站發(fā)送的。 瀏覽器不知情,依舊隨機(jī)生成一個(gè)對稱加密的密鑰 k,然后用 pk2 加密 k,得到密文的 k 瀏覽器把 k 發(fā)送給網(wǎng)站。 (以下是關(guān)鍵)
發(fā)送的過程中,再次被攻擊者截獲。 因?yàn)?pk1 pk2 都是攻擊者自己生成的,所以攻擊者自然就可以用 pk1 來解密 k 得到 k 然后,攻擊者拿到 k 之后,用之前截獲的 k2 重新加密,得到 k,并把 k 發(fā)送給網(wǎng)站。
第4步 網(wǎng)站服務(wù)器收到了 k 之后,用自己保存的 k1 可以正常解密,所以網(wǎng)站方面不會起疑心。 至此,攻擊者完成了一次漂亮的偷梁換柱,而且讓雙方都沒有起疑心。上述過程,即是傳說中的中間人攻擊(Man-In-The-Middle attack )。
3. 失敗的原因—缺乏【可靠的】身份認(rèn)證
為什么以上方案會失?。?/p>
除了提到的“攻擊者具備篡改數(shù)據(jù)的能力”,還有另一點(diǎn)關(guān)鍵點(diǎn)——“缺乏身份認(rèn)證機(jī)制”。
正是因?yàn)椤叭狈ι矸菡J(rèn)證機(jī)制”,所以當(dāng)攻擊者一開始截獲 k2 并把自己偽造的 pk2 發(fā)送給瀏覽器時(shí),瀏覽器無法鑒別:自己收到的密鑰是不是真的來自于網(wǎng)站服務(wù)器。
假如具備某種【可靠的】身份認(rèn)證機(jī)制,即使攻擊者能夠篡改數(shù)據(jù),但是篡改之后的數(shù)據(jù)很容易被識破。那篡改也就失去了意義。于是我們引入“CA認(rèn)證體系”。
五、CA認(rèn)證體系
CA
數(shù)字證書認(rèn)證機(jī)構(gòu)(英語:Certificate Authority,縮寫為CA),也稱為電子商務(wù)認(rèn)證中心、電子商務(wù)認(rèn)證授權(quán)機(jī)構(gòu),是PKI(公鑰基礎(chǔ)設(shè)施)的核心執(zhí)行機(jī)構(gòu),是PKI的主要組成部分,并作為電子商務(wù)交易中受信任的第三方,承擔(dān)公鑰體系中公鑰的合法性檢驗(yàn)的責(zé)任。
從廣義上講,認(rèn)證中心還應(yīng)該包括證書申請注冊機(jī)構(gòu)RA(Registration Authority),RA是數(shù)字證書的申請注冊、證書簽發(fā)的管理機(jī)構(gòu)。
CA證書
CA 證書,顧名思義,就是CA頒發(fā)的證書。
人人都可以找工具制作證書。但是個(gè)人制作出來的證書是沒什么用處的。
因?yàn)槟恪静皇恰繖?quán)威的 CA 機(jī)關(guān),你自己搞的證書不具有權(quán)威性。
PKI公鑰基礎(chǔ)設(shè)施
公鑰基礎(chǔ)設(shè)施(Public Key Infrastructure,簡稱PKI)是目前網(wǎng)絡(luò)安全建設(shè)的基礎(chǔ)與核心。
簡單的說PKI技術(shù)就是利用公鑰理論和技術(shù)建立的提供信息安全服務(wù)的基礎(chǔ)設(shè)施,該體系在統(tǒng)一的安全認(rèn)證標(biāo)準(zhǔn)和規(guī)范基礎(chǔ)上提供在線身份認(rèn)證,是_CA認(rèn)證、數(shù)字證書、數(shù)字簽名_以及相關(guān)_安全應(yīng)用組件模塊_的集合。
做為一種技術(shù)體系,PKI可以作為支持認(rèn)證、完整性、機(jī)密性和不可否認(rèn)性的技術(shù)基礎(chǔ),從技術(shù)上解決網(wǎng)上身份認(rèn)證、信息完整性的抗抵賴等安全問題,為網(wǎng)絡(luò)應(yīng)用提供可靠的安全保障,但PKI不僅僅涉及到技術(shù)層面的問題。
證書鏈
為了盡可能的保證根證書的安全性,CA中心采取了一種樹狀的結(jié)構(gòu):
一個(gè)root CA下面包含多個(gè)intermediates CA,然后根CA和次級CA都可以頒發(fā)證書給用戶,頒發(fā)的證書分別是根證書和次級證書,最后則是用戶的證書,也可以說是中級證書。
證書信任鏈
實(shí)際上,證書之間的信任關(guān)系,是可以嵌套的。比如,C 信任 A1,A1 信任 A2,A2 信任 A3......這個(gè)叫做證書的信任鏈。
只要你信任鏈上的頭一個(gè)證書,那后續(xù)的證書,都是可以信任的。
CA認(rèn)證體系的基本使用
- 服務(wù)方S向第三方機(jī)構(gòu)CA提交公鑰、組織信息、個(gè)人信息(域名)等信息并申請認(rèn)證;
- CA通過線上、線下等多種手段驗(yàn)證申請者提供信息的真實(shí)性,如組織是否存在、企業(yè)是否合法,是否擁有域名的所有權(quán)等;
- 如信息審核通過,CA會向申請者簽發(fā)認(rèn)證文件-證書。證書包含以下信息:申請者公鑰、申請者的組織信息和個(gè)人信息、簽發(fā)機(jī)構(gòu) CA的信息、有效時(shí)間、證書序列號等信息的明文,同時(shí)包含一個(gè)簽名;
(簽名的產(chǎn)生算法:首先,使用散列函數(shù)計(jì)算公開的明文信息的信息摘要,然后,采用 CA的私鑰對信息摘要進(jìn)行加密,密文即簽名。)
- 客戶端 C 向服務(wù)器 S 發(fā)出請求時(shí),S 返回證書文件;
- 客戶端 C讀取證書中的相關(guān)的明文信息,采用相同的散列函數(shù)計(jì)算得到信息摘要,然后,利用對應(yīng) CA的公鑰解密簽名數(shù)據(jù),對比證書的信息摘要,如果一致,則可以確認(rèn)證書的合法性,即公鑰合法;
- 客戶端驗(yàn)證證書相關(guān)的域名信息、有效時(shí)間等信息;
- 客戶端會內(nèi)置信任CA的證書信息(包含公鑰),如果CA不被信任,則找不到對應(yīng) CA的證書,證書也會被判定非法。
在這個(gè)過程注意幾點(diǎn):
- 申請證書不需要提供私鑰,確保私鑰永遠(yuǎn)只能由服務(wù)器端掌握;
- 證書的合法性仍然依賴于非對稱加密算法,證書主要是增加了服務(wù)器信息以及簽名;
- 內(nèi)置 CA 對應(yīng)的證書稱為根證書,頒發(fā)者和使用者相同,自己為自己簽名,即自簽名證書(為什么說"部署自簽SSL證書非常不安全")
- 證書= 公鑰 + 申請者與頒發(fā)者信息 + 簽名;
★即便有人截取服務(wù)器A證書,再發(fā)給客戶端,想冒充服務(wù)器A,也無法實(shí)現(xiàn)。因?yàn)樽C書和url的域名是綁定的。
未完待續(xù)……
本文作者:UCloud后臺研發(fā)工程師 Hughes.Chen
博客地址:https://ulyc.github.io/
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/126007.html
摘要:握手協(xié)議它建立在記錄協(xié)議之上,用于在實(shí)際的數(shù)據(jù)傳輸開始前,通訊雙方進(jìn)行身份認(rèn)證協(xié)商加密算法交換加密密鑰等。包括握手協(xié)議,改變密碼協(xié)議,警告協(xié)議。配備身份證書,防止身份被冒充。鑒定依賴認(rèn)證體系和加密算法。面對愚昧,神們自己也緘口不言 。——《基地》2019年8月11日,IETF 終于發(fā)布了 RFC 8446,標(biāo)志著 TLS 1.3 協(xié)議大功告成 。這是該協(xié)議的第一次重大改革,帶來了重大的安全性...
摘要:公開密鑰加密的出現(xiàn)大大減輕了交換對稱密鑰的困難,公鑰可以公開透過不安全可被竊聽的渠道發(fā)送,用以加密明文。當(dāng)與配合使用,稱之為,與配合則稱為,以此類推。這步?jīng)]有簽名,服務(wù)端收到數(shù)據(jù)后不會發(fā)現(xiàn)被篡改。對于認(rèn)證機(jī)構(gòu),一旦私鑰外泄,將可能導(dǎo)致整未濟(jì),亨。小狐汔濟(jì),濡其尾,無攸利?!兑住妨?、密鑰管理當(dāng)不再擔(dān)心身份會被冒充、篡改之后,我們再來詳細(xì)談?wù)劸W(wǎng)絡(luò)通信中對于加密算法的密鑰管理。在密鑰被簽發(fā)后,...
摘要:上篇鏈接年,用更現(xiàn)代的方法使用上年,用更現(xiàn)代的方法使用中公鑰的發(fā)布與交換討論公鑰安全交換的中文文章比較少,而這一環(huán)是整個(gè)加密體系的重中之重。年月,有攻擊者惡意向公鑰服務(wù)器提交了對兩個(gè)著名網(wǎng)友的簽名背書。此事件中的受害者的證書就被簽名了次。上篇鏈接:2021年,用更現(xiàn)代的方法使用PGP(上)2021年,用更現(xiàn)代的方法使用PGP(中)PGP 公鑰的 發(fā)布 與 交換討論公鑰安全交換的中文文章比較少...
摘要:猜測原因是一端異常關(guān)閉了連接卻沒有通知對端,或者通知了對端但對端沒有收到。序號請求設(shè)置了超時(shí)時(shí)間為,因此發(fā)送包。之后繼續(xù)測試,沒有發(fā)現(xiàn)丟包。序號空閑分鐘后,主動發(fā)起報(bào)文,關(guān)閉連接。 一、故障 showImg(https://segmentfault.com/img/bVbnJQk?w=1610&h=140); 基本架構(gòu)如圖所示,客戶端發(fā)起 http 請求給 nginx,nginx 轉(zhuǎn)發(fā)...
摘要:要注意老舊的瀏覽器不支持的特性,它會繼續(xù)正常加載屬性引用的圖像。五安全地使用圖片的優(yōu)勢這里不再贅述,簡單來說 這篇文章,我們將一起探討,web應(yīng)用中能對圖片進(jìn)行什么樣的優(yōu)化,以及反思一些負(fù)優(yōu)化手段 一、為什么要對圖片進(jìn)行優(yōu)化 對于大多數(shù)前端工程師來說,圖片就是UI設(shè)計(jì)師(或者自己)切好的圖,你要做的只是把圖片丟進(jìn)項(xiàng)目中,然后用以鏈接的方式呈現(xiàn)在頁面上,而且我們也經(jīng)常把精力放在項(xiàng)目的打包...
閱讀 3546·2023-04-25 20:09
閱讀 3745·2022-06-28 19:00
閱讀 3066·2022-06-28 19:00
閱讀 3092·2022-06-28 19:00
閱讀 3185·2022-06-28 19:00
閱讀 2886·2022-06-28 19:00
閱讀 3057·2022-06-28 19:00
閱讀 2642·2022-06-28 19:00