2012-06-28 4 views
0

Я хотел бы создать базу данных, содержащую контрольные суммы большого количества файлов, и я боюсь за контрольную сумму-колликации (два разных файла с одной и той же контрольной суммой).обновляемый алгоритм дайджест/контрольная сумма

Вопрос 1: какова вероятность того, что два разных файла будут иметь одну и ту же сумму MD5?

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

Вопрос 2: какой алгоритм контрольной суммы/дайджеста мог бы сделать этот трюк? Мне нужен алгоритм контрольной суммы, который может вычислять значение определенного размера и «обратно» совместимого (меньшего размера). То есть. file1 имеет 2 байтовую контрольную сумму 0x1234 и контрольную сумму 4 байта 0x12345678, 2-байтная контрольная сумма может быть получена из 4-байтовой контрольной суммы.

ответ

0

Вопрос 1: зависит от того, сколько у вас файлов. Для каждой пары это приблизительно 1 в 2^128. Если у вас есть 2^64 файла (что, я полагаю, вы, вероятно, не знаете), вероятность хотя бы одного столкновения между ними составляет около 0,5.

Это не предполагает злобы со стороны тех, кто производит файлы. Известны столкновения MD5 и известные способы генерации файлов, которые сталкиваются. Если кто-то может зарабатывать деньги за свой счет, подвергая вас столкновениям, вероятность столкновения близка к 1 :-)

Вопрос 2: Обычно вы просто используете лучший хеш для начала (возможно, SHA- 256), а затем ваш «маленький» хэш - это либо первые несколько байтов большого, либо первый, принятый по модулю некоторого большого числа, возможно, простое. Но это зависит от того, чего вы хотите.

Дешевый и жизнерадостный вариант будет для «большого» хэша состоять из двух или более «маленьких» хэшей, объединенных вместе - хэш-файл вперед и назад, например. Конечно, как только маленький хеш сломан, нет никакой информации о том, приведет ли этот разрыв к разрыву комбинации двух + хэшей.

+0

Спасибо за ваш обширный ответ, но я не уверен, что он полностью отвечает на мой вопрос. Вы уверены в шансе .5 с файлами 2^64 даже с «парадоксальным днем ​​рождения»? Какова вероятность дублирования с SHA-256? – meeuw

+0

@meeuw: Это не точно 0,5 для 2^64, но есть несколько файлов где-то около порядка 2^64, для которых оно равно 0,5. Поскольку SHA-256 - это 256-битный хеш, вам понадобится что-то в порядке 2^128 файлов с равномерно распределенными хэшами, прежде чем вы получите 0.5 шанса хотя бы на одно столкновение. –

0

Google для «парадоксальности дня рождения» и должен знать, что цифры неуправляемы. Вероятность столкновения увеличивается довольно быстро, но для чего-то вроде SHA или MD, это не делает большую часть вмятины в исходной вероятности для первых двух.

BTW, если это для криптографической цели, MD5 устарел. Если вы просто дедуплицируете или что-то еще, MD5 должно быть в порядке.

Смежные вопросы