使用数字签名来保护QR码

时间:2014-12-30 23:09:46

标签: java encryption qr-code digital-signature

我正在寻找类似"倒置非对称加密技术"并遇到了一个great post,它实际上涵盖了我需要的东西。

我希望我的应用程序的每个用户都有一个公钥,允许他们解密隐藏在用我的私钥加密的QR码中的消息。我想确保我的系统不会被覆盖我的假QR码欺骗。接受的答案建议使用数字签名,所以我用Google搜索Java tutorial,显示如何使用该功能。

这有点误会了。我认为使用数字签名会有一个简单的情况(让我们称之为Situation A):

  1. 邮件使用私钥加密
  2. 用户阅读加密邮件
  3. 用户使用公钥解密消息。
  4. 但是,我的理解是数字签名更像是:

    1. 使用私钥和消息创建数字签名。
    2. 用户需要原始邮件和签名文件。
    3. 用户使用数字签名来验证邮件是否已更改并来自我。
    4. 我在这儿吗?如果是这样,我如何将我的消息和签名放在QR码中?在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编码字节。没有读者会知道如何处理它;您必须编写一个自定义应用程序,扫描然后知道对其进行解码并采取相应措施。

      根据前面提到的教程,看起来签名文档本身是不够的。

2 个答案:

答案 0 :(得分:1)

当我问这个问题时,我认为有一些好习惯或类似的东西。由于没有提供,我决定使用我自己的解决方案,有点类似于DarkSquirrel42的建议。

我创建了自己的编码器和解码器。实际上,我使用完全我在原帖中描述的相同技巧。

  1. 签署我的留言
  2. 使用base64
  3. 对邮件和签名进行编码
  4. 将两个字符串合并为一个字符串,如下所示

    base64(message)-base64(signature)
    
  5. Base64()上面的字符串如下:

    base64(base64(message)-base64(signature))
    
  6. 将该编码字符串放入QR码中。

  7. 我的解码器 - 我解码了第一层base64,将结果字符串拆分为messagesignature部分(这就是 3中连字符的原因。)然后如果签名正确,我将消息传递给适当的处理程序。

答案 1 :(得分:0)

请注意,如果您在...之前处理小邮件,您的邮件大小会显着增加。

签名与额外的文件无关......你可以完美地计算它们并在只处理文本时使用它们......

例如,PGP会这样做......

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

<your message here>

-----BEGIN PGP SIGNATURE-----  
Version: GnuPG v1.4.9 (GNU/Linux)  

<some base64 encoded data holding the signature>  
-----END PGP SIGNATURE-----  

现在,你不必像pgp一样完成它,但是,你需要的只是一些结构来分辨消息和签名......

例如,如果您知道您的消息可能不长,只需定义前2个字节定义消息长度,并在前面添加....

如果你愿意,下一步可以在base64编码整个东西,你知道怎么去那里