繁體中文(香港)
  • auth
  • password
  • oauth
  • oidc
  • identity

密碼並未消亡

去年,互聯網上流傳著一些新聞文章,聲稱大型科技公司正在聯合消除密碼。一些初創公司甚至宣稱密碼已經過時和落伍。

Gao
Gao
Founder

Stop wasting weeks on user auth
Launch secure apps faster with Logto. Integrate user auth in minutes, and focus on your core product.
Get started
Product screenshot

引言

去年,互聯網上流傳著一些新聞文章,聲稱大型科技公司例如 Apple,Google 和 Microsoft 正在聯合消除密碼。一些初創公司甚至宣稱密碼已經過時和落伍。在潛心研究身份管理數月後,我開始質疑這些主張的真實性和實用性。

密碼的作用是什麼?

乍看之下,答案似乎顯而易見:密碼用於登錄和驗證身份。然而,如果考慮到密碼無法真正驗證你的身份這一事實,我持有不同的觀點:

  • 當用戶使用電子郵件和密碼登錄網站時,網站無法確認這些憑證背後的真實身份。可能是一個人,甚至可能是一隻貓。
  • 任何人都可以用正確的 PIN 解鎖 iPhone。

實際上,密碼的目的是匿名證明對某物的擁有權:一個用戶賬戶,一個設備,或對一扇門的訪問權限。

當前的“密碼殺手”

前面提到的公司提出了各種“密碼殺手”。許多人聲稱這些是更安全的替代方案,去除用戶在驗證過程中記住複雜、靜態密碼的需要。然而,這些替代方案大多無法完全實現消除密碼的目標。

FIDO 驗證

FIDO(快速網上身份)驗證,如官方文檔所述,使用公開密鑰加密技術進行註冊和登錄(值得一提的是,WebAuthn 是 FIDO2 規範的核心組件)。表面上看,這個過程看起來很有吸引力:

看起來簡單對吧?不幸的是,中間有個大障礙:兼容性。與傳統的“標識符和密碼”組合相比,FIDO 驗證需要:

  • 網站或應用程序支持 FIDO。
  • 瀏覽器和/或操作系統支持 FIDO。
  • 用戶設備擁有易於使用的驗證機制。

任何這些條件不符合就會導致 FIDO 驗證不可用,迫使需要使用其他方法作為後備方案。

此外,即使所有條件都滿足,那麼在設備上什麼才算是“易於使用的驗證機制”?目前,可能涉及指紋或面部識別等生物識別方法,並伴有 PIN 碼等後備選項,也就是說還是密碼的變種。最後,我們又回到了原點。

從技術上講,這不是“密碼殺手”,而是一種由密碼保護的更安全和用戶友好的驗證或核驗過程。

一次性密碼

即便名字中包含“密碼”一詞,一次性密碼(OTPs)並不是傳統意義上的密碼,因為它們是動態的。有兩種流行的 OTP 類型:

  • 基於時間的一次性密碼(TOTP):利用當前時間作為唯一性來源以演算法生成。它通常用於多因素驗證(MFA)或 2FA。
  • 短信/電子郵件一次性密碼:在服務器上通過隨機算法生成。在某些國家,這已廣泛作為主要的登錄方式。

TOTPs 可能不如其名廣為人知。例如,當網站提示你設置 MFA 並使用像 Google Authenticator 或 Duo 的應用掃描二維碼時,你很可能使用的是 TOTP。你可能還注意到,網站常常顯示一個長串“恢復碼”並建議你儲存,因為它只會顯示一次。有些網站甚至鼓勵用戶打印出來。從本質上講,這個恢復碼就像是長密碼。

至於短信/電子郵件 OTPs,它們可能會昂貴且不可靠:

  • 從頭開始部署一個短信或電子郵件發送者需要設置。
  • 電子郵件發送者需要建立正面的“聲譽”以改善可傳送性,否則發送者可能被標記為垃圾郵件。
  • 每個國家都有自己的移動網絡運營商,導致不可預測的發送時間和顯著的短信發送費用特別是對初創公司。

生物識別技術

“生物識別技術”指僅使用生物識別方法進行線上驗證。事實上,與其他方法相比,生物識別驗證在本質上轉變了原有“證明擁有某物”的任務為“證明你的身份”。由於隱私問題,生物識別方法主要用於本地驗證。

然而,密碼並不完美

正如我們所見,“密碼殺手”實際上是隱藏密碼或使用密碼作為後備選項。根據我們的討論,以下是密碼的優勢總結:

  • 可訪問性和兼容性:密碼可以在各種系統中使用,對廣泛用戶群體開放。
  • 成本效益和多樣性:基於密碼的驗證方法通常比其他方法更具成本效益,並且可適應不同場景。
  • 匿名性和隱私:密碼允許匿名使用並保護用戶隱私。

但凡事都有兩面。雖然密碼有其優勢,但僅依賴密碼進行驗證則具有重大漏洞。對終端用戶來說,管理密碼可能有挑戰性,如果網站擁有者未遵循正確的安全實踐,密碼很容易被破解。危險的安全實務包括但不限於:

  • 允許使用弱的或洩露的密碼。
  • 未強制執行 HTTPS 連接。
  • 使用不安全的散列算法。
  • 未嚴格遵守OAuthOpenID Connect(OIDC)等久經考驗的標準。
  • 將數據庫暴露給公眾。

結論

我無意貶低上述任何驗證方法。相反,當我在構建 Logto 時,我對這些卓越的驗證方法及其背後的個人懷有深深的敬意。

儘管如此,實現 100% 的安全是一個無法達成的目標。我們可以努力的是降低攻擊的可能性。一種有效的方式是將基於密碼的驗證與根據當前設備或環境的一次性密碼結合,這增加了一個額外的驗證層,並且已被廣泛採用。通過利用不同驗證技術的長處,我們可以創建一種分層的方法,提供更強的保護。

總結而言,與其在密碼並未真正被消除時還專注於像“密碼殺手”這樣的流行語,更有價值的是專注於安全和用戶體驗的平衡。這需要理解各種驗證方法的優勢和限制,並以確保用戶數據安全且用戶體驗順暢的方式實施它們。