\documentclass[12pt,a4paper]{book}

\usepackage[koi8-r]{inputenc}
\usepackage[russian,english]{babel}

\usepackage{amsmath,amsthm,amssymb}
\pagestyle{plain}

\input defs

\begin{document}
\selectlanguage{russian}

\lecture{1}{Односторонние функции}{К. Шмаков}

Часто в криптографии используется понятие односторонней функции. 
Одностороннюю функцию можно интуитивно
представить себе как эффективно вычислимую функцию,
обратную к которой никто (в том числе наш противник) не может
вычислить эффективно.

\section{Функции, односторонние в наихудшем случае}
В качестве ``первого приближения'' рассмотрим вариант,
когда обратная функция просто не вычислима на детерминированной
машине Тьюринга за полиномиальное время.

\begin{theorem}
Пусть $\P\neq\NP$. Тогда существует такая $f\in\sP$
(т.е. вычислимая на полиномиальной
детерминированной машине Тьюринга), что $f^{-1}\notin\sP$.
\end{theorem}

\begin{proof}
Действительно, пусть $\Phi$ --- формула в КНФ, а $A$ --- набор значений
переменных. Определим одностороннюю функцию:
\[
f(\Phi,A)=
\begin{cases}
(\Phi,1^{|A|}), &\mbox{ if }\Phi[A]=\mathtt{True}, \\
(\Phi,0^{|A|}), &\mbox{ otherwise.}
\end{cases}
\]
Если бы могли обратить эту функцию, мы могли бы найти выполняющий
набор для любой выполнимой формулы, вычислив 
\[
f^{-1}(\Phi,1^{\mbox{кол-во переменных}}).
\]
Но мы знаем, что эта задача $\sNP$-полна.
\end{proof}

\begin{definition}
Функция $f$ называется \emph{честной}, если у любой точки $y$ её образа
имеется прообраз, длина которого полиномиально (от длины $y$) ограничена.
\end{definition}

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

\begin{exercise}[\footnote{Решено на семинаре.}]
В условии теоремы ``$\Rightarrow$''
заменить на ``$\Leftrightarrow$''
в предположении, что $f$ --- честная. \label{a1}
\end{exercise}

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

\section{Односторонние функции}

\begin{definition}
Функция $f\colon\{0,1\}^* \to \{0,1\}^*$ называется
\emph{односторонней} (\emph{one-way function, owf}), если 
\begin{itemize}
\item $f$ вычислима за полиномиальное время на ДМТ\footnote{ДМТ --- детерминированная машина Тьюринга},
\item $\forall$ВМТ\footnote{ВМТ --- вероятностная машина Тьюринга --- (детерминированная) машина Тьюринга, использующая случайные числа.} $A$\\
$\forall k\in\mathbb{N}$\\
$\exists{N}$\\
$\forall n>N$
\[
\Pr\{A(f(x),1^n)\in f^{-1}(f(x))\} < \frac1{n^k},
\]
где вероятность берётся по случайным числам, используемым $A$,
и равномерному распределению по входным строкам $x\in\{0,1\}^n$.
\end{itemize}
\end{definition}
\begin{remark}
Заметим, что наличие $1^n$ у взломщика предоставляет ему возможность
хотя бы пытаться взламывать нечестные функции.
В каком случае $A$ может самостоятельно вычислить $n$?
Ясно, что это так, например, если длина $f(x)$ --- инъективная функция от $n$.
\end{remark}
% one way function - owf

\begin{remark}
Иногда так определённые односторонние функции называют
\emph{сильно} односторонними функциями.
Мы слово ``сильно'' будем опускать.
\end{remark}
%strong

\begin{exercise}[\footnote{Решено на семинаре.}]
Что будет, если при вычислении $f$ разрешить использовать случайные числа:
изменится ли понятие, 
будет ли существование старых owf эквивалентно существованию новых owf? \label{a3}

Варианты: $f$ может быть вычислима всегда правильно,
но лишь за \emph{ожидаемое} полиномиальное время (Las Vegas),
либо же $f$ может быть вычислима с константной ошибкой (Monte Carlo).
\end{exercise}

