开发者生态
morning
通过 Yggdrasil 在朋友之间进行分片、加密存储
摘要
Proof of concept: sharded, encrypted file storage between peers on the Yggdrasil overlay, with no VPN coordinator: node IDs come from public keys, each node only answers group members, and storage cha...
the
and
can
each
group
The
file
storage
with
node
2026-10-07
1 阅读
约7分钟阅读
peter_retief
字号:
概念证明:Yggdrasil 覆盖层上的对等点之间的分片、加密文件存储,没有 VPN 协调器:节点 ID 来自公钥,每个节点仅回答组成员,并且存储挑战检查对等点是否仍保留其所获得的内容。这个想法:一群人互相借用磁盘空间。每个文件都经过加密、切成碎片并分布在每个计算机上,因此它可以在任何一台计算机发生故障时幸存下来。留下的小存根掌握着密钥,因此向某人发送存根(通过电子邮件或其他方式为他们密封)是向他们发送文件的一种方式,中间没有云服务。状态:实验性的。密码学尚未经过任何独立人士的审查。不要让它成为您不会丢失的任何东西的唯一副本。对此不熟悉?设置一个存储箱(对于拥有二手迷你电脑的 Windows 用户,请按步骤操作)。没有盒子吗?该网关允许人们支付月费并通过任何 S3 程序(rclone、Cyberduck、Duplicati)使用该组的存储空间。会员选择他们的盒子是否保存客户数据,并获得积分。每个版本都会被保留:历史记录可让您恢复文件的旧版本或文件夹在特定日期的状态。新版本仅存储更改的部分。节点可以互相发送消息:直接消息以及任何节点都可以发布和关注的主题,甚至可以传递到当时关闭的节点。程序也可以通过本地 API 使用它。无需安装 Yggdrasil:节点可以内置运行它,无需守护程序、TUN 设备或 root。它也与守护进程上的节点进行通信。网格使成员的 Yggdrasil 彼此直接连接,因此失去一个隧道或公共对等点并不会切断任何人的联系。网站可以存在于组中:发布一个文件夹,然后由多台计算机为其提供服务,因此当其中一台计算机出现故障时,站点仍可以正常运行。发送到您域的电子邮件可以到达该组:每条消息在传入并在您的仪表板上读取时都会为您加密,您还可以在仪表板上编写和回复(通过 Web 节点持有的 SMTP 中继发送)。许可证:请参阅许可证。贡献:CONTRIBUTING.md。安全问题:SECURITY.md。 put 将文件分割为 4 MiB 块,使用 AES-256-GCM 加密每个块(每个文件一个随机密钥,每个块新鲜的随机数),并将每个块进行纠删码 (Reed-Solomon) 为数据和奇偶校验分片。数量取决于有多少台单独的机器在线(修复):4+2 最多 3 台机器,2+2 4 台机器,3+2 5 台机器,4+2 6-8 台机器,6+3 9 台机器,因此,如果有 4 台或更多机器,则没有机器可以容纳一个块的两个分片。分片是内容寻址的(文件名= SHA-256)并分布在在线对等点上,每台机器的数量尽可能少。存根 FILE.ystub 保存清单,包括 key 。任何拥有存根并有权访问同级的人都可以读取该文件。 get 并行获取分片,拒绝任何哈希不匹配的分片,并根据其分片的任何数据计数重建每个块(4+2 为 6 中的 4)。已关闭一天或已离开组的节点上的分片将在已启动的节点上重建(修复)。在上传时,虽然仍然有分片,但上传者会预先计算每个分片 20 个一次性挑战到 FILE.ystub.challenges.json(保持私有)。 verify 对每个分片发送一个:“用这个随机数哈希这个字节范围”,并检查答案。 Yggdrasil 地址 (200::/7) 是从节点的公钥导出的,因此覆盖层上的连接的源地址可以识别调用者。地址就是节点ID。每个服务器只应答其地址在peers.json中的调用者(默认拒绝),仅绑定到其覆盖地址(或者,使用内置的 Yggdrasil ,在机器网络上根本没有任何内容),并且只允许原始作者删除分片。从发布页面(PC 上的 Linux、Raspberry Pi 和 arm64 板、Windows、macOS)下载适用于您的系统的 yggstore,并根据 SHA256SUMS 检查它。或者使用 Go 1.24 或更高版本自行构建: go build -o bin/yggstore ./cmd/yggstore bin/yggstore id # 打印节点 ID 和 peers.json 条目 # 从每台机器收集一个条目到 peers.json,将其复制到每台机器 bin/yggstore 服务 -peers peers.json # 在每台机器上(默认端口 7400) bin/yggstore status -peers peers.json bin/yggstore put -peers peers.json photo.jpg # -> photo.jpg.ystub bin/yggstore 验证 photo.jpg.ystub bin/yggstore get -o copy.jpg photo.jpg.ystub bin/yggstore rm photo.jpg.ystub # 删除其分片 peers.json : [ { "name" : "desktop " , "addr" : " [200:1234:5678::1]:7400 " , "admin" : true }, { "name" : " pi " , "addr" : " [201:abcd::1]:7400 " , "slow" : true } ] 每个块有 6 个分片,并且没有节点获得超过 2 个分片,因此丢失任何一个节点都不会丢失数据。标记为“slow”: true 的节点每个块获取一个分片,而其他节点则有空间容纳其余分片,因此它不会阻止上传。只有上传机器的peers.json 决定这一点。在同一台机器上运行的节点(例如 Docker 容器)应该共享一个“主机”标签,例如{“名称”:“t1”,“地址”:“...”,“主机”:“桌面”}。然后,2 个分片限制适用于每台机器,及以上
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