场景如下 Alice 使用 Bob 的公钥 PubKey_Bob
对消息message
进行 Encrypt,得到密文Cipher
我作为中间人,如何在没有解密用的PrivKey_Bob
的条件下验证 Cipher
确实是使用PubKey_Bob
加的密? 有什么密码学方案满足这个需求?
1 yfugibr 2021-09-03 18:15:51 +08:00 via Android 准备两对密钥,一对用于加密,一对用于签名 |
3 flypanda OP @yfugibr 我没有表达清楚,这里想防止的是 Alice 作恶。 Alice 虽然把 Cipher 发给了 Bob,但是就是不让 Bob 解密其中的 Message 。 所以就算准备两对儿秘钥,Alice 还是可以 用`Signature_pubkey_bob`签名,但是使用 `Crypto_pubkey_Evil` 来加密 这样验签 可以看到确实是 Bob 的公钥在签名...但还是不能保证 Alice 是用 Bob 的公钥加的密 |
4 dablwow 2021-09-03 18:25:33 +08:00 |
6 flypanda OP |
![]() | 7 geelaw 2021-09-03 18:44:45 +08:00 一般来说答案是 vacuously true,因为有些方案里有可能同一条密文本来就可以被解读为两个不同公钥下的密文,考虑 ElGamal 加密,考虑两个公钥分别是 g^a, g^b,则 h 在 g^a 下的密文 g^c, g^ac * h 也可以理解为 g^((a - b)c) * h 在 g^b 下的密文 g^c, g^bc * g^((a - b)c) * h 。 我觉得楼主的需求似乎不能解决楼主的问题:即使证明了某段密文只能是用 Bob 公钥加密所产生的,也没有证明加密了有意义的消息。 |
![]() | 8 wy315700 2021-09-03 18:46:46 +08:00 仅凭密文就能分析出加密密钥。。。 兄弟你这是完成了一次唯密文攻击啊。 |
![]() | 10 xarthur 2021-09-03 18:54:43 +08:00 感觉是个 XY 问题…… |
![]() | 11 Corua 2021-09-03 20:11:18 +08:00 via Android 是否在找"公钥的不可否认性",但现今的体系里并没有这种方案 公钥本来就没有签名的用途,仅持有公钥又能如何作恶呢? |
![]() | 12 icegaze 2021-09-03 20:42:42 +08:00 via Android 简单, 没有 A 签名的信息, 一概不认为是 A 加密的。 丢弃掉就行。 |
![]() | 13 icegaze 2021-09-03 20:44:39 +08:00 via Android 非对称密钥体系的意义不仅仅于加密。 正确的运用是, 应该先加密,再在外面包裹一下签名。 这才是整套加密传输的思路。 |
![]() | 14 icegaze 2021-09-03 20:53:12 +08:00 via Android 看错了, 楼主是说 A 用 B 的公钥加密信息… 那旁人(非 B )根本没法验证或者解密啊? |
![]() | 15 niubee1 2021-09-03 20:58:44 +08:00 你要不让别人解开还作什么恶呢? |
![]() | 16 sillydaddy 2021-09-04 12:59:00 +08:00 不知道楼主想要实现什么,有个密码学问题叫“公平交换”,可以看下这个帖: t/765057 |