保护对等通信

信息安全 tls 点对点
2021-09-02 00:32:03

是否有一种标准方法来保护对等通信?

我目前正在使用 HTTP 从点对点传输数据,但是,使用 TLS/SSL 进行保护通常需要证书颁发机构来验证身份,并且使用硬编码到应用程序中的自签名证书意味着它是可提取的,仍然允许 MiTM .

在首次运行时创建证书是否合适,然后让 UI 显示证书的指纹,以便用户可以带外验证身份?或者使用其他库对通过 HTTP 发送的主体进行加密是否更合适(因为滚动我自己将是制造安全漏洞的练习)。如果是这样,人们会使用哪些模式和库(理想情况下是跨平台的)?

2个回答

是否有一种标准方法来保护对等通信?

当然有。如果你想做高度不对称的通信(即聊天或类似聊天的通信)OTR(或Axolotl)是要走的路。如果您想做(几乎)实时通信, TLS是您的最佳选择。

两种协议都需要长期静态密钥。您可以向用户显示(十六进制编码?)哈希并让他们亲自验证。此外,您应该存储公钥的哈希值并将它们与应用程序级别的对等方相关联,以在公钥更改时警告用户。除此之外,您可以为您的用户提供 Web-Of-Trust 方法,他们可以使用数字签名和他们的私钥来验证彼此的公钥/个人绑定。

OTR 本身支持使用“仅公钥”,对于 TLS,您可以根据RFC 7250使用自签名证书或原始公钥,并结合完整的 TLS 客户端身份验证。

在保护对等应用程序时,您将需要某种您已经了解的加密。

我不确定你用什么语言编写你的 P2P 应用程序,但这里有一些可能性:

  1. 有许多库允许您使用 AES,但这需要双方都知道密码。这反过来又会让人讨厌,而且对用户不是很友好。
  2. 您通过使用其加密层的 Tor 网络重定向您的应用程序。
  3. 使用 SSL 证书 - 获得签名证书既便宜又容易获得,即使它只是用于密钥的初始交换(从第一步开始)。

总之,最有效的方法是使用 SSL 证书来安全传输数据。任何其他方式 IMO 都会增加额外的复杂性并消除用户的可用性。

您将需要 JAVA 中的内置 AES 库(如果您使用的是 java)或任何一种语言,快速的 google 会帮助您,但如果没有其他方法,我建议您使用 AES。