有什么能通过不受信任节点安全防篡改分发文件的方法吗?

2022-10-19 15:44:31 +08:00
 edis0n0

需求是给客户分发视频、压缩包等大文件,大家都知道国内网盘下载不是限速就是要注册、下客户端,直接这样分享太不专业了(知道某些企业网盘可以但不太想用,还是想完全可控,用自己域名),大厂对象存储流量又很贵,于是买了几个小商家的大带宽服务器搭 MinIO 节点(大厂的可信任主节点通过 MinIO 的 replication 功能实时分发文件给这些小商家节点,客户访问的时候随机 301 到一个在线节点)。但还存在 1 个问题,这些小厂的信誉无法保证他们不会偷偷替换我硬盘上的文件(服务器在他们那,实施起来完全没有技术难度)目前想到的方案是像 Mega 网盘分享那样下载到浏览器缓存中,解密后再存盘,但问题是兼容性可能不是很好,需要用户系统盘剩余容量大于我分享的文件大小(大家都知道很多国内用户系统盘分区分得很小,动不动就满)也不符合国内用户的使用习惯。有没有 V 友有更好的方案?

2596 次点击
所在节点    程序员
44 条回复
7RTDKSAK
2022-10-19 16:02:30 +08:00
参考发行版 ISO 分发?

发送端:计算出大文件的 SHA SUM,然后 GPG 为 HASH LIST 签名

接收端:预置发送端公钥,校验
edis0n0
2022-10-19 16:07:03 +08:00
@7RTDKSAK #1 问题是这要集成进分发网页的话只能像 Mega 网盘分享那样下载到浏览器缓存中再操作,我们客户可不知道 checksum 、签名是什么
edis0n0
2022-10-19 16:07:27 +08:00
搞个下载器什么的用户体验还不如网盘
hahastudio
2022-10-19 16:09:36 +08:00
不太理解,如果你考虑到小厂的存储不稳定,文件可能会损坏的话,那考虑技术上的方法,比如压缩包带校验恢复信息之类的
但如果你担心他们会替换你的文件的话,为什么你要选择这些小厂?
edis0n0
2022-10-19 16:10:37 +08:00
@hahastudio #4 明显是成本问题,带宽比大厂便宜很多
Zhai2333
2022-10-19 16:12:30 +08:00
你可以用 MinIO 的 Server-side Encryption 。
edis0n0
2022-10-19 16:14:19 +08:00
@Zhai2333 #6 SSL 证书还是要放在这些边缘节点上,无法解决通过中间人攻击篡改。
eason1874
2022-10-19 16:17:33 +08:00
像版权视频那样分片,几十 MB 一片,收到一片解密一片,也就多用一两百 MB 内存,不存在客户端硬盘容量不够用的情况
lolizeppelin
2022-10-19 16:17:57 +08:00
压缩文集添加密码分段压缩不就行了
lcy630409
2022-10-19 16:18:43 +08:00
文件转成 exe 自解压签名,搞个几 kb 的小工具,在里面下载你们的文件,下载完之后验证签名?
edis0n0
2022-10-19 16:22:38 +08:00
@eason1874 #8 可以试试下载一个 mega 网盘的分享,这种实现即使分段存盘前用的也都是系统盘空间。

@lolizeppelin
@lcy630409 搞下载器体验就比网盘还烂了。

另外发现那些 PCDN 是怎么解决这个问题的?百度网盘的客户端下载地址 https://pan.baidu.com/download https://issuepcdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_7.20.2.2.exe 解析出来一堆家宽 IP ,难道这些放用户家的节点都能随意发送篡改后的文件?如果用 socat 这类工具反代,中心服务器加解密那必须全回源( SSL 貌似每次协商的密钥都不一样),PCDN 意义何在?
Zhai2333
2022-10-19 16:24:13 +08:00
@edis0n0 SSL Certificate 可以放在記憶體裡。除非刻意針對,我不覺得這些廠家會閒到去 dump 出來抓。
lonewolfakela
2022-10-19 16:25:51 +08:00
"难道这些放用户家的节点都能随意发送篡改后的文件?" 百度网盘有自己的客户端,客户端里下载了数据之后和可信服务器上下发的 hash 值比对一下就好了

话说像这样大面积分发文件的话如果可以考虑用 torrent 种子的话可能会轻松一点?
oldshensheep
2022-10-19 16:25:58 +08:00
PCDN 不了解,但是我猜想肯定是文件是通过不可信节点传输,但是校验信息通过可信节点传输。
edis0n0
2022-10-19 16:28:30 +08:00
@lonewolfakela #13
@oldshensheep #14 我发的链接就是百度网盘客户端本体的下载地址啊,官网上的就是这个链接
oldshensheep
2022-10-19 16:29:05 +08:00
可以这样,客户端,传输文件完成后,通过百度的服务器获取文件的校验信息,然后客户端校验即可保证文件不被篡改。
edis0n0
2022-10-19 16:29:12 +08:00
@oldshensheep #14 浏览器通过官网下载客户端打开的就是这个地址,应该实现不了 文件是通过不可信节点传输,但是校验信息通过可信节点传输
fengjianxinghun
2022-10-19 16:29:34 +08:00
这个场景不用自建 ipfs ?
oldshensheep
2022-10-19 16:30:15 +08:00
那应该是 PCDN 软件有校验措施
Kinnice
2022-10-19 16:33:13 +08:00
比如说你是用 nginx 来提供 web 下载服务,那你的 nginx 就应该具有校验的能力(举例)

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

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

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

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

© 2021 V2EX