V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zu1k
V2EX  ›  问与答

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

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

    老师今天刚提出来的任务,说让基于 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
    @Kiriya 呢个啥,目前假设网络不受限制,只是在校内玩玩。再说 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   ·   我们的愿景   ·   实用小工具   ·   3650 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:10 · PVG 08:10 · LAX 17:10 · JFK 20:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.