最近,我的银行发给我这个小设备,它生成一个必须在执行在线交易时使用的唯一代码,当我按下一个特定的白色按钮时,所有设备都会产生这个独特的代码,它看起来并不像比如它连接到远程服务器或其他任何东西。
我做了一些研究,最后用Hash function之类的东西加密,但我仍然没有得到它。
我的问题
答案 0 :(得分:36)
这与哈希函数几乎没有关系。加密哈希函数可能是实现的一部分,但它不是必需的。
实际上,它会在基于时间的时间间隔内生成数字,如果我按下它的按钮来生成数字,它会生成数字,大约25秒后,我再次按下它,数字会改变而不是我在我按下它之后立即再次按下它。
有你的暗示。这是一种基于时间的伪随机或加密算法。根据时间,有一个代码。加密狗和服务器知道 - 或者更确切地说,可以计算 - 每个窗口的代码。这是shared secret - 加密狗不连接到远程服务器。服务器可能会允许一个或两个最新的密钥,以防止在传输途中输入只过期的密钥的情况。
(虽然我最近使用Amazon Web Service multi-factor authentication的经历肯定会导致代码显示给我的5秒内登录失败。换句话说,一些供应商对他们的时间窗口非常严格。一如既往,它是一个在安全性和可用性之间进行权衡。)
缩写 CodesInChaos 提及的是Time-based One-Time Password (TOTP)和HMAC-based One-Time Password (HOTP),这两种算法通常用于双因素身份验证。
维基百科对RSA SecurID,two-factor-authentication加密狗的特定品牌有这个说法。
RSA SecurID身份验证机制由“令牌”组成 - 硬件(例如USB加密狗)或软件(软令牌) - 分配给计算机用户并以固定间隔生成验证码(通常为60)秒)使用内置时钟和卡的工厂编码随机密钥(称为“种子”)。每个令牌的种子都不同,并且在购买令牌时将其加载到相应的RSA SecurID服务器(RSA Authentication Manager,以前称为ACE / Server)中。
我之所以选择这篇文章,是因为它具有合理的物理描述;更高层次的文章关注物理实现的理论。
该文章还确认您需要保持令牌的保密性,或者其他人可以像您一样轻松地了解代码,来冒充您的登录。
令牌硬件设计为防篡改以阻止逆向工程。当市场上出现相同算法(“软件令牌”)的软件实现时,安全社区开发了公共代码,允许用户在软件中模拟RSA SecurID,但前提是他们可以访问当前的RSA SecurID代码,以及引入服务器的原始64位RSA SecurID种子文件。
但是,由于验证服务器必须预先知道令牌,因此双因素机密也容易受到攻击。 SecurID是高调盗窃的受害者,它以自己的服务器为目标,并最终导致其客户服务器的二次入侵。
最后,security.stackexchange姐妹网站上的多因素代码下有更多信息,而且此网站也位于two-factor-authentication代码下。
答案 1 :(得分:0)
我是电气与电子工程师。刚刚打开一个旧的安全设备并就此进行了头脑风暴。
每个安全设备的内部都有一个石英晶体,只要该晶体通电,它的生命周期就会开始(就像每个人出生的世界一样),并且没有一个设备在相同的确切时间启动(因为不会产生相同的数量)因此,每当您按下按钮时,它都会通过计算经过时间(转换为唯一数字,因为我的设备上以15秒为间隔显示6位数字)而生成一个唯一数字(可能约为1/1000000精度)。但是银行服务器如何知道我的唯一生成号码?
激活后,银行可能正在计算经过的时间;因为您必须在首次使用时使用您自己的设备生成的唯一编号激活这些安全设备。因此,在精确的时间计算中,银行服务器知道输入的数字必须为xxx-xxx,并且会随着时间的流逝而改变。
即使您从未使用过安全保护设备,我也可以确保设备电池在电池寿命周期内为石英晶体供电。如果卸下电池,由于石英晶体未供电,因此无法生成数字,并且此时无法计算时间。因此它再也不会生成相同的唯一数字。
答案 2 :(得分:-3)
这不是计算机怪胎,但我想给定硬令牌的人分配了某些数字,并且这些数字与日期有关。因此,每天,当令牌生成一个“随机”数字时,它将是该日期分配给用户的数字之一。对于一个六位数的数字,位数可能接近一百万。