双重身份验证系统的逆向工程一次性密码

信息安全 密码 爪哇
2021-09-02 12:24:34

给定一个基于时间的一次性密码生成器(例如 Google Authenticator),需要多少个(时间,PIN)对实例才能显着削弱算法,使其能够缩小可能的种子范围到原来的功能?如果通过 SMS 或电子邮件向客户发送 PIN 码(而不是使用密钥卡或不会让人们看到过去 PIN 码的实际 Google Authenticator 应用程序),那么泄露过去 PIN 码的妥协是否会对系统构成重大威胁(请注意,电子邮件和短信都带有相对精确的时间信息)?

这个问题与双因素身份验证系统的设计有关,它是否应该涉及生成的一次性密码的任何时间戳存储。如果这大大削弱了系统的安全性,那么有人会争辩说,该设计不应包括任何过去 OTP(电子邮件、SMS 或其他)的存储。

根据人们对stackoverflow的建议,这里重新提出:https ://stackoverflow.com/questions/9041162/reverse-engineering-one-time-passwords-for-two-factor-authentication-systems (问题会指向到这里)

3个回答

如果 OTP 生成算法很好(并且 HOTP很好):

  • 当知道一个生成的密码并尝试猜测下一个密码时,最好的攻击应该是对密钥进行详尽搜索(如果密钥足够大,例如 128 位密钥,则无法进行详尽搜索);
  • 知道许多以前的密码不应该给攻击者任何额外的优势。

RFC 4226 的附录 A 详细介绍了 HOTP 的安全分析;其核心在于假设 HMAC/SHA-1 是一个密钥选择的随机函数:

更准确地说,让 Maps(c,n) 表示从 {0,1}^c 映射到 {0,1}^n 的所有函数的集合。理想化算法具有密钥空间 Maps(c,n),因此此类算法的“密钥”是从 {0,1}^c 到 {0,1}^n 的函数 h。我们想象这个键(函数)是随机绘制的。

这是随机预言模型。具有安全散列函数的 HMAC,或者甚至具有像 SHA-1 这样的弱散列函数的 HMAC,是密码学家存储的随机预言的最佳实用近似值。

总结一下HOTP的安全证明:

  • 使用随机预言机,您对给定输入的输出一无所知,直到您在该确切输入上尝试它
  • 生成的密码是(源自)HMAC/SHA-1 的输出,据信与随机预言机无法区分,通过计数器值;
  • 因此,在实际输入相应的计数器值作为 HMAC/SHA-1 的输入之前,没有人知道将生成的密码,这是以前没有发生过的(对于较旧的生成密码),因为这是一个计数器,它不会“环绕”。

当然,有一些细节需要注意,但是 RFC 编写者是著名的密码学家,附录 A 中详述的证明是合理而清晰的(并且已经被许多其他密码学家审查过,这是对安全性的真正考验)。

根据 RFC:

分析表明,这些最终步骤引入了可忽略的偏差,这不会影响 HOTP 算法的安全性,因为对 HOTP 函数的最佳可能攻击是暴力攻击。假设对手能够观察到大量的协议交换并收集成功的身份验证值序列。这个对手,试图建立一个函数 F 来根据他的观察生成 HOTP 值,不会比随机猜测有明显的优势。合乎逻辑的结论很简单,最好的策略将再次执行暴力攻击以枚举并尝试所有可能的值。

因此,根据安全分析,您是否存储或访问旧的 OTP 值几乎没有区别。您基本上不能使用它们来增加找到正确 OTP 值的机会。

一次性密码生成器的安全性显然不能因为知道以前的密码而被削弱。

关键点是,使用带有 a key known only to the token and the validation service( RFC 4226 ) 的对称密码术不允许您缩小搜索空间下用于加密的对称密钥/算法组合的可能种子- 反过来应该选择大/ 足够安全,使暴力攻击变得不切实际。