需求是给客户分发视频、压缩包等大文件,大家都知道国内网盘下载不是限速就是要注册、下客户端,直接这样分享太不专业了(知道某些企业网盘可以但不太想用,还是想完全可控,用自己域名),大厂对象存储流量又很贵,于是买了几个小商家的大带宽服务器搭 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 明显是成本问题,带宽比大厂便宜很多
|
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 出來抓。
|
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
XiLingHost 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 盾在线申请播放密钥来解密 |