Nymo:一个匿名分布式的消息网络

2022-04-13 03:00:26 +08:00
 SuperFashi

过去一年在写一个匿名分布式的消息网络,取名叫 Nymo ( annonymous 中间的字母,读作 nemo )。

在这个网络中每个用户会持有一组非对称式密钥对,公钥用来做身份识别和消息加密,私钥用来做签名和消息解密。生成消息和加入网络需要工作量证明,以避免拒绝服务和中间人攻击。消息通信是每个节点尽力交付,目前用的是类似疫情传播的算法。每个用户会被随机分入不同的群组内,以做到 k-匿名性和有效率的消息传递。

协议还定义了节点交换、消息格式、本地节点发现协议和中继节点。协议会隐藏在常用应用层协议之下(如 HTTPS )以规避审查,在验证通过之后才会开始真正的 Nymo 网络通讯协议。

白皮书还在写,但是已经用 Go 写了一个实现,顺便还内置了 UPnP NAT 穿越。还写了一个 Web UI ,所以可以直接拿来用。希望有兴趣的朋友可以试一试,看看能不能找到安全方面的问题。

Nymo Core: https://github.com/nymo-net/nymo

Nymo WebUI: https://github.com/nymo-net/nymo-webui

4656 次点击
所在节点    分享创造
44 条回复
AIML
2022-04-13 03:51:38 +08:00
厉害呀,我之前也有类似的想法,不过拖延癌让我寸步未行
aima
2022-04-13 04:01:41 +08:00
没文化的我只能说 牛批
aima
2022-04-13 04:04:56 +08:00
工作量证明生成消息和加入网络可以详细说说么? 期待白皮书早日完工
AIML
2022-04-13 04:18:07 +08:00
怎么解决广告问题呢?
SuperFashi
2022-04-13 04:36:19 +08:00
@AIML 群发广告相当于 flooding ,pow 应该就可以解决。定向广告的话可以在客户端做个黑名单 /未知发件人过滤。
SuperFashi
2022-04-13 04:37:48 +08:00
@aima 就是哈希碰撞,和 hashcash /比特币差不多。
sujin190
2022-04-13 09:19:13 +08:00
@SuperFashi #5 滥发广告 pow 解决不了吧,这就是成本收益的问题,过高发送成本会影响普通消息发送,过低发送成本完全阻挡不了发广告,毕竟大部分广告的收益都毕竟高或者根本不关心成本,你这个又不能有低成本的反垃圾滥用的问题,虽然你可以在接收端屏蔽,但是且不说依然占用网络资源,而且匿名特性本身创建用户是无成本的拉黑基本意义不大

还是不应该低估垃圾消息的量,感觉你可以按垃圾消息是常规消息万倍以上这个量级来考量,之前也有好多版去中心化的 sns 产品了吧,用户稍微上来一点就被垃圾信息淹没了,啥用没有,所以这个去中心不是难点,重点还是在如何不破坏匿名性的情况下设计效率极高的反垃圾,否则注定会是白花功夫,还有一点也很重要去中心和匿名并不能规避法律风险
SuperFashi
2022-04-13 10:19:53 +08:00
@sujin190 使用 pow 就是将发送成本和发送量挂钩:如果垃圾消息是常规消息万倍,那发送者就需要常规用户万倍的计算量。以后的实现中还可以加上 p2p 上下行对等,保证 fairness 之类的算法。完全避免垃圾消息是不可能的,因为网络设计出来就是不可以区分垃圾消息或者普通消息。
Dkngit
2022-04-13 10:26:38 +08:00
一个匿名分布式的消息网络: https://tox.chat/
给楼主一个参考
sujin190
2022-04-13 10:26:55 +08:00
@SuperFashi #8 你这是想发的越多付钱越多?可是消息本来就有的人有需要发更多,有的人不怎么发,本身就不平衡,你这样不正好把很需要你的人拦在外面,不怎么需要你无所谓的人到用的挺好,看看现实微信就是这样的啊,多的好友成千上万,一天各种消息几千几万的,少的好友几百,一天消息几条几十条,这样肯定不科学,太小众了,通信工具这种太小众怎么用啊!否则你是想做地下工具么。。
SuperFashi
2022-04-13 11:10:45 +08:00
@Dkngit 不是匿名的 https://tox.chat/faq.html#tox-leak-ip ,看着也不是 0-RTT 的样子。这种网络比较好 route ,和 bt 一样维护一个 DHT 就好,看着也是这么实现的。
SuperFashi
2022-04-13 11:12:44 +08:00
@sujin190 proof-of-work 不是 proof-of-stake 或者你可能在想 gas fee ,可以多了解一下。
ZE3kr
2022-04-13 11:34:45 +08:00
能否支持群发呢?比如实现类似邮件列表的需求
ZE3kr
2022-04-13 11:35:05 +08:00
这种需求岂不是会需要很大的 pow
lookStupiToForce
2022-04-13 11:40:08 +08:00
是大佬! star 了再拉下来学习!
看了一圈讨论,感觉随机分配入群可能不可取,还是得按需加群,而且还得有权限控制(不过这样又绕回了传统身份控制了,匿名性网络顿时变熟人身份网络)
去中心化真是不可避免要应付垃圾节点以及衍生的垃圾信息
fgwmlhdkkkw
2022-04-13 11:53:55 +08:00
我有一个问题。
```
message Digest {
bytes hash = 1;
uint32 cohort = 2;
}
```
因为用了 protobuf ,所以如果我发一个 2GB 的这个结构,那接受方需要全部接受,在 protobuf 解析之后才能报错。但是如果自己实现的话,就可以提前报错。
SuperFashi
2022-04-13 13:34:57 +08:00
@ZE3kr 群发可以直接用发多条来实现。的确这样会需要很多的 pow 但是逻辑上是合理的(否则可以滥用群发)。如果想要更好的用户体验(比如群发列表接收者也可以看到),可以做 message 上的 extension 。
SuperFashi
2022-04-13 13:36:10 +08:00
@fgwmlhdkkkw 每一条 protobuf 有大小限制,目前为 ~65536 b (~16 kb)
SuperFashi
2022-04-13 13:37:46 +08:00
@lookStupiToForce 为何不可取可以详细说一下吗?
lookStupiToForce
2022-04-13 14:08:46 +08:00
@SuperFashi #19 我不懂里面的技术原理和真实实现啊,只是最初看到“加入随机群组”这种说法,我以为是类似于古早聊天室的功能,这样可能会直接落入 [一条垃圾信息-多条对垃圾信息的回馈 /咒骂-有价值信息减少,发言者参与意愿降低-更多垃圾信息] 的恶性循环(除非单点的 pow 会根据群组用户投票而动态变化,但因为匿名性,弃号重生的成本太低,用户为了对付垃圾节点可能每天都疲于投票了;总之没有类似准入准出机制 /权限管理的群组很难不沦为垃圾场 /广告群)。
但看你后面说群发需要发多条即多个 pow 来实现,似乎消息又是 P2P 而不是广播机制? P2P 的话本地可以实施黑名单策略,但网络通信部分还是会被垃圾信息占用资源,很难解决吧?

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

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

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

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

© 2021 V2EX