Русская Википедия:Псевдослучайная функция Наора — Рейнгольда

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Псевдослучайная функция Наора — Рейнгольда — Шаблон:Iw, введённая в 1997 году Шаблон:Iw и Шаблон:Iw для построения различных криптографических примитивов в симметричном шифровании и криптографии с открытым ключом[1]. Отличительными особенностями данной псевдослучайной функции являются низкая вычислительная сложностьШаблон:Переход и высокая криптографическая стойкостьШаблон:Переход. Данные свойства вместе с тем фактом, что распределение значений данной функции близко к равномерномуШаблон:Переход, позволяют использовать ее в качестве основы для многих криптографических схемШаблон:Переход.

Постановка

В криптографии под семейством псевдослучайных функций понимают набор функций (которые могут быть эффективно вычислены за полиномиальное время), обладающих следующим свойством: злоумышленник не может эффективно найти какое-либо существенное различие между поведением функции из данного семейства и истинной случайной функции[2]. Пусть <math>p</math> — это <math>n</math>-битное простое число, <math>l</math> — простое число, являющееся делителем <math>p-1</math>, а <math> g \in {\mathbb F}_p^*</math>, — некоторый элемент с мультипликативным порядком <math>l</math> по модулю <math>p</math>. Тогда функция Наора — Рейнгольда <math>f_a(x)</math> определяется некоторым <math>(n+1)</math>-мерным вектором <math>a = (a_0, a_1,..., a_n) \in ({\mathbb F}_l)^{n+1} </math> над полем <math>\mathbb{F}_l</math> и равна:

<math>f_{a}(x) = g^{a_{0}\cdot a_{1}^{x_{1}} a_{2}^{x_{2}}...a_{n}^{x_{n}}} \in \mathbb F_p</math>

где <math> x = x_1,..., x_n </math> — это двоичное представление целого числа <math>x,</math> <math> 0 \leq x < 2^n</math>, с добавлением ведущих нулей, если это необходимо[3].

Пример

Пусть <math>p = 7</math> и <math>l = 3</math>. В качестве <math>g \in \mathbb{F}_7^*</math> с мультипликативным порядком <math>3</math> можно выбрать <math>g=4</math>. Тогда при <math>n=3</math>, <math>a=(1,1,3,1)</math> и <math>x=5</math> функция <math> f_{a}(5)</math> вычисляется как

<math>f_{a}(x) = g^{a_{0}\cdot a_{1}^{x_{1}} a_{2}^{x_{2}}...a_{n}^{x_{n}}} = 4^{1\cdot 1^{1} 3^{0} 1^{1}} = 4^{1} = 4 \in \mathbb F_7</math>

Так как двоичное представление числа <math>5</math> — это <math>(1,0,1)</math>.

Вычислительная сложность

Построение псевдослучайной функции Наора — Рейнгольда требует <math>n</math> умножений по модулю <math>l</math> и одно возведение в степень по модулю <math>p</math>, которое может быть сделано за <math>O\left(\frac{n}{\log n}\right)</math> умножений по этому модулю[1][4].

Для Шаблон:Iw данной функции было показано, что существует такой полином <math>p(x)</math>, что для любого <math>a = (a_0, a_1,..., a_n) \in ({\mathbb F}_l)^{n+1} </math>, <math>f_{a}(x)</math> может быть реализована схемой из пороговых элементов глубины <math>d</math> и размера, не превышающего <math>p(n)</math>. Это означает, что функции Наора — Рейнгольда принадлежит Шаблон:Iw в терминах Шаблон:Iw[1].

Применение

Псевдослучайная функция Наора — Рейнгольда может быть использована в качестве основы многих криптографических схем, включая симметричное шифрование, аутентификацию и электронные подписи[5][2].

Также было показано, что данная функция может быть использована в[6]:

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

Безопасность

