3 个版本

0.0.3 2021年10月23日
0.0.2 2021年10月11日
0.0.1 2021年9月16日

#1675 in 加密学

每月40次下载

Unlicense

115KB
964

Forage

Forage 是用于存储的

Tree being struck by lightning (royalty-free stock photo from pixabay)

  • 远程存储:通过 Tor 对远程存储提供商开放存储通道
  • 轻量级:使用基于 Blake3 的哈希、验证流和加密算法进行平台优化
  • 本地文件可以被删除:定期验证远程存储的数据
  • 远程文件可以被检索:可以证明文件存在于远程,并可以发送回来
  • 低写放大:存储的字节仅略大于读取的字节

注意! 这是一项实验性、可能危险的技术,尚未经过审计!

显著的依赖项

路线图

0.0.1 - 实验

  • Bao 编码
  • Bao 验证
  • Bao 提取

0.0.2 - 文件存储

  • Sled 用于路径查找
  • file SQL
    • 模式
    • 插入
    • 查询
  • Forage Data 文件夹中编码文件,并将它们存储在配置的存储卷中
  • 解码存储在配置的存储卷中的文件,并将它们恢复到 Forage Data 文件夹
  • 验证文件的一个随机片段(考虑到不同大小的文件)
  • 显示编码文件列表
  • 路径在 sqlite 中索引(路径、文件名、文件大小、创建和修改日期、文件哈希)
  • 可以存储多个文件

0.0.3 - 包 & 测试

  • 将所有 CLI 命令导出为函数
  • 为 crate 添加了序列集成测试
  • 需要更多的文档和测试

0.0.4 - Tor 网络

  • 生成 Onion v3 地址
  • peer SQL
    • 模式
    • 插入
    • 查询
  • 通过 Tor 隐藏服务打开并接收 TCP 套接字

0.0.5 - 认证加密

  • 使用 Onion v3 地址在存储客户端和存储提供商之间进行认证
  • Blake3 密钥哈希作为 MAC
  • 使用 XChaCha8Blake3Siv 认证加密对文件进行加密
    • 注意! 实验性加密!
  • 使用 CSPRNGs 的 RNGs
  • 使用随机填充而不是零填充
  • 从内存中删除私钥后进行零化

0.1.0 - 概念验证

目标:一个存储客户端,能够使用Tor在远程存储提供者上压缩、加密和存储数据。存储客户端可以定期检查数据是否在远程存储提供者上仍然存在且一致,只需一个本地的32字节Blake3哈希,而不需要完整的本地参考副本,允许客户端删除其本地数据,相信它可以稍后完整地检索。存储客户端可以随后从存储提供者检索数据并在磁盘上解码。

  • 存储客户端可以通过Tor打开到存储提供者的存储通道
    • 存储提供者生成Onion v3地址以提供给存储客户端
    • 存储客户端生成自己的Onion v3地址
    • 通过Tor隐藏服务从存储客户端到存储提供者建立TCP套接字
  • 存储客户端可以在存储提供者上存储数据
    • 存储客户端可以向其节点提供指定路径以存储远程数据
    • 数据使用Bao编码,使用Blake3哈希,并通过Tor电路上的TCP套接字传输
    • Blake3哈希本地持久化
    • 可选:删除本地数据
  • 存储客户端可以定期验证发送的数据是否仍然存在且一致
    • 存储客户端从存储提供者请求一个4KB的数据片,随机偏移量由其选择
    • 存储客户端将4KB数据片与本地Bao Blake3哈希的相同偏移量进行比对
  • 存储客户端可以通过存储通道从存储提供者检索数据
    • 数据写入指定路径的磁盘
  • 文件使用zstd字典压缩进行压缩
  • 可以从存储提供者检索单个文件
  • 可以删除文件
  • 可以覆盖文件,旧版本仍然可检索
  • 可以配置旧版本的数目
  • 提供嵌入式库,带有文档
  • 大量文件并行处理

0.1.1

  • 复杂的卷和存储布局

未来

在基本功能存在之后,计划更多令人兴奋的功能,包括Start9 Embassy和Umbrel上的应用程序!

Kabbalistic Tree of Life, because, woo. What does it mean!?

依赖项

~46MB
~745K SLoC