基於時間的一次性密碼演算法

本页使用了标题或全文手工转换,现处于澳门繁体模式
求聞百科,共筆求聞

基於時間的一次性密碼演算法(TOTP)是一種根據預共用的金鑰與當前時間計算一次性密碼演算法。它已被互聯網工程任務組接納為RFC 6238標準[1],成為主動開放認證(OATH)的基石,並被用於眾多多重要素驗證系統當中。

TOTP是雜湊訊息鑑別碼(HMAC)當中的一個例子。它結合一個私鑰與當前時間戳,使用一個密碼雜湊函數來生成一次性密碼。由於網絡延遲與時鐘不同步可能導緻密碼接收者不得不嘗試多次遇到正確的時間來進行身份驗證,時間戳通常以30秒為間隔,從而避免反覆嘗試。

在特定的多重因素驗證應用中,用戶驗證步驟如下:一位用戶在網站或其他伺服器上輸入用戶名和密碼,使用執行在原生的智能手機或其他裝置中的TOTP生成一個一次性密碼提交給伺服器,並同時向伺服器輸入該一次性密碼。伺服器隨即執行TOTP並驗證輸入的一次性密碼。為此,用戶裝置與伺服器中的時鐘必須大致同步(伺服器一般會接受客戶端時間-1區間(也就是延遲了30秒)的時間戳生成的一次性密碼)。在此之前,伺服器與用戶的裝置必須通過一個安全的信道共用一個金鑰,用於此後所有的身份驗證對談。如需要執行更多步驟,用戶也可以用TOTP驗證伺服器。

定義

TOTP基於HOTP,附帶的時間戳用於替代遞增計數器。

通過定義一個紀元(epoch, T0)的起點並以時間步驟(time step, TS)為單位進行計數,當前時間戳被轉換成一個整形數值的時間計數器(time-counter, TC)。舉一個例子:

TC = 最低值((unixtime(當前時間)−unixtime(T0))/TS),
TOTP = HOTP(金鑰, TC),
TOTP-值 = TOTP mod 10dd 是所需的一次性密碼的位數。

實現

