Подходящая хеш-функция для обнаружения повреждения данных / проверки целостности данных? - PullRequest
11 голосов
/ 26 октября 2010

Какая наиболее подходящая хеш-функция для проверки целостности файлов (контрольных сумм) для выявления повреждений?

Мне необходимо учитывать следующее:

Широкий диапазон размеров файлов (от 1 кб до 10 Гб +))
Множество файлов разных типов
Большая коллекция файлов (+/- 100 ТБ и больше)

Требуются ли для больших файлов большие размеры дайджеста (SHA-1 по сравнению с SHA 512)?

Я вижу, что семейство SHA называется криптографическими хеш-функциями.Они плохо подходят для "общего назначения", такого как обнаружение повреждения файла?Будет ли что-то вроде MD5 или Tiger лучше?

Если злонамеренное вмешательство также вызывает озабоченность, изменится ли ваш ответ на наиболее подходящую хеш-функцию?

Внешние библиотеки не являются опцией, только те, которые доступнына Win XP SP3 +.

Естественно, производительность также вызывает беспокойство.

(Пожалуйста, извините мою терминологию, если она неверна, мои знания по этому предмету очень ограничены).

1 Ответ

16 голосов
/ 26 октября 2010

Любая криптографическая хеш-функция, даже неработающая, подойдет для обнаружения случайного повреждения. Заданная хеш-функция может быть определена только для входов до некоторого предела, но для всех стандартных хеш-функций этот предел составляет не менее 2 64 битов, то есть около 2 миллионов терабайт. Это довольно большой.

Тип файла не имеет никакого значения. Хэш-функции работают с последовательностями битов (или байтов) независимо от того, что представляют эти биты.

Производительность хеш-функции вряд ли будет проблемой. Даже «медленные» хеш-функции (например, SHA-256) будут работать быстрее на типичном ПК, чем на жестком диске: чтение файла будет узким местом, а не хэшированием (ПК с частотой 2,4 ГГц может хэшировать данные с SHA-512 со скоростью близко к 200 МБ / с, используя одно ядро). Если производительность хэш-функции является проблемой, то либо ваш ЦП очень слабый, либо ваши диски с быстрым SSD (а если у вас 100 ТБ с быстрым SSD, то я немного завидую). В этом случае некоторые хеш-функции работают несколько быстрее, чем другие, MD5 является одной из «быстрых» функций (но MD4 быстрее и достаточно прост, чтобы его код мог быть включен в любое приложение без особых хлопот).

Если злонамеренное вмешательство является проблемой, тогда это становится проблемой безопасности, и это более сложно. Во-первых, вы захотите использовать одну из криптографически неразрушенных хеш-функций, следовательно, SHA-256 или SHA-512, а не MD4, MD5 или SHA-1 (недостатки, обнаруженные в MD4, MD5 и SHA-1, могут не относиться к конкретным ситуация, но это тонкий вопрос, и лучше играть в безопасности). Затем хэширование может быть или не быть достаточным в зависимости от того, имеет ли злоумышленник доступ к результатам хеширования. Возможно, вам может понадобиться использовать MAC , который можно рассматривать как разновидность ключевого хэша. HMAC - это стандартный способ построения MAC из хеш-функции. Существуют другие не основанные на хэше MAC. Более того, MAC использует секретный «симметричный» ключ, который не подходит, если вы хотите, чтобы некоторые люди могли проверять целостность файла, не делая скрытых изменений; в этом случае вам придется прибегнуть к цифровой подписи. Короче говоря, в контексте безопасности вам необходим тщательный анализ безопасности с четко определенной моделью атаки.

...