Рейтинг:2

Почему универсальные хеш-функции защищают от злоумышленников, а унифицированные — нет?

флаг cn

Прежде чем я задам свой фактический вопрос, позвольте мне сначала немного терминологии, чтобы мы все были на одной странице:

Позволять $U=\{k_1,...,k_u\}$ вселенная возможных ключей, $|U|=u$. Мы используем хеш-таблицу $Т$ с $м$ клеток, считая от $0$ к $м-1$. Мы используем семейство хеш-функций $Ч$, такой, что каждый $ч\в ч$ имеет вероятность $1/м$ что два разных ключа $к$ и $к'$ hash, поэтому одно и то же значение, т. е. $P(ч(к)=ч(к'))=1/м$.

Наконец, универсальное хеширование означает, что для хеширования используется случайная хеш-функция (удовлетворяющая $1/м$ упомянутое выше требование) выбирается из H. Согласно моим исследованиям (и это, кажется, согласуется с известным учебником по алгоритмам CLRS), мы всегда используем только не замужем хэш-функции на протяжении всего времени выполнения нашей хэш-таблицы. Таким образом, другие элементы в семействе хэшей актуальны только во время создания таблицы (т. е. при первом вызове программы), но одна эта функция была выбрана фиксированной, а все остальные больше не актуальны. Это также имеет смысл, потому что если бы вы выбрали разные хеш-функции для разных ключей, вам снова нужно было бы иметь сопоставление ключа с используемой функцией, что не имело бы особого смысла, это проблема, которую мы собираемся решить. : знать, где хранить ключ; но выбранная хэш-функция будет зависеть от ключа, так что мы получим парадокс. :) Так что вполне логично, что мы выбираем только одну функцию за все время выполнения.

Выяснив это, мой вопрос:

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

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

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

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

Таким образом, если мы предположим, что функция не является общедоступной, и злоумышленник может вывести ее «каким-то образом» (возможно ли это вообще? например, путем измерения времени выполнения?), то опять же не имеет значения, существует ли функция, фиксированная заранее. или это было исправлено только после инициализации таблицы.

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

Рейтинг:1
флаг ng

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

Код почти никогда не публикуется, не так ли?

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

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

Prof.Chaos avatar
флаг cn
Ах, так это действительно потому, что предполагается, что код известен. Кто бы мог подумать.:) Спасибо!

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

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