\begin{exercise}
Что будет, если рассматривать лишь детерминированные $A$:
как будут соотноситься понятия односторонних функций? \label{a4}
\end{exercise}

\begin{exercise}
А если $f$ или $A$, или оба будут последовательностью схем, то изменится
ли что-то? А в предположениях упражнений \ref{a3} и \ref{a4}? \label{a5}
\end{exercise}

\begin{exercise}[\footnote{Решено на семинаре.}]
Что будет, если $x$ будет распределено на $\{0,1\}^n$ не равномерно, а иначе
(но вычислимо за полиномиальное время)? \label{a6}
\end{exercise}

% \begin{exercise}[\footnote{Это упражнение увлечёт нас в
% теорию сложности в среднем (average-case complexity).}]
% Что, если рассматривать распределение не на $\{0,1\}^n$,
% а на $\{0,1\}^*$ (равномерное для каждого $n$ или нет)? \label{a7}
% \end{exercise}

\section{Семейства односторонних функций}

Много кому надо шифровать --- значит, каждому нужна
своя собственная односторонняя функция!

\begin{definition}
\emph{Семейство односторонних функций} (\emph{one-way function family, owff}) ---
это детерминированный полиномиальный по времени алгоритм $G$,
который по входу, состоящему из $1^n$ и (случайной строки) $r_g$,
генерирует $e$ и $s$ --- две булевы схемы, задающие функции
\begin{itemize}
\item $e\colon\{0,1\}^n \to \{0,1\}^{\epsilon(n)}$
      (encryptor --- собственно односторонняя функция),
\item $s\colon\{0,1\}^{\sigma(n)}\to\{0,1\}^n$ (sampler ---
      по (случайной) строке $r_s$ генерирует вход для функции $e$),
\end{itemize}
причём\\
\indent$\forall$ВМТ $A$\\
\indent$\forall k\in\mathbb{N}$\\
\indent$\exists{N}$\\
\indent$\forall n>N$
\[
\Pr\{A(e(x), 1^n, e, s)\in f^{-1}(f(x))\} < \frac1{n^k},
\]
где\\
\indent$G(1^n,r_g)=(e,s)$,\\
\indent$s(r_s)=x$,\\
\indent{}вероятность берётся по случайным числам, используемым $A$,
и по (равномерно распределённым) $r_g$ и $r_s$.
\end{definition}
%one way functions family - owff 
%s - sampler

Мотивация для наличия $s$ следущая: $e$ не обязана быть односторонней всюду;
$s$ выбрасывает из области определения $e$ ``простые'' точки.
Взломщик $A$ получает $s$ на входе, так как 
сама односторонняя функция должна быть целиком известна публике.

\begin{exercise}[\footnote{Решено на семинаре.}]
А нужно ли передавать взломщику $s$? \label{a8}
\end{exercise}

\begin{exercise}
Выполнить упражнения \ref{a1}--\ref{a6} для семейств. \label{a9}
\end{exercise}

Оказывается, что owf и owff существуют или не существуют одновременно.

\begin{theorem}
$\exists f$ --- односторонняя функция $\Leftrightarrow$
$\exists G$ --- cемейство односторонних функций.
\end{theorem}

\begin{proof}
``$\Rightarrow$''. 
Построим по $f$ семейство следующим образом.
Получая $1^n$ и $r_g$, про 
$r_g$ забываем, а по $n$ строим $e$ как схему, которая отражает результат работы машины
Тьюринга, вычисляющей $f$, на входе длины $n$ (см. курс прошлого семестра).
В качестве $s$ возьмём тождественную функцию $s(x)=x$.

Если получившееся --- 
не семейство односторонних функций, то существует его взломщик $A$.
Но тогда 
%он же ломает и
%исходную owf $f$:
имеется и
взломщик $A'$ для исходной owf $f$:
чтобы вызвать $A$, нам (в дополнение к $1^n$ и собственно $f(x)$)
требуется $e$ (мы его только что построили по $n$)
и $s$ (тривиально строящееся по $n$).
На вход $A$ подаётся в точности $f(x)$ для равномерно распределённого
$x\in\{0,1\}^n$,
и результат требуется ровно тот же, что и требовался для owff.

