如何基于 DHT 网络构想一套匿名聊天协议或方法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zu1k
V2EX    问与答

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

  zu1k 2020-04-16 21:12:54 +08:00 via Android 3534 次点击
这是一个创建于 2012 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

第 1 条附言    2020-04-16 23:10:07 +08:00
感谢大家的回复,好像发言太密集被强制 30 分钟后了,先用 append 代替回复吧

@Jirajine 这样的话还需要再维护一个匿名中转网络,能不能只用 dht 网络就实现这个匿名操作呢。
也就是说聊天内容加密后也扔 dht 网络上,然后对方通过某些手段获取到聊天内容的 key,然后从网络中获取到内容进行解密。问题也就出现了,怎么让对方获取到这个 key,还要尽量保证实时性。

@niubee1 实际上去中心化的服务都会出现这种问题,如果没有适当的激励措施的话。但是校园校内网就不一样了,并且老师可以要求大家都运行自己写的程序按照同一个协议加入同一个网络中。仅作为学习交流,非实用。

今天试用了基于改版 kad 的 ipfs,10 分钟内能找到 400+节点,大部分还是国内节点延迟低,不过不清楚大家用 ipfs 的动力是什么,身边没有几个用 ipfs 的同学,资源也没找到多少

@neqhqrim 并没有,所有信息都是有帮助的

@learningman 不妨说一下,实际通讯是需要进行加密的,打算用 DH 协商后面通讯的对称加密密钥

@nguoidiqua zero net 我之前用过,匿名的话大部分类似的应用都是使用 tor,老师的意思应该是完全匿名想要躲避审查的那种意思,只是想不依赖其他的匿名网络,只用 dht 网络通过一些手段实现
25 条回复    2020-11-21 11:52:35 +08:00
oovveeaarr
    1
oovveeaarr  
   2020-04-16 21:50:50 +08:00
匿名聊天的话,应该不一定是去中心化聊天的吧?
zxlzy
    2
zxlzy  
   2020-04-16 21:54:04 +08:00 via Android
匿名聊天也可以是中心化的啊,有可信第三方就行。
zu1k
    3
zu1k  
OP
   2020-04-16 22:02:20 +08:00 via Android
@oovveeaarr @zxlzy 目前老师的要求是基于 dht 实现去中心化的那种匿名聊天
azh7138m
    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
nguoidiqua
    5
nguoidiqua  
   2020-04-16 22:27:34 +08:00
@oovveeaarr
@zxlzy

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

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

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

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

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


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

时效性取决于网络大小、区块大小还有消息大小,应该能够做到可以聊一聊的程度,虽然比起端对端或是中心化的速度还是差几个数量级。
ysc3839
    21
ysc3839  
   2020-04-16 23:42:38 +08:00
@nguoidiqua Zero Net 不支持 DHT,它用 BT Tracker 来寻找其他客户端,然后用自己的协议通信。
zu1k
    22
zu1k  
OP
   2020-04-16 23:57:01 +08:00 via Android
@nguoidiqua dht 上公共账本不好搞,区块链上各种措施下都有分叉,若放到 dht 上,分叉得上天了
huachuang20
    23
huachuang20  
   2020-04-17 00:56:16 +08:00 via Android
利益相关,我们正在开发,基于 p2p 网络的匿名和零知的单聊和群聊系统。
tms
    24
tms  
   2020-04-17 02:44:08 +08:00
DHL 这种分布式 k-v 感觉只能类似于广播的形式传递信息,只是对消息进行端到端加密,然后两边约定一个 key 生成模式去轮询,不过 DHT 网络上广播消息进行传递估计效率感人。
firefox12
    25
firefox12  
   2020-11-21 11:52:35 +08:00
插眼, 怎么通过 dht 传输消息呢? 源这里放出消息,然后全网广播吗?否则怎么匿名?
关于     帮助文档     自助推广系统     博客     API     FAQ   Solana     2761 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 26ms UTC 13:54 PVG 21:54 LAX 06:54 JFK 09:54
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86