我无法准确理解RSA的工作原理。许多示例和定义试图解释但使用模糊的上下文。
所以这就是我想要做的事情:
我有一台使用RSA并具有私钥和公钥的服务器。根据我的理解,在连接时,服务器以未加密的方式将公钥发送到服务器。如果你愿意,可以进行某种握手。
然后以加密方式进一步传输流量。为了建立这种方式,我如何能够加密客户端发送的内容,并解密客户端接收的内容(从客户端角度来看)。
在服务器端,加密数据由私钥解密,但我无法在没有私钥的情况下解密客户端中的数据......我无法在客户端解密,因为它是秘密。
这让我感到困惑,我错过了一些明显的东西,还是需要第二个私钥?
提前致谢!
答案 0 :(得分:3)
正如您已经指出的那样, 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)
换句话说,相同的密钥用于加密和解密。
这就是非对称密码系统发挥作用的地方。它允许各方安全地交换密钥以进行对称加密。
基本上,原始(但非常脆弱!)密钥交换的外观如何:
pub_key_S
c = E(pub_key_S, pub_key_C)
c
解密pub_key_C = D(pri_key_S, c)
key_CS
c = E(pub_key_C, key_CS)
加密新生成的密钥
c
发送给客户端
pri_key_C
key_CS = D(pri_key_C, c)
解密密文
现在,客户端和服务器具有共享密钥key_CS
,可以使用它们为正在进行的会话进行安全通信。
这种协议实际上要复杂得多,包括证书,数字签名,哈希码等。可能最广泛使用的协议是SSL or TLS。 (例如 https )。
如果您对此类协议的详细信息感兴趣,我建议您查看该链接。
答案 1 :(得分:0)
首先阅读this article。然后你应该知道通常使用非对称算法来交换密码和电子标志。因此,客户端 - 服务器加密的最佳方式是生成通用加密密钥(使用RSA或Diffie–Hellman key exchange),然后使用任何对称算法(例如AES)在服务器和客户端之间编码数据。