Усиливает ли внутренний дайджест в сообщении внешний дайджест? - PullRequest
3 голосов
/ 08 апреля 2011

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

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

Например, для кодирования:

message = data . hash1(data)
message_hash = hash2(message)

Для проверки сообщения с помощью message_hash:

check(hash2(message) == message_hash)
data = message[:-digest_size]
check(hash1(data) == message[-digest_size:])

hash1 и hash2 могут быть совершенно разных типовхэш-функции.

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

Ответы [ 3 ]

2 голосов
/ 08 апреля 2011

Если внешний алгоритм хеширования нарушен, внутренний хэш может помочь, но вы должны рассмотреть, насколько вероятен этот сценарий с хорошо уважаемым алгоритмом.

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

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

1 голос
/ 08 апреля 2011

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

Таким образом, добавление внутренней хеш-функции не обязательно увеличит устойчивость к столкновениям и прообразам. С чисто теоретической точки зрения, это может фактически уменьшить сопротивление, хотя это совершенно невероятно, особенно если хеш-функции безопасны (но если функции безопасны, то конструкция бессмысленна). В более практической плоскости это двойное хеширование увеличивает вычислительную нагрузку (больше ЦП и, возможно, больший код - следовательно, большее использование кэша L1 - если две функции не совпадают). Так что мой совет - не делать этого. Вместо этого используйте одну «надежную» хеш-функцию, например SHA-256. Хеш-функция не будет самой большой слабостью в вашем приложении (или, точнее, если хеш-функция равна самой большой слабости в вашем приложении, то вы бог программирования и / или Дональд Кнут ).

В качестве иллюстрации SSL / TLS использует MD5 и SHA-1 одновременно в качестве попытки противостоять слабым сторонам любой из двух функций. Но более новая версия TLS 1.2 переключается только на SHA-256.

1 голос
/ 08 апреля 2011

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

Однако я не вижу смысла в использовании 2 хеш-функций. Выберите один из стандартных, которые до сих пор сопротивлялись атакам, и продолжайте. Если вы предполагаете, что один из них сломается, зачем использовать его в первую очередь? SHA-2 или любой из финальных кандидатов на соревнование SHA3 должны подойти, если вам нужна надежная защита, больше информации здесь: http://ehash.iaik.tugraz.at/wiki/The_SHA-3_Zoo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...