#加密 #ftp #目录 #本地 #服务 #密钥 #scrypt

app x79d8

通过本地FTP提供加密文件

1 个不稳定版本

0.2.0 2020年12月14日

#1125 in 文件系统

GPL-2.0-only

74KB
2K SLoC

x79d8

build

便携式目录加密。

加密文件存储在宿主操作系统文件系统中。解密文件通过本地FTP服务提供。

功能

  • 便携。使用FTP。大多数系统支持FTP。
  • 动态大小。空间使用量根据使用情况增长或缩小。
  • 行业级加密。使用AES256进行数据加密。使用scrypt进行密钥推导。

安装

cargo install x79d8

注意:按照aesni crate的说明启用硬件加速。简而言之,您可能需要设置RUSTFLAGS-C target-feature=+aes,在安装期间。

用法

初始化新目录

在一个空目录中初始化x79d8配置

x79d8 init

提供目录。这将提示输入新密码

x79d8 serve

上传文件到ftp://127.0.0.2:2121。按Ctrl+C将加密文件存储在磁盘上。

提供现有目录

提供目录。这将提示输入密码,并且只有密码正确时才会提供正确的内容

x79d8 serve

加密

x79d8使用AES256-CFB加密块。块有一个整数值block_id,它是宿主操作系统文件系统中的文件名。块的头部有一个随机的128位整数count。用于加密该块的IV是blake2s(key, count, block_id)。每次写入块时,count都会更改。如果删除并重新添加块,其count将由操作系统rng重新初始化。在这种情况下,操作系统rng必须安全,以消除IV重用。

默认情况下,块大小为1MB。较小的文件将组合成一个块。较大的文件将跨越多个块。可以通过在--block-size-kb选项中指定来更改此行为。

x79d8 使用scrypt从密码中计算密钥。其强度可以通过--scrypt-log-n选项在init期间进行更改。

x79d8 假设它是一个本地服务,并且没有不受信任的流量。例如,它不使用AEAD(带有关联数据的认证加密)。不要将x79d8功能暴露给不受信任的网络!不要允许不受信任的用户编辑加密文件(特别是,他们可以将一个块替换为其以前的版本以欺骗IV重用情况,如果操作系统随机数生成器也不安全)!

耐用性

x79d8 在5秒后开始将更改写入磁盘。它使用WAL来确保数据一致性。

背景

自从TrueCrypt停止开发以来,我一直寻找替代品。我希望这个替代品具有动态空间使用,值得信赖(开源、经过审计或足够简单以便审计),并且跨平台。不幸的是,很难找到一个好的替代品。RustCrypto库似乎足够认真,可以DIY解决方案,而libunftp大大简化了“跨平台”部分。

x79d8 只有大约2k行代码。主要的加密逻辑(enc.rs)只有大约160行。

依赖项

~25–40MB
~706K SLoC