
- •Раздел первый
- •Раздел второй
- •Раздел третий
- •Раздел четвертый
- •Раздел пятый
- •Раздел шестой
- •Раздел седьмой
- •Из последнего равенства аналогичным образом для некоторого целого неотрицательно-
- •Раздел восьмой
- •Раздел девятый
- •Решаем четыре системы сравнений
- •Раздел десятый
- •Раздел одиннадцатый
- •Раздел двенадцатый
- •Раздел тринадцатый
- •Раздел четырнадцатый
- •Раздел пятнадцатый
- •Раздел шестнадцатый
Раздел тринадцатый
1. Односторонние функции.
Здесь будут рассматриваться функции, областью определения и областью значений которых являются множества слов в некотором алфавите. Не ограничивая общности рассуждений можно считать, что это двоичный алфавит. Тогда одностороннюю функцию можно было бы определить как функцию, удовлетворяющую следующим двум условиям:
1) эффективно вычислима;
2)
любой эффективный алгоритм для
большинства аргументов
не в состоянии по образу
найти элемент
такой, что
.
Такое
пояснение кажется вполне понятным. В
качестве примера можно рассмотреть
функцию
.
Эта функция биективна, и условие 2)
означает, что обратная функция не может
быть вычислена эффективно для большинства
входов – утверждение, которое является
основанием для утверждений о стойкости
DES.
Математика требует формализации понятий.
При этом условия 1) и 2) приобретают
асимптотический характер и становятся
непригодными для характеризации
конкретных конечных функций. Не вдаваясь
в подробности строгого определения
этого понятия, выскажемся несколько
строже:
Определение. Функция f называется односторонней, если
1) вычисляется за полиномиальное время,
2) каждый полиномиальный вероятностный алгоритм на входе для случайного находит какой-либо из прообразов у с вероятностью, которая для достаточно больших n не превосходит 1/р(n) для любого полинома р(n).
Здесь вероятность распространяется на случайный выбор слова и на случайную последовательность вероятностного алгоритма. Заметим только, функция f еще должна не слишком сильно сжимать данные (т.е. быть «честной»).
Ни для какой конкретной функции не доказано, что она является односторонней. Но многие считаются практически таковыми и с успехом используются. В качестве примеров приведем следующие функции.
(i)
Функция умножения:
.
Функция определена на парах натуральных чисел х и у с одинаковым количеством значащих двоичных цифр.
(ii)
RSA-функция:
.
Функция
определена для
,
где р
и q
– различные простые нечетные, для е
такого, что
и для
Z
.
Для фиксированных е
и m
является биекцией Z
на себя.
(iii)
Функция Рабина:
.
Функция
определяется для
,
Z
,
где m
– целое Блюма, т.е. р
и q
– различные простые и
.
(iv)
Экспоненциальная функция:
.
Функция
определена для произвольного простого
р,
первообразного корня g
по
и
Z
.
Функции RSA и Рабина являються кандидатами в односторонние функции с секретом. Эти функции, кроме 1) и 2) , должны удовлетворять еще одному условию: это условие, являясь секретным, позволяет эффктивно вычислять обратные функции. В данном случае таким секретом является знание сомножителей р и q.
Можно
привести примеры применения односторонних
функций: 1) при организации парольного
доступа к базам данных в качестве пароля
может храниться в информационной системе
значение односторонней функции, так
что злоумышленнику, если он добудет
пароль
из справочника паролей придется решать
сложную задачу инвертирования
односторонней функции, чтобы найти
такое
,
которое бы удовлетворяло условию
и, введя которое, засвидетельствовать
о себе как о законном пользователе; 2)
при организации защиты конфиденциальности
переписки при помощи систем с открытым
ключом часто требуется построить большое
простое число р,
которое менеджер распределения ключей
может подобрать так, чтобы иметь
возможность доступа к переписке, поэтому
можно потребовать, чтобы менеджер вместе
с числом р
предъявлял бы еще и некоторое х
такое, что
для некоторой односторонней функции
f;
учитывая,
что х
и f(x)
имеют
одинаковую длину, то тестирование на
простоту числа f(x)
не усложняет общую задачу, и при
случайном выборе х
получаем случайное р.
Существование
односторонних функций является
необходимым условием стойкости многих
типов криптографических схем.
В некоторых случаях такой факт
устанавливается достаточно просто.
Рассмотрим пример. Пусть задана
криптосистема с открытым ключом. Алгоритм
генерации ключей G
в
ней общедоступен. Таким образом, всякий
желающий может подать ему на вход
случайную строку r
надлежащей длины
и получить
пару ключей
.
Открытый ключ
публикуется, а секретный ключ
и случайная строка r
хранятся тайно. Напомним, алгоритмы
зашифрования и расшифрования удовлетворяют
условию: для любого открытого сообщения
m
выполняется соотношение
.
Рассмотрим функцию f
такую, что
.
Она вычислима с помощью алгоритма G
за полиномиальное время. Покажем, что
если f
не односторонняя, то система нестойкая.
Предположим, что существует полиномиальный
вероятностный алгоритм А , который
инвертирует f
с вероятностью по крайней мере 1/р(n)
для некоторого полинома р,
где n
– длина ключа
.
Противник может подать на вход алгоритму
А ключ
и получить с указанной вероятностью
некоторое значение
из прообраза. Далее противник подает
на вход алгоритма G
и получает пару ключей
.
Хотя
необязательно совпадает с
,
тем не менее по определению криптосистемы
для любого открытого текста m.
Поскольку
найден с вероятностью по крайней мере
1/р(n),
которая в криптографии не считается
пренебрежительно малой, криптосистема
нестойкая.
Заметим, что для других криптологических систем подобный результат получается не столь просто. Существование односторонних функций является одним из слабейших условий, которые могут оказаться достаточными для доказательства существования стойких криптологических систем различных типов.
В настоящий момент доказано, что существование односторонних функций является необходимым и достаточным условием существования стойких криптосистем с секретным ключом, а также стойких криптографических протоколов нескольких типов, среди которых протоколы электронной подписи.
2. Хэш-функции.
Хэш-функция представляет собой криптографическую функцию от сообщений произвольной длины, значение которой зависит сложным образом от каждого бита сообщения. Хэш-функция реализуется обычно в виде некоторого итеративного механизма, который позволяет вычислить для сообщения М произвольной длины так называемый хэш-код Н(М) фиксированного размера n (обычно n = 128 бит). Этот код является подобием «слепка» сообщения М. В системах электронной цифровой подписи вместо подписывания сообщения (например, документов большого объема) используется подписывание соответствующего ему хэш-кода. Этот факт предъявляет к хэш-функциям следующие требования:
1) вычислительно неосуществимо нахождение сообщения М, хэш-код которого был бы равен заданному значению Н;
2)
вычислительно неосуществимо нахождение
двух сообщений
и
,
,
с равными значениями хэш-кодов, т.е.
удовлетворяющих условию
(
так называемая коллизия).
Невыполнение этих требований грозит возможностью подделки сообщения для выработанного хэш-кода.
Хэш-функция, построенная на базе итеративного механизма, аналитически записывается в виде:
где
– некоторое специфицированное начальное
значение, h
– некоторая легко вычислимая функция
шифрования,
– текущий блок сообщения. Сообщение М
представляется в виде конкатенации t
блоков одинакового размера:
.
Значение
принимается за значение хєш-функции,
которое можно записать в виде
,
чтобы подчеркнуть зависимость Н
от начального параметра
.
Известно,
что если какая-либо атака может быть
предпринята против базовой функции h,
то эта же атака может быть предпринята
и против итеративной функции Н,
причем сложности атак в обоих случаях
одинаковы. Это значит, что необходимо
применение криптографически стойких
базовых функций. Для построения последних
часто используют блочные шифры.
Современные блочные шифры являются
стойкими к атаке с известным открытым
текстом. Поэтому, если использовать
блок
в качестве ключа, то по значениям
(это сообщение является входным для
шифрующей функции) и
(результат шифрующего преобразования)
вычислительно неосуществимо нахождение
значения
,
однако возможны атаки, использующие
парадокс дней рождения.
Парадокс
дней рождения состоит в ответе на
следующий вопрос. Какой должна быть
численность группы случайно выбранных
людей, чтобы с вероятностью ½ в этой
группе нашлось два человека с одинаковым
днем рождения? Оказывается, что численность
такой группы должна составлять примерно
19 человек. Дело в том, что вероятность
совпадения дней рождения для случайной
пары равна
,
а в группе из n
человек
имеется
разных пар. Вероятность того, что хотя
бы у одной из этих пар будет иметь место
совпадение дней рождения, составляет
,
откуда для р = ½ получаем
.
Покажем,
что использование 64-битового хэш-кода
недопустимо, поскольку в этом случае
возможна следующая атака. Выберем
достаточно длинное сообщение М
и вычислим для него следующие
промежуточных значений хэш-функции:
.
В
соответствии с парадоксом дней рождения
с вероятностью ½ среди этих значений
найдутся два равных. Пусть это будут
и
.
Удалив из М
блоки
,
получаем новое сообщение
,
которое имеет значение хэш-функции,
равное значению хэш-функции сообщения
М.
Легко видеть, что сложность этой атаки
составляет около
операций шифрования n-битовых
блоков. В случае
получаем
шифрований.
Важным применением хэш-функций является контроль целостности информации, например, программ и данных в ЭВМ. В случае, когда речь идет о контроле целостности больших объемов информации, становится актуальной проблема разработки скоростных хэш-функций.
В качестве примера одной из известных хэш-функций укажем на SHA, построенную в США и используемую, в частности, в американском стандарте цифровой подписи DSA (или DSS).