36

最近,我的银行给我发了一个微型设备,它会生成一个在执行在线交易时必须使用的唯一代码,该设备所做的只是在我按下一个特定的白色按钮时生成这个唯一代码,它看起来不像连接到一个远程服务器或类似的东西。

我做了一些研究,最终使用了一种叫做哈希函数的密码学,但我仍然不明白。

我的问题

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

2 回答 2

52

这与散列函数关系不大。加密哈希函数可能是实现的一部分,但不是必需的。

实际上,它以基于时间的间隔生成数字,如果我按下按钮让它生成数字,它会生成数字,大约 25 秒后,我再次按下它,当我再次按下它时,数字不会改变在我按下它之后立即。

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

(尽管我最近使用Amazon Web Service 多因素身份验证的经验肯定会导致在向我显示代码后 5 秒内登录失败。换句话说,一些供应商对其时间窗口非常严格。与往常一样,这是一种交易-在安全性和可用性之间关闭。)

CodesInChaos提到的缩写是基于时间的一次性密码 (TOTP)基于 HMAC 的一次性密码 (HOTP),这两种算法常用于双因素身份验证。

维基百科对RSA SecurID有这样的说法,这是一种特殊品牌的双因素身份验证加密狗。

RSA SecurID 身份验证机制由一个“令牌”——硬件(例如 USB 加密狗)或软件(软令牌)组成——分配给计算机用户并以固定的时间间隔(通常为 60 秒)使用内置时钟和卡的出厂编码随机密钥(称为“种子”)。每个令牌的种子都不同,并在购买令牌时加载到相应的 RSA SecurID 服务器(RSA Authentication Manager,以前称为 ACE/Server)中。

我选择这篇文章是因为它有一个合理的物理描述;更高级别的文章侧重于理论而不是物理实现。

这篇文章还确认您需要保持令牌的机密性,否则其他人可以通过像您一样轻松知道代码是什么来冒充您的登录名。

令牌硬件设计为防篡改,以阻止逆向工程。当相同算法的软件实现(“软件令牌”)出现在市场上时,安全社区已经开发了公共代码,允许用户在软件中模拟 RSA SecurID,但前提是他们可以访问当前的 RSA SecurID 代码,以及引入服务器的原始 64 位 RSA SecurID 种子文件。

然而,由于验证服务器必须对令牌有预知,所以两因素机密也容易受到源头的攻击。SecurID 是针对他们自己的服务器并最终导致对其客户服务器的二次入侵的高调盗窃的受害者。

最后,在security.stackexchange姊妹站点的 multi-factor 标签下,以及在这个站点上的标签下,还有更多信息可用。

于 2014-08-11T18:03:17.127 回答
-5

我刚刚打开了一个旧的安全设备并集思广益。

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

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

回复银行服务器:

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

我确信即使您从不使用安全设备,设备电池也会在电池生命周期内为石英晶体供电。如果取出电池,由于石英晶体未通电,无法生成数字,此时无法计算时间。所以它永远不会再生成相同的唯一数字。

于 2018-10-25T16:51:24.257 回答