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

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

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

2596 次点击
所在节点    程序员
44 条回复
eason1874
2022-10-19 16:35:12 +08:00
@edis0n0 #11 你别整个缓存在浏览器啊,你在浏览器起个 Service Worker 做代理,下载一片解密推给前台,再下载一片解密推给前台
lonewolfakela
2022-10-19 16:37:32 +08:00
@edis0n0 #15 哦你说的是那个客户端软件本身的下载地址?
我看 issuepcdn.baidupcs.com 是解析到一堆百度云加速 CDN 节点的啊,你确定那些是家宽?
oldshensheep
2022-10-19 16:48:50 +08:00
可以这么搞,现代浏览器支持直接访问本地硬盘(需要授权),然后你直接下载就行了,然后在浏览器校验。
客户是小白应该没人用 Firefox 吧,支持 Chrome 86 及以上内核的浏览器。

再不行的话就分片下载校验……
tool2d
2022-10-19 17:01:06 +08:00
@edis0n0 "搞下载器体验就比网盘还烂了。"

用下载器也没什么的,原神下载器能把我 400M 的带宽跑满,下载 40G 的游戏资源轻轻松松。

换成普通浏览器下载,基本不可能。
ysc3839
2022-10-19 17:02:34 +08:00
PCDN 可以在客户端进行校验,如果客户端不校验的话那确实有安全问题。
ysc3839
2022-10-19 17:06:23 +08:00
个人印象中 PCDN 一般不会用来做普通的 HTTP 下载,因为拥有公网 IP 的用户不多,未备案的家宽提供 HTTP 服务也有法律风险,大多是配合客户端或者网页,使用一些 P2P 的协议进行传输的。
nVic
2022-10-19 18:00:06 +08:00
客户需要什么?无客户端、高速下载文件。
你需要什么?自定义域名,安全分享文件。

有个项目叫做 webtorrent ,可以直接免客户端实现 p2p 下载。
拿过来改改入口和界面就好了。
disk
2022-10-19 18:18:19 +08:00
用户提供的 pcdn 一般不会有 http 服务,见过的都是走 UDP 的 P2P 服务。
上面百度网盘的是边缘机房,家宽哪来的 443 。
p2p 保证完整性要靠校验的,如果是流媒体信息也不太需要保证完整性。
网盘的 P2P 加速是要靠客户端的,网页没有。
还是 mega 那种方案好点,就做个校验。
lolizeppelin
2022-10-19 18:30:41 +08:00
怕运营商拆盘直接加密硬盘不就行了,登不进系统也没法解密拿到硬盘上的数据不就完了

走 https 不怕数据拦截...啥都不用折腾
Kiriya
2022-10-19 18:34:12 +08:00
所以客户端的一个作用就是用来校验文件是否被篡改
ren2881971
2022-10-19 19:29:52 +08:00
签名验签
yuzo555
2022-10-19 19:37:08 +08:00
签名算法就是给你来干这个的呀,最简单的,对比下 MD5 。

如果你觉得客户端环境不可控,或者觉得让用户验 MD5 麻烦,你可以自己在 Web 浏览器端实现一个下载器,大小文件都支持,参考 StreamSaver 这个项目。
Jooooooooo
2022-10-19 19:42:07 +08:00
运行前校验一下呗.
t133
2022-10-19 20:24:31 +08:00
IPFS
janxin
2022-10-19 21:24:09 +08:00
文件签名,文件 hash
flynaj
2022-10-19 23:24:05 +08:00
文件签名发出来,所有网盘发一遍,参看 https://www.itsk.com/thread-425419-1-1.html
edis0n0
2022-10-19 23:26:45 +08:00
能不能现实点,我的客户全是连 exe 和 docx 都分不清楚的那种,还指望他们懂验签?所以我想把这个功能集成进下载网页,对用户无感,发现被篡改就禁止保存。

@yuzo555
@flynaj
@janxin
@ren2881971
SunsetShimmer
2022-10-19 23:50:59 +08:00
@edis0n0

可以看一下 Tails OS 的下载界面,有个 Web 实现的文件验证,只需要用户选择下载好的文件就可以校验。
Verify your download https://tails.boum.org/install/windows/index.en.html

那就像 Mega 网盘,在客户端网页下载好文件,然后校验,如果不过就不给用户?不清楚能不能实现。
XiLingHost
2022-10-19 23:51:02 +08:00
@edis0n0 那你直接用 wasm 每个分片都验证 hash 不就好了,有硬件加速算 sha 和 md5 都是飞快的
SunsetShimmer
2022-10-19 23:51:42 +08:00
@SunsetShimmer 因为提到 Mega 的方法不太行,那就只能让用户自己选择了...

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

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

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

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

© 2021 V2EX