Односторонняя функция: различия между версиями
[отпатрулированная версия] | [непроверенная версия] |
Содержимое удалено Содержимое добавлено
Arzet Ro (обсуждение | вклад) |
Добавил информации из книжек. |
||
Строка 1:
{{unsolved|информатики|'''''Существуют ли односторонние функции ?'''''}}
'''Односторонняя функция''' ({{lang-en|one-way function, OWF}}) это функция, которая легко вычисляется для любого входного значения, но трудно найти аргумент по заданному значению функции. Здесь «легко» и «трудно» должны пониматься с точки зрения [[Теория сложности вычислений|теории сложности вычислений]]. Разрыв между сложностью прямого и обратного преобразований определяет криптографическую эффективность односторонней функции. [[Инъекция (математика)|Неинъективность функции]] не является достаточным условием для того, чтобы называть её односторонней. Односторонние функции могут называться также трудно обратимыми или необратимыми.
Существование односторонних функций до сих пор не доказано. Их существование докажет, что [[Равенство классов P и NP|классы сложности P и NP не равны]], попутно разрешив ряд вопросов теоретической [[Информатика|информатики]]. Современная [[асимметричная криптография]] основывается на предположении, что односторонние функции все-таки существуют.
Строка 8:
== Определение ==
:: <math>Pr[M(f(m)) \in f^{-1}(m)] < 1/p(n)</math>
где строка <math>m</math> выбирается случайным образом на множестве <math>\{0, 1\}^n</math> в соответствии с равномерным законом распределения. Время работы машины <math>M</math> ограничено полиномом от длины искомого прообраза.
== Существование ==
Строка 21 ⟶ 25 :
* [[Электронная цифровая подпись]].
== Использование ==
== Односторонние функции в криптографических схемах ==▼
Говорят, что односторонняя функция сохраняет длину, если битовая длина значения функции равна битовой длине аргумента. Такие функции используются, например, в псевдослучайных генераторах. Если битовая длина значения односторонней функции постоянна при любой длине аргумента, то она называется [[Криптографическая хеш-функция| хеш-функцией]]. Так, хеш-функция используется для хранения паролей или создания [[Электронная цифровая подпись|электронной подписи]].
Существование односторонних функций является необходимым условием для стойкости многих типов криптографических схем. В некоторых случаях этот факт устанавливается достаточно просто. Рассмотрим функцию ''f'' такую, что ''f(r) = K<sub>1</sub>''. Она вычислима с помощью алгоритма ''G'' за полиномиальное время. Покажем, что если ''f'' не односторонняя функция, то криптосистема нестойкая. Предположим, что существует полиномиальный вероятностный алгоритм ''A'', который инвертирует ''f'' с вероятностью по крайней мере ''1/p(n)'' для некоторого полинома ''p''. Здесь ''n'' — длина ключа <math>K_1</math>. Атакующий может подать на вход алгоритму ''A'' ключ <math>K_1</math> и получить с указанной вероятностью некоторое значение <math>r'</math> из прообраза. Далее злоумышленник подает <math>r'</math> на вход алгоритма ''G'' и получает пару ключей <math>(K_1, K'_2)</math>. Хотя <math>K'_2</math> не обязательно совпадает с <math>K_2</math>, тем не менее, по определению криптосистемы <math>D_{K_2'}(E_{K_1}(m)) = m</math> для любого открытого текста ''m''. Поскольку <math>K'_2</math> найден с вероятностью по крайней мере ''1/p(n)'', которая в криптографии не считается пренебрежимо малой, криптосистема нестойкая.▼
Для решения первой проблемы были придуманы [[Односторонняя функция с потайным входом|односторонние функции с потайным входом]]. Это специальный тип односторонней функции для которой легко вычислить <math>f(m)</math> по заданному <math>m</math>, трудно по известному <math>f(m)</math> вычислить <math>m</math>. Однако существует некоторая дополнительная секретная информация <math>y</math>, позволяющая при знании <math>f(m)</math> и <math>y</math> легко вычислить <math>m</math>.
Еще одним примером использования односторонних функций в криптографических схемах является следующая схема аутентификации:
Абонент <math>A</math> вырабатывает следующую последовательность сообщений: <math>m_0, m_1=f(m_0), m_2=f(m_1)</math> и т. д. <math>m_{100}=f(m_{99})</math>, где <math>f(m)</math> — односторонняя функция. Затем <math>m_{100}</math> передается по секретному каналу (или при встрече) абоненту <math>B</math>. Когда <math>A</math> необходимо подтвердить свою личность, он передаёт <math>B</math> по открытому каналу сообщение <math>m_{99}</math>. <math>B</math> проверяет: <math>f(m_{99}) =? m_{100}</math>. В следующий раз <math>A</math> передаст <math>m_{98}</math>, и <math>B</math> проверит: <math>f(m_{98}) =? m_{99}</math> и т. д. Перехват сообщений на i-ом этапе в открытом канале ничего не даст злоумышленнику, так как он не сможет получить соответствующее значение <math>m_{i-1}</math>, чтобы в следующий раз идентифицировать себя как абонента <math>A</math>. Такие схемы применяются для идентифкации «свой/чужой».
▲Существование односторонних функций является необходимым условием для стойкости многих типов криптографических схем. В некоторых случаях этот факт устанавливается достаточно просто. Рассмотрим функцию
Из всего сказанного следует, что предположение о существовании односторонних функций является самым слабым криптографическим предположением, которое может оказаться достаточным для доказательства существования стойких криптографических схем различных типов. На выяснение того, является ли это условие и в самом деле достаточным, направлены значительные усилия специалистов.
На настоящий момент доказано, что существование односторонних функций является необходимым и достаточным условием для существования стойких криптосистем с секретным ключом, а также стойких криптографических протоколов нескольких типов, включая протоколы электронной подписи, а также стойких криптографических протоколов нескольких типов, включая протоколы электронной подписи. С другой стороны, имеется результат Импальяццо и Рудиха, который является достаточно сильным аргументом в пользу того, что для некоторых типов криптографических схем (включая протоколы распределения ключей типа Диффи-Хеллмана) требуются более сильные предположения, чем предположение о существовании односторонних функций<ref name="limits"></ref>.
== Кандидаты в односторонние функции ==
Строка 32 ⟶ 48 :
=== Умножение и факторизация ===
Функция
:: <math>L_N(\alpha, \beta) = exp((\beta + o(1)(\ln N)^\alpha(\ln \ln N)^{1 - \alpha}))</math>
Если алгоритм имеет сложность <math>O(L_N(0, \beta))</math>, то ему требуется полиномиальное время на работу (размер задачи на входе, число бит числа, <math>\ln N</math>). При сложности <math>O(L_N(1, \beta))</math> ему потребуется уже экспоненциальное время. Таким образом скорость роста функции <math>L_N(\alpha, \beta)</math> при <math>0 < \alpha < 1</math> лежит между полиномиальной и экспоненциальной. Поэтому про алгоритмы с такой сложностью говорят, что они требуют суб-экспоненциального времени.
Существует несколько методов [[Факторизация|факторизации]] числа <math>N = p * q</math> с простыми <math>p</math> и <math>q</math>. Некоторые из них:
Функция может быть обобщена на диапазон [[Полупростое число|полупростых чисел]]. Заметим, что ''f'' не сможет быть односторонней для произвольных ''p'', ''q'' > 1, так как их произведение с вероятностью ¾ имеет множитель 2.▼
* ''Пробное деление'' — в этом алгоритме для всех простых чисел <math>p</math>, не превосходящих <math>\sqrt{N}</math>, проверяется условие <math>N / p \in \mathbb Z</math>. Такой алгоритм близок к полному перебору и имеет экспоненциальную сложность <math>O(L_N(1, 1))</math>.
* ''Метод эллиптической кривой'' хорошо работает, если один из простых множителей <math>p</math> не превосходит <math>2^{50}</math>. Его сложность оценивается как <math>L_p(1 / 2, c)</math>.
* ''Квадратичное решето'', вероятно, наиболее быстрый способ разложения чисел, лежащих между <math>10^{80}</math> и <math>10^{100}</math>. Его сложность — <math>L_p(1 / 2, 1)</math>.
* ''Квадратичное решето в числовом поле''. В настоящее время это наиболее успешный метод для чисел, насчитывающих 100 и более десятичных знаков. С его помощью можно разлагать на множители числа до <math>10^{155}</math>, а его сложность оценивается как <math>L_N(1/3,\;(64/9)^{\frac{1}{3}})</math>.
▲Функция может быть обобщена на диапазон [[Полупростое число|полупростых чисел]]. Заметим, что
Заметим, что факторизация с полиномиальной сложностью возможна на [[Квантовый компьютер|квантовом компьютере]] с помощью [[Алгоритм Шора|алгоритма Шора]] ([[класс BQP]]).
=== Возведение в квадрат и извлечение квадратного корня по модулю ===
Функция
[[Криптосистема Рабина]] основывается на предположении, что функция Рабина является односторонней.
=== Дискретное экспоненцирование и логарифмирование ===
Функция дискретного экспоненцирования
::<math>A^x = B</math>
Для некоторых групп <math>G</math> такая задача довольно проста. Например, если <math>G</math> - группа целых чисел по модулю <math>N</math> по сложению. Для других групп, однако, эта задача более сложная. Например, в мультипликативной группе конечного поля, наилучший из известных алгоритмов, решающий проблему дискретного логарифмирования, - это метод [[Общий метод решета числового поля|квадратичного решета в числовом поле]]. Сложность вычисления дискретных логарифмов в этом случае оценивается как <math>L_N(1/3, c)</math>. [[Схема Эль-Гамаля]] основывается на этой проблеме.
Для групп, подобных эллиптической кривой, задача дискретного логарифмирования еще более трудна. Наилучший из доступных на сегодняшний день методов, вычисляющих дискретные логарифмы над общей эллиптической кривой над полем <math>\mathbb F_q</math>, называется [[Ρ-метод Полларда дискретного логарифмирования|ρ-метод Полларда]]. Его сложность <math>O(L_N(1, 1/2))</math>. Это экспоненциальный алгоритм, поэтому криптосистемы, основанные на эллиптической кривой, как правило, работают с малым ключом, около 160 бит. В то время как системы, отталкивающиеся от разложения на множители или вычисления дискретных логарифмов в конечных полях, используют ключи в 1024 бита.
С проблемой дискретного логарифмирования так же связано несколько близких задач. Пусть дана конечная абелева группа <math>(G, *)</math>:
*''Задача Диффи-Хеллмана'', которая состоит в следующем: даны элементы <math>A \in G, B = A^x, C = A^y</math>. Требуется вычислить <math>D = A^{xy}</math>.
*''Проблема выбора Диффи-Хеллмана''. Дано: <math>A \in G, B = A^x, C = A^y, D = A^z</math>. Требуется определить, является ли <math>z</math> произведением <math>x</math> и <math>y</math>.
Можно показать что проблема выбора Диффи-Хеллмана не сложнее задачи Диффи-Хеллмана, а задача Диффи-Хеллмана не сложнее задачи вычисления дискретных логарифмов.
=== Криптографические хэш-функции ===
Строка 53 ⟶ 88 :
* [[Криптографическая хеш-функция]]
* [[Односторонняя функция с потайным входом]]
== Примечания ==
<references>
<ref name="limits">{{книга|автор = Russell Impagliazzo, Steven Rudich|заглавие = Private Information Retrieval Does Not Imply One-way Permutations|ссылка = http://www.csie.ntu.edu.tw/~lyuu/theses/thesis_r88067.pdf}}</ref>
</references>
== Ссылки ==
Строка 60 ⟶ 100 :
* {{cite book|author = [[Christos Papadimitriou]] | year = 1993 | title = Computational Complexity | publisher = Addison Wesley | edition = 1st edition | isbn = 0-201-53082-1 |chapter=Section 12.1: One-way functions |pages=279—298}}
* {{книга |заглавие=Введение в криптографию |ответственный=Под ред. В. В. Ященко |часть=[http://nature.web.ru/db/msg.html?mid=1157083&uri=node14.html Глава 2.3. Односторонние функции] |ссылка=http://nature.web.ru/db/msg.html?mid=1157083&uri=book.html}}
* {{книга |заглавие= Приложение теории детерминированного хаоса в криптографии |ответственный= Птицын Н |часть= Глава 2.5.2 Односторонняя функция |ссылка= http://www.reid.ru/books/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F%20%D0%B8%20%D1%81%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F/spec.lit/spechran/136-140/spec139/Pticin%20N.%20Prilozhenie%20teorii%20determinirovannogo%20haosa%20v%20kriptografii.%20(2002).pdf|ref = Птицын}}
* {{книга |заглавие=Криптография |ответственный=Смарт Н|часть=Глава 7.2 Односторонние функции |ссылка=https://ru.scribd.com/doc/38151420/%D0%A1%D0%BC%D0%B0%D1%80%D1%82-%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F-2005|isbn=5-94836-043-1}}
* {{cite web |url= http://netcode.ru/cpp/?artID=4010|title= Глава 4.1 Односторонние функции |accessdate=2014-10-09 |lang=рус.}}
[[Категория:Криптография]]
[[Категория:Нерешённые проблемы информатики]]
|