什麼是一次性密碼?
一次性密碼 (One-Time Password , OTP) 是一組隨機產生、僅能使用一次、而且有效時間很短的驗證碼,用來在單一的登入流程或交易中驗證使用者身分。它是多因子驗證 (Multi-Factor Authentication , MFA , 多重驗證) 的一個組成部分,透過在傳統的靜態密碼之外加入額外的驗證步驟,來強化存取控制的安全性。
一次性密碼可以透過多種方式產生。有些系統使用與伺服器和用戶端同步的演算法;另一些則採用詢問-回應機制,使用者提供某些資訊後,伺服器再依此產生 OTP。此外,也有時間型 OTP,它們只在極短的時間內有效。
一次性密碼建立後,會透過各種管道傳送給使用者,包括簡訊、電子郵件或專用的驗證應用程式。
什麼是時間型一次性密碼 (Time-based One-Time Password , TOTP)?
時間型一次性密碼 (TOTP) 是一種有效時間很短(通常為 30 秒到幾分鐘)的一次性密碼,時間一到就會失效,並且可以產生新的密碼。TOTP 使用一種加密演算法(亦即,基於 HMAC-SHA1(Hash-based Message Authentication Code , 基於雜湊的訊息驗證碼 – 安全雜湊演算法)的加密函數)產生,該演算法將共用密鑰結合目前的時間標記,確保每組密碼都是唯一且無法預測的。該演算法確保在每段時間長度中,驗證伺服器與使用者的權杖(例如行動應用程式或硬體權杖)都會產生相同的密碼,以進行安全驗證。
實作時間型一次性密碼時,需要仔細同步伺服器與使用者裝置之間的時鐘。如果用戶端與伺服器的時間差異太大,用戶端產生的 TOTP 可能與伺服器端的不一致,導致驗證失敗。
時間型一次性密碼廣泛採納於各種應用情境,包括銀行、電子郵件和社群媒體平台,以保護使用者登入和交易的安全。
使用者通常透過安裝在行動裝置上的專屬驗證器應用程式來接收時間型一次性密碼,這些應用程式在產生密碼時不需要網路連線。
為什麼要使用一次性密碼
一次性密碼廣泛應用於各種線上交易與存取控制。其被採納的原因可歸因於以下幾個關鍵因素:
強化弱密碼
除非被強制要求使用強密碼,否則使用者往往會在多個網站上建立並重複使用簡單、容易被猜中的密碼。而一次性密碼透過自動產生無法猜測、且只能使用一次的密碼,防止這種行為成為一個存取控制的失敗點。
遵循規章要求
將一次性密碼做為多因子驗證(多重驗證,MFA)的一部分,有助於組織遵循要求強化資料保護措施的規章標準。一次性密碼提供額外的安全層,以保護受法規規範的敏感資訊(例如個人可識別資訊 (Personally Identifiable Information , PII) 和受保護的健康資訊 (Protected Health Information , PHI))。
增強安全性
一次性密碼在存取控制中新增一個額外的驗證步驟,透過使用唯一的密碼來提升安全性。這種動態特性也使其能抵禦重播攻擊(亦即,攻擊者攔截密碼並試圖稍後使用)或網路釣魚(Phishing)攻擊(誘騙使用者洩露其密碼)。
促進安全的金融交易
一次性密碼通常用於保護金融交易,透過新增額外的驗證步驟來確認使用者身分,以防止詐騙或盜用。
一次性密碼(OTP)、時間型一次性密碼(TOTP)和靜態密碼之間有何不同?
一次性密碼、時間型一次性密碼和靜態密碼的基本目的,是確保使用者驗證的安全,但在運作方式和適用情況上有著顯著差異。
一次性密碼 (OTP)
一次性密碼是在單一登入工作階段或交易中所產生的密碼。它們可以透過多種方式建立,包括基於共用密鑰的演算法,或者由驗證應用程式或硬體權杖產生後,透過簡訊或電子郵件直接傳送至使用者的裝置。
時間型一次性密碼 (TOTP)
時間型一次性密碼是一種一次性密碼的子類型,其有效時間極短,由管理員設定,通常為 30 秒至幾分鐘之間。
時間型一次性密碼是使用加密演算法產生的,該演算法將一組密鑰結合目前的時間標記,確保每組密碼都是唯一的,並且只能在特定時間範圍內有效。
靜態密碼
靜態密碼是一種使用者設定後可在多次登入工作階段中重複使用的傳統驗證方式,通常由一組使用者與驗證系統已知的固定字串組合組成。
靜態密碼的主要優點在於其易於使用和實作。由於從管理角度來看相對容易管理,且對使用者而言也簡單易用,因此被廣泛採用。此外,亦會搭配安全性原則,以強制使用強密碼及定期變更密碼。
一次性密碼的產生方式
一次性密碼提供一種暫時且具動態性的使用者身分驗證方式。密碼可以透過多種方法產生,其產生過程通常結合加密演算法、密鑰,以及常見的外部因素(例如時間或事件計數器等)。
常用的一次性密碼產生方法包括:
數學演算法
一種基本方法是使用數學演算法,根據初始密碼產生新密碼。初始密碼(也稱為種子)可以隨機產生,也可以由管理員預先定義。伺服器和用戶端都知道演算法和種子,因此它們可以產生相同的密碼序列。
詢問-回應
在此方法中,伺服器會向用戶端傳送一個唯一、不可預測的詢問要求。用戶端將此要求與密鑰組合以產生一次性密碼。此方法可以提供高安全性,但需要在伺服器和用戶端之間建立直接且安全的通訊通道。
時間型
時間型一次性密碼是一種更進階的方法,根據目前時間產生一次性密碼。時間戳記通常被劃分為固定的間隔時間,通常為 30 秒到數分鐘不等,每個時間間隔都會產生一組新的密碼。此方法需要伺服器與用戶端的時鐘保持精確同步。
時間型一次性密碼是使用共用密鑰和目前時間做為加密雜湊函數的輸入產生的。此程序已根據 RFC 6238 (基於時間性的一次性密碼算法) 進行標準化。
時間型一次性密碼產生的關鍵要素包括:
- 共用密鑰
在最初的設定階段,伺服器與用戶端會建立並共用一組唯一的金鑰。 - 目前時間
目前的時間戳記(通常採用 Unix 時間格式)會被劃分為數個時間區段,以確保每組一次性密碼只在特定的時間範圍內有效。 - 加密演算法
基於共用密鑰和目前時間戳記來計算雜湊值的演算法。
然後將產生的雜湊值截斷並轉換為人類可讀的格式,通常是 6 到 8 位數字的代碼,供使用者輸入以進行驗證。
基於 HMAC
基於 HMAC 的一次性密碼 (HMAC-based One-time Password , HOTP) 是一種使用雜湊訊息驗證碼 (keyed-hash message authentication code , HMAC) 的驗證方法。它會將密鑰與計數器結合在一起。伺服器與用戶端都會維護這個計數器,並搭配共用密鑰來產生一次性密碼。
每次產生一次性密碼時,計數器都會遞增,以確保每個密碼都是唯一的。與時間型一次性密碼一樣,該過程根據 RFC 6238 進行標準化。
基於 HMAC 的一次性密碼產生的關鍵要素包括:
- 共用密鑰
與時間型一次性密碼類似,使用者和驗證系統共用一組唯一的金鑰。 - 計數器
系統會使用一個在用戶端與伺服器間同步的序號計數器,每次產生或使用一次性密碼時,該計數器就會遞增。 - 加密雜湊函數
HMAC 演算法會將共享的密鑰與計數器結合,產生雜湊值。該雜湊值接著會以類似時間型一次性密碼的方式進行處理,產生一組做為一次性密碼的數值代碼。
時間型一次性密碼和基於 HMAC 的一次性密碼的注意事項
雖然時間型一次性密碼因具備時間敏感性而提升便利性與安全性,HOTP 則在時間同步困難的環境中提供更大的彈性。不過,兩種方式皆強調安全金鑰管理與系統完整性的重要性,以維持一次性密碼做為安全驗證工具的有效性。
時間型一次性密碼和基於 HMAC 的一次性密碼機制的安全性都極度仰賴共用密鑰的機密性。若該金鑰遭到洩漏,攻擊者便可能產生有效的一次性密碼。因此,安全地儲存與傳輸密鑰至關重要。
此外,時間型一次性密碼需要用戶端與伺服器之間的時間同步準確,因為即使是些微的誤差也可能導致驗證失敗。而基於 HMAC 的一次性密碼雖然不依賴時間,但必須謹慎管理計數器,以確保雙方維持同步狀態。
最後,一次性密碼可透過多種管道傳送給使用者,包括簡訊、電子郵件,或是能產生時間型一次性密碼的專屬驗證應用程式,但這些方式通常需要網路連線。而基於 HMAC 的一次性密碼則可在無網路連線的情況下傳送。
什麼是單一因子驗證?
單一因子驗證(簡稱 SFA 或 1FA , Single-factor authentication)是一種安全程序,使用者只需使用一種驗證方法即可存取系統或應用程式。在單一因子驗證中,使用者通常需要提供帳戶與密碼,這是最常見的驗證形式。
單一因子驗證之所以被廣泛採用,主要是因為其實作、使用與維護都相對容易。除了設定密碼保護所需的基本設定外,不需要額外的硬體或軟體,因此對許多組織而言是具成本效益的選擇。
這種類型的驗證是根據使用者所知道的資訊,因此單一因子驗證簡單直觀且便於使用。然而,正因為其簡單性,也使得它成為最不安全的驗證方式,因為它完全仰賴密碼的強度與保密性。一旦密碼過於簡單、容易被猜到,或在資料外洩中被洩露,未經授權的存取就可能輕易發生。
對單一因子驗證的依賴使系統容易受到各種攻擊,例如網路釣魚、暴力破解,或透過社交工程手法竊取或猜測密碼。針對這些漏洞,許多組織正轉向多因子驗證(MFA)方法,透過要求額外的驗證因子(例如生物辨識或一次性密碼(OTP))來增強安全性。
儘管單一因子驗證有其漏洞,但仍用於存取敏感性較低的系統。在這些情況下,使用者更重視快速存取的便利性,而不是太過於擔心潛在的安全風險。單一因子驗證是一種基本的安全措施,但在需要保護敏感資訊的環境中,它正逐漸被更強大的驗證方式所補充或取代。
什麼是雙重因子驗證?
雙重因子驗證(Two-Factor Authentication , 2FA 又稱二階段驗證) 是一種比傳統單一因素驗證更進階的使用者驗證方式。它要求使用者在存取帳戶或系統之前,提供兩種不同形式的身分證明。這種做法能顯著提升安全性,有效防止未經授權的人士存取線上帳戶、系統或資料。
兩種不同類型的身分證據稱為因子,包括使用者已知的資訊(例如密碼或個人識別碼 (PIN))和第二層驗證,這可以是使用者擁有的東西(例如智慧型手機或安全權杖),或使用者本身具備的特徵(例如指紋或臉部辨識等生物辨識資料)。
雙重因子驗證的採納,主要是因為單一因子驗證存在單點故障的漏洞,以及網路威脅在數量、速度與複雜程度上不斷上升。事實證明,這些方法能有效突破僅使用單一因子驗證的防禦機制。
透過整合第二項驗證因子,雙重因子驗證即使在密碼遭到洩漏的情況下,仍能提供保護。
然而,雙重因子驗證並非沒有缺點。它可能對使用者造成不便,因為他們必須多執行一個步驟才能存取資源。此外,若第二項驗證因子涉及實體裝置,仍存在遺失或遭到偷竊的風險。儘管有這些挑戰,許多線上服務仍採用雙重因子驗證。
平衡安全性和便利性
一次性密碼的廣泛採用反映出 IT 和安全團隊正在考慮一系列進階安全措施的整體趨勢。就像一次性密碼一樣,每種做法都有其優缺點。在選擇基於身分的安全存取保護解決方案時,團隊必須在使用者便利性和嚴格的安全通訊協定之間取得平衡。