硬件令牌设备是如何工作的?

39

最近,我的银行寄给我一款小设备,在执行在线交易时需要使用这个设备生成的唯一代码。该设备仅在我按下特定白色按钮时生成这个唯一代码,看起来并不像连接到远程服务器或其他类似的东西。

我进行了一些研究,进入了密码学领域,了解了一种叫做哈希函数的东西,但我仍然不明白它。

我的问题

  • 我的银行服务器如何知道此设备生成的代码是正确的?
  • 既然它只是每30秒生成五个随机数字,为什么服务器不会验证我决定使用的随机数?

6
如果需要基于时间,显然选择 TOTP,如果需要每次按下按钮生成代码,那么显然选择 HOTP。(它们本质上是相同的,前者使用时间,后者使用计数器) - CodesInChaos
2
实际上,它是根据时间间隔生成数字的,如果我按下按钮让它生成数字,那么它会生成数字,大约25秒后,我再次按下按钮,当我刚刚按下按钮之后立即再次按下按钮时,数字不会改变。 - Feyisayo Sonubi
2
这个问题似乎不属于编程范畴,因此被认为是不相关的。 - Eugene Mayevski 'Callback
3
一些双因素身份验证方案实际上通过手机短信接收来自服务器的代码。这个想法是,如果您拥有手机,那么您更可能是本人而不是他人。可以使用任意数量的加密方案来确保传输不被拦截。 - Patrick M
1
我投票关闭此问题,因为它不是一个编程问题。请尝试访问[security.se]。 - Toby Speight
3
我投票关闭此问题,因为它不是一个编程问题。 - cigien
2个回答

54

这与哈希函数几乎没有关系。密码哈希函数可能是实现的一部分,但并不是必需的。

实际上,它是根据时间间隔生成数字的,如果我按下按钮让它生成数字,它会生成数字,在大约25秒后,我再次按下按钮,数字会改变,而不是在我刚刚按下按钮后立即再次按下按钮。

这就是提示。它是基于时间的伪随机或加密算法。根据时间,有一个代码。加密狗和服务器知道 - 或者更确切地说,可以计算出 - 每个窗口的代码。这是一个共享密钥 - 加密狗不连接到远程服务器。服务器可能会允许最近的一个或两个密钥,以防止您在传输途中输入已经过期的密钥。

虽然我最近使用Amazon Web Service multi-factor authentication时,当代码显示给我后,登录失败的时间不超过5秒。换句话说,有些供应商对其时间窗口非常严格。一如既往,这是安全性和可用性之间的权衡。

CodesInChaos提到的缩写是基于时间的一次性密码(TOTP)HMAC-based One-Time Password (HOTP),这两个算法通常用于双重认证。

维基百科关于RSA SecurID的描述,它是一种双因素认证加密狗的特定品牌。

RSA SecurID身份验证机制包括“令牌”-硬件(例如USB加密狗)或软件(软令牌),分配给计算机用户,并使用内置时钟和卡片的工厂编码随机密钥(称为“种子”)在固定间隔(通常为60秒)生成认证代码。每个令牌的种子都不同,并在购买令牌时加载到相应的RSA SecurID服务器(RSA Authentication Manager,以前称为ACE / Server)中。我选择这篇文章是因为它有一个合理的物理描述;高级别的文章侧重于理论而不是物理实现。该文章还确认您需要保持令牌的机密性,否则其他人可以通过知道代码来模拟您的登录,就像您一样容易。令牌硬件设计为防篡改,以防止逆向工程。当同一算法的软件实现(“软件令牌”)出现在市场上时,安全社区开发了公共代码,允许用户在软件中模拟RSA SecurID,但前提是他们拥有当前的RSA SecurID代码和引入服务器的原始64位RSA SecurID种子文件。
然而,由于验证服务器必须预先知道令牌,因此双重认证密钥也容易受到源攻击的威胁。SecurID曾成为高调盗窃事件的受害者,该事件针对了他们自己的服务器,并最终导致客户服务器遭受次要入侵。

最后,在security.stackexchange姊妹站点的多因素标签下以及本站的标签下提供了更多信息。