``$\Leftarrow$''.
Построим $f$ по $G$: $f$ делит\footnote{Проблема: а если не делится? Упражнение~\ref{ex:nu,r_s,r_g}!}
свой вход на
$\nu$, $r_g$ и $r_s$
(в соответствии с ``положенными'' согласно $G$ длинами для $r_s$ и $r_g$
на длине $n=|\nu|$) и
и запускает $e(s(r_s))$
(где $G(1^n,r_g)=(e,s)$);
итого, \[f(\nu,r_g,r_s)=(e(s(r_s)),e,s).\]

Предположим, что получилась не односторонняя функция,
т.е. $f$ ломается на некоторое полиномиальной доле. 
Но тогда и исходное семейство можно взломать тем же самым взломщиком:
строки $r_g$ и $r_s$ распределены, как и положено, равномерно,
так как это части входа для $f$;
первые $n$ битов на происходящее не влияют, и распределены они 
также равномерно;
на вход взломщику подаётся привычное ему распределение $e(s(r_s))$
вместе с $e$ и $s$.
А доля будет по-прежнему полиномиальна,
так как $n+|r_s(n)|+|r_g(n)|$ ограничено полиномом от $n$. 
\end{proof}

\begin{exercise}[\footnote{Решено на семинаре.}]\label{ex:nu,r_s,r_g}
Что делать с тем, что в доказательстве теоремы входная
строка для $f$ может ``не разделиться'' на $\nu$, $r_g$ и $r_s$?
\end{exercise}

\begin{remark}
В принципе можно определить односторонние функции как многопараметрические функции.
Тогда можно было бы не ``делить'' одну строку на три, а спокойно расставить запятые
между $\nu$, $r_g$ и $r_s$.
\end{remark}

\begin{exercise}
\label{a10}
Что произойдёт, если ограничиться 
$e\colon\{0,1\}^{n} \to \{0,1\}^{n}$
или, наоборот, разрешить\footnote{{\bfseries{NB:}} в книге Голдрейха именно так.} 
$e\colon\{0,1\}^{p(n)}\to\{0,1\}^{p(n)}$?
% А что, если вообще разрешить $e$ выдавать строку
% (зависящей не только от $n$) длины?
\end{exercise}
\begin{exercise}
Сравнить определение односторонней функции с определением из какой-нибудь
книги\footnote{К примеру, Oded Goldreich, \emph{Foundations of Cryptography}.}
и понять, эквивалентны ли они. \label{a11}
\end{exercise}

\section{Слабо односторонние функции}

Можно ослабить определение односторонней функции.
\begin{definition}
Функция $f\colon\{0,1\}^* \to \{0,1\}^*$ --- слабо односторонняя функция,
если 
\begin{itemize}
\item $f$ вычислима за полиномиальное время на ДМТ,
\item $\exists k\in\mathbb{N}$\\
$\forall$ВМТ A\\
$\exists{N}$\\
$\forall n>N$
\[
\Pr\{A(f(x),1^n)\in f^{-1}(f(x))\} < 1-\frac1{n^k},
\]
где вероятность берётся по случайным числам, используемым $A$,
и равномерному распределению по входным строкам $x\in\{0,1\}^n$.
\end{itemize}
\end{definition}
%weak

Оказывается, что такое ослабление
никак не влияет на существование 
односторонней функции.

\begin{theorem}
$\exists f_w$ --- слабо односторонняя функция $\Leftrightarrow$ $\exists f_s$ --- сильно односторонняя функция.
\end{theorem}

\begin{proof}
``$\Leftarrow$''. Тривиально.

``$\Rightarrow$''. Построим \[f_s(x_1, x_2, \ldots, x_m) = (f_w(x_1), f_w(x_2), \ldots, f_w(x_{m})),\]
где $m=m(n)$; полином $m(n)$ мы определим позже (с учётом $k_w$,
определяющего ``необратимую'' долю $1/n^{k_w}$ для $f_w$).

