RSA 令牌如何工作?
我想了解 RSA 令牌 (SecurID) 的工作原理,使用的算法是什么,它与常规 RSA 加密/解密的算法相同吗?
I would like to understand how RSA tokens (SecurID) work, what is the algorithm used there, is it the same algorithm as the regular RSA encryption/decryption ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
引用 Wiki
所以,它可能有一些相关的东西 。 RSA 公钥算法。人们对 SecurID 的真正内部原理知之甚少(隐匿性安全),但有一些分析,例如 初始 securid 分析 以及维基百科 SecurID 页面底部的更多信息此外,硬件令牌是 <。 a href="http://en.wikipedia.org/wiki/Tamper_resistance" rel="noreferrer">防篡改,因此几乎不可能复制被盗的令牌。
更新:感谢 eyaler,经典 SecurID 中没有任何公钥/私钥;它们基于“共享秘密”,而不是非对称算法。维基百科说,AES-128 的变体用于从密钥(“种子”)生成令牌代码。秘密密钥在工厂被编码成密钥。
Citing on Wiki
So, it may have something related to the RSA public key algorithm.Little known about real internals of SecurID (security by obscurity), but there are some analysis, e.g. initial securid analysis and more at bottom of SecurID page in wikipedia.Also, hardware tokens are Tamper resistant so it is almost impossible to duplicate stolen token.
UPDATE: Thanks to eyaler, there are no any public/private keys in classic SecurID; they are based on "shared secret", not on asymmetric algorithm. Wikipedia says, that variant of AES-128 is used to generate token codes from secret key ("seed"). The secret key is encoded into key at factory.
您可以在 http://seclists.org/bugtraq/2000/Dec/459
(过于简单的)机制是
You can have a look at how it's really done at http://seclists.org/bugtraq/2000/Dec/459
The (oversimplified) mechanism is
我可以让您了解暴雪移动身份验证器的工作原理,因为它们的代码 已开源。 (存档)
基本要点是:
简而言之伪- 代码是:
I can give you a sense of how the Blizzard Mobile Authenticators work, since their code has been open-sourced. (archive)
The basic gist is:
In brief pseudo-code it is:
@VolkerK 的回答链接到描述“64位”RSA令牌算法的C代码,该算法本质上使用自定义算法(逆向工程〜2000)。
但是,如果您对更现代的“128 位”令牌(包括无处不在的 SID700 硬件令牌和等效软令牌)使用的算法感兴趣,请查看 stoken,一个开源项目,详细记录了其工作原理;
securid_compute_tokencode
是主要入口点。本质上,该算法的工作原理如下:
这并没有什么不同来自开放标准 TOTP 算法(开放式身份验证倡议的一部分)用于 Google 身份验证器、YubiKey、赛门铁克 VIP 访问 等……只是 MOAR SPESHUL 和EKSTRA SECURITEH 专有!
@VolkerK's answer links to C code that describes the algorithm for "64-bit" RSA tokens, which use an essentially custom algorithm (reversed-engineered ~2000).
However, if you're interested in the algorithm used by the more modern "128-bit" tokens (including the ubiquitous SID700 hardware tokens and equivalent soft-tokens), then have a look at the source code for stoken, an open-source project which thoroughly documents their workings;
securid_compute_tokencode
is the main entry point.Essentially, the algorithm works like this:
It's not all that different from the open standard TOTP algorithm (part of the Initiative For Open Authentication) used in Google Authenticator, YubiKey, Symantec VIP access, etc. … just MOAR SPESHUL AND PROPRIETARY for EKSTRA SECURITEH!
您可以参考 RFC TOTP:基于时间的一次性密码算法
正如其中明确描述的,RSA 令牌(SecurID)中使用的确切算法是 TOTP(基于时间的一次性密码算法),哈希算法。
在我们使用令牌之前,种子(可能由 AES-128 的变体生成)已经保存在令牌中。
You can refer to the RFC TOTP: Time-Based One-Time Password Algorithm
As clearly described in that, the exact algorithm used in RSA tokens (SecurID) is TOTP(Time-Based One-Time Password Algorithm), a hash algorithm.
The seed(may generated by a variant of AES-128) was already saved in the token before we using it.