1
我有一台来自荷兰银行Rabobank的设备,它在我批准之前显示了所有关于我的交易的信息。这是如何在硬件设备中实现的? - Anand
1
该设备配有2节AA电池,我已经使用了一年多。因此,操作步骤如下:登录时,我插入卡片,在屏幕上扫描QR码并在设备中输入我的密码进行身份验证。当我进行交易时,系统会显示一个QR码,我扫描后获取购买信息并进行身份验证。当我在设备中说“身份验证”时,系统会进入下一个屏幕,显示交易成功(我不需要输入任何代码或扫描任何东西,只需在设备上点击即可)。我已经在许多国家尝试过这个设备,它非常可靠。 - Anand
它曾经很流行很长一段时间。但随后,随着移动服务足够好,许多人开始用仅支持语音的手机取代仅有号码的寻呼机,然后在2000年,短信风靡一时。基于文本的双向寻呼并不需要携带第二个设备。如果能够开发出一款同时支持双向寻呼的手机,那将是非常有趣的事情,就像当技术还很新且竞争较多时,许多手机都能够连接GSM和CDMA网络一样。 - Patrick M
但是,如果我有一个虚拟的MFA设备,例如Authy在我的手机上,那么Authy如何知道为不同的帐户/网站/等生成不同的令牌?我猜服务器和MFA设备或加密狗最初会交换一些信息...例如,我用Authy扫描了一个条形码。否则,如果生成的令牌只是当前时间的函数,它们将对您想要使用MFA身份验证保护的所有帐户都是相同的。那么现在我的问题是:如果我有一个物理的MFA设备,它将如何与服务器交换一些初始信息? - peter.petrov
基本上你已经明白了。你扫描的每个QR码都是软件令牌。Authy自己的文档链接到这篇手册文章2FA的常见类型。硬件令牌预装有QR码中的信息。当你设置硬件令牌2FA时,你不需要从提供者那里获取新信息;相反,你告诉提供者“这是我的硬件令牌”,他们会查找他们的秘密副本并将其与你的帐户关联起来。 - Patrick M
显示剩余3条评论

-5

我刚刚打开了一个旧的安全设备并对其进行了头脑风暴。

我有一个与经过时间相关的答案:

每个安全设备内部都有一个石英晶体,只要该晶体接通电源,它的生命周期就开始了(就像每个人出生到这个世界上一样),而且没有任何一个设备在完全相同的时间启动(由于不会在完全相同的时刻生成相同的数字),因此每当您按下按钮时,它会通过计算经过的时间(可能精度为1/1000000,因为我的设备显示6位数字,间隔为15秒)转换为唯一的数字。但是银行服务器如何知道我的唯一生成的数字呢?

向银行服务器提供答案:

可能银行正在计算您激活后经过的时间;因为您必须使用自己设备生成的唯一数字在第一次使用时激活这些安全设备。因此,在精确的时间计算中,银行服务器知道输入数字必须是xxx-xxx,并且随着时间的流逝而改变。

我确定即使您从未使用安全设备,设备电池也会在电池寿命期间为石英晶体提供电源。如果取出电池,则由于石英晶体未接通电源,无法生成数字,并且此时无法计算时间。因此,它永远不会再次生成相同的唯一数字。


“它的生命周期开始了(就像每个人出生到这个世界上一样),没有任何设备在完全相同的时间启动” - 这非常不实际,因为那样你无法每15秒生产出更多的设备。此外,这非常不安全,因为全球每个设备都将拥有相同的内部密钥,如果一个设备被反向工程化,那么全球每个设备都将立即破解。” - Artjom B.
15秒太长了,我的意思是下一个设备可能会在1秒内诞生。这是安全的,因为您正在使每个设备独一无二,因为出生时间不同。 - Gem
当您重复按下按钮时会发生什么?如果在15秒间隔期间代码没有多次更改,则根据您的逻辑每个15秒间隔只能铸造一个设备。该按钮可能仅用于打开屏幕电源。如果代码在每次按下按钮时都会更改,那么银行服务器如何知道您最后一次按下按钮的时间,因为他们需要计算相同的代码,并且只有在您完成输入代码进入银行网站时才知道您已经完成了操作? - Artjom B.
啊哈,这些设备只会在15秒内(或更长时间)显示生成的数字,因此您必须在15秒内输入您的银行账户号码。您可以重复按按钮,但是设备中的软件只接受第一次按下作为代码生成,第二次按下只会关闭显示屏,再次按下会重新打开,但如果15秒未结束,则仍然显示相同的数字。银行服务器计算经过的时间,可能检查许多数字组合,这些组合可能在时间限制15秒或更长时间内。 - Gem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接