老师今天刚提出来的任务,说让基于 kad dnt 网络设计并编码一款匿名聊天软件,对细节方面要求不是很严后面可以优化,主要是要先给出一定的构想。
在对 dht 网络稍加了解后,发现就是个分布式的 key-value 数据库。目前基于 dht 的应用主要还是 dht 提供寻址,后续还得 p2p 进行数据交换。
因为要求匿名聊天,所以 p2p 是不能用的,会暴露个人 ip 和位置,那最终的问题就落脚在如何基于 k-v 的方式给出一种通讯协议。
困难的点也就在这里,在通过 key 找 value 的情况下,我没有找到一种能够进行持续通讯的方法,因为我目前认为 dht 中没有 push 这种概念[可能是我理解错了],那有什么好的办法吗?
1
oovveeaarr 2020-04-16 21:50:50 +08:00
匿名聊天的话,应该不一定是去中心化聊天的吧?
|
2
zxlzy 2020-04-16 21:54:04 +08:00 via Android
匿名聊天也可以是中心化的啊,有可信第三方就行。
|
3
zu1k OP @oovveeaarr @zxlzy 目前老师的要求是基于 dht 实现去中心化的那种匿名聊天
|
4
azh7138m 2020-04-16 22:25:47 +08:00 via Android 1
我猜是 Tox + Tor
Tox 提供了基于 DHT 的一个建立链接的协议 但是建立链接要交换双方的 ip:port Tox 只实现了如何确保只有你的好友才能连到你的协议 你还需要 Tor 来隐藏你的真实 ip https://wiki.tox.chat/users/faq#does_tox_leak_my_ip_address |
5
nguoidiqua 2020-04-16 22:27:34 +08:00
|
6
zu1k OP 在查询更多资料后,发现匿名也是有多种标准,有不泄露 ip 的,还有即使泄露 ip 但假定无法追溯身份的
|
7
niubee1 2020-04-16 22:34:22 +08:00 1
这样子聊天, 你得有很好的耐心, 不然会很想死
|
8
zu1k OP @azh7138m 我感觉应该不让直接接入 tor,但是那种多级匿名中转的思想应该是所需要的,能不能在不自己维护一个匿名网络的情况下仅依赖于 dht 网络构造一个匿名数据传输方式。
能够想到一些解决方案,但是最终都有很大的性能问题,也就是实时性完全没办法保证 |
9
zu1k OP @niubee1 我哭了,刚刚消息没有发出去,白打了那么多字了。
目前假定 dht 中节点足够多、dht 网络速度不受限制。但是即使在这种假设下,因为 dht 是 k-v 型,没有 push 方法的话消息的实时性没法保证,目前能想到通过轮询来获取,但是这样现任不够好 |
10
Kiriya 2020-04-16 22:46:03 +08:00
再加上运营商级 NAT,连接速度够呛
|
11
neqhqrim 2020-04-16 22:47:09 +08:00 1
没记错的话,开源分享软件 eMule Xtreme 就有聊天功能,这玩意可以不需要服务器,只开 kad 就可以,据说 DHT 和 kad 是一回事。如果本回帖说的不对的话请主动忽略。
|
14
niubee1 2020-04-16 22:51:21 +08:00
我试过基于几种 p2p 结构的网络来实现匿名 IM,最后发现体验真的是相当的差劲,p2p 网络在几个稳定的 peer 间传输数据还算靠谱,但是如果每个 peer 都不稳定的话,体验就相当的带感了,就类似无人做种的 BT 下载,挂了好几周跟有前列腺疾病一样淅淅沥沥的推进进度,你要在聊天前焚香沐浴等待好友的 peer 上线才能跟他畅快的发消息,如果大家时间都不凑巧,那就呵呵了,你还得给他去个电话或者微信通知他上线...... 那么移动环境下,体验就更感人了......
|
15
Jirajine 2020-04-16 22:52:27 +08:00 via Android
p2p 怎么不能用了,通过 dht 寻找节点,通过其他节点中转建立连接,连接双方都不知道对方的 ip 地址,再配合端到端加密应该能满足要求了,当然体验肯定非常糟糕。
|
16
nguoidiqua 2020-04-16 22:52:35 +08:00
楼主可以看看 Zero Net,它是用 DHT 网络传递网页内容,好像也是需要用 Tor 来实现匿名。
不过你们老师要求的匿名到底是指不公开名字还是不暴露信息来源? 如果是不暴露来源的话,想不出比较好的办法,不能直接建立连接就只能整个网络去走一遍碰运气。这个困境和彼特币一样,网络小的情况倒还是可用的。或许可以记录下到达的各个路径和节点,排个优先传递路径。 |
17
neqhqrim 2020-04-16 23:01:14 +08:00
抱歉,可能本人在 11 楼提供的信息有误,浪费了楼主的时间本人深表遗憾。
|
18
learningman 2020-04-16 23:04:17 +08:00 via Android
我想到的方法,网络中的每一个节点都需要记录网络中的所有聊天内容。。。太不靠谱了,楼主就当没看到吧。
|
19
azh7138m 2020-04-16 23:25:27 +08:00 via Android
|
20
nguoidiqua 2020-04-16 23:36:47 +08:00
最简单的就是类似区块链的公共账本,全网络同步同一个消息库,各取所需。
时效性取决于网络大小、区块大小还有消息大小,应该能够做到可以聊一聊的程度,虽然比起端对端或是中心化的速度还是差几个数量级。 |
21
ysc3839 2020-04-16 23:42:38 +08:00
@nguoidiqua Zero Net 不支持 DHT,它用 BT Tracker 来寻找其他客户端,然后用自己的协议通信。
|
22
zu1k OP @nguoidiqua dht 上公共账本不好搞,区块链上各种措施下都有分叉,若放到 dht 上,分叉得上天了
|
23
huachuang20 2020-04-17 00:56:16 +08:00 via Android
利益相关,我们正在开发,基于 p2p 网络的匿名和零知的单聊和群聊系统。
|
24
tms 2020-04-17 02:44:08 +08:00
DHL 这种分布式 k-v 感觉只能类似于广播的形式传递信息,只是对消息进行端到端加密,然后两边约定一个 key 生成模式去轮询,不过 DHT 网络上广播消息进行传递估计效率感人。
|
25
firefox12 2020-11-21 11:52:35 +08:00
插眼, 怎么通过 dht 传输消息呢? 源这里放出消息,然后全网广播吗?否则怎么匿名?
|