我读了很多关于二维码以及二维码本身如何导致严重安全风险的文章。但有一件事是我没有遇到的,那就是下面的内容。
在下面的场景中:我有一个二维码,它显示了我的一些数据,比方说:- Name - Address -a list of I say to do (允许我做的事情的列表)
我扫描我的代码来查看它的内容,在允许我做的事情列表中添加一些stuf,并重新打印二维码。第二天我来上班,扫描我的代码,允许我做我添加到代码中的额外事情。
我的问题是:如何才能阻止这种情况的发生。请注意,无法检查我的数据是否与DataBase数据一致。
更多信息:
我正在使用phonegap和Sencha Touch 2来创建我的二维码阅读器。
这是一个只为Android4.0设备设计的Android应用程序。
二维码每年提供一次。
如果有人扫描他去年的二维码,那是行不通的。
请注意:从理论上讲,如果他更改了他能够进入的代码的日期,这正是我试图阻止的。
一些员工可以访问读取代码的应用程序。
应用程序没有任何方法来验证二维码上的数据,因此它必须只使用二维码上的数据。
发布于 2012-06-29 20:31:51
使用私钥对二维码数据进行签名。阅读器将需要公钥来验证二维码,但公钥不需要保密。
如果您使用的是ECDSA Secp256K1密钥,则签名只会增加约68个字节的二维码数据。
在二维码中也包括签发日期。阅读器需要一个本地时钟来检查二维码是否太旧。如果读者没有时钟,你至少可以跟踪你所见过的最新的有效代码。在该日期之前一年以上发布的任何代码都是绝对无效的。
BouncyCastle和OpenSSL都包含您需要的代码的实现。
如果代码读取器/验证器包含生成假二维码所需的所有信息,那么您可以使用HMAC而不是ECDSA。这更简单,HMAC可以只有16个字节,仍然可以完成这项工作。
发布于 2012-06-29 21:56:02
如果你意识到二维码只是对纯文本进行编码,那么这一切都更容易理解。如果您的方案是不安全的,如果您只是处理文本文件或打印在墙上的文本-- QR码不会改变这一点。二维码中没有安全机制。
扭转局面--除了二维码之外,任何可用来保护您的方案的方法都可能适用于这里。您正在寻找的是数字签名,与用于证明SSL证书有效以及电子邮件来自所声称的发件人的公钥/私钥方案相同。您的用户需要提供的数据必须由您签名,以确保他们没有篡改它。
您可以在二维码中放入任何您想要的内容,包括表示签名文档的Base-64编码字节。没有读者会知道如何处理它;你必须编写一个自定义的应用程序来扫描,然后知道如何解码并采取相应的行动。
我确实认为,到目前为止,更容易构思的方案是将用户引导到您安全控制的网站。
发布于 2012-06-29 20:08:34
如果你不能做任何比较,我不知道你怎么能保证。也许所有的信息都可以用密钥进行哈希处理?没有密钥你就不能重新打印你的代码
https://stackoverflow.com/questions/11261445
复制相似问题