我一直在阅读很多关于QR码以及代码本身如何导致严重安全风险的内容。但有一件事我没有遇到过以下几点。
在以下场景中: 我有一个QR码显示我的一些数据让我们说: - 名称 - 地址 - 我允许做的事情列表
我扫描我的代码以查看其内容,将一些stuf添加到我允许做的事情列表中并重新打印QR码。 第二天,我来上班扫描我的代码,我被允许做我在代码中添加的额外内容。
我的问题是:如何阻止这种情况发生。 请注意,无法检查我的数据是否与DataBase数据一致。
更多信息:
我正在使用phonegap与Sencha Touch 2一起创建我的QR码阅读器
它是专为Android 4.0设备设计的Android应用程序
二维码每年提供一次
如果有人会扫描他去年的二维码,那就不行了
请注意:理论上如果他改变了他能够进入的代码的日期,这正是我试图阻止的。
有些员工可以访问读取代码的应用程序
该应用程序没有任何方法来验证QR码上的数据,因此它必须是仅使用QR码上的数据的东西。
答案 0 :(得分:10)
使用私钥对QR代码数据进行签名。读者需要公钥来验证QR码,但公钥不需要保密。
如果使用ECDSA Secp256K1密钥,签名只会为QR码数据增加约68个字节。
在QR码中也包括发行日期。读者需要一个本地时钟来检查QR码是否太旧。如果读卡器没有时钟,您至少可以跟踪您见过的最新有效代码。在该日期之前一年多发布的任何代码肯定无效。
BouncyCastle和OpenSSL都包含您需要的代码实现。
如果代码阅读器/验证器可以包含生成伪QR码所需的所有信息,那么您可以使用HMAC而不是ECDSA。这更简单,HMAC可以只有16个字节,但仍可以完成工作。
答案 1 :(得分:6)
如果您意识到QR码只是编码纯文本,这就更容易推理了。如果你的方案是不安全的,如果你只是处理文本文件或印在墙上的文字 - 二维码不会改变它。 QR码中没有安全机制。
扭转局面 - 在QR码之外的任何可用于保护您的方案的方法都可以在这里应用。您正在寻找的是数字签名,用于证明SSL证书有效并且电子邮件来自声明的发件人的相同类型的公钥/私钥方案。您的用户需要提供的数据必须由您签名才能知道他们没有篡改过。
您可以将任何想要的内容放入QR码中,包括代表签名文档的Base-64编码字节。没有读者会知道如何处理它;你必须编写一个自定义应用程序,扫描然后知道解码它并采取相应的行动。
我认为设想一个涉及将用户引导到您安全控制的网站的方案要容易得多。
答案 2 :(得分:0)
如果你不能做任何比较,我不知道你怎么能保证。也许所有信息都可以使用密钥进行哈希处理?那么你不能在没有密钥的情况下重新打印代码
答案 3 :(得分:-3)
QR码不仅仅是将文本编码为2D图像。所以加密不是QR码的责任。但您始终可以生成简单的验证码,例如从唯一ID加上日期创建的MD5或Base64。取决于您想要什么样的保护,您可以拒绝或禁用代码附带错误的验证码。