【发布时间】:2011-05-14 05:38:35
【问题描述】:
到目前为止,我一直在使用 rsync 从我的计算机备份到外部驱动器。备份数据由数以万计的小文件和数百个大文件(Maildir 电子邮件和我最喜欢的系列剧集)组成。这样做的问题是,如果我的备份磁盘的单个扇区发生故障,则可能单个消息可能已损坏,我认为这是无法容忍的。
我想到了一个替代方案,如下所示。共有三棵树:由我希望备份的数据组成的文件树、包含文件树在给定时刻的副本的备份树和包含备份树的文件哈希和元数据哈希的哈希树。整个散列树的散列也被保留。在备份之前,检查散列树的散列。此处的故障会使整个备份数据无效。检查成功后,将哈希树形状与备份树形状进行比较,并验证元数据哈希以确保备份树的元数据和形状一致。如果不是,则可以列出个别罪魁祸首。在此之后,执行 rsync 备份遍历。每当 rsync 更新文件时,都会计算其新的哈希和元数据哈希并将其插入哈希树。每当 rsync 删除一个文件时,该文件就会从哈希树中删除。最后计算并存储哈希树的哈希。
这个过程非常有用,因为哈希是为正确的数据计算的,这意味着即使文件树中的文件在插入哈希树后损坏,这种不一致不会使备份(或将来的备份)无效.然而,最重要的特性是,如果攻击者随意破坏备份介质,当且仅当它是正确的时,那里的信息才会被信任,除非攻击者破坏了哈希算法。此外,可以增量验证发送到备份或从中恢复的数据。
我的问题是:这样的备份方案是否合理实施?我的搜索告诉我,唯一可用的备份方案要么执行完整备份或差异备份(例如基于 tar),要么无法提供加密正确性保证 (rsync)。
如果没有类似的实现,也许我会写一个,但我想避免重新发明轮子。
【问题讨论】:
-
我认为这属于服务器故障或超级用户。
-
我想我听说过“默克尔树”这个短语与类似的概念一起使用?我认为驱动器的取证分析可能涉及这样的事情。您可以使用 hashdeep 之类的东西向数据添加哈希值。另见 tahoe-lafs
标签: hash cryptography backup