如何基于 DHT 网络构想一套匿名聊天协议或方法

2020-04-16 21:12:54 +08:00
 zu1k

老师今天刚提出来的任务,说让基于 kad dnt 网络设计并编码一款匿名聊天软件,对细节方面要求不是很严后面可以优化,主要是要先给出一定的构想。

在对 dht 网络稍加了解后,发现就是个分布式的 key-value 数据库。目前基于 dht 的应用主要还是 dht 提供寻址,后续还得 p2p 进行数据交换。

因为要求匿名聊天,所以 p2p 是不能用的,会暴露个人 ip 和位置,那最终的问题就落脚在如何基于 k-v 的方式给出一种通讯协议。

困难的点也就在这里,在通过 key 找 value 的情况下,我没有找到一种能够进行持续通讯的方法,因为我目前认为 dht 中没有 push 这种概念[可能是我理解错了],那有什么好的办法吗?

3099 次点击
所在节点    问与答
25 条回复
oovveeaarr
2020-04-16 21:50:50 +08:00
匿名聊天的话,应该不一定是去中心化聊天的吧?
zxlzy
2020-04-16 21:54:04 +08:00
匿名聊天也可以是中心化的啊,有可信第三方就行。
zu1k
2020-04-16 22:02:20 +08:00
@oovveeaarr @zxlzy 目前老师的要求是基于 dht 实现去中心化的那种匿名聊天
azh7138m
2020-04-16 22:25:47 +08:00
我猜是 Tox + Tor
Tox 提供了基于 DHT 的一个建立链接的协议
但是建立链接要交换双方的 ip:port
Tox 只实现了如何确保只有你的好友才能连到你的协议
你还需要 Tor 来隐藏你的真实 ip


https://wiki.tox.chat/users/faq#does_tox_leak_my_ip_address
nguoidiqua
2020-04-16 22:27:34 +08:00
@oovveeaarr
@zxlzy

别人老师要求就是基于 Kad 和 DHT 网络,这是基本前提,匿名是另外一个要求。
zu1k
2020-04-16 22:32:56 +08:00
在查询更多资料后,发现匿名也是有多种标准,有不泄露 ip 的,还有即使泄露 ip 但假定无法追溯身份的
niubee1
2020-04-16 22:34:22 +08:00
这样子聊天, 你得有很好的耐心, 不然会很想死
zu1k
2020-04-16 22:35:43 +08:00
@azh7138m 我感觉应该不让直接接入 tor,但是那种多级匿名中转的思想应该是所需要的,能不能在不自己维护一个匿名网络的情况下仅依赖于 dht 网络构造一个匿名数据传输方式。

能够想到一些解决方案,但是最终都有很大的性能问题,也就是实时性完全没办法保证
zu1k
2020-04-16 22:41:30 +08:00
@niubee1 我哭了,刚刚消息没有发出去,白打了那么多字了。
目前假定 dht 中节点足够多、dht 网络速度不受限制。但是即使在这种假设下,因为 dht 是 k-v 型,没有 push 方法的话消息的实时性没法保证,目前能想到通过轮询来获取,但是这样现任不够好
Kiriya
2020-04-16 22:46:03 +08:00
再加上运营商级 NAT,连接速度够呛
neqhqrim
2020-04-16 22:47:09 +08:00
没记错的话,开源分享软件 eMule Xtreme 就有聊天功能,这玩意可以不需要服务器,只开 kad 就可以,据说 DHT 和 kad 是一回事。如果本回帖说的不对的话请主动忽略。
zu1k
2020-04-16 22:47:26 +08:00
@Kiriya 呢个啥,目前假设网络不受限制,只是在校内玩玩。再说 ipv6 不是在慢慢普及了嘛
zu1k
2020-04-16 22:48:27 +08:00
@neqhqrim kad 是 dht 的一种具体实现算法,感谢提示,我去看一看这个软件是怎么搞的
niubee1
2020-04-16 22:51:21 +08:00
我试过基于几种 p2p 结构的网络来实现匿名 IM,最后发现体验真的是相当的差劲,p2p 网络在几个稳定的 peer 间传输数据还算靠谱,但是如果每个 peer 都不稳定的话,体验就相当的带感了,就类似无人做种的 BT 下载,挂了好几周跟有前列腺疾病一样淅淅沥沥的推进进度,你要在聊天前焚香沐浴等待好友的 peer 上线才能跟他畅快的发消息,如果大家时间都不凑巧,那就呵呵了,你还得给他去个电话或者微信通知他上线...... 那么移动环境下,体验就更感人了......
Jirajine
2020-04-16 22:52:27 +08:00
p2p 怎么不能用了,通过 dht 寻找节点,通过其他节点中转建立连接,连接双方都不知道对方的 ip 地址,再配合端到端加密应该能满足要求了,当然体验肯定非常糟糕。
nguoidiqua
2020-04-16 22:52:35 +08:00
楼主可以看看 Zero Net,它是用 DHT 网络传递网页内容,好像也是需要用 Tor 来实现匿名。

不过你们老师要求的匿名到底是指不公开名字还是不暴露信息来源?

如果是不暴露来源的话,想不出比较好的办法,不能直接建立连接就只能整个网络去走一遍碰运气。这个困境和彼特币一样,网络小的情况倒还是可用的。或许可以记录下到达的各个路径和节点,排个优先传递路径。
neqhqrim
2020-04-16 23:01:14 +08:00
抱歉,可能本人在 11 楼提供的信息有误,浪费了楼主的时间本人深表遗憾。
learningman
2020-04-16 23:04:17 +08:00
我想到的方法,网络中的每一个节点都需要记录网络中的所有聊天内容。。。太不靠谱了,楼主就当没看到吧。
azh7138m
2020-04-16 23:25:27 +08:00
@Jirajine
这里要看对匿名的定义
比如 第三方 /中转节点 是否可信

一般语境下,认为 Tor 是匿名的,虽然它不是绝对匿名,钓鱼节点足够多的时候,Tor 也很可以说是实名的


@zu1k
Tor 在这里起到的作用是,你要对好友隐藏真实 ip,Tox 的设计是只有好友可以获知你的 ip
nguoidiqua
2020-04-16 23:36:47 +08:00
最简单的就是类似区块链的公共账本,全网络同步同一个消息库,各取所需。

时效性取决于网络大小、区块大小还有消息大小,应该能够做到可以聊一聊的程度,虽然比起端对端或是中心化的速度还是差几个数量级。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/663209

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX