是否有一种标准方法来保护对等通信?
我目前正在使用 HTTP 从点对点传输数据,但是,使用 TLS/SSL 进行保护通常需要证书颁发机构来验证身份,并且使用硬编码到应用程序中的自签名证书意味着它是可提取的,仍然允许 MiTM .
在首次运行时创建证书是否合适,然后让 UI 显示证书的指纹,以便用户可以带外验证身份?或者使用其他库对通过 HTTP 发送的主体进行加密是否更合适(因为滚动我自己将是制造安全漏洞的练习)。如果是这样,人们会使用哪些模式和库(理想情况下是跨平台的)?
是否有一种标准方法来保护对等通信?
我目前正在使用 HTTP 从点对点传输数据,但是,使用 TLS/SSL 进行保护通常需要证书颁发机构来验证身份,并且使用硬编码到应用程序中的自签名证书意味着它是可提取的,仍然允许 MiTM .
在首次运行时创建证书是否合适,然后让 UI 显示证书的指纹,以便用户可以带外验证身份?或者使用其他库对通过 HTTP 发送的主体进行加密是否更合适(因为滚动我自己将是制造安全漏洞的练习)。如果是这样,人们会使用哪些模式和库(理想情况下是跨平台的)?
是否有一种标准方法来保护对等通信?
当然有。如果你想做高度不对称的通信(即聊天或类似聊天的通信)OTR(或Axolotl)是要走的路。如果您想做(几乎)实时通信, TLS是您的最佳选择。
两种协议都需要长期静态密钥。您可以向用户显示(十六进制编码?)哈希并让他们亲自验证。此外,您应该存储公钥的哈希值并将它们与应用程序级别的对等方相关联,以在公钥更改时警告用户。除此之外,您可以为您的用户提供 Web-Of-Trust 方法,他们可以使用数字签名和他们的私钥来验证彼此的公钥/个人绑定。
OTR 本身支持使用“仅公钥”,对于 TLS,您可以根据RFC 7250使用自签名证书或原始公钥,并结合完整的 TLS 客户端身份验证。
在保护对等应用程序时,您将需要某种您已经了解的加密。
我不确定你用什么语言编写你的 P2P 应用程序,但这里有一些可能性:
总之,最有效的方法是使用 SSL 证书来安全传输数据。任何其他方式 IMO 都会增加额外的复杂性并消除用户的可用性。
您将需要 JAVA 中的内置 AES 库(如果您使用的是 java)或任何一种语言,快速的 google 会帮助您,但如果没有其他方法,我建议您使用 AES。