題:
接受當前和先前的一次性密碼是一種不好的做法嗎?
Bob Ortiz
2017-06-22 17:08:57 UTC
view on stackexchange narkive permalink

我經常看到使用一次性密碼(OTP)實現的兩因素身份驗證(2FA)方法,其中當前(先前)令牌,有時甚至2或3個先前令牌仍然有效。這樣做可能有幾個原因,我可以想到:

  • 以克服客戶端和服務器之間可能的時間同步問題(用戶體驗),
  • 為方便起見,系統管理員不要經常收到有關無法登錄的支持電話。

接受以前的OTP是一種不好的做法嗎?如果是的話,關於實現此類“功能”的一般建議是什麼?

如果我輸入錯了,但是當令牌是6位數字時,更正我,可能的組合數是1.000 .000(000000-999999)。因此,在30秒的時間內,只有百萬分之一的令牌被接受。但是,當接受先前的(甚至更多先前的)令牌時,機會基本上是百萬分之二,三,四或五。

您是否在詢問2因子認證(2FA)或一次性密碼(OTP)?
@StevenVascellaro闡明您的“或”是什麼意思?哪個為用戶生成代碼的2FA不是OTP?一種是另一種的實現。
二 答案:
Nalaurien
2017-06-22 17:29:58 UTC
view on stackexchange narkive permalink

如果以前的意思是說OTP早於已經通過身份驗證的用戶使用的OTP,那麼可以,這被認為是不好的做法。 OTP只能使用一次,因此得名。 2FA的全部要點是它代表安全三位一體中的“您擁有的東西”。允許兩次使用令牌會破壞OTP旨在防止的目的。將其轉換為“您知道的東西”,使其僅是第二個密碼。

此問題通常不會以暴力破解的形式出現。例如,在時間窗相對較短的TOTP中,並沒有真正使用蠻力來規避。作為允許攻擊者重複使用OTP的站點的用例,無論是當前的還是過去的都是攔截。密碼。

對於HOTP,問題甚至更嚴重,因為從理論上講計數器或移動因子不會經常增加。意味著用戶認證的最後一個或什至先前的OTP可能很長一段時間都有效。在某些情況下,取決於服務器的實施情況。

如果以前是指當前正在生成但尚未使用的OTP,則在限制範圍內。 OTP的標準實現通常使用“窗口”來克服同步問題。在TOTP的情況下,使用了5秒的窗口(向前和向後),但是在我所看到的任何實現中,這始終不允許用戶在最後一個進行身份驗證的OTP上或之前進行。如果我們以15s窗口的15s移動步驟為例,那麼在45s的時間範圍內將可以使用三個OTP進行身份驗證,一個是過去的,現在是一個,將來的一個(假設間隔是相同的)作為移動步驟)。在@cornelinux的答案中可以很好地解釋其背後的原因。

對於HOTP而言,該窗口是“向前看”窗口。如果用戶進行身份驗證的最後一個OTP在接受的上一個OTP的下10個OTP之內,則允許該操作,然後實現會根據該下一個OTP計算下一個10,以對照輸入的下一個OTP。在成功使用窗口之前,不考慮窗口中未使用的任何OTP都是很有意義的。

注意:

在HOTP 10中,任意的。通常,該因子約為成功進行身份驗證所需的OTP數量的2.5倍。因此,如果用戶需要3個HOTP進行身份驗證,則該窗口將比當前窗口高8個OTP。

在TOTP中5秒也是可變的。在某些情況下,我看到的窗口大到移動步驟的100%。因此,以30秒的步長和30秒的窗口有效地使代碼對於1:30有效。再次,在當前迭代之前和之後進行擴展。

我喜歡這個答案
這不是OP的要求。OP正在詢問接受當前TOTP生成的x秒和x * 2秒之前生成的TOTP的前2個或3個令牌是否危險。與之前已成功使用的令牌無關。
@GillBates實際上,OP沒有指定它。這就是為什麼我將其包含在答案中的原因。您可以將其視為第1節和第2節。第1節處理“上一個”表示OTP在最後一個已認證的OTP上或之前的情況。第2節,“上一個”可以在當前迭代之前或之後(即尚未通過身份驗證)應用於窗口。
cornelinux
2017-06-22 20:28:05 UTC
view on stackexchange narkive permalink

您可能還想看看RFC6238(TOTP)。 https://tools.ietf.org/html/rfc6238#page-6

有一個驗證OTP值的時間窗口。 (正如@Nalaurien指出的,只有一次)。允許使用更高甚至更高的TOTP值也有實際原因:硬件令牌的時鐘偏移以及用戶需要讀取和輸入OTP值的時間。

時鐘偏移和硬件

請注意,TOTP是在2011年指定的。HOTP是TOTP的基礎,甚至是在2005年指定的。iphone1是在2007年發布的。TOTP從未考慮過要在智能手機上運行,而是要在價格便宜的硬件智能鑰匙扣上運行,而且質量較差

您可能還會注意到,HOTP(RFC4226)和TOTP(RFC623)是由認證硬件公司的工作人員而不是Google或Apple編寫的。 ;-)

哪些硬件公司開發了它?
“(正如@Nalaurien指出的那樣,只有一次)”感謝您指出的這一點,我將在解釋的那一部分進行一些擴展。
@KevinMorssink Vasco,Gemplus,Aladdin,Portwise ... openauthentication計劃有軟件和硬件供應商。但是大多數創始者也是硬件供應商(因為此時還沒有軟令牌或虛擬令牌)
@cornelinux有趣的背景信息。謝謝。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...