1

我正在寻找一种有效的方法来部分检查慢速传输介质上“大型”数据集的完整性。这似乎是一个常见问题,因为文件大小与传输速率不成比例。

例如,对于具体数字,USB2 上的 TB 数据。通过将每个字节读入哈希或校验和来检查该数据是否仍然有效需要一天的时间,并且会增加驱动器故障的风险。

相反,此代码需要验证随机数据片段,并根据可用时间提供有效性概率。如果允许运行足够长的时间,将验证所有块(读取整个数据集的基本情况)。

用法“故事”:
-- 数据存储在大型加密容器中(大小为 1TB .. 1GB)。
-- 每个容器在不同位置的多组驱动器上冗余备份。
-- 验证检查必须在不了解基础数据或密钥的情况下进行。

该方法需要检测哪些故障模式:
- 存储传输故障(例如,控制器丢弃部分物理地址) - 扇区错误(没有为特定块返回数据)
- 单比特错误(非 ECC 内存或缓存)

当检测到错误时,数据将从冗余存储中恢复。验证数据可能必须单独存储。

由于目标是数据完整性,文件共享网络的技术似乎并不适用——“哈希树”需要在每个节点上完全存储哈希,这似乎比没有活动的场景所需的存储更多攻击者。

  • 如何确定存储空间与读取文件相关块的时间之间的权衡?
  • 如果散列树/散列列表是最好的方法,那么存储散列的部分值有多安全?
  • 某些校验和或纠错代码是否会比散列更好的选择来提供等效保护?
4

3 回答 3

2

通过 USB2 进行传输,对吗?因此,您应该知道:

  • USB 通信采用数据包形式,用于高速传输的有效负载高达 1024 字节和 16 位 CRC。
  • 每个数据包都被确认并可能重传。

您必须考虑这些信息来部署一种算法,该算法在 CRC 提供的担保之外添加一些担保,否则将是徒劳的。如果我没记错的话,16 位 CRC 可以检测到任何不超过 16 位的单个错误突发,以及其中的一小部分。

您可以从维基百科开始:http ://en.wikipedia.org/wiki/USB2和http://en.wikipedia.org/wiki/Cyclic_redundancy_check

于 2008-11-23T10:25:19.230 回答
1

您可能想尝试使用类似PAR2的东西来创建冗余数据。这将允许您检查和更正数据,并且可能可以转换为使用随机访问。

于 2008-11-24T08:45:20.603 回答
0

如何为文件中的数据运行存储哈希值或校验和值?然后,您只需读取数据的受限部分即可对文件内容进行有限验证。

于 2008-11-23T05:55:39.680 回答