端到端加密:公钥和私钥怎么可能不同,但又兼容



由于公钥用于加密消息,私钥用于解密消息,那么私钥和公钥如何能够相互兼容?绿色钥匙如何打开红色锁着的门?

这是我的想法:

Hello被公钥加密,成为%/))=。然后私钥对消息进行解密。但由于密钥不同,因此生成的消息可能与已发送的消息不同,例如&#(($

当然,我知道现实生活中使用的加密/解密算法是不同的,但这个问题是可以理解的。密钥是如何制作的,一个只能加密,另一个只能解密,同时都有足够的信息,使它们相互兼容?是算法处理的吗?

公钥密码学最早由W.Diffie和M.Hellman在他们的开创性论文";密码学的新方向";(1976),他们在其中建议这种系统将基于活板门功能。这样的假设函数很容易计算,但有效地计算它的倒数需要额外的信息,这将是私钥。(这篇论文很短,值得全文阅读,很少有11页的论文对其领域做出如此大的贡献。)

正如在另一个答案中提到的,这样的函数的一个例子可以基于整数因子分解问题:乘两个素数很容易,但没有有效的(经典)算法来找到乘积的因子分解。后来,Rivest、Shamir和Adleman基于这一假设发明了第一个公钥算法(尽管这一假设很有道理,但尚未得到证实)。

简而言之,您可以将一对(e, N)作为公钥,其中

  • e是小素数(通常为65537)
  • N是两个非常大的不同素数pq的乘积,使得gcd(e, φ(N))=1,其中φ(N) = (p-1)*(q-1)

然后你可以找到d,这样:

cipher = plaintext ^ e mod N
plaintext = cipher ^ d mod N

d是私钥。这里的技巧是,为了找到这样的d,有必要知道N的因子分解,即pq。(正如@kelalaka在评论和他的帖子中指出的那样,因子分解可能没有必要在没有密钥的情况下恢复纯文本,但还没有人找到解决方法,所以这是另一种假设。)您可以在上面的RSA链接中阅读更多详细信息。

用铅笔和纸计算RSA很容易。它不提供任何安全性,但它可能会帮助您了解公钥和私钥是如何不同但又能协同工作的。

让我们使用模数n=143,公钥e=7,私钥d=43。有一些";魔术;在如何确定这些数字方面,为了提供真正的安全性,它们需要大得多。这里的问题是,143是公钥的一部分,它足够小,可以很容易地将其纳入素数11和13,这是导致私钥的神奇成分。

我们可以用这个密钥对数字[0,n)进行加密,所以我们将用数字0-25代替字母A-Z。

RSA加密是c=memod n,其中m是";消息,";我们的编码字母,c是该字母的密文。让我们加密";HELO";一封接一封。

  • H->7:77mod 143=6
  • E->4:47mod 143=82
  • L->11:117mod 143=132
  • O->14:147mod 143=53

RSA解密是m=cdmodn-

  • 643mod 143=7->H
  • 8243mod 143=4->E
  • 13243mod 143=11->L
  • 5343mod 143=14->O

因此,您可以看到公钥7与私钥43不同,但它们与模143一起工作,在模幂运算下提供可逆变换。

这是";魔术;曾经想出一对可以一起工作的钥匙。

  1. 选择两个素数:p=11,q=13
  2. 计算模量:n=p x q=143
  3. 计算总数:λ(n)=lcm(p-1,q-1)=lcm(10,12)=60
  4. 选择与λ(n)互质的公钥e:e=7
  5. 确定私钥d:d=e-1modλ(n)=43

我认为你有点误解了它;你不会因为试图用错误的密钥解密而得到错误的答案,你根本无法得到有效的解决方案。。。

如果你乘以2个素数(1是私钥,另一个是公钥),那么它唯一能被整除的就是它自己,1和2个素数。

虽然你可以遍历每个素数,找出它是由哪些素数组成的(通过检查它是否划分成一个整数),但没有快速的方法。

例如,如果我说91,它不是由7&13,如果你试图用91除以其他任何东西,你不会得到一个整数答案。

当这些数字长得多时,计算所需的时间会成倍地长,因此现代计算机需要直到宇宙热死亡才能解决这些问题,因此它实际上是牢不可破的。

Tom Scott在这段视频中很好地解释了这一点:https://www.youtube.com/watch?v=CINVwWHlzTY

最新更新