Псевдослучайная функция Наора — Рейнгольда имеет высокую криптографическую стойкость. Пусть злоумышленнику известны значения функции в нескольких точках: <math> f_{a}(1) = g^{a_0 a_{1}}, f_{a}(2) = g^{a_0 a_{2}},\dots,f_{a}(k) = g^{a_0 a_{1}^{x_{1}} a_{2}^{x_{2}}...a_{n}^{x_{n}}}</math>и ему необходимо вычислить <math> f_{a}(k + 1)</math>. Если <math>x_1 = 0</math>, то чтобы получить <math>f_{a}(k+1) = g^{a_0 a_{1}a_{2}^{x_{2}} \dots a_{n}^{x_{n}}}</math>, злоумышленнику необходимо решить Шаблон:Iw для <math> f_a (1)= g^{a_0 a_{1}} </math> и <math>f_{a}(k) = g^{a_0 a_{2}^{x_{2}} ...a_{n}^{x_{n}}}</math>. Но по Шаблон:Iw не существует эффективного алгоритма, способного решить данную задачу[1].

Поток чисел, генерируемый псевдослучайной функцией, также должен быть непредсказуемым, то есть, он должен быть неотличим от совершенно случайного набора чисел. Пусть <math> \mathcal{A}^f </math> обозначает алгоритм, имеющий доступ к оракулу, который вычисляет <math> f_{a}(x)</math>. Предположим, что Шаблон:Iw выполняется для <math> \mathbb F_p </math>. Тогда для любого вероятностного полиномиального алгоритма <math> \mathcal{A} </math> и достаточно большого <math>n</math> выполнено[7]:

<math>| \text{Pr }[\mathcal{A}^{f_{a}(x)}(p,g) = 1] - \text{Pr }[\mathcal{A}^{R} (p,g) = 1]| < \epsilon </math>, где <math> \epsilon(n) </math> — пренебрежимо мало.

Первая вероятность равна доле наборов <math>s = (p, g, a)</math>, на которых алгоритм выдаёт единицу, а вторая получается из случайного выбора пары <math>(p, g)</math> и функции <math> R_{a}(x) </math> среди множества всех функций <math> \{0,1\}^{n} \to {\mathbb F}_p </math>.

Линейная сложность

Одним из естественных показателей того, насколько последовательность может быть полезной для криптографических целей, является её линейная сложность. Линейная сложность <math>n</math>-элементной последовательности <math>W(x),\; x = 0,\dots, n - 1</math>, над кольцом <math> \mathcal{R}</math> — это длина <math>l</math> кратчайшего линейного рекуррентного соотношения <math>W(x + l) = A_{l-1} W(x +l-1) + \dots + A_0 W(x),\; x = 0,\dots, n - (l-1)</math>, где <math>A_0,\dots,A_{l-1} \in \mathcal R</math>[3][8]. Для функции Наора — Рейнгольда было показано, что существуют такие <math>\gamma > 0</math> и <math>n \geqslant (1+\gamma)\log l</math>, что для любого <math>\delta > 0 </math> и достаточно большого <math>l</math> линейная сложность <math>L_a</math> последовательности <math> f_{a}(x)</math>, <math>0 \leq x < 2^n</math>, удовлетворяет следующему неравенству[3]:

<math>L_{a} \geqslant \begin{cases}

l^{1-\ \delta\,\!} &\text{, если } \gamma\,\! \geqslant 2\\ l^{\left (\tfrac{\ \gamma\,\!}{2-\ \delta\,\!}\right )} &\text{, если } \gamma\,\! < 2 \end{cases}</math>

для всех, кроме не более чем <math>3(l - 1)^{n - \delta}</math> векторов <math> a \in (\mathbb F_{l})^{n+1} </math>.

Равномерность распределения

Статистическое распределение <math> f_{a}(x)</math> экспоненциально близко к равномерному распределению почти для всех векторов <math> a \in ({\mathbb F}_{l})^{n+1} </math>:

пусть <math>{\mathbf D}_a</math> — Шаблон:Iw множества <math>\{f_a (x)| 0 \leq x < 2^{n}\}</math> или, другими словами, отклонение распределения значений псевдослучайной функции от равномерного распределения. Было показано, что если <math>n = \log p </math> — это битовая длина <math>p</math>, тогда для всех векторов <math>a</math> ∈ <math> (\mathbb F_{l})^{n+1} </math> справедливо неравенство <math>{\mathbf D}_a\leq \Delta (l,p)</math>, где[9]:

