資料在網路上是一封封切好的封包旅行——沒加密,任何攔到封包的人都能讀、能改。加密傳輸保護的是「資料在移動途中」這一段:讓封包對第三方不可解讀、任何竄改都被偵測。網路上最普及的形式就是 HTTPS,底層是 TLS。
🧠 Core Ideas
TIP
HTTPS = 跑在 TLS 上的 HTTP。純 TCP 有兩個弱點:不隱藏封包內容、易受中間人攻擊 (man-in-the-middle)。TLS 補上兩件事——Privacy(隱私):封包無法被第三方解讀;Data integrity(完整性):傳輸中的竄改都可偵測。
- 開發者的實務門檻很低:向 certificate authority(憑證機構) 取得憑證、裝到伺服器上即可。
- TLS 不是單一演算法,而是組合對稱、非對稱、雜湊、MAC 四類原語各取所長。
⚖️ TLS 用到的四類加密原語
對稱 vs 非對稱加密
- 對稱加密(symmetric):加解密用同一把金鑰,常以 block cipher(固定大小區塊分別加密)運作,為速度設計、適合資料流。缺陷:解密金鑰必須先交給對方——若透過網路傳,就有被竊的風險。
- 非對稱加密(asymmetric / public-key):加解密用不同金鑰,加密的 public key 可公開、解密的 private key 保密。更複雜因此更慢。
- TLS 兩者並用:慢但安全的非對稱用來傳金鑰,快的對稱用來加密大量資料。
雜湊與 MAC
- Cryptographic hash function:輸出無法被還原、大小固定;不同輸入撞到同一輸出的機率極低。用途如密碼儲存——存 hash 而非明文。
- Message Authentication Code (MAC):類似 hash,但重算需要 secret key。只有握有金鑰的雙方能產生/驗證;封包附的 MAC 對不上,就代表被竄改或損壞。
⚖️ TLS Handshake:怎麼把安全談出來
Cipher Suite — 三個演算法一組
- TLS 標準下一個 cipher suite 含三個獨立演算法:key-exchange(非對稱,交換金鑰)+ block cipher(對稱,加密封包內容)+ MAC(驗證訊息)。
- 例:
ECDHE-ECDSA-AES128-GCM-SHA256= ECDHE 金鑰交換 + AES-128-GCM 對稱加密 + SHA-256 雜湊。 - 開發者不必懂演算法內部,但務必保持 web server 更新,才支援到最新最安全的組合。
Session 建立
- 伺服器挑出雙方都支援的最安全 cipher suite,指示瀏覽器採用。
- 伺服器回傳 digital certificate:含伺服器名稱、受信任的 CA、以及伺服器的加密金鑰。
- 瀏覽器驗證憑證真偽後,雙方產生一把 session key 加密本次 TLS 對話。
- 此後所有資料用 block cipher + 共享 session key 加密——快、且安全。
⚖️ 憑證與 CA:憑什麼信任對方
Digital Certificate 與 Certificate Authority
- Digital certificate(= public-key certificate) 是證明「這把 public key 屬於這個網域」的電子文件,由 certificate authorities 這個受信任第三方發行(Comodo、DigiCert、Let’s Encrypt…,瀏覽器內建信任數百家)。
- CA 存在的理由:DNS 易受 spoofing 攻擊。若攻擊者能偽造網域、自簽金鑰,受害者不會察覺;CA 驗證憑證真偽,堵住這條路。
- 取得流程:產生 key pair → 產生 CSR(Certificate Signing Request) 含 public key 與網域 → CA 做網域驗證(常要求臨時改 DNS)→ 下載安裝。
- Let’s Encrypt(2015 起,Mozilla、EFF 等共同創立)提供免費憑證;除非要 extended validation,幾乎沒理由付費。
Terminating HTTPS — 邊界在哪解密
- 典型部署:web server(Nginx / Apache,C 寫、優化過)提供靜態內容並處理 TLS;application server(Tomcat / Django / Flask…)在下游託管動態內容。
- 憑證與金鑰幾乎都裝在 web server 上;它解密進來的 HTTPS,再以未加密 HTTP 傳給 application server——這叫 terminating HTTPS。因流量不離開實體機(或只走私有網),通常不算風險。
- 別忘了把 port 80 的 HTTP 重定向到 HTTPS(
301導向 443)。
HSTS — 堵住第一次連線的漏洞
- 就算設了 HTTP→HTTPS 重定向,第一次若走 HTTP,cookie 會不安全地送出。
- HTTP Strict Transport Security (HSTS) 用一個 header 指示瀏覽器:在
max-age內只用 HTTPS 連本站,即使使用者手打http://也自動升級。
⚖️ 沒有加密會被怎樣:真實中間人攻擊
流量經手的每一站都能偷看或竄改
- 無線路由器:多數路由器的 Linux 不打安全更新。2018 年逾 50 萬台 Linksys / Netgear 感染 VPNFilter,竊取 HTTP 流量中的密碼,甚至試圖用 downgrade attack 逼瀏覽器改用更弱或無加密。
- 公共 Wi-Fi hotspot:攻擊者自架熱點,記錄流量、撈出信用卡號與密碼。
- ISP:Comcast 曾多年在通過其伺服器的 HTTP 流量注入 JavaScript 廣告。
- 政府機構:Snowden 洩漏的簡報顯示 NSA 曾取得 Google 憑證、架偽造網站截取憑證。
- 共同結論:用 HTTPS 的網站對上述攻擊免疫——流量對接收端以外任何人都不可解讀、不可竄改。
🔑 Takeaways
- 加密傳輸保護「資料移動途中」——HTTPS = HTTP over TLS,補上 TCP 缺的 Privacy 與 Integrity。
- TLS 組合四類原語:非對稱傳金鑰、對稱 block cipher 加密大量資料、hash / MAC 驗完整性;一組 cipher suite = 金鑰交換 + block cipher + MAC。
- 信任鏈靠 digital certificate + CA,因為 DNS 會被 spoofing;免費憑證用 Let’s Encrypt。
- 收尾細節:HTTP→HTTPS 重定向、HSTS 堵首連漏洞、web server 上 terminate HTTPS、保持軟體更新以支援最新 cipher suite。
No notes yet — jot your takeaways or Q&A here.