Односторонняя функция

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Question mark2.svg
Нерешённые проблемы информатики: ''Существуют ли односторонние функции ?''

Односторонняя функция (англ. one-way function, OWF) это функция, которая легко вычисляется для любого входного значения, но трудно найти аргумент по заданному значению функции. Здесь «легко» и «трудно» должны пониматься с точки зрения теории сложности вычислений. Разрыв между сложностью прямого и обратного преобразований определяет криптографическую эффективность односторонней функции. Неинъективность функции не является достаточным условием для того, чтобы называть её односторонней. Односторонние функции могут называться также трудно обратимыми или необратимыми.

Существование односторонних функций до сих пор не доказано. Их существование докажет, что классы сложности P и NP не равны, попутно разрешив ряд вопросов теоретической информатики. Современная асимметричная криптография основывается на предположении, что односторонние функции все-таки существуют.

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

Определение[править | править вики-текст]

Пусть  \{0, 1\}^n — множество всех двоичных строк длины n. Функция f: \{0, 1\}^* \rightarrow \{0, 1\}^* является односторонней функцией, если она эффективно вычисляется за полиномиальное время на детерминированной машине Тьюринга, но не существует полиномиальной вероятностной машины Тьюринга, которая обращает эту функцию с более чем экспоненциально малой вероятностью. То есть для любой вероятностной полиномиальной машины M, для любого полинома p(n) и достаточно большого n \in \mathbb{N} выполняется:

Pr[M(f(m)) \in f^{-1}(m)] < 1/p(n)

где строка m выбирается случайным образом на множестве \{0, 1\}^n в соответствии с равномерным законом распределения. Время работы машины M ограничено полиномом от длины искомого прообраза[1].

Существование[править | править вики-текст]

Существование односторонних функций не доказано. Если f является односторонней функцией, то нахождение обратной функции является трудновычислимой (по определению), но легкопроверяемой задачей (путем вычисления f на ней). Таким образом, из существования односторонней функции следует, что P ≠ NP. Однако, не известно, влечёт ли за собой P ≠ NP существование односторонних функций.

Существование односторонних функций повлечёт за собой существование многих других полезных криптографических объектов, в том числе:

Использование[править | править вики-текст]

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

Трудность задачи построения криптографических схем из односторонних функций можно пояснить на следующем примере. Пусть f — односторонняя функция и нам требуется построить криптосистему с секретным ключом. В такой криптосистеме имеется только один ключ — секретный, который известен и отправителю, и получателю шифрованного сообщения. Алгоритмы шифрования E_K и дешифрования D_K оба зависят от этого секретного ключа K и таковы, что D_K(E_K(m)) = m для любого открытого текста m. Ясно, что если криптограмму d сообщения m вычислять как d=f(m), то противник, перехвативший d, может вычислить m лишь с пренебрежимо малой вероятностью. Но во-первых, непонятно, каким образом сможет восстановить сообщение m из криптограммы законный получатель? Во-вторых, из того, что функция f односторонняя следует лишь, что противник не может вычислить все сообщение целиком. А это — весьма низкий уровень стойкости. Желательно, чтобы противник, знающий криптограмму d, не мог вычислить ни одного бита открытого текста.

Для решения первой проблемы были придуманы односторонние функции с потайным входом. Это специальный тип односторонней функции для которой легко вычислить f(m) по заданному m, трудно по известному f(m) вычислить m. Однако существует некоторая дополнительная секретная информация y, позволяющая при знании f(m) и y легко вычислить m.


Еще одним примером использования односторонних функций в криптографических схемах является следующая схема аутентификации:

Абонент A вырабатывает следующую последовательность сообщений: m_0, m_1=f(m_0), m_2=f(m_1) и т. д. m_{100}=f(m_{99}), где f(m) — односторонняя функция. Затем m_{100} передается по секретному каналу (или при встрече) абоненту B. Когда A необходимо подтвердить свою личность, он передаёт B по открытому каналу сообщение m_{99}. B проверяет: f(m_{99}) =? m_{100}. В следующий раз A передаст m_{98}, и B проверит: f(m_{98}) =? m_{99} и т. д. Перехват сообщений на i-ом этапе в открытом канале ничего не даст злоумышленнику, так как он не сможет получить соответствующее значение m_{i-1}, чтобы в следующий раз идентифицировать себя как абонента A. Такие схемы применяются для идентифкации «свой/чужой»[2].

