我一直在阅读很多关于二维码以及二维码本身如何导致严重安全风险的文章。但我没有遇到的一件事是以下内容。
在以下场景中:
我有一个二维码,它显示了我的一些数据,可以说:
- 名称
- 地址
- 我可以做的事情的 list
我扫描我的代码以查看其内容,在允许我做的事情列表中添加一些东西并重新打印二维码。
第二天我上类时扫描我的代码,并被允许做我添加到代码中的额外事情。
我的问题是:我怎样才能阻止这种情况发生。
请注意,无法检查我的数据是否与数据库数据一致。
更多信息:
我将 phonegap 与 Sencha Touch 2 结合使用来创建我的二维码阅读器。
它是专为 Android 4.0 设备设计的 Android 应用程序。
二维码每年提供一次。
如果有人扫描他去年的二维码,那将不起作用。
请注意:理论上,如果他更改他能够进入的代码上的日期,这正是我想要阻止的。
一些员工可以访问读取代码的应用程序。
应用程序无法验证二维码上的数据,因此只能使用二维码上的数据。
最佳答案
使用私钥对二维码数据进行签名。读者需要公钥来验证二维码,但公钥不需要保密。
如果您使用 ECDSA Secp256K1 key ,则签名只会向二维码数据添加大约 68 个字节。
在二维码中也包括发行日期。阅读器需要一个本地时钟来检查二维码是否太旧。如果阅读器没有时钟,您至少可以跟踪您所见过的最新有效代码。在该日期之前一年多之前发布的任何代码肯定是无效的。
BouncyCaSTLe 和 OpenSSL 都包含您需要的代码的实现。
如果代码阅读器/验证器可以包含生成假二维码所需的所有信息,那么您可以使用 HMAC 而不是 ECDSA。这更简单,HMAC 可以只有 16 字节,但仍然可以完成工作。