RSA - 客户端(在服务器上下文中)如何加密/解密传入数据?

2024-02-02

我无法准确理解 RSA 的工作原理。许多例子和定义试图解释但使用了模糊的上下文。

所以这就是我想做的:

我有一台使用 RSA 并具有私钥和公钥的服务器。据我了解,连接后,服务器以未加密的方式将公钥发送到服务器。如果您愿意,可以进行某种握手。

然后,进一步的流量将以加密的方式发生。为了建立这种方式,我如何能够加密客户端发送的内容,并解密客户端接收的内容(从客户端的角度来看)。

在服务器端,加密的数据由私钥解密,但如果没有该私钥,我无法解密客户端中的数据......我不能在客户端中拥有该私钥,因为它是秘密的。

这让我很困惑,我是否遗漏了一些明显的东西,或者是否需要第二个私钥?

提前致谢!


正如你已经指出的那样RSA非对称加密方案,这意味着:

c = E(pub_key, m) // ciphertext = encryption(public key,  message)
m = D(pri_key, c) // message    = decryption(private key, ciphertext)

相比之下,对称加密方案(例如前面的例子)AES) 的工作原理如下:

c = E(key, m)
m = E(key, c)

换句话说,相同的密钥用于加密和解密。

这就是非对称密码系统发挥作用的地方。它允许各方安全地交换对称加密的密钥。


基本上,原始(但非常脆弱!)密钥交换看起来是这样的:

  1. 服务器将其公钥发送给客户端pub_key_S
  2. 客户端向服务器发送用服务器的公钥加密的公钥
    c = E(pub_key_S, pub_key_C)
  3. 服务器解密c用他的私钥pub_key_C = D(pri_key_S, c)
  4. 服务器生成一个新的随机对称密钥key_CS
  5. 服务器用客户端的公钥加密新生成的密钥c = E(pub_key_C, key_CS)
  6. 服务器发送c给客户
  7. 客户端用他的私钥解密密文pri_key_C key_CS = D(pri_key_C, c)

现在客户端和服务器有一个共享的密钥key_CS他们可以使用它来安全地进行正在进行的会话通信。


这样的协议实际上要复杂一些,包括证书、数字签名、哈希码等。使用最广泛的协议可能是SSL 或 TLS http://de.wikipedia.org/wiki/Transport_Layer_Security。 (例如https).

如果您对此类协议的详细信息感兴趣,我建议您查看该链接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RSA - 客户端(在服务器上下文中)如何加密/解密传入数据? 的相关文章

随机推荐