Опубликован: 28.11.2014 | Уровень: для всех | Доступ: свободно | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 4:

Алгоритмы асимметричного шифрования

Основные требования к алгоритмам асимметричного шифрования

Разработка алгоритмов асимметричного шифрования является величайшим и, возможно, единственным действительно революционным достижением в истории криптографии.

Алгоритмы асимметричного шифрования, называемые также алгоритмами с открытым ключом, принципиально отличаются от алгоритмов симметричного шифрования. Шифрование с открытым ключом является асимметричным, поскольку использует два различных ключа для шифрования и расшифрования, в отличие от симметричного шифрования, в котором для шифрования и расшифрования используется один и тот же ключ. Алгоритмы с открытым ключом гораздо больше основаны на свойствах математических функций, чем алгоритмы симметричного шифрования, использующие в основном только операции подстановки и перемещения. Наличие двух ключей имеет важное применение в таких областях, как аутентификация, распределение ключа и конфиденциальность.

Алгоритмы с открытым ключом разрабатывались для того, чтобы решить две наиболее трудные задачи, возникшие при использовании симметричного шифрования.

Первой задачей является распределение ключа. При симметричном шифровании требуется, чтобы обе стороны уже имели общий ключ, который каким-то образом должен быть им заранее передан. Диффи, один из основоположников шифрования с открытым ключом, заметил, что это требование отрицает всю суть криптографии, основное назначение которой поддерживать секретность коммуникаций.

Второй задачей является необходимость создания таких механизмов, при использовании которых невозможно было бы подменить кого-либо из участников, т.е. нужен аналог подписи, которая используется в реальном мире. Такой аналог обычно называется цифровой или электронной подписью (англ. вариант – Digital Signature). При использовании коммуникаций для решения широкого круга задач, например в коммерческих и частных целях, электронные сообщения и документы должны иметь эквивалент подписи, содержащейся в бумажных документах. Необходимо создать метод, при использовании которого все участники будут убеждены, что электронное сообщение было послано конкретным участником. Это более сильное требование, чем аутентификация с использованием пароля или общего секрета.

Диффи и Хеллман достигли значительных результатов, предложив способ решения обеих задач, который радикально отличается от всех предыдущих подходов к шифрованию.

Сначала рассмотрим общие черты алгоритмов шифрования с открытым ключом и требования к этим алгоритмам. Определим требования, которым должен соответствовать алгоритм, использующий один ключ для шифрования, другой ключ - для расшифрования, и при этом вычислительно невозможно определить ключ расшифрования, зная только алгоритм и ключ шифрования.

Кроме того, некоторые алгоритмы, например RSA, имеют следующее свойство: каждый из двух ключей может использоваться как для шифрования, так и для расшифрования.

Сначала рассмотрим алгоритмы, обладающие обеими характеристиками, а затем перейдем к алгоритмам открытого ключа, которые не обладают вторым свойством.

При описании симметричного шифрования и шифрования с открытым ключом будем использовать следующую терминологию. Ключ, используемый в симметричном шифровании, будем называть секретным ключом. Два ключа, используемые при шифровании с открытым ключом, будем называть открытым ключом (Key Public – KU) и закрытым ключом (Key Private – KR). Закрытый ключ держится в секрете, но называть его будем закрытым ключом, а не секретным, чтобы избежать путаницы с ключом, используемым в симметричном шифровании. Закрытый ключ будем обозначать KR, открытый ключ - KU.

Будем предполагать, что все участники имеют доступ к открытым ключам друг друга, а закрытые ключи создаются локально каждым участником и, следовательно, распределяться не должны.

В любое время участник может изменить свой закрытый ключ и опубликовать составляющий пару открытый ключ, заменив им старый открытый ключ.

Диффи и Хеллман описывают требования, которым должен удовлетворять алгоритм шифрования с открытым ключом.

  1. Вычислительно легко создавать пару (открытый ключ KU, закрытый ключ KR).
  2. Вычислительно легко, имея открытый ключ и незашифрованное сообщение М, создать соответствующее зашифрованное сообщение:
    С = Е_K_U [М]
  3. Вычислительно легко расшифровать сообщение, используя закрытый ключ:
    М = D_K_R [C] = D_K_R [E_K_U [M]]
  4. Вычислительно невозможно, зная открытый ключ KU, определить закрытый ключ KR.
  5. Вычислительно невозможно, зная открытый ключ KU и зашифрованное сообщение С, восстановить исходное сообщение М.

    Можно добавить шестое требование, хотя оно не выполняется для всех алгоритмов с открытым ключом:

  6. Шифрующая и расшифровывающая функции могут применяться в любом порядке:
    М = Е_K_U [D_K_R [M]]

Это достаточно сильные требования, которые вводят понятие односторонней функции с люком. Односторонней функцией называется такая функция, у которой каждый аргумент имеет единственное обратное значение, при этом вычислить саму функцию легко, а вычислить обратную функцию трудно.

Y = f (X)– вычислительно легко

X = f-1 (Y)– вычислительно трудно

В данном случае термин "вычислительно легко" означает полиномиальную сложность от длины входа. Таким образом, если алгоритму на вход подается значение длиной n битов, то время вычисления функции пропорционально na, где а – фиксированная константа. Таким образом, говорят, что алгоритм принадлежит классу полиномиальных алгоритмов Р. Термин "вычислительно трудно" означает более сложное понятие. В общем случае будем считать, что проблему решить невозможно, если усилия для ее решения больше полиномиального времени от величины входа. Например, если длина входа n битов, и время вычисления функции пропорционально 2n, то это считается вычислительно невозможной задачей. К сожалению, тяжело определить, проявляет ли конкретный алгоритм такую сложность. Более того, традиционные представления о вычислительной сложности фокусируются на поведении алгоритмов в худшем случае или в среднем случае. Это неприемлемо для криптографии, где требуется невозможность инвертировать функцию для всех или почти всех значений входов.

Вернемся к определению односторонней функции с люком, которую, подобно односторонней функции, легко вычислить в одном направлении и трудно вычислить в обратном направлении до тех пор, пока недоступна некоторая дополнительная информация. При наличии этой дополнительной информации инверсную функцию можно вычислить за полиномиальное время. Таким образом, односторонняя функция с люком принадлежит семейству односторонних функций fk таких, что

Y = fk (X) - легко, если k и Х известны

X = fk-1 (Y) - легко, если k и Y известны

Х = fk-1 (Y) - трудно, если Y известно, но k неизвестно

Мы видим, что разработка конкретного алгоритма с открытым ключом зависит от открытия соответствующей односторонней функции с люком.