Доказательство выполнения работы[править | править вики-текст]

Для защиты компьютерных систем от злоупотребления услугами запрашивающей стороне предлагается решить задачу, на поиск решения которой тратится достаточно много времени, а результат легко и быстро проверяется обслуживающей стороной. Примером такой защиты от СПАМа может служить система Hashcash (англ.)[3], которая использует хеш частичной инверсии при отправке электронной почты.

В системе Биткойн требуется, чтобы получаемая хеш-сумма была меньше специального параметра. Для поиска нужной хеш-суммы требуется её многократный пересчёт с перебором произвольных значений дополнительного параметра. На поиск одной хеш-суммы все компьютеры системы тратят примерно 10 минут, что регулирует скорость эмиссии новых биткойнов. Для проверки требуется лишь однократное вычисление хеша.

Стойкость криптографических схем[править | править вики-текст]

Существование односторонних функций является необходимым условием для стойкости многих типов криптографических схем. В некоторых случаях этот факт устанавливается достаточно просто. Рассмотрим функцию f такую, что f(r) = K_1. Она вычислима с помощью алгоритма G за полиномиальное время. Покажем, что если f не односторонняя функция, то криптосистема нестойкая. Предположим, что существует полиномиальный вероятностный алгоритм A, который инвертирует f с вероятностью по крайней мере 1/p(n) для некоторого полинома p. Здесь n — длина ключа K_1. Атакующий может подать на вход алгоритму A ключ K_1 и получить с указанной вероятностью некоторое значение r' из прообраза. Далее злоумышленник подает r' на вход алгоритма G и получает пару ключей (K_1, K'_2). Хотя K'_2 не обязательно совпадает с K_2, тем не менее, по определению криптосистемы D_{K_2'}(E_{K_1}(m)) = m для любого открытого текста m. Поскольку K'_2 найден с вероятностью по крайней мере 1/p(n), которая в криптографии не считается пренебрежимо малой, криптосистема нестойкая.

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

На настоящий момент доказано, что существование односторонних функций является необходимым и достаточным условием для существования стойких криптосистем с секретным ключом, а также стойких криптографических протоколов нескольких типов, включая протоколы электронной подписи. С другой стороны, имеется результат Импальяццо и Рудиха, который является достаточно сильным аргументом в пользу того, что для некоторых типов криптографических схем (включая протоколы распределения ключей типа Диффи-Хеллмана) требуются более сильные предположения, чем предположение о существовании односторонних функций[4].

Кандидаты в односторонние функции[править | править вики-текст]

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

Умножение и факторизация[править | править вики-текст]

Функция f принимает на вход два простых числа p и q в двоичном представлении и возвращает их произведение. Эта функция может быть вычислена за время порядка O(n^2), где n — общая длина (количество двоичных чисел) входных данных. Построение обратной функции требует нахождения множителей заданного целого числа N. Определение множителей является очень трудоёмкой вычислительной операцией. Для оценки сложности алгоритма, раскладывающего целое число N на простые множители, часто используют функцию:

L_N(\alpha, \beta) = exp((\beta + o(1)(\ln N)^\alpha(\ln \ln N)^{1 - \alpha}))

Если алгоритм имеет сложность O(L_N(0, \beta)), то ему требуется полиномиальное время на работу (размер задачи на входе, число бит числа, \ln N). При сложности O(L_N(1, \beta)) ему потребуется уже экспоненциальное время. Таким образом скорость роста функции L_N(\alpha, \beta) при 0 < \alpha < 1 лежит между полиномиальной и экспоненциальной. Поэтому про алгоритмы с такой сложностью говорят, что они требуют суб-экспоненциального времени[5].

Существует несколько методов факторизации числа N = p * q с простыми p и q. Некоторые из них:

  • Пробное деление — в этом алгоритме для всех простых чисел p, не превосходящих \sqrt{N}, проверяется условие N / p \in \mathbb Z. Такой алгоритм близок к полному перебору и имеет экспоненциальную сложность O(L_N(1, 1)).
  • Метод эллиптической кривой хорошо работает, если один из простых множителей p не превосходит 2^{50}. Его сложность оценивается как L_p(1 / 2, c).
  • Квадратичное решето, вероятно, наиболее быстрый способ разложения чисел, лежащих между 10^{80} и 10^{100}. Его сложность — L_p(1 / 2, 1).
  • Квадратичное решето в числовом поле. В настоящее время это наиболее успешный метод для чисел, насчитывающих 100 и более десятичных знаков. С его помощью можно разлагать на множители числа до 10^{155}, а его сложность оценивается как L_N(1/3,\;(64/9)^{\frac{1}{3}})[5].

Функция может быть обобщена на диапазон полупростых чисел. Заметим, что f не сможет быть односторонней для произвольных p, q > 1, так как их произведение с вероятностью ¾ имеет множитель 2.

Заметим, что факторизация с полиномиальной сложностью возможна на квантовом компьютере с помощью алгоритма Шора (класс BQP).

Возведение в квадрат и извлечение квадратного корня по модулю[править | править вики-текст]

Функция f принимает два целых числа: x и N, где N — произведение двух простых p и q. На выходе — остаток от деления x^2 на N. Нахождение обратной функции требует вычисления квадратного корня по модулю N, то есть нахождения x если известно y и то, что x^2 \bmod N = y. Можно показать, что последняя задача вычислительно так же сложна, как и разложение N на множители.

Криптосистема Рабина основывается на предположении, что функция Рабина является односторонней.

Дискретное экспоненцирование и логарифмирование[править | править вики-текст]

Функция дискретного экспоненцирования f принимает в качестве аргументов простое число p и целое x в интервале от 0 до p - 1 и возвращает остаток от деления некоторого A^x на p. Эта функция может быть легко вычислена за время O(n^3), где n — количество битов в p. Обращение этой функции требует вычисления дискретного логарифма по модулю p. Пусть (G, *) - конечная абелева группа, например мультипликативная группа конечного поля или эллиптическая кривая над конечным полем. Проблема вычисления дискретных логарифмов состоит в определении целого числа x, которое при данных A, B удовлетворяет соотношению:

A^x = B

Для некоторых групп G такая задача довольно проста. Например, если G - группа целых чисел по модулю N по сложению. Для других групп, однако, эта задача более сложная. Например, в мультипликативной группе конечного поля, наилучший из известных алгоритмов, решающий проблему дискретного логарифмирования, - это метод квадратичного решета в числовом поле. Сложность вычисления дискретных логарифмов в этом случае оценивается как L_N(1/3, c). Схема Эль-Гамаля основывается на этой проблеме[6].

Для групп, подобных эллиптической кривой, задача дискретного логарифмирования еще более трудна. Наилучший из доступных на сегодняшний день методов, вычисляющих дискретные логарифмы над общей эллиптической кривой над полем \mathbb F_q, называется ρ-метод Полларда. Его сложность O(L_N(1, 1/2)). Это экспоненциальный алгоритм, поэтому криптосистемы, основанные на эллиптической кривой, как правило, работают с малым ключом, около 160 бит. В то время как системы, отталкивающиеся от разложения на множители или вычисления дискретных логарифмов в конечных полях, используют ключи в 1024 бита[6].

С проблемой дискретного логарифмирования так же связано несколько близких задач. Пусть дана конечная абелева группа (G, *):

  • Задача Диффи-Хеллмана, которая состоит в следующем: даны элементы A \in G, B = A^x, C = A^y. Требуется вычислить D = A^{xy}.
  • Проблема выбора Диффи-Хеллмана. Дано: A \in G, B = A^x, C = A^y, D = A^z. Требуется определить, является ли z произведением x и y.

Можно показать что проблема выбора Диффи-Хеллмана не сложнее задачи Диффи-Хеллмана, а задача Диффи-Хеллмана не сложнее задачи вычисления дискретных логарифмов[6].

Криптографические хэш-функции[править | править вики-текст]

Существует множество криптографических хэш-функций (например, SHA 256), которые быстро вычисляются. Некоторые из более простых версий не проходили сложный анализ, но самые сильные версии продолжают предлагать быстрые практические решения для односторонних вычислений. Большая часть теоретической поддержки этих функций направлена на срыв некоторых из ранее проведенных успешных атак.

Другие претенденты[править | править вики-текст]

Другие претенденты в односторонние функции основываются на сложности декодирования случайных линейных кодов и иных задачах.

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

Ссылки[править | править вики-текст]