Действительно ли использование 2 различных хеш-функций является хорошим способом проверить на целостность файлов?

Хорошо, насколько я понимаю, у вас есть список заданий, и вы пытаетесь сэкономить время, в которое редактировался каждый элемент.

UserDefaults - это пара ключ-значение, и из того, что я вижу, вы пытаетесь использовать один и тот же ключ для, возможно, всех ваших ячеек, что будет означать, что они переопределят друг друга.

Также вы пытаетесь переписать значение, существующее каждый раз, прежде чем использовать его, является ли это правильным поведением, которое вы желаете?

5
задан Piskvor cc-by-sa 3.0 11 February 2009 в 18:54
поделиться

6 ответов

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

Править: Для разъяснения нет никакой причины использовать два алгоритма; просто используйте тот, который соответствует тому, в чем Вы нуждаетесь. Если Вы волнуетесь по поводу людей, делающих коллизии MD5 на Вас (как в, действительно ли это - угроза нарушения безопасности?), затем используйте алгоритм, который не так слаб, таков как SHA256.

Редактирование 2: обратиться к по-видимому все еще распространенному заблуждению: Нахождение случайной коллизии на хеше не является 1/2^n вероятностью. Это ближе к 1/2^ (n/2). Таким образом, с 128-разрядным хешем можно, вероятно, столкнуться с 2^64 попытки. Посмотрите нападение дня рождения для деталей.

7
ответ дан 18 December 2019 в 10:49
поделиться

Проверка хеша MD5 отдельно достаточна в большинстве целей. Хотя, если Вы должны, нет никакого вреда в проверке SHA1, кроме того. Следует иметь в виду возможность ловли чего-то, что Вы пропустили бы только с проверкой MD5, является чрезвычайно удаленным.

Обратите внимание, что с точки зрения масштабируемости, дополнительная проверка добавляет ненужную нагрузку на Ваш сервер.

4
ответ дан 18 December 2019 в 10:49
поделиться

Для целостности файлов (например, случайное/случайное повреждение), должен быть достаточным один хеш. 128 битов = вероятность 2-128 необнаруженной ошибки, которая является для всех достаточно маленьких практических целей.

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

MD5 считают "слабым" в том смысле, что возможно создать два документа с тем же хешем с намного более низкой суммой процессорного времени, необходимого, чем это взяло бы для поиска "в лоб" ("сопротивление коллизии" MD5, был поврежден).

Но это не (насколько я знаю), "слабый" с точки зрения, если у Вас есть произвольный документ X, кто-то еще может создать документ Y с тем же хешем с намного более легким временем, чем поиск "в лоб" (MD5 все еще имеет "сопротивление перед изображением"). (Различие похоже на различие между хождением на вечеринку и нахождением двух человек с тем же днем рождения, по сравнению с нахождением другого человека с тем же днем рождения как Ваш.)

Даже если MD5 прерван, что отношение, невероятное, что кто-то может придумать алгоритм для создания документов для соответствия произвольному хешу MD5 и хешу arbritrary SHA1.

Это отчасти кажется, что сила между этими двумя принципами "не помещает все Ваши яйца в одну корзину" по сравнению с "помещенным все Ваши яйца в одной корзине и наблюдает корзину". Или как то, чтобы тратить деньги на две блокировки засова по сравнению с одной блокировкой засова, которая вдвое более хороша и стоит вдвое больше. Идеально было бы лучше провести процессорное время, вычислив один безопасный 256-разрядный хеш вместо двух менее безопасных 128-разрядных хешей с помощью различных алгоритмов. (да я знаю, что SHA1 составляет 160 битов, это - просто иллюстрация), Вы, более вероятно, получите лучшую производительность этот путь к желаемому уровню безопасности - то есть, если 256-разрядный хеш не будет поврежден. Если это повреждается, можно быть более обеспечены с двумя алгоритмическими подходами только для хеджирования ставок.

Но снова если это - просто целостность для защиты от ошибок, один хеш MD5 прекрасен.

править: процитировать некоторые полезные источники: 1 2 3, "MD5, которую рассматривают вредной сегодня", RFC4270, последнее обновление NIST на конкуренции SHA-3, и "зоопарк SHA-3".

2
ответ дан 18 December 2019 в 10:49
поделиться

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

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

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

1
ответ дан 18 December 2019 в 10:49
поделиться

Как грубая оценка, шанс для положительной лжи MD5 равняется 1 / (2^128), шанс для положительной лжи SHA-1 равняется 1 / (2^160), таким образом, шанс для лжи, положительной для обоих алгоритмов, между 1 / (2^128) и 1 / (2^288), но можно быть вполне уверены, что это близко 1 / (2^288), поскольку оба алгоритма были полностью протестированы статистически.

По крайней мере, при использовании двух различных хешей, Вы защищены очень хорошо против намеренных нападений в одном из алгоритмов.

Править: После некоторого исследования я наткнулся на это Примечание Википедии, что в нападениях дня рождения MD5 можно выполнить менее чем 1 минута, таким образом, кажется лучше использовать другой алгоритм в качестве MD5 вместе с SHA-1 здесь. Нападения дня рождения для SHA-1 берут 2^69 операции в данный момент.

1
ответ дан 18 December 2019 в 10:49
поделиться

Поскольку два хеша вычисляются по-другому, два файла с тем же хешем MD5 не более вероятны иметь тот же хеш SHA-1, чем два случайных файла. Если Ваш шанс случайной коллизии с любым хешем будет (приблизительная оценка) 2^128, то Ваш шанс случайной коллизии в обоих будет 2^256.

В действительности Вы идете от чрезвычайно низко до чрезвычайно, чрезвычайно низко.

Это - equivilent движения от 128-разрядного до 256-разрядного шифрования, чтобы не иметь кого-то, случайным образом предполагают Ваш 128-разрядный ключ.

1
ответ дан 18 December 2019 в 10:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: