我有一个理论问题。有一个公钥系统。Person1 想私下向 person2 发送消息。据我了解, person1 应该用公钥加密他们的消息。如果 person1 使用他们的私钥进行加密会发生什么?消息是否仍然是私密的,还是可以被其他人阅读?
问候,菲利普
我有一个理论问题。有一个公钥系统。Person1 想私下向 person2 发送消息。据我了解, person1 应该用公钥加密他们的消息。如果 person1 使用他们的私钥进行加密会发生什么?消息是否仍然是私密的,还是可以被其他人阅读?
问候,菲利普
对于加密,人 1 使用人 2 的公钥加密他们的消息,而不是使用他们自己的公钥。然后只有人 2 可以解密它,因为只有人 2 有匹配的私钥。
使用私钥加密用于证明真实性。如果人 1 用他们自己的私钥加密了一条消息,那么人 2 可以用人 1 的公钥解密它,这证明人 1 发起了该消息,因为它只能用他们的私钥加密。
所有这些都假设您有一种安全且可验证的方式让 1 和 2 人交换公钥,这始终是困难的地方。
如果您使用您的私钥加密消息,那么任何拥有您的公钥的人都可以读取(解密)该消息。由于公钥旨在 - 当然 - 公开,因此消息不再是私有的。现在可以认为该消息已签名,因为使用经过验证的公钥,任何人都可以确定该消息是真实的。
关于公钥/私钥分别用于加密/签名的部分并不是公钥加密的一般事实:它特定于 RSA,其中公钥和私钥(至少在教科书中)具有相同的形式。切换到基于 Diffie-Hellman 和/或 ECC 的系统,这两种密钥看起来完全不同,因此您无法使用私钥进行加密。
对您的问题的简短回答是,如果 Person1 拥有 Person2 的私钥,那么已经出现严重问题,并且很可能没有人会获得任何安全性。这种事情一直在发生(我认为 github 有一个特殊的错误消息,用于将私钥粘贴到需要 SSH 公钥来设置 SSH 密钥身份验证的字段中的人)。
完整的答案:如果 Person1 使用他们自己的私钥,如果他们正在做教科书 RSA,那么任何拥有 Person1 公钥的人都可以恢复消息。公钥应该是公开的。在现实世界中,RSA 密钥和其他数据结构与教科书相距甚远——一个明智的加密库不应该首先提供使用私钥加密的选项。您通常还会有单独的子密钥用于加密和签名,这些子密钥将以不同的格式存储(即使理论上可以使用相同的密钥也是一个非常糟糕的主意)。
在教科书 RSA 中,您有一个公共模数 N、一个公共指数 e 和一个私有指数 d。在加密模式下,您从消息 m 中计算密文 c 为 c = m^e (mod N); 解密你计算 m = c^d (mod N)。要签署 m,您发布 s = H(m)^d (mod N) 并验证 m 上的签名 s,您检查 H(m) = s^e (mod N)。所以公开和秘密行动是可以互换的。事实上,你称哪个 e 和哪个 d 无关紧要,两者是可以互换的:x^e^d (mod N) = x^d^e (mod N) = x (mod N) for全部 0 < x < N。(嗯,几乎全部 - 只要你没有达到 N 的一个因素。在这种情况下,无论如何你都是敬酒。)
公钥和私钥在数学上是相关的,所以用私钥加密的东西只能用公钥解密,反之亦然。
因此,两个密钥都可以用来加密或解密消息,而另一个密钥则相反。