Я ищу эффективное средство для частичной проверки целостности «больших» наборов данных на медленной среде передачи. Это кажется распространенной проблемой, поскольку размеры файлов увеличиваются пропорционально скорости передачи.
Например, для конкретных чисел, терабайт данных через USB2. Проверка того, что эти данные все еще действительны, путем считывания каждого байта в хэш или контрольную сумму, требует дня и увеличивает риск отказа диска.
Вместо этого этот код должен будет проверять случайные фрагменты данных и обеспечивать вероятность достоверности на основе доступного времени. Если разрешено работать достаточно долго, все блоки будут проверены (базовый случай чтения всего набора данных).
Использование "история":
- Данные хранятся в больших зашифрованных контейнерах (размеры 1 ТБ .. 1 ГБ).
- Резервное копирование каждого контейнера выполняется на нескольких дисках в разных местах.
- Проверка должна выполняться без знания основных данных или ключей.
Какие режимы отказа подход должен обнаруживать:
- Сбои транспорта хранения (например, контроллер отбрасывает части физического адреса)
- Ошибки сектора (данные для определенного блока не возвращаются)
- Однобитовые ошибки (не-ECC память или кеши)
При обнаружении ошибок данные восстанавливаются из избыточного хранилища. Данные проверки, вероятно, должны храниться отдельно.
Поскольку целью является целостность данных, методы из сетей с общим доступом к файлам кажутся неприменимыми - для «хеш-дерева» требуется полное хранение хешей на каждом узле, что, по-видимому, требует больше памяти, чем необходимо для сценарии без активных злоумышленников.
- Как определить соотношение между объемом памяти и временем для чтения соответствующих блоков файла?
- Если наилучшим способом является хэш-дерево / хэш-список, насколько безопасно хранить частичные значения хешей?
- Может быть, лучше использовать контрольную сумму или код с исправлением ошибок, чем хэши для эквивалентной защиты?