
需求是给客户分发视频、压缩包等大文件,大家都知道国内网盘下载不是限速就是要注册、下客户端,直接这样分享太不专业了(知道某些企业网盘可以但不太想用,还是想完全可控,用自己域名),大厂对象存储流量又很贵,于是买了几个小商家的大带宽服务器搭 MinIO 节点(大厂的可信任主节点通过 MinIO 的 replication 功能实时分发文件给这些小商家节点,客户访问的时候随机 301 到一个在线节点)。但还存在 1 个问题,这些小厂的信誉无法保证他们不会偷偷替换我硬盘上的文件(服务器在他们那,实施起来完全没有技术难度)目前想到的方案是像 Mega 网盘分享那样下载到浏览器缓存中,解密后再存盘,但问题是兼容性可能不是很好,需要用户系统盘剩余容量大于我分享的文件大小(大家都知道很多国内用户系统盘分区分得很小,动不动就满)也不符合国内用户的使用习惯。有没有 V 友有更好的方案?
1 7RTDKSAK 2022-10-19 16:02:30 +08:00 参考发行版 ISO 分发? 发送端:计算出大文件的 SHA SUM,然后 GPG 为 HASH LIST 签名 接收端:预置发送端公钥,校验 |
2 edis0n0 OP @7RTDKSAK #1 问题是这要集成进分发网页的话只能像 Mega 网盘分享那样下载到浏览器缓存中再操作,我们客户可不知道 checksum 、签名是什么 |
3 edis0n0 OP 搞个下载器什么的用户体验还不如网盘 |
4 hahastudio 2022-10-19 16:09:36 +08:00 不太理解,如果你考虑到小厂的存储不稳定,文件可能会损坏的话,那考虑技术上的方法,比如压缩包带校验恢复信息之类的 但如果你担心他们会替换你的文件的话,为什么你要选择这些小厂? |
5 edis0n0 OP @hahastudio #4 明显是成本问题,带宽比大厂便宜很多 |
| div class="fr"> 6 Zhai2333 2022-10-19 16:12:30 +08:00 via Android 你可以用 MinIO 的 Server-side Encryption 。 |
8 eason1874 2022-10-19 16:17:33 +08:00 像版权视频那样分片,几十 MB 一片,收到一片解密一片,也就多用一两百 MB 内存,不存在客户端硬盘容量不够用的情况 |
9 lolizeppelin 2022-10-19 16:17:57 +08:00 压缩文集添加密码分段压缩不就行了 |
10 lcy630409 2022-10-19 16:18:43 +08:00 文件转成 exe 自解压签名,搞个几 kb 的小工具,在里面下载你们的文件,下载完之后验证签名? |
11 edis0n0 OP @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 意义何在? |
12 Zhai2333 2022-10-19 16:24:13 +08:00 via Android @edis0n0 SSL Certificate 可以放在。除非刻意,我不得些家到去 dump 出抓。 |
| div class="fr"> 13 lonewolfakela 2022-10-19 16:25:51 +08:00 "难道这些放用户家的节点都能随意发送篡改后的文件?" 百度网盘有自己的客户端,客户端里下载了数据之后和可信服务器上下发的 hash 值比对一下就好了 话说像这样大面积分发文件的话如果可以考虑用 torrent 种子的话可能会轻松一点? |
14 oldshensheep 2022-10-19 16:25:58 +08:00 PCDN 不了解,但是我猜想肯定是文件是通过不可信节点传输,但是校验信息通过可信节点传输。 |
15 edis0n0 OP |
16 oldshensheep 2022-10-19 16:29:05 +08:00 可以这样,客户端,传输文件完成后,通过百度的服务器获取文件的校验信息,然后客户端校验即可保证文件不被篡改。 |
17 edis0n0 OP @oldshensheep #14 浏览器通过官网下载客户端打开的就是这个地址,应该实现不了 文件是通过不可信节点传输,但是校验信息通过可信节点传输 |
18 fengjianxinghun 2022-10-19 16:29:34 +08:00 这个场景不用自建 ipfs ? |
19 oldshensheep 2022-10-19 16:30:15 +08:00 那应该是 PCDN 软件有校验措施 |
20 Kinnice 2022-10-19 16:33:13 +08:00 比如说你是用 nginx 来提供 web 下载服务,那你的 nginx 就应该具有校验的能力(举例) |
21 eason1874 2022-10-19 16:35:12 +08:00 @edis0n0 #11 你别整个缓存在浏览器啊,你在浏览器起个 Service Worker 做代理,下载一片解密推给前台,再下载一片解密推给前台 |
22 lonewolfakela 2022-10-19 16:37:32 +08:00 |
23 oldshensheep 2022-10-19 16:48:50 +08:00 可以这么搞,现代浏览器支持直接访问本地硬盘(需要授权),然后你直接下载就行了,然后在浏览器校验。 客户是小白应该没人用 Firefox 吧,支持 Chrome 86 及以上内核的浏览器。 再不行的话就分片下载校验…… |
24 tool2d 2022-10-19 17:01:06 +08:00 |
25 ysc3839 2022-10-19 17:02:34 +08:00 PCDN 可以在客户端进行校验,如果客户端不校验的话那确实有安全问题。 |
26 ysc3839 2022-10-19 17:06:23 +08:00 个人印象中 PCDN 一般不会用来做普通的 HTTP 下载,因为拥有公网 IP 的用户不多,未备案的家宽提供 HTTP 服务也有法律风险,大多是配合客户端或者网页,使用一些 P2P 的协议进行传输的。 |
27 nVic 2022-10-19 18:00:06 +08:00 客户需要什么?无客户端、高速下载文件。 你需要什么?自定义域名,安全分享文件。 有个项目叫做 webtorrent ,可以直接免客户端实现 p2p 下载。 拿过来改改入口和界面就好了。 |
28 disk 2022-10-19 18:18:19 +08:00 用户提供的 pcdn 一般不会有 http 服务,见过的都是走 UDP 的 P2P 服务。 上面百度网盘的是边缘机房,家宽哪来的 443 。 p2p 保证完整性要靠校验的,如果是流媒体信息也不太需要保证完整性。 网盘的 P2P 加速是要靠客户端的,网页没有。 还是 mega 那种方案好点,就做个校验。 |
29 lolizeppelin 2022-10-19 18:30:41 +08:00 怕运营商拆盘直接加密硬盘不就行了,登不进系统也没法解密拿到硬盘上的数据不就完了 走 https 不怕数据拦截...啥都不用折腾 |
30 Kiriya 2022-10-19 18:34:12 +08:00 所以客户端的一个作用就是用来校验文件是否被篡改 |
31 ren2881971 2022-10-19 19:29:52 +08:00 签名验签 |
32 yuzo555 2022-10-19 19:37:08 +08:00 签名算法就是给你来干这个的呀,最简单的,对比下 MD5 。 如果你觉得客户端环境不可控,或者觉得让用户验 MD5 麻烦,你可以自己在 Web 浏览器端实现一个下载器,大小文件都支持,参考 StreamSaver 这个项目。 |
33 Jooooooooo 2022-10-19 19:42:07 +08:00 运行前校验一下呗. |
34 t133 2022-10-19 20:24:31 +08:00 via iPhone IPFS |
35 janxin 2022-10-19 21:24:09 +08:00 文件签名,文件 hash |
36 flynaj 2022-10-19 23:24:05 +08:00 via Android 文件签名发出来,所有网盘发一遍,参看 https://www.itsk.com/thread-425419-1-1.html |
37 edis0n0 OP 能不能现实点,我的客户全是连 exe 和 docx 都分不清楚的那种,还指望他们懂验签?所以我想把这个功能集成进下载网页,对用户无感,发现被篡改就禁止保存。 @yuzo555 @flynaj @janxin @ren2881971 |
38 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 网盘,在客户端网页下载好文件,然后校验,如果不过就不给用户?不清楚能不能实现。 |
39 KagurazakaNyaa 2022-10-19 23:51:02 +08:00 @edis0n0 那你直接用 wasm 每个分片都验证 hash 不就好了,有硬件加速算 sha 和 md5 都是飞快的 |
40 SunsetShimmer 2022-10-19 23:51:42 +08:00 @SunsetShimmer 因为提到 Mega 的方法不太行,那就只能让用户自己选择了... |
41 SunsetShimmer 2022-10-19 23:56:41 +08:00 @SunsetShimmer 这个 sha256 的实现在 https://tails.boum.org/install/inc/js/download.js ,主要在 verifyFile 函数,貌似也引用了 https://tails.boum.org/install/inc/js/forge.sha256.min.js |
42 9268peng 2022-10-20 00:11:19 +08:00 某 pcdn 在某电视上的使用简化:在电视上运行 pcdn 的 sdk 并监听一个本机端口,电视把播放地址通过这个端口给星域的 sdk ,然后就可以接受视频了。 百度的做法,我理解是在家宽做的这个 sdk ,或者你绕过本地的客户端下载就是无法验证篡改的,我觉得你把他们的安全想的太好了。。 |
43 baobao1270 2022-10-20 07:29:24 +08:00 比较好的做法:提供 HASH 或 GPG 签名,并教育用户验证 HASH 最节约成本的做法:带密码的 ZIP 压缩包 |
44 julyclyde 2022-10-20 09:02:02 +08:00 按你这个“给客户分发视频……等大文件”的需求 应该直接邮寄硬盘 目前电影行业就是这么搞的,直接快递硬盘,里边存着加密的视频文件。电影院用 U 盾在线申请播放密钥来解密 |