<math>\Delta (l,p) = \begin{cases}

p^{\left (\tfrac{1-\ \gamma\,\!}{2}\right )}l^{\left (\tfrac{-1}{2}\right )}\log^{2}p &\text{ если } l \geqslant p^{\gamma\,\!}\\ p^{\left (\tfrac{1}{2}\right )}l^{-1}\log^{2}p &\text{ если } p^{\gamma\,\!} > l \geqslant p^{\left (\tfrac{2}{3}\right )} \\ p^{\left (\tfrac{1}{4}\right )}l^{\left (\tfrac{-5}{8}\right )}\log^{2}p &\text{ если } p^{\left (\tfrac{2}{3}\right )} > l \geqslant p^{\left (\tfrac{1}{2}\right )} \\ p^{\left (\tfrac{1}{8}\right )}l^{\left (\tfrac{-3}{8}\right )}\log^{2}p &\text{ если } p^{\left (\tfrac{1}{2}\right )} > l \geqslant p^{\left (\tfrac{1}{3}\right )} \\ \end{cases}</math>

и <math>\gamma = 2,5 - \log 3 \approx 0,9150\dots</math>.

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

Последовательности на эллиптической кривой

Анализ этой функции на эллиптической кривой позволяет улучшить криптографическую стойкость соответствующей системы. Пусть <math>p > 3</math> — простое число и <math>E</math> — эллиптическая кривая над <math> \mathbb F_p </math>. Тогда любой вектор <math>a = (a_0, a_1, \dots , a_n) \in ({\mathbb F}_{l}^*)^{n+1}</math> определяет конечную последовательность <math>f_{a}(x) = (a_0a_{1}^{x_{1}} a_{2}^{x_{2}}\dots a_{n}^{x_{n}})G \in \mathbb F_p^2 </math> в циклической группе <math>\langle G\rangle</math>, где <math>x = x_1 \dots x_n</math> — битовое представление <math>x,\; 0 \leq x < 2^{n}</math>, <math> G \in \mathbb F_p^2</math>, — некоторый элемент на <math>E</math> с мультипликативным порядком <math>l</math>, а <math>(a_0a_{1}^{x_{1}} a_{2}^{x_{2}}\dots a_{n}^{x_{n}})G </math> — это операция возведения элемента <math>G </math> в степень <math>a_0a_{1}^{x_{1}} a_{2}^{x_{2}}\dots a_{n}^{x_{n}} </math> относительно групповой операции в абелевой группе <math>\mathbb F_p</math>-рациональных точек эллиптической кривой[10]. В таких обозначениях последовательность Наора — Рейнгольда на эллиптической кривой определяется как <math> u_{k} = X (f_{a}(k))\; </math>, где <math>X (P)</math> обозначает абсциссу точки <math> P \in E </math>[8].

Если предположение Диффи — Хеллмана выполнено, то индекса <math>k</math> не достаточно для вычисления <math>u_k</math> за полиномиальное время. Для эллиптической кривой Наора — Рейнгольда было показано, что существуют такие <math>\gamma > 0</math> и <math>n \geqslant (1+\gamma)\log l</math>, что для любого <math>\delta > 0 </math> и достаточно большого <math>l</math> линейная сложность <math>L_a</math> последовательности <math>(u_k)_{k=0}^{2^n -1}</math> удовлетворяет следующему неравенству[8]:

<math>L_{a} \geqslant \min\left(l^{\frac{1}{3} - \delta}, \frac{l^{(\gamma-3\delta)}}{\log^2l}\right)</math>

для всех, кроме не более чем <math>O((l - 1)^{n - \delta})</math> векторов <math> a \in (\mathbb F_{l}^*)^{n+1} </math>.

См. также

Примечания

Шаблон:Примечания Шаблон:Добротная статья