【发布时间】:2015-02-27 02:48:54
【问题描述】:
我一直在寻找类似“反向非对称加密”的东西,遇到了 great post,它实际上涵盖了我需要的内容。
我希望我的应用程序的每个用户都有一个公钥,允许他们解密隐藏在二维码中的消息,该二维码是用我的私钥加密的。我想确保我的系统不会被覆盖我的假二维码所欺骗。接受的答案建议使用数字签名,所以我在 Google 上搜索了 Java tutorial,展示了如何使用该功能。
这里有点误解。我以为使用数字签名,会有一个简单的情况(姑且称之为Situation A):
- 消息使用私钥加密
- 用户读取加密消息
- 用户使用公钥解密消息。
但是,我的理解是数字签名更像是:
- 使用私钥和消息创建数字签名。
- 用户需要原始消息和签名文件。
- 用户使用数字签名来验证消息没有被更改并且来自我。
我在这里吗?如果是这样,我怎样才能将我的消息和签名都放在二维码中?在Situation A 的情况下,事情似乎很简单,因为我可以简单地使用 Base64 对加密消息进行编码并将结果放入 QR 码中。但是,如果不使用encode message, encode signature, put them in one file, encode it, put the result in the code 之类的技巧,我似乎无法做同样的事情。那我该怎么做呢?
哦,还有一个answer from question "QR code security"说:
您可以在 QR 码中放入任何您想要的内容,包括表示已签名文档的 Base-64 编码字节。没有读者会知道如何处理它;您必须编写一个自定义应用程序来扫描,然后知道对其进行解码并采取相应措施。
根据前面提到的教程,看起来签名文档本身是不够的。
【问题讨论】:
-
你的情况 A 没有意义。可以通过公钥解密的加密是没有意义的。
-
@EJP 好吧,可以用它来代替签名...
-
@spoko 是的,签名会创建一个签名文件,一个附加文件。但是,根据签名文件格式,签名文件可能会嵌入签名数据。
-
@EJP 我希望每个人都能解密我的消息,但与此同时,我是唯一可以创建有效二维码的人。这样,如果有人试图攻击我的系统(创建一个带有假二维码的贴纸并物理覆盖我的系统),用户应用程序将不会读取任何有用的信息,并且无法正常工作,而不是执行攻击者想要的操作。我不会说这毫无意义。
-
所以你需要数字签名,而不是加密。通常的做法是签署消息摘要并将其与消息一起发送。
标签: java encryption qr-code digital-signature