Параллельное вычисление хеш-кода для большого файла

Я бы хотел улучшить производительность хеширования больших файлов, скажем, размером, например, в десятки гигабайт.

Обычно , вы последовательно хэшируете байты файлов с помощью хэш-функции (скажем, например, SHA-256, хотя я, скорее всего, буду использовать Skein, поэтому хеширование будет медленнее по сравнению со временем, необходимым для чтения файла из [fast ] SSD). Назовем этот метод 1.

Идея состоит в том, чтобы хэшировать несколько блоков файла размером 1 МБ параллельно на 8 процессорах, а затем хешировать конкатенированные хэши в один окончательный хеш. Назовем этот метод 2.

] Рисунок, изображающий этот метод, следует ниже:


enter image description here


Я хотел бы знать, верна ли эта идея и насколько теряется «безопасность» (с точки зрения вероятности коллизий) по сравнению с выполнением одного хеширования для всего файла .

Например:

Давайте воспользуемся вариантом SHA-256 SHA-2 и установим размер файла 2 ^ 34 = 34 359 738 368 байт. е, используя простой одиночный проход (метод 1), я бы получил 256-битный хеш для всего файла.

Сравните это с:

Используя параллельное хеширование (т.е. метод 2), я бы нарушил файл на 32 768 блоков по 1 МБ, хэширование этих блоков с использованием SHA-256 в 32 768 хэшей по 256 бит (32 байта), объединение хэшей и выполнение окончательного хеширования результирующего конкатенированного набора данных в 1048 576 байтов, чтобы получить мой последний 256-битный хэш для всего файла.

Является ли метод 2 менее безопасным, чем метод 1, с точки зрения того, что коллизии более вероятны и / или вероятны? Возможно, мне стоит перефразировать этот вопрос следующим образом: облегчает ли метод 2 злоумышленнику создание файла, хэширующего с тем же хеш-значением, что и исходный файл, за исключением, конечно, тривиального факта, что атака методом грубой силы будет дешевле, поскольку хэш может быть вычислен параллельно на N cpus?

Обновление : я только что обнаружил, что моя конструкция в методе 2 очень похожа на понятие хеш-списка . Однако статья в Википедии, на которую ссылается ссылка в предыдущем предложении, не содержит подробных сведений о превосходстве или неполноценности хэш-списка в отношении вероятности коллизий по сравнению с методом 1, простым старым хешированием файла, когда только используется верхний хэш хеш-списка.

9
задан Michael Goldshteyn 18 August 2011 в 14:21
поделиться