Рейтинг:3

Каковы свойства хэш-функции?

флаг gr

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

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

poncho avatar
флаг my
Вы спрашиваете о криптографической хеш-функции или просто о хеш-функции (скажем, для использования в хеш-таблице)?
флаг gr
Я прошу хеш-функцию.
Maarten Bodewes avatar
флаг in
Это хорошо и все такое, но это [crypto.se]. Если вам нужно более широкое определение, вы можете перейти, например. [cs.se].
Рейтинг:6
флаг ng

С криптографической точки зрения хэш-функция с выходом фиксированного размера:

  • Должна быть детерминированной функцией: одни и те же входные данные всегда должны генерировать одни и те же выходные данные.
  • Должен принимать входные сообщения в широком наборе входных данных. В идеале это должна быть произвольная строка битов, но часто это произвольные строки байтов или строки символов, возможно, до некоторого размера.
  • Обнажая специальный квалификатор (например, с ключом или же секрет или же случайный), должен быть общедоступным: каждый шаг и константа, необходимые для вычисления результата для любого заданного входа, известны всем.
  • Должен вычислить результат за время, полиномиальное с входным размером. Это время должно быть примерно линейным с размером ввода.
  • Должен иметь устойчивость к столкновениям: вычислительно невозможно представить два разных сообщения с одним и тем же выводом (это свойство подразумевает второе сопротивление прообраза, то есть при случайных входных данных вычислительно невозможно найти другой вход, дающий такой же результат). Обратите внимание, что если есть $n$ возможных выходов, существуют общие атаки, которые нарушают устойчивость к коллизиям примерно $\кв.п$ оценки функции, таким образом, устойчивость к столкновению подразумевает $n$ большой (скажем, не менее $2^{192}$ Настоящее время); в противном случае определение устойчивости к коллизиям должно быть ослаблено: лучший способ показать два разных сообщения с одним и тем же выводом - это общая атака.
  • Должен иметь (первое) сопротивление прообразу: учитывая выходные данные для случайных неизвестных входных данных, вычислительно невозможно найти эти входные данные (или другие входные данные с тем же выходным сигналом) проще, чем путем перебора входных данных. Обратите внимание, что если есть $n$ возможных выходов, существуют общие атаки, которые разрушают сопротивление прообраза примерно с $n$ оценки функции, таким образом, сопротивление прообразу подразумевает $n$ большой (скажем, не менее $2^{96}$ Настоящее время); в противном случае определение сопротивления прообразу должно быть ослаблено.

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

  • Для неизвестных случайных входных данных с любой естественной характеристикой (то есть не зависящих от определения хеш-функции; например, входных данных, состоящих из 40 десятичных цифр, сумма которых делится на 10), выходные данные должны быть вычислительно неотличимы от равномерно случайных в выходной набор.
  • Устойчивость к атаке с расширением длины: данный вывод для неизвестного ввода $ млн $, должно быть невозможно вычислить вывод для ввода расширения $ млн $ (это $M\mathbin\|E$ для непустого $Е$) проще, чем найти $ млн $ путем попытки ввода. Обратите внимание, что все еще распространенные хэши, такие как SHA-256, не имеют этого более позднего свойства.
user3742898 avatar
флаг jp
Я бы провел различие между «хеш-функцией» (выход фиксированного размера, является функцией, принимает все соответствующие входные данные) и «хэш-функцией _worthwhile_» (линейное время, устойчивость к коллизиям, устойчивость к прообразам). "вернуть 0;" является хэш-функцией. Это ужасная хэш-функция, но это хеш-функция. Плохие хэш-функции часто бывают полезны при поиске ошибок в алгоритмах, использующих хэш-функции, или для уточнения того, какие свойства (скорость, устойчивость к коллизиям и т. д.) наиболее важны для данного приложения.
Blindy avatar
флаг in
Поскольку ОП пояснил, что он не говорит о криптографически безопасных хеш-функциях, я считаю, что в вашем определении следует ослабить три момента: 1. нет необходимости, чтобы функция была общедоступной, чтобы она была хорошей хеш-функцией (экспертная оценка полезна, но не обязательно), 2. Учитывая большие входные данные и необходимость быстрого хэширования, «вычислительно невозможные» дубликаты являются просто предположением, и 3. невозможное обращение функции принципиально не требуется, `f(x) = x` очень быстрый и эффективный способ хэширования целого числа.
fgrieu avatar
флаг ng
@Blindly: поскольку ОП одновременно задавал [вопрос о крипто-новичках] (https://crypto.stackexchange.com/q/92044/555), я решил ответить на вопрос и «Я прошу хэш function» как указание на то, что OP не знает, что такое криптографическая хэш-функция, а не на то, что вопрос не о криптографии.
poncho avatar
флаг my
На самом деле, криптографически плохая хеш-функция лучше подходит для использования в хэш-таблице, чем хорошая, то есть она может вызвать меньшее ожидаемое сжатие хэша, чем случайная функция. Это может произойти в зависимости от распределения входных данных; хорошо выбранная (некриптографическая) хэш-функция может распространять свои выходные данные лучше, чем ожидалось.

Ответить или комментировать

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