如何制作可以手工验证的文件?

时间:2013-01-17 17:44:47

标签: security language-agnostic

这是我的情况(简化)示例 用户玩游戏并获得200分的高分。我用金钱奖励高分,即1欧元/ 10分。用户将打印一张“收据”,表示他赢了20欧元,然后他把它给了我,我确保收据是真实的,之前从未使用过,我把他的奖品递给他。登记/> 显然,我的“问题”在大胆的部分。我应该能够手动验证“收据”,但也欢迎使用其他离线方法的解决方案(即我的手机的小型.jar应用程序)。此外,制作假收据一定很难。

这是我到目前为止的想法,他们的优点和缺点。

  • 使用常用算法散列,即SHA512

    • 优点:可以很容易地通过移动设备进行验证,具有很强的抵抗力,可以使用更高的值伪装它(如果使用依赖于上下文的盐,即用户名)。
    • 缺点:可以多次使用,不能手工验证。
  • 自制哈希算法

    • 优点:可以手工验证。
    • 缺点:可能很容易被破坏,可以多次使用。
  • 证书代码:我在两个数据库中有一个代码列表,一个在服务器上,另一个在我的手机上。每次打印收据时,其中一个打印在其中并设置为“已使用”到数据库中。在我的手机上,我也这样做:检查代码是否在数据库中并且尚未使用,然后在数据库中设置为“used”。

    • 优点:不允许多次使用相同的代码。
    • 缺点:伪造收据非常容易,不能手工验证。

2 个答案:

答案 0 :(得分:2)

这听起来像是Hash-based message authentication code(HMAC)算法的经典用例。由于您对“手动”的想法是“使用智能手机“,而不是” with pecil,paper,and mind “,您可以计算哈希并将其打印在收据上,然后在手机或后端验证它服务器

答案 1 :(得分:-1)

“缺失点”是一次使用更多系统,以便它们一起以所需的方式工作。在这种情况下,我们可以使用HMAC验证消息和“证书代码”列表,以确保不会反复使用相同的收据。
另一个想法也可能是将收据输出到客户端并将其打印在收据上的时间。当有人向您显示收据上的代码时,您确保哈希尚未使用并且它是有效的(即消息产生该哈希),然后将其添加到“使用过的哈希”列表中。

感谢@RossPatterson建议HMAC。