久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

https加密原理是怎樣的?非對稱加密、對稱加密?

212次閱讀
沒有評論

共計 2276 個字符,預計需要花費 6 分鐘才能閱讀完成。

大多使用 HTTPS 協議的原因是因為 HTTP 在使用上是不如 HTTPS 安全的。比如當我們在往服務器發送比較隱私的數據時,如果使用 HTTP 進行通信,安全性沒辦法得到保障。數據在傳輸的過程中,是比較容易被中間人抓包竊取的。

其次,如果在不安全的環境下發送數據,數據也有可能在傳輸過程被篡改,當接收數據的服務器收取數據時,也沒辦法確定數據是否有被修改和替換過。當然,服務器也沒辦法判斷數據就是真的來源于客戶端。

<< 阿里云 SSL 證書,2 年僅需 567 元

目前,HTTP 是存在一些弊端的,例如無法保證保密性,沒法保證消息的完整、準確性,沒法保證消息的可靠性。對比于這些問題,HTTPS 是可以解決掉的。可以間接的把 HTTPS 理解為 HTTP 的升級版,包容了 HTTP 的功能,并逐步在 HTTP 的基礎上增加了安全性能。

為 http 的內容是明文傳輸的,明文數據會經過中間代理服務器、路由器、wifi 熱點、通信服務運營商等多個物理節點,如果信息在傳輸過程中被劫持,傳輸的內容就完全暴露了,他還可以篡改傳輸的信息且不被雙方察覺,這就是中間人攻擊。所以我們才需要對信息進行加密。最簡單容易理解的就是對稱加密。

為了保證消息的保密性,就會涉及到加密和解密的問題。目前主流的分為對稱加密和非對稱加密兩種。

什么是對稱加密?

就是有一個密鑰,它可以對一段內容加密,加密后只能用它才能解密看到原本的內容,和我們日常生活中用的鑰匙作用差不多。

用對稱加密可行嗎?

如果通信雙方都各自持有同一個密鑰,且沒有別人知道,這兩方的通信安全當然是可以被保證的(除非密鑰被破解)。

然而最大的問題就是這個密鑰怎么讓傳輸的雙方知曉,同時不被別人知道。如果由服務器生成一個密鑰并傳輸給瀏覽器,那這個傳輸過程中密鑰被別人劫持弄到手了怎么辦? 之后他就能用密鑰解開雙方傳輸的任何內容了,所以這么做當然不行。

換種思路? 試想一下,如果瀏覽器內部就預存了網站 A 的密鑰,且可以確保除了瀏覽器和網站 A,不會有任何外人知道該密鑰,那理論上用對稱加密是可以的,這樣瀏覽器只要預存好世界上所有 HTTPS 網站的密鑰就行啦! 這么做顯然不現實。

什么是非對稱加密?

有兩把密鑰,通常一把叫做公鑰、一把叫做私鑰,用公鑰加密的內容必須用私鑰才能解開,同樣,私鑰加密的內容只有公鑰能解開。

用非對稱加密可行嗎?

鑒于非對稱加密的機制,我們可能會有這種思路:服務器先把公鑰直接明文傳輸給瀏覽器,之后瀏覽器向服務器傳數據前都先用這個公鑰加密好再傳,這條數據的安全似乎可以保障了! 因為只有服務器有相應的私鑰能解開這條數據。

其實 HTTPS 的加密原理,主要在于充分利用了對稱加密和非對稱加密的優點,以及數字證書的作用。根據加密的特點,將 HTTP 進行了一次升級,升級到 HTTPS 的形態,就具備了一層加密的外殼了。

非對稱加密 + 對稱加密?

既然非對稱加密耗時,非對稱加密 + 對稱加密結合可以嗎? 而且得盡量減少非對稱加密的次數。當然是可以的,而且非對稱加密、解密各只需用一次即可。

請看一下這個過程:

某網站擁有用于非對稱加密的公鑰 A、私鑰 A’。

瀏覽器像網站服務器請求,服務器把公鑰 A 明文給傳輸瀏覽器。

瀏覽器隨機生成一個用于對稱加密的密鑰 X,用公鑰 A 加密后傳給服務器。

服務器拿到后用私鑰 A’解密得到密鑰 X。

這樣雙方就都擁有密鑰 X 了,且別人無法知道它。之后雙方所有數據都用密鑰 X 加密解密。

完美!HTTPS 基本就是采用了這種方案。完美? 還是有漏洞的。

為什么制作數字簽名時需要 hash 一次?

我初學 HTTPS 的時候就有這個問題,似乎以上過程中 hash 有點多余,把 hash 過程去掉也能保證證書沒有被篡改。

最顯然的是性能問題,前面我們已經說了非對稱加密效率較差,證書信息一般較長,比較耗時。而 hash 后得到的是固定長度的信息(比如用 md5 算法 hash 后可以得到固定的 128 位的值),這樣加密解密就會快很多。

怎么證明 CA 機構的公鑰是可信的?

你們可能會發現上文中說到 CA 機構的公鑰,我幾乎一筆帶過,“瀏覽器保有它的公鑰”,這是個什么保有法? 怎么證明這個公鑰是否可信?

讓我們回想一下數字證書到底是干啥的? 沒錯,為了證明某公鑰是可信的,即“該公鑰是否對應該網站 / 機構等”,那這個 CA 機構的公鑰是不是也可以用數字證書來證明? 沒錯,操作系統、瀏覽器本身會預裝一些它們信任的根證書,如果其中有該 CA 機構的根證書,那就可以拿到它對應的可信公鑰了。

實際上證書之間的認證也可以不止一層,可以 A 信任 B,B 信任 C,以此類推,我們把它叫做信任鏈或數字證書鏈,也就是一連串的數字證書,由根證書為起點,透過層層信任,使終端實體證書的持有者可以獲得轉授的信任,以證明身份。

另外,不知你們是否遇到過網站訪問不了、提示要安裝證書的情況? 這里安裝的就是跟證書。說明瀏覽器不認給這個網站頒發證書的機構,那么沒有該機構的根證書,你就得手動下載安裝(風險自己承擔 XD)。安裝該機構的根證書后,你就有了它的公鑰,就可以用它驗證服務器發來的證書是否可信了。

HTTPS 必須在每次請求中都要先在 SSL/TLS 層進行握手傳輸密鑰嗎?

這也是我當時的困惑之一,顯然每次請求都經歷一次密鑰傳輸過程非常耗時,那怎么達到只傳輸一次呢? 用 session 就行。

服務器會為每個瀏覽器 (或客戶端軟件) 維護一個 session ID,在 TSL 握手階段傳給瀏覽器,瀏覽器生成好密鑰傳給服務器后,服務器會把該密鑰存到相應的 session ID 下,之后瀏覽器每次請求都會攜帶 session ID,服務器會根據 session ID 找到相應的密鑰并進行解密加密操作,這樣就不必要每次重新制作、傳輸密鑰了!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-06-15發表,共計2276字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 房山区| 公安县| 修武县| 多伦县| 淮阳县| 饶平县| 长乐市| 理塘县| 宝丰县| 达日县| 和林格尔县| 牟定县| 广饶县| 丰县| 昌邑市| 库尔勒市| 岱山县| 织金县| 扎兰屯市| 安吉县| 横峰县| 清丰县| 兴文县| 寿阳县| 南京市| 密云县| 应城市| 南岸区| 靖江市| 厦门市| 吉水县| 赫章县| 阳泉市| 天台县| 湾仔区| 邵东县| 灵宝市| 洛浦县| 舒城县| 沈丘县| 曲沃县|