5

我已经阅读了很多关于二维码以及二维码本身如何导致严重安全风险的信息。但是我没有遇到的一件事是以下。

在以下场景中:我有一个显示我的一些数据的二维码让我们说: - 姓名 - 地址 - 我被允许做的事情的列表

我扫描我的代码以查看其内容,将一些内容添加到我被允许做的事情列表中并重新打印二维码。第二天我来上班,扫描我的代码,然后可以做我添加到代码中的额外事情。

我的问题是:我怎样才能阻止这种情况发生。请注意,无法检查我的数据是否与数据库数据一致。

更多信息:

我将 phonegap 与 Sencha Touch 2 结合使用来创建我的二维码阅读器。
它是专为 Android 4.0 设备设计的 Android 应用程序。
二维码每年提供一次。
如果有人扫描他去年的二维码,那将无法正常工作。
请注意:理论上,如果他更改他能够进入的代码日期,这正是我想要阻止的。
一些员工可以访问读取代码的应用程序。
应用程序没有任何方法可以验证 QR 码上的数据,因此它必须是仅使用 QR 码上的数据的东西。

4

4 回答 4

12

使用私钥对二维码数据进行签名。读者需要公钥来验证二维码,但公钥不需要保密。

如果您使用 ECDSA Secp256K1 密钥,签名只会在 QR 码数据中添加大约 68 个字节。

在二维码中也包括发行日期。读者需要一个本地时钟来检查二维码是否太旧。如果阅读器没有时钟,您至少可以跟踪您所见过的最新有效代码。在该日期之前一年以上发布的任何代码肯定是无效的。

BouncyCastle 和 OpenSSL 都包含您需要的代码的实现。

如果代码阅读器/验证器可以包含生成假二维码所需的所有信息,那么您可以使用 HMAC 而不是 ECDSA。这更简单,一个 HMAC 可以小到 16 字节并且仍然可以完成工作。

于 2012-06-29T12:31:50.897 回答
6

如果您意识到二维码只是对纯文本进行编码,这一切就更容易推理了。如果您只是处理文本文件或打印在墙上的文本,那么您的方案不安全——二维码不会改变这一点。二维码没有安全机制。

扭转局面——除了二维码之外,任何可用于保护您的方案的方法都可能在这里应用。您正在寻找的是数字签名,与用于证明 SSL 证书有效且电子邮件来自声称的发件人的相同类型的公钥/私钥方案相同。您的用户需要提供的数据必须经过您的签名,才能知道他们没有篡改这些数据。

您可以在 QR 码中放入任何您想要的内容,包括表示已签名文档的 Base-64 编码字节。没有读者会知道如何处理它;您必须编写一个自定义应用程序来扫描,然后知道对其进行解码并采取相应措施。

我确实认为构思一个涉及将用户引导到您安全控制的网站的方案要容易得多。

于 2012-06-29T13:56:02.317 回答
0

如果您无法进行任何比较,我不知道您如何确保安全。也许所有信息都可以用密钥散列?那么你不能在没有密钥的情况下重新打印你的代码

于 2012-06-29T12:08:33.600 回答
-3

QR 码只不过是将文本编码为 2D 图像。所以加密不是二维码的责任。但是您总是可以生成一个简单的验证码,例如 MD5 或 Base64,它是由唯一的 id 加上日期创建的。取决于您想要什么样的保护,您可以拒绝或禁用带有错误验证码的代码。

于 2017-08-09T01:50:05.120 回答