根據題主的問題描述,建議題主了解一下中間人攻擊,數字證書,PKI體系,信任網路。這些名詞可以說是基本知識,網上講解非常多,我下面就簡單說說,拋磚引玉,如有錯漏還請廣大知友指正(講道理,能看到我這個答案的知友都不知道能不能超過100個)。

正因為我們不知道自己拿到的公鑰是不是真正的伺服器那邊的公鑰,所以才有了中間人攻擊。中間人攻擊就是攻擊者作為伺服器和用戶之間的中間人,讓用戶把中間人的公鑰認作是伺服器的公鑰,截獲伺服器消息,解密伺服器消息後,篡改消息,並把篡改後的消息用中間人自己的私鑰加密後發送給客戶,客戶用所謂的伺服器公鑰(其實是中間人公鑰)解密,就把中間人篡改後的消息當成伺服器發送的消息了。

所以如何防止中間人攻擊?這個問題的答案就是題主想知道的。關鍵就在於確認客戶獲得的公鑰就是伺服器的公鑰。一種方法是通過可信信道傳輸,而我們的網路顯然並不是可信信道。那麼就需要另一種方法了,就是讓我們信任的第三方做擔保,證明該公鑰確實是屬於其真正的伺服器的,而不是中間人的。這個我們信任的用來作證的第三方,就是證書機構,簡稱CA。

CA會為伺服器頒發數字證書,這個數字證書里有證書本身的信息(有效期,可用範圍,序列號,CA名稱等),有伺服器的公鑰和公鑰演算法,更重要的是,有CA對前面兩種信息的數字簽名。CA會對之前信息利用類似MD5等摘要演算法生成摘要,然後用自己的私鑰對摘要加密,即生成了該數字證書的數字簽名。客戶擁有CA的公鑰,就可以解密此數字簽名,與自己對之前信息生成的摘要進行比對,比對成功,就說明這個數字證書確實是該CA頒發的,因為只有CA的私鑰才可能生成這樣的簽名。

那麼在通信時,客戶向伺服器要公鑰,伺服器就把包含了公鑰的證書給客戶,客戶一比對,某CA向客戶擔保,這個公鑰確實是這個伺服器的。客戶相信這個CA,從而也相信它的擔保。而中間人如果沒法向可信的CA要到這個擔保,那麼客戶就會直接不信任這個公鑰是伺服器的。

於是,CA可信就極其重要了。如果CA給中間人一個擔保,說中間人的公鑰是伺服器的,那麼客戶就渾然不知。那麼問題來了:

CA本身公鑰是不是可信?讓其他CA為其進行擔保,不停套娃,形成一條信任鏈,最後到達一個頂點,最頂層的CA,它只好自己給自己的證書籤名,這個自己給自己簽名的證書被稱為根證書。而大家都通過其他方式,相信了這個根證書,相信這確實就是最頂層的CA的公鑰,把這個CA的公鑰直接放在自己系統的信任列表中。

CA亂來怎麼辦?CA一旦亂來,大家就會選擇把這個CA列入不信任列表,任何這個CA簽發的證書都將不被信任。一般來說,CA為了自己的信譽,是不會亂來的,同時也會保護自己的私鑰不遭泄露。但是吧,凡事都有例外,比如CNNIC亂簽發證書,DigiNotar私鑰泄露……

依靠信任CA而組建起來的整個這一套系統架構被稱為PKI。HTTPS通信便使用這一套體系。PKI只要CA不出問題,採用的公鑰演算法不太弱(太弱容易導致私鑰被破解,私鑰被破解或竊取,除了立刻吊銷對應的公鑰讓大家不信任它,天王老子都救不了你),你自己不注意把私鑰泄露了,可以說堅不可摧,而只要CA出了問題,這個CA及其之下的所有信任關係都立刻變得不可靠。

相對於PKI體系對CA的依賴,信任網路就不需要CA,用戶自行決定信任哪些公鑰,信任程度多大。比如,Alice信任Bob,Alice就會為Bob的公鑰做數字簽名,擔保這個公鑰為Bob所有。這樣,信任Alice的人Dave,在拿到Bob的帶有Alice的簽名的公鑰後,就會看見Alice的擔保,從而信任Alice所信任的Bob,相信這個公鑰是Bob的。Alice相當於起到了向Dave介紹Bob的作用,Alice做的數字簽名就相當於一封介紹信,從而讓Dave信任從未見過的Bob。可以看到,信任網路更像人與人之間信任關係的建立,PKI中的CA則頗具公證處的味道。


因為公匙,私匙可以反過來用啊。

我們可以把一段信息用一個秘密的「公匙」加密,再用安全的辦法把私匙告知大家知道。之後把原文和密文一起發出去,這樣誰都可以解密這段信息,然後驗證它是否跟原文一樣。

如果一致的話,那就說明這段原文確實是我發出來的。

這就是所謂的數字簽名。

