В теоретической информатике и криптографии функция -лазейка — это функция , которую легко вычислить в одном направлении, но трудно вычислить в противоположном направлении (найти ее обратную ) без специальной информации, называемой «лазейкой». Функции-лазейки являются частным случаем односторонних функций и широко используются в криптографии с открытым ключом . [2]
В математических терминах, если f — функция люка, то существует некоторая секретная информация t , такая, что при заданных f ( x ) и t легко вычислить x . Рассмотрим навесной замок и его ключ. Изменить положение замка с открытого на закрытое без использования ключа — тривиальная задача, просто вставив дужку в замковый механизм. Однако для легкого открытия замка требуется использовать ключ. Здесь ключ t — это люк, а замок — это функция люка.
Примером простого математического ловушки является «6895601 — произведение двух простых чисел. Что это за числа?» Типичным решением « грубой силы » будет попытка разделить 6895601 на множество простых чисел, пока не будет найден ответ. Однако, если кому-то скажут, что 1931 — одно из чисел, можно найти ответ, введя «6895601 ÷ 1931» в любой калькулятор. Этот пример не является надежной функцией ловушки — современные компьютеры могут угадать все возможные ответы в течение секунды — но эту задачу-образец можно улучшить, используя произведение двух гораздо больших простых чисел .
Функции с секретом приобрели известность в криптографии в середине 1970-х годов с публикацией асимметричных (или с открытым ключом) методов шифрования Диффи , Хеллмана и Меркла . Действительно, Диффи и Хеллман (1976) ввели этот термин. Было предложено несколько классов функций, и вскоре стало очевидно, что функции с секретом сложнее найти, чем изначально считалось. Например, одним из первых предложений было использовать схемы, основанные на задаче суммы подмножества . Довольно быстро это оказалось неподходящим.
По состоянию на 2004 год [обновлять]наиболее известными кандидатами на роль функций-лазеек (семейств) являются семейства функций RSA и Рабина . Оба записываются как возведение в степень по модулю составного числа, и оба связаны с проблемой разложения на простые множители .
Известно, что функции, связанные со сложностью задачи дискретного логарифмирования (либо по модулю простого числа, либо в группе, определенной над эллиптической кривой ), не являются функциями-ловушками, поскольку не существует известной информации о «ловушке» о группе, которая позволяла бы эффективно вычислять дискретные логарифмы.
Понятие «лазейка» в криптографии имеет очень конкретное вышеупомянутое значение и его не следует путать с « бэкдором» (они часто используются как взаимозаменяемые, что неверно). Бэкдор — это преднамеренный механизм, который добавляется к криптографическому алгоритму (например, алгоритму генерации пары ключей, алгоритму цифровой подписи и т. д.) или операционной системе, например, который позволяет одной или нескольким неавторизованным сторонам обойти или подорвать безопасность системы каким-либо образом.
Функция -ловушка — это набор односторонних функций { f k : D k → R k } ( k ∈ K ), в которых все K , D k , R k являются подмножествами двоичных строк {0, 1} * , удовлетворяющих следующим условиям:
Если каждая функция в приведенном выше наборе является односторонней перестановкой, то набор также называется перестановкой с люком . [6]
В следующих двух примерах мы всегда предполагаем, что сложно факторизовать большое составное число (см. Факторизация целых чисел ).
В этом примере обратная функция по модулю ( функция Эйлера от ) является лазейкой:
Если факторизация известна, то можно вычислить. При этом можно вычислить обратную величину , а затем, учитывая , можно найти . Его сложность следует из предположения RSA. [7]
Пусть будет большим составным числом, таким что , где и — большие простые числа, такие что , и хранятся в тайне от противника. Задача состоит в том, чтобы вычислить заданное таким образом, что . Секрет — это факторизация . С секретом решения z могут быть заданы как , где . Подробнее см. китайскую теорему об остатках . Обратите внимание, что для заданных простых чисел и мы можем найти и . Здесь условия и гарантируют, что решения и могут быть хорошо определены. [8]