加密以实现高效 rsync

信息安全 加密
2021-08-30 11:39:52

我使用 rsync(也称为 deltacopy)将一个大的(6GB)文本文件(SQL 数据库转储)复制到远程服务器上。与简单地复制文件相比,这让我减少了大约 100:1 的带宽,因为大多数内容我们每天都没有改变

这是一个包含数据库中所有数据的单个文件,rsync 将内容与目标内容逐段进行比较(使用散列),并且仅将散列和更改的部分发送到网络中。

相反,我可以为每个数据库表生成一个包含一个文件的转储,但唯一可能日常不变的表很小。

我想在源头开始加密这个文件,并在目的地只存储加密的副本,但在我看来,任何比简单替换密码更强的加密都会损害我从使用 rsync 获得的效率增益。

我可以为此目的使用一些强大的加密吗?

2个回答

您可以为此使用重复性Duplicity 是一个用 Python 编写的应用程序,它使用 librsync、GnuPG 和 tar 进行增量、加密和签名备份。它专为服务器不受信任的情况(例如,使用 Dropbox 或 Amazon VPS 时)而设计。Duplicity 计算本地存档和远程存档(本地缓存元数据)之间的增量,并将加密文件发送到远程服务器,其中包含增量更改和相关数据的记录。每个快照文件的大小通常为 25 MiB(尽管这是可配置的),如果没有密钥,就无法判断快照文件是否包含 25 MiB 的新文件、25 MiB 的增量更改,甚至 25 MiB 的元数据,如文件删除记录。

Duplicity 通常只会传输一个单一的完整备份一次,然后所有后续备份都将采用增量的形式。这使其类似于可以恢复所有过去更改的修订系统。当本地文件被删除并且同步到远程服务器时,远程文件被简单地标记为已被删除。当然,可以随时“清理”旧更改并进行新的完整备份以节省空间。有关更多信息,请参阅手册页

双重性的好处是目标服务器可以完全不受信任,而不会影响执行高效增量备份的能力。为了实现这一点,必须在本地存储适度的元数据缓存,但您可以权衡存储需求与带宽要求,并在每次同步之前重新下载元数据。

当加密算法的输出不能与随机数据区分开来时,它被认为是有效的。因此,不可能同时拥有良好的压缩和加密——因为压缩依赖于识别数据模式。

您的解决方案很可能只加密和传输该文件版本之间的差异。