几乎是标题:如果 Alice 向 Bob 发送了一条她用 Bob 的公钥加密的消息,那么 Eve 是否有可能证明密文是用 Bob 的公钥加密的,加密的消息是给 Bob 的?
更新
假设算法是 RSA。
几乎是标题:如果 Alice 向 Bob 发送了一条她用 Bob 的公钥加密的消息,那么 Eve 是否有可能证明密文是用 Bob 的公钥加密的,加密的消息是给 Bob 的?
更新
假设算法是 RSA。
“证明”取决于接收者(Bob)是否合作(即接受向验证者透露他的私钥),还取决于密码算法的类型和密钥的详细信息。
如果 Bob 合作,那么他可以解密消息;这可能表明,当使用 Bob 的私钥解密时,消息“有意义”,这是一个相当强烈的暗示,表明 Bob 打算作为接收者,或者至少作为接收者。当然,这取决于什么是“有意义的”。大多数非对称加密系统是混合的:非对称密钥交换产生一个在发送者和接收者之间共享的特定于消息的密钥,然后该密钥用于加密实际的消息数据。如果加密使用(应该)使用MAC来检测更改,那么这可以变成一个令人信服的证据,证明发件人确实在考虑 Bob 的公钥(但这取决于所使用的确切算法)。
请注意,根据所使用的算法,Bob 可以获取现有消息,并计算他自己的密钥对,以便消息(作为字节序列)在用他全新的私钥解密时解密为他选择的信息。因此,一般来说,非对称加密不能被视为等同于所有权声明。
如果 Bob不合作,事情可能会很棘手。我们现在处于流量分析模型中,攻击者试图看穿匿名通信。在该模型中,Bob 不是潜在的攻击者,而是潜在的受害者。隐藏收件人身份不是非对称加密和密钥交换系统的主要属性。如果我们考虑使用 RSA 进行非对称加密,那么密钥大小就会泄露,因为它与加密消息的大小相匹配;这可以减少可能的收件人数量。
作为一个更极端的情况,考虑Diffie-Hellman。DH 在给定组中计算,包括素数模p、子组大小q(q除p-1并且通常为素数)和子组生成器g(g具有q阶,这意味着g q = 1 mod p)。这些值(“组参数”)是 Bob 公钥的一部分。消息将首先以值B = g b mod p开始,随机选择指数b:该值是子组元素。对于给定的非对称加密消息,很容易查看标头,查看B值,并检查它是否匹配给定的 ( p,q,g ) DH 组规范:只需计算B q mod p;对于正确的组,它将产生1,但(以压倒性的概率)不会产生一个不同的组。
因此,如果潜在的接收者使用 Diffie-Hellman 并且每个人都生成了自己的组,那么这个简单的测试将查明实际的接收者。另一方面,如果多个接收者决定在同一个组中生成各自的密钥对(这在 DH 中是允许的并且不会引起任何安全漏洞),那么外部人员将无法确定哪个接收者是正确的:所以需要解决决策 Diffie-Hellman问题,这很难(我们不知道在正常的 DH 组中解决 DDH 的任何方法,除了通过离散对数,它被足够大的p和q阻碍)。
此外,精确定位并不能证明。任何人都可以获取 Bob 的 DH 组参数的副本(它们是 Bob 的公钥的一部分,因此自己公开)并在同一组中生成他自己的密钥对。因此,能够在给定消息中识别 Bob 的组并不表明只有 Bob 可以阅读该消息;该消息可能适用于其密钥在同一组中有效的其他人。
(在使用 DH 的椭圆曲线版本时,在同一组中有很多键是很常见的情况,因为生成自己的曲线是一项艰巨的工作,并且严重限制了互操作性。)
我将在这里的回答中采用不同的方法。你说:“证明密文是用 Bob 的公钥加密的”我说,你怎么确定它的 Bob 的密钥。由于公钥服务器 ( http://pgp.mit.edu/ ) 的结构,没有什么可以阻止我将密钥伪装成“Bob”。也没有任何机制可以验证 Bob 是最终的接收者时期。例如见这里:http ://pgp.mit.edu:11371/pks/lookup?search=topsecretgov.gov&op=vindex
这个问题的最终结局是什么?是拒绝的意思吗?虽然我喜欢 Tom Leek 的回答,但我的回答是“威胁”之一,其目的是说明您最终不能依赖加密。没有机制可以验证谁将密钥放在该服务器上。你可以传唤麻省理工学院,希望他们在记录,但你得到了什么?一个IP。这是没有意义的。
为了更深入地了解这一点,私钥可能会被击键记录器、恶意软件等破坏。这就是多年来针对“发行版”(Debian、FreeBSD 等)的恶意软件作者如何设法潜入垃圾的方式。可怕的密钥管理。
仅使用当前实施的 RSA,不,这是不可能的。Eve 证明消息是用 Bob 的公钥加密的唯一方法是使用 Bob 的私钥对其进行解密,这违背了公钥密码学的全部目的(保留证明你是你的密钥对, “私钥”,私人)。
有一些可用的机制允许某人在不完全解密整个信息的情况下了解有关消息的一些信息。考虑一个方案,其中 Alice 使用 Bob 的公钥加密实际消息,然后获取该消息,添加一些非机密“标头”信息,包括源和预期收件人,然后使用 Alice 自己的数字签名算法对整个包进行签名私钥。任何知道 Alice 的公钥(即公共信息)的人都可以验证数字签名,因此可以知道 Alice 发送的消息与他们当前拥有的完全一样,包括有关预期收件人的信息。他们仍然看不到该消息,也无法证明该消息确实是用 Bob 的公钥加密的,但是' 反正真的不关他们的事;如果 Bob 无法解密它,那么他可以告诉 Alice 她搞砸了。
通过添加调整以对称地加密实际消息,然后使用接收者的公钥不对称地加密该消息的密钥,这就是 PGP 背后的基本思想。电子邮件传输中固有的信息必须简单地清晰可见,以便将电子邮件发送给收件人。但是,在尝试阅读实际内容之前,能够证明是谁发送了它,他们的意图是什么,以及没有人篡改它是很有价值的。
整个事情背后的另一层复杂性是如何证明任何人的公钥确实是他们的;这是通过密钥签名来完成的,其中一个值得信赖的实体通过附加只有知道该实体私钥的人才能产生的信息来保证信息的有效性(DSA 签名或然后用实体的私钥加密的加密哈希)。在 SSL/TLS 中,签名形成一个分层的“信任链”,一个 CA 为最终用户的证书担保,另一个 CA 为该 CA 的证书担保,依此类推,返回到与您一起分发的“受信任的根”证书之一Web 浏览器或操作系统,如果您要使用该系统,则必须信任它们。在 PGP 中,它是一个更扁平的“信任网络”结构,