本章見證保護和驗證使用者身分的機制。
Authentication(身分驗證)是資訊安全中的一個重要機制,用來確認一個使用者是否真的是他所聲稱的那個人。簡單來說,就是系統在讓你進入之前,先確認「你是誰」。
⚠️ 注意:不要將 Authentication(身分驗證) 和 Authorization(授權) 搞混!
- Authentication 是確認「你是誰」。
- Authorization 是在確認你的身分之後,決定「你可以做什麼」。
舉例來說:當你登入一個網站時,系統會透過身分驗證(Authentication)確認你是某位使用者;接著再根據你的身分,判斷你是否有權限存取特定頁面或資料(Authorization)。
為了提升帳戶安全性,現代的身分驗證技術已逐漸超越傳統「密碼為主」的做法。以下是幾種常見且有效的現代替代方案與增強技術:
密碼管理工具可協助使用者建立、儲存並自動填入高強度且唯一的密碼,能有效降低因密碼重複或強度不足所帶來的資安風險。其常見功能包括:
部分高安全性的系統會實施「單一裝置登入」限制,避免帳戶同時在多個裝置上被使用,以降低帳號被盜用或濫用的風險。
安全優點包括:
雙重驗證(2FA, Two-Factor Authentication)需在密碼之外,再提供另一種獨立驗證方式。多重驗證(MFA, Multi-Factor Authentication)則是使用兩種以上的驗證因子,安全性更高。
常見的第二驗證方式包括:
無密碼驗證是一項日益普及的安全趨勢,完全不使用傳統密碼,而是透過更先進且安全的方式進行身分確認,例如:
FIDO 與 WebAuthn 標準
現代無密碼驗證技術多採用 FIDO(Fast Identity Online)聯盟 推動的標準,提供強化的安全性與使用者體驗。這些標準已被 Google、Microsoft、Apple 等主流平台廣泛採用,能有效防範釣魚攻擊與帳號盜用。
雜湊(Hashing) 是一種單向演算法,將輸入資料(例如密碼)轉換為固定長度的字串(雜湊值)。這種轉換不可逆,也就是無法從雜湊值還原出原始資料。
🔐 常用於密碼儲存,目的是就算資料庫被入侵,攻擊者也無法直接得知使用者的密碼。
比較項目 | 雜湊(Hashing) | 加密(Encryption) |
---|---|---|
可逆性 | 否(不可逆) | 是(可用金鑰解密) |
主要用途 | 密碼儲存 | 敏感資料的傳輸與保存 |
金鑰需求 | 不需要 | 需要加密/解密金鑰 |
⚠️ 密碼儲存應使用雜湊,不應使用加密。
加密是為了之後可以還原,而雜湊是為了無法還原。
HTTP 是無狀態(stateless)協議,每一次請求都是獨立的,伺服器不會記得使用者之前的操作。為了讓伺服器能夠「記住使用者的身分」,就需要透過 Session 機制來維持使用者狀態。
Session ID 對應的資料通常包含:登入狀態、使用者偏好、權限資訊等。
為了安全,Session 通常會設定 過期時間,並可在使用者閒置一段時間或登出時自動失效。
項目 | 會話式認證(Session-based) | 令牌式認證(Token-based,如 JWT) |
---|---|---|
狀態儲存 | 伺服器儲存使用者 Session 資料 | 無狀態(Stateless),不需伺服器儲存驗證資料 |
資料存放位置 | Session ID 通常儲存在 Cookie 中 | Token 可儲存在 Cookie 或 LocalStorage |
控制與撤銷 | 可由伺服器主動失效(如強制登出) | 發出後無法撤銷,僅靠過期時間失效 |
跨系統適用性 | 通常適用於同一伺服器架構 | 較容易用於分散式架構或微服務系統 |
🔐 實務上也可結合兩種方式:使用短期 Token + 長期 Session 管理,提高彈性與安全性。
Session 若未妥善保護,可能遭到以下攻擊:
一旦 Session Cookie 被竊取,攻擊者就能假冒使用者身份登入系統,造成嚴重資安風險。
OAuth(Open Authorization)是一種授權標準,用來讓應用程式在不需取得使用者密碼的情況下,存取使用者授權的資料。像是:
❗ OAuth 用來授權(Authorization),不是用來身份驗證(Authentication)。
OIDC 是建立在 OAuth 2.0 基礎上的延伸協議,加入了「身份層」,可用於「登入」功能。
名稱 | 說明 |
---|---|
OAuth | 授權應用程式存取某部分帳號資料(如 Google Drive 的照片) |
Access Token | 限定權限的「鑰匙」,用來存取資源資料 |
OpenID Connect | OAuth 加上「身份資訊」,可用來驗證使用者並實作登入功能 |
功能 | OAuth | OpenID Connect |
---|---|---|
主要用途 | 授權(授權應用程式存取資源) | 身份驗證 + 授權(用於登入) |
傳回資訊 | Access Token(和 Refresh Token) | Access Token + ID Token(含身份資訊) |
使用場景 | API 資料授權存取 | 「使用 Google 登入」這類登入功能 |
現代使用者往往同時擁有多個裝置與眾多服務/應用。要求使用者為每個帳號設定獨立且複雜的強密碼,並長期妥善保存,在實務上難以執行。
不論密碼多複雜,只要擁有足夠時間都能破解。隨著量子、雲端計算的出現,仰賴時間成本的安全將不復存在。
密碼除了儲存在使用者腦海,使用上也一定必須儲存在別處和進行傳輸。而這個情況就一定會有遭受攻擊的風險,像是儲存在檔案或密碼管理器中的資料外洩、在不安全的通訊中遭受中間人攻擊、端點被植入鍵盤記錄器或間諜軟體、透過記憶體傾印取得明文憑證等。
不論仰賴什麼認證機制,只要不是本人親身驗證,都無法阻擋被冒充的問題。像是Session劫持、重播攻擊、信任此裝置等問題。讓攻擊者無須擁有密碼資訊,也能冒充使用者。