Универсальное семейство хеш-функций — различия между версиями
| Martoon (обсуждение | вклад) м (→Построение универсального множества хеш-функций) | Martoon (обсуждение | вклад)   (→Построение попарно независимого множества хеш-функций) | ||
| Строка 63: | Строка 63: | ||
| <tex>lx - ky = b(l - k)</tex> <tex>mod</tex> <tex>p</tex> <tex>mod</tex> <tex>m</tex> | <tex>lx - ky = b(l - k)</tex> <tex>mod</tex> <tex>p</tex> <tex>mod</tex> <tex>m</tex> | ||
| − | + | Запишем иначе: | |
| <tex>x - y \equiv a(k - l)+im</tex>  <tex>\pmod p</tex> | <tex>x - y \equiv a(k - l)+im</tex>  <tex>\pmod p</tex> | ||
| Строка 71: | Строка 71: | ||
| где <tex dpi = "135"> 0 \le i, j < \lfloor \frac{p}{m} \rfloor </tex>.   | где <tex dpi = "135"> 0 \le i, j < \lfloor \frac{p}{m} \rfloor </tex>.   | ||
| − | Стоит отметить, что эти равенства мы считаем выполненными, если при данных <tex>a, b, x</tex> и <tex>y</tex> и '''каких-либо''' <tex>i</tex> и <tex>j</tex> они будут верными. | + | Стоит отметить, что эти равенства мы считаем выполненными, если при данных <tex>a, b, x</tex> и <tex>y</tex> и '''каких-либо''' <tex>i</tex> и <tex>j</tex> они будут верными (исходя из того как мы их получили). | 
| <tex>k \ne l</tex>, <tex>p</tex> {{---}} простое, тогда | <tex>k \ne l</tex>, <tex>p</tex> {{---}} простое, тогда | ||
| Строка 79: | Строка 79: | ||
| <tex>b \equiv (l - k)^{-1}(lx - ky - jm)</tex>   <tex>\pmod p</tex> | <tex>b \equiv (l - k)^{-1}(lx - ky - jm)</tex>   <tex>\pmod p</tex> | ||
| − | Теперь заметим, что <tex>a</tex> принимает <tex>p</tex> различных значений, а <tex>i</tex> {{---}} <tex dpi = "130">\lfloor \frac{p}{m} \rfloor</tex> значений. Понятно, что для заданных <tex>x, y</tex> и <tex>a</tex> с вероятностью лишь  <tex dpi = "130"> \frac{1}{m} </tex>  найдётся <tex>i</tex>, обращающий равенство в тождество; аналогично и со вторым равенством.     | + | Теперь заметим, что <tex>a</tex> принимает <tex>p</tex> различных значений, а <tex>i</tex> {{---}} <tex dpi = "130">\lfloor \frac{p}{m} \rfloor</tex> значений. Понятно, что для заданных <tex>x, y</tex> и <tex>a</tex> с вероятностью лишь  <tex dpi = "130"> \frac{1}{m} </tex>  найдётся <tex>i</tex>, обращающий первое равенство в тождество; аналогично и со вторым равенством.     | 
| Остаётся подытожить наши выкладки. | Остаётся подытожить наши выкладки. | ||
| Строка 87: | Строка 87: | ||
| <tex>=</tex> | <tex>=</tex> | ||
| − | <tex>P( [a \equiv (k - l)^{-1}(x - y - im)</tex>   <tex>\pmod p]</tex>  <tex>\wedge</tex>   <tex>[ | + | <tex>P( [a \equiv (k - l)^{-1}(x - y - im)</tex>   <tex>\pmod p]</tex>  <tex>\wedge</tex>   <tex>[b \equiv (l - k)^{-1}(lx - ky - jm)</tex>   <tex>\pmod p])</tex>   | 
| <tex>=</tex> | <tex>=</tex> | ||
| <tex>=</tex> | <tex>=</tex> | ||
| − | <tex>P( a \equiv (k - l)^{-1}(x - y - im)</tex>   <tex>\pmod p)</tex>  <tex>\cdot</tex>   <tex>P( | + | <tex>P( a \equiv (k - l)^{-1}(x - y - im)</tex>   <tex>\pmod p)</tex>  <tex>\cdot</tex>   <tex>P( b \equiv (l - k)^{-1}(lx - ky - jm)</tex>   <tex>\pmod p)</tex>   | 
| <tex>=</tex> | <tex>=</tex> | ||
| <tex>=</tex> | <tex>=</tex> | ||
| − | <tex dpi = "130">\frac{1}{m} \cdot \frac{1}{m} = \frac{1}{m^2}</tex> | + | <tex dpi = "130">(\frac{1}{m} + o(\frac{1}{m})) \cdot (\frac{1}{m} + o(\frac{1}{m})) = \frac{1}{m^2} + o(\frac{1}{m^2})</tex> | 
| Переход к третьей строчке объясняется тем, что события, объединённые знаком <tex>\wedge</tex>, независимы. | Переход к третьей строчке объясняется тем, что события, объединённые знаком <tex>\wedge</tex>, независимы. | ||
Версия 00:17, 11 июня 2013
Содержание
Определение
Качественная хеш-функция удовлетворяет (приближенно) условию простого равномерного хеширования: для каждого ключа, независимо от хеширования других ключей, равновероятно помещение его в любую из ячеек. Но это условие обычно невозможно проверить, так как распределение вероятностей, с которыми поступают входные данные, как правило, неизвестно. К тому же, вставляемые ключи могут и не быть независимыми. Если наш противник будет умышленно выбирать ключи для хеширования при помощи конкретной хеш-функции, то при некоторых реализациях хеш-таблиц может получиться так, что все ключи будут записаны в одну и ту же ячейку таблицы, что приведет к среднему времени выборки . Таким образом, любая фиксированная хеш-функция становится уязвимой. И единственный эффективный выход из данной ситуации — случайный выбор хеш-функции. Такой подход называется универсальным хешированием. Он гарантирует хорошую производительность в среднем, вне зависимости от данных, выбранных нашим противником.
| Определение: | 
| Пусть — конечное множество хеш-функций, которые отображают пространство ключей в диапазон . Такое множество называется универсальным, если для каждой пары ключей количество хеш-функций , для которых не превышает . | 
Иными словами, при случайном выборе хеш-функции из  вероятность коллизии между различными ключами  не превышает вероятности совпадения двух случайным образом выбранных хеш-значений из множества , которая равна .
Построение универсального множества хеш-функций
| Теорема: | 
| Множество хеш функций , где , , ,  — простое число, является универсальным. | 
| Доказательство: | 
| Рассмотрим . Пусть для данной хеш-функции , . , так как , а — простое число, и не равны нулю по модулю . Значит, произведение и также отлично от нуля по модулю . Таким, образом, коллизии "по модулю " отсутствуют. Более того, каждая из возможных пар , приводят к различным парам . Чтобы доказать это, достаточно рассмотреть возможность однозначного определения и по заданным и : . Поскольку имеется только возможных пар , то имеется взаимнооднозначное соответствие между парами и парами . Таким образом, для любых при равномерном случайном выборе пары из , получаемая в результате пара может быть с равной вероятностью любой из пар с отличающимися значениями по модулю . Отсюда следует, что вероятность того, что различные ключи приводят к коллизии, равна вероятности того, что при произвольном выборе отличающихся по модулю значений и . Для данного имеется возможное значение . При этом число значений и , не превышает . Вероятность того, что приводит к коллизии с при приведении по модулю , не превышает .Значит, , что означает, что множество хеш-функций является универсальным. | 
Попарная независимость
| Определение: | 
| Пусть — универсальное семейство хеш-функций. Говорят что оно обладает свойством попарной независимости, если при фиксированных для каждой пары ключей количество хеш-функций , для которых и не превышает . | 
Построение попарно независимого множества хеш-функций
| Теорема: | 
| Семейство хеш функций, описанное выше, также является попарно независимым. | 
| Доказательство: | 
| Для функции получаем 
 
 Выразим отсюда и . Вычтя из первого уравнения второе, получим: 
 Теперь сначала первое домножим на , и второе на . Вычитаем: 
 Запишем иначе: 
 , где . Стоит отметить, что эти равенства мы считаем выполненными, если при данных и и каких-либо и они будут верными (исходя из того как мы их получили). , — простое, тогда 
 
 Теперь заметим, что принимает различных значений, а — значений. Понятно, что для заданных и с вероятностью лишь найдётся , обращающий первое равенство в тождество; аналогично и со вторым равенством. Остаётся подытожить наши выкладки. 
 
 
 Переход к третьей строчке объясняется тем, что события, объединённые знаком , независимы. | 
Источники
- Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн Алгоритмы: построение и анализ — 2-е изд. — М.: «Вильямс», 2005. — с. 294. — ISBN 5-8459-0857-4
