没有中间服务器的p2p网络中的客户端身份验证

问题描述 投票:0回答:1

我正在考虑一个复杂的聊天应用程序,其中两个客户端可以像在p2p网络中那样直接相互连接。 我的想法复杂性既涉及网络又涉及安全性(身份验证)。

网络部分

据我在互联网上阅读的内容,可以通过TCP HOLE PUNCHING实现p2p连接。 在打孔的大多数示例中,我都看到了一个中间服务器,该服务器可以帮助客户端彼此传递地址。 想象一下,服务器宕机了。 我仍然希望我的客户能够找到彼此。 一个非常疯狂的想法是让他们(例如,我的应用程序用户是人类,而不是代码)使用任何其他通信渠道互相告诉一个代码(该代码是从数据生成的)。 我希望这些数据包含客户端{local ip, local port, public ip and public port} (在我所见过的所有TCP打孔示例中都使用了它们)。

客户自己可以找到这些数据吗? 够了吗? (请考虑从客户端获得额外的HTTP请求帮助,以查找有关其公共IP地址的信息)

此外,有没有比使用TCP打孔更好的主意了? 我的客户大多落后于NATS

认证和安全部分

我正在尽力减少对中间服务器的依赖。 建立连接后,我的客户端应用程序可以执行Diffie Hellman密钥交换和加密。 但是,由于我希望真正的用户使用此应用程序,因此我需要一些客户端可以相互认证的方法。 我不希望该应用程序可供广大用户使用。 因此,也许他们有时有时(在现实世界中)可以彼此见面,并使用其蓝牙(或应用程序层中的其他文件共享系统)传输某种文件,这些文件可以作为其令牌或身份验证令牌。 当他们想要在网络中建立连接时,以后可以使用此令牌进行彼此身份验证。 好吧,这是我唯一的想法:

这里的问题是,如果Jack和Rose见面并且他们转移了他们的个人令牌,后来Jack有了Rose身份验证令牌,并且在与Jim交谈时可以用它假装成Rose。

除非为这两个令牌生成的令牌具有相同的值,并且某种程度上意味着它用于{Jack and Rose}通信的令牌,而{Jim和Rose}的令牌是不同的。 (我的意思是它对于任何对话或一对用户来说都是唯一的令牌)

还会有任何风险吗? 可以通过任何形式的网络攻击或其他技巧来打破这一点吗?

security authentication networking p2p
1个回答
0
投票

您可以参考WhatsApp端到端加密白皮书https://www.whatsapp.com/security/WhatsApp-Security-Whitepaper.pdf

© www.soinside.com 2019 - 2024. All rights reserved.