Предположим, что существуют $A_s$ и $k_s$, такие, что $A_s$ обращает $f_s$ хотя бы с вероятностью 
$1/n^{k_s}$. Построим $A'_w$, обращающий $f_w$ на строке $y$, следующим образом: для каждого $1 \le j \le m$
он порождает $x_1,\ldots,x_m$ случайным образом и запускает \[A_s(f_w(x_1), \ldots, f_w(x_{j-1}), y, f_w(x_{j+1}), \ldots, f_w(x_m)).\]
Если $A_s$ хотя бы для одного значения $j$ сработает успешно, то мы получим элемент $f^{-1}(y)$ (мы его легко распознаем, применив $f$).

Рассмотрим \[S_n = \{ x \in \{0,1\}^n |\ \Pr\{A'_w(f_w(x),1^n) \in f_w^{-1}(f_w(x))\} > \frac{n}{a(n)} \},\]
где многочлен $a$ мы определим позднее. Неформально говоря, \emph{$S_n$ --- множество тех $x$, на которых $A'_w$ достаточно успешен}; a priori понятно лишь, что он успешен в среднем по всем возможным $x$ --- на каких-то [конкретных] $x$ сколько его не повторяй, успеха не добьёшься; а мы бы хотели повторениями увеличить вероятность успеха --- повторённый многократно $A'_w$ и будет нашим взломщиком $A_w$.

Вероятность успеха $A'_w$, повторённого $a(n)$ раз:
\[\Pr\{A_w(f_w(x),1^n)\} \geq \Pr\{x \in S_n\} \times \Pr\{A_w(f_w(x),1^n)|\ x \in S_n\}.\]

Правый сомножитель легко оценить: вероятность одной неудачи $A'_w$ для такого $x$ --- это $1 - \frac{n}{a(n)}$,
а после $a(n)$ повторений --- \[\left(\left(1 - \frac{1}{a(n)/n} \right)^{a(n)/n}\right)^n \sim \frac1{e^n}.\]
Покажем, что $\Pr\{x \in S_n\} \ge 1 - \frac{n}{m}$ --- тогда, взяв достаточно быстро растущий многочлен $m$,
мы сможем взломать $f_w$ с вероятностью, большей любой наперёд заданной доли вида $1 - \frac{1}{n^{k_w}}$, что противоречит определению слабо односторонней функции.

Пусть, напротив, $\Pr\{x \in S_n\} < 1 - \frac{n}{m}$.
Оценим вероятность успеха $A_s$ сверху
по формуле полной вероятности,
разделив два случая:
среди его $m$ аргументов все оказались из $S_n$ --- или же не все?

В первом случае вероятность события --- это $\left(\left(1 - \frac{1}{m/n} \right)^{m/n}\right)^n \sim \frac1{e^n}$,
и даже оценив (условную) вероятность успеха в этом случае единицей, мы получим экспоненциально маленькое слагаемое.
Напротив, во втором случае мала вероятность успеха.
Достаточно оценить эту вероятность при условии,
что первый аргумент --- не из $S_n$
(слагаемое для всех аргументов будет разве что лишь в $m$ раз больше).

Эта вероятность --- не больше, чем вероятность успеха $A'_w$
в этом случае, так как для $j=1$ алгоритм $A'_w$
с первым аргументом $f(x)$ как раз запустит $A_s$
на этом $f(x)$.
По определению множества $S_n$ эта вероятность --- не больше
$\frac{n}{a(n)}$. Выбрав $a(n) = 2mn^{1+k_s}$, 
получим, что общая вероятность успеха $A_s$ ---
не больше $\frac{nm}{a(n)} + \frac{1}{e^{\Omega(n)}}$.
Это меньше, чем $1/n^{k_s}$
для больших $n$, т.е. противник $A_s$ вовсе не обращает $f_s$ 
с заявленной вероятностью. Противоречие.
\end{proof}

\begin{remark}
Мы были вынуждены раздуть вход в полиномиальное число раз
и, в частности, значительно увеличить $N$, с которого наша функция надёжна.
Можно поступить гораздо экономнее (мы это изучим на семинаре).
\end{remark}

\begin{exercise}[\footnote{Тривиальное.}]
Можно ли перенести эту теорему на случай owff?\label{a12}
\end{exercise}

\begin{exercise}[\footnote{В общих чертах решено на семинаре.}]
$f_s$ получилась определённой на довольно редком множестве.
Как быть со входами длины, отличной не $mn$?\label{a13}
\end{exercise}

\end{document}
