我正在寻找一种有效的方法来部分检查慢速传输介质上“大型”数据集的完整性。这似乎是一个常见问题,因为文件大小与传输速率不成比例。
例如,对于具体数字,USB2 上的 TB 数据。通过将每个字节读入哈希或校验和来检查该数据是否仍然有效需要一天的时间,并且会增加驱动器故障的风险。
相反,此代码需要验证随机数据片段,并根据可用时间提供有效性概率。如果允许运行足够长的时间,将验证所有块(读取整个数据集的基本情况)。
用法“故事”:
-- 数据存储在大型加密容器中(大小为 1TB .. 1GB)。
-- 每个容器在不同位置的多组驱动器上冗余备份。
-- 验证检查必须在不了解基础数据或密钥的情况下进行。
该方法需要检测哪些故障模式:
- 存储传输故障(例如,控制器丢弃部分物理地址) - 扇区错误(没有为特定块返回数据)
- 单比特错误(非 ECC 内存或缓存)
当检测到错误时,数据将从冗余存储中恢复。验证数据可能必须单独存储。
由于目标是数据完整性,文件共享网络的技术似乎并不适用——“哈希树”需要在每个节点上完全存储哈希,这似乎比没有活动的场景所需的存储更多攻击者。
- 如何确定存储空间与读取文件相关块的时间之间的权衡?
- 如果散列树/散列列表是最好的方法,那么存储散列的部分值有多安全?
- 某些校验和或纠错代码是否会比散列更好的选择来提供等效保护?