\documentclass[12pt,a4paper]{book}

\usepackage[koi8-r]{inputenc}

\usepackage[russian,english]{babel}

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

\input defs
\newcommand{\nl}{\newline}
\renewcommand{\epsilon}{\varepsilon}
\renewcommand{\Im}{{\rm{Im}\;}}

\DeclareMathOperator{\const}{const} 

\begin{document}
\selectlanguage{russian}

\lecture{2}{Универсальная односторонняя функция. Перестановки с секретом. Трудный бит}{А. Богатов}
\emph{Частично использован также конспект А. Куликова 2005 года.}

\section{Кандидаты в односторонние функции}
Пусть $\circ$ обозначает конкатенацию строк.
\begin{itemize}
	\item $f(x\circ y) = x \cdot y$ (сложно раскладывать длинные числа на множители (особенно на 2 простых множителя)),
	\item $f (x_1\circ x_2 \circ\ldots\circ x_n\circ I) = (x_1\circ x_2\circ \ldots\circ x_n \sum_{i\in I} x_i )$, где $I \subseteq \{1,\ldots, n\}$
	(это NP-трудная задача SUBSET SUM; в некотором смысле, задача о рюкзаке --- нужно определить, какими элементами из заданного набора набирается заданная сумма).
\end{itemize}

\section{Универсальная односторонняя функция}
\begin{definition}
Алгоритм $A$ взламывает функцию $G$ с вероятностью $q(n)$,
если для бесконечной последовательности длин $n_i$
\[\Pr_{|x|=n_i}\{G(A(G(x)))=x\}\ge q(n_i).\]
\end{definition}

