密碼學基礎
密碼學(Cryptography)提供三件日常用得到的能力:保密(加密)、完整性(雜湊與 MAC)、身分(數位簽章與憑證)。實務原則是:使用經過審查的函式庫與協定(TLS 1.2+、AES、ChaCha20、Ed25519),不要自己發明演算法。
對稱與公開金鑰
- 對稱加密:同一把金鑰加密與解密,速度快,適合大量資料。難題是金鑰怎麼安全送到對方。
- 公開金鑰(非對稱):公鑰可公開、私鑰自留。用來交換對稱金鑰或做簽章,解決「沒見過面怎麼先講好密碼」的問題。
- 混合系統:TLS、訊息 App 都是「用公開金鑰談好工作金鑰,再用對稱加密本文」。
雜湊不是加密
雜湊(Hash)是單向摘要:同樣輸入得到同樣輸出,不能(也不該能)反推原文。用途是完整性檢查、數位簽章的摘要、以及密碼儲存。
密碼儲存不要用裸 SHA-256。請用專為密碼設計、可調工作量的演算法(如 Argon2id、bcrypt),並為每位使用者加獨立鹽值。詳見 OWASP 密碼儲存備忘單。
建議影片
The Internet: Encryption & Public Keys
Code.org 用動畫說明公開金鑰如何讓兩台從沒交換過祕密的電腦開始加密通訊。適合在看協定細節之前建立圖像。
Public Key Cryptography - Computerphile
Dr. Mike Pound 用白板講為什麼對稱金鑰「先要有一條安全通道才能送鑰匙」是死結,以及公鑰/私鑰配對如何拆開這個結。這是理解 HTTPS 憑證與 SSH 金鑰的觀念核心。
Hashing Algorithms and Security - Computerphile
說明雜湊的單向性、碰撞,以及為什麼「用來檢查檔案有沒有被改」和「用來存密碼」對演算法的要求不同。看完再看下一支密碼儲存影片會更順。
How NOT to Store Passwords!
同樣是 Computerphile:明文、無鹽雜湊、快速雜湊各錯在哪,以及加鹽與慢速函數在防禦預先計算與大量猜測時扮演的角色。對應應用程式開發的必考題。