之前我有寫過http相關的文章,在看本文前如果不瞭解http可以先看 《5分鐘讓你明白HTTP協議》。本文主要參考內容來自 用信鴿來解釋 HTTPS
一、HTTP存在的問題
1.1 可能被竊聽
- HTTP 本身不具備加密的功能,HTTP 報文使用明文方式傳送
- 由於網際網路是由聯通世界各個地方的網路設施組成,所有傳送和接收經過某些裝置的資料都可能被截獲或窺視。(例如大家都熟悉的抓包工具:Wireshark)
1.2 認證問題
- 無法確認你傳送到的伺服器就是真正的目標伺服器(可能伺服器是偽裝的)
- 無法確定返回的客戶端是否是按照真實意圖接收的客戶端(可能是偽裝的客戶端)
- 無法確定正在通訊的對方是否具備訪問許可權,Web 伺服器上某些重要的資訊,只想發給特定使用者即使是無意義的請求也會照單全收。無法阻止海量請求下的 DoS 攻擊(Denial of Service,拒絕服務攻擊)。
1.3 可能被篡改
1.請求或響應在傳輸途中,遭攻擊者攔截並篡改內容的攻擊被稱為中間人攻擊(Man-in-the-Middle attack,MITM)。
二、HTTPS介紹
2.1 什麼是HTTPS
超文字傳輸安全協議(英語:Hypertext Transfer Protocol Secure,縮寫:HTTPS,常稱為HTTP over TLS,HTTP over SSL或HTTP Secure)是一種通過計算機網路進行安全通訊的傳輸協議。HTTPS經由HTTP進行通訊,但利用SSL/TLS來加密資料包。HTTPS開發的主要目的,是提供對網站伺服器的身份認證,保護交換資料的隱私與完整性。
2.2 HTTPS怎麼解決上述問題
HTTPS是在通訊介面部分用 TLS(Transport Layer Security 傳輸層安全性協議),TLS協議採用主從式架構模型,用於在兩個應用程式間通過網路建立起安全的連線,防止在交換資料時受到竊聽及篡改。
2.3 SSL和TLS的關係
- 傳輸層安全性協議(英語:Transport Layer Security,縮寫作 TLS),及其前身安全套接層(Secure Sockets Layer,縮寫作 SSL)是一種安全協議,目的是為網際網路通訊,提供安全及資料完整性保障。
- 網景公司(Netscape)在1994年推出首版網頁瀏覽器,網景導航者時,推出HTTPS協議,以SSL進行加密,這是SSL的起源。
- IETF將SSL進行標準化,1999年公佈第一版TLS標準檔案。隨後又公佈RFC 5246 (2008年8月)與 RFC 6176 (2011年3月)。在瀏覽器、電子郵件、即時通訊、VoIP、網路傳真等應用程式中,廣泛支援這個協議。
2.4 TLS/SSL 協議
HTTPS 協議的主要功能基本都依賴於 TLS/SSL 協議,TLS/SSL 的功能實現主要依賴於三類基本演算法:
雜湊函式
、對稱加密
和非對稱加密
,其利用非對稱加密實現身份認證和金鑰協商,對稱加密演算法採用協商的金鑰對資料加密,基於雜湊函式驗證資訊的完整性。
SSL/TLS協議執行機制 可以看阮老師的SSL/TLS協議執行機制的概述
RSA加密演算法原理可以看阮老師的這兩篇文章 RSA演算法原理(一)、
RSA演算法原理(二)
2.5 用信鴿來解釋
密碼學是一門難以理解的學科,說起來也很抽象,而在網際網路上任何活動都可以認為是從某臺伺服器上傳送和接受資訊。我們可以假設這些訊息是用信鴿來傳遞的。
在談之前我們先說一下愛麗絲、鮑勃和馬洛裡。他們是廣泛地代入密碼學和物理學領域的通用角色。這些名稱是為了方便說明議題,如果句子類似“甲想傳送訊息給乙”,當議題變得越複雜,將越難理解及容易混亂。而在典型的協議執行中,這些人物不一定是一個“人類”,而可能是一個可信賴的自動式代理人(如電腦程式)。使用這些名稱有助說明的結構,有時也會用作幽默。
2.5.1 初步交流
如果愛麗絲想要給鮑勃傳送一段資訊,她會把資訊綁在信鴿的腿上然後送往鮑勃那裡。鮑勃收到了資訊,並閱讀了資訊,非常完美。
但如果馬洛裡攔截了愛麗絲的鴿子並且篡改了資訊呢?鮑勃就沒有辦法去知道愛麗絲髮出的資訊在傳遞過程中遭到了修改。
這就是 HTTP 如何運作的。看起來很可怕對吧?我是不會通過 HTTP 來傳送我的銀行資信證明的,並且你也不應如此。
2.5.2 隱蔽的密碼
那麼如果愛麗絲和鮑勃都非常的機智。他們一致認同使用一種隱蔽的密碼來書寫他們的資訊。他們會將資訊中的每個字母按照字母表中的順序前移三位。比如,D→A,E→B,F→C。如此一來,原文為 “secret message” 的資訊就變成了 “pbzobq jbppxdb” 。
那現在如果馬洛裡再截獲了信鴿,她既不能做出有意義的修改同時也不會知道資訊的內容,因為她不知道隱蔽的密碼到底是什麼。然而鮑勃卻可以很容易反轉密碼,依靠 A → D, B → E, C → F 之類的規則破譯資訊的內容。加密後的資訊 “pbzobq jbppxdb” 會被破解還原為 “secret message” 。
這就是對稱密匙加密
,因為如果你知道如何加密一段資訊那麼你同樣可以解密這段資訊。
上述的密碼通常被稱為凱撒碼。在現實生活中,我們會使用更為奇特和複雜的密碼,但原理相同。
2.5.3 我們如何決定密匙?
如果除了發信者和收信者之外沒有人知道使用的是什麼密匙,對稱密匙加密是非常安全的。在凱撒加密中,密匙就是每個字母變到加密字母需要移動多少位的偏移量。我之前的距離中,使用的偏移量是 3 ,但是也可以用 4 或者 12 。
問題是如果愛麗絲和鮑勃在開始用信鴿傳信之前沒有碰過頭,他們沒有一個安全的方式來確立密匙。如果他們自己來在信中傳遞密匙,馬洛裡就會截獲資訊並發現密匙。這就使得馬洛裡可以在愛麗絲和鮑勃開始加密他們的資訊之前或之後,閱讀到他們資訊的內容並按照她的意願來篡改資訊。
這是一個中間人攻擊
的典型例子,避免這個問題的唯一方法就是收發信的兩方一起修改他們的編碼系統。
2.5.4 通過信鴿傳遞盒子
所以愛麗絲和鮑勃就想出了一個更好的系統。當鮑勃想要給愛麗絲髮送資訊時,他會按照如下的步驟來進行:
鮑勃向愛麗絲送一隻沒有攜帶任何資訊的鴿子。
愛麗絲給鮑勃送回鴿子,並且這隻鴿子帶有一個有開著的鎖的盒子,愛麗絲保管著鎖的鑰匙。
鮑勃把信放進盒子中,把鎖鎖上然後把盒子送給愛麗絲。
愛麗絲收到盒子,用鑰匙開啟然後閱讀資訊。
複製程式碼
這樣馬洛裡就不能通過截獲鴿子來篡改資訊了,因為她沒有開啟盒子的鑰匙。當愛麗絲要給鮑勃傳送訊息的時候同樣按照上述的流程。
愛麗絲和鮑勃所使用的流程通常被稱為非對稱金鑰加密
。之所以稱之為非對稱,是因為即使是你把資訊編碼(鎖上盒子)也不能破譯資訊(開啟鎖住的盒子)。
在術語中,盒子被稱為公匙
而用來開啟盒子的鑰匙被稱為私匙
。
2.5.5 如何信任盒子
但是會發現還是存在問題。當鮑勃收到盒子時他如何能確定這個盒子來自愛麗絲而不是馬洛裡截獲了鴿子然後換了一個她有鑰匙能開啟的盒子呢?
愛麗絲決定簽名標記一下盒子,這樣鮑勃收到盒子的時候就可以檢查簽名來確定是愛麗絲送出的盒子了。
那麼鮑勃如何打一開始就能識別出愛麗絲的簽名呢?這是個好問題。愛麗絲和鮑勃也確實有這個問題,所以他們決定讓泰德代替愛麗絲來標記這個盒子。
那麼誰是泰德呢?泰德很有名的,是一個值得信任的傢伙。他會給任何人簽名並且所有人都信任他只會給合法的人簽名標記盒子。
如果泰德可以確認索要簽名的人是愛麗絲,他就會在愛麗絲的盒子上簽名。因此馬洛裡就不可能搞到一個有著泰德代表愛麗絲簽了名的盒子,因為鮑勃知道泰德只會給他確認過的人簽名,從而識破馬洛裡的詭計。
泰德的角色在術語中被稱為認證機構
。而你閱讀此文時所用的瀏覽器打包存有許多認證機構的簽名。
所以當你首次接入一個網站的時候你可以信任來自這個站點的盒子因為你信任泰德而泰德會告訴你盒子是合法的。
2.5.6 沉重的盒子
現在愛麗絲和鮑勃有了一個可靠的系統來進行交流,然他們也意識到讓鴿子攜帶盒子比原本只攜帶信件要慢一些。
因此他們決定只有在選擇用對稱加密來給資訊編碼(還記得凱撒加密法吧?)的密匙時,使用傳遞盒子的方法(非對稱加密)。
這樣就可以二者的優點兼具了,非對稱加密的可靠性和對稱加密的高效性。
現實世界中我們不會用信鴿這樣慢的送信手段,但用非對稱加密來編碼資訊仍要慢於使用對稱加密技術,所以我們只有在交換編碼密匙的時候會使用非對稱加密技術。
那麼相信現在的你已經瞭解了HTTPS是如何工作的了~
參考: