Одностороннюю функцию по вполне понятным соображениям невозможно использовать в качестве шифровального устройства, так как , хотя f(X) -- надежно зашифрованное сообщение Х, никто (даже законный получатель) не сможет восстановить Х. Существует способ, позволяющий обойти эту трудность с помощью так называемой функции с закрытыми дверями. Такова, например, функция
100 120 E:F -->F ,имеющая обратную функцию
120 100 D:F -->F ,где обе функции D и Е легко вычислимы. Узнать обратную функцию по Е невозможно: до тех пор, пока вам не сообщат, что функция, обратная Е, существует, Е воспринимается как односторонняя функция. Функцию Е можно использовать для шифровки, а обратную функцию D -- для дешифровки, так как при всех Х из
Кроме того, свойство закрытых дверей подразумевает, что тот, кто знает, как кодировать, не обязательно должен знать, как декодировать.
Зная, как найти функции с закрытыми дверями, мы можем построить криптосистему с общественным ключом. Предположим, что существует группа людей, желающих беседовать друг с другом конфидециально. Каждый i член группы выбирает функцию с закрытыми дверями Еi , имеющую обратную функцию Di . Функции Еi перечисляют в общедоступном справочнике, в то время как "свою" обратную функцию Di каждый хранит в тайне. Если член j группы желает послать сообщение Х члену i группы, он просто передает