到现在为止,我一直在使用rsync从我的计算机备份到外部驱动器。备份数据由成千上万的小文件和数百个大文件(Maildir电子邮件和我最喜爱的系列剧集)组成。这样做的问题是,如果我的备份磁盘的单个扇区出现故障,可能是单个邮件可能已损坏,我觉得这是不可容忍的。加密安全备份
我想到了一个替代方案,其工作原理如下。有三棵树:由我希望备份的数据组成的文件树,在给定时刻备份树包含文件树的副本以及包含备份树的文件散列和元数据散列的散列树。整个散列树的散列也被保留下来。在备份之前,检查散列树的散列。这里的失败使整个备份的数据无效。检查成功后,将哈希树形状与备份树形状进行比较,并验证元数据哈希以确保备份树的元数据和形状一致。如果不是,可以列出个别肇事者。之后,执行rsync备份遍历。只要rsync更新文件,就会计算其新的散列和元数据散列并将其插入散列树中。只要rsync删除一个文件,该文件就会从散列树中删除。最后,散列树的散列被计算并存储。
这个过程非常有用,因为散列是针对正确的数据计算的,这意味着即使文件树中的文件已经插入散列树后损坏了,这种不一致也不会使备份(或将来的备份)。但是,最重要的特性是,如果攻击者损坏备份介质,但他喜欢,那么只要攻击者的攻击者破坏了散列算法,那么其中的信息就会被信任。另外,发送到备份或从其恢复的数据可以逐步验证。
我的问题是:这样的备份方案是否有合理的实现?我的搜索告诉我,唯一可用的备份方案可以进行完全备份或差异备份(例如,基于tar)或无法提供加密正确性保证(rsync)。
如果没有像这样的任何实现,也许我会写一个,但我想避免重新发明轮子。
我认为这属于serverfault或可能是超级用户。 – Omnifarious 2010-11-23 03:36:44
我想我听说过与这个概念类似的'merkle树'这个短语?我认为驱动器的法医分析可能涉及这样的事情。你可以使用hashdeep之类的东西来为数据添加散列。也请参阅tahoe-lafs – fuzzyTew 2016-02-10 20:18:18