1

我需要从板上生成一次性数字代码,必须从在线 Web 应用程序验证此代码,如果令牌有效,则将其记录在其数据库中。

令牌的生成当然必须是用户无法预测的,用户只需单击板上的按钮并取回生成的令牌。

在线应用程序必须能够在不直接与董事会通信的情况下验证令牌。

板子和 Web 应用程序可以使用什么算法?网上有没有类似的例子?

请注意,看板可能与 Web 服务不同步(即用户按下按钮 6 次并生成 6 个令牌),但 Web 服务必须能够验证它们。

该算法必须足够简单,例如可以在 Arduino 中实现,将来甚至可以直接在集成电路中实现。

4

2 回答 2

4

假设您有一个秘密密码 p,您将其保存在令牌生成器和令牌验证器中。

令牌生成器生成一个随机数 N,并将其与 hmac_sha1(N, p) 连接。有关 HMAC 的更多信息,请查看维基百科页面。您的令牌将具有 randomNumber_hmac 格式,如下所示:

0123456_0xfbdb1d1b18aa6c08324b7d64b71fb76370690e1d

然后你的接收者可以解析这个令牌来提取随机数(这里是 0123456)并计算 hmac_sha1(0123456, p)。如果它与令牌中给出的 HMAC 匹配,则意味着它是由知道 p 的人生成的……应该是令牌生成器。

那些是指针。可以实现更好的安全性(第一步使用散列而不是随机数),但这应该已经很可靠了。只要令牌的第一部分中有一些强随机分量,您也可以将其与附加数据连接起来。例如,使用 UUID,您可以 100%(只需进行一点舍入)确保每次生成不同的令牌,并且令牌验证者可以检查每个令牌是否只使用一次。

于 2014-09-30T07:45:24.617 回答
1

查看 HOTP (RFC 4226) 或 TOTP (RFC 6238) 算法。该算法是一次性密码生成的标准。

另外,我可以建议您不要发明轮子并使用来自世界知名的强大身份验证提供商之一的全面且安全的解决方案:VascoProtectimus、 RSA (无法从第一次尝试谷歌它)。他们有多种选择用于 OTP 生成的特殊安全设备和检查它的软件。该设备的价格与其说是发明自己的设备,不如说是 Protectimus 提供的 TOTP 兼容设备,起价为 7 美元(解决方案页面)。
你可以通过其中之一,当然如果你没有一些额外的特殊要求

于 2014-10-14T13:16:41.170 回答