實踐中是這麼玩的,由一個有威望的組織做中間人(ca),Alice先把自己的公匙提交給中間人,由中間人進行數字簽名,Alice再把簽過名的公匙交給Bob,Bob則可以驗證這個簽名,如果簽名確實是ca簽的,就可以愉快的用Alice的公匙跟她通信啦。

那ca如何確定來提交簽名申請的人就是Alice而不是其他人冒名頂替呢?Bob又如何安全的獲得ca的驗證簽名的密匙呢?

這就要靠線下的手段了。

前者ca可能會要求Alice提交營業執照之類的複印件。後者則是瀏覽器廠商或者操作系統廠商直接把一些可以信賴的ca的證書集成在瀏覽器里或者操作系統里。

所以ca證書沒事不要亂裝喲。

那被大家廣泛信任的ca濫發籤名咋辦?

哎呀,那這事可就要警惕嘍。

相關的可以搜索一下gmail的證書事件,還有360的根證書計劃之類的。


看了下題干描述,推測題主只是在問網路安全中應用層協議(ssl/tls)用到的的非對稱加密演算法,樓上的 @experiment 大佬回答得很詳細了,我班門弄斧補充一點點

鄧強龍:RSA的公鑰和私鑰到底哪個才是用來加密和哪個用來解密??

www.zhihu.com圖標鄧強龍:為何公鑰私鑰不可互相推導??

www.zhihu.com圖標

我只看了標題,就開始啪啪啪寫回答,然後一不小心就把回答的內容範圍擴大了到了信息安全,望題主不要介意。。。。

(一)物理攻擊(看得見摸得著攻擊者)

  • 陌生人禁止隨便進出機密要地,防止竊取保密資料。

(二)魔法攻擊(看不見摸不著攻擊者)

物理攻擊的解決辦法,通常很簡單粗暴,啥玩意兒帶毒,就把啥玩意兒拔掉/錘爛/換新的,一勞永逸。

魔法攻擊,則針對的是那些你網上衝浪不得不用的基礎設施:硬體/操作系統/計算機網路,除非你把它卸載了,否則只能通過升級到安全版本才能把洞補上免受傷害。

為什麼我會說魔法攻擊看不到攻擊者??因為本質上的攻擊者就是那些寫爛代碼留洞的開發者(╯‵□′)╯︵┻━┻ 那麼多開發人員,一個個揍一頓???

魔法攻擊太多了,一個個來,多到說不完。前置條件是我假設題主清楚計算機網路模型的5層架構,以及有常規的計算機硬體和操作系統知識。

計算機硬體

  • 計算機硬體來來去去就那幾大件:CPU(控制器 + 運算器)、I/O設備、存儲設備
  • 我沒研究過計算機硬體的安全,略過不表
  • 不行,這逼還是要裝
  • 電腦的usb口不要隨便被陌生人插。U盤被篡改固件,欺騙操作系統讓她誤以為u盤是鍵盤,導致u盤隨便讀寫系統緩衝區,不少見,我每次去列印店回來u盤都宛若得了艾滋病。利用的是usb協議不標識設備類型的邏輯漏洞

操作系統

  • 操作系統的安全我也沒太研究,估計二進位安全,軟體逆向等從業人員來回答會更專業,略過不表。
  • 不行,我要強行裝逼寫一下。
  • 給用戶分配操作系統許可權盡量越小越好。你我都不想看到刪庫跑路sudo rm -rf /*

計算機網路

我盡量把我知道的都寫下來,對網路的攻擊手段還有很多很多。。

  • 應用層:基本上普通老百姓見到的可以聯網的電腦桌面軟體,全都是計算機網路應用層協議的具體實現與應用。比如瀏覽器訪問的web service,建議都將裸奔的http升級為https,雖然不算一勞永逸,但ssl層被剝掉還是有難度的,另外80埠建議封掉,135/445埠也封掉,防止衝擊波蠕蟲進攻。
  • 傳輸層:有條件用tcp的就別用udp
  • 網路層:小心公司內網的路由器被動過手腳。路由器是公司內部核心的網路設施,公司內網所有流量都會經過路由器
  • 數據鏈路層:交換機,這玩意兒上放蜜罐可太有意思了。。
  • 物理層:這一層的攻擊比較科幻,在骨幹網出口的光纖上放置一個折射器把信號流截走,稜鏡門曝光的美國政府監聽別國政要的手法。無線網卡,水晶頭等看看固件有沒有後門


打開開始菜單,輸入manage computer certificates,裡面找trusted root certification authorities.

就靠這個保證沒有被別人修改過,所以千萬別瞎裝什麼根證書,不然怎麼被干都不知道。


簡單地說,你可以終端和刪除別人傳輸的信息,但是不能修改和偽造


公鑰記載在由ca頒發的數字證書上,數字證書由ca簽名,ca的公鑰由更大的ca簽名,形成一個信任鏈條,至於鏈條頂端的ca,那個是預裝在操作系統里的,所以少裝魔改版的Windows


推薦閱讀:
相关文章