答案 0 :(得分:3)
删除填充会使系统不安全。如果公钥真的是公共的,正如你所说的那样,那么攻击者可以简单地进入第5列,获取明文,并使用4个公钥以正确的顺序对它们进行加密。然后,他们可以将得到的密文与来自收件人的密文进行匹配,从而损害“无强制”属性。
随机填充会阻止此操作,因为攻击者不知道要添加的填充。
您需要使用普通填充,但会向审核员的子集(通常在选举系统中称为“监督员”)显示私钥的子集。这意味着一个监票人可以确认第1列与第2列匹配,另一个可以确认第2列与第3列匹配,依此类推。个人监票人无法将选民与选票相匹配,只能与合作者进行合作。
您收到“消息大于模数”错误的原因是因为每个模数不同,因此来自一个加密的密文可能超出下一次加密的允许范围。
答案 1 :(得分:1)
https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Padding
填充正是为了避免将给定的纯文本加密为单个密文。因此,如果您想要任何给定纯文本的确定性(单一)结果,您唯一的选择就是将其关闭。
答案 2 :(得分:0)
所以在我看来,您尝试使用deterministic RSA
解决了两个主要要求:
Digital Signatures应该可以解决这个问题。您可以从第1列获取密文,对其进行哈希处理,并使用私有键加密哈希。然后可以将加密的哈希放在第2列中。要验证第1列的完整性,只需使用相应的公钥解密第2列哈希列1中的哈希值,然后比较这2个值。如果它们相等,则数据未被篡改。只有拥有私钥的各方才有可能篡改这些列中的数据,因为只有他们才能建立匹配对。这类似于HMAC,但具有使用公钥/私钥而不是秘密共享密钥的优点。因此任何人都可以验证,但只有受信任方可以修改。
关于确定性模式需要注意的一点是它会以多种方式泄露信息。让我们假设我知道我投票赞成Blue
作为我最喜欢的颜色。我可以看到我投票的结果密文是0x12345678。如果模式是完全确定的,我知道任何拥有相应密文0x12345678的人也投票给Blue
。此外,由于您通常会有一组有限的投票选择,chosen plaintext attack非常容易。因此,您真的希望让RSA完成其工作并使用预期的填充方案。
您可能要考虑的下一件事是通过编号或类似的方式来保护系统免受Replay Attack形式的影响。正如我理解你的架构,看起来如果我以某种方式访问你存储你的投票的地方(或进入任何通信的中间),我本可以通过重播或复制我已经已经存在的数据来欺骗或发送虚假投票看到(确定性的另一个问题)。