我正在开发一个项目,其中两个客户端可以通过 Web 套接字(使用 Socket.IO)相互发送文件。每个块都使用 AES 加密。
目前,客户端连接到服务器,他们每个人在他们的设备上生成一个 RSA 公钥/私钥对,然后他们向服务器宣布他们的公钥,服务器将它们发送给另一个客户端,并由所述客户端存储。在发送数据之前,使用随机密钥和随机 IV 使用 AES 对其进行加密,然后使用其他客户端的公钥对 AES 密钥进行加密。数据被发送出去,然后另一个客户端使用他们的 RSA 私钥解密 AES 密钥,最后使用解密的 AES 密钥解密内容并将其保存到其磁盘上的文件中。
问题是服务器可以轻松地用自己的公钥替换一个客户端的公钥,然后窃取数据。我能想到的唯一解决方案是让客户相互联系并手动验证他们的公钥......我不确定如何自动化这个过程。提供 E2EE 的服务似乎会在每台设备上生成匹配代码,但我无法找到有关其实际实现方式的任何信息,例如两个设备如何生成匹配代码而不与服务器或在两者之间相互通信,以及如果他们这样做,那么服务器无论如何都知道代码对吗?
我考虑过使用 WebRTC 将公钥从一个客户端发送到另一个客户端,而无需让数据通过服务器,但我很欣赏其他方法。先感谢您!:)