最近,我的银行给我发了一台微型设备,它生成一个在执行在线交易时必须使用的唯一代码,所有设备所做的就是在我按下一个特定的白色按钮时生成这个唯一的代码,它看起来不像是连接到远程服务器或类似的任何东西。
我做了一些研究,最后用了一种叫做散列函数的密码学,但我仍然不明白。
我的问题
发布于 2014-08-11 18:03:17
这与散列函数没有多大关系。加密散列函数可能是实现的一部分,但它不是必需的。
实际上,它在一个基于时间的间隔上生成数字,如果我按下按钮来生成数字,它会在大约25秒后生成数字,然后再按一次,当我刚刚按下它之后再次按它时,数字不会改变。
这是你的提示。这是一种基于时间的伪随机或密码算法。根据时间,有一个密码。dongle和服务器知道--或者更确切地说,可以计算--每个窗口的代码。这是一个共享秘密 - dongle不连接到远程服务器。服务器可能会允许一个或两个最近的秘密密钥,以防止在传输途中输入刚刚过期的密钥的情况。
(尽管我最近使用Amazon服务多因素身份验证的经验确实导致了在代码显示后的5秒内登录失败。换句话说,一些供应商对他们的定时窗口非常严格。和往常一样,这是在安全性和可用性之间的权衡。)
CodesInChaos所提到的缩写是基于时间的一次性密码和基于HMAC的一次性密码(HOTP),这两种算法通常用于双因素身份验证.
维基百科对RSA SecurID ( 双因素认证 dongle的一个特殊品牌)有这样的看法。
RSA SecurID认证机制包括一个“令牌”--硬件(例如using )或软件(软令牌)--分配给计算机用户,并使用内置时钟和卡的工厂编码随机密钥(称为“种子”)在固定的时间间隔(通常为60秒)生成身份验证代码。每个令牌的种子是不同的,并且随着令牌的购买,种子被加载到相应的SecurID服务器(,以前是ACE/ server )中。
我之所以选择这篇文章,是因为它有一个合理的、物理的描述;更高层次的文章侧重于理论上的物理实现。
这篇文章还确认,您需要保持令牌的机密性,否则其他人可以像您一样容易地通过知道代码是什么来模拟您的登录。
令牌硬件被设计成抗篡改,以阻止逆向工程.当同一算法(“软件令牌”)的软件实现在市场上出现时,安全社区已经开发了公共代码,允许用户在软件中模拟RSA SecurID,但前提是他们能够访问当前的SecurID代码和引入服务器的原始64位RSA SecurID种子文件。
但是,由于验证服务器必须对令牌有预见性,所以两个因素的秘密也容易受到对源的攻击。SecurID是一次高调盗窃的受害者,其目标是他们自己的服务器,并最终导致了对客户服务器的二次入侵。
最后,在多因素标签下的security.stackexchange姐妹站点上,以及在双因素认证标签下的这个站点上,都有更多的信息可用。
发布于 2018-10-25 16:51:24
我刚刚打开了一个旧的安全装置然后头脑风暴了一下。
我有一个与时间有关的答案:
这些安全设备中的每一个都有一个石英晶体,每当该晶体被供电时,它的生命周期就开始了(因为每个人都出生在世界上),而且没有一个设备是在相同的时间启动的(因为没有在完全相同的时刻产生相同的数字),所以每当您按下按钮时,它就会通过计算经过的时间(可能是1/1000000的精度,因为我的设备上每隔15秒显示6位数字)来生成唯一的数字,从而生成唯一的数字。但是银行服务器怎么知道我唯一生成的号码呢?
回答银行服务器:
可能银行正在计算激活它之后的运行时间;因为您必须在第一次使用时使用从您自己的设备生成的唯一编号来激活这些安全设备。因此,在精确的计时计算中,银行服务器知道输入号必须是xxx-xxx,并且随着时间的推移将发生变化。
我确信,设备电池在电池寿命周期内给石英晶体供电,即使你从未使用过安全装置。如果电池被移除,由于石英晶体没有动力,并且时间不能在那一刻计算,它就不能产生数字。所以它再也不能产生相同的唯一数字了。
https://stackoverflow.com/questions/25248989
复制相似问题