\begin{definition}
  $F \Rightarrow G$ (сильный взлом\footnote{Сильный взлом ломает слабые owf.} функции $F$ сводится к сильному взлому функции $G$), если 
  $$\exists T^\cdot \; \forall p' \; \exists p: $$ 
  $$ A\;\mbox{взламывает}\;G\;\mbox{с}\;\mbox{вероятностью}\;1 - \frac{1}{p(n)} 
    \Rightarrow $$ 
  $$ T^A \;\mbox{взламывает}\;F\;\mbox{с}\;\mbox{вероятностью}\;1 - \frac{1}{p'(n)}.$$
Здесь $T$ --- полиномиальный вероятностный алгоритм, $A$ используется как \emph{вероятностный} оракул (его случайные биты учитываются при запуске $T^A$), $p(n)$ и $p'(n)$ ---многочлены (положительные при $n\ge1$).
\end{definition}
\begin{definition}
Функция $G$, вычислимая за полиномиальное время,
называется универсальной\footnote{На самом деле,
это обычное понятие полноты.} слабой owf\footnote{Вообще-то
она может и не являться при этом слабой owf --- если таковых
нет в природе.}, если
для любой функции $F$, вычислимой за полиномиальное время,
$F\Rightarrow G$.
\end{definition}
Очевидно, что
если существует слабая owf, то универсальная слабая owf
действительно является слабой owf.

\begin{theorem}\label{th:uowf}
Пусть $U (M, x) = (M, M(x))$, где
  $M$ --- описание машины,
  $x$ --- вход для этой машины,
  $M(x)$ --- выход машины на входе $x$,
причем моделируем мы в течение времени $|x|^2$,
а если не успеваем завершить работу, выдаем $x$.
Тогда взлом любой слабой owf сводится к взлому $U$.
\end{theorem}

%Обеспечим $|M(x)| \ge |x|$.
\begin{exercise}
  А какое утверждение верно для сильной owf?
\end{exercise}

\begin{lemma}
  $\forall$ слабой owf $f$ $\exists\tilde f$, вычислимая за время $|x|^2$,
  к взлому которой сводится взлом $f$.
\end{lemma}

\begin{proof}
  Есть функция $f$ --- слабая owf; по ней строим $\tilde f$, которая заканчивает работу за время, ограниченное квадратом от длины входа:
  $$\tilde f (x_1 x_2) = f(x_1) x_2.$$
  Для того, чтобы $\tilde f$ заканчивала работу за квадратичное время, достаточно, чтобы выполнялось неравенство $t_f(x_1) \le |x_1 x_2|^2 - |x_2|$, где $t_f(x_1)$ -- время работы $f$ на входе $x_1$.
  Пусть $|x_1|=n, \, |x_2| = m$.
  Мы можем добиться $t_f(n) \le (m+n)^2 - m$ выбором подходящего $m$ как многочлена от $n$, поскольку $t_f(n)$ также ограничено многочленом от $n$.

  Пусть мы умеем ломать $\tilde f$. Тогда функция $f$ ломается следующим образом: берем то, что нам дали (т.е. некоторое значение $f(x_1)$), дописываем случайную строку $x_2$, ломаем (получая тем самым $x_1 x_2$), убираем с конца $x_2$.
Тем самым, если $\tilde f$ мы ломали с вероятностью $1-\frac{1}{(m+n)^k}$,
то и $f$ мы ломаем с вероятностью $1-\frac{1}{(m+n)^k}$. 
Поскольку $m$ --- фиксированный полином от $n$,
ясно, что мы можем добиться любой необходимой вероятности взлома $f$,
выбирая $k$.
\end{proof}

\begin{proof}[Доказательство теоремы~\ref{th:uowf}]
  Рассмотрим произвольную owf $M^*$, которая заканчивает работу за время $|x|^2$,
и покажем, что $M^*\Rightarrow U$. 
  Для достаточно длинных входов машины $U$ она запускает машину $M^*$ на доле входов $\mu=\frac{1}{2^{|M^*\cdot \const|}} = \const$.
  Если мы не взламываем лишь долю $\frac1{n^k}$ от всех входов $U$, то должны взламывать значительную долю входов из сектора, соответствующего машине $M^*$; именно, мы взламываем долю 
$\mu-\frac{1}{n^k}$, что составляет 
\begin{equation}\label{eq:uowf}1-\frac{1}{\mu n^k}\end{equation}
по отношению ко всем входам машины $M^*$ длины $n-|M^*|$.
Ясно, что для любой требуемой вероятности взлома $M^*$
мы можем подобрать достаточно большие $k$ и $n$, для которых
(\ref{eq:uowf}) будет больше искомой.
\end{proof}

\begin{exercise}
  Что произойдет в случае семейств односторонних функций (сильных либо слабых)?
\end{exercise}

\begin{exercise}
  Что произойдет, если соперник --- детерминированный? Если он задан схемами?
\end{exercise}

\begin{exercise}
  Доказать, что если существует owf, то существует и \emph{не}универсальная owf.
\end{exercise}


\section{Функции с секретом (trapdoor functions)}

Понятие "<функция с секретом"> почти бессмысленно. Поэтому будем рассматривать \emph{семейства} таких функций. Ограничимся инъективными функциями (перестановками).

\begin{definition}
  Односторонняя функция с секретом (trapdoor permu\-tation family, tdpf) --- это полиномиальный по времени алгоритм
  \[G: \; (1^n, r_g) \mapsto (e,d,s),\]
  где $n$ --- параметр надежности (он же у нас будет длиной входа),
  $r_g$ --- строка случайных битов генератора,
  $e, d, s$ --- булевы схемы ($d$ --- [секретный] decryptor, $e$ --- [публичный] encryptor, $s$ --- [публичный] sampler),
\begin{itemize}
  \item $e\colon \; \{0,1\}^n \to \{0,1\}^{\epsilon(n)}$,
  \item $d\colon \; \{0,1\}^{\epsilon(n)} \to \{0,1\}^n$,
  \item $s(r_s) \in \{0,1\}^n$,
\end{itemize}
и
  \[\forall A \; \forall p \; \exists n \; \forall n>N \; \Pr \{A(1^n, e(x), s, e) \in e^{-1}(e(x))\} < \frac{1}{p(n)}\]
  (здесь $x=s(r_s)$; $(e,d,s)=G(1^n,r_g)$;
вероятность берется по $r_g$, $r_s$, случайным битам $A$),
  \[\forall x \in \Im s \quad d(e(x)) = x.\]
\end{definition}

Если из этого определения убрать $d$, то получим семейство односторонних функций (по умолчанию сильных).

На основе tdpf строятся криптосистемы с открытым ключом.

%\begin{exercise}
%  Показать, что ни из $e$, ни из $s$ не сделать $d$.
%\end{exercise}

\begin{exercise}
  Изменится ли что-то существенное, если $s$ станет функцией от $e$? 
\end{exercise}

\begin{exercise}
  А если никакого $s$ не будет (т.е. $s=\mathrm{Id}$)? 
\end{exercise}

\begin{exercise}
  Выполнить для tdpf те упражнения, что были для owff.
\end{exercise}

\begin{exercise}
  Что, если $d$ либо $e$ использует случайные биты и иногда ошибается?
\end{exercise}

\begin{example}[RSA]
  \[s(x) = x,\]
  \[e(x) = x^\epsilon \bmod n,\quad
    d(x) = x^\delta \bmod n,\]
  где\[\epsilon \cdot \delta \equiv 1 \pmod{(p-1)(q-1)},\]
  \[n = p	q, \quad p, q \in\mathbb{P}.\]
  Является ли такое семейство tdpf, неизвестно,
но на нём основаны реально использующиеся протоколы.
\end{example}

\section{Трудный бит}
Пусть $y = f(x)$; если противник не сможет вычислить $x$, но может, например, узнать все нечетные биты $y$, это также нехорошо.
\begin{definition}
  $B\colon\{0,1\}^n \to \{0,1\}$ называется \emph{трудным битом}\linebreak(\emph{hardcore predicate}) для функции $f$, если 
  \begin{equation}\label{eq:Bbreak}\forall k \; \forall A \; \exists N\;\forall n\!>\!N\ \ \Pr\{A(f(x)) = B(x)\} < \frac12 + \frac1{n^k},\end{equation}
  где $A$ --- вероятностный полиномиальный по времени противник, а вероятность в определении берется по его случайным числам и по $x\in\{0,1\}^n$.
\end{definition}

Оказывается, из любой инъективной owf можно
сделать такую (инъективную) owf, у которой есть трудный бит.
(В частности, это же можно проделать и для семейства перестановок с секретом.)

\begin{exercise}
Использует ли нижеприведённое
доказательство тот факт, что $|f(x)|=|f(x')|$, если $|x|=|x'|$?
\end{exercise}

\begin{theorem}[Голдрейха-Левина]
Если $f$ является инъективной owf,
то $\tilde f(x,r) = (f(x), r)$
тоже является односторонней и 
имеет трудный бит $B(x,r) = \langle x,r \rangle$, где
$\langle x,r \rangle = x_1r_1 \oplus x_2r_2 \oplus \ldots$.
\end{theorem}

\begin{proof}
Пусть мы умеем угадывать трудный бит. Построим противника, ломающего $f$. Казалось бы,
$$x_i = \langle f^{-1}(y), r \rangle \oplus \langle f^{-1}(y), r \oplus e_i \rangle = B(x,r) \oplus B(x, r \oplus e_i)$$
($r \oplus e_i$ означает, что мы поменяли $i$-й бит в $r$), так что мы можем угадать любой бит $x_i$ из $x$.
Однако правильное вычисление противником $B(x,r)$ и $B(x, r \oplus e_i)$ -- зависимые события.
Поэтому $B(x,r)$ мы не будем у него выяснять --- это один и тот же бит для всех $i$, и мы можем перебрать два его возможных значения.
А вот $B(x, r \oplus e_i)$ --- свой для каждого $i$.

На этом можно было бы уже остановиться, если бы нам не предстояло
уменьшать вероятность ошибки противника, повторяя его для разных $r$.
Это бы привело к очень большому перебору; поэтому мы будем проделывать
не совсем независимые эксперименты, выбрав лишь логарифмическое
число случайных строк $r^i$; благодаря приведённой ниже конструкции
мы сможем породить из них много попарно независимых строк,
трудные биты $B(x,r)$ для которых будут просто вычисляться через
перебираемые нами трудные биты для исходных $r^i$.

Что же касается $x$, мы можем безбоязненно повторять вычисления
для одного и того же $x$ (вернее, $f(x)$) несмотря на то, что
вероятность в определении трудного бита берётся по всем $x$.
Дело в том, что тех $x$, для которых вероятность успеха противника
достаточно велика, много, как доказывается в следующей лемме.

\begin{lemma}
  Пусть соперник ломает наш трудный бит с вероятностью $1/2+\epsilon$
(т.е., в терминах (\ref{eq:Bbreak}) $\epsilon=\epsilon(n)=1/n^k$).
  Пусть \[S_n = \{ x \mid \Pr\{ A(f(x), r) = B(x,r) \} \ge \frac12 + \frac\epsilon2\}.\]
  Тогда $|S_n| \ge \frac\epsilon2 \cdot 2^n$.%, т.е. множество $S_n$ не слишком мало по сравнению с множеством всех строк длины $n$.
\end{lemma}

\begin{proof}[Доказательство леммы]
  $$S(x) := \Pr\{ A(f(x), r) = B(x,r) \}$$
  $$|\overline{S_n}| = 2^n \Pr_x\left\{S(x) < \frac12 + \frac\epsilon2\right\} =
   2^n \Pr_x \left\{1 - S(x) \ge \frac12 - \frac\epsilon2 \right\}$$
  $$E(1 - S(x)) = 1 - \left( \frac12 + \epsilon\right) = \frac12 - \epsilon$$
  Неравенство Маркова:
  $$\Pr \{ \alpha > \alpha' \} \le \frac{E\alpha}{\alpha'},$$
  где $\alpha$ -- неотрицательная случайная величина.\nl
  У нас $E\alpha = \frac12 - \epsilon, \quad \alpha' = \frac12 - \frac\epsilon2$.
  $$2^n \frac{\frac12 - \epsilon}{\frac12 - \frac\epsilon2} = 2^n \frac{1-2\epsilon}{1-\epsilon} \le 2^n \left( 1 - \frac{\epsilon}{2} \right)$$
  Лемма доказана.
\end{proof}

Итак, опишем конструкцию, обращающую $f$ при помощи взломщика для $B$, формально.
Положим $l = (2k+2)\lceil \log_2 n\rceil$
(если вероятность успеха противника составляет $1/2+1/n^k$)
и выберем $l$ случайных строчек в соответствии с
равномерным распределением: $r^1, \ldots, r^l$.
Эти строки --- кандидаты на роль $r$.
Выберем также $l$ битов (обозначим их $\rho^1, \ldots, \rho^l$),
после чего проделаем следующее:
для всех непустых подмножеств $J$ множества $\{1, \ldots, l\}$ вычислим
\[r^J = \mathop{\oplus}\limits_{j \in J}r^j,\]\[\rho^J = \mathop{\oplus}\limits_{j \in J}\rho^j\]
(заметим, что если $\rho^j$ --- правильные биты для $r^j$,
то $\rho^J$ --- правильные биты для $r^J$),
и далее для всех $i$ вычислим
\[x_i^J = \rho^J \oplus \bar{B}(y, r^J \oplus \bar{e_i}),\]
\[x_i' = \mathop{\mathrm{maj}}\limits_J{x_i^J}.\]

\begin{lemma}\label{lem:pairwise}
Величины $r^J$ из доказательства теоремы
равномерно распределены и
попарно независимы.
\end{lemma}
\begin{proof}
То, что они равномерно распределены, очевидно.
Если $K\subseteq J$, то
\begin{multline*}
\mathbf{P}\{r^J=t,\ r^K=t'\} = \\ 
\mathbf{P}\{r^{J\setminus K}=t\oplus t',\ r^K=t'\} 
\ \mathop{=}\limits^{(J\setminus K) \cap K = \emptyset} \\
\mathbf{P}\{r^{J\setminus K}=t\oplus t'\}\cdot\mathbf{P}\{ r^K=t'\} 
\ \mathop{=}\limits^{\mbox{\scriptsize равномерно}\atop\mbox{\scriptsize распределены!}} \\
\mathbf{P}\{r^J=t\}\cdot\mathbf{P}\{ r^K=t'\}.\\
\end{multline*}
Значит, можно считать, что $J\setminus K\neq\emptyset$ и
$K\setminus J\neq\emptyset$.
Тогда
\begin{multline*}
\mathbf{P}\{r^J=t,\ r^K=t'\} = \\
\sum_{t''} \mathbf{P}\{r^J=t,\ r^K=t',\ r^{J\cap K}=t''\} = \\
\sum_{t''} \mathbf{P}\{r^{J\setminus K}=t,\ r^{K\setminus J}=t',\ r^{J\cap K}=t''\}=\\
\mathbf{P}\{r^{J\setminus K}=t\}\cdot\mathbf{P}\{r^{K\setminus J}=t'\}\cdot
\underbrace{\sum_{t''}\mathbf{P}\{r^{J\cap K}=t''\}}_1 
\ \mathop{=}\limits^{\mbox{\scriptsize равномерно}\atop\mbox{\scriptsize распределены!}} \\
\mathbf{P}\{r^J=t\}\cdot\mathbf{P}\{ r^K=t'\} .\\
\end{multline*}
\end{proof}

% \begin{lemma}
%   Для $J \ne K$ величины $r^J, r^K$ независимы, т.е.
%   $$\Pr\{r^J = t, r^K = t'\} = \Pr\{r^J = t\} \Pr\{r^K = t'\}.$$
% \end{lemma}
% \begin{proof} (леммы)
%   $$\Pr\{r^J = t, r^K = t'\} = 
%   \sum_{t''} \Pr\{ r^{J\setminus K} = \tilde t, r^{K\setminus J} = \tilde t', r^{J\cap K} = t''\} =$$
%   $$ = \Pr\{r^{J\setminus K} = \tilde t\} \Pr\{r^{K\setminus J} = \tilde t'\} 
%      \underbrace{\sum_{t''} \Pr\{r^{J\cap K} = t''\}}_{=1},$$
%   и при этом $\Pr\{r^X = t\} = \Pr\{r^Y = t'\} \quad \forall X, Y, t, t'$, поскольку распределение равномерно.\nl
%   Лемма доказана.
% \end{proof}


%Перебирая всевозможные значения $l$ битов $r$ (кроме всех нулевых битов), находим $x_i^J$ $2^l - 1$ способами (независимыми, как видно из предыдущей леммы).\nl
%После чего берем $x_i := {\rm maj}_J \; x_i^J$.\nl
Для фиксированного $i$ оценим вероятность того, что среди $x_i^J$ было больше половины правильных (т.е. что $x_i'=x_i$).
Обозначим через
\[\zeta_i^J = \{x_i = x_i^J\}\]
вероятность успеха в одном испытании (однократном вычислении $B(x,r')$).
%$\Im \zeta_i^J = \{0,1\}$; поскольку у нас one-way permutation, то $x_i^{true}$ единственный.\nl
Обозначим $m = 2^l - 1$.

\begin{lemma}
Для достаточно больших $n$
  $$\Pr \left\{ \sum_{J} \zeta_i^J \le \frac{m}2 \right\} < \frac1{2n}. $$
\end{lemma}
\begin{proof} 
  Вероятность успеха в одном испытании равна $\frac12 + \frac\epsilon2$, если $x \in S_n$ (а мы знаем, что $S_n$ достаточно велико и можно им ограничиться). Испытания попарно независимы, поэтому
  $$E \sum\zeta_i^J = m\left(\frac12 + \frac\epsilon2\right) \Rightarrow \frac{m}2 = E - \frac{m\epsilon}{2} $$
  Применим неравенство Чебышёва ($\Pr\left\{\alpha < E\alpha - \delta\right\} < \frac{D\alpha}{\delta^2}$):
  $$\Pr \left\{ \sum_{J} \zeta_i^J < E - \frac{m\epsilon}{2} \right\} < \frac{4 D\sum\zeta_i^J}{m^2 \epsilon^2} < \frac{4}{m\epsilon^2} \le\frac{4}{n^2}$$ для достаточно больших $n$ (здесь использовано, что
  благодаря попарной независимости $D\sum\zeta_i^J = m D\zeta_i^J < m$).
\end{proof}

  %В таком случае можно взять $m$ из условия $\frac{4}{m\epsilon^2} = \frac1{2n}$, т.е. $m = \frac{8n}{\epsilon^2}, \quad l = \log\left(\frac{8n}{\epsilon^2}\right)+1$.
И утверждение теоремы можно считать доказанным.

\end{proof}

\begin{exercise}
Убедиться, что утверждение теоремы выполнено и для неинъективной owf.
\end{exercise}

\begin{exercise}
Конструкция использует известную ей вероятность успеха противника;
как от этого избавиться?
\end{exercise}

\end{document}
