【发布时间】:2014-09-12 09:25:31
【问题描述】:
我需要从电路板生成一次性数字代码,此代码必须通过在线 Web 应用程序进行验证,如果令牌有效,则将其记录在其数据库中。
令牌的生成当然必须是用户无法预测的,用户只需单击板上的按钮并取回生成的令牌。
在线应用程序必须能够在不直接与董事会通信的情况下验证令牌。
板子和网络应用程序可以使用什么算法?网上有没有类似的例子?
请注意,看板可能与网络服务不同步(即用户按下按钮 6 次并生成 6 个令牌),但网络服务必须能够验证它们。
算法必须足够简单,例如可以在 Arduino 中实现,未来甚至可以直接在集成电路中实现。
【问题讨论】:
-
对不起,我不相信我在关注这个问题。如果您只是在寻找一种安全地生成随机数的方法,那么这与 AES 有什么关系?当然 AES 应该使用随机数进行数据加密,但 AES 肯定不是随机数生成器。您是在寻找随机数生成器还是整个加密系统?
-
一个随机令牌生成器和一个令牌验证器在不与生成器通信的情况下验证它们,忽略 AES...
-
很抱歉这么晚才回复您的评论。实际上,您对 AES 的评论引发了我一个有趣的想法。如何生成随机数,将分隔符附加到数字的字符串版本的末尾,然后附加纯文本标记值。然后,您可以获取该字符串并 RSA 对其进行加密。 RSA 加密的输出将是您的令牌。如果令牌可以成功解密并包含标记值,则令牌是真实的,并且消息的第一部分(在分隔符之前)是生成的随机数。
-
抱歉,我没有完全理解您的解决方案,但请考虑一下,我说的是 AVR 服装,最多可生成 10 位数字,里面的 RSA 已经太多了。
-
比较简单,和 personne3000 推荐的过程差不多,但是 CRC32 输出一个 32 位(4 字节)的哈希。这 4 个字节可以用 8 个十六进制字符表示,这将为您留出空间来连接 2 个字符的标识符,指示您在 CRC32 哈希中使用的盐。我之所以提到它,是因为我认为 SHA1 HMAC 对于 Attiny 来说可能会占用一些资源。