汇丰的“安全密钥”究竟是如何工作的?

信息安全 多因素 银行
2021-08-14 17:31:23

我的银行最近寄给我一个 Digipass/Secure Key,它看起来像一个小型计算器您按下绿色按钮将其打开,输入 PIN 以将其解锁,然后再次按下绿色按钮以生成您在登录时输入的 6 位数代码。

但是,我实际上并不了解该设备如何提高安全性。我假设每个设备都链接到一个人的帐户。但是没有来自设备的通信。我可以按 10 次按钮并生成 10 个不同的代码,其中任何一个似乎都有效。

银行如何知道代码是真实的?

3个回答

有两种标准方法可以构建这样的设备:

  • 基于时间。 设备有一个密钥K(只有设备和您的银行知道)。当您按下按钮时,设备会计算F(K, T)(其中T是当前时间)并将其输出为 6 位代码。

    您的银行也知道K,可以计算相同的函数。为了处理时钟可能不完全同步的事实,银行将计算一系列值并测试您提供的 6 位代码是否落在该范围内的任何位置。换句话说,银行可能会计算F(K, T-2) , F(K, T-1) , F(K, T) , F(K, T+1) , F(K, T+2),如果您提供的代码与这 5 个值中的任何一个匹配,银行就会接受您的登录。

    我怀疑这不是您的设备的工作方式,因为每次您按下按钮时,您的设备都会为您提供不同的值。

  • 基于序列。设备有一个密钥K(只有设备和您的银行知道)。它还包含一个计数器C,它计算到目前为止您按下按钮的次数。 C存储在设备上的非易失性存储器中。当您按下按钮时,设备会递增C,计算F(K, C),并将其输出为 6 位代码。这样可以确保您每次都获得不同的代码。

    银行还会跟踪您设备的计数器的当前值,并使用它来识别您提供的 6 位代码是否有效。通常,银行会测试一个价值窗口。例如,如果它看到的最后一个计数器值是C,那么银行可能会计算F(K, C+1) , F(K, C+2) , F(K, C+3) , F(K, C +4)如果它与这四种可能性中的任何一种匹配,则接受您的 6 位数代码。这有助于确保如果您按下按钮一次然后不将其发送到银行,您仍然可以登录(您不会永远被锁定)。在某些方案中,如果代码有间隙(例如,因为您按了几次按钮,然后没有将代码发送到银行),您需要连续输入两个有效代码,银行才会记录您在。

根据您告诉我们的内容,我假设您的设备可能正在使用基于序列的方法。

如果您想对一次性密码的派生方式进行“开放”解释,您可以在此处阅读有关 Oath 标准和算法规范的信息,https://openauthentication.org/specifications-technical-resources/Vasco/Digipass 产品支持此规范,在这种情况下您的令牌可能会使用它,但它们确实支持其他 OTP 生成算法。

通常,令牌的序列号作为记录保存在身份验证服务器数据库中,并将序列号分配给用户名。序列号还与“种子”值相匹配,当通过算法与时间/序列值组合时,该值将得出 OTP。

此外,您可以一遍又一遍地输入 PIN 并通过身份验证,因为身份验证服务器将允许几分钟的时钟漂移。您拥有的令牌有一个内置的时钟来生成基于时间的组件。服务器生成一段时间内的值。然后它可以查看您提交的代码,并将漂移值写入您的记录。某些系统将具有“下一个令牌代码”模式,如果时钟漂移太远,则使用该模式。系统将要求您在更大的“时间范围”内提交两个值,并查看它们是否正确且顺序正确。如果值正确,则认证服务器可以将时钟漂移值写入记录。

我认为这个问题有助于对多因素身份验证 ( MFA ) 的工作原理进行非常高级的概述。当然,我们必须略过很多很多技术细节。

简而言之,会发生以下情况:

  1. 银行使用唯一的加密密钥对令牌进行编程。(在这种情况下,您的 Digipass 令牌是由 Vasco 制造的,但还有许多 其他 公司制造类似的令牌,就多因素身份验证而言,这是“您拥有的东西”)。

  2. 令牌将生成一系列字符,这些字符源自加密密钥、当前时间和(可选)其他各种因素。

  3. 由于银行知道(唯一)加密密钥以及令牌使用的所有其他因素,他们可以对输入进行逆向工程以找出谁“拥有”该令牌。如果令牌的所有者与正在登录的银行帐户的所有者匹配,则登录是真实的。

这个中心主题有很多变体,但总的来说,它们总是涉及“你拥有的东西”(物理令牌或智能手机应用程序)、存储在令牌中的密钥以及产生输出的数学算法。

通常,时间是产生输出的关键因素。根据算法,输出可能每次都不同(在您的情况下),或者它可能只是偶尔变化(例如每小时)。