magnet link
,需要客户端,并且所有客户端都可以作为某些服务节点group owner
发起一个group link
,内容包含群 hash ,和自身 IP 和开放端口等信息组成的 tracker (NAT 造成的困难可以再想办法解决,我还没想到最优方案),有效期,校验等信息。发布出去等待group member
连接,建立群聊天室。group member
都可以当 tracker 提供group link
给其他人。group member
在同一时间换掉了 IP 地址,那这个群就会消亡。group member
的本地,如果所有group member
同时删掉了某条聊天记录,则这条记录无法恢复。本人在外企工作,平均每天能有 3 个小时的开发时间.这个项目可能需要数千小时的开发量,我的工程经验怕难以承担这种项目,所以想找一些同好一起完成这个 project 。最好有个有 IM 和网络工程经验的大佬来做 leader 。
我想这个项目一定要开源,无论哪种许可证。
很高兴看到大家的讨论,本OP认真读了每一条回复,也针对评论所提到的问题和方案尽可能解决和参考,对于不了解的协议和轮子也在学习中。针对NAT,IP更换,节点在线,离线消息,消息存储等很多问题,已有一个初步的solution,目前看起来没有blocker。我会继续就完善技术思路,和这个产品要做什么,现在的轮子到底够不够圆,再做一个具体一些的总结,有一个初步可行的思路雏形后,再去考虑召集人手一起行动。
当然有一些非技术的东西,将来甚至可能会有更丧心病狂的手段,比如不装反诈的设备禁止联网,会造成非常规的blocker,单靠技术无法完美解决,但是技术的出现会极大增加这种非技术的封锁成本。
去中心化的目的是让监管无从封锁,E2EE的目的是让监管无从窃听。这两项技术只能避免私/群聊的障碍和风险,不能避免channel holder的风险,更不能阻止一名通缉犯不被找到。俺并不能像编程随想那样把安全做到极致,除非社工学否则不怕被抓。
去中心化的体验必然不如有中心服务器的体验,这方面只能尽可能优化,不可能超越,所以也不可能代替当下流行的IM。俺也不知道这个IM就算真做出来,如果没有用户又有什么意义,现实中没有那么多人在乎安全和隐私,被封号就下次注意一下。但俺感觉一定有人用得到,比如公司,组织和机构,并且如果那只手收得更紧一些,那有这个需求的普通人会更多。
101
LnTrx 2022-09-06 00:31:13 +08:00
楼里提了很多其他软件,如果楼主觉得自己的解决方案更胜一筹,不妨用后做个详细对比
|
102
mokiki 2022-09-06 00:35:27 +08:00
我觉得应该兼容 GPG 的非对称密码做自验证,这个很重要,这样能 show respect for 资深黑客大佬,也许能凝聚到他们的力量。
不需要每个人都有公网 IP ,公网 IP 可以协助打洞,打不了洞可以转发。 应该以公钥为中心,公网 IP 和转发用户 Key 都是公钥用户的临时地址,公钥即是词典 Key ,公网 IP ,转发 Key ,都是持续更新的列表值。 先实现基本的去中心身份自验证系统和通信,然后是文件。 我不是大佬,但是这个东西我断断续续想了有几年了。从楼主的 4 和 5 条,可见楼主想的也很多。这个东西,我觉得是很多中国程序员 ITer 不约而同重复想过的东西,需要把大家的力量凝聚在一起才能真正做出来。 西方人不懂中国人被 DNS 投毒和 IP 屏蔽的痛苦,这样的去中心化系统还是靠中国人创造。 期待和楼主联系。 |
103
mokiki 2022-09-06 00:51:35 +08:00
@HankAviator 对称密钥加密可破中间转发节点不可信。如果是对方不可信,你也不会聊太多私人信息是不是? IP 反推,可让你自己觉得可信的国外节点做转发。
为什么 zhihu 是关键词触发人工审核删贴封号,而不是直接抓用户?把人全抓了,它们自己都受不了。 |
104
cnbatch 2022-09-06 00:53:57 +08:00
分几种情况
首先是移动端: 1:三大运营商的移动端基本上已经做到了 IPv6 全覆盖,所以 IP 地址在这里不是问题。 2:分发客户端是麻烦事,安卓尚且可以分发 apk ,苹果呢?不过也可以放弃支持苹果 iOS ,毕竟早已有先例,Syncthing 就是这样。 3:这个软件注定不可能在国内各大应用商店商家,所以只可能在 Google Play 出现 3.1:不少用户只能够自行下载 apk 并手动安装到手机上。 3.2:能够下载 apk 的网站很大可能性会被挡在外头。 3.3:于是,很有可能会有恶意软件假装成是这个 IM 的 apk ,诱骗用户安装。 4:现在国行手机的系统说不定已经全面内置审查功能,能够阻止用户安装特定软件(比如去年爆出的小米手机阻止安装各种 VPN 软件)。 4.1:因此,他们完全可以做到阻止用户安装该 IM ,甚至主动卸载该 IM 。 接下来说 PC 端(桌面系统): 1:只有部分地区的宽带会给用户分配 IPv6 ,可惜普及率还是不算高,这样一来就必须借助中心服务器的帮助,或者借助双栈公网的用户的帮忙。 1.1:中心服务器的相关讨论,大家已经说了很多,不再重复。 1.2:双栈公网的用户虽然也有不少(“宽带症候群”里面可以找到一大堆),但占用户总数的比例还是太少了,更何况不可能要求所有双栈公网用户都用这个 IM 。 2:分发安装包给用户相对移动端来说倒是简单不少,自己想办法去官方网站下载就行。 3:最需要注意的是杀毒软件,他们完全可以把这款 IM 当成病毒杀掉。 3.1:国外杀软倒是容易解决,应用自带签名,and/or 把 IM 提交给杀软公司免误杀,都行。 3.2:国产杀软无解。 3.3:可以教用户把 IM 所在的文件夹设置成白名单,但谁知道国产杀软理不理会呢。 4:除了国产杀软,还有国产系统,操作同上。虽然用户量应该无限接近零,但谁知道会不会真有人这么干呢。 |
105
cnbatch 2022-09-06 00:57:19 +08:00
@cnbatch 忘了说,其实 PC 端也会遭遇移动端的“恶意软件伪装”。各大下载站可没少干这种事,更不用说针对这类 IM 了。
|
106
majula 2022-09-06 00:57:56 +08:00
说到即时通讯,那就不得不提 OTR: https://otr.cypherpunks.ca/index.php
除了众所周知的加密和认证之外,还强调了 可否认性 和 前向安全。 单纯的端到端加密往往不能满足这两点,甚至可能比那些“不安全”的协议还危险。 当然,正如楼上很多人所说,这其实并不是一个技术问题。。 |
107
SekiBetu 2022-09-06 04:49:41 +08:00
signal 已经开发好了,服务端到客户端都开源,自己部署即可
|
108
Aloento 2022-09-06 05:02:41 +08:00
刑啊,刑的很啊!
楼主得先找准你与现有产品的异同点,为什么要有这样一个新的聊天软件?用户为什么要用你的这个新软件呢? |
109
Cbdy 2022-09-06 07:06:46 +08:00 via Android
不如直接用电报?
|
110
lysS 2022-09-06 08:46:14 +08:00
怎么可能有去中心化的东西,整个 Internet 就是中心化的东西
|
111
ncworm 2022-09-06 09:29:25 +08:00
不要重复造轮子了
|
112
leefor2020 2022-09-06 09:48:34 +08:00
@pxiphx891 ,会不会被审核发现不能解析你们在聊什么,反而进重点名单或者干脆直接喝茶
|
113
jadelike 2022-09-06 10:04:17 +08:00
我可以,本人国企工作,也比较闲,请问怎么联系
|
114
zbinlin 2022-09-06 11:07:24 +08:00
上面已经有人提到了 matrix ,另外还有一个 https://jami.net/
|
115
whypool 2022-09-06 12:08:56 +08:00 via Android
im 怎么可能去中心化
群组关系不可能所有终端全量同步 |
116
polobug 2022-09-06 12:35:36 +08:00
有什么事是会被审查的吗? zz ?大部分人没这种需求把,只有 zz 狂热份子才有把
|
117
terrytw 2022-09-06 13:23:57 +08:00
jami 和 matrix 都已经在做了
不用造轮子 有空去帮这两个项目贡献点代码吧 之前用过一阵子 jami ,android 端信息送达问题极大,开发都是加拿大人,国内这网络环境,还得要国产程序员来针对性优化 楼上某人说得好,自己就是节点,耗电恐怖,所以理想状态就是有分布式节点,这一点 matrix 有 homeserver ,jami 有 dhtproxy dhtnode ,都是现成解决方案,jami 最近提出的 git 为底层逻辑的群聊 swarm 也很有意思,如果有个群里有 2 波人,都断网了,2 波人可以在各自内网里聊天,恢复后聊天记录可以自动同步到群里 总之我觉得自己造轮子没必要,是很爽,按照自己心意做,但是要做到能用,太遥远了 |
118
terrytw 2022-09-06 13:29:26 +08:00
https://jami.net/why-is-jami-truly-distributed/
https://docs.jami.net/user/jami-distributed-network.html 我看下来愿景真的挺美好的,就是他们组人手真的很少,开发进度也不快,实际用起来小问题很多 |
119
7RTDKSAK 2022-09-06 13:47:39 +08:00
这不是已经有了吗?
RETRO SHARE |
121
duanxianze 2022-09-06 14:23:35 +08:00
我觉的你要不试试发邮件?
|
122
allgy 2022-09-06 15:01:47 +08:00
感觉有些难度,能比 tg 做得好软件目前没发现
|
124
ren2881971 2022-09-06 15:23:28 +08:00
你真刑啊
|
125
mokiki 2022-09-06 16:47:22 +08:00
@ipoh 或许我们应该先做一个文档项目。自己用虚拟机或 vps 等模拟多用户测试一下各种去中心的软件,介绍一下各种去中心化的软件特点,以及在中国网络环境中的局限。这个过程中也是在学习这些软件的设计。
|
126
mokiki 2022-09-06 17:04:37 +08:00
这个帖子中出现了各种各样的软件。如果我想在这些软件里聊天时插入图片或视频怎么办? http 链接不能保访问的持续性,必须得有去中心化的文件系统。ipfs 那帮人不想着弄个好用的 GUI 工具代替 BT (也许是怕背负盗版骂名),被加密货币吸引花费太多精力去开发 filecoin ,我是觉得不太靠谱,至少中国人的痛点他们不明白。
WEB3 怕是只有无 z 府主义者才能开发出来。 |
127
YLGG 2022-09-06 17:25:29 +08:00
我喜欢他的无限存储功能,可以搞一个不~
|
128
realpg 2022-09-06 20:31:15 +08:00
大部分人不干违法乱纪天怒人怨的事儿,不需要规避审查。
|
129
realpg 2022-09-06 20:36:40 +08:00
其实这种东西的最终形态是区块链。。。
消息广播,有私钥就能读给你的消息,一个大家共识全链不完整保存只留最新 30 天的链,也不需要代币,想维持这个网络运行就要有大量的人用爱发电。。。 如果协议深入搞搞能自称小链就更好了,做好 bootstrap 机制,支持合并链 |
130
bugFactory 2022-09-06 20:44:54 +08:00
挺刑的,你想在里面待几年呢?
|
131
mokiki 2022-09-06 21:07:26 +08:00
@realpg 没必要搞区块链这种全部数据全部人保存的方式,abc 三人小组的消息,没必要保存到 xyz 小组。网络吸血的问题,可以用“我欠 A 10GB 流量”然后用我的密钥签名发给 A 和共同好友。哪天我下载了指环王剧集,A 想看可以优先从我这里下载,这样就帐目就抵消了。并不必须用爱发电。
区块链的问题是现在炒作的人太多,自称为区块链只能吸引到苍蝇。 |
132
ChenYFan 2022-09-06 21:14:36 +08:00
关于 nat ,其实不是什么太大的问题。
我最近也在考虑这个(国内局势有点紧),nat 可以用 stun 技术解决大部分互联。 绝大多数家宽是限制端口锥或限制锥,n2n 成功率不低。学校或公司的对称型才是最大障碍。 我的想法是用户激励,由于 nat 穿透存在,大部分人都可以互联,少部分可以租用别人的带宽,通过中继出去。 用户激励可以类似 btc 那种发行代币,但是维护成本高。不激励随便用很容易造成滥用,这也是个头疼的点。 我自己计划是 kad ,纯浏览器,webrtc ,rsa 端对端加密,这是没有问题的。 |
133
Weixiao0725 2022-09-06 21:15:56 +08:00
@ooooo 当你所谓的其他的软件真正起来了,一样会变成下一个微信
|
135
ChenYFan 2022-09-06 21:18:55 +08:00
此外,国内外有大量 stun 服务器,例如腾讯,虽然隐私确实不好把控,但是作为公用节点没有太大问题
|
136
ChenYFan 2022-09-06 21:25:21 +08:00
我是打算闲下来了先试着开发中心化区块链,中心服务器搞记账,链透明,用户转发中心服务器或其他用户流量盈利,然后发布消息消费,kad 网络广播(只转发到比来源桶小的节点),用户接到消息后签名回应,然后发布者打钱。
以上准确的说是聊天室的想法了,如果是点对点双人通讯就不用广播,能互联就免费,要租用就按流量计费 等情况稳定了再考虑去中心化,中心服务器主要记账和同步链指针,也参与 kad 做 tracker (这个不大重要) |
137
mokiki 2022-09-06 21:36:19 +08:00
@ChenYFan
我不看好再创造一个比特币,纯付出型的中继,可以放出门罗币地址,其他人可以用门罗币买流量。现在搞代币给我的感觉就是骗钱加跑路的样子。 我的想法是有基础的公钥账户关系管理系统(信任关系,结余多少流量,ip 地址,可中继练习的其它公钥账户等),和底层的加密消息协议。以此为基础,可以在开发可以有两人间的消息软件,群聊软件,博客以及评论软件。取代豆瓣的影乐书评软件,甚至点开页面可以直接看电影,迪斯尼等如果愿意,可放出它们的门罗币地址,观影人自由付费。迪斯尼不愿这样,就直接打门罗币给字幕组账户。 对于第三方发布的软件,可以用虚拟机隔离以保安全,最基础的 linux 系统启动起来也就 10 多 MB 内存占用。 |
138
mokiki 2022-09-06 21:44:12 +08:00
@ChenYFan 如果有人无限欠账,就公开它的欠账数据。这样就没有人愿意和它交流了。这个账户等于死了。如果他新创建密钥怎么办,此时它就是新人,如果我有 100 个朋友可以联系,我为什么要冒险去和一个新账户交往?我肯定愿意联系一个 2 年 5 年 10 年的朋友联系,账户越用越有社会信用值,此时各种圈子都有记录老朋友的信用记录,我和老朋友传数据时肯定也更顺畅些,预防性握手流量数据都会少一些。
|
139
vy0b0x 2022-09-06 21:46:16 +08:00
类似的东西,我有过构思。
每个用户拥有自己的非对称密钥对,通过公钥的 Hash 组成 DHT 。当用户 A 想联系用户 B 时,通过用户 B 的公钥哈希在 DHT 定位目标 IP 和端口,再用双方的非对称密钥对进行对称加密的密钥交流,最后成功建立连接,进行通信。 我发现这个方法面临几个缺陷: 一,DHT 容易被探测,Github 上一抓一堆 DHT 爬虫,爬取下载的种子和下载者信息。 二,通信质量不稳定,尤其是在移动端,当用户在不同基站下切换过快,联系他的人会有一个重复搜寻目标用户端点的过程,这个过程体验会很不好,如果楼主用 BT 下载过冷门资源,就明白那个搜寻种子需要的时间会有多长。 三,离线消息没有地方储存。 我后来想了一个方法解决,那就是[代表]节点,代表节点取得用户授权的签名后,可以在网络中代替用户接发消息,和 Matrix 相似,但比 Matrix 好的一点是,用户的账号不存在于服务器中,用户可以随时更换一个代表节点。 但最后想了想去,终究是和市面上已有的、针对这个问题的 IM 变得越来越相似。 或许我们更好的选择真的是拥抱那些已有的 IM ,推进他们针对中国的问题本土化。 上面是我以前对类似项目的思考,下面是我自己对此类软件的特性的期望: 一,有网页客户端,这样能让其他人迅速加入。(基于 http 的 p2p 技术已经成熟,所以点对点不是问题。) 二,账号不需要注册,不保存在服务器之上,让没有技术的用户不用面临服务器关闭之后该怎么办的问题。(点名长毛象和 Matrix 。) 三,传输层协议可选,这样我们能融入广泛运用的协议,使得封禁变得困难。(举个例子,使用 WS+TLS 的梯子。) 四,可以分布式运行,但允许中心服务器的加入来优化用户体验,例,我们可以使用 DHT 来查找和储存用户公钥和端点,也可以接受一个服务器储存全网的公钥信息,让用户可以快速查找到端点信息,类似现有的 DNS 体系,只不过不分级。 五,第四点的延伸,协议允许服务器代表某用户参与网络,当服务器一直没有用户的消息,超出用户设定时限,服务器会删除用户所有信息。 我们可以从第四点和第五点入手,让商业行为发生。只有商业化,让人能够赚钱,才会有最大的可能保障通信的质量。赚到钱的人也会有动力让整张饼越来越大。(不要说非法没人做,那么多非法的梯子运营商赚钱赚得很爽。) 第五点可以让用户免于被嗅探、查水表。 一点不成熟的考虑,抛砖引玉。 |
140
mokiki 2022-09-06 22:11:41 +08:00
@vy0b0x 关于赚钱,我想过一些。可以直接卖软件赚钱。当然这个东西必须开源,假如哪天不做了也可以有人接手,用户至少也有维修权。现在的一些开源软件不赚钱是因为开源作者们没有把他们的收款方式放出来,操作系统也缺少收集使用信息和提示人付费的定时报告和分成建议,如果我的 Linux 系统有这样的定时提醒付费分成建议软件,有基金会愿意协助,我乐意每月付一笔费用给我用的 Linux 系统开发者们。
收入具体到一个软件的不同作者,这个一定要开始就设计好,软件的每个贡献者可以把自己的分成建议文档合并到项目里,内容大致如下:“我:0.1 ; A:0.2 ,B:0.05 ,D:0.65” 每个人的建议可能都不一样,付款用户可以按照项目贡献人的建议用工具自动计算一下折中方案。如果计算工具也能参考一下 git 记录的不同种类代码量和代码留存时间作为计算参数那更好。这样就没有一个中心角色,利益分成都交给用户。我们的环境所限,每个人都有未来不安感,金钱利益对大家还是比较看重的。我们也没有上帝视角可以准确衡量出每个人的贡献是多少,那就这样给出建议,让用户给我们自由付费。 |
141
midknight 2022-09-06 22:14:08 +08:00
好主意,我看刑!
|
142
ChenYFan 2022-09-06 22:36:58 +08:00
@mokiki 难就难在新建账户根本不需要门槛。我承认你说的情况在一个小圈子里或小组中完全可行,毕竟我只接受我熟悉的人,但放眼大环境,这种不需要成本的信用很难维持,也极易出现滥用问题,这我也提到了。
至于代币,我只是打个比方,真正有效的激励不应该局限于此 关于手机终端切换问题,只是影响了接入点。单纯的广播签名消息其实没有太大影响 账号的注册我有个想法,社区维护一个私钥,注册的时候给用户公钥签名,之后网络中的检测只要校验签名即可 |
143
niru 2022-09-06 23:37:03 +08:00
朋友,Delta Chat 了解一下。端到端强加密,你只需要下载 app 并拥有一个在大陆可用的邮箱。
|
144
mokiki 2022-09-06 23:44:19 +08:00
@ChenYFan 如果网络带宽有空余,完全可以尝试和新用户交流看看。多认识人路子也宽广些,新人欠债不还,损失也不多。想象一下,公司里借钱不还的人多吗?还是每个人觉得借几百块钱不还也不会坐牢,所以每个人都借你钱?借钱不还只会社死。而且这些都用程序记录,无需手工操作,和你朋友聊天时,程序后台就会把你的黑名单推送给朋友,朋友就知道这号人没信用了。
如果你要用此去中心化系统中的其它程序和其他人交流可能都需要介绍人,此时可能新人就需要主动奉献给老用户,就是老用户欠新用户债了,这样老用户才能考虑和新人继续交流。老用户觉得新人还行,才会推给老用户的朋友。老用户和朋友,圈子多(各种程序里的各种小组)人脉广(联系人)资源全(美剧音乐电子书)。新人必须正直才能进入老用户的朋友圈。想象一下你开个烟酒店,突然来个新面孔要赊账,你肯定不愿意,新面孔必须卖点你想要的土特产给你,你才愿意用你欠新面孔的帐来结算他从你这里买的东西,慢慢的,你愿意把新面孔介绍给你的卖包子的朋友,理发的朋友。新面孔就为了赊一个包子就断掉生活的便利吗? 我想象的系统是程序上结构上完全平等,但是每个人都有自己的社会信用。社会信用是交往认识时长,网络稳定度,帐目结余等信息,程序自动算出的。可以用来优化数据传输优先级。 |
145
mayli 2022-09-07 07:29:37 +08:00
|
146
leegradyllljjjj 2022-09-07 10:15:13 +08:00
这世界根本没有完全去中心化的东西存在
|
147
AoEiuV020CN 2022-09-07 11:01:04 +08:00
这样的帖子站内已经有了,
/t/848089 我的看法是,app 能做出来,但是可以封锁你 app 的传播, 只要任何平台不允许上架,任何国产手机都报毒,任何论坛和 IM 禁止讨论,你的 app 就传播不开,只能小范围和朋友玩, 已经大范围分发了的 app 可以封锁 app 中写死的入口地址, 修改后新分发的 app 继续封锁传播, |
148
ChenYFan 2022-09-07 11:08:34 +08:00
@mokiki 还是一个根本性问题,新面孔的生成不需要任何门槛。
如果一个人能容忍少量的新人欠账,无门槛的生成必然会有人一瞬间注册大量新账户来消耗额度。最终导致网络中的每一个人都不再信任陌生人。 如果每一个新面孔都要奉献一定能力才能加入网络,那么入网就会变得比较困难,不适合那些弱接入人员。再者,这实际上已经是激励的变种了。 |
149
ChenYFan 2022-09-07 11:11:51 +08:00
至于诸位所说的对分布式网络的打击,还是停留在早期 Tracker 层面。目前的 DHT 去中心化网络,实际上只要有任意一个入口(引导人)就可以达成加入,是非常难以完全阻断,这一点完全不必担心。
至于广播消息,用 KAD 的桶特性,每个人只转发消息到比来源桶小的桶即可,这样发布者只要最少 160 次传递即可完成全网广播,也能避免网络海啸 |
150
uni 2022-09-07 13:48:45 +08:00
有没有考虑基于隐私公链的方案,没有 ip 问题,顺带还可以发个币(
|
151
Kiriri 2022-09-07 13:53:10 +08:00
NAT 造成的困难就是最大的困难, 这个网络环境, 完全去中心化, 理论上做不到吧
|
152
bthulu 2022-09-07 17:54:01 +08:00
group owner 难道不就是一个服务端吗? 抓人只要抓 group owner 就行了
|
153
Nb665 2023-08-09 18:27:07 +08:00 via Android
老哥,怎么样了
|