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