Engineering · 2 min read
對稱與非對稱簽章:選擇的依據
HS256 共享一把密鑰,同時簽章和驗證。RS256 用兩把。選哪個取決於一個問題:驗證方能不能擁有簽章能力?
簽章證明誰建立了 token。它不隱藏 token。兩種簽章方式各有不同的信任模型。
對稱 (HS256):HMAC + SHA-256。一把密鑰。簽章方和驗證方共享它。密鑰一漏,任何人都能偽造 token。
非對稱 (RS256):RSA + SHA-256。兩把鑰匙。私鑰簽章,公鑰驗證。公鑰可以公開,因為它不能簽章。
| HS256(對稱) | RS256(非對稱) | |
|---|---|---|
| 金鑰數量 | 1 把共享密鑰 | 2 把(私鑰 + 公鑰) |
| 誰能簽章 | 任何持有密鑰的人 | 只有私鑰持有者 |
| 誰能驗證 | 任何持有密鑰的人 | 任何持有公鑰的人 |
| 適用情境 | 所有服務彼此信任 | 驗證方不能擁有簽章能力 |
稽核中的發現: 朋友的 side project 用 HS256。auth-service、lobby-service、game-server 共享一把
JWT_SECRET。這行得通,lobby 和 game-server 只驗證,不簽章。但如果未來有外部服務需要驗證 token,就得換成 RS256。
「選對稱還是非對稱,只看一個問題:驗證方能不能擁有簽章能力?」
參考來源
Related
回到總覽:一次 JWT 稽核背後的七個盲點 · JWT 是什麼 · 演算法混淆與 none 攻擊