根據RFC 6238標準,供參考的實現如下:

  • 生成一個任意位元組的字串金鑰K,與客戶端安全地共用。
  • 基於T0的協商後,Unix時間從時間間隔(TI)開始計數時間步驟,TI則用於計算計數器C(預設情況下TI的數值是T0和30秒)的數值
  • 協商加密雜湊演算法(預設為SHA-1
  • 協商密碼長度(預設6位)

儘管RFC 6238標準允許使用不同的參數,Google開發的驗證應用不允許不同於預設的T0、TI值、雜湊方法和密碼長度。RFC 3548也同時鼓勵K金鑰以base-32編碼輸入(或以QR碼的形式提供)。[2]

一旦參數協商完畢,密碼開始按照如下方法生成:

  1. 從T0開始已經過的時間,每個TI為一個單位,總數記為C。
  2. 使用C作為訊息,K作為金鑰,計算HMAC雜湊值H(定義來自之前的HMAC演算法,但是大部分加密演算法庫都有支援)。K應當保持原樣繼續傳遞,C應當以64位元的原始無符號的整形數值傳遞。
  3. 取H中有意義最後4位元數的作為彌補,記為O。
  4. 取H當中的4位元,從O位元組MSB開始,丟棄最高有效位,將剩餘位儲存為(無符號)的32位元整形數值I。
  5. 密碼即為基數為10的最低N位數。如果結果位數少於N,從左邊開始用0補全。

伺服器與客戶端都會計算密碼,但是由伺服器來檢查客戶端提供的密碼是否匹配伺服器本地生成的密碼。考慮到輕微的時鐘偏移、網絡延遲或用戶延誤等情況,有些伺服器允許接受本應該在早先已生成或稍後才生成的密碼。

弱點和缺陷

儘管攻擊者需要即時寄存憑證,而不能之後收集,但是TOTP代號跟密碼一樣可能被釣魚。

不限制登入嘗試的TOTP實現容易被暴力破解,因此嘗試次數限制必須非常少。

竊取到預共用金鑰的攻擊者可以隨意生成新的非法的TOTP代號。如果攻擊者攻破大型的認證數據庫,這就會是個問題。[3]

由於TOTP裝置可能會發生電力用盡、時鐘不同步等情況,用戶手機上的軟件也可能遺失或失竊,所有現存的實現都可以繞開相應保護(如:列印的代碼、電子郵件重設等),這對於大型用戶群支援來說是個負擔,並給了欺詐用戶更多的操作空間。

TOTP代號的有效期會長於熒幕上顯示的時間(通常是2倍或更長)。這是對認證雙方的時鐘可能有較大幅度偏移而作出的讓步。

所有基於一次性密碼的認證方案(包括TOTP、HOTP和其他方案)都會暴露於連線劫持當中,比如可以在登入後強徵用戶的對談。

儘管如此,TOTP仍然比單獨使用傳統靜態密碼驗證的安全性強很多。上述的一些問題也可以通過簡單的方法解決(比如為防止暴力破解,可以增加TOTP的位數,或者使用多個TOTP同時驗證)。

歷史

TOTP草案由數碼OATH成員合作開發,目的是建立一個行業通用標準。它完善了基於事件的一次性標準HOTP,並為終端用戶組織和企業在選擇最適合的應用要求與安全規範技術提供了更多選擇。2008年,OATH向IETF提交了一份草案規範。這一版本的草案以之前提交的版本為基礎,包含作者從技術社區收到的全部反饋與評論。[4]2011年5月,TOTP正式成為RFC 6238標準的一部分。

伺服器實現

公司 產品 / 實現的部分
OneLogin 保護
微軟 多重因素驗證[5]
Salesforce.com 賬號存取、加強認證
Authy 賬號存取、加強認證[6]
ServiceNow [7]
Google Google身份驗證器[8]
Facebook 登入許可、代號生成器
Mozilla Firefox 瀏覽器同步賬號存取[9]
亞馬遜公司 Amazon Web Services[10]
Bitbucket 賬號存取[11]
Dropbox 賬號存取[12]
Evernote 賬號存取[13]
Gandi 賬號存取[14]
Zoho 賬號存取[15]
GitHub 賬號存取[16]
Hiveage 賬號存取[17]
LastPass 賬號存取[18]
Linode 賬號存取[19]
WordPress.com 賬號存取[20]
Hover 賬號存取[21]
LinOTP
OpenAM 基於Java的單次登入
ownCloud 賬號存取[22]
Nextcloud TOTP多重因素認證[23]
multiOTP 工具集,網頁整合,網絡服務,半徑外掛程式
privacyIDEA 認證終端
Token2 Token2 TOTPRadius - 針對多重因素驗證設計的RADIUS伺服器[24]
XenForo [25]
賽門鐵克 VIP存取 [26]
HashiCorp 密碼庫[27][28][29]
網易遊戲 網易將軍令[30]
Yandex 賬號存取 [31][32]

客戶端實現

公司 產品 / 實現的部分
Google身份驗證器 Google開發,發佈於Playstore與AppStore
Microsoft Authenticator 微軟開發,可為微軟系網站生成8位元字元權杖,或為其他網站生成6位字元權杖
FreeOTP[33] FreeOTP基於Google Authenticator開發而來,由紅帽公司(RedHat)維護

參考文獻

  1. RFC 6238 - TOTP: Time-Based One-Time Password Algorithm. [2011-07-13]. 
  2. KeyUriFormat. 
  3. Zetter, Kim. RSA Agrees to Replace Security Tokens After Admitting Compromise. WIRED. [2017-02-17] (美國英語). 
  4. Alexander, Madison. OATH Submits TOTP: Time-Based One Time Password Specification to IETF. Open Authentication. [2010-02-22]. 
  5. Microsoft Account Gets More Secure. The Official Microsoft Blog. [2013-04-17]. 
  6. Spend 1 Day To 2FA Your VPN – Authy. [2017-04-26]. 
  7. Multifactor authentication. [2017-11-24]. 
  8. google-authenticator – Project Hosting on Google Code. 
  9. Two-step authentication in Firefox Accounts. Mozilla Services. [2018-08-01] (美國英語). 
  10. AWS Multi-Factor Authentication. [2012-03-06]. 
  11. Two-step verification is here. [2015-09-11]. 
  12. Another layer of security for your Dropbox account. [2013-05-04]. 
  13. Two-Step Verification Available to All Users. [2015-01-05]. 
  14. Gandi rolls out two-factor authentication. [2013-11-21]. 
  15. Two Factor Authentication. [2017-07-26]. 
  16. About Two-Factor Authentication. [2013-09-04]. 
  17. Introducing Two-Step Verification. [2017-02-07]. 
  18. Introducing Support for Google Authenticator. [2011-11-04]. 
  19. Linode Manager Two-Step Authentication. [2013-05-02]. 
  20. Two Step Authentication. WordPress. [2014-01-29]. 
  21. Two-step Signin is Here. [2014-02-25]. 
  22. A Two-Factor-Auth Provider for TOTP (e.g. Google Authenticator). [2017-04-30]. 
  23. Nextcloud 11 sets new standard for security and scalability. Nextcloud. [2016-12-23]. 
  24. Token2 TOTPRadius - a RADIUS server designed for two-factor authentication. Token2. [2017-05-13]. 
  25. [FreddysHouse] Two-factor Authentication. FreddysHouse. [2014-02-10]. 
  26. Reversing the Symantec VIP Access Provisioning Protocol. 2014-09-29 [2017-11-24]. 
  27. Vault 0.7.1. 2017-05-05 [2017-11-24]. 
  28. Vault TOTP Secret Backend. [2017-07-07]. 
  29. Vault TOTP Secret Backend HTTP API. [2017-07-07]. 
  30. 网易将军令:动态密码账号保护器. [2020-02-29]. 
  31. Yandex.Passport. 2015-01-01 [2017-11-24]. 
  32. Yandex now lets you log in without a login (or a password). 2015-02-03 [2017-11-24]. 
  33. FreeOTP. [2021-01-20].